P1-P19 的增量能力用 PROFILE_DELTAS 累计出 P20;full_harness 只是整合验收标记,不对应新业务模块。
const PROFILE_DELTAS = [
// P1-P19 增量能力,此处省略
["full_harness"],
] as const;
export const P20 = profileAt(20);
UserPromptSubmit → drain typed events → 选择 Memory + 压缩 → 渲染 dynamic prompt + Registry Snapshot → RecoveryManager → 追加 assistant → 每个 tool call(校验→Context→Pre→权限→handler/后台→Post→回填)→ 无工具时 Stop 至多一次续跑。
每轮:
UserPromptSubmit Hook
→ drain typed events
→ Memory + 压缩完整消息组
→ 渲染 dynamic prompt + Registry Snapshot
→ RecoveryManager 调模型
→ 对每个 tool call ...(Pre→权限→handler→Post→配对结果)
→ 无工具调用时 Stop Hook(至多续跑一次)
① 一次回复只用一个 Registry Snapshot;② 一个 tool call 必须恰好配一个 tool result;③ Prompt 和 Hook 都不是授权边界。
4.1 一次回复 = 一个 Registry Snapshot
4.2 一个 tool call = 一个相同 tool_call_id 的 tool result
4.3 Prompt 指导,Policy 授权;Hook 只在硬边界内扩展
组合根在每轮渲染前读取可同步状态:mcp_connections 与 pending_work。它固定在提示词最后一段并参与缓存键——只改 status、其余不变时 cacheHits 加一,之前的正文不变。它只是状态同步 getter,不替代 EventInbox,更不是授权依据:模型看到 mcp_connections:["fake"] 不等于有权调用那个工具,权限事实源始终是本地 policy。
## runtime_status
{"mcp_connections":["fake"],"pending_work":false}
注册顺序 JobSupervisor → Cron → Teammate → MCP;close 逆序 Mcp → Teammate → Cron → Supervisor。每个资源独立 try/catch,1 个失败原样抛,>1 个组成 AggregateError;#closed 只在全部成功时置位,失败后可重试 close、不能再 run。重建后 SQLite Task、Memory、Cron pending、Mailbox/Protocol、Worktree binding 各自恢复;事件去重两层:#seenEventIds 防进程内重投,store ack 防跨重启重放。
注册: JobSupervisor → CronRuntime → TeammateRuntime → McpRuntime
关闭: McpRuntime → TeammateRuntime → CronRuntime → JobSupervisor
单资源失败仍继续尝试剩余;多异常组成 AggregateError
验证 Cron/Teammate/Protocol/WorkStealing/Worktree/MCP 共享正确对象身份。
历史、压缩、动态 prompt、snapshot、Recovery、工具配对、Stop。
MCP+权限、计划+Worktree、事件各一次、恢复、重建、关闭。
Mcp → Teammate → Cron → Supervisor;失败可重试。