From b364e369d5053de704c775010a6cacb4daa307e3 Mon Sep 17 00:00:00 2001 From: Lex Christopherson Date: Wed, 11 Mar 2026 01:37:14 -0600 Subject: [PATCH] fix: remove circular self-dependency, default to anthropic/claude-sonnet-4-6 with thinking off - Remove gsd-pi from its own dependencies (circular dep caused ENOTEMPTY install failures) - Auto-select anthropic/claude-sonnet-4-6 as default model for new installs - Reset to valid model if configured model no longer exists in registry - Default thinking level to off --- package-lock.json | 4 ++-- package.json | 2 +- src/cli.ts | 22 ++++++++++++++++------ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index a47768e68..3e78e584a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "gsd-pi", - "version": "0.2.3", + "version": "0.2.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gsd-pi", - "version": "0.2.3", + "version": "0.2.4", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 6c95e4a7d..72f3ddb6b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gsd-pi", - "version": "0.2.3", + "version": "0.2.4", "description": "GSD — Get Stuff Done coding agent", "license": "MIT", "repository": { diff --git a/src/cli.ts b/src/cli.ts index d3a736515..00b917d5f 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -17,14 +17,19 @@ await runWizardIfNeeded(authStorage) const modelRegistry = new ModelRegistry(authStorage) const settingsManager = SettingsManager.create(agentDir) -// Auto-select a default model if none is configured. -// This prevents the "No model configured" error for users who logged in -// but never explicitly ran /model to pick one. -if (!settingsManager.getDefaultModel()) { - const availableModels = modelRegistry.getAvailable() +// 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). +const configuredProvider = settingsManager.getDefaultProvider() +const configuredModel = settingsManager.getDefaultModel() +const availableModels = modelRegistry.getAvailable() +const configuredExists = configuredProvider && configuredModel && + availableModels.some((m) => m.provider === configuredProvider && m.id === configuredModel) + +if (!configuredModel || !configuredExists) { if (availableModels.length > 0) { - // Prefer a mid-tier Anthropic model (sonnet), then any Anthropic, then first available + // 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] @@ -32,6 +37,11 @@ if (!settingsManager.getDefaultModel()) { } } +// Default thinking level: off +if (!settingsManager.getDefaultThinkingLevel()) { + settingsManager.setDefaultThinkingLevel('off') +} + // GSD always uses quiet startup — the gsd extension renders its own branded header if (!settingsManager.getQuietStartup()) { settingsManager.setQuietStartup(true)