From 63bfe767200f4caf9a6c808af085e293f9816e99 Mon Sep 17 00:00:00 2001 From: Dax Date: Wed, 26 Nov 2025 20:11:39 -0500 Subject: [PATCH] tui design refinement (#4809) --- .opencode/opencode.jsonc | 8 +- packages/opencode/src/cli/cmd/tui/app.tsx | 53 +-- .../cli/cmd/tui/component/dialog-provider.tsx | 13 + .../cmd/tui/component/prompt/autocomplete.tsx | 5 + .../cli/cmd/tui/component/prompt/index.tsx | 13 +- .../src/cli/cmd/tui/context/directory.ts | 12 + .../opencode/src/cli/cmd/tui/routes/home.tsx | 52 +-- .../src/cli/cmd/tui/routes/session/footer.tsx | 37 ++ .../src/cli/cmd/tui/routes/session/header.tsx | 93 +++-- .../src/cli/cmd/tui/routes/session/index.tsx | 37 +- .../cli/cmd/tui/routes/session/sidebar.tsx | 333 +++++++++++------- 11 files changed, 389 insertions(+), 267 deletions(-) create mode 100644 packages/opencode/src/cli/cmd/tui/context/directory.ts create mode 100644 packages/opencode/src/cli/cmd/tui/routes/session/footer.tsx diff --git a/.opencode/opencode.jsonc b/.opencode/opencode.jsonc index dd5a4c750..369832f9f 100644 --- a/.opencode/opencode.jsonc +++ b/.opencode/opencode.jsonc @@ -2,7 +2,7 @@ "$schema": "https://opencode.ai/config.json", "plugin": ["opencode-openai-codex-auth"], // "enterprise": { - // "url": "http://localhost:3000", + // "url": "https://enterprise.dev.opencode.ai", // }, "provider": { "opencode": { @@ -11,4 +11,10 @@ }, }, }, + "mcp": { + "exa": { + "type": "remote", + "url": "https://mcp.exa.ai/mcp", + }, + }, } diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 7c72274ad..5ec737256 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -452,51 +452,14 @@ function App() { } }} > - - - - - - - - - - - - - - open - - code{" "} - - v{Installation.VERSION} - - - - {process.cwd().replace(Global.Path.home, "~")} - {sync.data.vcs?.branch ? `:${sync.data.vcs.branch}` : ""} - - - - - - - tab - - {""} - - {local.agent.current().name.toUpperCase()} - AGENT - - - - + + + + + + + + ) } diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx index 109d4d25a..30a8bb2fc 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-provider.tsx @@ -197,11 +197,24 @@ function ApiMethod(props: ApiMethodProps) { const dialog = useDialog() const sdk = useSDK() const sync = useSync() + const { theme } = useTheme() return ( + + OpenCode Zen gives you access to all the best coding models at the cheapest prices with a single API key. + + + Go to https://opencode.ai/zen to get a key + + + ) : undefined + } onConfirm={async (value) => { if (!value) return sdk.client.auth.set({ 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 8371c395f..4232f3ae8 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx @@ -292,6 +292,11 @@ export function Autocomplete(props: { description: "open editor", onSelect: () => command.trigger("prompt.editor", "prompt"), }, + { + display: "/connect", + description: "connect to a provider", + onSelect: () => command.trigger("provider.connect"), + }, { display: "/help", description: "show help", diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx index 90fb4c982..06e9a49e6 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx @@ -637,11 +637,7 @@ export function Prompt(props: PromptProps) { flexGrow={1} >