plan() → [develop]RunState 选出一个能跑的实例
FlowWorkflow 依次调用 activity
1
prepare_step
在 volume 建目录,chown 1000。新 attempt(第 1 轮)清空 out/;后面的轮只删旧的 manifest 和 question。会话目录和 logs/ 都保留。
2
run_step
StepRunner:先删同名的残留 sandbox。profile → 镜像、policy、provider,拼挂载,组装 prompt,openshell sandbox create,名字是 <流程>-<步骤>-<哈希>。轮询直到结束,定时心跳。结束后先存 supervisor 日志,再删 sandbox。
3
collect_manifest
读 manifest.json 和 question.json,缺了就兜底生成。workflow 再按 escalate_when 把结果转成提问。
完成回到 plan(),找下一批能跑的实例。一个实例一个 sandbox,不复用
needs_input → waiting_input你回复后 turn+1,起新 sandbox 续接同一个会话
失败按 limits.retries 换 attempt 重试。用完后看 on_failed
带 action: 的步骤只调用一个 run_action(最多 2 次)。run_step 出异常(worker 崩溃、心跳超时)时调用 cleanup_step,确保 sandbox 被删。每次状态有新事件,后台的 publish_events 把它写进 events.db。