diff --git a/workflows/sense-generator/index.ts b/workflows/sense-generator/index.ts index 18926dc..f3fce38 100644 --- a/workflows/sense-generator/index.ts +++ b/workflows/sense-generator/index.ts @@ -1,15 +1,10 @@ import type { WorkflowDefinition } from "@uncaged/nerve-core"; -import { END } from "@uncaged/nerve-core"; import { buildPlannerRole } from "./roles/planner/index.js"; import { buildCoderRole } from "./roles/coder/index.js"; import { buildTesterRole } from "./roles/tester/index.js"; - +import { moderator } from "./moderator.js"; import type { SenseMeta } from "./roles/types.js"; -function countRole(steps: { role: string }[], name: string): number { - return steps.filter((s) => s.role === name).length; -} - const workflow: WorkflowDefinition = { name: "sense-generator", roles: { @@ -17,17 +12,7 @@ const workflow: WorkflowDefinition = { coder: await buildCoderRole(), tester: await buildTesterRole(), }, - moderator(context) { - if (context.steps.length === 0) return "planner"; - const last = context.steps[context.steps.length - 1]; - if (last.role === "planner") return "coder"; - if (last.role === "coder") return "tester"; - if (last.role === "tester") { - if (last.meta.passed) return END; - return countRole(context.steps, "tester") < 3 ? "coder" : END; - } - return END; - }, + moderator, }; export default workflow; diff --git a/workflows/sense-generator/moderator.ts b/workflows/sense-generator/moderator.ts new file mode 100644 index 0000000..abc3b3c --- /dev/null +++ b/workflows/sense-generator/moderator.ts @@ -0,0 +1,19 @@ +import { END } from "@uncaged/nerve-core"; +import type { Moderator } from "@uncaged/nerve-core"; +import type { SenseMeta } from "./roles/types.js"; + +function countRole(steps: { role: string }[], name: string): number { + return steps.filter((s) => s.role === name).length; +} + +export const moderator: Moderator = (context) => { + if (context.steps.length === 0) return "planner"; + const last = context.steps[context.steps.length - 1]; + if (last.role === "planner") return "coder"; + if (last.role === "coder") return "tester"; + if (last.role === "tester") { + if (last.meta.passed) return END; + return countRole(context.steps, "tester") < 3 ? "coder" : END; + } + return END; +};