diff --git a/packages/coding-agent/src/modes/interactive/components/model-selector.ts b/packages/coding-agent/src/modes/interactive/components/model-selector.ts index 9c268031b..d1f7788b1 100644 --- a/packages/coding-agent/src/modes/interactive/components/model-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/model-selector.ts @@ -224,12 +224,16 @@ export class ModelSelectorComponent extends Container implements Focusable { private sortModels(models: ModelItem[]): ModelItem[] { const sorted = [...models]; - // Sort: current model first, then by provider + // Sort: current model first, default model second, then by provider. sorted.sort((a, b) => { const aIsCurrent = modelsAreEqual(this.currentModel, a.model); const bIsCurrent = modelsAreEqual(this.currentModel, b.model); if (aIsCurrent && !bIsCurrent) return -1; if (!aIsCurrent && bIsCurrent) return 1; + const aIsDefault = this.isDefaultModel(a.model); + const bIsDefault = this.isDefaultModel(b.model); + if (aIsDefault && !bIsDefault) return -1; + if (!aIsDefault && bIsDefault) return 1; return a.provider.localeCompare(b.provider); }); return sorted; diff --git a/packages/coding-agent/src/modes/interactive/components/settings-selector.ts b/packages/coding-agent/src/modes/interactive/components/settings-selector.ts index 9e6673fc4..6dac4def3 100644 --- a/packages/coding-agent/src/modes/interactive/components/settings-selector.ts +++ b/packages/coding-agent/src/modes/interactive/components/settings-selector.ts @@ -49,6 +49,7 @@ const DEFAULT_PROJECT_TRUST_BY_LABEL = new Map( export interface SettingsConfig { autoCompact: boolean; defaultModel: string; + currentModel?: Model; availableDefaultModels: readonly Model[]; showImages: boolean; imageWidthCells: number; @@ -449,6 +450,7 @@ export class SettingsSelectorComponent extends Container { config.availableDefaultModels.map((model) => [modelSettingKey(model), model]), ); const currentDefaultModelKey = defaultModelByValue.has(config.defaultModel) ? config.defaultModel : undefined; + const currentModelKey = config.currentModel ? modelSettingKey(config.currentModel) : undefined; const items: SettingItem[] = [ { @@ -581,11 +583,11 @@ export class SettingsSelectorComponent extends Container { const sorted = [...config.availableDefaultModels].sort((a, b) => { const aKey = modelSettingKey(a); const bKey = modelSettingKey(b); + if (aKey === currentModelKey) return -1; + if (bKey === currentModelKey) return 1; if (aKey === currentDefaultModelKey) return -1; if (bKey === currentDefaultModelKey) return 1; - const pc = a.provider.localeCompare(b.provider); - if (pc !== 0) return pc; - return (a.name || a.id).localeCompare(b.name || b.id); + return a.provider.localeCompare(b.provider); }); const items: SelectItem[] = sorted.map((model) => { const key = modelSettingKey(model); @@ -605,7 +607,7 @@ export class SettingsSelectorComponent extends Container { } return items; }, - preselect: () => currentDefaultModelKey, + preselect: () => currentModelKey ?? currentDefaultModelKey, searchable: true, layout: MODEL_PICKER_LAYOUT, }, diff --git a/packages/coding-agent/src/modes/interactive/interactive-mode.ts b/packages/coding-agent/src/modes/interactive/interactive-mode.ts index 0e8587b45..f68606ab8 100644 --- a/packages/coding-agent/src/modes/interactive/interactive-mode.ts +++ b/packages/coding-agent/src/modes/interactive/interactive-mode.ts @@ -4523,6 +4523,7 @@ export class InteractiveMode { { autoCompact: this.session.autoCompactionEnabled, defaultModel, + currentModel: this.session.model, availableDefaultModels: this.session.modelRuntime.getAvailableSnapshot(), showImages: this.settingsManager.getShowImages(), imageWidthCells: this.settingsManager.getImageWidthCells(),