import type { AgentFn, WorkflowDefinition } from "@uncaged/nerve-core"; import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils"; import { moderator } from "./moderator.js"; import type { WorkflowMeta } from "./moderator.js"; import { createCoderRole } from "./roles/coder.js"; import { createWorkspaceCommitterRole } from "./roles/committer.js"; import { createPlannerRole } from "./roles/planner.js"; import { createReviewerRole } from "./roles/reviewer.js"; import { createTesterRole } from "./roles/tester.js"; type DevelopWorkflowRole = 'planner' | 'coder' | 'reviewer' | 'tester' | 'committer'; export type CreateDevelopWorkflowDeps = { defaultAdapter: AgentFn; adapters?: Partial>; extract: LlmExtractorConfig; nerveRoot: string; }; export function createDevelopWorkflowWorkflow({ adapters, extract, nerveRoot, }: CreateDevelopWorkflowDeps): WorkflowDefinition { const a = (role: DevelopWorkflowRole) => adapters?.[role] ?? defaultAdapter; const roles = { planner: createPlannerRole(a('planner'), extract), coder: createCoderRole(a('coder'), extract), reviewer: createReviewerRole(a('reviewer'), extract, nerveRoot), tester: createTesterRole(a('tester'), extract, nerveRoot), committer: createWorkspaceCommitterRole(a('committer'), { extract, nerveRoot, workflowName: "develop-workflow", conventionalCommitScopeHint: "workflow", branchCheckoutExample: "git checkout -b feat/workflow-new-step", }), }; return { name: "develop-workflow", roles, moderator, }; }