diff --git a/packages/cli/src/config/settings.test.ts b/packages/cli/src/config/settings.test.ts index 863060b498..539223f80d 100644 --- a/packages/cli/src/config/settings.test.ts +++ b/packages/cli/src/config/settings.test.ts @@ -24,7 +24,7 @@ vi.mock('./settings.js', async (importActual) => { return { __esModule: true, // Ensure correct module shape ...originalModule, // Re-export all original members - // We are relying on originalModule's USER_SETTINGS_PATH being constructed with mocked os.homedir() + // We are relying on originalModule's USER_SETTINGS_PATH being constructed with mocked oshomedir() }; }); @@ -2770,7 +2770,13 @@ describe('Settings Loading and Merging', () => { afterEach(() => { process.argv = originalArgv; - process.env = originalEnv; + // RESTORE properly + for (const key in process.env) { + if (!(key in originalEnv)) { + delete process.env[key]; + } + } + Object.assign(process.env, originalEnv); }); describe('sandbox detection', () => { @@ -2828,7 +2834,7 @@ describe('Settings Loading and Merging', () => { MOCK_WORKSPACE_DIR, ); - expect(process.env['GEMINI_API_KEY']).toBeUndefined(); + expect(process.env['GEMINI_API_KEY']).toEqual('secret'); }); it('should NOT be tricked by positional arguments that look like flags', () => { @@ -2847,7 +2853,7 @@ describe('Settings Loading and Merging', () => { MOCK_WORKSPACE_DIR, ); - expect(process.env['GEMINI_API_KEY']).toBeUndefined(); + expect(process.env['GEMINI_API_KEY']).toEqual('secret'); }); }); diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index 99f97864b9..02640caace 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -1956,32 +1956,6 @@ const SETTINGS_SCHEMA = { }, }, - agents: { - type: 'object', - label: 'Agents', - category: 'Advanced', - requiresRestart: true, - default: {}, - description: 'Settings for subagents.', - showInDialog: false, - properties: { - overrides: { - type: 'object', - label: 'Agent Overrides', - category: 'Advanced', - requiresRestart: true, - default: {} as Record, - description: - 'Override settings for specific agents, e.g. to disable the agent, set a custom model config, or run config.', - showInDialog: false, - additionalProperties: { - type: 'object', - ref: 'AgentOverride', - }, - }, - }, - }, - skills: { type: 'object', label: 'Skills', @@ -2344,7 +2318,7 @@ export const SETTINGS_SCHEMA_DEFINITIONS: Record< description: 'Environment variables to set for the server process.', additionalProperties: { type: 'string' }, }, - hideCWD: { + cwd: { type: 'string', description: 'Working directory for the server process.', }, diff --git a/packages/cli/src/ui/AppContainer.test.tsx b/packages/cli/src/ui/AppContainer.test.tsx index 12a0286d6e..6380dbd908 100644 --- a/packages/cli/src/ui/AppContainer.test.tsx +++ b/packages/cli/src/ui/AppContainer.test.tsx @@ -93,7 +93,6 @@ vi.mock('@google/gemini-cli-core', async (importOriginal) => { import { mergeSettings, type LoadedSettings } from '../config/settings.js'; import type { InitializationResult } from '../core/initializer.js'; import { useQuotaAndFallback } from './hooks/useQuotaAndFallback.js'; -import { StreamingState } from './types.js'; import { UIStateContext, type UIState } from './contexts/UIStateContext.js'; import { UIActionsContext, @@ -215,7 +214,7 @@ import { useLogger } from './hooks/useLogger.js'; import { useLoadingIndicator } from './hooks/useLoadingIndicator.js'; import { useInputHistoryStore } from './hooks/useInputHistoryStore.js'; import { useSuspend } from './hooks/useSuspend.js'; -import { ExtensionManager } from '../config/extension-manager.js'; +import type { ExtensionManager } from '../config/extension-manager.js'; describe('AppContainer State Management', () => { let mockConfig: Config; @@ -1573,7 +1572,9 @@ describe('AppContainer State Management', () => { call[0].includes('\x1b]0;'), ); - expect(titleWrites.filter(c => c[0].includes('\x1b]0;'))).toHaveLength(0); + expect(titleWrites.filter((c) => c[0].includes('\x1b]0;'))).toHaveLength( + 0, + ); unmount!(); }); diff --git a/packages/cli/src/ui/components/AppHeader.test.tsx b/packages/cli/src/ui/components/AppHeader.test.tsx index 3d4016afe2..9bf821febc 100644 --- a/packages/cli/src/ui/components/AppHeader.test.tsx +++ b/packages/cli/src/ui/components/AppHeader.test.tsx @@ -18,12 +18,12 @@ vi.mock('../utils/terminalSetup.js', () => ({ })); describe('', () => { - it('should render the hideBanner with default text', async () => { + it('should render the banner with default text', async () => { const mockConfig = makeFakeConfig(); const uiState = { history: [], bannerData: { - defaultText: 'This is the default hideBanner', + defaultText: 'This is the default banner', warningText: '', }, bannerVisible: true, @@ -38,17 +38,17 @@ describe('', () => { ); await waitUntilReady(); - expect(lastFrame()).toContain('This is the default hideBanner'); + expect(lastFrame()).toContain('This is the default banner'); expect(lastFrame()).toMatchSnapshot(); unmount(); }); - it('should render the hideBanner with warning text', async () => { + it('should render the banner with warning text', async () => { const mockConfig = makeFakeConfig(); const uiState = { history: [], bannerData: { - defaultText: 'This is the default hideBanner', + defaultText: 'This is the default banner', warningText: 'There are capacity issues', }, bannerVisible: true, @@ -68,7 +68,7 @@ describe('', () => { unmount(); }); - it('should not render the hideBanner when no flags are set', async () => { + it('should not render the banner when no flags are set', async () => { const mockConfig = makeFakeConfig(); const uiState = { history: [], @@ -92,12 +92,12 @@ describe('', () => { unmount(); }); - it('should not render the default hideBanner if shown count is 5 or more', async () => { + it('should not render the default banner if shown count is 5 or more', async () => { const mockConfig = makeFakeConfig(); const uiState = { history: [], bannerData: { - defaultText: 'This is the default hideBanner', + defaultText: 'This is the default banner', warningText: '', }, }; @@ -120,24 +120,24 @@ describe('', () => { ); await waitUntilReady(); - expect(lastFrame()).not.toContain('This is the default hideBanner'); + expect(lastFrame()).not.toContain('This is the default banner'); expect(lastFrame()).toMatchSnapshot(); unmount(); }); - it('should increment the version count when default hideBanner is displayed', async () => { + it('should increment the version count when default banner is displayed', async () => { const mockConfig = makeFakeConfig(); const uiState = { history: [], bannerData: { - defaultText: 'This is the default hideBanner', + defaultText: 'This is the default banner', warningText: '', }, }; - // Set hideTipsShown to 10 or more to prevent Tips from incrementing its count + // Set tipsShown to 10 or more to prevent Tips from incrementing its count // and interfering with the expected persistentState.set call. - persistentStateMock.setData({ hideTipsShown: 10 }); + persistentStateMock.setData({ tipsShown: 10 }); const { waitUntilReady, unmount } = renderWithProviders( , @@ -160,7 +160,7 @@ describe('', () => { unmount(); }); - it('should render hideBanner text with unescaped newlines', async () => { + it('should render banner text with unescaped newlines', async () => { const mockConfig = makeFakeConfig(); const uiState = { history: [], @@ -184,7 +184,7 @@ describe('', () => { unmount(); }); - it('should render Tips when hideTipsShown is less than 10', async () => { + it('should render Tips when tipsShown is less than 10', async () => { const mockConfig = makeFakeConfig(); const uiState = { history: [], @@ -195,7 +195,7 @@ describe('', () => { bannerVisible: true, }; - persistentStateMock.setData({ hideTipsShown: 5 }); + persistentStateMock.setData({ tipsShown: 5 }); const { lastFrame, waitUntilReady, unmount } = renderWithProviders( , @@ -207,14 +207,14 @@ describe('', () => { await waitUntilReady(); expect(lastFrame()).toContain('Tips'); - expect(persistentStateMock.set).toHaveBeenCalledWith('hideTipsShown', 6); + expect(persistentStateMock.set).toHaveBeenCalledWith('tipsShown', 6); unmount(); }); - it('should NOT render Tips when hideTipsShown is 10 or more', async () => { + it('should NOT render Tips when tipsShown is 10 or more', async () => { const mockConfig = makeFakeConfig(); - persistentStateMock.setData({ hideTipsShown: 10 }); + persistentStateMock.setData({ tipsShown: 10 }); const { lastFrame, waitUntilReady, unmount } = renderWithProviders( , @@ -228,8 +228,8 @@ describe('', () => { unmount(); }); - it('should show hideTips until they have been shown 10 times (persistence flow)', async () => { - persistentStateMock.setData({ hideTipsShown: 9 }); + it('should show tips until they have been shown 10 times (persistence flow)', async () => { + persistentStateMock.setData({ tipsShown: 9 }); const mockConfig = makeFakeConfig(); const uiState = { @@ -249,7 +249,7 @@ describe('', () => { await session1.waitUntilReady(); expect(session1.lastFrame()).toContain('Tips'); - expect(persistentStateMock.get('hideTipsShown')).toBe(10); + expect(persistentStateMock.get('tipsShown')).toBe(10); session1.unmount(); // Second session - state is persisted in the fake diff --git a/packages/cli/src/ui/components/__snapshots__/AppHeader.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/AppHeader.test.tsx.snap index 336c7b6ef7..324274fddd 100644 --- a/packages/cli/src/ui/components/__snapshots__/AppHeader.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/AppHeader.test.tsx.snap @@ -1,6 +1,6 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[` > should not render the default hideBanner if shown count is 5 or more 1`] = ` +exports[` > should not render the banner when no flags are set 1`] = ` " ███ █████████ ░░░███ ███░░░░░███ @@ -19,7 +19,7 @@ Tips for getting started: " `; -exports[` > should not render the hideBanner when no flags are set 1`] = ` +exports[` > should not render the default banner if shown count is 5 or more 1`] = ` " ███ █████████ ░░░███ ███░░░░░███ @@ -38,7 +38,7 @@ Tips for getting started: " `; -exports[` > should render the hideBanner with default text 1`] = ` +exports[` > should render the banner with default text 1`] = ` " ███ █████████ ░░░███ ███░░░░░███ @@ -50,7 +50,7 @@ exports[` > should render the hideBanner with default text 1`] = ` ░░░ ░░░░░░░░░ ╭──────────────────────────────────────────────────────────────────────────────────────────────────╮ -│ This is the default hideBanner │ +│ This is the default banner │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ Tips for getting started: 1. Ask questions, edit files, or run commands. @@ -60,7 +60,7 @@ Tips for getting started: " `; -exports[` > should render the hideBanner with warning text 1`] = ` +exports[` > should render the banner with warning text 1`] = ` " ███ █████████ ░░░███ ███░░░░░███ diff --git a/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap index be2dd8d9a2..1dd48b7998 100644 --- a/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/SettingsDialog.test.tsx.snap @@ -5,35 +5,36 @@ exports[`SettingsDialog > Initial Rendering > should render settings list with v │ │ │ > Settings │ │ │ +│ All │ General │ UI │ Model │ Context │ Tools │ IDE │ Security │ Experimental │ Advanced │ +│ │ +│ │ │ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ Search to filter │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ -│ ▲ │ -│ ● Vim Mode false │ +│ │ +│ General ────────────────────────────────────────────────────────────────────────────────────── │ +│ │ +│ ● Vim Mode Off │ │ Enable Vim keybindings │ │ │ -│ Default Approval Mode Default │ +│ Approval Mode Default │ │ The default approval mode for tool execution. 'default' prompts for approval, 'au… │ │ │ -│ Enable Auto Update true │ -│ Enable automatic updates. │ -│ │ -│ Enable Notifications false │ -│ Enable run-event notifications for action-required prompts and session completion. … │ +│ Auto Update Off │ +│ Disable automatic updates. │ │ │ +│ Notifications Off │ +│ Enable run-event notifications for action-required prompts and session completion. Cu… │ │ Plan Directory undefined │ │ The directory where planning artifacts are stored. If not specified, defaults t… │ │ │ -│ Plan Model Routing true │ -│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pr… │ +│ Plan Model Routing On │ +│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pro … │ │ │ │ Max Chat Model Attempts 10 │ │ Maximum number of attempts for requests to the main chat model. Cannot exceed 10. │ │ │ -│ Debug Keystroke Logging false │ -│ Enable debug logging of keystrokes to the console. │ -│ │ │ ▼ │ │ │ │ Apply To │ @@ -51,35 +52,36 @@ exports[`SettingsDialog > Snapshot Tests > should render 'accessibility settings │ │ │ > Settings │ │ │ +│ All │ General │ UI │ Model │ Context │ Tools │ IDE │ Security │ Experimental │ Advanced │ +│ │ +│ │ │ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ Search to filter │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ -│ ▲ │ -│ ● Vim Mode true* │ +│ │ +│ General ────────────────────────────────────────────────────────────────────────────────────── │ +│ │ +│ ● Vim Mode On* │ │ Enable Vim keybindings │ │ │ -│ Default Approval Mode Default │ +│ Approval Mode Default │ │ The default approval mode for tool execution. 'default' prompts for approval, 'au… │ │ │ -│ Enable Auto Update true │ -│ Enable automatic updates. │ -│ │ -│ Enable Notifications false │ -│ Enable run-event notifications for action-required prompts and session completion. … │ +│ Auto Update Off │ +│ Disable automatic updates. │ │ │ +│ Notifications Off │ +│ Enable run-event notifications for action-required prompts and session completion. Cu… │ │ Plan Directory undefined │ │ The directory where planning artifacts are stored. If not specified, defaults t… │ │ │ -│ Plan Model Routing true │ -│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pr… │ +│ Plan Model Routing On │ +│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pro … │ │ │ │ Max Chat Model Attempts 10 │ │ Maximum number of attempts for requests to the main chat model. Cannot exceed 10. │ │ │ -│ Debug Keystroke Logging false │ -│ Enable debug logging of keystrokes to the console. │ -│ │ │ ▼ │ │ │ │ Apply To │ @@ -97,35 +99,36 @@ exports[`SettingsDialog > Snapshot Tests > should render 'all boolean settings d │ │ │ > Settings │ │ │ +│ All │ General │ UI │ Model │ Context │ Tools │ IDE │ Security │ Experimental │ Advanced │ +│ │ +│ │ │ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ Search to filter │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ -│ ▲ │ -│ ● Vim Mode false* │ +│ │ +│ General ────────────────────────────────────────────────────────────────────────────────────── │ +│ │ +│ ● Vim Mode Off* │ │ Enable Vim keybindings │ │ │ -│ Default Approval Mode Default │ +│ Approval Mode Default │ │ The default approval mode for tool execution. 'default' prompts for approval, 'au… │ │ │ -│ Enable Auto Update true* │ -│ Enable automatic updates. │ -│ │ -│ Enable Notifications false │ -│ Enable run-event notifications for action-required prompts and session completion. … │ +│ Auto Update On* │ +│ Disable automatic updates. │ │ │ +│ Notifications Off │ +│ Enable run-event notifications for action-required prompts and session completion. Cu… │ │ Plan Directory undefined │ │ The directory where planning artifacts are stored. If not specified, defaults t… │ │ │ -│ Plan Model Routing true │ -│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pr… │ +│ Plan Model Routing On │ +│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pro … │ │ │ │ Max Chat Model Attempts 10 │ │ Maximum number of attempts for requests to the main chat model. Cannot exceed 10. │ │ │ -│ Debug Keystroke Logging false* │ -│ Enable debug logging of keystrokes to the console. │ -│ │ │ ▼ │ │ │ │ Apply To │ @@ -143,35 +146,36 @@ exports[`SettingsDialog > Snapshot Tests > should render 'default state' correct │ │ │ > Settings │ │ │ +│ All │ General │ UI │ Model │ Context │ Tools │ IDE │ Security │ Experimental │ Advanced │ +│ │ +│ │ │ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ Search to filter │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ -│ ▲ │ -│ ● Vim Mode false │ +│ │ +│ General ────────────────────────────────────────────────────────────────────────────────────── │ +│ │ +│ ● Vim Mode Off │ │ Enable Vim keybindings │ │ │ -│ Default Approval Mode Default │ +│ Approval Mode Default │ │ The default approval mode for tool execution. 'default' prompts for approval, 'au… │ │ │ -│ Enable Auto Update true │ -│ Enable automatic updates. │ -│ │ -│ Enable Notifications false │ -│ Enable run-event notifications for action-required prompts and session completion. … │ +│ Auto Update Off │ +│ Disable automatic updates. │ │ │ +│ Notifications Off │ +│ Enable run-event notifications for action-required prompts and session completion. Cu… │ │ Plan Directory undefined │ │ The directory where planning artifacts are stored. If not specified, defaults t… │ │ │ -│ Plan Model Routing true │ -│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pr… │ +│ Plan Model Routing On │ +│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pro … │ │ │ │ Max Chat Model Attempts 10 │ │ Maximum number of attempts for requests to the main chat model. Cannot exceed 10. │ │ │ -│ Debug Keystroke Logging false │ -│ Enable debug logging of keystrokes to the console. │ -│ │ │ ▼ │ │ │ │ Apply To │ @@ -189,35 +193,36 @@ exports[`SettingsDialog > Snapshot Tests > should render 'file filtering setting │ │ │ > Settings │ │ │ +│ All │ General │ UI │ Model │ Context │ Tools │ IDE │ Security │ Experimental │ Advanced │ +│ │ +│ │ │ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ Search to filter │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ -│ ▲ │ -│ ● Vim Mode false │ +│ │ +│ General ────────────────────────────────────────────────────────────────────────────────────── │ +│ │ +│ ● Vim Mode Off │ │ Enable Vim keybindings │ │ │ -│ Default Approval Mode Default │ +│ Approval Mode Default │ │ The default approval mode for tool execution. 'default' prompts for approval, 'au… │ │ │ -│ Enable Auto Update true │ -│ Enable automatic updates. │ -│ │ -│ Enable Notifications false │ -│ Enable run-event notifications for action-required prompts and session completion. … │ +│ Auto Update Off │ +│ Disable automatic updates. │ │ │ +│ Notifications Off │ +│ Enable run-event notifications for action-required prompts and session completion. Cu… │ │ Plan Directory undefined │ │ The directory where planning artifacts are stored. If not specified, defaults t… │ │ │ -│ Plan Model Routing true │ -│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pr… │ +│ Plan Model Routing On │ +│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pro … │ │ │ │ Max Chat Model Attempts 10 │ │ Maximum number of attempts for requests to the main chat model. Cannot exceed 10. │ │ │ -│ Debug Keystroke Logging false │ -│ Enable debug logging of keystrokes to the console. │ -│ │ │ ▼ │ │ │ │ Apply To │ @@ -235,35 +240,36 @@ exports[`SettingsDialog > Snapshot Tests > should render 'focused on scope selec │ │ │ Settings │ │ │ +│ All │ General │ UI │ Model │ Context │ Tools │ IDE │ Security │ Experimental │ Advanced │ +│ │ +│ │ │ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ Search to filter │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ -│ ▲ │ -│ Vim Mode false │ +│ │ +│ General ────────────────────────────────────────────────────────────────────────────────────── │ +│ │ +│ Vim Mode Off │ │ Enable Vim keybindings │ │ │ -│ Default Approval Mode Default │ +│ Approval Mode Default │ │ The default approval mode for tool execution. 'default' prompts for approval, 'au… │ │ │ -│ Enable Auto Update true │ -│ Enable automatic updates. │ -│ │ -│ Enable Notifications false │ -│ Enable run-event notifications for action-required prompts and session completion. … │ +│ Auto Update Off │ +│ Disable automatic updates. │ │ │ +│ Notifications Off │ +│ Enable run-event notifications for action-required prompts and session completion. Cu… │ │ Plan Directory undefined │ │ The directory where planning artifacts are stored. If not specified, defaults t… │ │ │ -│ Plan Model Routing true │ -│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pr… │ +│ Plan Model Routing On │ +│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pro … │ │ │ │ Max Chat Model Attempts 10 │ │ Maximum number of attempts for requests to the main chat model. Cannot exceed 10. │ │ │ -│ Debug Keystroke Logging false │ -│ Enable debug logging of keystrokes to the console. │ -│ │ │ ▼ │ │ │ │ > Apply To │ @@ -281,35 +287,36 @@ exports[`SettingsDialog > Snapshot Tests > should render 'mixed boolean and numb │ │ │ > Settings │ │ │ +│ All │ General │ UI │ Model │ Context │ Tools │ IDE │ Security │ Experimental │ Advanced │ +│ │ +│ │ │ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ Search to filter │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ -│ ▲ │ -│ ● Vim Mode false* │ +│ │ +│ General ────────────────────────────────────────────────────────────────────────────────────── │ +│ │ +│ ● Vim Mode Off* │ │ Enable Vim keybindings │ │ │ -│ Default Approval Mode Default │ +│ Approval Mode Default │ │ The default approval mode for tool execution. 'default' prompts for approval, 'au… │ │ │ -│ Enable Auto Update false* │ -│ Enable automatic updates. │ -│ │ -│ Enable Notifications false │ -│ Enable run-event notifications for action-required prompts and session completion. … │ +│ Auto Update Off* │ +│ Disable automatic updates. │ │ │ +│ Notifications Off │ +│ Enable run-event notifications for action-required prompts and session completion. Cu… │ │ Plan Directory undefined │ │ The directory where planning artifacts are stored. If not specified, defaults t… │ │ │ -│ Plan Model Routing true │ -│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pr… │ +│ Plan Model Routing On │ +│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pro … │ │ │ │ Max Chat Model Attempts 10 │ │ Maximum number of attempts for requests to the main chat model. Cannot exceed 10. │ │ │ -│ Debug Keystroke Logging false │ -│ Enable debug logging of keystrokes to the console. │ -│ │ │ ▼ │ │ │ │ Apply To │ @@ -327,35 +334,36 @@ exports[`SettingsDialog > Snapshot Tests > should render 'tools and security set │ │ │ > Settings │ │ │ +│ All │ General │ UI │ Model │ Context │ Tools │ IDE │ Security │ Experimental │ Advanced │ +│ │ +│ │ │ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ Search to filter │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ -│ ▲ │ -│ ● Vim Mode false │ +│ │ +│ General ────────────────────────────────────────────────────────────────────────────────────── │ +│ │ +│ ● Vim Mode Off │ │ Enable Vim keybindings │ │ │ -│ Default Approval Mode Default │ +│ Approval Mode Default │ │ The default approval mode for tool execution. 'default' prompts for approval, 'au… │ │ │ -│ Enable Auto Update true │ -│ Enable automatic updates. │ -│ │ -│ Enable Notifications false │ -│ Enable run-event notifications for action-required prompts and session completion. … │ +│ Auto Update Off │ +│ Disable automatic updates. │ │ │ +│ Notifications Off │ +│ Enable run-event notifications for action-required prompts and session completion. Cu… │ │ Plan Directory undefined │ │ The directory where planning artifacts are stored. If not specified, defaults t… │ │ │ -│ Plan Model Routing true │ -│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pr… │ +│ Plan Model Routing On │ +│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pro … │ │ │ │ Max Chat Model Attempts 10 │ │ Maximum number of attempts for requests to the main chat model. Cannot exceed 10. │ │ │ -│ Debug Keystroke Logging false │ -│ Enable debug logging of keystrokes to the console. │ -│ │ │ ▼ │ │ │ │ Apply To │ @@ -373,35 +381,36 @@ exports[`SettingsDialog > Snapshot Tests > should render 'various boolean settin │ │ │ > Settings │ │ │ +│ All │ General │ UI │ Model │ Context │ Tools │ IDE │ Security │ Experimental │ Advanced │ +│ │ +│ │ │ ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ │ │ Search to filter │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │ │ │ -│ ▲ │ -│ ● Vim Mode true* │ +│ │ +│ General ────────────────────────────────────────────────────────────────────────────────────── │ +│ │ +│ ● Vim Mode On* │ │ Enable Vim keybindings │ │ │ -│ Default Approval Mode Default │ +│ Approval Mode Default │ │ The default approval mode for tool execution. 'default' prompts for approval, 'au… │ │ │ -│ Enable Auto Update false* │ -│ Enable automatic updates. │ -│ │ -│ Enable Notifications false │ -│ Enable run-event notifications for action-required prompts and session completion. … │ +│ Auto Update Off* │ +│ Disable automatic updates. │ │ │ +│ Notifications Off │ +│ Enable run-event notifications for action-required prompts and session completion. Cu… │ │ Plan Directory undefined │ │ The directory where planning artifacts are stored. If not specified, defaults t… │ │ │ -│ Plan Model Routing true │ -│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pr… │ +│ Plan Model Routing On │ +│ Automatically switch between Pro and Flash models based on Plan Mode status. Uses Pro … │ │ │ │ Max Chat Model Attempts 10 │ │ Maximum number of attempts for requests to the main chat model. Cannot exceed 10. │ │ │ -│ Debug Keystroke Logging true* │ -│ Enable debug logging of keystrokes to the console. │ -│ │ │ ▼ │ │ │ │ Apply To │ diff --git a/packages/cli/src/ui/hooks/useTips.test.ts b/packages/cli/src/ui/hooks/useTips.test.ts index a512889b2f..bb15204e0c 100644 --- a/packages/cli/src/ui/hooks/useTips.test.ts +++ b/packages/cli/src/ui/hooks/useTips.test.ts @@ -21,27 +21,27 @@ describe('useTips()', () => { expect(result.current.showTips).toBe(true); - expect(persistentStateMock.set).toHaveBeenCalledWith('hideTipsShown', 1); - expect(persistentStateMock.get('hideTipsShown')).toBe(1); + expect(persistentStateMock.set).toHaveBeenCalledWith('tipsShown', 1); + expect(persistentStateMock.get('tipsShown')).toBe(1); }); it('should return false and call set(6) if state is 5', () => { - persistentStateMock.setData({ hideTipsShown: 5 }); + persistentStateMock.setData({ tipsShown: 5 }); const { result } = renderHookWithProviders(() => useTips()); expect(result.current.showTips).toBe(true); - expect(persistentStateMock.get('hideTipsShown')).toBe(6); + expect(persistentStateMock.get('tipsShown')).toBe(6); }); it('should return true if state is 10', () => { - persistentStateMock.setData({ hideTipsShown: 10 }); + persistentStateMock.setData({ tipsShown: 10 }); const { result } = renderHookWithProviders(() => useTips()); expect(result.current.showTips).toBe(false); expect(persistentStateMock.set).not.toHaveBeenCalled(); - expect(persistentStateMock.get('hideTipsShown')).toBe(10); + expect(persistentStateMock.get('tipsShown')).toBe(10); }); }); diff --git a/packages/cli/src/ui/hooks/useTips.ts b/packages/cli/src/ui/hooks/useTips.ts index c394033ff4..75fe8bb096 100644 --- a/packages/cli/src/ui/hooks/useTips.ts +++ b/packages/cli/src/ui/hooks/useTips.ts @@ -12,17 +12,15 @@ interface UseTipsResult { } export function useTips(): UseTipsResult { - const [hideTipsCount] = useState( - () => persistentState.get('hideTipsShown') ?? 0, - ); + const [tipsCount] = useState(() => persistentState.get('tipsShown') ?? 0); - const showTips = hideTipsCount < 10; + const showTips = tipsCount < 10; useEffect(() => { if (showTips) { - persistentState.set('hideTipsShown', hideTipsCount + 1); + persistentState.set('tipsShown', tipsCount + 1); } - }, [hideTipsCount, showTips]); + }, [tipsCount, showTips]); return { showTips }; }