Appearance
跨进程继续代码任务:Sandbox Session、Snapshot 与 Resume
前置:如何证明 Coding Agent 真做完了:Tests、Artifacts 与 Manifest
核心问题:进程退出后怎样恢复 Coding Workspace,哪些 sandbox/session 信息要持久化,恢复前又必须重新验证什么?
同一个聊天 Session 可以先后创建两个隔离 sandbox;一个 sandbox 也可由多个 Runner call 复用。用户说“继续昨天代码”,Session 给出谈话背景,snapshot 恢复实际已修改文件;缺一都可能无法正确继续。
Sandbox Session
这里先分清三个对象:live sandbox session 是仍在运行的执行环境,serialized session state 是 backend 用来重新连接/定位该环境的控制信息,workspace snapshot 是可用于重建文件/环境状态的持久化内容。它们都不是 conversational Session。
Session State vs Workspace Snapshot
RunState 是一次执行事实,Session 提供跨 run 的交互连续性,Durable Task State 服务长任务恢复。三者生命周期不同,应分表/接口。
Workspace Snapshot 保存某时刻文件/环境状态。二者恢复目标不同,不能用 conversation transcript 代替磁盘快照。
Resume
Resume 根据 backend 当前事实选择两种路径:live session 仍存在就重新 attach;否则从 snapshot 创建新环境并 rehydrate Runtime/Workspace 状态。Adapter 应显式告诉调用方支持哪种恢复方式,而且任何恢复都要重新验证当前版本、capability 与权限。
🔍 源码对照:Restart 后后台 Shell 可以作为 reattached task 被重新观察
完整源码与通用分析见 09-01 Run Lifecycle / State Machine。这里不重复代码;这里关注 resume:reattached shell / background task 必须重新进入 Observation owner,不能仅恢复 Workspace snapshot 就假设执行状态已知。
源码说明
Remote box/local exec/daemon 与 durable file policy 被分开,是理解 Sandbox Session 的好材料:execution environment 可以重建,但 workspace/file state、credentials、network capability、process state 的恢复语义各不相同。Snapshot 不是“把容器暂停”这一种技术实现。
工程边界
README 中的 optional local Docker sandbox 只是实验模式;Docker container 本身不提供完整 security sandbox,也不等价于 durable session。
Shadow Harness 对照
- SandboxSession 用 opaque environment id + capability manifest;Checkpoint 保存引用和必要版本。
- resume 时逐项 revalidate workspace、credential、network/tool capability。
验证
sandbox 被销毁后 resume:允许重建环境,但必须证明 workspace state 与 required tool versions 满足 checkpoint contract。
Run State 和 Workspace Snapshot 必须一起对齐
Coding Agent 已经修改三个文件,然后因为高风险命令进入 approval。此时 checkpoint 只保存:
text
next_node = run_tests是不够的。新 worker resume 时还必须看到 同一版本的 workspace,否则 Runtime 以为 patch 已完成,实际文件却回到了旧版本。
一种实现是 checkpoint 保存 workspace snapshot/commit/artifact reference:
text
checkpoint c17
run_state_version = 17
workspace_ref = git:temp-branch@a13f...
pending_node = run_testsResume 先恢复/验证 workspace_ref,再把 Run 变回 executable。反过来,workspace 中存在新文件也不代表 Runtime 已经提交对应 node;文件事实和 Run execution fact 需要各自的 identity,再由 checkpoint 建立对应关系。
Failure Modes
Serialized State 被当成新的权限来源
症状: resume 直接恢复旧 credential/capability decision。
为什么危险: 过期授权可能继续生效。
处理: snapshot 保存事实/reference;resume 重新注入 credential 并 current authorization。
如何验证
| Case | 断言 |
|---|---|
| Serialized State 被当成新的权限来源 | 改变权限后 resume,旧 snapshot 无法绕过新 policy。 |
关联源码
自测
- Sandbox 进程重启后,只有对话还在但工作目录丢失。为什么这不叫可 Resume?Snapshot 至少要覆盖哪些 Workspace 状态?
- 恢复 Snapshot 后仓库 HEAD 已变化,为什么还需要 environment revalidation 而不能立即继续 patch?