refactor(sense-generator): extract moderator to its own file

小橘 🍊(NEKO Team)
This commit is contained in:
小橘 2026-04-28 03:53:49 +00:00
parent 6a2d6b0627
commit 21237e19a0
2 changed files with 21 additions and 17 deletions

View File

@ -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<SenseMeta> = {
name: "sense-generator",
roles: {
@ -17,17 +12,7 @@ const workflow: WorkflowDefinition<SenseMeta> = {
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;

View File

@ -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<SenseMeta> = (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;
};