diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
index 8374f701..ee83a3af 100644
--- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
+++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx
@@ -1,5 +1,5 @@
import { useSync } from "@tui/context/sync"
-import { createMemo, For, Show, Switch, Match } from "solid-js"
+import { createMemo, For, Show, Switch, Match, createSignal } from "solid-js"
import { useTheme } from "../../context/theme"
import { Locale } from "@/util/locale"
import path from "path"
@@ -13,6 +13,11 @@ export function Sidebar(props: { sessionID: string }) {
const todo = createMemo(() => sync.data.todo[props.sessionID] ?? [])
const messages = createMemo(() => sync.data.message[props.sessionID] ?? [])
+ const [mcpExpanded, setMcpExpanded] = createSignal(true)
+ const [diffExpanded, setDiffExpanded] = createSignal(true)
+ const [todoExpanded, setTodoExpanded] = createSignal(true)
+ const [lspExpanded, setLspExpanded] = createSignal(true)
+
const cost = createMemo(() => {
const total = messages().reduce((sum, x) => sum + (x.role === "assistant" ? x.cost : 0), 0)
return new Intl.NumberFormat("en-US", {
@@ -55,110 +60,130 @@ export function Sidebar(props: { sessionID: string }) {
0}>
-
- MCP
-
-
- {([key, item]) => (
-
-
- •
-
-
- {key}{" "}
-
-
- Connected
- {(val) => {val().error}}
- Disabled in configuration
-
-
-
-
- )}
-
+ setMcpExpanded(!mcpExpanded())}>
+ {mcpExpanded() ? "▼" : "▶"}
+
+ MCP
+
+
+
+
+ {([key, item]) => (
+
+
+ •
+
+
+ {key}{" "}
+
+
+ Connected
+ {(val) => {val().error}}
+ Disabled in configuration
+
+
+
+
+ )}
+
+
0}>
-
- LSP
-
-
- {(item) => (
-
-
- •
-
-
- {item.id} {item.root}
-
-
- )}
-
+ setLspExpanded(!lspExpanded())}>
+ {lspExpanded() ? "▼" : "▶"}
+
+ LSP
+
+
+
+
+ {(item) => (
+
+
+ •
+
+
+ {item.id} {item.root}
+
+
+ )}
+
+
0}>
-
- Todo
-
-
- {(todo) => (
-
- [{todo.status === "completed" ? "✓" : " "}] {todo.content}
-
- )}
-
+ setTodoExpanded(!todoExpanded())}>
+ {todoExpanded() ? "▼" : "▶"}
+
+ Todo
+
+
+
+
+ {(todo) => (
+
+ [{todo.status === "completed" ? "✓" : " "}] {todo.content}
+
+ )}
+
+
0}>
-
- Modified Files
-
-
- {(item) => {
- const file = createMemo(() => {
- const splits = item.file.split(path.sep).filter(Boolean)
- const last = splits.at(-1)!
- const rest = splits.slice(0, -1).join(path.sep)
- return Locale.truncateMiddle(rest, 30 - last.length) + "/" + last
- })
- return (
-
-
- {file()}
-
-
-
- +{item.additions}
-
-
- -{item.deletions}
-
+ setDiffExpanded(!diffExpanded())}>
+ {diffExpanded() ? "▼" : "▶"}
+
+ Modified Files
+
+
+
+
+ {(item) => {
+ const file = createMemo(() => {
+ const splits = item.file.split(path.sep).filter(Boolean)
+ const last = splits.at(-1)!
+ const rest = splits.slice(0, -1).join(path.sep)
+ return Locale.truncateMiddle(rest, 30 - last.length) + "/" + last
+ })
+ return (
+
+
+ {file()}
+
+
+
+ +{item.additions}
+
+
+ -{item.deletions}
+
+
-
- )
- }}
-
+ )
+ }}
+
+