From 6d3313223fd0fa02c85ebffb9e9badef47a83a1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Tue, 28 Apr 2026 03:56:02 +0000 Subject: [PATCH] refactor(sense-generator): inject provider from index.ts, roles are now sync MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Provider resolved once at top level, injected into each build*Role(). Role builders no longer async — they're pure factory calls. 小橘 🍊(NEKO Team) --- workflows/sense-generator/index.ts | 12 +++++++++--- workflows/sense-generator/roles/coder/index.ts | 9 +++------ workflows/sense-generator/roles/planner/index.ts | 9 +++------ workflows/sense-generator/roles/tester/index.ts | 9 +++------ 4 files changed, 18 insertions(+), 21 deletions(-) diff --git a/workflows/sense-generator/index.ts b/workflows/sense-generator/index.ts index f3fce38..594c936 100644 --- a/workflows/sense-generator/index.ts +++ b/workflows/sense-generator/index.ts @@ -3,14 +3,20 @@ 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 { resolveDashScopeProvider } from "./roles/shared.js"; import type { SenseMeta } from "./roles/types.js"; +const provider = await resolveDashScopeProvider(); +if (provider === null) { + throw new Error("Cannot build workflow: set DASHSCOPE_API_KEY and DASHSCOPE_BASE_URL"); +} + const workflow: WorkflowDefinition = { name: "sense-generator", roles: { - planner: await buildPlannerRole(), - coder: await buildCoderRole(), - tester: await buildTesterRole(), + planner: buildPlannerRole(provider), + coder: buildCoderRole(provider), + tester: buildTesterRole(provider), }, moderator, }; diff --git a/workflows/sense-generator/roles/coder/index.ts b/workflows/sense-generator/roles/coder/index.ts index dc670a1..1d8598b 100644 --- a/workflows/sense-generator/roles/coder/index.ts +++ b/workflows/sense-generator/roles/coder/index.ts @@ -1,14 +1,11 @@ +import type { LlmProvider } from "@uncaged/nerve-workflow-utils"; import { createCursorRole } from "@uncaged/nerve-workflow-utils"; -import { resolveDashScopeProvider, NERVE_ROOT, SENSES_DIR } from "../shared.js"; +import { NERVE_ROOT, SENSES_DIR } from "../shared.js"; import { coderMetaSchema } from "../types.js"; import type { SenseMeta } from "../types.js"; import { coderPrompt } from "./prompt.js"; -export async function buildCoderRole() { - const provider = await resolveDashScopeProvider(); - if (provider === null) { - throw new Error("Cannot create coder: set DASHSCOPE_API_KEY and DASHSCOPE_BASE_URL"); - } +export function buildCoderRole(provider: LlmProvider) { return createCursorRole({ cwd: NERVE_ROOT, mode: "default", diff --git a/workflows/sense-generator/roles/planner/index.ts b/workflows/sense-generator/roles/planner/index.ts index ae0ee0e..a929894 100644 --- a/workflows/sense-generator/roles/planner/index.ts +++ b/workflows/sense-generator/roles/planner/index.ts @@ -1,5 +1,6 @@ +import type { LlmProvider } from "@uncaged/nerve-workflow-utils"; import { createCursorRole } from "@uncaged/nerve-workflow-utils"; -import { resolveDashScopeProvider, buildSenseExamples, getNerveYaml, NERVE_ROOT } from "../shared.js"; +import { buildSenseExamples, getNerveYaml, NERVE_ROOT } from "../shared.js"; import { plannerMetaSchema } from "../types.js"; import type { SenseMeta } from "../types.js"; import { plannerPrompt } from "./prompt.js"; @@ -7,11 +8,7 @@ import { plannerPrompt } from "./prompt.js"; const senseExamples = buildSenseExamples(); const nerveYaml = getNerveYaml(); -export async function buildPlannerRole() { - const provider = await resolveDashScopeProvider(); - if (provider === null) { - throw new Error("Cannot create planner: set DASHSCOPE_API_KEY and DASHSCOPE_BASE_URL"); - } +export function buildPlannerRole(provider: LlmProvider) { return createCursorRole({ cwd: NERVE_ROOT, mode: "ask", diff --git a/workflows/sense-generator/roles/tester/index.ts b/workflows/sense-generator/roles/tester/index.ts index c4a4b7e..c9508ab 100644 --- a/workflows/sense-generator/roles/tester/index.ts +++ b/workflows/sense-generator/roles/tester/index.ts @@ -1,14 +1,11 @@ +import type { LlmProvider } from "@uncaged/nerve-workflow-utils"; import { createHermesRole } from "@uncaged/nerve-workflow-utils"; -import { resolveDashScopeProvider, NERVE_ROOT, SENSES_DIR } from "../shared.js"; +import { NERVE_ROOT, SENSES_DIR } from "../shared.js"; import { testerMetaSchema } from "../types.js"; import type { SenseMeta } from "../types.js"; import { testerPrompt } from "./prompt.js"; -export async function buildTesterRole() { - const provider = await resolveDashScopeProvider(); - if (provider === null) { - throw new Error("Cannot create tester: set DASHSCOPE_API_KEY and DASHSCOPE_BASE_URL"); - } +export function buildTesterRole(provider: LlmProvider) { return createHermesRole({ prompt: async (threadId) => testerPrompt({ threadId, sensesDir: SENSES_DIR, nerveRoot: NERVE_ROOT }), extract: { provider, schema: testerMetaSchema },