refactor: decouple adapters from workflow factories + createXxxRole #16

Merged
xiaoju merged 3 commits from refactor/15-decouple-adapters into master 2026-04-29 12:44:19 +00:00
3 changed files with 9 additions and 12 deletions
Showing only changes of commit a609dc2486 - Show all commits

View File

@ -9,21 +9,20 @@ import { createPlannerRole } from "./roles/planner.js";
import { createReviewerRole } from "./roles/reviewer.js";
import { createTesterRole } from "./roles/tester.js";
type DevelopSenseRole = 'planner' | 'coder' | 'reviewer' | 'tester' | 'committer';
export type CreateDevelopSenseDeps = {
defaultAdapter: AgentFn;
adapters?: Partial<Record<DevelopSenseRole, AgentFn>>;
adapters?: Partial<Record<keyof SenseMeta, AgentFn>>;
extract: LlmExtractorConfig;
cwd: string;
};
export function createDevelopSenseWorkflow({
defaultAdapter,
adapters,
extract,
cwd,
}: CreateDevelopSenseDeps): WorkflowDefinition<SenseMeta> {
const a = (role: DevelopSenseRole) => adapters?.[role] ?? defaultAdapter;
const a = (role: keyof SenseMeta) => adapters?.[role] ?? defaultAdapter;
const roles = {
planner: createPlannerRole(a('planner'), extract),
coder: createCoderRole(a('coder'), extract),

View File

@ -9,21 +9,20 @@ 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<Record<DevelopWorkflowRole, AgentFn>>;
adapters?: Partial<Record<keyof WorkflowMeta, AgentFn>>;
extract: LlmExtractorConfig;
nerveRoot: string;
};
export function createDevelopWorkflowWorkflow({
defaultAdapter,
adapters,
extract,
nerveRoot,
}: CreateDevelopWorkflowDeps): WorkflowDefinition<WorkflowMeta> {
const a = (role: DevelopWorkflowRole) => adapters?.[role] ?? defaultAdapter;
const a = (role: keyof WorkflowMeta) => adapters?.[role] ?? defaultAdapter;
const roles = {
planner: createPlannerRole(a('planner'), extract),
coder: createCoderRole(a('coder'), extract),

View File

@ -12,21 +12,20 @@ import { createReadIssueRole } from "./roles/read-issue/index.js";
import { createReviewRole } from "./roles/review/index.js";
import { createTestRole } from "./roles/test/index.js";
type SolveIssueRole = 'read-issue' | 'prepare' | 'plan' | 'implement' | 'committer' | 'review' | 'test' | 'publish';
export type CreateSolveIssueDeps = {
defaultAdapter: AgentFn;
adapters?: Partial<Record<SolveIssueRole, AgentFn>>;
adapters?: Partial<Record<keyof WorkflowMeta, AgentFn>>;
nerveRoot: string;
extract: LlmExtractorConfig;
};
export function createSolveIssueWorkflow({
defaultAdapter,
adapters,
nerveRoot,
extract,
}: CreateSolveIssueDeps): WorkflowDefinition<WorkflowMeta> {
const a = (role: SolveIssueRole) => adapters?.[role] ?? defaultAdapter;
const a = (role: keyof WorkflowMeta) => adapters?.[role] ?? defaultAdapter;
return {
name: "solve-issue",
roles: {