fix: preserve code agent sessions after turn failures

This commit is contained in:
Codex
2026-06-03 00:28:40 +08:00
parent 4187c1b0ce
commit 0d4f5ef098
14 changed files with 72 additions and 52 deletions
@@ -907,13 +907,14 @@ function agentRunResultToCodeAgentPayload({ base, result, traceStore, traceId })
valuesPrinted: false
});
const partialContext = partialAgentRunContext(runnerTrace);
const recoverableFailure = !canceled;
return {
...base,
status: canceled ? "canceled" : "failed",
canceled,
updatedAt: now,
session: agentRunSessionSummary(base, canceled ? "canceled" : "failed"),
sessionReuse: agentRunSessionReuseSummary(base, base.agentRun.reused === true),
session: agentRunSessionSummary(base, canceled ? "canceled" : "idle"),
sessionReuse: agentRunSessionReuseSummary(base, base.agentRun.reused === true, { status: recoverableFailure ? "available-after-failed-command" : undefined }),
runner: agentRunRunnerSummary(base.agentRun),
runnerTrace: partialContext ? { ...runnerTrace, partialContext } : runnerTrace,
toolCalls: agentRunToolCalls(result, canceled ? "canceled" : "failed"),
@@ -940,7 +941,8 @@ function agentRunResultToCodeAgentPayload({ base, result, traceStore, traceId })
route: "/v1/agent/chat",
toolName: "agentrun.manual-dispatch"
},
agentRun: { ...base.agentRun, terminalStatus, completed: false, providerTrace, valuesPrinted: false },
agentRun: { ...base.agentRun, terminalStatus, completed: false, reuseEligible: recoverableFailure, providerTrace, valuesPrinted: false },
reuseEligible: recoverableFailure,
...(partialContext ? { partialContext } : {}),
valuesPrinted: false
};
@@ -1318,13 +1320,13 @@ function agentRunSessionSummary(base, status) {
};
}
function agentRunSessionReuseSummary(base, reused) {
function agentRunSessionReuseSummary(base, reused, options = {}) {
return {
sessionId: base.sessionId ?? base.agentRun?.sessionId ?? null,
conversationId: base.conversationId ?? base.agentRun?.conversationId ?? null,
threadId: base.threadId ?? base.agentRun?.threadId ?? null,
reused: Boolean(reused),
status: reused ? "reused" : "new",
status: options.status ?? (reused ? "reused" : "new"),
runnerReused: Boolean(reused),
valuesRedacted: true
};