小橘 eaddd88109 refactor: add defaultAdapter + typed role union, adapters becomes Partial
- Each workflow factory takes defaultAdapter: AgentFn + adapters?: Partial<Record<RoleUnion, AgentFn>>
- index.ts only overrides roles that differ from default (planner/coder use cursor, rest fallback)
- Cleaner call sites, type-safe role names

Refs #15
2026-04-29 12:38:21 +00:00

47 lines
1.5 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 { 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";
type DevelopSenseRole = 'planner' | 'coder' | 'reviewer' | 'tester' | 'committer';
export type CreateDevelopSenseDeps = {
defaultAdapter: AgentFn;
adapters?: Partial<Record<DevelopSenseRole, AgentFn>>;
extract: LlmExtractorConfig;
cwd: string;
};
export function createDevelopSenseWorkflow({
adapters,
extract,
cwd,
}: CreateDevelopSenseDeps): WorkflowDefinition<SenseMeta> {
const a = (role: DevelopSenseRole) => 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,
nerveRoot: cwd,
workflowName: "develop-sense",
conventionalCommitScopeHint: "sense",
branchCheckoutExample: "git checkout -b fix/sense-export-path",
}),
};
return {
name: "develop-sense",
roles,
moderator,
};
}