fix: 统一恢复建议使用 session send

This commit is contained in:
AgentRun Codex
2026-06-11 22:47:26 +08:00
parent 90d4bc8cd2
commit 1a9b6debbb
4 changed files with 8 additions and 9 deletions
+1 -1
View File
@@ -171,7 +171,7 @@ function recoveryActionsForDiagnosis(input: { run: RunRecord; command: CommandRe
if (input.command) actions.push({ action: "inspect-command", commandId: input.command.id, command: `./scripts/agentrun commands result ${input.command.id} --run-id ${input.run.id}`, valuesPrinted: false });
actions.push({ action: "poll-events", runId: input.run.id, afterSeq: input.lastSeq, command: `./scripts/agentrun runs events ${input.run.id} --after-seq ${input.lastSeq} --limit 100 --tail-summary`, valuesPrinted: false });
const sessionId = stringValue(input.session.sessionId);
if (sessionId) actions.push({ action: "resume-session", sessionId, command: `./scripts/agentrun sessions turn ${sessionId} --prompt-stdin`, valuesPrinted: false });
if (sessionId) actions.push({ action: "continue-session", sessionId, command: `./scripts/agentrun sessions send ${sessionId} --prompt-stdin`, valuesPrinted: false });
else actions.push({ action: "session-unavailable", reason: "sessionRef=null", hint: "当前 run 没有 sessionRef,管理者只能从 run/events/command/runner-job 读取 trace 后重新提交;这表示该任务不可同 session 续跑。", valuesPrinted: false });
if (input.runnerLost || input.staleClaimed || input.terminalCommandOpenRun) actions.push({ action: "refresh-queue-or-resubmit", reason: input.failureKind ?? "stale-runner-state", hint: "先用 queue refresh/show 对齐 attempt;有 sessionId 时继续同一 session,没有 sessionId 才重新派发。", valuesPrinted: false });
return actions.slice(0, 6);
+2 -2
View File
@@ -50,7 +50,7 @@ const selfTest: SelfTestCase = async (context: SelfTestContext) => {
assert.equal(((terminalResult.terminalClassification as JsonRecord).idleTimeout), true);
assert.equal(((terminalResult.terminalClassification as JsonRecord).providerEvidence), "insufficient");
assert.equal(((terminalLive.terminalClassification as JsonRecord).providerInterruptionKnown), false);
assert.ok((terminalLive.recoveryActions as JsonRecord[]).some((action) => action.action === "resume-session"));
assert.ok((terminalLive.recoveryActions as JsonRecord[]).some((action) => action.action === "continue-session"));
assert.ok((terminalLive.recoveryActions as JsonRecord[]).some((action) => action.action === "split-task"));
const noSession = await createActiveRun(client, context, "timeout-liveness-no-session", 50, { session: false });
@@ -70,7 +70,7 @@ const selfTest: SelfTestCase = async (context: SelfTestContext) => {
assert.ok((noSessionDiagnosis.recoveryActions as JsonRecord[]).some((action) => action.action === "session-unavailable"));
assert.match(String(noSessionClassification.providerInterruptionReason), /cannot distinguish provider outage/u);
assert.equal((noSessionLive.transportDisconnect as JsonRecord).sourceSeq, 4);
assert.equal((noSessionLive.recoveryActions as JsonRecord[]).some((action) => action.action === "resume-session"), false, "sessionId=null must not suggest session-only resume");
assert.equal((noSessionLive.recoveryActions as JsonRecord[]).some((action) => action.action === "continue-session"), false, "sessionId=null must not suggest session-only continuation");
assert.equal((noSessionLive.recoveryActions as JsonRecord[]).some((action) => action.action === "poll-output"), false, "sessionId=null must not suggest session output path");
assert.ok((noSessionLive.recoveryActions as JsonRecord[]).some((action) => action.action === "poll-trace" && String(action.command).includes("runs events")));