小橘 cb61e98979 refactor(sense-generator): full DIP — all deps injected via build functions
Every role is self-contained (types.ts, prompt.ts, index.ts).
No shared.ts, no cross-role imports. All dependencies injected:

  index.ts          — wiring (resolve env, call buildSenseGenerator)
  build.ts          — buildSenseGenerator(deps) → WorkflowDefinition
  moderator.ts      — pure routing, composes meta from role types
  roles/planner/    — buildPlannerRole(deps), self-contained
  roles/coder/      — buildCoderRole(deps), self-contained
  roles/tester/     — buildTesterRole(deps), self-contained

Workflow is now reusable: buildSenseGenerator() can be called with
any provider/paths, not hardcoded to this machine.

小橘 🍊(NEKO Team)
2026-04-28 04:00:38 +00:00

20 lines
666 B
TypeScript

import type { LlmProvider } from "@uncaged/nerve-workflow-utils";
import { createHermesRole } from "@uncaged/nerve-workflow-utils";
import { testerMetaSchema } from "./types.js";
import type { TesterMeta } from "./types.js";
import { testerPrompt } from "./prompt.js";
export type BuildTesterDeps = {
provider: LlmProvider;
sensesDir: string;
nerveRoot: string;
};
export function buildTesterRole(deps: BuildTesterDeps) {
return createHermesRole<TesterMeta>({
prompt: async (threadId) =>
testerPrompt({ threadId, sensesDir: deps.sensesDir, nerveRoot: deps.nerveRoot }),
extract: { provider: deps.provider, schema: testerMetaSchema },
});
}