@@ -56,6 +56,8 @@ describe("normalizeModelSlug", () => {
5656
5757 it ( "uses provider-specific aliases" , ( ) => {
5858 expect ( normalizeModelSlug ( "sonnet" , "claudeAgent" ) ) . toBe ( "claude-sonnet-4-6" ) ;
59+ expect ( normalizeModelSlug ( "opus" , "claudeAgent" ) ) . toBe ( "claude-opus-4-7" ) ;
60+ expect ( normalizeModelSlug ( "opus-4.7" , "claudeAgent" ) ) . toBe ( "claude-opus-4-7" ) ;
5961 expect ( normalizeModelSlug ( "opus-4.6" , "claudeAgent" ) ) . toBe ( "claude-opus-4-6" ) ;
6062 expect ( normalizeModelSlug ( "claude-haiku-4-5-20251001" , "claudeAgent" ) ) . toBe ( "claude-haiku-4-5" ) ;
6163 } ) ;
@@ -171,6 +173,16 @@ describe("getReasoningEffortOptions", () => {
171173 expect ( getReasoningEffortOptions ( "codex" ) ) . toEqual ( REASONING_EFFORT_OPTIONS_BY_PROVIDER . codex ) ;
172174 } ) ;
173175
176+ it ( "returns claude effort options for Opus 4.7" , ( ) => {
177+ expect ( getReasoningEffortOptions ( "claudeAgent" , "claude-opus-4-7" ) ) . toEqual ( [
178+ "low" ,
179+ "medium" ,
180+ "high" ,
181+ "max" ,
182+ "ultrathink" ,
183+ ] ) ;
184+ } ) ;
185+
174186 it ( "returns claude effort options for Opus 4.6" , ( ) => {
175187 expect ( getReasoningEffortOptions ( "claudeAgent" , "claude-opus-4-6" ) ) . toEqual ( [
176188 "low" ,
@@ -198,6 +210,7 @@ describe("getReasoningEffortOptions", () => {
198210describe ( "inferProviderForModel" , ( ) => {
199211 it ( "detects known provider model slugs" , ( ) => {
200212 expect ( inferProviderForModel ( "gpt-5.3-codex" ) ) . toBe ( "codex" ) ;
213+ expect ( inferProviderForModel ( "claude-opus-4-7" ) ) . toBe ( "claudeAgent" ) ;
201214 expect ( inferProviderForModel ( "claude-sonnet-4-6" ) ) . toBe ( "claudeAgent" ) ;
202215 expect ( inferProviderForModel ( "anthropic/claude-sonnet-4-6" ) ) . toBe ( "claudeAgent" ) ;
203216 expect ( inferProviderForModel ( "sonnet" ) ) . toBe ( "claudeAgent" ) ;
@@ -299,7 +312,8 @@ describe("normalizeClaudeModelOptions", () => {
299312} ) ;
300313
301314describe ( "supportsClaudeAdaptiveReasoning" , ( ) => {
302- it ( "only enables adaptive reasoning for Opus 4.6 and Sonnet 4.6" , ( ) => {
315+ it ( "only enables adaptive reasoning for Opus 4.7, Opus 4.6, and Sonnet 4.6" , ( ) => {
316+ expect ( supportsClaudeAdaptiveReasoning ( "claude-opus-4-7" ) ) . toBe ( true ) ;
303317 expect ( supportsClaudeAdaptiveReasoning ( "claude-opus-4-6" ) ) . toBe ( true ) ;
304318 expect ( supportsClaudeAdaptiveReasoning ( "claude-sonnet-4-6" ) ) . toBe ( true ) ;
305319 expect ( supportsClaudeAdaptiveReasoning ( "claude-haiku-4-5" ) ) . toBe ( false ) ;
@@ -308,7 +322,8 @@ describe("supportsClaudeAdaptiveReasoning", () => {
308322} ) ;
309323
310324describe ( "supportsClaudeMaxEffort" , ( ) => {
311- it ( "only enables max effort for Opus 4.6" , ( ) => {
325+ it ( "only enables max effort for Opus 4.7 and Opus 4.6" , ( ) => {
326+ expect ( supportsClaudeMaxEffort ( "claude-opus-4-7" ) ) . toBe ( true ) ;
312327 expect ( supportsClaudeMaxEffort ( "claude-opus-4-6" ) ) . toBe ( true ) ;
313328 expect ( supportsClaudeMaxEffort ( "claude-sonnet-4-6" ) ) . toBe ( false ) ;
314329 expect ( supportsClaudeMaxEffort ( "claude-haiku-4-5" ) ) . toBe ( false ) ;
@@ -317,17 +332,20 @@ describe("supportsClaudeMaxEffort", () => {
317332} ) ;
318333
319334describe ( "supportsClaudeFastMode" , ( ) => {
320- it ( "only enables Claude fast mode for Opus 4.6" , ( ) => {
321- expect ( supportsClaudeFastMode ( "claude-opus-4-6 " ) ) . toBe ( true ) ;
335+ it ( "only enables Claude fast mode for Opus 4.7 and Opus 4. 6" , ( ) => {
336+ expect ( supportsClaudeFastMode ( "claude-opus-4-7 " ) ) . toBe ( true ) ;
322337 expect ( supportsClaudeFastMode ( "opus" ) ) . toBe ( true ) ;
338+ expect ( supportsClaudeFastMode ( "claude-opus-4-6" ) ) . toBe ( true ) ;
339+ expect ( supportsClaudeFastMode ( "opus-4.6" ) ) . toBe ( true ) ;
323340 expect ( supportsClaudeFastMode ( "claude-sonnet-4-6" ) ) . toBe ( false ) ;
324341 expect ( supportsClaudeFastMode ( "claude-haiku-4-5" ) ) . toBe ( false ) ;
325342 expect ( supportsClaudeFastMode ( undefined ) ) . toBe ( false ) ;
326343 } ) ;
327344} ) ;
328345
329346describe ( "supportsClaudeUltrathinkKeyword" , ( ) => {
330- it ( "only enables ultrathink keyword handling for Opus 4.6 and Sonnet 4.6" , ( ) => {
347+ it ( "only enables ultrathink keyword handling for Opus 4.7, Opus 4.6, and Sonnet 4.6" , ( ) => {
348+ expect ( supportsClaudeUltrathinkKeyword ( "claude-opus-4-7" ) ) . toBe ( true ) ;
331349 expect ( supportsClaudeUltrathinkKeyword ( "claude-opus-4-6" ) ) . toBe ( true ) ;
332350 expect ( supportsClaudeUltrathinkKeyword ( "claude-sonnet-4-6" ) ) . toBe ( true ) ;
333351 expect ( supportsClaudeUltrathinkKeyword ( "claude-haiku-4-5" ) ) . toBe ( false ) ;
@@ -336,6 +354,7 @@ describe("supportsClaudeUltrathinkKeyword", () => {
336354
337355describe ( "supportsClaudeThinkingToggle" , ( ) => {
338356 it ( "only enables the Claude thinking toggle for Haiku 4.5" , ( ) => {
357+ expect ( supportsClaudeThinkingToggle ( "claude-opus-4-7" ) ) . toBe ( false ) ;
339358 expect ( supportsClaudeThinkingToggle ( "claude-opus-4-6" ) ) . toBe ( false ) ;
340359 expect ( supportsClaudeThinkingToggle ( "claude-sonnet-4-6" ) ) . toBe ( false ) ;
341360 expect ( supportsClaudeThinkingToggle ( "claude-haiku-4-5" ) ) . toBe ( true ) ;
0 commit comments