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", () => {
3131 });
3232
3333 it("uses provider-specific aliases", () => {
34 expect(normalizeModelSlug("sonnet", "claudeCode")).toBe("claude-sonnet-4-5");
35 expect(normalizeModelSlug("opus-4.1", "claudeCode")).toBe("claude-opus-4-1");
34 expect(normalizeModelSlug("sonnet", "claudeCode")).toBe("claude-sonnet-4-6");
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 );
3639 });
3740});
3841
......@@ -57,7 +60,7 @@ describe("resolveModelSlug", () => {
5760 expect(resolveModelSlugForProvider("claudeCode", undefined)).toBe(
5861 DEFAULT_MODEL_BY_PROVIDER.claudeCode,
5962 );
60 expect(resolveModelSlugForProvider("claudeCode", "sonnet")).toBe("claude-sonnet-4-5");
63 expect(resolveModelSlugForProvider("claudeCode", "sonnet")).toBe("claude-sonnet-4-6");
6164 expect(resolveModelSlugForProvider("claudeCode", "gpt-5.3-codex")).toBe(
6265 DEFAULT_MODEL_BY_PROVIDER.claudeCode,
6366 );
packages/contracts/src/model.ts+16-13
......@@ -13,9 +13,9 @@ export const MODEL_OPTIONS_BY_PROVIDER = {
1313 { slug: "gpt-5.2", name: "GPT-5.2" },
1414 ],
1515 claudeCode: [
16 { slug: "claude-sonnet-4-5", name: "Claude Sonnet 4.5" },
17 { slug: "claude-opus-4-1", name: "Claude Opus 4.1" },
18 { slug: "claude-haiku-3-5", name: "Claude Haiku 3.5" },
16 { slug: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
17 { slug: "claude-opus-4-6", name: "Claude Opus 4.6" },
18 { slug: "claude-haiku-4-5", name: "Claude Haiku 4.5" },
1919 ],
2020} as const satisfies Record<ProviderKind, readonly ModelOption[]>;
2121
......@@ -23,7 +23,7 @@ export type ModelSlug = (typeof MODEL_OPTIONS_BY_PROVIDER)[ProviderKind][number]
2323
2424export const DEFAULT_MODEL_BY_PROVIDER: Record<ProviderKind, ModelSlug> = {
2525 codex: "gpt-5.3-codex",
26 claudeCode: "claude-sonnet-4-5",
26 claudeCode: "claude-sonnet-4-6",
2727};
2828
2929// Backward compatibility for existing Codex-only call sites.
......@@ -38,15 +38,18 @@ export const MODEL_SLUG_ALIASES_BY_PROVIDER: Record<ProviderKind, Record<string,
3838 "gpt-5.3-spark": "gpt-5.3-codex-spark",
3939 },
4040 claudeCode: {
41 sonnet: "claude-sonnet-4-5",
42 "sonnet-4.5": "claude-sonnet-4-5",
43 "claude-sonnet-4.5": "claude-sonnet-4-5",
44 opus: "claude-opus-4-1",
45 "opus-4.1": "claude-opus-4-1",
46 "claude-opus-4.1": "claude-opus-4-1",
47 haiku: "claude-haiku-3-5",
48 "haiku-3.5": "claude-haiku-3-5",
49 "claude-haiku-3.5": "claude-haiku-3-5",
41 sonnet: "claude-sonnet-4-6",
42 "sonnet-4.6": "claude-sonnet-4-6",
43 "claude-sonnet-4.6": "claude-sonnet-4-6",
44 "claude-sonnet-4-6-20251117": "claude-sonnet-4-6",
45 opus: "claude-opus-4-6",
46 "opus-4.6": "claude-opus-4-6",
47 "claude-opus-4.6": "claude-opus-4-6",
48 "claude-opus-4-6-20251117": "claude-opus-4-6",
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",
5053 },
5154};
5255
packages/contracts/src/provider.test.ts+1-1
......@@ -28,7 +28,7 @@ describe("ProviderSessionStartInput", () => {
2828 const parsed = decodeProviderSessionStartInput({
2929 provider: "claudeCode",
3030 cwd: "/tmp/workspace",
31 model: "claude-sonnet-4-5",
31 model: "claude-sonnet-4-6",
3232 providerOptions: {
3333 claudeCode: {
3434 binaryPath: "/usr/local/bin/claude",