From 949b11dea89228d246f6a9b239c5f8785caebe6d Mon Sep 17 00:00:00 2001 From: Lyon <88232613+pikasTech@users.noreply.github.com> Date: Tue, 23 Jun 2026 13:58:19 +0800 Subject: [PATCH] fix(workbench): apply admission timing without id changes (#1969) --- web/hwlab-cloud-web/src/stores/workbench.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/web/hwlab-cloud-web/src/stores/workbench.ts b/web/hwlab-cloud-web/src/stores/workbench.ts index 62e8bcf3..0811428b 100644 --- a/web/hwlab-cloud-web/src/stores/workbench.ts +++ b/web/hwlab-cloud-web/src/stores/workbench.ts @@ -1419,13 +1419,21 @@ function nonBlockingProjection(projection: ProjectionDiagnostic | null): Project const userMessageId = firstNonEmptyString(lifecycle.userMessageId); const assistantMessageId = firstNonEmptyString(lifecycle.assistantMessageId); const admissionTiming = optimisticAdmissionTimingPatch(lifecycle); - if (!turnId && !userMessageId && !assistantMessageId && canonicalTraceId === traceId) return canonicalTraceId; + const hasAdmissionTiming = Boolean(admissionTiming.timing?.startedAt || admissionTiming.timing?.lastEventAt); + if (!turnId && !userMessageId && !assistantMessageId && !hasAdmissionTiming && canonicalTraceId === traceId) return canonicalTraceId; updateActiveMessages((source) => source.map((message) => { if (message.traceId !== traceId) return message; const runnerTrace = message.runnerTrace ? { ...message.runnerTrace, traceId: canonicalTraceId } : message.runnerTrace; const base = { ...message, traceId: canonicalTraceId, runnerTrace, updatedAt: new Date().toISOString() }; if (message.role === "user" && userMessageId) return { ...base, id: userMessageId, messageId: userMessageId, turnId }; - if (message.role === "agent" && assistantMessageId) return { ...base, ...admissionTiming, id: assistantMessageId, messageId: assistantMessageId, turnId }; + if (message.role === "agent") { + const next = { ...base, ...admissionTiming }; + return { + ...next, + ...(assistantMessageId ? { id: assistantMessageId, messageId: assistantMessageId } : {}), + ...(turnId ? { turnId } : {}) + }; + } return turnId ? { ...base, turnId } : base; })); return canonicalTraceId;