diff --git a/docs/cli/configuration.md b/docs/cli/configuration.md index c866c01f..450d6ce8 100644 --- a/docs/cli/configuration.md +++ b/docs/cli/configuration.md @@ -176,6 +176,15 @@ In addition to a project settings file, a project's `.gemini` directory can cont "usageStatisticsEnabled": false ``` +- **`hideTips`** (boolean): + - **Description:** Enables or disables helpful tips in the CLI interface. + - **Default:** `false` + - **Example:** + + ```json + "hideTips": true + ``` + ### Example `settings.json`: ```json @@ -199,7 +208,8 @@ In addition to a project settings file, a project's `.gemini` directory can cont "otlpEndpoint": "http://localhost:4317", "logPrompts": true }, - "usageStatisticsEnabled": true + "usageStatisticsEnabled": true, + "hideTips": false } ``` diff --git a/packages/cli/src/config/settings.ts b/packages/cli/src/config/settings.ts index de1e5569..28010a7a 100644 --- a/packages/cli/src/config/settings.ts +++ b/packages/cli/src/config/settings.ts @@ -63,6 +63,7 @@ export interface Settings { // UI setting. Does not display the ANSI-controlled terminal title. hideWindowTitle?: boolean; + hideTips?: boolean; // Add other settings here. } diff --git a/packages/cli/src/ui/App.test.tsx b/packages/cli/src/ui/App.test.tsx index 2f12615b..ecd56f5e 100644 --- a/packages/cli/src/ui/App.test.tsx +++ b/packages/cli/src/ui/App.test.tsx @@ -17,6 +17,7 @@ import { } from '@google/gemini-cli-core'; import { LoadedSettings, SettingsFile, Settings } from '../config/settings.js'; import process from 'node:process'; +import { Tips } from './components/Tips.js'; // Define a more complete mock server config based on actual Config interface MockServerConfig { @@ -173,6 +174,10 @@ vi.mock('../config/config.js', async (importOriginal) => { }; }); +vi.mock('./components/Tips.js', () => ({ + Tips: vi.fn(() => null), +})); + describe('App UI', () => { let mockConfig: MockServerConfig; let mockSettings: LoadedSettings; @@ -379,6 +384,34 @@ describe('App UI', () => { expect(lastFrame()).toContain('Using 2 MCP servers'); }); + it('should display Tips component by default', async () => { + const { unmount } = render( + , + ); + currentUnmount = unmount; + await Promise.resolve(); + expect(vi.mocked(Tips)).toHaveBeenCalled(); + }); + + it('should not display Tips component when hideTips is true', async () => { + mockSettings = createMockSettings({ + hideTips: true, + }); + + const { unmount } = render( + , + ); + currentUnmount = unmount; + await Promise.resolve(); + expect(vi.mocked(Tips)).not.toHaveBeenCalled(); + }); + describe('when no theme is set', () => { let originalNoColor: string | undefined; diff --git a/packages/cli/src/ui/App.tsx b/packages/cli/src/ui/App.tsx index 6bbe47d4..0848e330 100644 --- a/packages/cli/src/ui/App.tsx +++ b/packages/cli/src/ui/App.tsx @@ -584,7 +584,7 @@ const App = ({ config, settings, startupWarnings = [] }: AppProps) => { items={[
- + {!settings.merged.hideTips && } {updateMessage && } , ...history.map((h) => (