authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-02-27 10:12:41-08:00
committergravatar for jmarminge@gmail.comJulius Marminge <jmarminge@gmail.com> 2026-03-05 23:00:41-08:00
logc7460bde16bab5f4570f4db772f37c3538acc630
tree044a4b9eda698fb420187192ef8b6e7a95b00574
parent2c110e8ce24f4fe0af7afb22e5859e70b73f6f18

Update Claude model catalog to latest 4.6/4.5 gen

Co-authored-by: codex <codex@users.noreply.github.com>

3 files changed, 23 insertions(+), 17 deletions(-)

packages/contracts/src/model.test.ts+6-3
...@@ -31,8 +31,11 @@ describe("normalizeModelSlug", () => {...@@ -31,8 +31,11 @@ describe("normalizeModelSlug", () => {
31 });31 });
3232
33 it("uses provider-specific aliases", () => {33 it("uses provider-specific aliases", () => {
34 expect(normalizeModelSlug("sonnet", "claudeCode")).toBe("claude-sonnet-4-5");34 expect(normalizeModelSlug("sonnet", "claudeCode")).toBe("claude-sonnet-4-6");
35 expect(normalizeModelSlug("opus-4.1", "claudeCode")).toBe("claude-opus-4-1");35 expect(normalizeModelSlug("opus-4.6", "claudeCode")).toBe("claude-opus-4-6");
36 expect(normalizeModelSlug("claude-haiku-4-5-20251001", "claudeCode")).toBe(
37 "claude-haiku-4-5",
38 );
36 });39 });
37});40});
3841
...@@ -57,7 +60,7 @@ describe("resolveModelSlug", () => {...@@ -57,7 +60,7 @@ describe("resolveModelSlug", () => {
57 expect(resolveModelSlugForProvider("claudeCode", undefined)).toBe(60 expect(resolveModelSlugForProvider("claudeCode", undefined)).toBe(
58 DEFAULT_MODEL_BY_PROVIDER.claudeCode,61 DEFAULT_MODEL_BY_PROVIDER.claudeCode,
59 );62 );
60 expect(resolveModelSlugForProvider("claudeCode", "sonnet")).toBe("claude-sonnet-4-5");63 expect(resolveModelSlugForProvider("claudeCode", "sonnet")).toBe("claude-sonnet-4-6");
61 expect(resolveModelSlugForProvider("claudeCode", "gpt-5.3-codex")).toBe(64 expect(resolveModelSlugForProvider("claudeCode", "gpt-5.3-codex")).toBe(
62 DEFAULT_MODEL_BY_PROVIDER.claudeCode,65 DEFAULT_MODEL_BY_PROVIDER.claudeCode,
63 );66 );
packages/contracts/src/model.ts+16-13
...@@ -13,9 +13,9 @@ export const MODEL_OPTIONS_BY_PROVIDER = {...@@ -13,9 +13,9 @@ export const MODEL_OPTIONS_BY_PROVIDER = {
13 { slug: "gpt-5.2", name: "GPT-5.2" },13 { slug: "gpt-5.2", name: "GPT-5.2" },
14 ],14 ],
15 claudeCode: [15 claudeCode: [
16 { slug: "claude-sonnet-4-5", name: "Claude Sonnet 4.5" },16 { slug: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
17 { slug: "claude-opus-4-1", name: "Claude Opus 4.1" },17 { slug: "claude-opus-4-6", name: "Claude Opus 4.6" },
18 { slug: "claude-haiku-3-5", name: "Claude Haiku 3.5" },18 { slug: "claude-haiku-4-5", name: "Claude Haiku 4.5" },
19 ],19 ],
20} as const satisfies Record<ProviderKind, readonly ModelOption[]>;20} as const satisfies Record<ProviderKind, readonly ModelOption[]>;
2121
...@@ -23,7 +23,7 @@ export type ModelSlug = (typeof MODEL_OPTIONS_BY_PROVIDER)[ProviderKind][number]...@@ -23,7 +23,7 @@ export type ModelSlug = (typeof MODEL_OPTIONS_BY_PROVIDER)[ProviderKind][number]
2323
24export const DEFAULT_MODEL_BY_PROVIDER: Record<ProviderKind, ModelSlug> = {24export const DEFAULT_MODEL_BY_PROVIDER: Record<ProviderKind, ModelSlug> = {
25 codex: "gpt-5.3-codex",25 codex: "gpt-5.3-codex",
26 claudeCode: "claude-sonnet-4-5",26 claudeCode: "claude-sonnet-4-6",
27};27};
2828
29// Backward compatibility for existing Codex-only call sites.29// Backward compatibility for existing Codex-only call sites.
...@@ -38,15 +38,18 @@ export const MODEL_SLUG_ALIASES_BY_PROVIDER: Record<ProviderKind, Record<string,...@@ -38,15 +38,18 @@ export const MODEL_SLUG_ALIASES_BY_PROVIDER: Record<ProviderKind, Record<string,
38 "gpt-5.3-spark": "gpt-5.3-codex-spark",38 "gpt-5.3-spark": "gpt-5.3-codex-spark",
39 },39 },
40 claudeCode: {40 claudeCode: {
41 sonnet: "claude-sonnet-4-5",41 sonnet: "claude-sonnet-4-6",
42 "sonnet-4.5": "claude-sonnet-4-5",42 "sonnet-4.6": "claude-sonnet-4-6",
43 "claude-sonnet-4.5": "claude-sonnet-4-5",43 "claude-sonnet-4.6": "claude-sonnet-4-6",
44 opus: "claude-opus-4-1",44 "claude-sonnet-4-6-20251117": "claude-sonnet-4-6",
45 "opus-4.1": "claude-opus-4-1",45 opus: "claude-opus-4-6",
46 "claude-opus-4.1": "claude-opus-4-1",46 "opus-4.6": "claude-opus-4-6",
47 haiku: "claude-haiku-3-5",47 "claude-opus-4.6": "claude-opus-4-6",
48 "haiku-3.5": "claude-haiku-3-5",48 "claude-opus-4-6-20251117": "claude-opus-4-6",
49 "claude-haiku-3.5": "claude-haiku-3-5",49 haiku: "claude-haiku-4-5",
50 "haiku-4.5": "claude-haiku-4-5",
51 "claude-haiku-4.5": "claude-haiku-4-5",
52 "claude-haiku-4-5-20251001": "claude-haiku-4-5",
50 },53 },
51};54};
5255
packages/contracts/src/provider.test.ts+1-1
...@@ -28,7 +28,7 @@ describe("ProviderSessionStartInput", () => {...@@ -28,7 +28,7 @@ describe("ProviderSessionStartInput", () => {
28 const parsed = decodeProviderSessionStartInput({28 const parsed = decodeProviderSessionStartInput({
29 provider: "claudeCode",29 provider: "claudeCode",
30 cwd: "/tmp/workspace",30 cwd: "/tmp/workspace",
31 model: "claude-sonnet-4-5",31 model: "claude-sonnet-4-6",
32 providerOptions: {32 providerOptions: {
33 claudeCode: {33 claudeCode: {
34 binaryPath: "/usr/local/bin/claude",34 binaryPath: "/usr/local/bin/claude",