diff --git a/web/hwlab-cloud-web/src/components/workbench/ConversationPanel.vue b/web/hwlab-cloud-web/src/components/workbench/ConversationPanel.vue index 2264a6c6..da9108db 100644 --- a/web/hwlab-cloud-web/src/components/workbench/ConversationPanel.vue +++ b/web/hwlab-cloud-web/src/components/workbench/ConversationPanel.vue @@ -307,13 +307,27 @@ function messageTimingForDisplay(message: ChatMessage): ChatMessage["timing"] { } function terminalMessageDurationMs(message: ChatMessage, timing: ChatMessage["timing"]): number | null { - const recorded = maxPositiveDurationMs(message.durationMs, timing?.durationMs, message.runnerTrace?.durationMs, message.runnerTrace?.timing?.durationMs); - if (recorded !== null) return recorded; const elapsed = elapsedTerminalDurationMs(message, timing); if (elapsed !== null && elapsed > 0) return elapsed; + const recorded = sealedTerminalRecordedDurationMs(message, timing); + if (recorded !== null) return recorded; return null; } +function sealedTerminalRecordedDurationMs(message: ChatMessage, timing: ChatMessage["timing"]): number | null { + const messageRecord = message as Record; + const trace = message.runnerTrace as Record | null | undefined; + const traceTiming = trace?.timing as Record | null | undefined; + const messageHasTerminalTimestamp = timestampMs(timing?.finishedAt ?? message.finishedAt ?? messageRecord.completedAt) !== null; + const traceHasTerminalTimestamp = timestampMs(traceTiming?.finishedAt ?? trace?.finishedAt ?? traceTiming?.completedAt ?? trace?.completedAt) !== null; + return maxPositiveDurationMs( + messageHasTerminalTimestamp ? message.durationMs : null, + messageHasTerminalTimestamp ? timing?.durationMs : null, + traceHasTerminalTimestamp ? message.runnerTrace?.durationMs : null, + traceHasTerminalTimestamp ? message.runnerTrace?.timing?.durationMs : null + ); +} + function elapsedTerminalDurationMs(message: ChatMessage, timing: ChatMessage["timing"]): number | null { const messageRecord = message as Record; const trace = message.runnerTrace as Record | null | undefined;