fix: stop stale agentrun unreachable terminal projection
This commit is contained in:
@@ -2202,17 +2202,18 @@ function codeAgentTurnStatusPayload({ traceId, result, snapshot, resultPollError
|
||||
const events = Array.isArray(snapshotObject?.events) ? snapshotObject.events : Array.isArray(resultObject?.runnerTrace?.events) ? resultObject.runnerTrace.events : [];
|
||||
const lastEvent = events.at(-1) ?? null;
|
||||
const finalResponse = resultObject?.finalResponse ?? snapshotObject?.finalResponse ?? snapshotObject?.terminalEvidence?.finalResponse ?? codeAgentFinalResponseEvidence(resultObject ?? snapshotObject ?? {}, traceId);
|
||||
const sealedFinalStatus = codeAgentPayloadHasSealedFinalResponse(resultObject ?? snapshotObject ?? {}) ? "completed" : null;
|
||||
const terminalStatus = codeAgentAuthoritativeTerminalStatus(resultObject, snapshotObject, traceId);
|
||||
const status = normalizeTurnStatus(
|
||||
sealedFinalStatus,
|
||||
resultObject?.status,
|
||||
resultObject?.agentRun?.terminalStatus,
|
||||
terminalStatus,
|
||||
resultObject?.agentRun?.commandState,
|
||||
resultObject?.agentRun?.status,
|
||||
snapshotObject?.terminalEvidence?.traceSummary?.terminalStatus,
|
||||
snapshotObject?.traceStatus,
|
||||
snapshotObject?.status,
|
||||
snapshotObject?.runnerTrace?.status
|
||||
resultObject?.agentRun?.runStatus,
|
||||
codeAgentRunningStatus(snapshotObject?.status),
|
||||
codeAgentRunningStatus(snapshotObject?.traceStatus),
|
||||
codeAgentRunningStatus(snapshotObject?.runnerTrace?.status),
|
||||
codeAgentRunningStatus(resultObject?.status),
|
||||
resultObject?.agentRun?.terminalStatus,
|
||||
snapshotObject?.terminalEvidence?.traceSummary?.terminalStatus
|
||||
);
|
||||
const found = Boolean(resultObject || (snapshotObject && snapshotObject.status !== "missing") || snapshotObject?.persisted === true);
|
||||
const running = isTurnRunningStatus(status);
|
||||
@@ -2251,6 +2252,35 @@ function codeAgentTurnStatusPayload({ traceId, result, snapshot, resultPollError
|
||||
};
|
||||
}
|
||||
|
||||
function codeAgentAuthoritativeTerminalStatus(resultObject, snapshotObject, traceId) {
|
||||
const sealedPayload = codeAgentPayloadHasSealedFinalResponse(resultObject ?? {}) ? resultObject : codeAgentPayloadHasSealedFinalResponse(snapshotObject ?? {}) ? snapshotObject : null;
|
||||
if (sealedPayload) return "completed";
|
||||
const snapshotStatus = normalizeTurnStatus(snapshotObject?.terminalEvidence?.traceSummary?.terminalStatus, snapshotObject?.terminalEvidence?.agentRun?.terminalStatus, snapshotObject?.terminalEvidence?.status, snapshotObject?.status);
|
||||
if (snapshotStatus && isTurnTerminalStatus(snapshotStatus) && codeAgentSnapshotHasTerminalAuthority(snapshotObject)) return snapshotStatus;
|
||||
const agentRunStatus = normalizeTurnStatus(resultObject?.agentRun?.terminalStatus, resultObject?.agentRun?.commandState, resultObject?.agentRun?.status, resultObject?.agentRun?.runStatus);
|
||||
if (agentRunStatus && isTurnTerminalStatus(agentRunStatus)) return agentRunStatus;
|
||||
const resultStatus = normalizeTurnStatus(resultObject?.status);
|
||||
if (resultStatus && isTurnTerminalStatus(resultStatus) && codeAgentResultHasTerminalAuthority(resultObject, traceId)) return resultStatus;
|
||||
return null;
|
||||
}
|
||||
|
||||
function codeAgentSnapshotHasTerminalAuthority(snapshot = null) {
|
||||
if (!snapshot || typeof snapshot !== "object") return false;
|
||||
if (snapshot.terminal === true || snapshot.sealed === true) return true;
|
||||
if (snapshot.terminalEvidence?.available === true || snapshot.terminalEvidence?.source) return true;
|
||||
const events = Array.isArray(snapshot.events) ? snapshot.events : [];
|
||||
return events.some((event) => event?.terminal === true || event?.final === true || event?.replyAuthority === true);
|
||||
}
|
||||
|
||||
function codeAgentResultHasTerminalAuthority(result = null, traceId = null) {
|
||||
if (!result || typeof result !== "object") return false;
|
||||
if (result.terminal === true || result.sealed === true) return true;
|
||||
if (result.error || result.blocker) return true;
|
||||
if (codeAgentPayloadHasSealedFinalResponse(result)) return true;
|
||||
if (agentRunTerminalTraceEvidence(result, traceId)) return true;
|
||||
return Boolean(textValue(result.finishedAt ?? result.completedAt ?? result.endedAt));
|
||||
}
|
||||
|
||||
function codeAgentRefreshErrorPayload(error, traceId, agentRun, fallbackCode) {
|
||||
return {
|
||||
code: error?.code ?? fallbackCode,
|
||||
@@ -2288,6 +2318,11 @@ function isTurnRunningStatus(status) {
|
||||
return status === "running";
|
||||
}
|
||||
|
||||
function codeAgentRunningStatus(value) {
|
||||
const status = normalizeTurnStatus(value);
|
||||
return isTurnRunningStatus(status) ? status : null;
|
||||
}
|
||||
|
||||
function isTurnTerminalStatus(status) {
|
||||
return CODE_AGENT_TERMINAL_STATUSES.has(String(status ?? "").trim().toLowerCase().replace(/_/gu, "-"));
|
||||
}
|
||||
@@ -3706,6 +3741,8 @@ function agentRunTerminalTraceEvidence(result, traceId) {
|
||||
lastSeq: result.agentRun.lastSeq ?? null,
|
||||
valuesPrinted: false
|
||||
} : null;
|
||||
const terminalStatus = normalizeTurnStatus(result.agentRun?.terminalStatus, result.agentRun?.commandState, result.agentRun?.status, result.agentRun?.runStatus);
|
||||
if (!isTraceCommandTerminalStatus(terminalStatus)) return null;
|
||||
if (!agentRun?.runId || !agentRun?.commandId || (!storedSummary && !finalResponse)) return null;
|
||||
const traceSummary = {
|
||||
traceId,
|
||||
@@ -3714,7 +3751,7 @@ function agentRunTerminalTraceEvidence(result, traceId) {
|
||||
renderedRowSummary: storedSummary?.renderedRowSummary ?? null,
|
||||
noiseEventCount: numberOrNull(storedSummary?.noiseEventCount),
|
||||
omittedNoiseCount: numberOrNull(storedSummary?.omittedNoiseCount),
|
||||
terminalStatus: storedSummary?.terminalStatus ?? result.agentRun?.terminalStatus ?? result.status ?? null,
|
||||
terminalStatus: storedSummary?.terminalStatus ?? terminalStatus,
|
||||
updatedAt: storedSummary?.updatedAt ?? result.updatedAt ?? null,
|
||||
valuesPrinted: false
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user