fix: preserve remote task success after recoverable tool errors
Align remote ACP tool recovery with local runtime behavior when the model responds after a tool failure and completes normally. Preserve original errors and derive recovery state from committed remote events so reconnecting safely replays partial terminal events. Validation: 461 focused tests, typecheck, lint, and shared Linux Host recovery scenarios passed. Full-suite validation has two pre-existing heartbeat migration fixture failures involving the pinned column. Release note: 修复远端 Agent 在读取等工具失败后已正常回复,任务仍被误判为失败的问题,并修复断线重连时的工具状态恢复。
This commit is contained in:
@@ -340,6 +340,12 @@ OC `todowrite` / CN `Checklist` 顶部展示属于待实施功能,权威需求
|
||||
`toolCallId` 继续路由,不等待新的父 Task metadata,也不重放模型请求。
|
||||
远端实时过程需要包含该插件的 Agent;旧 Agent 的最终结果仍可查看,历史未采集过程
|
||||
不会被补造。
|
||||
- 远端 ACP 普通工具失败后,只有最后一次工具失败之后收到非空白助手正文、Prompt 正常
|
||||
完成且没有 `pending` / `in_progress` 工具时,才在 `done` 前将仍失败的工具更新为
|
||||
`recoverable`,保留调用 ID、名称、输入、输出和错误。失败前的正文、推理和纯空白
|
||||
不作为恢复依据;后续再次失败会清除该依据。原生子代理失败不参与普通工具恢复,
|
||||
Prompt 失败、取消或 `outcome-unknown` 也不触发转换。Agent-owned 与直接 ACP 路径
|
||||
共用此规则;转换表示后续响应已处理失败,不表示工具重新执行成功。
|
||||
- 本机 OpenCode SDK 路径允许不同会话并行,同一会话仍按请求顺序执行。每个请求独立拥有
|
||||
SSE 事件订阅,并在正常完成、错误、取消或消费方结束迭代时主动关闭自己的响应流,
|
||||
不关闭其他会话的订阅或共享 Server。聊天与原生 Compact 共用 `consumeEventSubscription`,
|
||||
@@ -376,6 +382,14 @@ OC `todowrite` / CN `Checklist` 顶部展示属于待实施功能,权威需求
|
||||
时提交 Task 终态;事务成功后生成器才继续并向 Agent ACK。断电发生在同一 sequence
|
||||
中间时会重读该 sequence,已写事件按 `(binding, operation, sequence, eventIndex)` 去重,
|
||||
未写事件继续归并,不会重复 Provider 或工具执行。
|
||||
- 工具失败恢复所需的正文依据从 Desktop 已提交的 `task_events` 推导:按
|
||||
`remote_semantic_sequence` 数值及 `remote_event_index` 顺序判断最后一次失败后是否有
|
||||
非空白 `text`,重连时与已有工具状态一起交给 Runtime,保留断线前的有效依据。
|
||||
不从会原地更新或被截断的展示块推断顺序,不新增表、字段或持久快照。终态转换按
|
||||
`callId` 排序,并重发已为 `recoverable` 的工具,使部分终态落库后的重读仍使用稳定的
|
||||
`eventIndex`,沿用既有 provenance 去重和 checkpoint 提交。
|
||||
重连时,工具及原生子代理的状态也以已提交的远端活动事件为准,覆盖消息终态处理派生的
|
||||
失败状态,避免将未完成活动误判为可恢复错误,保证终态重放内容一致。
|
||||
- 远程 context metrics 与对话级压缩后的估算值按本次请求实际使用的 Runtime 选择写入
|
||||
`context_state_json`。实时接收与恢复入口都传入请求的选择;数据库在未传入时按对话、
|
||||
项目、auto 顺序解析。继承项目设置的对话保持 `runtime_selection_json = NULL`,
|
||||
|
||||
Reference in New Issue
Block a user