diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-status.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-status.tsx index 6fc354b92..8833886f2 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-status.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-status.tsx @@ -1,57 +1,52 @@ import { TextAttributes } from "@opentui/core" import { Theme } from "../context/theme" -import { useSDK } from "../context/sdk" import { useSync } from "@tui/context/sync" -import { createResource, For, Match, Switch } from "solid-js" +import { For, Match, Switch, Show } from "solid-js" export type DialogStatusProps = {} export function DialogStatus() { - const sdk = useSDK() const sync = useSync() - const [mcp] = createResource(async () => { - const result = await sdk.mcp.status() - return result.data - }) - return ( Status esc - - {Object.values(mcp() ?? {}).length} MCP Servers - - {([key, item]) => ( - - - • - - - {key}{" "} - - - Connected - {(val) => val().error} - Disabled in configuration - - - - - )} - - + 0}> + + {Object.keys(sync.data.mcp).length} MCP Servers + + {([key, item]) => ( + + + • + + + {key}{" "} + + + Connected + {(val) => val().error} + Disabled in configuration + + + + + )} + + + {sync.data.lsp.length > 0 && ( {sync.data.lsp.length} LSP Servers diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index b4202e255..45e8a3d20 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -9,6 +9,7 @@ import type { Command, Permission, LspStatus, + McpStatus, } from "@opencode-ai/sdk" import { createStore, produce, reconcile } from "solid-js/store" import { useSDK } from "@tui/context/sdk" @@ -38,6 +39,9 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ [messageID: string]: Part[] } lsp: LspStatus[] + mcp: { + [key: string]: McpStatus + } }>({ config: {}, ready: false, @@ -50,6 +54,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ message: {}, part: {}, lsp: [], + mcp: {}, }) const sdk = useSDK() @@ -206,6 +211,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ sdk.config.get().then((x) => setStore("config", x.data!)), sdk.command.list().then((x) => setStore("command", x.data ?? [])), sdk.lsp.status().then((x) => setStore("lsp", x.data!)), + sdk.mcp.status().then((x) => setStore("mcp", x.data!)), ]).then(() => setStore("ready", true)) const result = { 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 62887dd0f..48910dfb3 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx @@ -1,13 +1,11 @@ import { useSync } from "@tui/context/sync" -import { createMemo, For, Show, createResource, Switch, Match } from "solid-js" +import { createMemo, For, Show, Switch, Match } from "solid-js" import { Theme } from "../../context/theme" -import { useSDK } from "../../context/sdk" import { Locale } from "@/util/locale" import type { AssistantMessage } from "@opencode-ai/sdk" export function Sidebar(props: { sessionID: string }) { const sync = useSync() - const sdk = useSDK() const session = createMemo(() => sync.session.get(props.sessionID)!) const todo = createMemo(() => sync.data.todo[props.sessionID] ?? []) const messages = createMemo(() => sync.data.message[props.sessionID] ?? []) @@ -26,11 +24,6 @@ export function Sidebar(props: { sessionID: string }) { return [...result.values()].sort((a, b) => a.length - b.length) }) - const [mcp] = createResource(async () => { - const result = await sdk.mcp.status() - return result.data - }) - const cost = createMemo(() => { const total = messages().reduce((sum, x) => sum + (x.role === "assistant" ? x.cost : 0), 0) return new Intl.NumberFormat("en-US", { @@ -70,39 +63,41 @@ export function Sidebar(props: { sessionID: string }) { {context()?.percentage ?? 0}% used {cost()} spent - - - MCP - - - {([key, item]) => ( - - - • - - - {key}{" "} - - - Connected - {(val) => {val().error}} - Disabled in configuration - - - - - )} - - + 0}> + + + MCP + + + {([key, item]) => ( + + + • + + + {key}{" "} + + + Connected + {(val) => {val().error}} + Disabled in configuration + + + + + )} + + + 0}>