From 1c5834e85883cd2c41ea8ab1d754e725c7047627 Mon Sep 17 00:00:00 2001 From: Andrew Beal Date: Mon, 6 Jul 2026 19:37:41 +0100 Subject: [PATCH] Update AI model references to latest versions Replace Claude Sonnet 4.6 with Sonnet 5 as default model, add Claude Fable 5, update OpenAI models to include versioned releases (GPT-5.5 Pro, dated variants), and update all references across enums, settings, tests, and documentation. --- Enums/ApiProvider.ts | 12 ++++--- Enums/Copy.ts | 4 ++- README.md | 34 +------------------ Services/SettingsService.ts | 2 +- Views/VaultkeeperAISettingTab.ts | 12 ++++--- .../ClaudeConversationNamingAgent.test.ts | 2 +- .../Services/AIControllerService.test.ts | 1 + __tests__/Services/ExecutionAgent.test.ts | 1 + .../Services/MultiAgentIntegration.test.ts | 1 + __tests__/Services/PlanningAgent.test.ts | 1 + __tests__/Services/SettingsService.test.ts | 18 +++++----- 11 files changed, 33 insertions(+), 55 deletions(-) diff --git a/Enums/ApiProvider.ts b/Enums/ApiProvider.ts index 982be31..83d75a9 100644 --- a/Enums/ApiProvider.ts +++ b/Enums/ApiProvider.ts @@ -66,7 +66,8 @@ export enum AIProvider { export enum AIProviderModel { // Claude models - ClaudeSonnet_4_6 = "claude-sonnet-4-6", + ClaudeFable_5 = "claude-fable-5", + ClaudeSonnet_5 = "claude-sonnet-5", ClaudeOpus_4_8 = "claude-opus-4-8", ClaudeHaiku_4_5 = "claude-haiku-4-5-20251001", @@ -77,9 +78,10 @@ export enum AIProviderModel { GeminiPro_3_1_Preview = "gemini-3.1-pro-preview", // OpenAI models - GPT_5_5 = "gpt-5.5", - GPT_5_4_Mini = "gpt-5.4-mini", - GPT_5_4_Nano = "gpt-5.4-nano", + GPT_5_5_Pro = "gpt-5.5-pro-2026-04-23", + GPT_5_5 = "gpt-5.5-2026-04-23", + GPT_5_4_Mini = "gpt-5.4-mini-2026-03-17", + GPT_5_4_Nano = "gpt-5.4-nano-2026-03-17", // Mistral models MistralMedium = "mistral-medium-3-5", @@ -124,7 +126,7 @@ export const DEFAULT_QUICK_MODEL_BY_PROVIDER: Record = { - [AIProvider.Claude]: AIProviderModel.ClaudeSonnet_4_6, + [AIProvider.Claude]: AIProviderModel.ClaudeSonnet_5, [AIProvider.Gemini]: AIProviderModel.GeminiFlash_3_5_Flash, [AIProvider.OpenAI]: AIProviderModel.GPT_5_5, [AIProvider.Mistral]: AIProviderModel.MistralMedium, diff --git a/Enums/Copy.ts b/Enums/Copy.ts index c1f6ed0..37f1204 100644 --- a/Enums/Copy.ts +++ b/Enums/Copy.ts @@ -6,7 +6,8 @@ export enum Copy { NoUserInstruction = "No custom instructions", // Model Display Names - ClaudeSonnet_4_6 = "Claude Sonnet 4.6", + ClaudeFable_5 = "Claude Fable 5", + ClaudeSonnet_5 = "Claude Sonnet 5", ClaudeOpus_4_8 = "Claude Opus 4.8", ClaudeHaiku_4_5 = "Claude Haiku 4.5", @@ -15,6 +16,7 @@ export enum Copy { GeminiFlash_3_5_Flash = "Gemini 3.5 Flash", GeminiPro_3_1_Preview = "Gemini 3.1 Pro Preview", + GPT_5_5_Pro = "GPT-5.5 Pro", GPT_5_5 = "GPT-5.5", GPT_5_4_Mini = "GPT-5.4 Mini", GPT_5_4_Nano = "GPT-5.4 Nano", diff --git a/README.md b/README.md index 5714502..0b3d565 100644 --- a/README.md +++ b/README.md @@ -70,38 +70,6 @@ ## Usage -### Switching Between Models - -The plugin supports multiple AI models: - -**Claude (Anthropic)** - -- Claude Sonnet 4.6 ⚡ (Recommended) -- Claude Sonnet 4.5, 4 -- Claude Opus 4.6, 4.5, 4.1, 4 -- Claude Haiku 4.5 - -**Gemini (Google)** - -- Gemini 3.1 Pro Preview, 3 Pro Preview, 3 Flash Preview -- Gemini 2.5 Flash, Pro -- Gemini 2.5 Flash Lite - -**OpenAI** - -- GPT-5.2 (Instant, Thinking, Pro) -- GPT-5.1, GPT-5 (Mini, Nano) - -**Mistral** - -- Mistral Large -- Mistral Medium -- Mistral Small - -**Local** - -- Any model served by an OpenAI-compatible local server (LM Studio, Ollama, vLLM, etc.) - enter the model name yourself, no preset list - Switch models anytime in the settings without losing your conversation context. ### Chat Modes @@ -347,7 +315,7 @@ See `EXAMPLE_INSTRUCTIONS.md` in your vault for a template. **Planning Model** - Select a separate model for the planning agent (used in Planning Mode) -- Default: Claude Sonnet 4.6 +- Defaults to your provider's recommended model - Allows cost optimization by using a more capable model for planning and a faster/cheaper model for execution - The planning model dropdown updates to match your selected provider diff --git a/Services/SettingsService.ts b/Services/SettingsService.ts index d2e1409..325340b 100644 --- a/Services/SettingsService.ts +++ b/Services/SettingsService.ts @@ -21,7 +21,7 @@ export const DEFAULT_SETTINGS: IVaultkeeperAISettings = { userInstruction: "", provider: AIProvider.Local, - model: AIProviderModel.ClaudeSonnet_4_6, + model: AIProviderModel.ClaudeSonnet_5, planningModel: AIProviderModel.ClaudeOpus_4_8, quickActionModel: AIProviderModel.ClaudeHaiku_4_5, diff --git a/Views/VaultkeeperAISettingTab.ts b/Views/VaultkeeperAISettingTab.ts index 4788390..250807b 100644 --- a/Views/VaultkeeperAISettingTab.ts +++ b/Views/VaultkeeperAISettingTab.ts @@ -487,16 +487,18 @@ export class VaultkeeperAISettingTab extends PluginSettingTab { switch (providerFilter) { case AIProvider.Claude: dropdown.addOptions({ - [AIProviderModel.ClaudeSonnet_4_6]: Copy.ClaudeSonnet_4_6, + [AIProviderModel.ClaudeFable_5]: Copy.ClaudeFable_5, + [AIProviderModel.ClaudeSonnet_5]: Copy.ClaudeSonnet_5, [AIProviderModel.ClaudeOpus_4_8]: Copy.ClaudeOpus_4_8, - [AIProviderModel.ClaudeHaiku_4_5]: Copy.ClaudeHaiku_4_5, + [AIProviderModel.ClaudeHaiku_4_5]: Copy.ClaudeHaiku_4_5 }); break; case AIProvider.OpenAI: dropdown.addOptions({ + [AIProviderModel.GPT_5_5_Pro]: Copy.GPT_5_5_Pro, [AIProviderModel.GPT_5_5]: Copy.GPT_5_5, [AIProviderModel.GPT_5_4_Mini]: Copy.GPT_5_4_Mini, - [AIProviderModel.GPT_5_4_Nano]: Copy.GPT_5_4_Nano, + [AIProviderModel.GPT_5_4_Nano]: Copy.GPT_5_4_Nano }); break; case AIProvider.Gemini: @@ -504,13 +506,13 @@ export class VaultkeeperAISettingTab extends PluginSettingTab { [AIProviderModel.GeminiFlash_3_1_Lite]: Copy.GeminiFlash_3_1_Lite, [AIProviderModel.GeminiFlash_3_Flash]: Copy.GeminiFlash_3_Flash, [AIProviderModel.GeminiFlash_3_5_Flash]: Copy.GeminiFlash_3_5_Flash, - [AIProviderModel.GeminiPro_3_1_Preview]: Copy.GeminiPro_3_1_Preview, + [AIProviderModel.GeminiPro_3_1_Preview]: Copy.GeminiPro_3_1_Preview }); break; case AIProvider.Mistral: dropdown.addOptions({ [AIProviderModel.MistralMedium]: Copy.MistralMedium, - [AIProviderModel.MistralSmall]: Copy.MistralSmall, + [AIProviderModel.MistralSmall]: Copy.MistralSmall }); break; case AIProvider.Local: diff --git a/__tests__/AIClasses/ClaudeConversationNamingAgent.test.ts b/__tests__/AIClasses/ClaudeConversationNamingAgent.test.ts index dfab4c7..dae156b 100644 --- a/__tests__/AIClasses/ClaudeConversationNamingAgent.test.ts +++ b/__tests__/AIClasses/ClaudeConversationNamingAgent.test.ts @@ -19,7 +19,7 @@ describe('ClaudeConversationNamingAgent', () => { // Mock SettingsService mockSettingsService = { settings: { - model: AIProviderModel.ClaudeSonnet_4_6, + model: AIProviderModel.ClaudeSonnet_5, apiKeys: { claude: 'test-claude-key', openai: 'test-openai-key', diff --git a/__tests__/Services/AIControllerService.test.ts b/__tests__/Services/AIControllerService.test.ts index c16c12a..87a1c12 100644 --- a/__tests__/Services/AIControllerService.test.ts +++ b/__tests__/Services/AIControllerService.test.ts @@ -36,6 +36,7 @@ describe('AIControllerService - Integration Tests', () => { onPlanningStarted: vi.fn(), onPlanningFinished: vi.fn(), onUserQuestion: vi.fn(), + onPlanApprovalRequest: vi.fn(), onPlanUpdate: vi.fn(), onPlanStepUpdate: vi.fn(), onPlanReset: vi.fn(), diff --git a/__tests__/Services/ExecutionAgent.test.ts b/__tests__/Services/ExecutionAgent.test.ts index 3139ce2..c18ec6e 100644 --- a/__tests__/Services/ExecutionAgent.test.ts +++ b/__tests__/Services/ExecutionAgent.test.ts @@ -33,6 +33,7 @@ describe('ExecutionAgent - Unit Tests', () => { onPlanningStarted: vi.fn(), onPlanningFinished: vi.fn(), onUserQuestion: vi.fn().mockResolvedValue('User answer'), + onPlanApprovalRequest: vi.fn(), onPlanUpdate: vi.fn(), onPlanStepUpdate: vi.fn(), onPlanReset: vi.fn(), diff --git a/__tests__/Services/MultiAgentIntegration.test.ts b/__tests__/Services/MultiAgentIntegration.test.ts index e226adf..109d113 100644 --- a/__tests__/Services/MultiAgentIntegration.test.ts +++ b/__tests__/Services/MultiAgentIntegration.test.ts @@ -42,6 +42,7 @@ describe('Multi-Agent Integration Tests', () => { onPlanningStarted: vi.fn(), onPlanningFinished: vi.fn(), onUserQuestion: vi.fn().mockResolvedValue('User answer'), + onPlanApprovalRequest: vi.fn(), onPlanUpdate: vi.fn(), onPlanStepUpdate: vi.fn(), onPlanReset: vi.fn(), diff --git a/__tests__/Services/PlanningAgent.test.ts b/__tests__/Services/PlanningAgent.test.ts index 5edfdb5..756bf5c 100644 --- a/__tests__/Services/PlanningAgent.test.ts +++ b/__tests__/Services/PlanningAgent.test.ts @@ -35,6 +35,7 @@ describe('PlanningAgent - Unit Tests', () => { onPlanningStarted: vi.fn(), onPlanningFinished: vi.fn(), onUserQuestion: vi.fn().mockResolvedValue('User answer'), + onPlanApprovalRequest: vi.fn(), onPlanUpdate: vi.fn(), onPlanStepUpdate: vi.fn(), onPlanReset: vi.fn(), diff --git a/__tests__/Services/SettingsService.test.ts b/__tests__/Services/SettingsService.test.ts index fb27dae..c4a208c 100644 --- a/__tests__/Services/SettingsService.test.ts +++ b/__tests__/Services/SettingsService.test.ts @@ -27,7 +27,7 @@ describe('SettingsService', () => { settingsService = new SettingsService({}); expect(settingsService.settings.firstTimeStart).toBe(true); - expect(settingsService.settings.model).toBe(AIProviderModel.ClaudeSonnet_4_6); + expect(settingsService.settings.model).toBe(AIProviderModel.ClaudeSonnet_5); expect(settingsService.settings.apiKeys).toEqual({ claude: '', openai: '', @@ -172,7 +172,7 @@ describe('SettingsService', () => { beforeEach(() => { const loadedSettings = makeTestSettings({ provider: AIProvider.Claude, - model: AIProviderModel.ClaudeSonnet_4_6, + model: AIProviderModel.ClaudeSonnet_5, apiKeys: { claude: 'claude-api-key', openai: 'openai-api-key', @@ -220,7 +220,7 @@ describe('SettingsService', () => { it('should return Claude key when current model is Claude', () => { const loadedSettings = makeTestSettings({ provider: AIProvider.Claude, - model: AIProviderModel.ClaudeSonnet_4_6, + model: AIProviderModel.ClaudeSonnet_5, apiKeys: { claude: 'claude-key', openai: 'openai-key', @@ -336,7 +336,7 @@ describe('SettingsService', () => { beforeEach(() => { const loadedSettings = makeTestSettings({ provider: AIProvider.Claude, - model: AIProviderModel.ClaudeSonnet_4_6 + model: AIProviderModel.ClaudeSonnet_5 }); settingsService = new SettingsService(loadedSettings); }); @@ -396,7 +396,7 @@ describe('SettingsService', () => { beforeEach(() => { const loadedSettings = makeTestSettings({ provider: AIProvider.Claude, - model: AIProviderModel.ClaudeSonnet_4_6, + model: AIProviderModel.ClaudeSonnet_5, apiKeys: { claude: 'test-key', openai: '', @@ -441,8 +441,8 @@ describe('SettingsService', () => { describe('Provider Detection from Model Names', () => { it('should correctly identify Claude models', () => { const claudeModels = [ - AIProviderModel.ClaudeSonnet_4_6, - AIProviderModel.ClaudeSonnet_4_6, + AIProviderModel.ClaudeSonnet_5, + AIProviderModel.ClaudeSonnet_5, AIProviderModel.ClaudeOpus_4_8, AIProviderModel.ClaudeHaiku_4_5 ]; @@ -526,7 +526,7 @@ describe('SettingsService', () => { describe('Settings Immutability and Reference', () => { it('should maintain reference to settings object', () => { settingsService = new SettingsService({ - model: AIProviderModel.ClaudeSonnet_4_6, + model: AIProviderModel.ClaudeSonnet_5, apiKeys: { claude: 'key', openai: '', gemini: '', mistral: '', local: '' } }); @@ -539,7 +539,7 @@ describe('SettingsService', () => { it('should allow modification of settings properties via updateSettings', async () => { settingsService = new SettingsService({ - model: AIProviderModel.ClaudeSonnet_4_6, + model: AIProviderModel.ClaudeSonnet_5, apiKeys: { claude: '', openai: '', gemini: '', mistral: '', local: '' }, exclusions: [] });