refactor(sense-generator): extract moderator to its own file
小橘 🍊(NEKO Team)
This commit is contained in:
parent
6a2d6b0627
commit
21237e19a0
@ -1,15 +1,10 @@
|
|||||||
import type { WorkflowDefinition } from "@uncaged/nerve-core";
|
import type { WorkflowDefinition } from "@uncaged/nerve-core";
|
||||||
import { END } from "@uncaged/nerve-core";
|
|
||||||
import { buildPlannerRole } from "./roles/planner/index.js";
|
import { buildPlannerRole } from "./roles/planner/index.js";
|
||||||
import { buildCoderRole } from "./roles/coder/index.js";
|
import { buildCoderRole } from "./roles/coder/index.js";
|
||||||
import { buildTesterRole } from "./roles/tester/index.js";
|
import { buildTesterRole } from "./roles/tester/index.js";
|
||||||
|
import { moderator } from "./moderator.js";
|
||||||
import type { SenseMeta } from "./roles/types.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> = {
|
const workflow: WorkflowDefinition<SenseMeta> = {
|
||||||
name: "sense-generator",
|
name: "sense-generator",
|
||||||
roles: {
|
roles: {
|
||||||
@ -17,17 +12,7 @@ const workflow: WorkflowDefinition<SenseMeta> = {
|
|||||||
coder: await buildCoderRole(),
|
coder: await buildCoderRole(),
|
||||||
tester: await buildTesterRole(),
|
tester: await buildTesterRole(),
|
||||||
},
|
},
|
||||||
moderator(context) {
|
moderator,
|
||||||
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;
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default workflow;
|
export default workflow;
|
||||||
|
|||||||
19
workflows/sense-generator/moderator.ts
Normal file
19
workflows/sense-generator/moderator.ts
Normal 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;
|
||||||
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user