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} + + - - ) - }} - + ) + }} + +