refactor(sense-generator): inject provider from index.ts, roles are now sync
Provider resolved once at top level, injected into each build*Role().
Role builders no longer async — they're pure factory calls.
小橘 🍊(NEKO Team)
This commit is contained in:
parent
21237e19a0
commit
6d3313223f
@ -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<SenseMeta> = {
|
||||
name: "sense-generator",
|
||||
roles: {
|
||||
planner: await buildPlannerRole(),
|
||||
coder: await buildCoderRole(),
|
||||
tester: await buildTesterRole(),
|
||||
planner: buildPlannerRole(provider),
|
||||
coder: buildCoderRole(provider),
|
||||
tester: buildTesterRole(provider),
|
||||
},
|
||||
moderator,
|
||||
};
|
||||
|
||||
@ -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<SenseMeta["coder"]>({
|
||||
cwd: NERVE_ROOT,
|
||||
mode: "default",
|
||||
|
||||
@ -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<SenseMeta["planner"]>({
|
||||
cwd: NERVE_ROOT,
|
||||
mode: "ask",
|
||||
|
||||
@ -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<SenseMeta["tester"]>({
|
||||
prompt: async (threadId) => testerPrompt({ threadId, sensesDir: SENSES_DIR, nerveRoot: NERVE_ROOT }),
|
||||
extract: { provider, schema: testerMetaSchema },
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user