From 516a28533a294a5eaf33cb0ad32ceeaba3ffa698 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Tue, 28 Apr 2026 02:38:07 +0000 Subject: [PATCH] refactor(sense-generator): extract meta schemas to types.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 小橘 🍊(NEKO Team) --- workflows/sense-generator/roles/coder/index.ts | 7 ++----- workflows/sense-generator/roles/planner/index.ts | 8 ++------ workflows/sense-generator/roles/types.ts | 10 ++++++++++ 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/workflows/sense-generator/roles/coder/index.ts b/workflows/sense-generator/roles/coder/index.ts index fbf51ee..0f1d328 100644 --- a/workflows/sense-generator/roles/coder/index.ts +++ b/workflows/sense-generator/roles/coder/index.ts @@ -1,7 +1,6 @@ import { createCursorRole } from "@uncaged/nerve-workflow-utils"; -import { z } from "zod"; import { resolveDashScopeProvider, NERVE_ROOT, SENSES_DIR } from "../shared.js"; - +import { coderMetaSchema } from "../types.js"; import type { SenseMeta } from "../types.js"; export async function buildCoderRole() { @@ -25,9 +24,7 @@ Implement the sense. Create exactly: Follow the patterns from existing senses. Create all files now.`, extract: { provider, - schema: z.object({ - filesCreated: z.boolean().describe("true if the sense files were created"), - }), + schema: coderMetaSchema, }, }); } diff --git a/workflows/sense-generator/roles/planner/index.ts b/workflows/sense-generator/roles/planner/index.ts index 07c111f..9e49c4c 100644 --- a/workflows/sense-generator/roles/planner/index.ts +++ b/workflows/sense-generator/roles/planner/index.ts @@ -1,8 +1,6 @@ import { createCursorRole } from "@uncaged/nerve-workflow-utils"; -import { readFileSync } from "node:fs"; -import { join } from "node:path"; -import { z } from "zod"; import { resolveDashScopeProvider, buildSenseExamples, getNerveYaml, NERVE_ROOT } from "../shared.js"; +import { plannerMetaSchema } from "../types.js"; import type { SenseMeta } from "../types.js"; const senseExamples = buildSenseExamples(); @@ -40,9 +38,7 @@ ${nerveYaml} Output ONLY the plan. Be precise and implementation-ready.`, extract: { provider, - schema: z.object({ - senseName: z.string().describe("kebab-case sense name from the plan"), - }), + schema: plannerMetaSchema, }, }); } diff --git a/workflows/sense-generator/roles/types.ts b/workflows/sense-generator/roles/types.ts index 3abf1e7..04ae9cf 100644 --- a/workflows/sense-generator/roles/types.ts +++ b/workflows/sense-generator/roles/types.ts @@ -1,5 +1,15 @@ +import { z } from "zod"; + export type SenseMeta = { planner: { senseName: string }; coder: { filesCreated: boolean }; tester: { passed: boolean; attempt: number }; }; + +export const plannerMetaSchema = z.object({ + senseName: z.string().describe("kebab-case sense name from the plan"), +}); + +export const coderMetaSchema = z.object({ + filesCreated: z.boolean().describe("true if the sense files were created"), +});