真实回放:一次改 bug,计算 / 状态 / 执行环境各在哪儿、各做了什么
下面每一个点都是一条真实记录:真实的进程、真实的私有网关请求、真实的 git 仓库和测试。
运行:
四个角色:谁在哪儿、手里有什么、没有什么
时间线(点任意色块看原始数据;拖动或播放看每一刻的状态)
0.00 s
此刻快照
☁️ 云端 · 活着的 Worker 进程
☁️ 云端 · Session(已持久化)
💻 笔记本 · 仓库与进程
点时间线上的任意色块,这里显示它的原始记录和解释。
这次运行证明了什么(数字全部来自上面的 trace)
最终留在笔记本上的改动(未提交)
需要说清楚的边界
- “云端”在这里是本机上的独立进程和独立目录(
cloud-data/),用来演示进程与数据的边界;笔记本仓库在laptop-home/,云端进程的工作目录是空的worker-scratch/。没有真的部署到云服务器。 - 模型调用是真的:走
~/.pi/agent/models.json里的私有网关(Anthropic Messages 协议)。当前令牌只放行 DeepSeek-V4-Flash,其它模型返回 403。Authorization 头没有写进 trace。 - “环境不上云”不等于“代码不出本机”:模型读过的文件、命令输出都会作为工具结果进入 Session 和网关请求(见上面“上云了什么”)。没被工具读到的东西(例如 .env 里的密码)才不会出去。
- Worker 被杀时正在等的那次模型回应丢了,新 Worker 会重发同一请求,所以模型调用是“至少一次”。工具调用这边,守护进程按 call_id 去重;但如果守护进程本身在执行中途重启,非幂等操作(如 git push、发 PR)仍需要额外的幂等设计——这正是组会可以讨论的点。
- 这是对文章 §5.1/§5.2 架构思路的最小复现,不代表 DeepSeek Harness 或其公开原型的实现。