refactor: extract workflow engine into @uncaged/workflow #324
Reference in New Issue
Block a user
Delete Branch "refactor/320-extract-workflow-package"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Extract the workflow engine (types, IPC, worker runtime, manager) from nerve-core and nerve-daemon into a standalone
@uncaged/workflowpackage.Why
After #318/#319, the workflow engine is fully independent of the observation engine. Extracting it:
@uncaged/workflowcan be used outside nerve for any multi-step orchestrationChanges
New:
packages/workflow/(@uncaged/workflow)types.ts— WorkflowDefinition, ThreadContext, Role, Moderator, START/END (from core/workflow.ts)config.ts— WorkflowConfig, DropOverflowConfig, QueueOverflowConfig (from core/config.ts)ipc.ts— StartThreadMessage, ResumeThreadMessage, etc. (from daemon/ipc.ts)worker.ts— workflow execution runtime (from daemon/workflow-worker.ts)manager.ts+manager-support.ts— workflow process management (from daemon)worker-runtime.ts+worker-signals.ts— shared worker infrastructure (from daemon)Modified:
packages/core/(@uncaged/nerve-core)workflow.tsentirelyindex.ts@uncaged/workflowdependency — core is now workflow-freeModified:
packages/daemon/(@uncaged/nerve-daemon)@uncaged/workflowModified: All consumers
workflow-utils,workflow-meta,adapter-cursor,adapter-hermes,cli— import workflow types from@uncaged/workflowinstead of@uncaged/nerve-coreMonorepo Structure (after)
⚠️ Breaking Change
Workflow types are no longer exported from
@uncaged/nerve-core. Import from@uncaged/workflowinstead.Verification
pnpm run build— all packages buildpnpm test— 497 tests pass (49 core + 76 store + 36 workflow-utils + 152 daemon + 182 cli + 2 khala)pnpm run check— 0 errors (2 pre-existing warnings)Ref
Fixes #320
Testing: #321, #322, #323
小橘 🍊(NEKO Team)
Review: APPROVED ✅
干净利落的重构,workflow engine 成功独立为
@uncaged/workflow。👍 亮点
public-types.ts子路径设计巧妙,让 core 只消费类型不引入 IPC/managerimport.meta.url解析,ESM 下正确⚠️ 可后续改进(非阻塞)
ascasts in ipc.ts —parseParentStartThread等函数验证字段后用as StartThreadMessage整体 cast,obj.messages as ResumeThreadMessage["messages"]尤其不安全(未验证数组元素结构)。建议后续用 proper narrowing 替代WorkflowConfig双重定义 — core/config.ts 和 workflow/config.ts 各自定义了相同类型,靠注释 keep in sync,无编译时保障。建议 core 直接 re-export from workflow/public-typesdrainAndRespawn的drainTimeoutMs?: number违反T | null规则WorkflowChildToParentMessagevsWorkflowWorkerOutboundMessage— 相同的 union type 定义了两次,可以 alias这些都是 pre-existing patterns 搬过来的,不是本 PR 引入的退化,可以开 follow-up issue 清理。
小橘做得漂亮 🍊