把「让另一个 AI 干活」从一次性动作,变成有状态、可观测、可恢复的协议层:NDJSON 单行流 + 超时三档 + TIMEOUT ≠ ERROR + 零产出保护 + 断点续作 + 有界回退。
原生 pi -p --mode json 的 NDJSON 事件流。不做 GUI 自动化、不装第三方扩展,协议在一行 stream 内收口。
超时三档:600s 默认 / 对长任务 900s / 显式规定覆盖,优先级 explicit > auto > 默认。
TIMEOUT ≠ ERROR:超时不等于代码故障,不能被归成 FAILED 误导 Job Manager。
stopReason=length 且无文本、无成功工具调用 → ERROR(旧版会误报 DONE)。
run_20260916_201012_DONE.log 内 NDJSON 事件计数(原样统计,未抽样):
| 事件类型 | 条数 | 在链路中的含义 |
|---|---|---|
| session / agent_start | 1 / 1 | Bridge 建立会话,拿到 session id 与 cwd |
| turn_start / turn_end | 15 / 15 | 15 个回合(14 次工具调用 + 收尾) |
| tool_execution_start / end | 14 / 14 | bash 9 · read 3 · edit 1 · write 1 |
| message_update | 331 | 流式增量(文本/思考/工具输出),供上层实时展示 |
| agent_end / agent_settled | 1 / 1 | 终态:DONE(rc=0,23.0 s) |