From cce10ffc89495166538136a47feada0a8d04e384 Mon Sep 17 00:00:00 2001 From: Lex Christopherson Date: Wed, 11 Mar 2026 01:51:48 -0600 Subject: [PATCH] fix: validate default model against full registry on every startup Uses getAll() instead of getAvailable() so stale models like grok-2 are caught even when the user has no auth for the correct provider yet. Resets thinking to off when the configured model was invalid. --- src/cli.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index 00b917d5f..d52395298 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -17,28 +17,28 @@ await runWizardIfNeeded(authStorage) const modelRegistry = new ModelRegistry(authStorage) const settingsManager = SettingsManager.create(agentDir) -// Auto-select a default model if none is configured, or if the configured -// model no longer exists (e.g. stale settings referencing a retired model). +// Always ensure defaults: anthropic/claude-sonnet-4-6, thinking off. +// Validates on every startup — catches stale settings from prior installs +// (e.g. grok-2 which no longer exists) and fresh installs with no settings. const configuredProvider = settingsManager.getDefaultProvider() const configuredModel = settingsManager.getDefaultModel() -const availableModels = modelRegistry.getAvailable() +const allModels = modelRegistry.getAll() const configuredExists = configuredProvider && configuredModel && - availableModels.some((m) => m.provider === configuredProvider && m.id === configuredModel) + allModels.some((m) => m.provider === configuredProvider && m.id === configuredModel) if (!configuredModel || !configuredExists) { - if (availableModels.length > 0) { - // Preferred default: anthropic/claude-sonnet-4-6 - const preferred = - availableModels.find((m) => m.provider === 'anthropic' && m.id === 'claude-sonnet-4-6') || - availableModels.find((m) => m.provider === 'anthropic' && m.id.includes('sonnet')) || - availableModels.find((m) => m.provider === 'anthropic') || - availableModels[0] + // Preferred default: anthropic/claude-sonnet-4-6 + const preferred = + allModels.find((m) => m.provider === 'anthropic' && m.id === 'claude-sonnet-4-6') || + allModels.find((m) => m.provider === 'anthropic' && m.id.includes('sonnet')) || + allModels.find((m) => m.provider === 'anthropic') + if (preferred) { settingsManager.setDefaultModelAndProvider(preferred.provider, preferred.id) } } -// Default thinking level: off -if (!settingsManager.getDefaultThinkingLevel()) { +// Default thinking level: off (always reset if not explicitly set) +if (settingsManager.getDefaultThinkingLevel() !== 'off' && !configuredExists) { settingsManager.setDefaultThinkingLevel('off') }