diff --git a/packages/cli/src/config/extensions/extensionEnablement.test.ts b/packages/cli/src/config/extensions/extensionEnablement.test.ts index c42374acac..e26ebdbf66 100644 --- a/packages/cli/src/config/extensions/extensionEnablement.test.ts +++ b/packages/cli/src/config/extensions/extensionEnablement.test.ts @@ -10,7 +10,11 @@ import * as os from 'node:os'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { ExtensionEnablementManager, Override } from './extensionEnablement.js'; -import { GEMINI_DIR, type GeminiCLIExtension } from '@google/gemini-cli-core'; +import { + coreEvents, + GEMINI_DIR, + type GeminiCLIExtension, +} from '@google/gemini-cli-core'; vi.mock('os', async (importOriginal) => { const mockedOs = await importOriginal(); @@ -272,20 +276,20 @@ describe('ExtensionEnablementManager', () => { }); describe('validateExtensionOverrides', () => { - let consoleErrorSpy: ReturnType; + let coreEventsEmitSpy: ReturnType; beforeEach(() => { - consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + coreEventsEmitSpy = vi.spyOn(coreEvents, 'emitFeedback'); }); afterEach(() => { - consoleErrorSpy.mockRestore(); + coreEventsEmitSpy.mockRestore(); }); it('should not log an error if enabledExtensionNamesOverride is empty', () => { const manager = new ExtensionEnablementManager([]); manager.validateExtensionOverrides([]); - expect(consoleErrorSpy).not.toHaveBeenCalled(); + expect(coreEventsEmitSpy).not.toHaveBeenCalled(); }); it('should not log an error if all enabledExtensionNamesOverride are valid', () => { @@ -295,7 +299,7 @@ describe('ExtensionEnablementManager', () => { { name: 'ext-two' }, ] as GeminiCLIExtension[]; manager.validateExtensionOverrides(extensions); - expect(consoleErrorSpy).not.toHaveBeenCalled(); + expect(coreEventsEmitSpy).not.toHaveBeenCalled(); }); it('should log an error for each invalid extension name in enabledExtensionNamesOverride', () => { @@ -309,11 +313,13 @@ describe('ExtensionEnablementManager', () => { { name: 'ext-two' }, ] as GeminiCLIExtension[]; manager.validateExtensionOverrides(extensions); - expect(consoleErrorSpy).toHaveBeenCalledTimes(2); - expect(consoleErrorSpy).toHaveBeenCalledWith( + expect(coreEventsEmitSpy).toHaveBeenCalledTimes(2); + expect(coreEventsEmitSpy).toHaveBeenCalledWith( + 'error', 'Extension not found: ext-invalid', ); - expect(consoleErrorSpy).toHaveBeenCalledWith( + expect(coreEventsEmitSpy).toHaveBeenCalledWith( + 'error', 'Extension not found: ext-another-invalid', ); }); @@ -321,7 +327,7 @@ describe('ExtensionEnablementManager', () => { it('should not log an error if "none" is in enabledExtensionNamesOverride', () => { const manager = new ExtensionEnablementManager(['none']); manager.validateExtensionOverrides([]); - expect(consoleErrorSpy).not.toHaveBeenCalled(); + expect(coreEventsEmitSpy).not.toHaveBeenCalled(); }); }); }); diff --git a/packages/cli/src/config/extensions/extensionEnablement.ts b/packages/cli/src/config/extensions/extensionEnablement.ts index 9994a4ecff..a619587342 100644 --- a/packages/cli/src/config/extensions/extensionEnablement.ts +++ b/packages/cli/src/config/extensions/extensionEnablement.ts @@ -6,7 +6,7 @@ import fs from 'node:fs'; import path from 'node:path'; -import type { GeminiCLIExtension } from '@google/gemini-cli-core'; +import { coreEvents, type GeminiCLIExtension } from '@google/gemini-cli-core'; import { ExtensionStorage } from './storage.js'; export interface ExtensionEnablementConfig { @@ -129,7 +129,7 @@ export class ExtensionEnablementManager { if ( !extensions.some((ext) => ext.name.toLowerCase() === name.toLowerCase()) ) { - console.error(`Extension not found: ${name}`); + coreEvents.emitFeedback('error', `Extension not found: ${name}`); } } } @@ -188,7 +188,11 @@ export class ExtensionEnablementManager { ) { return {}; } - console.error('Error reading extension enablement config:', error); + coreEvents.emitFeedback( + 'error', + 'Failed to read extension enablement config.', + error, + ); return {}; } }