diff --git a/internal/cloud/server-workbench-http.ts b/internal/cloud/server-workbench-http.ts index d6acfda9..a3db622f 100644 --- a/internal/cloud/server-workbench-http.ts +++ b/internal/cloud/server-workbench-http.ts @@ -1837,6 +1837,11 @@ function turnSnapshot({ projection, result, session, trace }) { assistantMessageId: assistantMessage?.messageId ?? null, assistantText: finalText ?? null, finalResponse: projection.finalResponse ?? null, + timing: projection.timing ?? null, + startedAt: projection.timing?.startedAt ?? null, + lastEventAt: projection.timing?.lastEventAt ?? null, + finishedAt: projection.timing?.finishedAt ?? null, + durationMs: projection.timing?.durationMs ?? null, agentRun: result?.agentRun ?? null, trace: { traceId, diff --git a/web/hwlab-cloud-web/src/stores/workbench.ts b/web/hwlab-cloud-web/src/stores/workbench.ts index 0811428b..fe4d4867 100644 --- a/web/hwlab-cloud-web/src/stores/workbench.ts +++ b/web/hwlab-cloud-web/src/stores/workbench.ts @@ -1215,7 +1215,7 @@ function nonBlockingProjection(projection: ProjectionDiagnostic | null): Project if (!traceId) return; if (!shouldApplyActiveTraceAuthority(traceId, traceResultSessionId(turn))) return; const status = firstNonEmptyString(turn.status) ?? undefined; - applyTurnStatusSnapshot(traceId, { traceId, status, running: turn.running === true, terminal: turn.terminal === true, sessionId: firstNonEmptyString(turn.sessionId) ?? undefined, threadId: firstNonEmptyString(turn.threadId) ?? undefined, agentRun: turn.agentRun as AgentRunProvenance | undefined } as AgentChatResultResponse); + applyTurnStatusSnapshot(traceId, { ...turn, traceId, status, running: turn.running === true, terminal: turn.terminal === true, sessionId: firstNonEmptyString(turn.sessionId) ?? undefined, threadId: firstNonEmptyString(turn.threadId) ?? undefined, agentRun: turn.agentRun as AgentRunProvenance | undefined } as AgentChatResultResponse); if (turn.terminal === true || isTerminalMessageStatus(status)) void refreshTerminalTraceFromRest(traceId, "realtime-turn-snapshot"); }