From d60102ba52e4e9db8dcc454d720c9488e542038e Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 15:16:35 -0600 Subject: [PATCH] Added `/thinking` slash command to toggle thinking blocks visibility in OpenTUI. (#4424) Co-authored-by: opencode-agent[bot] Co-authored-by: rekram1-node Co-authored-by: Aiden Cline --- .../cli/cmd/tui/component/prompt/autocomplete.tsx | 5 +++++ .../src/cli/cmd/tui/routes/session/index.tsx | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx index cb7be2f4..b9b27bb1 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx @@ -245,6 +245,11 @@ export function Autocomplete(props: { description: "jump to message", onSelect: () => command.trigger("session.timeline"), }, + { + display: "/thinking", + description: "toggle thinking blocks", + onSelect: () => command.trigger("session.toggle.thinking"), + }, ) if (sync.data.config.share !== "disabled") { results.push({ diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 40ecfe4e..3676c955 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -82,6 +82,7 @@ class CustomSpeedScroll implements ScrollAcceleration { const context = createContext<{ width: number conceal: () => boolean + showThinking: () => boolean }>() function use() { @@ -112,6 +113,7 @@ export function Session() { const dimensions = useTerminalDimensions() const [sidebar, setSidebar] = createSignal<"show" | "hide" | "auto">(kv.get("sidebar", "auto")) const [conceal, setConceal] = createSignal(true) + const [showThinking, setShowThinking] = createSignal(true) const wide = createMemo(() => dimensions().width > 120) const sidebarVisible = createMemo(() => sidebar() === "show" || (sidebar() === "auto" && wide())) @@ -385,6 +387,15 @@ export function Session() { dialog.clear() }, }, + { + title: "Toggle thinking blocks", + value: "session.toggle.thinking", + category: "Session", + onSelect: (dialog) => { + setShowThinking((prev) => !prev) + dialog.clear() + }, + }, { title: "Page up", value: "session.page.up", @@ -674,6 +685,7 @@ export function Session() { return contentWidth() }, conceal, + showThinking, }} > @@ -1030,7 +1042,7 @@ function ReasoningPart(props: { last: boolean; part: ReasoningPart; message: Ass const ctx = use() const content = createMemo(() => props.part.text.trim()) return ( - +