Skip to content

feat(workflows): release parent turns and harden large fan-out - #92

Merged
tt-a1i merged 1 commit into
mainfrom
codex/workflow-v2
Aug 23, 2026
Merged

feat(workflows): release parent turns and harden large fan-out#92
tt-a1i merged 1 commit into
mainfrom
codex/workflow-v2

Conversation

@tt-a1i

@tt-a1i tt-a1i commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

背景

OpenPI Workflow 目前把启动工具调用、运行生命周期和结果投递耦合在一起:交互式主会话默认等待;首个 run 又会改变工具 Schema;大规模 fan-out 的结果按顺序截断;恢复后无法区分失败、取消与进程丢失;投递失败也缺少可恢复的稳定身份。

本 PR 把 Workflow 收敛为 Pi-native 的后台编排能力:模型仍负责拆解、fan-out 和综合,Runtime 只负责可执行的生命周期、容量、持久化、恢复和有界投影。

Addresses #71
Addresses #74
Addresses #75
Addresses #90

主要改动

  • 交互式 TUI 默认 detached:workflow 返回 run id 后释放父 turn;print/无后续投递宿主默认等待;wait: true 只用于显式同步边界。
  • 父工具调用的 abort 只释放 waiter,不再取消底层 run;workflow_stop 与 session shutdown 才拥有取消权。
  • Workflow 能力加载时一次性开放 workflow / workflow_status / workflow_stop,run 状态不再二次改变工具 Schema。
  • 引入持久化 delivery outbox:每个 run 使用稳定 delivery id、部分回执、失败重试和恢复;语义明确为 at-least-once,而非虚构 exactly-once。
  • 进程所有者丢失恢复为 uncertain,不再误报 failed/aborted;UI、模型投影和统计独立表达不确定状态。
  • usage().limits 暴露实际并发与剩余调用容量;Quick Start 按任务发现结果动态选择 fan-out,并维护 planned / selected / covered / failed / deferred
  • 48 KiB handoff 对最多 64 个结果做公平 water-fill,每份保留 head + tail;完整子结果写入 run 的 agent-results/ 审计资产。
  • 同批多个 Workflow 完成共享一个 48 KiB 父上下文预算;单个 Workflow 最终结果也按父上下文余量动态投影并提供精确恢复路径。
  • 增补 Claude Code Workflow runtime/fan-out 调研和 OpenPI Workflow V2 设计文档。

设计边界

  • 不规定固定 agent 数量,也不把并发上限当目标。
  • 不引入第二套 provider、session manager 或外部调度器。
  • 不把“结果公平出现”误称为“证据完整覆盖”;Workflow 脚本必须维护覆盖计数,较大任务可分层 Report。
  • 不承诺 exactly-once:发送成功但 receipt 落盘失败时,恢复可能用同一 delivery id 重放,消费者可据此去重。

验证

  • bun run format
  • bun run check ✅(format/lint/typecheck;仅保留既有 Effect TypeScript diagnostic)
  • bun run test
    • Node: 859/859
    • Vitest: 30/30
  • git diff --check
  • 三轮独立只读架构/生命周期/fan-out 评审:无 P0/P1 blocker。

真实模型 smoke

使用 seal/deepseek-v4-flash-0731-baidu 驱动 Workflow,子 agent 使用 gpt-5.6-luna

  • run: wf_6664b8e3427d
  • 3/3 子 agent 完成
  • DeepSeek 报告初始为 2/3 PASS,并发现 stale recovery 未持久化的问题
  • 随后补上确定性修复及回归测试;修复后未再次执行付费模型 smoke
  • provider 返回的 billing input/output/cache 字段为 0,因此不推断或宣传不存在的 Token 总量

完整设计与证据见:

  • docs/design/OPENPI_WORKFLOW_V2_DESIGN_2026-08-23.md
  • docs/research/CLAUDE_CODE_WORKFLOW_RUNTIME_CONTRACT_2026-08-23.md
  • docs/research/CLAUDE_CODE_WORKFLOW_FANOUT_POLICY_2026-08-23.md

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant