From 591be21bb0151d2d36be648b49cf858537023f6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Tue, 5 May 2026 10:27:08 +0000 Subject: [PATCH] refactor(workflow): scaffold @uncaged/workflow, move types from core - Create packages/workflow/ with types.ts (from core/workflow.ts) and config.ts - Core re-exports workflow types from @uncaged/workflow - Delete packages/core/src/workflow.ts Phase 1+2 of #320, Testing: #321 --- packages/core/package.json | 1 + packages/core/src/config.ts | 22 ++++++---------- packages/core/src/index.ts | 4 +-- packages/workflow/package.json | 25 +++++++++++++++++++ packages/workflow/rslib.config.ts | 19 ++++++++++++++ packages/workflow/src/config.ts | 12 +++++++++ packages/workflow/src/index.ts | 19 ++++++++++++++ .../src/workflow.ts => workflow/src/types.ts} | 0 packages/workflow/tsconfig.json | 9 +++++++ pnpm-lock.yaml | 12 +++++++++ 10 files changed, 107 insertions(+), 16 deletions(-) create mode 100644 packages/workflow/package.json create mode 100644 packages/workflow/rslib.config.ts create mode 100644 packages/workflow/src/config.ts create mode 100644 packages/workflow/src/index.ts rename packages/{core/src/workflow.ts => workflow/src/types.ts} (100%) create mode 100644 packages/workflow/tsconfig.json diff --git a/packages/core/package.json b/packages/core/package.json index e784889..4727056 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -20,6 +20,7 @@ "test": "vitest run" }, "dependencies": { + "@uncaged/workflow": "workspace:*", "yaml": "^2.8.3" }, "devDependencies": { diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts index fb835d7..045d8b6 100644 --- a/packages/core/src/config.ts +++ b/packages/core/src/config.ts @@ -1,7 +1,14 @@ import { parse } from "yaml"; +import { + DEFAULT_ENGINE_MAX_ROUNDS, + type DropOverflowConfig, + type QueueOverflowConfig, + type WorkflowConfig, +} from "@uncaged/workflow"; import { type Result, err, isPlainRecord, ok, parseDurationStringToMs } from "./util.js"; -import { DEFAULT_ENGINE_MAX_ROUNDS } from "./workflow.js"; + +export type { DropOverflowConfig, QueueOverflowConfig, WorkflowConfig }; export type SenseConfig = { group: string; @@ -14,19 +21,6 @@ export type SenseConfig = { on: string[]; }; -export type DropOverflowConfig = { - concurrency: number; - overflow: "drop"; -}; - -export type QueueOverflowConfig = { - concurrency: number; - overflow: "queue"; - maxQueue: number; -}; - -export type WorkflowConfig = DropOverflowConfig | QueueOverflowConfig; - /** Optional HTTP control plane. When `port` is null, the HTTP server is not started. */ export type NerveApiConfig = { port: number | null; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 18f7135..e57283c 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -25,8 +25,8 @@ export type { ModeratorContext, Moderator, WorkflowDefinition, -} from "./workflow.js"; -export { START, END, DEFAULT_ENGINE_MAX_ROUNDS } from "./workflow.js"; +} from "@uncaged/workflow"; +export { START, END, DEFAULT_ENGINE_MAX_ROUNDS } from "@uncaged/workflow"; export type { Schema, ExtractFn } from "./agent.js"; export { ExtractError } from "./agent.js"; export type { Result } from "./util.js"; diff --git a/packages/workflow/package.json b/packages/workflow/package.json new file mode 100644 index 0000000..c56a3e2 --- /dev/null +++ b/packages/workflow/package.json @@ -0,0 +1,25 @@ +{ + "name": "@uncaged/workflow", + "version": "0.5.0", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "files": ["dist"], + "publishConfig": { + "access": "public" + }, + "scripts": { + "prepublishOnly": "bash ../../scripts/prepublish-check.sh", + "build": "rslib build" + }, + "devDependencies": { + "@rslib/core": "^0.21.3", + "@types/node": "^22.0.0" + } +} diff --git a/packages/workflow/rslib.config.ts b/packages/workflow/rslib.config.ts new file mode 100644 index 0000000..87bb8a3 --- /dev/null +++ b/packages/workflow/rslib.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from "@rslib/core"; + +export default defineConfig({ + lib: [ + { + format: "esm", + dts: true, + }, + ], + source: { + entry: { + index: "src/index.ts", + }, + }, + output: { + target: "node", + cleanDistPath: true, + }, +}); diff --git a/packages/workflow/src/config.ts b/packages/workflow/src/config.ts new file mode 100644 index 0000000..5fa1200 --- /dev/null +++ b/packages/workflow/src/config.ts @@ -0,0 +1,12 @@ +export type DropOverflowConfig = { + concurrency: number; + overflow: "drop"; +}; + +export type QueueOverflowConfig = { + concurrency: number; + overflow: "queue"; + maxQueue: number; +}; + +export type WorkflowConfig = DropOverflowConfig | QueueOverflowConfig; diff --git a/packages/workflow/src/index.ts b/packages/workflow/src/index.ts new file mode 100644 index 0000000..a2d0388 --- /dev/null +++ b/packages/workflow/src/index.ts @@ -0,0 +1,19 @@ +// @uncaged/workflow — standalone workflow orchestration engine + +export { START, END, DEFAULT_ENGINE_MAX_ROUNDS } from "./types.js"; +export type { + WorkflowMessage, + RoleResult, + Role, + RoleMeta, + StartStep, + ThreadContext, + WorkflowContext, + AgentFn, + RoleStep, + ModeratorContext, + Moderator, + WorkflowDefinition, +} from "./types.js"; + +export type { DropOverflowConfig, QueueOverflowConfig, WorkflowConfig } from "./config.js"; diff --git a/packages/core/src/workflow.ts b/packages/workflow/src/types.ts similarity index 100% rename from packages/core/src/workflow.ts rename to packages/workflow/src/types.ts diff --git a/packages/workflow/tsconfig.json b/packages/workflow/tsconfig.json new file mode 100644 index 0000000..9036088 --- /dev/null +++ b/packages/workflow/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "composite": false + }, + "include": ["src"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7f48b7d..5e29a24 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -86,6 +86,9 @@ importers: packages/core: dependencies: + '@uncaged/workflow': + specifier: workspace:* + version: link:../workflow yaml: specifier: ^2.8.3 version: 2.8.3 @@ -215,6 +218,15 @@ importers: specifier: ^4.1.5 version: 4.1.5(@types/node@22.19.17)(vite@8.0.9(@types/node@22.19.17)(esbuild@0.27.7)(yaml@2.8.3)) + packages/workflow: + devDependencies: + '@rslib/core': + specifier: ^0.21.3 + version: 0.21.3(typescript@5.9.3) + '@types/node': + specifier: ^22.0.0 + version: 22.19.17 + packages/workflow-meta: dependencies: '@uncaged/nerve-core':