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 42ac5fbe080a..0aa1e61d7852 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx @@ -23,6 +23,7 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) { const [expanded, setExpanded] = createStore({ mcp: true, diff: true, + skill: true, todo: true, lsp: true, }) @@ -60,6 +61,22 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) { } }) + const skills = createMemo(() => { + const seen = new Set() + return messages() + .toReversed() + .flatMap((msg) => sync.data.part[msg.id] ?? []) + .flatMap((part) => { + if (part.type !== "tool" || part.tool !== "skill") return [] + const name = part.state.input.name + if (typeof name !== "string") return [] + if (!name.trim() || seen.has(name)) return [] + seen.add(name) + return [name] + }) + .slice(0, 10) + }) + const directory = useDirectory() const kv = useKV() @@ -167,6 +184,39 @@ export function Sidebar(props: { sessionID: string; overlay?: boolean }) { + 0}> + + skills().length > 2 && setExpanded("skill", !expanded.skill)} + > + 2}> + {expanded.skill ? "▼" : "▶"} + + + Skills + + ({skills().length} used) + + + + + + {(item) => ( + + + • + + + {item} + + + )} + + + +