fix: preserve sealed AgentRun cancel result (#2095)

This commit is contained in:
Lyon
2026-06-25 08:06:33 +08:00
committed by GitHub
parent e31af52a09
commit 41555af9ae
2 changed files with 58 additions and 1 deletions
@@ -706,7 +706,15 @@ function isAgentRunCommandAlreadyClaimed(error) {
export async function syncAgentRunChatResult({ traceId, currentResult = null, options = {}, traceStore = defaultCodeAgentTraceStore, appendResultEvent = true, refreshEvents = true, forceResultSync = false }) {
const initial = currentResult ?? await loadPersistedAgentRunResult(traceId, options);
if (isAgentRunUserCancelSealed(initial)) {
const runnerTrace = initial.runnerTrace ?? traceStore.snapshot(traceId);
return { result: initial, runnerTrace, found: true, eventsRefreshed: false, resultSynced: false, terminalRefreshSkipped: true, localCancelSealed: true };
}
const mapped = initial ? await resolveAgentRunTraceCommandMapping({ traceId, mapped: initial, options }) : initial;
if (isAgentRunUserCancelSealed(mapped)) {
const runnerTrace = mapped.runnerTrace ?? traceStore.snapshot(traceId);
return { result: mapped, runnerTrace, found: true, eventsRefreshed: false, resultSynced: false, terminalRefreshSkipped: true, localCancelSealed: true };
}
const performanceStore = options.backendPerformanceStore ?? currentBackendPerformanceContext();
if (!forceResultSync && options.skipAgentRunTerminalRefreshIfComplete === true && agentRunTerminalResultRefreshSatisfied(mapped, traceId)) {
const runnerTrace = mapped.runnerTrace ?? traceStore.snapshot(traceId);
@@ -882,6 +890,14 @@ function normalizeAgentRunStatus(value) {
return status === "cancelled" ? "canceled" : status;
}
function isAgentRunUserCancelSealed(payload = null) {
if (!payload || typeof payload !== "object") return false;
const status = normalizeAgentRunStatus(payload.status);
const cancelStatus = normalizeAgentRunStatus(payload.cancelStatus ?? payload.cancelDisposition?.status);
const terminalStatus = normalizeAgentRunStatus(payload.agentRun?.terminalStatus ?? payload.agentRun?.commandState ?? payload.agentRun?.status);
return payload.canceled === true || status === "canceled" || cancelStatus === "canceled" || terminalStatus === "canceled";
}
async function resolveAgentRunTraceCommandMapping({ traceId, mapped, options = {} }) {
const safeId = safeTraceId(traceId);
const agentRun = mapped?.agentRun && typeof mapped.agentRun === "object" ? mapped.agentRun : null;