From e30e9e84aa3ba1d1bd3610088812eed4b94fd669 Mon Sep 17 00:00:00 2001 From: lyon Date: Sun, 21 Jun 2026 03:08:14 +0800 Subject: [PATCH] fix: keep turn timing independent from sessions --- internal/cloud/workbench-turn-projection.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/internal/cloud/workbench-turn-projection.ts b/internal/cloud/workbench-turn-projection.ts index 42ae0c69..d81dd0a8 100644 --- a/internal/cloud/workbench-turn-projection.ts +++ b/internal/cloud/workbench-turn-projection.ts @@ -48,7 +48,10 @@ export function createWorkbenchTurnTimingProjection({ result = null, session = n const firstEvent = events[0] ?? null; const lastEvent = traceLastEvent(trace); const terminalEvent = terminalTraceEventForTiming(events); - const directTiming = objectValue(result?.timing) ?? objectValue(trace?.timing) ?? objectValue(session?.timing) ?? null; + // Session lifecycle timing is not turn timing authority. Mixing session + // startedAt/createdAt with turn terminal duration makes the running timer + // jump backwards when the turn completes. + const directTiming = objectValue(result?.timing) ?? objectValue(trace?.timing) ?? null; const agentRun = objectValue(result?.agentRun ?? trace?.agentRun); const traceSummary = objectValue(result?.traceSummary ?? trace?.traceSummary); const sessionSnapshot = objectValue(session?.session); @@ -63,11 +66,7 @@ export function createWorkbenchTurnTimingProjection({ result = null, session = n agentRun?.startedAt, firstEvent?.startedAt, firstEvent?.createdAt, - firstEvent?.occurredAt, - session?.startedAt, - session?.createdAt, - sessionSnapshot?.startedAt, - sessionSnapshot?.createdAt + firstEvent?.occurredAt ); const lastEventAt = firstTimestamp( result?.lastEventAt,