diff options
| author | Dax Raad <[email protected]> | 2025-11-22 12:53:08 -0500 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-11-22 12:54:02 -0500 |
| commit | 78a6325b64951cbe4498ae48bf9e82d94c7d71f0 (patch) | |
| tree | ae858784abcedfdfbf179e0f4b4988b35f649f19 /packages | |
| parent | c96923d2c973bce828aa32f211abd7d3f210c362 (diff) | |
| download | opencode-78a6325b64951cbe4498ae48bf9e82d94c7d71f0.tar.gz opencode-78a6325b64951cbe4498ae48bf9e82d94c7d71f0.zip | |
improve model footer
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/routes/session/index.tsx | 23 | ||||
| -rw-r--r-- | packages/opencode/src/util/locale.ts | 22 |
2 files changed, 37 insertions, 8 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 f5224b2f9..71c171b0d 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -860,6 +860,11 @@ 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] ?? []} @@ -993,7 +998,7 @@ function UserMessage(props: { ) } -function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; last: boolean }) { +function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; last: boolean; user: UserMessage }) { const local = useLocal() const { theme } = useTheme() const ctx = use() @@ -1038,13 +1043,15 @@ function AssistantMessage(props: { message: AssistantMessage; parts: Part[]; las > <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.modelID} - {ctx.showTimestamps() && - props.message.time.completed && - ` · ${Locale.todayTimeOrDateTime(props.message.time.completed)}`} - </span> + <span style={{ fg: local.agent.color(props.message.mode) }}>▣</span>{" "} + <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> + </Show> </text> </box> </Match> diff --git a/packages/opencode/src/util/locale.ts b/packages/opencode/src/util/locale.ts index e567d5763..653da09a0 100644 --- a/packages/opencode/src/util/locale.ts +++ b/packages/opencode/src/util/locale.ts @@ -37,6 +37,28 @@ export namespace Locale { return num.toString() } + export function duration(input: number) { + if (input < 1000) { + return `${input}ms` + } + if (input < 60000) { + return `${(input / 1000).toFixed(1)}s` + } + if (input < 3600000) { + const minutes = Math.floor(input / 60000) + const seconds = Math.floor((input % 60000) / 1000) + return `${minutes}m ${seconds}s` + } + if (input < 86400000) { + const hours = Math.floor(input / 3600000) + const minutes = Math.floor((input % 3600000) / 60000) + return `${hours}h ${minutes}m` + } + const hours = Math.floor(input / 3600000) + const days = Math.floor((input % 3600000) / 86400000) + return `${days}d ${hours}h` + } + export function truncate(str: string, len: number): string { if (str.length <= len) return str return str.slice(0, len - 1) + "…" |
