From e36c80dd4e653504645ddddc8cde325c29b77d3b Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sat, 1 Nov 2025 13:17:54 -0400 Subject: [PATCH] sync --- packages/opencode/src/cli/cmd/tui/app.tsx | 3 +- .../cli/cmd/tui/component/dialog-status.tsx | 21 +++++--- .../src/cli/cmd/tui/context/theme.tsx | 53 +++++++++---------- .../src/cli/cmd/tui/routes/session/index.tsx | 14 ++--- .../cli/cmd/tui/routes/session/sidebar.tsx | 14 ++--- 5 files changed, 56 insertions(+), 49 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index 23a236272..03b840e85 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -82,7 +82,7 @@ async function getTerminalBackgroundColor(): Promise<"dark" | "light"> { timeout = setTimeout(() => { cleanup() resolve("dark") - }, 5000) + }, 1000) }) } @@ -97,6 +97,7 @@ export function tui(input: { // promise to prevent immediate exit return new Promise(async (resolve) => { const mode = await getTerminalBackgroundColor() + console.log(mode) const routeData: Route | undefined = input.sessionID ? { 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 e958580e0..d1ef5ca56 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-status.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-status.tsx @@ -14,12 +14,14 @@ export function DialogStatus() { return ( - Status + + Status + esc 0} fallback={No MCP Servers}> - {Object.keys(sync.data.mcp).length} MCP Servers + {Object.keys(sync.data.mcp).length} MCP Servers {([key, item]) => ( @@ -35,7 +37,7 @@ export function DialogStatus() { > • - + {key}{" "} @@ -52,7 +54,7 @@ export function DialogStatus() { {sync.data.lsp.length > 0 && ( - {sync.data.lsp.length} LSP Servers + {sync.data.lsp.length} LSP Servers {(item) => ( @@ -67,7 +69,7 @@ export function DialogStatus() { > • - + {item.id} {item.root} @@ -75,9 +77,12 @@ export function DialogStatus() { )} - 0} fallback={No Formatters}> + 0} + fallback={No Formatters} + > - {enabledFormatters().length} Formatters + {enabledFormatters().length} Formatters {(item) => ( @@ -89,7 +94,7 @@ export function DialogStatus() { > • - + {item.name} diff --git a/packages/opencode/src/cli/cmd/tui/context/theme.tsx b/packages/opencode/src/cli/cmd/tui/context/theme.tsx index 20002d704..102263bcb 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/theme.tsx @@ -83,37 +83,36 @@ type ThemeJson = { theme: Record } -export const THEMES: Record = { - aura: resolveTheme(aura), - ayu: resolveTheme(ayu), - catppuccin: resolveTheme(catppuccin), - cobalt2: resolveTheme(cobalt2), - dracula: resolveTheme(dracula), - everforest: resolveTheme(everforest), - github: resolveTheme(github), - gruvbox: resolveTheme(gruvbox), - kanagawa: resolveTheme(kanagawa), - material: resolveTheme(material), - matrix: resolveTheme(matrix), - monokai: resolveTheme(monokai), - nord: resolveTheme(nord), - ["one-dark"]: resolveTheme(onedark), - opencode: resolveTheme(opencode), - palenight: resolveTheme(palenight), - rosepine: resolveTheme(rosepine), - solarized: resolveTheme(solarized), - synthwave84: resolveTheme(synthwave84), - tokyonight: resolveTheme(tokyonight), - vesper: resolveTheme(vesper), - zenburn: resolveTheme(zenburn), +export const THEMES: Record = { + aura, + ayu, + catppuccin, + cobalt2, + dracula, + everforest, + github, + gruvbox, + kanagawa, + material, + matrix, + monokai, + nord, + ["one-dark"]: onedark, + opencode, + palenight, + rosepine, + solarized, + synthwave84, + tokyonight, + vesper, + zenburn, } -function resolveTheme(theme: ThemeJson) { +function resolveTheme(theme: ThemeJson, mode: "dark" | "light") { const defs = theme.defs ?? {} function resolveColor(c: ColorValue): RGBA { if (typeof c === "string") return c.startsWith("#") ? RGBA.fromHex(c) : resolveColor(defs[c]) - // TODO: support light theme when opentui has the equivalent of lipgloss.AdaptiveColor - return resolveColor(c.light) + return resolveColor(c[mode]) } return Object.fromEntries( Object.entries(theme.theme).map(([key, value]) => { @@ -632,7 +631,7 @@ export const { use: useTheme, provider: ThemeProvider } = createSimpleContext({ const [theme, setTheme] = createSignal(sync.data.config.theme ?? kv.get("theme", "opencode")) const values = createMemo(() => { - return THEMES[theme()] ?? THEMES.opencode + return resolveTheme(THEMES[theme()] ?? THEMES.opencode, props.mode) }) return { diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 7eb05cd4e..422ca3a89 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -641,7 +641,7 @@ function UserMessage(props: { borderColor={color()} flexShrink={0} > - {text()?.text} + {text()?.text} @@ -652,7 +652,7 @@ function UserMessage(props: { return theme.secondary }) return ( - + {" "} {MIME_BADGE[file.mime] ?? file.mime}{" "} @@ -667,7 +667,7 @@ function UserMessage(props: { - + {sync.data.config.username ?? "You"}{" "} - {props.part.text.trim()} + {props.part.text.trim()} @@ -1131,6 +1131,7 @@ ToolRegistry.register({ container: "block", render(props) { const ctx = use() + const { theme } = useTheme() const style = createMemo(() => (ctx.width > 120 ? "split" : "stacked")) @@ -1210,7 +1211,7 @@ ToolRegistry.register({ - {props.permission["diff"]?.trim()} + {props.permission["diff"]?.trim()} @@ -1237,6 +1238,7 @@ ToolRegistry.register({ name: "patch", container: "block", render(props) { + const { theme } = useTheme() return ( <> @@ -1244,7 +1246,7 @@ ToolRegistry.register({ - {props.output?.trim()} + {props.output?.trim()} 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 380d82964..c63297db2 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/sidebar.tsx @@ -42,7 +42,7 @@ export function Sidebar(props: { sessionID: string }) { - + {session().title} @@ -50,7 +50,7 @@ export function Sidebar(props: { sessionID: string }) { - + Context {context()?.tokens ?? 0} tokens @@ -59,7 +59,7 @@ export function Sidebar(props: { sessionID: string }) { 0}> - + MCP @@ -77,7 +77,7 @@ export function Sidebar(props: { sessionID: string }) { > • - + {key}{" "} @@ -96,7 +96,7 @@ export function Sidebar(props: { sessionID: string }) { 0}> - + LSP @@ -123,7 +123,7 @@ export function Sidebar(props: { sessionID: string }) { - + Modified Files @@ -155,7 +155,7 @@ export function Sidebar(props: { sessionID: string }) { 0}> - + Todo