From 21237e19a099c986214f53229dd1ce804e05fcf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Tue, 28 Apr 2026 03:53:49 +0000 Subject: [PATCH] refactor(sense-generator): extract moderator to its own file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 小橘 🍊(NEKO Team) --- workflows/sense-generator/index.ts | 19 ++----------------- workflows/sense-generator/moderator.ts | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 17 deletions(-) create mode 100644 workflows/sense-generator/moderator.ts 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; +};