@@ -275,6 +275,179 @@ describe("openrouter provider hooks", () => {
275275 expect ( getOpenRouterModelCapabilitiesMock ) . toHaveBeenCalledWith ( "openrouter/auto" ) ;
276276 } ) ;
277277
278+ 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+
278451 it ( "does not include retired stealth models in the bundled catalog" , ( ) => {
279452 const modelIds = buildOpenrouterProvider ( ) . models ?. map ( ( model ) => model . id ) ?? [ ] ;
280453 expect ( modelIds ) . not . toContain ( "openrouter/hunter-alpha" ) ;
0 commit comments