From 8045b4d5ddd80c8126267ff86cbcfd75ed781ef5 Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 11 Sep 2026 01:09:42 -0700 Subject: [PATCH] Preserve configured-default intent through dialog agent changes --- .../normalize-loaded-global-settings.ts | 1 - .../SourceControlTextGenerationDialog.test.ts | 11 +++++++++++ .../source-control/ai/text-generation-params.ts | 12 ++++++++---- src/shared/source-control-ai.ts | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/persistence/loading-store/normalize-loaded-global-settings.ts b/src/main/persistence/loading-store/normalize-loaded-global-settings.ts index bf041eaa37b..a7ef44065e4 100644 --- a/src/main/persistence/loading-store/normalize-loaded-global-settings.ts +++ b/src/main/persistence/loading-store/normalize-loaded-global-settings.ts @@ -134,7 +134,6 @@ export function normalizeLoadedGlobalSettings( // Why: rollback builds still read commitMessageAi, so refresh the legacy projection from sourceControlAi for compat. commitMessageAi: projectSourceControlAiToLegacyCommitMessageAi( migratedSourceControlAi, - piConfiguredDefaultModelState, parsed.settings?.commitMessageAi ?? defaults.settings.commitMessageAi ), voice: { diff --git a/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.test.ts b/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.test.ts index 94465c5d914..9d93df368fd 100644 --- a/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.test.ts +++ b/src/renderer/src/components/right-sidebar/SourceControlTextGenerationDialog.test.ts @@ -212,6 +212,17 @@ describe('buildCommitMessageGenerationParams', () => { }) }) + it('encodes configured default when switching the dialog to Pi', () => { + expect( + buildCommitMessageGenerationParams({ + agentId: 'pi', + commandTemplate: '{basePrompt}', + baseParams: null, + settings: null + }) + ).toMatchObject({ model: 'github-copilot/gpt-5.4-mini', useConfiguredDefaultModel: true }) + }) + it('preserves Pi configured-default intent through dialog reconstruction', () => { expect( buildCommitMessageGenerationParams({ diff --git a/src/renderer/src/components/right-sidebar/source-control/ai/text-generation-params.ts b/src/renderer/src/components/right-sidebar/source-control/ai/text-generation-params.ts index 2cb62f5fa07..cd0134f4081 100644 --- a/src/renderer/src/components/right-sidebar/source-control/ai/text-generation-params.ts +++ b/src/renderer/src/components/right-sidebar/source-control/ai/text-generation-params.ts @@ -1,5 +1,7 @@ import { CUSTOM_AGENT_ID, + PI_DEFAULT_MODEL_ID, + PI_RETIRED_COPILOT_DEFAULT_MODEL_ID, getCommitMessageAgentCapability, isCustomAgentId } from '../../../../../../shared/commit-message-agent-spec' @@ -41,6 +43,10 @@ export function buildCommitMessageGenerationParams(args: { ? args.baseParams.model : (capability.models.find((model) => model.id === capability.defaultModelId)?.id ?? capability.defaultModelId) + const useConfiguredDefaultModel = + args.agentId === 'pi' && + (modelId === PI_DEFAULT_MODEL_ID || + (sameResolvedAgent && args.baseParams?.useConfiguredDefaultModel === true)) const model = capability.models.find((candidate) => candidate.id === modelId) const thinkingLevel = sameResolvedAgent && args.baseParams?.thinkingLevel @@ -50,10 +56,8 @@ export function buildCommitMessageGenerationParams(args: { const customAgentCommand = args.baseParams?.customAgentCommand ?? args.customAgentCommand return { agentId: args.agentId, - model: modelId, - ...(sameResolvedAgent && args.baseParams?.useConfiguredDefaultModel - ? { useConfiguredDefaultModel: true } - : {}), + model: useConfiguredDefaultModel ? PI_RETIRED_COPILOT_DEFAULT_MODEL_ID : modelId, + ...(useConfiguredDefaultModel ? { useConfiguredDefaultModel: true } : {}), ...(thinkingLevel ? { thinkingLevel } : {}), commandInputTemplate: args.commandTemplate, ...(args.agentArgs !== undefined ? { agentArgs: args.agentArgs } : {}), diff --git a/src/shared/source-control-ai.ts b/src/shared/source-control-ai.ts index 764e8d52456..2b8750abd4b 100644 --- a/src/shared/source-control-ai.ts +++ b/src/shared/source-control-ai.ts @@ -220,7 +220,7 @@ export function resolveSourceControlAiForOperation( const model = spec.models.find((candidate) => candidate.id === persistedModelId) ?? discoveredModels.find((candidate) => candidate.id === persistedModelId) ?? - (spec.modelSource === 'dynamic' && persistedModelId + (spec.id === 'pi' && persistedModelId ? { id: persistedModelId, label: persistedModelId } : undefined) ?? getCommitMessageModel(resolvedAgent, spec.defaultModelId)