refactor: replace Moderator function with ModeratorTable in WorkflowDefinition #201

Merged
xiaomo merged 1 commits from refactor/200-moderator-table into main 2026-05-12 02:06:04 +00:00
Owner

What

WorkflowDefinition.moderator(不可序列化的函数类型)替换为 WorkflowDefinition.table(声明式 ModeratorTable),同时在 WorkflowDescriptor 中自动提取 WorkflowGraph

Why

  • Moderator 是黑盒函数,无法序列化为静态图结构,阻塞 #198 (Dashboard graph visualization)
  • protocol 层同时暴露函数和表两种模式,概念冗余
  • 模板作者要 tableToModerator() 包一层,多余

Changes

workflow-protocol

  • WorkflowDefinition.moderator: Moderator<M>table: ModeratorTable<M>
  • 新增 WorkflowGraph / WorkflowGraphEdge 类型
  • WorkflowDescriptor 新增 graph: WorkflowGraph
  • 移除 Moderator / tableToModerator 公开导出
  • 新增 ./moderator-table.js 子路径导出(供 engine 内部使用)

workflow-runtime

  • 同步移除 Moderator / tableToModerator re-export
  • create-workflow.ts: 内部 tableToModerator(def.table) 一次,Pick 类型更新

workflow-register

  • buildDescriptor: 从 def.table 自动提取 WorkflowGraph
  • validateWorkflowDescriptor: 新增 graph 结构校验

workflow-template-develop / solve-issue

  • 直接导出 table(developTable / solveIssueTable),不再调 tableToModerator()

cli-workflow

  • init scaffold 改为 ModeratorTable 写法
  • skill 文档同步更新

测试

  • 全部 99 tests pass,0 fail
  • descriptor 测试增加 graph 边数量断言

Ref

Closes #200
Unblocks #198

## What 将 `WorkflowDefinition.moderator`(不可序列化的函数类型)替换为 `WorkflowDefinition.table`(声明式 `ModeratorTable`),同时在 `WorkflowDescriptor` 中自动提取 `WorkflowGraph`。 ## Why - `Moderator` 是黑盒函数,无法序列化为静态图结构,阻塞 #198 (Dashboard graph visualization) - protocol 层同时暴露函数和表两种模式,概念冗余 - 模板作者要 `tableToModerator()` 包一层,多余 ## Changes ### workflow-protocol - `WorkflowDefinition.moderator: Moderator<M>` → `table: ModeratorTable<M>` - 新增 `WorkflowGraph` / `WorkflowGraphEdge` 类型 - `WorkflowDescriptor` 新增 `graph: WorkflowGraph` - 移除 `Moderator` / `tableToModerator` 公开导出 - 新增 `./moderator-table.js` 子路径导出(供 engine 内部使用) ### workflow-runtime - 同步移除 `Moderator` / `tableToModerator` re-export - `create-workflow.ts`: 内部 `tableToModerator(def.table)` 一次,Pick 类型更新 ### workflow-register - `buildDescriptor`: 从 `def.table` 自动提取 `WorkflowGraph` - `validateWorkflowDescriptor`: 新增 graph 结构校验 ### workflow-template-develop / solve-issue - 直接导出 table(`developTable` / `solveIssueTable`),不再调 `tableToModerator()` ### cli-workflow - init scaffold 改为 `ModeratorTable` 写法 - skill 文档同步更新 ### 测试 - 全部 99 tests pass,0 fail - descriptor 测试增加 graph 边数量断言 ## Ref Closes #200 Unblocks #198
xingyue added 1 commit 2026-05-12 02:01:50 +00:00
- WorkflowDefinition.moderator → WorkflowDefinition.table (ModeratorTable)
- Moderator type + tableToModerator no longer exported from protocol/runtime
- tableToModerator internalized in workflow-execute engine layer
- WorkflowDescriptor gains graph: WorkflowGraph (auto-extracted from table)
- buildDescriptor extracts serializable graph edges from ModeratorTable
- validateWorkflowDescriptor validates graph structure
- All templates (develop, solve-issue) export table directly
- CLI init scaffold updated to use ModeratorTable
- 99 tests pass, 0 failures
xiaomo approved these changes 2026-05-12 02:06:02 +00:00
xiaomo left a comment
Owner

漂亮的重构

亮点:

  • 接口简化到位:moderator 函数 → table 声明式数据,模板层去掉 tableToModerator 包装,直接 export table
  • tableToModerator 正确下沉到 create-workflow.ts 内部一次性调用,对外零暴露
  • buildDescriptor 自动从 table 提取 WorkflowGraph,#198 可视化不再被阻塞
  • graphFromTable 实现简洁,condition name/description 提取正确
  • descriptor validator 拆成 validateDescriptorGraph / validateDescriptorGraphEdge,满足 Biome 复杂度限制的同时可读性更好
  • 子路径导出 @uncaged/workflow-protocol/moderator-table.js 供 engine 和测试内部用,不污染公开 API
  • 测试里 tableToModerator 从 protocol 子路径 import,测试逻辑不变只是桥接方式变了
  • 99/99 全绿

LGTM 🚀

漂亮的重构 ✅ **亮点:** - 接口简化到位:`moderator` 函数 → `table` 声明式数据,模板层去掉 `tableToModerator` 包装,直接 export table - `tableToModerator` 正确下沉到 `create-workflow.ts` 内部一次性调用,对外零暴露 - `buildDescriptor` 自动从 table 提取 `WorkflowGraph`,#198 可视化不再被阻塞 - `graphFromTable` 实现简洁,condition name/description 提取正确 - descriptor validator 拆成 `validateDescriptorGraph` / `validateDescriptorGraphEdge`,满足 Biome 复杂度限制的同时可读性更好 - 子路径导出 `@uncaged/workflow-protocol/moderator-table.js` 供 engine 和测试内部用,不污染公开 API - 测试里 `tableToModerator` 从 protocol 子路径 import,测试逻辑不变只是桥接方式变了 - 99/99 全绿 LGTM 🚀
xiaomo merged commit aebff8b906 into main 2026-05-12 02:06:04 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/workflow#201