Extract shared buildWorkspaceCommitterRole into workflows/_shared/workspace-committer.ts with parameterized conventionalCommitScopeHint and branchCheckoutExample. Both develop-sense and develop-workflow committer/index.ts now re-export from the shared module. Duplicate prompt.ts files removed. Fixes #10
77 lines
2.4 KiB
TypeScript
77 lines
2.4 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 { coderPrompt } from "./roles/coder/prompt.js";
|
|
import { coderMetaSchema } from "./roles/coder/index.js";
|
|
import { plannerPrompt } from "./roles/planner/prompt.js";
|
|
import { plannerMetaSchema } from "./roles/planner/index.js";
|
|
import { reviewerPrompt } from "./roles/reviewer/prompt.js";
|
|
import { reviewerMetaSchema } from "./roles/reviewer/index.js";
|
|
import { testerPrompt } from "./roles/tester/prompt.js";
|
|
import { testerMetaSchema } from "./roles/tester/index.js";
|
|
import { buildWorkspaceCommitterRole } from "./roles/committer/index.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,
|
|
};
|
|
}
|