import type { AgentFn, WorkflowDefinition } from "@uncaged/nerve-core"; import type { LlmExtractorConfig } from "@uncaged/nerve-workflow-utils"; import { moderator } from "./moderator.js"; import type { SenseMeta } 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 CreateDevelopSenseDeps = { defaultAdapter: AgentFn; adapters?: Partial>; extract: LlmExtractorConfig; cwd: string; }; export function createDevelopSenseWorkflow({ defaultAdapter, adapters, extract, cwd, }: CreateDevelopSenseDeps): WorkflowDefinition { const a = (role: keyof SenseMeta) => adapters?.[role] ?? defaultAdapter; const roles = { planner: createPlannerRole(a('planner'), extract), coder: createCoderRole(a('coder'), extract), reviewer: createReviewerRole(a('reviewer'), extract, cwd), tester: createTesterRole(a('tester'), extract, cwd), committer: createWorkspaceCommitterRole(a('committer'), extract), }; return { name: "develop-sense", roles, moderator, }; }