From 0170eba23316b87bb4c32090094ff667c746fe8c Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Fri, 29 May 2026 00:03:39 +0700 Subject: [PATCH] Add Opus 4.8 to the Claude model picker Opus 4.8 (and its 1M-context variant) become the default Claude models, pushing Opus 4.6 off the default slot. Opus 4.7 stays in the list as the previous release. --- packages/cli/tests/15-provider.test.ts | 12 +++++++++- .../agent/providers/claude/agent.test.ts | 4 +++- .../agent/providers/claude/models.test.ts | 4 +++- .../server/agent/providers/claude/models.ts | 24 +++++++++++++++---- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/packages/cli/tests/15-provider.test.ts b/packages/cli/tests/15-provider.test.ts index 562d0ed56..311bd48c2 100644 --- a/packages/cli/tests/15-provider.test.ts +++ b/packages/cli/tests/15-provider.test.ts @@ -45,6 +45,16 @@ interface ProviderListRow { } const EXPECTED_CLAUDE_MODELS = [ + { + id: "claude-opus-4-8[1m]", + model: "Opus 4.8 1M", + descriptionFragment: "1M context window", + }, + { + id: "claude-opus-4-8", + model: "Opus 4.8", + descriptionFragment: "Latest release", + }, { id: "claude-opus-4-7[1m]", model: "Opus 4.7 1M", @@ -53,7 +63,7 @@ const EXPECTED_CLAUDE_MODELS = [ { id: "claude-opus-4-7", model: "Opus 4.7", - descriptionFragment: "Latest release", + descriptionFragment: "Previous release", }, { id: "claude-opus-4-6[1m]", diff --git a/packages/server/src/server/agent/providers/claude/agent.test.ts b/packages/server/src/server/agent/providers/claude/agent.test.ts index 28c525280..fef31ccc4 100644 --- a/packages/server/src/server/agent/providers/claude/agent.test.ts +++ b/packages/server/src/server/agent/providers/claude/agent.test.ts @@ -401,6 +401,8 @@ describe("ClaudeAgentClient.listModels", () => { const models = await client.listModels({ cwd: "/tmp/claude-models", force: false }); expect(models.map((m) => m.id)).toEqual([ + "claude-opus-4-8[1m]", + "claude-opus-4-8", "claude-opus-4-7[1m]", "claude-opus-4-7", "claude-opus-4-6[1m]", @@ -416,7 +418,7 @@ describe("ClaudeAgentClient.listModels", () => { } const defaultModel = models.find((m) => m.isDefault); - expect(defaultModel?.id).toBe("claude-opus-4-6"); + expect(defaultModel?.id).toBe("claude-opus-4-8"); }); }); diff --git a/packages/server/src/server/agent/providers/claude/models.test.ts b/packages/server/src/server/agent/providers/claude/models.test.ts index f021192b9..f4b335688 100644 --- a/packages/server/src/server/agent/providers/claude/models.test.ts +++ b/packages/server/src/server/agent/providers/claude/models.test.ts @@ -35,6 +35,8 @@ describe("getClaudeModels", () => { it("returns all claude models", () => { const models = getClaudeModels(); expect(models.map((m) => m.id)).toEqual([ + "claude-opus-4-8[1m]", + "claude-opus-4-8", "claude-opus-4-7[1m]", "claude-opus-4-7", "claude-opus-4-6[1m]", @@ -49,7 +51,7 @@ describe("getClaudeModels", () => { const models = getClaudeModels(); const defaults = models.filter((m) => m.isDefault); expect(defaults).toHaveLength(1); - expect(defaults[0].id).toBe("claude-opus-4-6"); + expect(defaults[0].id).toBe("claude-opus-4-8"); }); it("returns fresh copies each call", () => { diff --git a/packages/server/src/server/agent/providers/claude/models.ts b/packages/server/src/server/agent/providers/claude/models.ts index 23c3bf761..644d26ff6 100644 --- a/packages/server/src/server/agent/providers/claude/models.ts +++ b/packages/server/src/server/agent/providers/claude/models.ts @@ -12,7 +12,7 @@ const CLAUDE_THINKING_OPTIONS = [ { id: "max", label: "Max" }, ] as const; -const CLAUDE_OPUS_4_7_THINKING_OPTIONS = [ +const CLAUDE_OPUS_EXTENDED_THINKING_OPTIONS = [ { id: "low", label: "Low" }, { id: "medium", label: "Medium" }, { id: "high", label: "High" }, @@ -21,19 +21,34 @@ const CLAUDE_OPUS_4_7_THINKING_OPTIONS = [ ] as const; const CLAUDE_MODELS: AgentModelDefinition[] = [ + { + provider: "claude", + id: "claude-opus-4-8[1m]", + label: "Opus 4.8 1M", + description: "Opus 4.8 with 1M context window", + thinkingOptions: [...CLAUDE_OPUS_EXTENDED_THINKING_OPTIONS], + }, + { + provider: "claude", + id: "claude-opus-4-8", + label: "Opus 4.8", + description: "Opus 4.8 · Latest release", + isDefault: true, + thinkingOptions: [...CLAUDE_OPUS_EXTENDED_THINKING_OPTIONS], + }, { provider: "claude", id: "claude-opus-4-7[1m]", label: "Opus 4.7 1M", description: "Opus 4.7 with 1M context window", - thinkingOptions: [...CLAUDE_OPUS_4_7_THINKING_OPTIONS], + thinkingOptions: [...CLAUDE_OPUS_EXTENDED_THINKING_OPTIONS], }, { provider: "claude", id: "claude-opus-4-7", label: "Opus 4.7", - description: "Opus 4.7 · Latest release", - thinkingOptions: [...CLAUDE_OPUS_4_7_THINKING_OPTIONS], + description: "Opus 4.7 · Previous release", + thinkingOptions: [...CLAUDE_OPUS_EXTENDED_THINKING_OPTIONS], }, { provider: "claude", @@ -47,7 +62,6 @@ const CLAUDE_MODELS: AgentModelDefinition[] = [ id: "claude-opus-4-6", label: "Opus 4.6", description: "Opus 4.6 · Most capable for complex work", - isDefault: true, thinkingOptions: [...CLAUDE_THINKING_OPTIONS], }, {