fix(workbench): skip terminal turn polling (#1809)

Stop realtime gap hydration from polling completed/terminal Workbench turns. This avoids repeated /v1/workbench/turns requests for old traces while preserving active turn refresh.\n\nRefs #1791.
This commit is contained in:
Lyon
2026-06-21 10:50:56 +08:00
committed by GitHub
parent 6cafd495de
commit 4c562e7176
+12 -1
View File
@@ -455,7 +455,18 @@ export const useWorkbenchStore = defineStore("workbench", () => {
}
async function hydrateTurnStatusAuthority(source: ChatMessage[] = messages.value): Promise<void> {
await Promise.all(uniqueTraceIds(source).slice(-12).map((traceId) => refreshTurnStatusByTraceId(traceId)));
await Promise.all(uniqueTraceIds(source).slice(-12).filter((traceId) => traceNeedsTurnStatusRefresh(traceId, source)).map((traceId) => refreshTurnStatusByTraceId(traceId)));
}
function traceNeedsTurnStatusRefresh(traceId: string | null | undefined, source: ChatMessage[] = messages.value): boolean {
const id = firstNonEmptyString(traceId);
if (!id) return false;
const turn = turnStatusAuthority.value[id];
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;
return true;
}
async function refreshTurnStatusByTraceId(traceId: string | null | undefined): Promise<void> {