diff --git a/apps/emdash-desktop/src/shared/core/conversations/conversation-config.test.ts b/apps/emdash-desktop/src/shared/core/conversations/conversation-config.test.ts index 98200864c0..b488a3e24c 100644 --- a/apps/emdash-desktop/src/shared/core/conversations/conversation-config.test.ts +++ b/apps/emdash-desktop/src/shared/core/conversations/conversation-config.test.ts @@ -7,7 +7,7 @@ describe('conversation-config v1 schema', () => { version: '1', type: 'pty', autoApprove: true, - model: 'claude-sonnet-4-5', + model: 'claude-sonnet-5', }); expect(result.status).toBe('ok'); if (result.status === 'ok') { @@ -15,7 +15,7 @@ describe('conversation-config v1 schema', () => { version: '1', type: 'pty', autoApprove: true, - model: 'claude-sonnet-4-5', + model: 'claude-sonnet-5', }); } }); @@ -24,18 +24,18 @@ describe('conversation-config v1 schema', () => { const result = conversationConfig.safeParse({ version: '1', type: 'acp', - model: 'claude-opus-4-5', + model: 'claude-opus-4-8', }); expect(result.status).toBe('ok'); if (result.status === 'ok') { - expect(result.data).toEqual({ version: '1', type: 'acp', model: 'claude-opus-4-5' }); + expect(result.data).toEqual({ version: '1', type: 'acp', model: 'claude-opus-4-8' }); } }); it('upgrades a v0 legacy row (no version field) to v1 pty', () => { const result = conversationConfig.safeParse({ autoApprove: true, - model: 'claude-sonnet-4-5', + model: 'claude-sonnet-5', }); expect(result.status).toBe('ok'); if (result.status === 'ok') { @@ -43,7 +43,7 @@ describe('conversation-config v1 schema', () => { version: '1', type: 'pty', autoApprove: true, - model: 'claude-sonnet-4-5', + model: 'claude-sonnet-5', }); } }); @@ -97,10 +97,10 @@ describe('conversation-config v1 schema', () => { }); it('parses and round-trips model field on v0 input (upgraded to v1)', () => { - const result = conversationConfig.safeParse({ model: 'claude-sonnet-4-5' }); + const result = conversationConfig.safeParse({ model: 'claude-sonnet-5' }); expect(result.status).toBe('ok'); if (result.status === 'ok') { - expect(result.data.model).toBe('claude-sonnet-4-5'); + expect(result.data.model).toBe('claude-sonnet-5'); } }); }); diff --git a/apps/emdash-desktop/src/shared/core/conversations/conversation-config.ts b/apps/emdash-desktop/src/shared/core/conversations/conversation-config.ts index 79a991e99c..27fd9b6c59 100644 --- a/apps/emdash-desktop/src/shared/core/conversations/conversation-config.ts +++ b/apps/emdash-desktop/src/shared/core/conversations/conversation-config.ts @@ -6,7 +6,7 @@ const conversationConfigV0Schema = z.object({ /** @deprecated Moved to conversations.session_id column; stripped on upgrade to v1. */ providerSessionId: z.string().optional(), initialPrompt: z.string().optional(), - /** Model to pass to the agent CLI (e.g. 'claude-sonnet-4-5', 'o4-mini'). Empty string or absent = CLI default. */ + /** Model to pass to the agent CLI (e.g. 'claude-sonnet-5', 'o4-mini'). Empty string or absent = CLI default. */ model: z.string().optional(), }); diff --git a/packages/plugins/src/agents/impl/claude/index.ts b/packages/plugins/src/agents/impl/claude/index.ts index 8a842ffebb..99635ea255 100644 --- a/packages/plugins/src/agents/impl/claude/index.ts +++ b/packages/plugins/src/agents/impl/claude/index.ts @@ -35,12 +35,16 @@ export const plugin = definePlugin( models: { kind: 'selectable', modelOptions: { - 'claude-opus-4-5': { - name: 'Claude Opus 4.5', + 'claude-fable-5': { + name: 'Claude Fable 5', + modelFeatures: { intelligence: 4, speed: 3 }, + }, + 'claude-opus-4-8': { + name: 'Claude Opus 4.8', modelFeatures: { intelligence: 5, speed: 2 }, }, - 'claude-sonnet-4-5': { - name: 'Claude Sonnet 4.5', + 'claude-sonnet-5': { + name: 'Claude Sonnet 5', modelFeatures: { intelligence: 4, speed: 4 }, }, 'claude-haiku-4-5': {