Each role's index.ts + prompt.ts merged into a single <role>.ts file. Committer stays as re-export from _shared. Import paths updated in build.ts and moderator.ts. Closes #13
87 lines
2.2 KiB
TypeScript
87 lines
2.2 KiB
TypeScript
import type { StartStep, WorkflowDefinition } from "@uncaged/nerve-core";
|
|
import { createCursorAdapter, cursorAdapter } from "@uncaged/nerve-adapter-cursor";
|
|
import { hermesAdapter } from "@uncaged/nerve-adapter-hermes";
|
|
import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils";
|
|
import { createRole } from "@uncaged/nerve-workflow-utils";
|
|
|
|
import {
|
|
coderMetaSchema,
|
|
coderPrompt,
|
|
} from "./roles/coder.js";
|
|
import {
|
|
buildWorkspaceCommitterRole,
|
|
} from "./roles/committer.js";
|
|
import {
|
|
plannerMetaSchema,
|
|
plannerPrompt,
|
|
} from "./roles/planner.js";
|
|
import {
|
|
reviewerMetaSchema,
|
|
reviewerPrompt,
|
|
} from "./roles/reviewer.js";
|
|
import {
|
|
testerMetaSchema,
|
|
testerPrompt,
|
|
} from "./roles/tester.js";
|
|
import { moderator } from "./moderator.js";
|
|
import type { WorkflowMeta } from "./moderator.js";
|
|
|
|
export type BuildDevelopWorkflowDeps = {
|
|
extract: LlmExtractorConfig;
|
|
nerveRoot: string;
|
|
};
|
|
|
|
const CURSOR_TIMEOUT_MS = 300_000;
|
|
|
|
export function buildDevelopWorkflow({
|
|
extract,
|
|
nerveRoot,
|
|
}: BuildDevelopWorkflowDeps): WorkflowDefinition<WorkflowMeta> {
|
|
const roles = {
|
|
planner: createRole(
|
|
createCursorAdapter({
|
|
type: "cursor",
|
|
mode: "ask",
|
|
model: "auto",
|
|
timeout: CURSOR_TIMEOUT_MS,
|
|
}),
|
|
async (start: StartStep) => plannerPrompt({ threadId: start.meta.threadId }),
|
|
plannerMetaSchema,
|
|
extract,
|
|
),
|
|
coder: createRole(
|
|
cursorAdapter,
|
|
async (start: StartStep) => coderPrompt({ threadId: start.meta.threadId }),
|
|
coderMetaSchema,
|
|
extract,
|
|
),
|
|
reviewer: createRole(
|
|
hermesAdapter,
|
|
async (start: StartStep) =>
|
|
reviewerPrompt({ threadId: start.meta.threadId, nerveRoot }),
|
|
reviewerMetaSchema,
|
|
extract,
|
|
),
|
|
tester: createRole(
|
|
hermesAdapter,
|
|
async (start: StartStep) =>
|
|
testerPrompt({ threadId: start.meta.threadId, nerveRoot }),
|
|
testerMetaSchema,
|
|
extract,
|
|
),
|
|
committer: buildWorkspaceCommitterRole({
|
|
extract,
|
|
nerveRoot,
|
|
workflowName: "develop-workflow",
|
|
conventionalCommitScopeHint: "workflow",
|
|
branchCheckoutExample: "git checkout -b feat/workflow-new-step",
|
|
}),
|
|
};
|
|
|
|
return {
|
|
name: "develop-workflow",
|
|
roles,
|
|
moderator,
|
|
};
|
|
}
|