PERSISTENT WORKFLOWS
Workflow、DAG 与调度
让有依赖的任务跨进程持续运行,并用持久状态、租约与幂等边界恢复。
先说结论
持久 Workflow 适合有依赖、需调度或必须在进程重启后恢复的工作。即时 Agent 运行、Thread/Turn 记录与 Workflow/DAG 是三个层次:Agent 执行工作,Thread/Turn 保存交互,DAG 保存任务拓扑、运行和恢复状态。
怎么理解
| 对象 | 作用 |
|---|---|
| DAG template | 保存 dag_key、标题、节点、依赖、默认重试、超时、并发和 fail-fast 策略 |
| Run | DAG 的一次执行实例 |
| Node | Agent 或 automation 工作单元,包含 reads、writes、assignee 与 execution 配置 |
| Wakeup | 让 ready 节点进入调度的持久队列项 |
| Worker lease | 防止多个 worker 同时拥有同一调度工作 |
节点完成不是普通字段覆盖:done 会在同一持久化流程中推进可运行的下游;failed 可根据策略重试,或触发 fail-fast 级联取消。拓扑修改使用带版本保护的 typed ops,并在提交前做环检测。
怎么使用
- 用
task_create_dag创建模板,显式给出节点依赖、执行类型和默认策略。 - 启动 Run。无依赖节点进入 ready;调度器把到期 wakeup claim 为
dispatching。 - Agent 节点启动对应 Thread;automation 节点解析
command_ref,且必须具备可信 workspace roots。 - 成功派发后 wakeup 标为 sent,并把运行节点与 Turn 绑定。
- 节点进入
done后,系统原子推进满足依赖的下游节点;最终节点完成后 Run 收口。
Cron scheduler 可以按计划创建运行,但仍走同一套持久状态、去重与 Turn 执行边界。它不是一个绕过生命周期的定时 shell。
常见问题
- 创建或修改形成环:Kahn 环检测返回涉及的节点,拓扑不落库。
- automation 缺少可信 CWD/workspace roots:创建入口 fail-fast,不把错误推迟到 dispatcher。
- 派发暂时失败:按 DAG 默认策略或节点覆盖重试;永久失败进入节点失败路径。
- worker 在
dispatching中失租:reclaimer 把过期 wakeup 退回pending,下一轮重新 claim。 done前进程中断:持久 Node、Wakeup、Turn binding 与幂等键用于恢复,不能只看内存 Agent 列表。
适用范围
- DAG 解决依赖与恢复,不代替业务验收;节点输出仍需定义明确的证据。
task_update_node修改的是某个 Run 中的节点,不是 DAG 模板。- done 节点的执行配置不可随意改写;运行中拓扑操作受状态与 OCC 约束。
- Cron 精度和外部 Provider 可用性不构成硬实时保证。
延伸阅读
阅读代码理解与多语言 LSP,为 Agent 和 Workflow 提供受 workspace 约束的代码证据。