小橘 f651389ad8 chore(workflows): deduplicate workspace committer role
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
2026-04-29 11:11:51 +00:00

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,
};
}