fix(sense-generator): derive attempt count from steps, not llmExtract

attempt is a deterministic fact (count of tester steps), not something
an LLM should guess. Removed from tester meta schema, moderator counts
it directly from context.steps.

小橘 🍊(NEKO Team)
This commit is contained in:
小橘 2026-04-28 03:51:42 +00:00
parent 7c4883ddec
commit 6a2d6b0627
2 changed files with 6 additions and 3 deletions

View File

@ -6,6 +6,10 @@ import { buildTesterRole } from "./roles/tester/index.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: {
@ -20,7 +24,7 @@ const workflow: WorkflowDefinition<SenseMeta> = {
if (last.role === "coder") return "tester"; if (last.role === "coder") return "tester";
if (last.role === "tester") { if (last.role === "tester") {
if (last.meta.passed) return END; if (last.meta.passed) return END;
return last.meta.attempt < 3 ? "coder" : END; return countRole(context.steps, "tester") < 3 ? "coder" : END;
} }
return END; return END;
}, },

View File

@ -3,7 +3,7 @@ import { z } from "zod";
export type SenseMeta = { export type SenseMeta = {
planner: { senseName: string }; planner: { senseName: string };
coder: { filesCreated: boolean }; coder: { filesCreated: boolean };
tester: { passed: boolean; attempt: number }; tester: { passed: boolean };
}; };
export const plannerMetaSchema = z.object({ export const plannerMetaSchema = z.object({
@ -16,5 +16,4 @@ export const coderMetaSchema = z.object({
export const testerMetaSchema = z.object({ export const testerMetaSchema = z.object({
passed: z.boolean().describe("true if all e2e checks passed"), passed: z.boolean().describe("true if all e2e checks passed"),
attempt: z.number().describe("which attempt this is (1-based)"),
}); });