Skip to content

Commit cfa6386

Browse files
fix(daemon): surface Claude 5-generation models in the Claude Code picker (#6529)
CLAUDE_FALLBACK_MODELS stopped at the 4.5 generation, so users whose ~/.config/mms/model-routes.json is absent or stale (the Claude Code CLI does not currently sync claude-opus-5 into it) cannot pick claude-opus-5 without typing it as a custom model string. Add the claude-opus-5, claude-sonnet-5 and claude-fable-5 ids to the fallback list. Also pin the answer to the #6529 AMR question in a regression test: vela model list --all --format json returns BARE major-only ids for the 5-generation (verified against the live AMR endpoint), which must pass through normalizeVelaModelId unchanged via the underscore fallback since the versioned regex requires major AND minor. Fixes #6529
1 parent 66004e0 commit cfa6386

2 files changed

Lines changed: 17 additions & 0 deletions

File tree

apps/daemon/src/runtimes/defs/claude.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ const CLAUDE_FALLBACK_MODELS = [
88
{ id: 'sonnet', label: 'Sonnet (alias)' },
99
{ id: 'opus', label: 'Opus (alias)' },
1010
{ id: 'haiku', label: 'Haiku (alias)' },
11+
{ id: 'claude-opus-5', label: 'claude-opus-5' },
12+
{ id: 'claude-sonnet-5', label: 'claude-sonnet-5' },
13+
{ id: 'claude-fable-5', label: 'claude-fable-5' },
1114
{ id: 'claude-opus-4-5', label: 'claude-opus-4-5' },
1215
{ id: 'claude-sonnet-4-5', label: 'claude-sonnet-4-5' },
1316
{ id: 'claude-haiku-4-5', label: 'claude-haiku-4-5' },

apps/daemon/tests/amr-acp-integration.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,20 @@ describe('AMR runtime def', () => {
168168
expect(ids).toEqual([]);
169169
});
170170

171+
it('passes major-only claude ids through unchanged (#6529)', () => {
172+
// `vela model list --all --format json` returns BARE major-only ids for
173+
// the 5-generation (verified against the live AMR endpoint: the JSON `id`
174+
// is exactly "claude-opus-5", not a dated form). The versioned regex in
175+
// normalizeKnownVelaVersionId requires major AND minor, so these must
176+
// fall through to the underscore fallback and come back untouched —
177+
// a regression here is how a model "disappears" from the picker.
178+
expect(normalizeVelaModelId('claude-opus-5')).toBe('claude-opus-5');
179+
expect(normalizeVelaModelId('claude-sonnet-5')).toBe('claude-sonnet-5');
180+
expect(normalizeVelaModelId('claude-fable-5')).toBe('claude-fable-5');
181+
// Dated major.minor forms keep normalizing as before.
182+
expect(normalizeVelaModelId('claude_opus_4_8')).toBe('claude-opus-4.8');
183+
});
184+
171185
it('normalizes Vela public model ids to link-canonical ACP model ids', () => {
172186
expect(normalizeVelaModelId('public_model_deepseek_v3_2')).toBe('deepseek-v3.2');
173187
expect(normalizeVelaModelId('public_model_kimi_k2_6')).toBe('kimi-k2.6');

0 commit comments

Comments
 (0)