Merge pull request #1892 from pikasTech/fix-1189-active-turn-terminal-evidence
fix(workbench): terminal evidence 触发 turn 状态追赶
This commit is contained in:
@@ -491,7 +491,7 @@ export const useWorkbenchStore = defineStore("workbench", () => {
|
||||
if (turn?.terminal === true || isTerminalMessageStatus(turn?.status)) return false;
|
||||
const message = [...source].reverse().find((item) => firstNonEmptyString(item.traceId, item.runnerTrace?.traceId) === id) ?? null;
|
||||
if (isTerminalMessageStatus(message?.status) || isTerminalMessageStatus(message?.runnerTrace?.status)) return false;
|
||||
if (message?.runnerTrace && traceSnapshotHasTerminalEvidence(message.runnerTrace)) return false;
|
||||
if (message?.runnerTrace && traceSnapshotHasTerminalEvidence(message.runnerTrace)) return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -780,7 +780,7 @@ function nonBlockingProjection(projection: ProjectionDiagnostic | null): Project
|
||||
updatedAt: new Date().toISOString()
|
||||
} as NonNullable<ChatMessage["runnerTrace"]>;
|
||||
const resultStatus = normalizedStatusText(result.status) ?? null;
|
||||
const terminal = result.terminal === true || isTerminalMessageStatus(resultStatus);
|
||||
const terminal = result.terminal === true || isTerminalMessageStatus(resultStatus) || traceResultHasTerminalEvidence(result);
|
||||
const resultError = normalizeAgentError(result.error ?? null);
|
||||
const resultProjection = projectionFromResult(result);
|
||||
const mergedRunnerTrace = mergeRunnerTrace(message.runnerTrace, nextTrace);
|
||||
@@ -793,6 +793,9 @@ function nonBlockingProjection(projection: ProjectionDiagnostic | null): Project
|
||||
return { ...message, ...messageTimingPatchForMerge(message, result), runnerTrace, error, projection, projectionStatus: projection?.projectionStatus ?? null, projectionHealth: projection?.projectionHealth ?? null, blocker: projection?.blocker ?? null, agentRun: agentRun ?? undefined, updatedAt: new Date().toISOString() };
|
||||
}));
|
||||
markWorkbenchTraceProjected(traceId);
|
||||
if (traceResultHasTerminalEvidence(result) && result.terminal !== true && !isTerminalMessageStatus(result.status)) {
|
||||
void refreshTerminalTraceFromRest(traceId, "trace-hydration-terminal-evidence");
|
||||
}
|
||||
if (result.terminal === true || isTerminalMessageStatus(result.status)) {
|
||||
rememberTurnStatus(traceId, result);
|
||||
clearActiveTurnGapRefresh(traceId);
|
||||
@@ -1861,6 +1864,11 @@ function traceSnapshotHasTerminalEvidence(snapshot: unknown): boolean {
|
||||
return events.some((event) => traceEventHasTerminalEvidence(event));
|
||||
}
|
||||
|
||||
function traceResultHasTerminalEvidence(result: unknown): boolean {
|
||||
const record = recordValue(result);
|
||||
return traceSnapshotHasTerminalEvidence(result) || traceSnapshotHasTerminalEvidence(record?.runnerTrace);
|
||||
}
|
||||
|
||||
function recordValue(value: unknown): Record<string, unknown> | null {
|
||||
return value && typeof value === "object" ? value as Record<string, unknown> : null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user