




























@@ -275,6 +275,179 @@ describe("openrouter provider hooks", () => {
275275expect(getOpenRouterModelCapabilitiesMock).toHaveBeenCalledWith("openrouter/auto");
276276});
277277278+it("describes configured Fusion analysis models in the system prompt", async () => {
279+const provider = await registerSingleProviderPlugin(openrouterPlugin);
280+const contribution = provider.resolveSystemPromptContribution?.({
281+provider: "openrouter",
282+modelId: "openrouter/fusion",
283+promptMode: "full",
284+config: {
285+agents: {
286+defaults: {
287+models: {
288+"openrouter/openrouter/fusion": {
289+params: {
290+extraBody: {
291+plugins: [
292+{
293+id: "fusion",
294+analysis_models: [
295+"google/gemini-3.5-flash",
296+"moonshotai/kimi-k2.6",
297+"deepseek/deepseek-v4-pro",
298+],
299+model: "google/gemini-3.5-flash",
300+},
301+],
302+},
303+},
304+},
305+},
306+},
307+},
308+},
309+} as never);
310+311+expect(contribution?.dynamicSuffix).toContain("OpenRouter Fusion Configuration");
312+expect(contribution?.dynamicSuffix).toContain(
313+"Analysis models: google/gemini-3.5-flash, moonshotai/kimi-k2.6, deepseek/deepseek-v4-pro.",
314+);
315+expect(contribution?.dynamicSuffix).toContain("Final Fusion model: google/gemini-3.5-flash.");
316+});
317+318+it("describes Fusion config from the canonical OpenRouter model key", async () => {
319+const provider = await registerSingleProviderPlugin(openrouterPlugin);
320+const contribution = provider.resolveSystemPromptContribution?.({
321+provider: "openrouter",
322+modelId: "openrouter/fusion",
323+promptMode: "full",
324+config: {
325+agents: {
326+defaults: {
327+models: {
328+"openrouter/fusion": {
329+params: {
330+extraBody: {
331+plugins: [
332+{
333+id: "fusion",
334+analysis_models: ["deepseek/deepseek-v4-pro"],
335+},
336+],
337+},
338+},
339+},
340+},
341+},
342+},
343+},
344+} as never);
345+346+expect(contribution?.dynamicSuffix).toContain("Analysis models: deepseek/deepseek-v4-pro.");
347+});
348+349+it("matches transport alias precedence for Fusion extra body", async () => {
350+const provider = await registerSingleProviderPlugin(openrouterPlugin);
351+const contribution = provider.resolveSystemPromptContribution?.({
352+provider: "openrouter",
353+modelId: "openrouter/fusion",
354+promptMode: "full",
355+config: {
356+agents: {
357+defaults: {
358+params: {
359+extra_body: {
360+plugins: [
361+{
362+id: "fusion",
363+analysis_models: ["google/gemini-3.5-flash"],
364+},
365+],
366+},
367+},
368+models: {
369+"openrouter/fusion": {
370+params: {
371+extraBody: {
372+plugins: [
373+{
374+id: "fusion",
375+analysis_models: ["deepseek/deepseek-v4-pro"],
376+},
377+],
378+},
379+},
380+},
381+},
382+},
383+},
384+},
385+} as never);
386+387+expect(contribution?.dynamicSuffix).toContain("Analysis models: google/gemini-3.5-flash.");
388+expect(contribution?.dynamicSuffix).not.toContain("deepseek/deepseek-v4-pro");
389+});
390+391+it("keeps arbitrary OpenRouter extraBody fields out of the system prompt", async () => {
392+const provider = await registerSingleProviderPlugin(openrouterPlugin);
393+const contribution = provider.resolveSystemPromptContribution?.({
394+provider: "openrouter",
395+modelId: "openrouter/fusion",
396+promptMode: "full",
397+config: {
398+agents: {
399+defaults: {
400+models: {
401+"openrouter/openrouter/fusion": {
402+params: {
403+extraBody: {
404+metadata: { private: "do-not-render" },
405+plugins: [{ id: "not-fusion", model: "private-model" }],
406+},
407+},
408+},
409+},
410+},
411+},
412+},
413+} as never);
414+415+expect(contribution).toBeUndefined();
416+});
417+418+it("does not describe disabled Fusion plugin config in the system prompt", async () => {
419+const provider = await registerSingleProviderPlugin(openrouterPlugin);
420+const contribution = provider.resolveSystemPromptContribution?.({
421+provider: "openrouter",
422+modelId: "openrouter/fusion",
423+promptMode: "full",
424+config: {
425+agents: {
426+defaults: {
427+models: {
428+"openrouter/fusion": {
429+params: {
430+extraBody: {
431+plugins: [
432+{
433+id: "fusion",
434+enabled: false,
435+analysis_models: ["deepseek/deepseek-v4-pro"],
436+model: "google/gemini-3.5-flash",
437+},
438+],
439+},
440+},
441+},
442+},
443+},
444+},
445+},
446+} as never);
447+448+expect(contribution).toBeUndefined();
449+});
450+278451it("does not include retired stealth models in the bundled catalog", () => {
279452const modelIds = buildOpenrouterProvider().models?.map((model) => model.id) ?? [];
280453expect(modelIds).not.toContain("openrouter/hunter-alpha");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。