From 6a2d6b0627449e44e83eb8dfe051ee8d490d33ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Tue, 28 Apr 2026 03:51:42 +0000 Subject: [PATCH] fix(sense-generator): derive attempt count from steps, not llmExtract MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- workflows/sense-generator/index.ts | 6 +++++- workflows/sense-generator/roles/types.ts | 3 +-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/workflows/sense-generator/index.ts b/workflows/sense-generator/index.ts index 13b5642..18926dc 100644 --- a/workflows/sense-generator/index.ts +++ b/workflows/sense-generator/index.ts @@ -6,6 +6,10 @@ import { buildTesterRole } from "./roles/tester/index.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: { @@ -20,7 +24,7 @@ const workflow: WorkflowDefinition = { if (last.role === "coder") return "tester"; if (last.role === "tester") { if (last.meta.passed) return END; - return last.meta.attempt < 3 ? "coder" : END; + return countRole(context.steps, "tester") < 3 ? "coder" : END; } return END; }, diff --git a/workflows/sense-generator/roles/types.ts b/workflows/sense-generator/roles/types.ts index 401c1fb..bc52875 100644 --- a/workflows/sense-generator/roles/types.ts +++ b/workflows/sense-generator/roles/types.ts @@ -3,7 +3,7 @@ import { z } from "zod"; export type SenseMeta = { planner: { senseName: string }; coder: { filesCreated: boolean }; - tester: { passed: boolean; attempt: number }; + tester: { passed: boolean }; }; export const plannerMetaSchema = z.object({ @@ -16,5 +16,4 @@ export const coderMetaSchema = z.object({ export const testerMetaSchema = z.object({ passed: z.boolean().describe("true if all e2e checks passed"), - attempt: z.number().describe("which attempt this is (1-based)"), });