diff --git a/docs/cli/settings.md b/docs/cli/settings.md index 88a5d2ff83..bb8b880704 100644 --- a/docs/cli/settings.md +++ b/docs/cli/settings.md @@ -24,20 +24,21 @@ they appear in the UI. ### General -| UI Label | Setting | Description | Default | -| ----------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | -| Vim Mode | `general.vimMode` | Enable Vim keybindings | `false` | -| Default Approval Mode | `general.defaultApprovalMode` | The default approval mode for tool execution. 'default' prompts for approval, 'auto_edit' auto-approves edit tools, and 'plan' is read-only mode. YOLO mode (auto-approve all actions) can only be enabled via command line (--yolo or --approval-mode=yolo). | `"default"` | -| Enable Auto Update | `general.enableAutoUpdate` | Enable automatic updates. | `true` | -| Enable Notifications | `general.enableNotifications` | Enable run-event notifications for action-required prompts and session completion. | `false` | -| Enable Plan Mode | `general.plan.enabled` | Enable Plan Mode for read-only safety during planning. | `true` | -| Plan Directory | `general.plan.directory` | The directory where planning artifacts are stored. If not specified, defaults to the system temporary directory. A custom directory requires a policy to allow write access in Plan Mode. | `undefined` | -| Plan Model Routing | `general.plan.modelRouting` | Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pro for the planning phase and Flash for the implementation phase. | `true` | -| Retry Fetch Errors | `general.retryFetchErrors` | Retry on "exception TypeError: fetch failed sending request" errors. | `true` | -| Max Chat Model Attempts | `general.maxAttempts` | Maximum number of attempts for requests to the main chat model. Cannot exceed 10. | `10` | -| Debug Keystroke Logging | `general.debugKeystrokeLogging` | Enable debug logging of keystrokes to the console. | `false` | -| Enable Session Cleanup | `general.sessionRetention.enabled` | Enable automatic session cleanup | `true` | -| Keep chat history | `general.sessionRetention.maxAge` | Automatically delete chats older than this time period (e.g., "30d", "7d", "24h", "1w") | `"30d"` | +| UI Label | Setting | Description | Default | +| ------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | +| Vim Mode | `general.vimMode` | Enable Vim keybindings | `false` | +| Default Approval Mode | `general.defaultApprovalMode` | The default approval mode for tool execution. 'default' prompts for approval, 'auto_edit' auto-approves edit tools, and 'plan' is read-only mode. YOLO mode (auto-approve all actions) can only be enabled via command line (--yolo or --approval-mode=yolo). | `"default"` | +| Enable Auto Update | `general.enableAutoUpdate` | Enable automatic updates. | `true` | +| Enable Auto Update Notification | `general.enableAutoUpdateNotification` | Enable update notification prompts. | `true` | +| Enable Notifications | `general.enableNotifications` | Enable run-event notifications for action-required prompts and session completion. Currently macOS only. | `false` | +| Enable Plan Mode | `general.plan.enabled` | Enable Plan Mode for read-only safety during planning. | `true` | +| Plan Directory | `general.plan.directory` | The directory where planning artifacts are stored. If not specified, defaults to the system temporary directory. A custom directory requires a policy to allow write access in Plan Mode. | `undefined` | +| Plan Model Routing | `general.plan.modelRouting` | Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pro for the planning phase and Flash for the implementation phase. | `true` | +| Retry Fetch Errors | `general.retryFetchErrors` | Retry on "exception TypeError: fetch failed sending request" errors. | `true` | +| Max Chat Model Attempts | `general.maxAttempts` | Maximum number of attempts for requests to the main chat model. Cannot exceed 10. | `10` | +| Debug Keystroke Logging | `general.debugKeystrokeLogging` | Enable debug logging of keystrokes to the console. | `false` | +| Enable Session Cleanup | `general.sessionRetention.enabled` | Enable automatic session cleanup | `true` | +| Keep chat history | `general.sessionRetention.maxAge` | Automatically delete chats older than this time period (e.g., "30d", "7d", "24h", "1w") | `"30d"` | ### Output diff --git a/packages/cli/src/utils/handleAutoUpdate.test.ts b/packages/cli/src/utils/handleAutoUpdate.test.ts index 6035c1e6d1..cae8d5ab7f 100644 --- a/packages/cli/src/utils/handleAutoUpdate.test.ts +++ b/packages/cli/src/utils/handleAutoUpdate.test.ts @@ -329,7 +329,7 @@ describe('handleAutoUpdate', () => { }); }); - it('should use the "@nightly" tag for nightly updates', async () => { + it('should use the "@nightly" tag for nightly updates in both command and message', async () => { mockUpdateInfo = { ...mockUpdateInfo, update: { @@ -339,13 +339,18 @@ describe('handleAutoUpdate', () => { }; mockGetInstallationInfo.mockReturnValue({ updateCommand: 'npm i -g @google/gemini-cli@latest', - updateMessage: 'This is an additional message.', + updateMessage: 'To update, run: npm i -g @google/gemini-cli@latest', isGlobal: false, packageManager: PackageManager.NPM, }); handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn); + expect(updateEventEmitter.emit).toHaveBeenCalledWith('update-received', { + message: + 'An update is available!\nTo update, run: npm i -g @google/gemini-cli@nightly', + }); + expect(mockSpawn).toHaveBeenCalledWith( 'npm i -g @google/gemini-cli@nightly', { @@ -356,6 +361,38 @@ describe('handleAutoUpdate', () => { ); }); + it('should use the version tag for stable updates in both command and message', async () => { + mockUpdateInfo = { + ...mockUpdateInfo, + update: { + ...mockUpdateInfo.update, + latest: '2.0.0', + }, + }; + mockGetInstallationInfo.mockReturnValue({ + updateCommand: 'npm i -g @google/gemini-cli@latest', + updateMessage: 'To update, run: npm i -g @google/gemini-cli@latest', + isGlobal: false, + packageManager: PackageManager.NPM, + }); + + handleAutoUpdate(mockUpdateInfo, mockSettings, '/root', mockSpawn); + + expect(updateEventEmitter.emit).toHaveBeenCalledWith('update-received', { + message: + 'An update is available!\nTo update, run: npm i -g @google/gemini-cli@2.0.0', + }); + + expect(mockSpawn).toHaveBeenCalledWith( + 'npm i -g @google/gemini-cli@2.0.0', + { + shell: true, + stdio: 'ignore', + detached: true, + }, + ); + }); + it('should emit "update-success" when the update process succeeds', async () => { await new Promise((resolve) => { mockGetInstallationInfo.mockReturnValue({