@@ -26,6 +26,10 @@ describe("toSdkModelId", () => {
2626 expect ( toSdkModelId ( "claude-fable-5" ) ) . toBe ( "claude-fable-5" ) ;
2727 } ) ;
2828
29+ it ( "passes claude-sonnet-5 through unchanged (no SDK alias)" , ( ) => {
30+ expect ( toSdkModelId ( "claude-sonnet-5" ) ) . toBe ( "claude-sonnet-5" ) ;
31+ } ) ;
32+
2933 it ( "passes deprecated gateway IDs through unchanged" , ( ) => {
3034 expect ( toSdkModelId ( "claude-opus-4-6" ) ) . toBe ( "claude-opus-4-6" ) ;
3135 expect ( toSdkModelId ( "claude-sonnet-4-5" ) ) . toBe ( "claude-sonnet-4-5" ) ;
@@ -34,36 +38,72 @@ describe("toSdkModelId", () => {
3438} ) ;
3539
3640describe ( "model capability flags" , ( ) => {
37- it ( "flags 1M context support" , ( ) => {
38- expect ( supports1MContext ( "claude-opus-4-6" ) ) . toBe ( false ) ;
39- expect ( supports1MContext ( "claude-opus-4-7" ) ) . toBe ( true ) ;
40- expect ( supports1MContext ( "claude-sonnet-4-6" ) ) . toBe ( true ) ;
41- expect ( supports1MContext ( "claude-haiku-4-5" ) ) . toBe ( false ) ;
42- } ) ;
43-
44- it ( "flags effort support and xhigh-effort support" , ( ) => {
45- expect ( supportsEffort ( "claude-opus-4-5" ) ) . toBe ( false ) ;
46- expect ( supportsEffort ( "claude-opus-4-6" ) ) . toBe ( false ) ;
47- expect ( supportsXhighEffort ( "claude-opus-4-7" ) ) . toBe ( true ) ;
48- expect ( supportsXhighEffort ( "claude-opus-4-6" ) ) . toBe ( false ) ;
49- expect ( supportsEffort ( "claude-haiku-4-5" ) ) . toBe ( false ) ;
50- } ) ;
51-
52- it ( "flags claude-fable-5 as a flagship model" , ( ) => {
53- expect ( supports1MContext ( "claude-fable-5" ) ) . toBe ( true ) ;
54- expect ( supportsEffort ( "claude-fable-5" ) ) . toBe ( true ) ;
55- expect ( supportsXhighEffort ( "claude-fable-5" ) ) . toBe ( true ) ;
56- expect ( supportsMcpInjection ( "claude-fable-5" ) ) . toBe ( true ) ;
57- } ) ;
58-
59- it ( "allows MCP injection for supported Claude models" , ( ) => {
60- expect ( supportsMcpInjection ( "claude-opus-4-7" ) ) . toBe ( true ) ;
61- expect ( supportsMcpInjection ( "claude-sonnet-4-6" ) ) . toBe ( true ) ;
62- } ) ;
63-
64- it ( "keeps deprecated Haiku sessions excluded from MCP injection" , ( ) => {
65- expect ( supportsMcpInjection ( "claude-haiku-4-5" ) ) . toBe ( false ) ;
66- } ) ;
41+ it . each ( [
42+ {
43+ modelId : "claude-opus-4-5" ,
44+ oneMContext : false ,
45+ effort : false ,
46+ xhighEffort : false ,
47+ mcpInjection : true ,
48+ } ,
49+ {
50+ modelId : "claude-opus-4-6" ,
51+ oneMContext : false ,
52+ effort : false ,
53+ xhighEffort : false ,
54+ mcpInjection : true ,
55+ } ,
56+ {
57+ modelId : "claude-opus-4-7" ,
58+ oneMContext : true ,
59+ effort : true ,
60+ xhighEffort : true ,
61+ mcpInjection : true ,
62+ } ,
63+ {
64+ modelId : "claude-opus-4-8" ,
65+ oneMContext : true ,
66+ effort : true ,
67+ xhighEffort : true ,
68+ mcpInjection : true ,
69+ } ,
70+ {
71+ modelId : "claude-sonnet-4-6" ,
72+ oneMContext : true ,
73+ effort : true ,
74+ xhighEffort : false ,
75+ mcpInjection : true ,
76+ } ,
77+ {
78+ modelId : "claude-sonnet-5" ,
79+ oneMContext : true ,
80+ effort : true ,
81+ xhighEffort : true ,
82+ mcpInjection : true ,
83+ } ,
84+ {
85+ modelId : "claude-fable-5" ,
86+ oneMContext : true ,
87+ effort : true ,
88+ xhighEffort : true ,
89+ mcpInjection : true ,
90+ } ,
91+ {
92+ modelId : "claude-haiku-4-5" ,
93+ oneMContext : false ,
94+ effort : false ,
95+ xhighEffort : false ,
96+ mcpInjection : false ,
97+ } ,
98+ ] ) (
99+ "$modelId capability flags" ,
100+ ( { modelId, oneMContext, effort, xhighEffort, mcpInjection } ) => {
101+ expect ( supports1MContext ( modelId ) ) . toBe ( oneMContext ) ;
102+ expect ( supportsEffort ( modelId ) ) . toBe ( effort ) ;
103+ expect ( supportsXhighEffort ( modelId ) ) . toBe ( xhighEffort ) ;
104+ expect ( supportsMcpInjection ( modelId ) ) . toBe ( mcpInjection ) ;
105+ } ,
106+ ) ;
67107} ) ;
68108
69109describe ( "resolveEffortForModel" , ( ) => {
@@ -77,12 +117,14 @@ describe("resolveEffortForModel", () => {
77117 [ "claude-opus-4-8" , undefined , "high" ] ,
78118 [ "claude-opus-4-7" , undefined , "high" ] ,
79119 [ "claude-sonnet-4-6" , undefined , "high" ] ,
120+ [ "claude-sonnet-5" , undefined , "high" ] ,
80121 // Models without effort support stay unset (SDK disables thinking).
81122 [ "claude-haiku-4-5" , undefined , undefined ] ,
82123 [ "claude-opus-4-6" , undefined , undefined ] ,
83124 // An explicit choice is always honored, including on adaptive-only models.
84125 [ "claude-opus-4-8" , "low" , "low" ] ,
85126 [ "claude-fable-5" , "max" , "max" ] ,
127+ [ "claude-sonnet-5" , "max" , "max" ] ,
86128 ] as const ) (
87129 "resolveEffortForModel(%s, %s) === %s" ,
88130 ( modelId , effort , expected ) => {
0 commit comments