fix(workbench): prefer durable terminal duration

This commit is contained in:
lyon
2026-06-22 05:28:50 +08:00
parent e7b6fb9639
commit fe1f8cf6b3
@@ -255,7 +255,7 @@ function traceForDisplay(message: ChatMessage): ChatMessage["runnerTrace"] {
function messageDurationMeta(message: ChatMessage): { text: string; label: string } | null {
if (message.role !== "agent") return null;
const timing = messageTimingForDisplay(message);
const rawDurationMs = isRunningMessage(message) ? durationSince(timing?.startedAt) : finiteDurationMs(timing?.durationMs);
const rawDurationMs = isRunningMessage(message) ? durationSince(timing?.startedAt) : terminalMessageDurationMs(message, timing);
if (rawDurationMs === null) return null;
const durationMs = isRunningMessage(message) ? monotonicDisplayDurationMs(message, rawDurationMs) : sealedDisplayDurationMs(message, rawDurationMs);
const value = formatDuration(durationMs);
@@ -289,9 +289,14 @@ function messageActivityMeta(message: ChatMessage): { text: string; label: strin
}
function messageTimingForDisplay(message: ChatMessage): ChatMessage["timing"] {
if (!isRunningMessage(message)) return message.timing ?? message.runnerTrace?.timing ?? null;
return message.runnerTrace?.timing ?? message.timing ?? null;
}
function terminalMessageDurationMs(message: ChatMessage, timing: ChatMessage["timing"]): number | null {
return finiteDurationMs(message.durationMs) ?? finiteDurationMs(timing?.durationMs) ?? finiteDurationMs(message.runnerTrace?.durationMs);
}
function durationSince(timestamp: unknown): number | null {
const startedAtMs = timestampMs(timestamp);
return startedAtMs === null ? null : Math.max(0, nowMs.value - startedAtMs);