mirror of
https://github.com/sst/opencode.git
synced 2025-12-23 10:11:41 +00:00
tui: improve message display and add finish reason tracking
This commit is contained in:
parent
05ca287a1c
commit
a3358089cd
4 changed files with 11 additions and 13 deletions
|
|
@ -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>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -1080,6 +1080,7 @@ export namespace SessionPrompt {
|
|||
|
||||
case "finish":
|
||||
assistantMsg.time.completed = Date.now()
|
||||
assistantMsg.finish = value.finishReason
|
||||
await Session.updateMessage(assistantMsg)
|
||||
break
|
||||
|
||||
|
|
|
|||
|
|
@ -624,6 +624,7 @@ export type AssistantMessage = {
|
|||
cwd: string
|
||||
root: string
|
||||
}
|
||||
finish?: string
|
||||
summary?: boolean
|
||||
cost: number
|
||||
tokens: {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue