小橘 1683e41b05 refactor: decouple adapters from workflow factories, roles export createXxxRole
- Rename build* → create* workflow factories
- Workflow factories accept adapters: Record<string, AgentFn>
- Each role file exports createXxxRole(adapter, ...) factory
- _shared/workspace-committer accepts adapter as first param
- All adapter imports moved to index.ts (injection point)
- solve-issue roles also updated

Closes #15
2026-04-29 12:35:07 +00:00

41 lines
1.6 KiB
TypeScript

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<string, AgentFn>;
nerveRoot: string;
extract: LlmExtractorConfig;
};
export function createSolveIssueWorkflow({
adapters,
nerveRoot,
extract,
}: CreateSolveIssueDeps): WorkflowDefinition<WorkflowMeta> {
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,
};
}