feat: automatic /model persistence across Gemini CLI sessions (#13199)

Co-authored-by: Jack Wotherspoon <jackwoth@google.com>
This commit is contained in:
Niyas Hameed
2025-12-23 19:53:43 +05:30
committed by GitHub
parent 3b1dbcd42d
commit 6be034392f
7 changed files with 48 additions and 6 deletions
+12
View File
@@ -1629,6 +1629,18 @@ describe('Config getHooks', () => {
expect(config.getModel()).toBe(originalModel);
expect(config.getActiveModel()).toBe(originalModel);
});
it('should call onModelChange when a new model is set', () => {
const onModelChange = vi.fn();
const config = new Config({
...baseParams,
onModelChange,
});
config.setModel(DEFAULT_GEMINI_MODEL);
expect(onModelChange).toHaveBeenCalledWith(DEFAULT_GEMINI_MODEL);
});
});
});
+6
View File
@@ -337,6 +337,7 @@ export interface ConfigParameters {
previewFeatures?: boolean;
enableAgents?: boolean;
experimentalJitContext?: boolean;
onModelChange?: (model: string) => void;
}
export class Config {
@@ -457,6 +458,7 @@ export class Config {
private experiments: Experiments | undefined;
private experimentsPromise: Promise<void> | undefined;
private hookSystem?: HookSystem;
private readonly onModelChange: ((model: string) => void) | undefined;
private readonly enableAgents: boolean;
@@ -623,6 +625,7 @@ export class Config {
this.disableYoloMode = params.disableYoloMode ?? false;
this.hooks = params.hooks;
this.experiments = params.experiments;
this.onModelChange = params.onModelChange;
if (params.contextFileName) {
setGeminiMdFilename(params.contextFileName);
@@ -879,6 +882,9 @@ export class Config {
// When the user explicitly sets a model, that becomes the active model.
this._activeModel = newModel;
coreEvents.emitModelChanged(newModel);
if (this.onModelChange) {
this.onModelChange(newModel);
}
}
this.modelAvailabilityService.reset();
}