diff --git a/internal/cloud/workbench-projection-writer.ts b/internal/cloud/workbench-projection-writer.ts index 65a55cb7..046c2abe 100644 --- a/internal/cloud/workbench-projection-writer.ts +++ b/internal/cloud/workbench-projection-writer.ts @@ -240,8 +240,10 @@ function buildWorkbenchProjectionFacts({ traceId = null, ownerUserId = null, own const agentRun = payload?.agentRun ?? session?.agentRun ?? null; const timestamp = timestampValue(payload?.updatedAt ?? session?.updatedAt ?? payload?.createdAt ?? session?.createdAt); const normalizedStatus = normalizeWorkbenchStatus(payload?.status ?? session?.sessionStatus ?? status); - const terminal = TERMINAL_STATUSES.has(normalizedStatus); const projection = createWorkbenchTurnProjection({ traceId: safeId, result: payload, session: { id: resolvedSessionId, status: normalizedStatus, session }, trace: payload?.runnerTrace ?? null }); + const projectedStatus = normalizeWorkbenchStatus(projection.status ?? normalizedStatus); + const terminal = projection.terminal === true || TERMINAL_STATUSES.has(projectedStatus) || TERMINAL_STATUSES.has(normalizedStatus); + const terminalStatus = terminal ? (TERMINAL_STATUSES.has(projectedStatus) ? projectedStatus : normalizedStatus) : projectedStatus; const timing = projectionTimingForStatus(projection.timing, terminal); const diagnostic = projectionDiagnostics({ traceId: safeId, result: payload, trace: payload?.runnerTrace ?? null, projection }); const finalText = finalResponseTextValue(projection.finalResponse, payload?.finalResponse, session?.finalResponse, payload?.assistantText); @@ -251,7 +253,7 @@ function buildWorkbenchProjectionFacts({ traceId = null, ownerUserId = null, own conversationId: resolvedConversationId, threadId: resolvedThreadId, terminal, - terminalStatus: projection.status ?? normalizedStatus, + terminalStatus, finalText, timestamp, timing @@ -264,7 +266,7 @@ function buildWorkbenchProjectionFacts({ traceId = null, ownerUserId = null, own projectId: projectId ?? session?.projectId ?? payload?.projectId ?? params?.projectId ?? null, conversationId: resolvedConversationId, threadId: resolvedThreadId, - status: terminal ? normalizedStatus : "running", + status: terminal ? terminalStatus : "running", lastTraceId: safeId, projectedSeq: nonNegativeInteger(projection.lastProjectedSeq), sourceSeq: nonNegativeInteger(projection.lastProjectedSeq),