tui: improve message display and add finish reason tracking

This commit is contained in:
Dax Raad 2025-09-23 19:07:58 -04:00
parent 05ca287a1c
commit a3358089cd
4 changed files with 11 additions and 13 deletions

View file

@ -232,10 +232,15 @@ function AssistantMessage(props: { message: AssistantMessage; parts: Part[] }) {
borderColor={Theme.backgroundElement}
>
<text fg={local.agent.color(props.message.mode)}>{Locale.titlecase(props.message.mode)}</text>
<text fg={Theme.textMuted}>
{props.message.providerID}/{props.message.modelID}
<Shimmer text={`${props.message.providerID}/${props.message.modelID}`} color={Theme.text} />
</box>
</Show>
<Show when={props.message.time.completed && props.message.finish === "stop"}>
<box paddingLeft={3}>
<text marginTop={1}>
<span style={{ fg: local.agent.color(props.message.mode) }}>{Locale.titlecase(props.message.mode)}</span>{" "}
<span style={{ fg: Theme.textMuted }}>{props.message.providerID + "/" + props.message.modelID}</span>
</text>
<Shimmer text={props.message.summary ? "Compacting..." : "Generating..."} color={Theme.text} />
</box>
</Show>
</>
@ -264,19 +269,9 @@ function resize(el: BoxRenderable) {
}
function TextPart(props: { part: TextPart; message: AssistantMessage }) {
const sync = useSync()
const agent = createMemo(() => sync.data.agent.find((x) => x.name === props.message.mode)!)
const local = useLocal()
return (
<box paddingLeft={3} marginTop={1} flexShrink={0}>
<text>{props.part.text.trim()}</text>
<Show when={props.message.time.completed}>
<text>
<span style={{ fg: local.agent.color(agent().name) }}>{Locale.titlecase(agent().name)}</span>{" "}
<span style={{ fg: Theme.textMuted }}>{props.message.providerID + "/" + props.message.modelID}</span>
</text>
</Show>
</box>
)
}

View file

@ -282,6 +282,7 @@ export namespace MessageV2 {
cwd: z.string(),
root: z.string(),
}),
finish: z.string().optional(),
summary: z.boolean().optional(),
cost: z.number(),
tokens: z.object({

View file

@ -1080,6 +1080,7 @@ export namespace SessionPrompt {
case "finish":
assistantMsg.time.completed = Date.now()
assistantMsg.finish = value.finishReason
await Session.updateMessage(assistantMsg)
break

View file

@ -624,6 +624,7 @@ export type AssistantMessage = {
cwd: string
root: string
}
finish?: string
summary?: boolean
cost: number
tokens: {