feat(cli): Add hideTips setting (#1524)

Co-authored-by: Allen Hutchison <adh@google.com>
This commit is contained in:
Marcin Jahn 2025-06-30 01:56:37 +02:00 committed by GitHub
parent 1732e90d52
commit d1eb86581c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 46 additions and 2 deletions

View File

@ -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
}
```

View File

@ -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.
}

View File

@ -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(
<App
config={mockConfig as unknown as ServerConfig}
settings={mockSettings}
/>,
);
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(
<App
config={mockConfig as unknown as ServerConfig}
settings={mockSettings}
/>,
);
currentUnmount = unmount;
await Promise.resolve();
expect(vi.mocked(Tips)).not.toHaveBeenCalled();
});
describe('when no theme is set', () => {
let originalNoColor: string | undefined;

View File

@ -584,7 +584,7 @@ const App = ({ config, settings, startupWarnings = [] }: AppProps) => {
items={[
<Box flexDirection="column" key="header">
<Header terminalWidth={terminalWidth} />
<Tips config={config} />
{!settings.merged.hideTips && <Tips config={config} />}
{updateMessage && <UpdateNotification message={updateMessage} />}
</Box>,
...history.map((h) => (