fix(workbench): use single timing source for code agent duration (#2048)

This commit is contained in:
Lyon
2026-06-24 15:53:54 +08:00
committed by GitHub
parent e0ad20edc9
commit d1bb34c360
@@ -393,25 +393,17 @@ function ceilDisplayDurationSecond(ms: number): number {
}
function sealedTerminalRecordedDurationMs(message: ChatMessage, timing: ChatMessage["timing"]): number | null {
const messageRecord = message as Record<string, unknown>;
const trace = message.runnerTrace as Record<string, unknown> | null | undefined;
const traceTiming = trace?.timing as Record<string, unknown> | null | undefined;
const messageHasTerminalTimestamp = timestampMs(timing?.finishedAt ?? message.finishedAt ?? messageRecord.completedAt) !== null;
const traceHasTerminalTimestamp = timestampMs(traceTiming?.finishedAt ?? trace?.finishedAt ?? traceTiming?.completedAt ?? trace?.completedAt) !== null;
void message;
const messageHasTerminalTimestamp = timestampMs(timing?.finishedAt) !== 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<string, unknown>;
const trace = message.runnerTrace as Record<string, unknown> | null | undefined;
const traceTiming = trace?.timing as Record<string, unknown> | null | undefined;
const startedAt = timestampMs(timing?.startedAt ?? message.startedAt ?? traceTiming?.startedAt ?? trace?.startedAt);
const endedAt = timestampMs(timing?.finishedAt ?? message.finishedAt ?? messageRecord.completedAt ?? traceTiming?.finishedAt ?? trace?.finishedAt ?? traceTiming?.completedAt ?? trace?.completedAt);
void message;
const startedAt = timestampMs(timing?.startedAt);
const endedAt = timestampMs(timing?.finishedAt);
if (startedAt === null || endedAt === null || endedAt < startedAt) return null;
return Math.trunc(endedAt - startedAt);
}