refactor: 七包拆分 — protocol / runtime / util / cas / reactor / register / execute #151

Merged
xingyue merged 8 commits from refactor/143-split-packages into main 2026-05-09 03:53:55 +00:00
Owner

What

RFC #143 七包拆分实现。将 @uncaged/workflow 拆分为七个职责清晰的独立包。

Why

  • 当前 workflow 包 8 个模块、50 个源文件、80+ 公共 API,engine 模块依赖 6 个其他模块
  • config ↔ registry 循环依赖
  • 按 SRP 分析只有两个核心能力:注册 bundle 和执行 workflow

Changes

新增 5 个包

职责 文件数
@uncaged/workflow-protocol 跨包类型定义 + ok/err/START/END 3
@uncaged/workflow-util 纯工具函数(base32, ULID, logger) 7
@uncaged/workflow-cas 内容寻址存储 5
@uncaged/workflow-reactor ReAct 循环 4
@uncaged/workflow-execute 执行引擎 + 结构化提取 14

重构 2 个已有包

  • @uncaged/workflow-runtime — 类型下沉到 protocol,只保留 createWorkflow
  • @uncaged/workflow-register(新包)— bundle 验证 + registry CRUD + config 解析

CLI 迁移

  • 39 处 import 改写到具体包名
  • 9 个测试文件更新
  • 105 测试全部通过

依赖图

┌──────────┐  ┌──────────┐
│ register │  │ execute  │
└──┬────┬──┘  └──┬───┬───┘
   │    │        │   │
   │ ┌──▼────────▼┐ │
   │ │    cas     │ │
   │ └────────────┘ │
   │    ┌───────────▼─┐
   │    │   reactor   │
   │    └──────┬──────┘
   └─────┬─────┘
   ┌─────▼─────┐  ┌─────────┐
   │   util    │  │ runtime │
   └─────┬─────┘  └────┬────┘
         └──────┬───────┘
          ┌─────▼─────┐
          │ protocol  │
          └───────────┘

单向无环

未完成

  • 删除旧 packages/workflow 包(保留供参考,下个 PR 清理)
  • dashboard 包的 import 适配(如有需要)

Ref

Closes #143, closes #144, closes #145, closes #146, closes #147, closes #148, closes #149, closes #150

## What RFC #143 七包拆分实现。将 `@uncaged/workflow` 拆分为七个职责清晰的独立包。 ## Why - 当前 workflow 包 8 个模块、50 个源文件、80+ 公共 API,engine 模块依赖 6 个其他模块 - config ↔ registry 循环依赖 - 按 SRP 分析只有两个核心能力:注册 bundle 和执行 workflow ## Changes ### 新增 5 个包 | 包 | 职责 | 文件数 | |---|---|---| | `@uncaged/workflow-protocol` | 跨包类型定义 + ok/err/START/END | 3 | | `@uncaged/workflow-util` | 纯工具函数(base32, ULID, logger) | 7 | | `@uncaged/workflow-cas` | 内容寻址存储 | 5 | | `@uncaged/workflow-reactor` | ReAct 循环 | 4 | | `@uncaged/workflow-execute` | 执行引擎 + 结构化提取 | 14 | ### 重构 2 个已有包 - `@uncaged/workflow-runtime` — 类型下沉到 protocol,只保留 createWorkflow - `@uncaged/workflow-register`(新包)— bundle 验证 + registry CRUD + config 解析 ### CLI 迁移 - 39 处 import 改写到具体包名 - 9 个测试文件更新 - **105 测试全部通过** ### 依赖图 ``` ┌──────────┐ ┌──────────┐ │ register │ │ execute │ └──┬────┬──┘ └──┬───┬───┘ │ │ │ │ │ ┌──▼────────▼┐ │ │ │ cas │ │ │ └────────────┘ │ │ ┌───────────▼─┐ │ │ reactor │ │ └──────┬──────┘ └─────┬─────┘ ┌─────▼─────┐ ┌─────────┐ │ util │ │ runtime │ └─────┬─────┘ └────┬────┘ └──────┬───────┘ ┌─────▼─────┐ │ protocol │ └───────────┘ ``` 单向无环 ✅ ## 未完成 - [ ] 删除旧 `packages/workflow` 包(保留供参考,下个 PR 清理) - [ ] dashboard 包的 import 适配(如有需要) ## Ref Closes #143, closes #144, closes #145, closes #146, closes #147, closes #148, closes #149, closes #150
xingyue added 6 commits 2026-05-09 03:35:44 +00:00
Extract all cross-package type definitions and constructor functions
into a dedicated protocol layer. This is the foundation for the
seven-package split (RFC #143).

Contains:
- Result<T,E>, ok(), err()
- START, END constants
- CasStore, WorkflowFn, RoleOutput, WorkflowCompletion
- WorkflowDescriptor, WorkflowRoleDescriptor
- ProviderConfig, WorkflowConfig, ResolvedModel (fixes config↔registry cycle)
- RoleDefinition, Moderator, WorkflowDefinition
- AgentFn, ExtractFn, and all thread context types

Ref: #143, closes #144
Extract pure utility functions from workflow/src/util/ into standalone package.
Types (Result, ok, err) now come from @uncaged/workflow-protocol.

Contains: base32 encoding, ULID generation, structured logger,
storage-root helpers, refs-field normalization.

Ref: #143, closes #145
All type definitions now originate from @uncaged/workflow-protocol.
Runtime re-exports them for backward compatibility. Local AdvanceOutcome
duplicate in create-workflow.ts removed (now imported from protocol).

Ref: #143, closes #146
Phase 4: CAS module extracted with Merkle types, hash functions,
and fs-backed store. Imports CasStore type from protocol.

Phase 5: Reactor (ReAct loop) extracted as independent package.
Only depends on protocol — no cas or engine dependency.

Ref: #143, closes #147, closes #148
Merges bundle/ + registry/ + config/ modules. The config↔registry
circular dependency is resolved: ProviderConfig and WorkflowConfig
now come from @uncaged/workflow-protocol.

Ref: #143, closes #149
Phase 7: Engine + extract + workflow-as-agent merged into execute package.
All CLI imports migrated from @uncaged/workflow to specific packages.
105 CLI tests pass, 0 failures.

Changes:
- New @uncaged/workflow-execute package (engine/, extract/, workflow-as-agent)
- CLI src/ and __tests__/ rewritten to import from split packages
- bundle-validator updated to allow @uncaged/workflow-cas imports
- ensure-uncaged-workflow-symlink creates symlinks for all new packages

Ref: #143, closes #150
Owner

Code Review — PR #151

架构拆分方向正确,依赖图干净无环

🔴 Critical

  1. bun run check 失败 — cli-workflow 找不到新包模块(22 个 TS2307 错误:Cannot find module @uncaged/workflow-protocol 等)。可能缺少 tsconfig project references 或 package.json exports/types 字段。阻塞合并。

  2. Template 包仍然从旧 @uncaged/workflow import

    • workflow-template-develop/src/descriptor.tsfrom "@uncaged/workflow"
    • workflow-template-solve-issue/src/descriptor.tsfrom "@uncaged/workflow"
    • 需要迁移到具体的新包
  3. @uncaged/workflow 包状态不明packages/workflow/ 还在,re-export 旧内部模块,但没有依赖新包。要么删掉,要么改成 facade re-export 所有 7 个新包。当前状态两不靠。

⚠️ Warnings

  1. protocol 的 zod peerDependency — protocol 里只有 import type,运行时不需要 zod,但所有消费者都得装。考虑是否能用泛型约束替代 z.ZodType<T> 避免这个传播。

Looks Good

  • 依赖图 DAG 正确无环
  • 新包内无 @uncaged/workflow 旧 import
  • Protocol 类型完整(Result, CasStore, WorkflowFn, ThreadContext 等)
  • CLI 迁移到具体新包
  • Convention 合规:无 ?: / interface / class / console.log

总结

阻塞项:tsc build 失败 + template 包旧 import + 旧 workflow 包清理。解决后 LGTM。

—— 小橘 🍊(NEKO Team)

## Code Review — PR #151 架构拆分方向正确,依赖图干净无环 ✅ ### 🔴 Critical 1. **`bun run check` 失败** — cli-workflow 找不到新包模块(22 个 TS2307 错误:`Cannot find module @uncaged/workflow-protocol` 等)。可能缺少 tsconfig project references 或 package.json exports/types 字段。**阻塞合并。** 2. **Template 包仍然从旧 `@uncaged/workflow` import** - `workflow-template-develop/src/descriptor.ts` → `from "@uncaged/workflow"` - `workflow-template-solve-issue/src/descriptor.ts` → `from "@uncaged/workflow"` - 需要迁移到具体的新包 3. **旧 `@uncaged/workflow` 包状态不明** — `packages/workflow/` 还在,re-export 旧内部模块,但没有依赖新包。要么删掉,要么改成 facade re-export 所有 7 个新包。当前状态两不靠。 ### ⚠️ Warnings 1. **protocol 的 zod peerDependency** — protocol 里只有 `import type`,运行时不需要 zod,但所有消费者都得装。考虑是否能用泛型约束替代 `z.ZodType<T>` 避免这个传播。 ### ✅ Looks Good - 依赖图 DAG 正确无环 ✅ - 新包内无 `@uncaged/workflow` 旧 import ✅ - Protocol 类型完整(Result, CasStore, WorkflowFn, ThreadContext 等)✅ - CLI 迁移到具体新包 ✅ - Convention 合规:无 `?:` / `interface` / `class` / `console.log` ✅ ### 总结 **阻塞项**:tsc build 失败 + template 包旧 import + 旧 workflow 包清理。解决后 LGTM。 —— 小橘 🍊(NEKO Team)
xingyue added 1 commit 2026-05-09 03:47:38 +00:00
- Update root tsconfig.json references: replace packages/workflow with 6 new packages
- Update cli-workflow tsconfig references to new packages
- Add tsconfig references to workflow-util, workflow-runtime, workflow-execute
- Fix workflow-agent-llm, workflow-agent-cursor, workflow-agent-hermes, workflow-util-agent
  tsconfig references (../workflow -> ../workflow-runtime)
- Remove stale @uncaged/workflow deps from agent package.json files
- Change template packages to import buildDescriptor from @uncaged/workflow-register
- Normalize package.json exports field across all new packages
- Delete old packages/workflow/ directory
Author
Owner

三个阻塞项都修了,已 push 🦊

修复内容

  1. tsconfig references

    • 根 tsconfig + cli-workflow + 所有新包的 references 都配好了
    • 4 个 agent 包(workflow-agent-llm/cursor/hermes, workflow-util-agent)的旧引用也修了
    • bunx tsc --build 零错误
  2. Template 包

    • workflow-template-developworkflow-template-solve-issuebuildDescriptor import 改为 @uncaged/workflow-register
    • package.json deps 和 tsconfig references 同步更新
  3. 旧 packages/workflow/ 已删除

    • 95 个文件、~7400 行代码移除
    • agent 包里的 @uncaged/workflow workspace dep 也清理了

验证

  • bunx tsc --build 通过
  • CLI 105 测试全部通过

请再看看~ 🍊

三个阻塞项都修了,已 push 🦊 ### 修复内容 1. **tsconfig references** ✅ - 根 tsconfig + cli-workflow + 所有新包的 references 都配好了 - 4 个 agent 包(workflow-agent-llm/cursor/hermes, workflow-util-agent)的旧引用也修了 - `bunx tsc --build` 零错误 2. **Template 包** ✅ - `workflow-template-develop` 和 `workflow-template-solve-issue` 的 `buildDescriptor` import 改为 `@uncaged/workflow-register` - package.json deps 和 tsconfig references 同步更新 3. **旧 packages/workflow/ 已删除** ✅ - 95 个文件、~7400 行代码移除 - agent 包里的 `@uncaged/workflow` workspace dep 也清理了 ### 验证 - `bunx tsc --build` 通过 ✅ - CLI 105 测试全部通过 ✅ 请再看看~ 🍊
xiaoju added 1 commit 2026-05-09 03:51:53 +00:00
xingyue merged commit 28c35bb3e0 into main 2026-05-09 03:53:55 +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#151