From b986a45a8a3f8bd6a0b169ecae631a8141fed794 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Fri, 26 Sep 2025 04:59:15 -0400 Subject: [PATCH] tui: improve prompt submission and token display formatting --- .../opencode/src/cli/cmd/tui/component/prompt.tsx | 3 +++ .../src/cli/cmd/tui/routes/session/header.tsx | 9 +++++---- .../opencode/src/cli/cmd/tui/routes/session/index.tsx | 11 +++++++++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt.tsx index 2ea2cb6eb..4dff5cbb5 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt.tsx @@ -18,6 +18,7 @@ import { Clipboard } from "@/util/clipboard" export type PromptProps = { sessionID?: string + onSubmit?: () => void } type Prompt = { @@ -164,6 +165,7 @@ export function Prompt(props: PromptProps) { input: "", parts: [], }) + props.onSubmit?.() return } const parts = store.parts @@ -193,6 +195,7 @@ export function Prompt(props: PromptProps) { ], }, }) + props.onSubmit?.() }} ref={(r) => (input = r)} onMouseDown={(r) => r.target?.focus()} diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx index 041130340..908363471 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx @@ -30,10 +30,11 @@ export function Header() { const total = last.tokens.input + last.tokens.output + last.tokens.reasoning + last.tokens.cache.read + last.tokens.cache.write const model = sync.data.provider.find((x) => x.id === last.providerID)?.models[last.modelID] - return { - total: Locale.number(total), - percentage: (model ? Locale.number(Math.round((total / model.limit.context) * 100)) : "0") + "%", + let result = Locale.number(total) + if (model?.limit.context) { + result += "/" + Math.round((total / model.limit.context) * 100) + "%" } + return result }) return ( @@ -54,7 +55,7 @@ export function Header() { - {context()!.total}/{context()!.percentage} ({cost()}) + {context()} ({cost()}) 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 cc863953b..ef14d8001 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -35,12 +35,14 @@ export function Session() { const session = createMemo(() => sync.session.get(route.sessionID)!) const messages = createMemo(() => sync.data.message[route.sessionID] ?? []) const todo = createMemo(() => sync.data.todo[route.sessionID] ?? []) - let scroll: ScrollBoxRenderable createEffect(() => sync.session.sync(route.sessionID)) + const sdk = useSDK() + let scroll: ScrollBoxRenderable const keybind = useKeybind() + useKeyboard((evt) => { if (keybind.match("messages_page_up", evt)) scroll.scrollBy(-scroll.height / 2) if (keybind.match("messages_page_down", evt)) scroll.scrollBy(scroll.height / 2) @@ -142,7 +144,12 @@ export function Session() { - + { + scroll.scrollTo(scroll.scrollHeight) + }} + sessionID={route.sessionID} + />