From e03a41144a5b726438c0fd67cd27ae151acfb7b8 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sat, 22 Nov 2025 13:00:09 -0500 Subject: [PATCH] tui: keep assistant footer from crashing after compaction --- .../src/cli/cmd/tui/routes/session/index.tsx | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) 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 71c171b0d..c333406e4 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -860,11 +860,6 @@ export function Session() { item.id === (message as AssistantMessage).parentID, - ) as UserMessage - } last={lastAssistant()?.id === message.id} message={message as AssistantMessage} parts={sync.data.part[message.id] ?? []} @@ -998,10 +993,19 @@ function UserMessage(props: { ) } -function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; last: boolean; user: UserMessage }) { +function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; last: boolean }) { const local = useLocal() const { theme } = useTheme() - const ctx = use() + const sync = useSync() + const messages = createMemo(() => sync.data.message[props.message.sessionID] ?? []) + + const duration = createMemo(() => { + if (!props.message.time.completed) return 0 + const user = messages().find((x) => x.role === "user" && x.id === props.message.parentID) + if (!user) return 0 + return props.message.time.completed - user.time.created + }) + return ( <> @@ -1047,10 +1051,7 @@ function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; las {Locale.titlecase(props.message.mode)}{" "} ⬝{props.message.modelID} - - {" "} - ⬝{Locale.duration(props.message.time.completed! - props.user.time.created)} - + ⬝{Locale.duration(duration())}