Agent Harness:包裹 Agent 的持久化外循环

Agent Harness:包裹 Agent 的持久化外循环 由 Archify 生成的架构图。 宿主调用方 · run/resume/deliver/repair/runReady · 架构组件 宿主调用方 run/resume/deliver/repair/runReady AgentHarness · claim 租约+心跳 → 有界切片 · 架构组件 · core AgentHarness claim 租约+心跳 → 有界切片 core ExecutionAdapter · open(ctx,budget,prevState) · 适配器协议(每切片开一个真实 session) · adapter ExecutionAdapter open(ctx,budget,prevState) adapter AdapterSession · run(req) + snapshot() · 适配器协议(每切片开一个真实 session) · adapter AdapterSession run(req) + snapshot() adapter Agent / CodingAgent · ReAct/工具/权限/沙箱照旧 · 适配器协议(每切片开一个真实 session) · adapter Agent / CodingAgent ReAct/工具/权限/沙箱照旧 adapter Wait / Wakeup 记录 · 6 种 WaitType · 持久化台账(Gateway 唯一写面) · ledger Wait / Wakeup 记录 6 种 WaitType ledger CommandGateway · 唯一写面 · 读模型 · 持久化台账(Gateway 唯一写面) · ledger CommandGateway 唯一写面 · 读模型 ledger HarnessStore · File / JDBC 持久化 · 持久化台账(Gateway 唯一写面) · ledger HarnessStore File / JDBC 持久化 ledger ① run/resume/deliver/repair ② open() ③ 每切片一 session ④ run(request) ⑤ claim/persistOutcome/事件 ⑥ 变更+读模型 ⑦ ensureWait/审批 ⑧ 异常→WaitRecord 适配器协议(每切片开一个真实 session) 持久化台账(Gateway 唯一写面) 图例 前端 后端 数据库 安全

有界切片 + 租约

  • • 每次 run 只跑一段 bounded slice:claim 租约+fencingToken → 心跳续约 → adapter.open → session.run → 状态映射 → persistExecutionOutcome
  • • 持久化失败/租约丢失 → ExecutionStatus.UNKNOWN 待对账;Agent 的 ReAct/压缩/权限/沙箱/MCP 全部照旧由 Agent 负责

WAITING 六种原因

  • • adapter 返回 waitId(EXTERNAL_EVENT/ASYNC_OPERATION/RETRY/TIME)或抛 AgentHostInputException(USER_INPUT)/AgentApprovalRequiredException(APPROVAL) → WaitRecord + WAITING
  • • deliver(waitId,input):answer+wakeup 原子落库 → READY → 同步跑下一段切片;applyDelivery=false 时值作为下轮 input

恢复、幂等与修复

  • • checkpointState+adapterState+sessionSnapshot 随 outcome 落库;重启后 resume(executionId)/resumeTask/autoResume 续跑;idempotencyKey 防重复 execution
  • • repair(parentExecutionId,…):校验父执行终态 → 子 execution 自动挂 lineage;evaluateAcceptance 走 AcceptanceCoordinator(见验收图)