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"; export type CreateDevelopWorkflowDeps = { defaultAdapter: AgentFn; adapters?: Partial>; extract: LlmExtractorConfig; nerveRoot: string; }; export function createDevelopWorkflowWorkflow({ defaultAdapter, adapters, extract, nerveRoot, }: CreateDevelopWorkflowDeps): WorkflowDefinition { const a = (role: keyof WorkflowMeta) => 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), }; return { name: "develop-workflow", roles, moderator, }; }