diff --git a/web/hwlab-cloud-web/src/stores/workbench.ts b/web/hwlab-cloud-web/src/stores/workbench.ts index 64998441..afcb60cb 100644 --- a/web/hwlab-cloud-web/src/stores/workbench.ts +++ b/web/hwlab-cloud-web/src/stores/workbench.ts @@ -883,11 +883,20 @@ export const useWorkbenchStore = defineStore("workbench", () => { const trace = snapshotToRunnerTrace(snapshot); rememberTurnStatus(traceId, snapshot); const status = statusFromResult(snapshot.status); + const terminal = isTerminalMessageStatus(status); messages.value = messages.value.map((message) => { if (message.traceId !== traceId) return message; const runnerTrace = mergeRunnerTrace(message.runnerTrace, trace); rememberTraceAuthority(runnerTrace); - return { ...message, status, traceAutoLifecycle: "running", runnerTrace, updatedAt: new Date().toISOString() }; + const traceAssistantText = message.role === "agent" ? assistantTextFromTraceEvents(Array.isArray(runnerTrace.events) ? runnerTrace.events : []) : null; + const error = message.role === "agent" ? normalizeAgentError(runnerTrace.error ?? message.error) : normalizeAgentError(message.error); + const errorText = message.role === "agent" ? agentErrorDisplayText(error) : null; + const nextText = message.role === "agent" && terminal + ? firstNonEmptyString(finalResponseText(runnerTrace.finalResponse), traceAssistantText, errorText, message.text) ?? message.text + : message.role === "agent" && !firstNonEmptyString(message.text) + ? firstNonEmptyString(traceAssistantText, finalResponseText(runnerTrace.finalResponse), errorText, message.text) ?? message.text + : message.text; + return { ...message, status, text: nextText, traceAutoLifecycle: terminal ? "terminal" : "running", runnerTrace, error: error ?? message.error ?? null, updatedAt: new Date().toISOString() }; }); markWorkbenchTraceProjected(traceId); void refreshSessionStatusById(trace.sessionId ?? selectedSessionId.value);