Merge pull request #1783 from pikasTech/fix/1770-clear-terminal-transient-diagnostics-20260621051510

fix: clear transient workbench diagnostics on terminal turn
This commit is contained in:
Lyon
2026-06-21 05:16:28 +08:00
committed by GitHub
+13 -4
View File
@@ -503,15 +503,24 @@ export const useWorkbenchStore = defineStore("workbench", () => {
function syncTurnStatusToMessage(traceId: string, result: AgentChatResultResponse | TraceSnapshot): void {
const authoritySessionId = traceResultSessionId(result);
updateTraceMessages(traceId, authoritySessionId, (message) => {
const runnerTrace = mergeTerminalResultTrace(message.runnerTrace, result as AgentChatResultResponse);
const resultStatus = normalizedStatusText((result as AgentChatResultResponse).status) ?? null;
const terminal = (result as AgentChatResultResponse).terminal === true || isTerminalMessageStatus(resultStatus);
const resultError = normalizeAgentError((result as AgentChatResultResponse).error ?? null);
const resultProjection = projectionFromResult(result as AgentChatResultResponse);
const mergedRunnerTrace = mergeTerminalResultTrace(message.runnerTrace, result as AgentChatResultResponse);
const runnerTrace = terminal && !resultError && !resultProjection ? clearRunnerTraceTransientDiagnostics(mergedRunnerTrace) : mergedRunnerTrace;
rememberTraceAuthority(runnerTrace);
const error = normalizeAgentError((result as AgentChatResultResponse).error ?? runnerTrace?.error ?? message.error);
const error = resultError ?? (terminal ? null : normalizeAgentError(runnerTrace?.error ?? message.error));
const agentRun = agentRunFromResult(result as AgentChatResultResponse, runnerTrace) ?? agentRunFromMessage(message);
const projection = projectionFromResult(result as AgentChatResultResponse) ?? runnerTrace.projection ?? message.projection ?? null;
return { ...message, ...messageTimingPatch(result), runnerTrace, error: error ?? message.error ?? null, projection, projectionStatus: projection?.projectionStatus ?? null, projectionHealth: projection?.projectionHealth ?? null, blocker: projection?.blocker ?? null, agentRun: agentRun ?? undefined, updatedAt: new Date().toISOString() };
const projection = resultProjection ?? (terminal ? null : runnerTrace.projection ?? message.projection ?? null);
return { ...message, ...messageTimingPatch(result), runnerTrace, error, projection, projectionStatus: projection?.projectionStatus ?? null, projectionHealth: projection?.projectionHealth ?? null, blocker: projection?.blocker ?? null, agentRun: agentRun ?? undefined, updatedAt: new Date().toISOString() };
});
}
function clearRunnerTraceTransientDiagnostics(trace: NonNullable<ChatMessage["runnerTrace"]>): NonNullable<ChatMessage["runnerTrace"]> {
return { ...trace, error: undefined, projection: null, projectionStatus: null, projectionHealth: null, staleMs: null, blocker: null };
}
async function submitMessage(text: string): Promise<boolean> {
const value = text.trim();
if (!value) return false;