From 4b6da1343a046ac545b4f23f573fd3e6f65e2bb2 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 29 Sep 2026 01:21:37 +0800 Subject: [PATCH] fix(agent): auto-recover outcome is failed when a recovery action itself fails MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When download.recheck / task.retry was executed but errored (e.g. the downloader was unreachable), applyRecoveryOutcome only looked at succeeded actions and recorded outcome=not_attempted with the summary "没有执行恢复动作", which is false. Record outcome=failed and name the failed action instead. Needs image rebuild to take effect. Co-Authored-By: Claude Opus 5.5 --- apps/server/src/modules/agent/investigate.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/server/src/modules/agent/investigate.ts b/apps/server/src/modules/agent/investigate.ts index f1e4341a..19f76224 100644 --- a/apps/server/src/modules/agent/investigate.ts +++ b/apps/server/src/modules/agent/investigate.ts @@ -375,14 +375,18 @@ export async function applyRecoveryOutcome( else if (check?.state === "recovered") outcome = "recovered"; else if (check?.state === "failed") outcome = "failed"; else if (done.length > 0) outcome = "unverified"; + // 恢复动作执行了但本身失败(如下载器不可达):算 failed,不能写成"没有执行恢复动作" + else if (acts.actions.length > 0) outcome = "failed"; else if (res.reason === "budget") outcome = "budget_exceeded"; else outcome = "not_attempted"; - const what = done.map((a) => a.capabilityId).join(" + "); + const what = (done.length > 0 ? done : acts.actions).map((a) => a.capabilityId).join(" + "); const summary = outcome === "recovered" ? `已恢复(系统核实):执行 ${what} 后业务状态已恢复。` : outcome === "failed" - ? `未恢复:执行 ${what} 后业务状态仍为失败,已退回待处理。` + ? done.length > 0 + ? `未恢复:执行 ${what} 后业务状态仍为失败,已退回待处理。` + : `未恢复:${what} 执行失败,已退回待处理。` : outcome === "unverified" ? `未恢复:执行 ${what} 后在核实时限内业务状态未恢复,已退回待处理。` : outcome === "budget_exceeded"