refactor: extract workflow engine into standalone @uncaged/workflow package #320

Closed
opened 2026-05-02 14:39:14 +00:00 by xiaoju · 0 comments
Owner

What

Extract the workflow engine (multi-step role/moderator orchestration) from nerve-core and nerve-daemon into a standalone @uncaged/workflow package.

Why

After #318 / #319, senses no longer couple to workflow types. The workflow engine is now a fully independent subsystem that:

  • Can be used outside of nerve (any system needing multi-step orchestration)
  • Has its own lifecycle (CLI-triggered, not sense-triggered)
  • Has distinct concerns from the observation engine

Separating it makes both systems cleaner and independently evolvable.

What moves to @uncaged/workflow

From packages/core/src/workflow.ts

  • WorkflowDefinition, Role, Moderator, ThreadContext
  • RoleResult, RoleStep, WorkflowMessage
  • StartStep, AgentFn
  • START, END constants
  • DEFAULT_ENGINE_MAX_ROUNDS

From packages/core/src/config.ts

  • WorkflowConfig type
  • Workflow-related config parsing

From packages/daemon/

  • workflow-manager.ts → workflow process management
  • workflow-worker.ts → workflow execution runtime
  • Workflow-related IPC messages (start-thread, thread-step, thread-complete, etc.)

From packages/workflow-utils/

  • Could merge into @uncaged/workflow or keep as a separate helper package

What stays in nerve

  • @uncaged/nerve-core: Sense types, SenseTrigger ({ command }), config parsing (minus workflow parts)
  • @uncaged/nerve-daemon: Sense scheduler, sense workers, kernel (imports @uncaged/workflow for workflow execution)
  • @uncaged/nerve-cli: CLI commands — nerve workflow trigger calls into @uncaged/workflow

New monorepo structure

nerve/
  packages/
    core/           # @uncaged/nerve-core — sense types, config
    workflow/       # @uncaged/workflow — standalone orchestration engine
    workflow-utils/ # helper roles, extract layer (or merge into workflow)
    daemon/         # @uncaged/nerve-daemon — sense engine + workflow integration
    cli/            # @uncaged/nerve-cli

Migration strategy

  1. Create packages/workflow/ with types + runtime moved from core + daemon
  2. Re-export from nerve-core for backward compat (deprecated)
  3. Update daemon to import from @uncaged/workflow
  4. Update CLI workflow commands
  5. Update workspace workflow definitions to import from @uncaged/workflow
  6. Remove deprecated re-exports in a follow-up

小橘 🍊(NEKO Team)

## What Extract the workflow engine (multi-step role/moderator orchestration) from nerve-core and nerve-daemon into a standalone `@uncaged/workflow` package. ## Why After #318 / #319, senses no longer couple to workflow types. The workflow engine is now a fully independent subsystem that: - Can be used outside of nerve (any system needing multi-step orchestration) - Has its own lifecycle (CLI-triggered, not sense-triggered) - Has distinct concerns from the observation engine Separating it makes both systems cleaner and independently evolvable. ## What moves to `@uncaged/workflow` ### From `packages/core/src/workflow.ts` - `WorkflowDefinition`, `Role`, `Moderator`, `ThreadContext` - `RoleResult`, `RoleStep`, `WorkflowMessage` - `StartStep`, `AgentFn` - `START`, `END` constants - `DEFAULT_ENGINE_MAX_ROUNDS` ### From `packages/core/src/config.ts` - `WorkflowConfig` type - Workflow-related config parsing ### From `packages/daemon/` - `workflow-manager.ts` → workflow process management - `workflow-worker.ts` → workflow execution runtime - Workflow-related IPC messages (`start-thread`, `thread-step`, `thread-complete`, etc.) ### From `packages/workflow-utils/` - Could merge into `@uncaged/workflow` or keep as a separate helper package ## What stays in nerve - `@uncaged/nerve-core`: Sense types, SenseTrigger (`{ command }`), config parsing (minus workflow parts) - `@uncaged/nerve-daemon`: Sense scheduler, sense workers, kernel (imports `@uncaged/workflow` for workflow execution) - `@uncaged/nerve-cli`: CLI commands — `nerve workflow trigger` calls into `@uncaged/workflow` ## New monorepo structure ``` nerve/ packages/ core/ # @uncaged/nerve-core — sense types, config workflow/ # @uncaged/workflow — standalone orchestration engine workflow-utils/ # helper roles, extract layer (or merge into workflow) daemon/ # @uncaged/nerve-daemon — sense engine + workflow integration cli/ # @uncaged/nerve-cli ``` ## Migration strategy 1. Create `packages/workflow/` with types + runtime moved from core + daemon 2. Re-export from nerve-core for backward compat (deprecated) 3. Update daemon to import from `@uncaged/workflow` 4. Update CLI workflow commands 5. Update workspace workflow definitions to import from `@uncaged/workflow` 6. Remove deprecated re-exports in a follow-up --- 小橘 🍊(NEKO Team)
This repo is archived. You cannot comment on issues.
No Label
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/nerve#320