# Agent control and recovery kit

本入口把有副作用的 Agent 调用拆成两个可独立复用的模块：调用前的 MCP 权限网关，以及调用结果不确定后的恢复状态机。二者都使用内存夹具验证合同，不是生产 IAM 或 exactly-once 实现。

## 模块

| 模块         | 入口                                | 最小验证                          | 冻结结果                                                    |
| ------------ | ----------------------------------- | --------------------------------- | ----------------------------------------------------------- |
| MCP 权限网关 | `labs/mcp-policy-gateway/README.md` | `npm run lab:mcp:test`            | `labs/mcp-policy-gateway/results/2026-07-13-demo.json`、TAP |
| 未知终态恢复 | `labs/agent-recovery/README.md`     | `npm run lab:agent-recovery:test` | `labs/agent-recovery/results/2026-07-13-results.json`       |

## 复用顺序

1. 把已验证的 principal、tenant、resource 和 scopes 映射到可信上下文，不接受 tool arguments 自报身份。
2. 为每个写操作定义 tool schema、一次性审批、`expectedVersion` 与稳定幂等键。
3. 在 dispatch 前执行默认拒绝策略；commit 结果不明确时停止盲重试。
4. 查询业务权威状态，区分 succeeded、blocked、failed 与 unknown，再决定定向重放或人工接管。

## 输出和边界

决定性输出是上游 mutation 次数、记录版本、另一租户状态、审计阶段和恢复终态，而不是模型文本或 HTTP 状态。接入真实系统时必须替换内存 ApprovalStore、记录存储和审计队列，并增加 token 验证、持久事务、outbox、撤销和速率限制。
