summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-11-22 13:00:09 -0500
committeropencode <[email protected]>2025-11-22 18:00:54 +0000
commite03a41144a5b726438c0fd67cd27ae151acfb7b8 (patch)
tree7380b211eac71160a4f31d0db2193ee11aa8bfb5
parent37bb07e7a313d7150038061dbba670410eb0469d (diff)
downloadopencode-e03a41144a5b726438c0fd67cd27ae151acfb7b8.tar.gz
opencode-e03a41144a5b726438c0fd67cd27ae151acfb7b8.zip
tui: keep assistant footer from crashing after compaction
-rw-r--r--packages/opencode/src/cli/cmd/tui/routes/session/index.tsx23
1 files 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() {
</Match>
<Match when={message.role === "assistant"}>
<AssistantMessage
- user={
- messages().findLast(
- (item) => 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 (
<>
<For each={props.parts}>
@@ -1047,10 +1051,7 @@ function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; las
<span style={{ fg: theme.text }}>{Locale.titlecase(props.message.mode)}</span>{" "}
<span style={{ fg: theme.textMuted }}>⬝{props.message.modelID}</span>
<Show when={props.message.time.completed}>
- <span style={{ fg: theme.textMuted }}>
- {" "}
- ⬝{Locale.duration(props.message.time.completed! - props.user.time.created)}
- </span>
+ <span style={{ fg: theme.textMuted }}> ⬝{Locale.duration(duration())}</span>
</Show>
</text>
</box>