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 { createCommitterRole } from "./roles/committer/index.js"; import { createImplementRole } from "./roles/implement/index.js"; import { createPlanRole } from "./roles/plan/index.js"; import { createPrepareRole } from "./roles/prepare/index.js"; import { createPublishRole } from "./roles/publish/index.js"; import { createReadIssueRole } from "./roles/read-issue/index.js"; import { createReviewRole } from "./roles/review/index.js"; import { createTestRole } from "./roles/test/index.js"; export type CreateSolveIssueDeps = { adapters: Record; nerveRoot: string; extract: LlmExtractorConfig; }; export function createSolveIssueWorkflow({ adapters, nerveRoot, extract, }: CreateSolveIssueDeps): WorkflowDefinition { return { name: "solve-issue", roles: { "read-issue": createReadIssueRole(adapters["read-issue"], extract), prepare: createPrepareRole(adapters.prepare, extract), plan: createPlanRole(adapters.plan, { extract, nerveRoot }), implement: createImplementRole(adapters.implement, { extract, nerveRoot }), committer: createCommitterRole(adapters.committer, { extract, nerveRoot }), review: createReviewRole(adapters.review, extract, nerveRoot), test: createTestRole(adapters.test, extract), publish: createPublishRole(adapters.publish, { extract, nerveRoot }), }, moderator, }; }