refactor: update all consumers to import from @uncaged/workflow

- workflow-utils, workflow-meta: import workflow types from @uncaged/workflow
- adapter-cursor, adapter-hermes: same
- cli: same
- core: remove workflow re-exports, no longer depends on @uncaged/workflow

Phase 5+6 of #320, Testing: #323
This commit is contained in:
2026-05-05 10:56:12 +00:00
parent cee65bbd87
commit 7434047aae
51 changed files with 215 additions and 132 deletions
+6
View File
@@ -4,6 +4,12 @@
"engines": {
"node": ">=22.5.0"
},
"pnpm": {
"overrides": {
"@uncaged/nerve-core": "workspace:*",
"@uncaged/nerve-store": "workspace:*"
}
},
"scripts": {
"prepare": "husky",
"build": "pnpm --filter @uncaged/workflow run build:public-types && pnpm --filter @uncaged/nerve-core run build && pnpm --filter @uncaged/nerve-store run build && pnpm --filter @uncaged/workflow run build && pnpm -r --filter '!@uncaged/nerve-core' --filter '!@uncaged/nerve-store' --filter '!@uncaged/workflow' run build",
+2 -1
View File
@@ -14,7 +14,8 @@
"test": "vitest run --passWithNoTests"
},
"dependencies": {
"@uncaged/nerve-core": "workspace:*"
"@uncaged/nerve-core": "workspace:*",
"@uncaged/workflow": "workspace:*"
},
"devDependencies": {
"@rslib/core": "^0.21.3",
+2 -1
View File
@@ -1,4 +1,5 @@
import type { AgentConfig, AgentFn, ThreadContext } from "@uncaged/nerve-core";
import type { AgentConfig } from "@uncaged/nerve-core";
import type { AgentFn, ThreadContext } from "@uncaged/workflow";
import { type Result, type SpawnEnv, type SpawnError, ok, spawnSafe } from "@uncaged/nerve-core";
export type CursorAgentMode = "plan" | "ask" | "default";
+2 -1
View File
@@ -14,7 +14,8 @@
"test": "vitest run --passWithNoTests"
},
"dependencies": {
"@uncaged/nerve-core": "workspace:*"
"@uncaged/nerve-core": "workspace:*",
"@uncaged/workflow": "workspace:*"
},
"devDependencies": {
"@rslib/core": "^0.21.3",
+2 -1
View File
@@ -1,4 +1,5 @@
import type { AgentConfig, AgentFn, ThreadContext } from "@uncaged/nerve-core";
import type { AgentConfig } from "@uncaged/nerve-core";
import type { AgentFn, ThreadContext } from "@uncaged/workflow";
import { type Result, type SpawnEnv, type SpawnError, ok, spawnSafe } from "@uncaged/nerve-core";
/**
+1 -1
View File
@@ -23,6 +23,7 @@
"dependencies": {
"@uncaged/nerve-core": "workspace:*",
"@uncaged/nerve-store": "workspace:*",
"@uncaged/workflow": "workspace:*",
"citty": "^0.1.6",
"picomatch": "^4.0.2",
"yaml": "^2.8.3"
@@ -31,7 +32,6 @@
"@rslib/core": "^0.21.3",
"@types/node": "^22.0.0",
"@uncaged/nerve-daemon": "workspace:*",
"@uncaged/workflow": "workspace:*",
"vitest": "^4.1.5"
}
}
@@ -27,10 +27,10 @@ describe("buildWorkflowScaffold", () => {
expect(roleMainIndexTs).toContain("my-workflow started");
});
it("root index contains WorkflowDefinition import from nerve-core", () => {
it("root index contains WorkflowDefinition import from @uncaged/workflow", () => {
const { indexTs } = buildWorkflowScaffold("test");
expect(indexTs).toContain("WorkflowDefinition");
expect(indexTs).toContain("@uncaged/nerve-core");
expect(indexTs).toContain("@uncaged/workflow");
});
it("root index wires moderator with ThreadContext and END", () => {
+25 -3
View File
@@ -2,9 +2,12 @@
* E2E-style tests for `nerve create workflow` and `nerve create sense`.
*/
import { execFile } from "node:child_process";
import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
import { createRequire } from "node:module";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { dirname, join } from "node:path";
import { promisify } from "node:util";
import { defineCommand, runCommand } from "citty";
import { afterEach, describe, expect, it } from "vitest";
@@ -12,6 +15,23 @@ import { afterEach, describe, expect, it } from "vitest";
import { createCommand } from "../commands/create.js";
import { initCommand } from "../commands/init.js";
const execFileAsync = promisify(execFile);
const requireFromHere = createRequire(import.meta.url);
/**
* Default init pins `@uncaged/workflow` to npm `latest`, but that package is not published yet.
* Install from the monorepo workspace so `pnpm run build` can resolve workflow types.
*/
async function installWorkspaceWithLocalWorkflow(nerveRoot: string): Promise<void> {
const pkgPath = join(nerveRoot, "package.json");
const pkg = JSON.parse(readFileSync(pkgPath, "utf8")) as { dependencies: Record<string, string> };
const wfRoot = dirname(requireFromHere.resolve("@uncaged/workflow/package.json"));
pkg.dependencies["@uncaged/workflow"] = `file:${wfRoot}`;
writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`, "utf8");
await execFileAsync("pnpm", ["install", "--no-frozen-lockfile"], { cwd: nerveRoot });
await execFileAsync("pnpm", ["run", "build"], { cwd: nerveRoot });
}
const testRootCommand = defineCommand({
meta: { name: "nerve", description: "e2e-create" },
subCommands: {
@@ -128,7 +148,8 @@ describe("e2e create", () => {
fakeHome = mkdtempSync(join(tmpdir(), "nerve-create-e2e-"));
const nerveRoot = join(fakeHome, ".uncaged-nerve");
await runTestCli(fakeHome, ["init", "--force"]);
await runTestCli(fakeHome, ["init", "--force", "--skip-install"]);
await installWorkspaceWithLocalWorkflow(nerveRoot);
const wf = await runTestCli(fakeHome, ["create", "workflow", "e2e-flow"]);
expect(wf.exitCode).toBe(0);
@@ -153,7 +174,8 @@ describe("e2e create", () => {
fakeHome = mkdtempSync(join(tmpdir(), "nerve-create-e2e-"));
const nerveRoot = join(fakeHome, ".uncaged-nerve");
await runTestCli(fakeHome, ["init", "--force"]);
await runTestCli(fakeHome, ["init", "--force", "--skip-install"]);
await installWorkspaceWithLocalWorkflow(nerveRoot);
const sense = await runTestCli(fakeHome, ["create", "sense", "e2e-sense"]);
expect(sense.exitCode).toBe(0);
+3 -3
View File
@@ -31,8 +31,8 @@ export function buildWorkflowScaffold(name: string): WorkflowScaffoldFiles {
}
function buildWorkflowIndexTs(name: string): string {
return `import type { ThreadContext, WorkflowDefinition } from "@uncaged/nerve-core";
import { END } from "@uncaged/nerve-core";
return `import type { ThreadContext, WorkflowDefinition } from "@uncaged/workflow";
import { END } from "@uncaged/workflow";
import { mainRole } from "./roles/main/index.js";
@@ -56,7 +56,7 @@ export default workflow;
}
function buildWorkflowMainRoleIndexTs(name: string): string {
return `import type { RoleResult, ThreadContext } from "@uncaged/nerve-core";
return `import type { RoleResult, ThreadContext } from "@uncaged/workflow";
/**
* Main role — implement LLM calls, scripts, HTTP, etc.
+1
View File
@@ -54,6 +54,7 @@ const PACKAGE_JSON = `${JSON.stringify(
dependencies: {
"@uncaged/nerve-core": "latest",
"@uncaged/nerve-daemon": "latest",
"@uncaged/workflow": "latest",
zod: "^4.3.6",
},
devDependencies: {
+2 -1
View File
@@ -1,7 +1,8 @@
import { existsSync, readFileSync } from "node:fs";
import { join } from "node:path";
import { DEFAULT_ENGINE_MAX_ROUNDS, isPlainRecord, parseNerveConfig } from "@uncaged/nerve-core";
import { isPlainRecord, parseNerveConfig } from "@uncaged/nerve-core";
import { DEFAULT_ENGINE_MAX_ROUNDS } from "@uncaged/workflow";
import { defineCommand } from "citty";
import { stringify } from "yaml";
+2 -6
View File
@@ -20,12 +20,8 @@ import type {
SenseInfo,
WorkflowStatus,
} from "@uncaged/nerve-core";
import {
DEFAULT_ENGINE_MAX_ROUNDS,
isPlainRecord,
isSenseInfo,
isWorkflowStatus,
} from "@uncaged/nerve-core";
import { isPlainRecord, isSenseInfo, isWorkflowStatus } from "@uncaged/nerve-core";
import { DEFAULT_ENGINE_MAX_ROUNDS } from "@uncaged/workflow";
import { getCliDaemonApiToken, getCliDaemonHost } from "./cli-global.js";
import { HttpTransport } from "./http-transport.js";
+2 -6
View File
@@ -6,12 +6,8 @@ import type {
SenseInfo,
WorkflowStatus,
} from "@uncaged/nerve-core";
import {
DEFAULT_ENGINE_MAX_ROUNDS,
isPlainRecord,
isSenseInfo,
isWorkflowStatus,
} from "@uncaged/nerve-core";
import { isPlainRecord, isSenseInfo, isWorkflowStatus } from "@uncaged/nerve-core";
import { DEFAULT_ENGINE_MAX_ROUNDS } from "@uncaged/workflow";
function normalizeBaseUrl(host: string): string {
const t = host.trim();
-1
View File
@@ -20,7 +20,6 @@
"test": "vitest run"
},
"dependencies": {
"@uncaged/workflow": "workspace:*",
"yaml": "^2.8.3"
},
"devDependencies": {
+43 -34
View File
@@ -1,37 +1,46 @@
import { type DropOverflowConfig, type QueueOverflowConfig, type WorkflowConfig } from "@uncaged/workflow";
import { type Result } from "./util.js";
export type { DropOverflowConfig, QueueOverflowConfig, WorkflowConfig };
export type DropOverflowConfig = {
concurrency: number;
overflow: "drop";
};
export type QueueOverflowConfig = {
concurrency: number;
overflow: "queue";
maxQueue: number;
};
export type WorkflowConfig = DropOverflowConfig | QueueOverflowConfig;
export declare const DEFAULT_ENGINE_MAX_ROUNDS: number;
export type SenseConfig = {
group: string;
throttle: number | null;
timeout: number | null;
gracePeriod: number | null;
/** Polling interval (ms). When set, the sense is triggered periodically. */
interval: number | null;
/** Other sense names whose successful computes schedule this sense (kernel reverse-index). */
on: string[];
group: string;
throttle: number | null;
timeout: number | null;
gracePeriod: number | null;
/** Polling interval (ms). When set, the sense is triggered periodically. */
interval: number | null;
/** Other sense names whose successful computes schedule this sense (kernel reverse-index). */
on: string[];
};
/** Optional HTTP control plane. When `port` is null, the HTTP server is not started. */
export type NerveApiConfig = {
port: number | null;
/** When set, HTTP API requires `Authorization: Bearer <token>`. */
token: string | null;
/** Bind address (e.g. `127.0.0.1`, `0.0.0.0`). Meaningful when `port` is set. */
host: string;
port: number | null;
/** When set, HTTP API requires `Authorization: Bearer <token>`. */
token: string | null;
/** Bind address (e.g. `127.0.0.1`, `0.0.0.0`). Meaningful when `port` is set. */
host: string;
};
/** Adapter factory input (model, timeout); used by adapter packages (RFC-003). */
export type AgentConfig = {
/** Adapter id (e.g. `cursor`, `hermes`, `echo`) — informational for factories that branch on type. */
type: string;
/** Model id or `"auto"` for adapter defaults. */
model: string;
/** Wall-clock cap in milliseconds, or `null` for adapter-specific default. */
timeout: number | null;
/** Adapter id (e.g. `cursor`, `hermes`, `echo`) — informational for factories that branch on type. */
type: string;
/** Model id or `"auto"` for adapter-specific default. */
model: string;
/** Wall-clock cap in milliseconds, or `null` for adapter-specific default. */
timeout: number | null;
};
/** Global extract provider for typed meta from agent raw output (RFC-003). */
export type ExtractConfig = {
provider: string;
model: string;
provider: string;
model: string;
};
/**
* Optional shell side effect after a successful sense `compute()`.
@@ -39,20 +48,20 @@ export type ExtractConfig = {
* Workflows are started only via CLI / daemon IPC, not from sense compute results.
*/
export type SenseTrigger = {
command: string;
command: string;
};
export type NerveConfig = {
/** Engine-wide default max moderator rounds (e.g. CLI workflow trigger when omitted). */
maxRounds: number;
senses: Record<string, SenseConfig>;
workflows: Record<string, WorkflowConfig>;
api: NerveApiConfig;
/** Global extract defaults; `null` when the section is omitted. */
extract: ExtractConfig | null;
/** Engine-wide default max moderator rounds (e.g. CLI workflow trigger when omitted). */
maxRounds: number;
senses: Record<string, SenseConfig>;
workflows: Record<string, WorkflowConfig>;
api: NerveApiConfig;
/** Global extract defaults; `null` when the section is omitted. */
extract: ExtractConfig | null;
};
export type KnowledgeConfig = {
include: ReadonlyArray<string>;
exclude: ReadonlyArray<string>;
include: ReadonlyArray<string>;
exclude: ReadonlyArray<string>;
};
export declare function parseNerveConfig(raw: string): Result<NerveConfig>;
/**
@@ -60,4 +69,4 @@ export declare function parseNerveConfig(raw: string): Result<NerveConfig>;
* `include` / `exclude` entries are glob patterns resolved against the repo root.
*/
export declare function parseKnowledgeYaml(raw: string): Result<KnowledgeConfig>;
//# sourceMappingURL=config.d.ts.map
//# sourceMappingURL=config.d.ts.map
+19 -7
View File
@@ -1,14 +1,26 @@
import { parse } from "yaml";
import {
DEFAULT_ENGINE_MAX_ROUNDS,
type DropOverflowConfig,
type QueueOverflowConfig,
type WorkflowConfig,
} from "@uncaged/workflow/public-types";
import { type Result, err, isPlainRecord, ok, parseDurationStringToMs } from "./util.js";
export type { DropOverflowConfig, QueueOverflowConfig, WorkflowConfig };
/**
* Workflow queue/runtime limits parsed from nerve.yaml.
* Shapes match the standalone workflow package — core must not depend on it (#320).
*/
export type DropOverflowConfig = {
concurrency: number;
overflow: "drop";
};
export type QueueOverflowConfig = {
concurrency: number;
overflow: "queue";
maxQueue: number;
};
export type WorkflowConfig = DropOverflowConfig | QueueOverflowConfig;
/** Engine-wide fallback when nerve.yaml omits max_rounds (keep in sync with workflow package default). */
export const DEFAULT_ENGINE_MAX_ROUNDS = 100;
export type SenseConfig = {
group: string;
+33 -7
View File
@@ -1,21 +1,47 @@
export type { SenseConfig, DropOverflowConfig, QueueOverflowConfig, WorkflowConfig, NerveApiConfig, AgentConfig, ExtractConfig, NerveConfig, SenseTrigger, } from "./config.js";
export type { SenseConfig, NerveApiConfig, AgentConfig, ExtractConfig, NerveConfig, SenseTrigger } from "./config.js";
export type { SenseInfo } from "./sense.js";
export type { SenseComputeFn, SenseModule } from "./sense.js";
export { senseTriggerLabels } from "./sense.js";
export type { WorkflowMessage, RoleResult, Role, RoleMeta, StartStep, ThreadContext, WorkflowContext, AgentFn, RoleStep, ModeratorContext, Moderator, WorkflowDefinition, } 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";
export { ok, err } from "./util.js";
export { nerveCommandEnv, spawnSafe, type SpawnEnv, type SpawnError, type SpawnResult, type SpawnSafeOptions, } from "./util.js";
export {
nerveCommandEnv,
spawnSafe,
type SpawnEnv,
type SpawnError,
type SpawnResult,
type SpawnSafeOptions,
} from "./util.js";
export { parseNerveConfig } from "./config.js";
export type { KnowledgeConfig } from "./config.js";
export { parseKnowledgeYaml } from "./config.js";
export { isPlainRecord } from "./util.js";
export { parseSenseTrigger } from "./sense.js";
export { isSenseInfo, isWorkflowStatus } from "./daemon.js";
export type { WorkflowStatus, HealthInfo, DaemonIpcTriggerWorkflowRequest, DaemonIpcTriggerSenseRequest, DaemonIpcListSensesRequest, DaemonIpcKillWorkflowRequest, DaemonIpcListWorkflowsRequest, DaemonIpcHealthRequest, DaemonIpcRequest, DaemonIpcTriggerOkResponse, DaemonIpcErrorResponse, DaemonIpcTriggerResponse, DaemonIpcListSensesResponse, DaemonIpcListWorkflowsResponse, DaemonIpcHealthResponse, DaemonIpcResponse, } from "./daemon.js";
export type {
WorkflowStatus,
HealthInfo,
DaemonIpcTriggerWorkflowRequest,
DaemonIpcTriggerSenseRequest,
DaemonIpcListSensesRequest,
DaemonIpcKillWorkflowRequest,
DaemonIpcListWorkflowsRequest,
DaemonIpcHealthRequest,
DaemonIpcRequest,
DaemonIpcTriggerOkResponse,
DaemonIpcErrorResponse,
DaemonIpcTriggerResponse,
DaemonIpcListSensesResponse,
DaemonIpcListWorkflowsResponse,
DaemonIpcHealthResponse,
DaemonIpcResponse,
} from "./daemon.js";
export { parseDaemonIpcRequest } from "./daemon.js";
export type { DaemonTransport, DaemonTransportTriggerResult, DaemonTransportWorkflowLaunch, } from "./daemon.js";
//# sourceMappingURL=index.d.ts.map
export type {
DaemonTransport,
DaemonTransportTriggerResult,
DaemonTransportWorkflowLaunch,
} from "./daemon.js";
//# sourceMappingURL=index.d.ts.map
-18
View File
@@ -1,8 +1,5 @@
export type {
SenseConfig,
DropOverflowConfig,
QueueOverflowConfig,
WorkflowConfig,
NerveApiConfig,
AgentConfig,
ExtractConfig,
@@ -12,21 +9,6 @@ export type {
export type { SenseInfo } from "./sense.js";
export type { SenseComputeFn, SenseModule } from "./sense.js";
export { senseTriggerLabels } from "./sense.js";
export type {
WorkflowMessage,
RoleResult,
Role,
RoleMeta,
StartStep,
ThreadContext,
WorkflowContext,
AgentFn,
RoleStep,
ModeratorContext,
Moderator,
WorkflowDefinition,
} from "@uncaged/workflow/public-types";
export { START, END, DEFAULT_ENGINE_MAX_ROUNDS } from "@uncaged/workflow/public-types";
export type { Schema, ExtractFn } from "./agent.js";
export { ExtractError } from "./agent.js";
export type { Result } from "./util.js";
@@ -10,7 +10,8 @@
import { EventEmitter } from "node:events";
import type { NerveConfig, WorkflowConfig } from "@uncaged/nerve-core";
import type { NerveConfig } from "@uncaged/nerve-core";
import type { WorkflowConfig } from "@uncaged/workflow";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
type MockChild = EventEmitter & {
@@ -15,7 +15,8 @@ import { mkdtempSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import type { NerveConfig, WorkflowConfig } from "@uncaged/nerve-core";
import type { NerveConfig } from "@uncaged/nerve-core";
import type { WorkflowConfig } from "@uncaged/workflow";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
type MockChild = EventEmitter & {
+1
View File
@@ -15,6 +15,7 @@
},
"dependencies": {
"@uncaged/nerve-core": "workspace:*",
"@uncaged/workflow": "workspace:*",
"@uncaged/nerve-workflow-utils": "workspace:*",
"zod": "^4.3.6"
},
+1 -1
View File
@@ -1,4 +1,4 @@
import type { AgentFn, Role, ThreadContext } from "@uncaged/nerve-core";
import type { AgentFn, Role, ThreadContext } from "@uncaged/workflow";
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
import { createRole, decorateRole, onFail, withDryRun } from "@uncaged/nerve-workflow-utils";
import { z } from "zod";
+1
View File
@@ -15,6 +15,7 @@
},
"dependencies": {
"@uncaged/nerve-core": "workspace:*",
"@uncaged/workflow": "workspace:*",
"@uncaged/nerve-workflow-utils": "workspace:*",
"zod": "^4.3.6"
},
+1 -1
View File
@@ -1,4 +1,4 @@
import type { AgentFn, Role, ThreadContext } from "@uncaged/nerve-core";
import type { AgentFn, Role, ThreadContext } from "@uncaged/workflow";
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
import { createRole } from "@uncaged/nerve-workflow-utils";
import { z } from "zod";
+1
View File
@@ -15,6 +15,7 @@
},
"dependencies": {
"@uncaged/nerve-core": "workspace:*",
"@uncaged/workflow": "workspace:*",
"@uncaged/nerve-role-committer": "workspace:*",
"@uncaged/nerve-role-reviewer": "workspace:*",
"@uncaged/nerve-workflow-utils": "workspace:*",
@@ -1,4 +1,4 @@
import type { AgentFn, WorkflowDefinition } from "@uncaged/nerve-core";
import type { AgentFn, WorkflowDefinition } from "@uncaged/workflow";
import { createCommitterRole } from "@uncaged/nerve-role-committer";
import { createReviewerRole } from "@uncaged/nerve-role-reviewer";
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
@@ -1,5 +1,5 @@
import { END } from "@uncaged/nerve-core";
import type { Moderator } from "@uncaged/nerve-core";
import { END } from "@uncaged/workflow";
import type { Moderator } from "@uncaged/workflow";
import type { CommitterMeta } from "@uncaged/nerve-role-committer";
import type { ReviewerMeta } from "@uncaged/nerve-role-reviewer";
import type { CoderMeta } from "./roles/coder.js";
@@ -1,4 +1,4 @@
import type { AgentFn, Role, ThreadContext } from "@uncaged/nerve-core";
import type { AgentFn, Role, ThreadContext } from "@uncaged/workflow";
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
import { createRole } from "@uncaged/nerve-workflow-utils";
import { z } from "zod";
@@ -1,4 +1,4 @@
import type { AgentFn, Role, ThreadContext } from "@uncaged/nerve-core";
import type { AgentFn, Role, ThreadContext } from "@uncaged/workflow";
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
import { createRole } from "@uncaged/nerve-workflow-utils";
import { z } from "zod";
@@ -1,4 +1,4 @@
import type { AgentFn, Role, ThreadContext } from "@uncaged/nerve-core";
import type { AgentFn, Role, ThreadContext } from "@uncaged/workflow";
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
import { createRole } from "@uncaged/nerve-workflow-utils";
import { z } from "zod";
@@ -1,4 +1,4 @@
import type { AgentFn, WorkflowDefinition } from "@uncaged/nerve-core";
import type { AgentFn, WorkflowDefinition } from "@uncaged/workflow";
import { createCommitterRole } from "@uncaged/nerve-role-committer";
import { createReviewerRole } from "@uncaged/nerve-role-reviewer";
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
@@ -1,5 +1,5 @@
import { END } from "@uncaged/nerve-core";
import type { Moderator } from "@uncaged/nerve-core";
import { END } from "@uncaged/workflow";
import type { Moderator } from "@uncaged/workflow";
import type { CommitterMeta } from "@uncaged/nerve-role-committer";
import type { ReviewerMeta } from "@uncaged/nerve-role-reviewer";
import type { CoderMeta } from "./roles/coder.js";
@@ -1,4 +1,4 @@
import type { AgentFn, Role, ThreadContext } from "@uncaged/nerve-core";
import type { AgentFn, Role, ThreadContext } from "@uncaged/workflow";
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
import { createRole } from "@uncaged/nerve-workflow-utils";
import { z } from "zod";
@@ -1,4 +1,4 @@
import type { AgentFn, Role, ThreadContext } from "@uncaged/nerve-core";
import type { AgentFn, Role, ThreadContext } from "@uncaged/workflow";
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
import { createRole } from "@uncaged/nerve-workflow-utils";
import { z } from "zod";
@@ -1,4 +1,4 @@
import type { AgentFn, Role, ThreadContext } from "@uncaged/nerve-core";
import type { AgentFn, Role, ThreadContext } from "@uncaged/workflow";
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
import { createRole } from "@uncaged/nerve-workflow-utils";
import { z } from "zod";
+1
View File
@@ -24,6 +24,7 @@
"@uncaged/nerve-adapter-cursor": "workspace:*",
"@uncaged/nerve-adapter-hermes": "workspace:*",
"@uncaged/nerve-core": "workspace:*",
"@uncaged/workflow": "workspace:*",
"zod": "^4.3.6"
},
"devDependencies": {
@@ -1,6 +1,6 @@
import { afterEach, describe, expect, it, vi } from "vitest";
import { START, type ThreadContext } from "@uncaged/nerve-core";
import { START, type ThreadContext } from "@uncaged/workflow";
import { createLlmAdapter } from "../create-llm-adapter.js";
@@ -4,8 +4,8 @@ import type {
RoleMeta,
ThreadContext,
WorkflowDefinition,
} from "@uncaged/nerve-core";
import { END, START } from "@uncaged/nerve-core";
} from "@uncaged/workflow";
import { END, START } from "@uncaged/workflow";
import { afterEach, describe, expect, it, vi } from "vitest";
import { z } from "zod";
@@ -1,8 +1,8 @@
import { describe, expect, it } from "vitest";
import type { Role, ThreadContext } from "@uncaged/nerve-core";
import type { Role, ThreadContext } from "@uncaged/workflow";
import { START } from "@uncaged/nerve-core";
import { START } from "@uncaged/workflow";
import { decorateRole, onFail, withDryRun } from "../role-decorators.js";
type TestMeta = Record<string, unknown> & { ok: boolean };
@@ -1,7 +1,7 @@
import { afterEach, describe, expect, it, vi } from "vitest";
import { z } from "zod";
import { START, type ThreadContext } from "@uncaged/nerve-core";
import { START, type ThreadContext } from "@uncaged/workflow";
import { createCursorRole } from "../role-cursor.js";
import { createHermesRole } from "../role-hermes.js";
@@ -1,4 +1,4 @@
import type { AgentFn, ThreadContext } from "@uncaged/nerve-core";
import type { AgentFn, ThreadContext } from "@uncaged/workflow";
import { formatLlmError } from "./shared/format-error.js";
import { chatCompletionText } from "./shared/llm-chat.js";
+1 -1
View File
@@ -1,4 +1,4 @@
import type { AgentFn, Role, ThreadContext } from "@uncaged/nerve-core";
import type { AgentFn, Role, ThreadContext } from "@uncaged/workflow";
import type { z } from "zod";
import { extractMetaOrThrow } from "./shared/extract-fn.js";
+2 -1
View File
@@ -1,5 +1,6 @@
import { type CursorAgentMode, cursorAgent } from "@uncaged/nerve-adapter-cursor";
import type { Role, SpawnEnv } from "@uncaged/nerve-core";
import type { SpawnEnv } from "@uncaged/nerve-core";
import type { Role } from "@uncaged/workflow";
import type { CursorRoleDefaults, CursorRoleRequired } from "./role-types.js";
import { formatLlmError } from "./shared/format-error.js";
@@ -1,4 +1,4 @@
import type { Role, ThreadContext } from "@uncaged/nerve-core";
import type { Role, ThreadContext } from "@uncaged/workflow";
// ---------------------------------------------------------------------------
// Decorator types
+1 -1
View File
@@ -1,4 +1,4 @@
import type { Role } from "@uncaged/nerve-core";
import type { Role } from "@uncaged/workflow";
import type { HermesRoleDefaults, HermesRoleRequired } from "./role-types.js";
import { formatLlmError } from "./shared/format-error.js";
+1 -1
View File
@@ -1,4 +1,4 @@
import type { Role } from "@uncaged/nerve-core";
import type { Role } from "@uncaged/workflow";
import type { LlmMessage, LlmRoleDefaults, LlmRoleRequired } from "./role-types.js";
import { formatLlmError } from "./shared/format-error.js";
+1 -1
View File
@@ -1,4 +1,4 @@
import type { Role } from "@uncaged/nerve-core";
import type { Role } from "@uncaged/workflow";
import type { LlmMessage, ReActRoleDefaults, ReActRoleRequired } from "./role-types.js";
import { formatLlmError } from "./shared/format-error.js";
+2 -1
View File
@@ -1,4 +1,5 @@
import type { SpawnEnv, ThreadContext } from "@uncaged/nerve-core";
import type { SpawnEnv } from "@uncaged/nerve-core";
import type { ThreadContext } from "@uncaged/workflow";
import type { z } from "zod";
import type { LlmProvider } from "./shared/llm-extract.js";
+2 -2
View File
@@ -25,8 +25,8 @@
"build:public-types": "tsc -p tsconfig.public-types.json"
},
"dependencies": {
"@uncaged/nerve-core": "workspace:*",
"@uncaged/nerve-store": "workspace:*"
"@uncaged/nerve-core": "^0.5.0",
"@uncaged/nerve-store": "^0.5.0"
},
"devDependencies": {
"@rslib/core": "^0.21.3",
+3 -1
View File
@@ -6,7 +6,9 @@
* Concurrency and overflow (drop/queue) are enforced here in the parent process.
*/
import type { NerveConfig, WorkflowConfig, WorkflowStatus } from "@uncaged/nerve-core";
import type { NerveConfig, WorkflowStatus } from "@uncaged/nerve-core";
import type { WorkflowConfig } from "./config.js";
import type { LogStore } from "@uncaged/nerve-store";
import type { KillThreadMessage, StartThreadMessage, ThreadEventMessage } from "./ipc.js";
+25 -6
View File
@@ -4,6 +4,10 @@ settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
overrides:
'@uncaged/nerve-core': workspace:*
'@uncaged/nerve-store': workspace:*
importers:
.:
@@ -26,6 +30,9 @@ importers:
'@uncaged/nerve-core':
specifier: workspace:*
version: link:../core
'@uncaged/workflow':
specifier: workspace:*
version: link:../workflow
devDependencies:
'@rslib/core':
specifier: ^0.21.3
@@ -42,6 +49,9 @@ importers:
'@uncaged/nerve-core':
specifier: workspace:*
version: link:../core
'@uncaged/workflow':
specifier: workspace:*
version: link:../workflow
devDependencies:
'@rslib/core':
specifier: ^0.21.3
@@ -61,6 +71,9 @@ importers:
'@uncaged/nerve-store':
specifier: workspace:*
version: link:../store
'@uncaged/workflow':
specifier: workspace:*
version: link:../workflow
citty:
specifier: ^0.1.6
version: 0.1.6
@@ -80,18 +93,12 @@ importers:
'@uncaged/nerve-daemon':
specifier: workspace:*
version: link:../daemon
'@uncaged/workflow':
specifier: workspace:*
version: link:../workflow
vitest:
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/core:
dependencies:
'@uncaged/workflow':
specifier: workspace:*
version: link:../workflow
yaml:
specifier: ^2.8.3
version: 2.8.3
@@ -170,6 +177,9 @@ importers:
'@uncaged/nerve-workflow-utils':
specifier: workspace:*
version: link:../workflow-utils
'@uncaged/workflow':
specifier: workspace:*
version: link:../workflow
zod:
specifier: ^4.3.6
version: 4.3.6
@@ -192,6 +202,9 @@ importers:
'@uncaged/nerve-workflow-utils':
specifier: workspace:*
version: link:../workflow-utils
'@uncaged/workflow':
specifier: workspace:*
version: link:../workflow
zod:
specifier: ^4.3.6
version: 4.3.6
@@ -254,6 +267,9 @@ importers:
'@uncaged/nerve-workflow-utils':
specifier: workspace:*
version: link:../workflow-utils
'@uncaged/workflow':
specifier: workspace:*
version: link:../workflow
zod:
specifier: ^4.3.6
version: 4.3.6
@@ -279,6 +295,9 @@ importers:
'@uncaged/nerve-core':
specifier: workspace:*
version: link:../core
'@uncaged/workflow':
specifier: workspace:*
version: link:../workflow
zod:
specifier: ^4.3.6
version: 4.3.6