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 { buildCoderRole } from "./roles/coder/index.js";
|
||||||
import { buildTesterRole } from "./roles/tester/index.js";
|
import { buildTesterRole } from "./roles/tester/index.js";
|
||||||
import { moderator } from "./moderator.js";
|
import { moderator } from "./moderator.js";
|
||||||
|
import { resolveDashScopeProvider } from "./roles/shared.js";
|
||||||
import type { SenseMeta } from "./roles/types.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> = {
|
const workflow: WorkflowDefinition<SenseMeta> = {
|
||||||
name: "sense-generator",
|
name: "sense-generator",
|
||||||
roles: {
|
roles: {
|
||||||
planner: await buildPlannerRole(),
|
planner: buildPlannerRole(provider),
|
||||||
coder: await buildCoderRole(),
|
coder: buildCoderRole(provider),
|
||||||
tester: await buildTesterRole(),
|
tester: buildTesterRole(provider),
|
||||||
},
|
},
|
||||||
moderator,
|
moderator,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,14 +1,11 @@
|
|||||||
|
import type { LlmProvider } from "@uncaged/nerve-workflow-utils";
|
||||||
import { createCursorRole } 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 { coderMetaSchema } from "../types.js";
|
||||||
import type { SenseMeta } from "../types.js";
|
import type { SenseMeta } from "../types.js";
|
||||||
import { coderPrompt } from "./prompt.js";
|
import { coderPrompt } from "./prompt.js";
|
||||||
|
|
||||||
export async function buildCoderRole() {
|
export function buildCoderRole(provider: LlmProvider) {
|
||||||
const provider = await resolveDashScopeProvider();
|
|
||||||
if (provider === null) {
|
|
||||||
throw new Error("Cannot create coder: set DASHSCOPE_API_KEY and DASHSCOPE_BASE_URL");
|
|
||||||
}
|
|
||||||
return createCursorRole<SenseMeta["coder"]>({
|
return createCursorRole<SenseMeta["coder"]>({
|
||||||
cwd: NERVE_ROOT,
|
cwd: NERVE_ROOT,
|
||||||
mode: "default",
|
mode: "default",
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
|
import type { LlmProvider } from "@uncaged/nerve-workflow-utils";
|
||||||
import { createCursorRole } 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 { plannerMetaSchema } from "../types.js";
|
||||||
import type { SenseMeta } from "../types.js";
|
import type { SenseMeta } from "../types.js";
|
||||||
import { plannerPrompt } from "./prompt.js";
|
import { plannerPrompt } from "./prompt.js";
|
||||||
@ -7,11 +8,7 @@ import { plannerPrompt } from "./prompt.js";
|
|||||||
const senseExamples = buildSenseExamples();
|
const senseExamples = buildSenseExamples();
|
||||||
const nerveYaml = getNerveYaml();
|
const nerveYaml = getNerveYaml();
|
||||||
|
|
||||||
export async function buildPlannerRole() {
|
export function buildPlannerRole(provider: LlmProvider) {
|
||||||
const provider = await resolveDashScopeProvider();
|
|
||||||
if (provider === null) {
|
|
||||||
throw new Error("Cannot create planner: set DASHSCOPE_API_KEY and DASHSCOPE_BASE_URL");
|
|
||||||
}
|
|
||||||
return createCursorRole<SenseMeta["planner"]>({
|
return createCursorRole<SenseMeta["planner"]>({
|
||||||
cwd: NERVE_ROOT,
|
cwd: NERVE_ROOT,
|
||||||
mode: "ask",
|
mode: "ask",
|
||||||
|
|||||||
@ -1,14 +1,11 @@
|
|||||||
|
import type { LlmProvider } from "@uncaged/nerve-workflow-utils";
|
||||||
import { createHermesRole } 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 { testerMetaSchema } from "../types.js";
|
||||||
import type { SenseMeta } from "../types.js";
|
import type { SenseMeta } from "../types.js";
|
||||||
import { testerPrompt } from "./prompt.js";
|
import { testerPrompt } from "./prompt.js";
|
||||||
|
|
||||||
export async function buildTesterRole() {
|
export function buildTesterRole(provider: LlmProvider) {
|
||||||
const provider = await resolveDashScopeProvider();
|
|
||||||
if (provider === null) {
|
|
||||||
throw new Error("Cannot create tester: set DASHSCOPE_API_KEY and DASHSCOPE_BASE_URL");
|
|
||||||
}
|
|
||||||
return createHermesRole<SenseMeta["tester"]>({
|
return createHermesRole<SenseMeta["tester"]>({
|
||||||
prompt: async (threadId) => testerPrompt({ threadId, sensesDir: SENSES_DIR, nerveRoot: NERVE_ROOT }),
|
prompt: async (threadId) => testerPrompt({ threadId, sensesDir: SENSES_DIR, nerveRoot: NERVE_ROOT }),
|
||||||
extract: { provider, schema: testerMetaSchema },
|
extract: { provider, schema: testerMetaSchema },
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user