落实 Code Agent session 生命周期状态

This commit is contained in:
unidesk-code-queue-runner
2026-05-24 12:11:45 +00:00
parent 57bc01b648
commit 3caa32a811
12 changed files with 1076 additions and 77 deletions
+31 -1
View File
@@ -276,6 +276,8 @@ export function summarizeCodeAgentPayload(payload, { httpStatus = null, traceId
skills: null,
runnerTrace: null,
sessionMode: null,
sessionLifecycleStatus: null,
sessionSummary: null,
sessionReuse: null,
session: null,
implementationType: null,
@@ -325,6 +327,8 @@ export function summarizeCodeAgentPayload(payload, { httpStatus = null, traceId
skills: summarizeSkills(payload.skills),
runnerTrace: summarizeRunnerTrace(payload.runnerTrace),
sessionMode: stringOrNull(payload.sessionMode),
sessionLifecycleStatus: stringOrNull(payload.sessionLifecycleStatus ?? payload.sessionSummary?.status ?? payload.session?.lifecycleStatus),
sessionSummary: summarizeSessionLifecycle(payload.sessionSummary ?? payload.sessionLifecycle),
sessionReuse: summarizeSessionReuse(payload.sessionReuse),
session: summarizeSession(payload.session),
implementationType: stringOrNull(payload.implementationType),
@@ -354,6 +358,8 @@ export function summarizeCodeAgentPayload(payload, { httpStatus = null, traceId
skills: summarizeSkills(payload.skills),
runnerTrace: summarizeRunnerTrace(payload.runnerTrace),
sessionMode: stringOrNull(payload.sessionMode),
sessionLifecycleStatus: stringOrNull(payload.sessionLifecycleStatus ?? payload.sessionSummary?.status ?? payload.session?.lifecycleStatus),
sessionSummary: summarizeSessionLifecycle(payload.sessionSummary ?? payload.sessionLifecycle),
sessionReuse: summarizeSessionReuse(payload.sessionReuse),
session: summarizeSession(payload.session),
implementationType: stringOrNull(payload.implementationType),
@@ -474,7 +480,7 @@ export function classifyCodeAgentRuntimeBlock(payload, { httpStatus = null } = {
};
}
if (["session_expired", "session_reuse_conflict", "session_failed", "session_interrupted"].includes(errorCode)) {
if (["session_expired", "session_reuse_conflict", "session_failed", "session_interrupted", "session_canceled", "session_timeout", "session_error"].includes(errorCode)) {
return {
blocked: true,
status: "blocked",
@@ -749,6 +755,8 @@ function summarizeRunnerTrace(value) {
blocker: summarizeBlocker(value.blocker),
sandbox: stringOrNull(value.sandbox),
sessionMode: stringOrNull(value.sessionMode),
sessionStatus: stringOrNull(value.sessionStatus),
sessionLifecycleStatus: stringOrNull(value.sessionLifecycleStatus),
implementationType: stringOrNull(value.implementationType),
sessionReused: value.sessionReused === true,
turn: typeof value.turn === "number" ? value.turn : null,
@@ -792,6 +800,7 @@ function summarizeSession(value) {
sessionId: stringOrNull(value.sessionId),
conversationId: stringOrNull(value.conversationId),
status: stringOrNull(value.status),
lifecycleStatus: stringOrNull(value.lifecycleStatus ?? value.lifecycle?.status),
workspace: stringOrNull(value.workspace),
sandbox: stringOrNull(value.sandbox),
runnerKind: stringOrNull(value.runnerKind),
@@ -815,6 +824,7 @@ function summarizeConversationFacts(value) {
conversationId: stringOrNull(value.conversationId),
sessionId: stringOrNull(value.sessionId),
sessionStatus: stringOrNull(value.sessionStatus),
sessionLifecycleStatus: stringOrNull(value.sessionLifecycleStatus),
sessionMode: stringOrNull(value.sessionMode),
capabilityLevel: stringOrNull(value.capabilityLevel),
runnerKind: stringOrNull(value.runnerKind),
@@ -842,6 +852,26 @@ function summarizeConversationFacts(value) {
};
}
function summarizeSessionLifecycle(value) {
if (!value || typeof value !== "object") return null;
return {
status: stringOrNull(value.status),
rawStatus: stringOrNull(value.rawStatus),
label: stringOrNull(value.label),
action: stringOrNull(value.action),
reusable: value.reusable === true,
reused: typeof value.reused === "boolean" ? value.reused : null,
newSession: value.newSession === true,
busy: value.busy === true,
requiresNewSession: value.requiresNewSession === true,
degraded: value.degraded === true,
fallback: value.fallback === true,
unsupported: value.unsupported === true,
reasonCode: stringOrNull(value.reasonCode),
userMessage: stringOrNull(value.userMessage)
};
}
function summarizeCodexStdioFeasibility(value) {
if (!value || typeof value !== "object") return null;
return {