@google/gemini-cli 0.19.0-nightly.20251121.5982abeff → 0.19.0-nightly.20251123.dadd606c0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/google-gemini-cli-0.19.0-nightly.20251122.42c2e1b21.tgz +0 -0
- package/dist/index.js +8 -6
- package/dist/index.js.map +1 -1
- package/dist/package.json +3 -3
- package/dist/src/commands/extensions/disable.js +2 -0
- package/dist/src/commands/extensions/disable.js.map +1 -1
- package/dist/src/commands/extensions/disable.test.js +3 -0
- package/dist/src/commands/extensions/disable.test.js.map +1 -1
- package/dist/src/commands/extensions/enable.js +2 -0
- package/dist/src/commands/extensions/enable.js.map +1 -1
- package/dist/src/commands/extensions/enable.test.js +3 -0
- package/dist/src/commands/extensions/enable.test.js.map +1 -1
- package/dist/src/commands/extensions/install.js +2 -0
- package/dist/src/commands/extensions/install.js.map +1 -1
- package/dist/src/commands/extensions/install.test.js +3 -0
- package/dist/src/commands/extensions/install.test.js.map +1 -1
- package/dist/src/commands/extensions/link.js +2 -0
- package/dist/src/commands/extensions/link.js.map +1 -1
- package/dist/src/commands/extensions/link.test.js +3 -0
- package/dist/src/commands/extensions/link.test.js.map +1 -1
- package/dist/src/commands/extensions/list.js +2 -0
- package/dist/src/commands/extensions/list.js.map +1 -1
- package/dist/src/commands/extensions/list.test.js +3 -0
- package/dist/src/commands/extensions/list.test.js.map +1 -1
- package/dist/src/commands/extensions/new.js +2 -0
- package/dist/src/commands/extensions/new.js.map +1 -1
- package/dist/src/commands/extensions/new.test.js +3 -0
- package/dist/src/commands/extensions/new.test.js.map +1 -1
- package/dist/src/commands/extensions/uninstall.js +2 -0
- package/dist/src/commands/extensions/uninstall.js.map +1 -1
- package/dist/src/commands/extensions/uninstall.test.js +3 -0
- package/dist/src/commands/extensions/uninstall.test.js.map +1 -1
- package/dist/src/commands/extensions/update.js +2 -0
- package/dist/src/commands/extensions/update.js.map +1 -1
- package/dist/src/commands/extensions/update.test.js +3 -0
- package/dist/src/commands/extensions/update.test.js.map +1 -1
- package/dist/src/commands/extensions/validate.js +2 -0
- package/dist/src/commands/extensions/validate.js.map +1 -1
- package/dist/src/commands/extensions/validate.test.js +3 -0
- package/dist/src/commands/extensions/validate.test.js.map +1 -1
- package/dist/src/commands/extensions.js +2 -0
- package/dist/src/commands/extensions.js.map +1 -1
- package/dist/src/commands/mcp/add.js +2 -0
- package/dist/src/commands/mcp/add.js.map +1 -1
- package/dist/src/commands/mcp/add.test.js +3 -0
- package/dist/src/commands/mcp/add.test.js.map +1 -1
- package/dist/src/commands/mcp/list.js +2 -0
- package/dist/src/commands/mcp/list.js.map +1 -1
- package/dist/src/commands/mcp/list.test.js +3 -0
- package/dist/src/commands/mcp/list.test.js.map +1 -1
- package/dist/src/commands/mcp/remove.js +2 -0
- package/dist/src/commands/mcp/remove.js.map +1 -1
- package/dist/src/commands/mcp/remove.test.js +3 -0
- package/dist/src/commands/mcp/remove.test.js.map +1 -1
- package/dist/src/commands/mcp.js +2 -0
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/mcp.test.js +1 -0
- package/dist/src/commands/mcp.test.js.map +1 -1
- package/dist/src/commands/utils.d.ts +6 -0
- package/dist/src/commands/utils.js +11 -0
- package/dist/src/commands/utils.js.map +1 -0
- package/dist/src/config/auth.js +4 -0
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/auth.test.js +61 -37
- package/dist/src/config/auth.test.js.map +1 -1
- package/dist/src/config/config.integration.test.js +81 -198
- package/dist/src/config/config.integration.test.js.map +1 -1
- package/dist/src/config/config.js +2 -15
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +196 -299
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/extension.test.js +109 -133
- package/dist/src/config/extension.test.js.map +1 -1
- package/dist/src/config/extensions/consent.test.d.ts +6 -0
- package/dist/src/config/extensions/consent.test.js +152 -0
- package/dist/src/config/extensions/consent.test.js.map +1 -0
- package/dist/src/config/extensions/extensionEnablement.test.js +82 -15
- package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -1
- package/dist/src/config/extensions/extensionSettings.test.js +105 -1
- package/dist/src/config/extensions/extensionSettings.test.js.map +1 -1
- package/dist/src/config/extensions/github.d.ts +1 -0
- package/dist/src/config/extensions/github.js +1 -1
- package/dist/src/config/extensions/github.js.map +1 -1
- package/dist/src/config/extensions/github.test.js +197 -318
- package/dist/src/config/extensions/github.test.js.map +1 -1
- package/dist/src/config/extensions/storage.test.d.ts +6 -0
- package/dist/src/config/extensions/storage.test.js +64 -0
- package/dist/src/config/extensions/storage.test.js.map +1 -0
- package/dist/src/config/extensions/update.test.js +154 -263
- package/dist/src/config/extensions/update.test.js.map +1 -1
- package/dist/src/config/extensions/variables.test.js +87 -1
- package/dist/src/config/extensions/variables.test.js.map +1 -1
- package/dist/src/config/sandboxConfig.d.ts +1 -1
- package/dist/src/config/sandboxConfig.js.map +1 -1
- package/dist/src/config/sandboxConfig.test.d.ts +6 -0
- package/dist/src/config/sandboxConfig.test.js +178 -0
- package/dist/src/config/sandboxConfig.test.js.map +1 -0
- package/dist/src/config/settingPaths.test.d.ts +6 -0
- package/dist/src/config/settingPaths.test.js +22 -0
- package/dist/src/config/settingPaths.test.js.map +1 -0
- package/dist/src/config/settings.test.js +164 -226
- package/dist/src/config/settings.test.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +10 -10
- package/dist/src/config/settingsSchema.js +10 -10
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/settingsSchema.test.js +0 -6
- package/dist/src/config/settingsSchema.test.js.map +1 -1
- package/dist/src/gemini.d.ts +2 -1
- package/dist/src/gemini.js +6 -7
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +5 -0
- package/dist/src/gemini.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/services/BuiltinCommandLoader.js +1 -1
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.test.js +0 -22
- package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
- package/dist/src/test-utils/mockCommandContext.js +1 -1
- package/dist/src/test-utils/render.js +1 -1
- package/dist/src/test-utils/render.js.map +1 -1
- package/dist/src/ui/AppContainer.js +13 -11
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/AppContainer.test.js +3 -6
- package/dist/src/ui/AppContainer.test.js.map +1 -1
- package/dist/src/ui/auth/AuthDialog.js +17 -10
- package/dist/src/ui/auth/AuthDialog.js.map +1 -1
- package/dist/src/ui/auth/AuthDialog.test.js +5 -2
- package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
- package/dist/src/ui/components/AboutBox.test.d.ts +6 -0
- package/dist/src/ui/components/AboutBox.test.js +53 -0
- package/dist/src/ui/components/AboutBox.test.js.map +1 -0
- package/dist/src/ui/components/AutoAcceptIndicator.test.d.ts +6 -0
- package/dist/src/ui/components/AutoAcceptIndicator.test.js +31 -0
- package/dist/src/ui/components/AutoAcceptIndicator.test.js.map +1 -0
- package/dist/src/ui/components/Banner.test.d.ts +6 -0
- package/dist/src/ui/components/Banner.test.js +24 -0
- package/dist/src/ui/components/Banner.test.js.map +1 -0
- package/dist/src/ui/components/ConfigInitDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/ConfigInitDisplay.test.js +103 -0
- package/dist/src/ui/components/ConfigInitDisplay.test.js.map +1 -0
- package/dist/src/ui/components/ConsoleSummaryDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/ConsoleSummaryDisplay.test.js +26 -0
- package/dist/src/ui/components/ConsoleSummaryDisplay.test.js.map +1 -0
- package/dist/src/ui/components/ContextUsageDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/ContextUsageDisplay.test.js +39 -0
- package/dist/src/ui/components/ContextUsageDisplay.test.js.map +1 -0
- package/dist/src/ui/components/CopyModeWarning.test.d.ts +6 -0
- package/dist/src/ui/components/CopyModeWarning.test.js +33 -0
- package/dist/src/ui/components/CopyModeWarning.test.js.map +1 -0
- package/dist/src/ui/components/DebugProfiler.js +1 -1
- package/dist/src/ui/components/DebugProfiler.js.map +1 -1
- package/dist/src/ui/components/DebugProfiler.test.js +46 -1
- package/dist/src/ui/components/DebugProfiler.test.js.map +1 -1
- package/dist/src/ui/components/DetailedMessagesDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/DetailedMessagesDisplay.test.js +49 -0
- package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +1 -0
- package/dist/src/ui/components/DialogManager.js +6 -1
- package/dist/src/ui/components/DialogManager.js.map +1 -1
- package/dist/src/ui/components/DialogManager.test.d.ts +6 -0
- package/dist/src/ui/components/DialogManager.test.js +167 -0
- package/dist/src/ui/components/DialogManager.test.js.map +1 -0
- package/dist/src/ui/components/EditorSettingsDialog.test.d.ts +6 -0
- package/dist/src/ui/components/EditorSettingsDialog.test.js +111 -0
- package/dist/src/ui/components/EditorSettingsDialog.test.js.map +1 -0
- package/dist/src/ui/components/ExitWarning.test.d.ts +6 -0
- package/dist/src/ui/components/ExitWarning.test.js +54 -0
- package/dist/src/ui/components/ExitWarning.test.js.map +1 -0
- package/dist/src/ui/components/GeminiRespondingSpinner.test.d.ts +6 -0
- package/dist/src/ui/components/GeminiRespondingSpinner.test.js +58 -0
- package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +1 -0
- package/dist/src/ui/components/InputPrompt.js +1 -1
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/LoadingIndicator.js +6 -1
- package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
- package/dist/src/ui/components/MainContent.test.d.ts +6 -0
- package/dist/src/ui/components/MainContent.test.js +73 -0
- package/dist/src/ui/components/MainContent.test.js.map +1 -0
- package/dist/src/ui/components/MemoryUsageDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/MemoryUsageDisplay.test.js +49 -0
- package/dist/src/ui/components/MemoryUsageDisplay.test.js.map +1 -0
- package/dist/src/ui/components/ModelDialog.test.js +1 -1
- package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
- package/dist/src/ui/components/Notifications.js +5 -3
- package/dist/src/ui/components/Notifications.js.map +1 -1
- package/dist/src/ui/components/Notifications.test.d.ts +6 -0
- package/dist/src/ui/components/Notifications.test.js +153 -0
- package/dist/src/ui/components/Notifications.test.js.map +1 -0
- package/dist/src/ui/components/QuittingDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/QuittingDisplay.test.js +49 -0
- package/dist/src/ui/components/QuittingDisplay.test.js.map +1 -0
- package/dist/src/ui/components/RawMarkdownIndicator.test.d.ts +6 -0
- package/dist/src/ui/components/RawMarkdownIndicator.test.js +34 -0
- package/dist/src/ui/components/RawMarkdownIndicator.test.js.map +1 -0
- package/dist/src/ui/components/SessionBrowser.d.ts +98 -0
- package/dist/src/ui/components/SessionBrowser.js +457 -0
- package/dist/src/ui/components/SessionBrowser.js.map +1 -0
- package/dist/src/ui/components/SessionBrowser.test.d.ts +6 -0
- package/dist/src/ui/components/SessionBrowser.test.js +239 -0
- package/dist/src/ui/components/SessionBrowser.test.js.map +1 -0
- package/dist/src/ui/components/ShellInputPrompt.test.d.ts +6 -0
- package/dist/src/ui/components/ShellInputPrompt.test.js +82 -0
- package/dist/src/ui/components/ShellInputPrompt.test.js.map +1 -0
- package/dist/src/ui/components/ShellModeIndicator.test.d.ts +6 -0
- package/dist/src/ui/components/ShellModeIndicator.test.js +17 -0
- package/dist/src/ui/components/ShellModeIndicator.test.js.map +1 -0
- package/dist/src/ui/components/ShowMoreLines.test.d.ts +6 -0
- package/dist/src/ui/components/ShowMoreLines.test.js +40 -0
- package/dist/src/ui/components/ShowMoreLines.test.js.map +1 -0
- package/dist/src/ui/components/SuggestionsDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/SuggestionsDisplay.test.js +56 -0
- package/dist/src/ui/components/SuggestionsDisplay.test.js.map +1 -0
- package/dist/src/ui/components/ThemedGradient.test.d.ts +6 -0
- package/dist/src/ui/components/ThemedGradient.test.js +30 -0
- package/dist/src/ui/components/ThemedGradient.test.js.map +1 -0
- package/dist/src/ui/components/Tips.test.d.ts +6 -0
- package/dist/src/ui/components/Tips.test.js +23 -0
- package/dist/src/ui/components/Tips.test.js.map +1 -0
- package/dist/src/ui/components/UpdateNotification.test.d.ts +6 -0
- package/dist/src/ui/components/UpdateNotification.test.js +16 -0
- package/dist/src/ui/components/UpdateNotification.test.js.map +1 -0
- package/dist/src/ui/components/messages/ErrorMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ErrorMessage.test.js +23 -0
- package/dist/src/ui/components/messages/ErrorMessage.test.js.map +1 -0
- package/dist/src/ui/components/messages/InfoMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/InfoMessage.test.js +28 -0
- package/dist/src/ui/components/messages/InfoMessage.test.js.map +1 -0
- package/dist/src/ui/components/messages/ShellToolMessage.js +2 -2
- package/dist/src/ui/components/messages/ShellToolMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +5 -6
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessage.d.ts +5 -0
- package/dist/src/ui/components/messages/ToolMessage.js +32 -3
- package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessage.test.js +13 -21
- package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolResultDisplay.js +1 -1
- package/dist/src/ui/components/messages/ToolResultDisplay.js.map +1 -1
- package/dist/src/ui/components/messages/ToolResultDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolResultDisplay.test.js +96 -0
- package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +1 -0
- package/dist/src/ui/components/messages/UserMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/UserMessage.test.js +32 -0
- package/dist/src/ui/components/messages/UserMessage.test.js.map +1 -0
- package/dist/src/ui/components/messages/WarningMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/WarningMessage.test.js +23 -0
- package/dist/src/ui/components/messages/WarningMessage.test.js.map +1 -0
- package/dist/src/ui/constants.d.ts +1 -0
- package/dist/src/ui/constants.js +1 -0
- package/dist/src/ui/constants.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -0
- package/dist/src/ui/hooks/shellCommandProcessor.js +3 -1
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAlternateBuffer.js +1 -1
- package/dist/src/ui/hooks/useAlternateBuffer.js.map +1 -1
- package/dist/src/ui/hooks/useBracketedPaste.js +3 -5
- package/dist/src/ui/hooks/useBracketedPaste.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -0
- package/dist/src/ui/hooks/useGeminiStream.js +6 -4
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.test.js +1 -1
- package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
- package/dist/src/ui/hooks/useInactivityTimer.d.ts +14 -0
- package/dist/src/ui/hooks/useInactivityTimer.js +30 -0
- package/dist/src/ui/hooks/useInactivityTimer.js.map +1 -0
- package/dist/src/ui/hooks/useLoadingIndicator.d.ts +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.js +2 -2
- package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.test.js +16 -5
- package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
- package/dist/src/ui/hooks/usePhraseCycler.d.ts +4 -1
- package/dist/src/ui/hooks/usePhraseCycler.js +52 -43
- package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
- package/dist/src/ui/hooks/usePhraseCycler.test.js +52 -3
- package/dist/src/ui/hooks/usePhraseCycler.test.js.map +1 -1
- package/dist/src/ui/hooks/useReactToolScheduler.d.ts +2 -1
- package/dist/src/ui/hooks/useReactToolScheduler.js +3 -0
- package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
- package/dist/src/ui/hooks/useSessionBrowser.d.ts +18 -1
- package/dist/src/ui/hooks/useSessionBrowser.js +59 -0
- package/dist/src/ui/hooks/useSessionBrowser.js.map +1 -1
- package/dist/src/ui/hooks/useSessionBrowser.test.js +154 -526
- package/dist/src/ui/hooks/useSessionBrowser.test.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.test.js +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
- package/dist/src/ui/hooks/useToolScheduler.test.js +1 -1
- package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.d.ts +6 -0
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js +121 -0
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js.map +1 -0
- package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.d.ts +6 -0
- package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js +34 -0
- package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js.map +1 -0
- package/dist/src/ui/privacy/GeminiPrivacyNotice.test.d.ts +6 -0
- package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js +34 -0
- package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js.map +1 -0
- package/dist/src/ui/privacy/PrivacyNotice.test.d.ts +6 -0
- package/dist/src/ui/privacy/PrivacyNotice.test.js +62 -0
- package/dist/src/ui/privacy/PrivacyNotice.test.js.map +1 -0
- package/dist/src/ui/types.js +1 -1
- package/dist/src/ui/utils/bracketedPaste.d.ts +7 -0
- package/dist/src/ui/utils/bracketedPaste.js +15 -0
- package/dist/src/ui/utils/bracketedPaste.js.map +1 -0
- package/dist/src/ui/utils/kittyProtocolDetector.js +3 -4
- package/dist/src/ui/utils/kittyProtocolDetector.js.map +1 -1
- package/dist/src/ui/utils/mouse.d.ts +2 -2
- package/dist/src/ui/utils/mouse.js +2 -11
- package/dist/src/ui/utils/mouse.js.map +1 -1
- package/dist/src/utils/sessionCleanup.test.js +38 -0
- package/dist/src/utils/sessionCleanup.test.js.map +1 -1
- package/dist/src/utils/sessionUtils.d.ts +49 -4
- package/dist/src/utils/sessionUtils.js +100 -25
- package/dist/src/utils/sessionUtils.js.map +1 -1
- package/dist/src/utils/sessionUtils.test.js +46 -3
- package/dist/src/utils/sessionUtils.test.js.map +1 -1
- package/dist/src/utils/sessions.js +4 -1
- package/dist/src/utils/sessions.js.map +1 -1
- package/dist/src/utils/sessions.test.js +42 -0
- package/dist/src/utils/sessions.test.js.map +1 -1
- package/dist/src/zed-integration/connection.test.d.ts +6 -0
- package/dist/src/zed-integration/connection.test.js +175 -0
- package/dist/src/zed-integration/connection.test.js.map +1 -0
- package/dist/src/zed-integration/fileSystemService.test.d.ts +6 -0
- package/dist/src/zed-integration/fileSystemService.test.js +98 -0
- package/dist/src/zed-integration/fileSystemService.test.js.map +1 -0
- package/dist/src/zed-integration/zedIntegration.d.ts +31 -1
- package/dist/src/zed-integration/zedIntegration.js +5 -2
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/src/zed-integration/zedIntegration.test.d.ts +6 -0
- package/dist/src/zed-integration/zedIntegration.test.js +619 -0
- package/dist/src/zed-integration/zedIntegration.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/dist/google-gemini-cli-0.19.0-nightly.20251120.8e531dc02.tgz +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2025 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
import { render } from '../../test-utils/render.js';
|
|
8
|
+
import { DetailedMessagesDisplay } from './DetailedMessagesDisplay.js';
|
|
9
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
10
|
+
import { Box } from 'ink';
|
|
11
|
+
vi.mock('./shared/ScrollableList.js', () => ({
|
|
12
|
+
ScrollableList: ({ data, renderItem, }) => (_jsx(Box, { flexDirection: "column", children: data.map((item, index) => (_jsx(Box, { children: renderItem({ item }) }, index))) })),
|
|
13
|
+
}));
|
|
14
|
+
describe('DetailedMessagesDisplay', () => {
|
|
15
|
+
it('renders nothing when messages are empty', () => {
|
|
16
|
+
const { lastFrame } = render(_jsx(DetailedMessagesDisplay, { messages: [], maxHeight: 10, width: 80, hasFocus: false }));
|
|
17
|
+
expect(lastFrame()).toBe('');
|
|
18
|
+
});
|
|
19
|
+
it('renders messages correctly', () => {
|
|
20
|
+
const messages = [
|
|
21
|
+
{ type: 'log', content: 'Log message', count: 1 },
|
|
22
|
+
{ type: 'warn', content: 'Warning message', count: 1 },
|
|
23
|
+
{ type: 'error', content: 'Error message', count: 1 },
|
|
24
|
+
{ type: 'debug', content: 'Debug message', count: 1 },
|
|
25
|
+
];
|
|
26
|
+
const { lastFrame } = render(_jsx(DetailedMessagesDisplay, { messages: messages, maxHeight: 20, width: 80, hasFocus: true }));
|
|
27
|
+
const output = lastFrame();
|
|
28
|
+
expect(output).toContain('Debug Console');
|
|
29
|
+
expect(output).toContain('Log message');
|
|
30
|
+
expect(output).toContain('Warning message');
|
|
31
|
+
expect(output).toContain('Error message');
|
|
32
|
+
expect(output).toContain('Debug message');
|
|
33
|
+
// Check for icons
|
|
34
|
+
expect(output).toContain('ℹ');
|
|
35
|
+
expect(output).toContain('⚠');
|
|
36
|
+
expect(output).toContain('✖');
|
|
37
|
+
expect(output).toContain('🔍');
|
|
38
|
+
});
|
|
39
|
+
it('renders message counts', () => {
|
|
40
|
+
const messages = [
|
|
41
|
+
{ type: 'log', content: 'Repeated message', count: 5 },
|
|
42
|
+
];
|
|
43
|
+
const { lastFrame } = render(_jsx(DetailedMessagesDisplay, { messages: messages, maxHeight: 10, width: 80, hasFocus: false }));
|
|
44
|
+
const output = lastFrame();
|
|
45
|
+
expect(output).toContain('Repeated message');
|
|
46
|
+
expect(output).toContain('(x5)');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=DetailedMessagesDisplay.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailedMessagesDisplay.test.js","sourceRoot":"","sources":["../../../../src/ui/components/DetailedMessagesDisplay.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,8 @@ import { ApiAuthDialog } from '../auth/ApiAuthDialog.js';
|
|
|
18
18
|
import { EditorSettingsDialog } from './EditorSettingsDialog.js';
|
|
19
19
|
import { PrivacyNotice } from '../privacy/PrivacyNotice.js';
|
|
20
20
|
import { ProQuotaDialog } from './ProQuotaDialog.js';
|
|
21
|
+
import { runExitCleanup } from '../../utils/cleanup.js';
|
|
22
|
+
import { RELAUNCH_EXIT_CODE } from '../../utils/processUtils.js';
|
|
21
23
|
import { PermissionsModifyTrustDialog } from './PermissionsModifyTrustDialog.js';
|
|
22
24
|
import { ModelDialog } from './ModelDialog.js';
|
|
23
25
|
import { theme } from '../semantic-colors.js';
|
|
@@ -64,7 +66,10 @@ export const DialogManager = ({ addItem, terminalWidth, }) => {
|
|
|
64
66
|
return (_jsxs(Box, { flexDirection: "column", children: [uiState.themeError && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: theme.status.error, children: uiState.themeError }) })), _jsx(ThemeDialog, { onSelect: uiActions.handleThemeSelect, onCancel: uiActions.closeThemeDialog, onHighlight: uiActions.handleThemeHighlight, settings: settings, availableTerminalHeight: constrainHeight ? terminalHeight - staticExtraHeight : undefined, terminalWidth: mainAreaWidth })] }));
|
|
65
67
|
}
|
|
66
68
|
if (uiState.isSettingsDialogOpen) {
|
|
67
|
-
return (_jsx(Box, { flexDirection: "column", children: _jsx(SettingsDialog, { settings: settings, onSelect: () => uiActions.closeSettingsDialog(), onRestartRequest: () =>
|
|
69
|
+
return (_jsx(Box, { flexDirection: "column", children: _jsx(SettingsDialog, { settings: settings, onSelect: () => uiActions.closeSettingsDialog(), onRestartRequest: async () => {
|
|
70
|
+
await runExitCleanup();
|
|
71
|
+
process.exit(RELAUNCH_EXIT_CODE);
|
|
72
|
+
}, availableTerminalHeight: terminalHeight - staticExtraHeight, config: config }) }));
|
|
68
73
|
}
|
|
69
74
|
if (uiState.isModelDialogOpen) {
|
|
70
75
|
return _jsx(ModelDialog, { onClose: uiActions.closeModelDialog });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogManager.js","sourceRoot":"","sources":["../../../../src/ui/components/DialogManager.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DialogManager.js","sourceRoot":"","sources":["../../../../src/ui/components/DialogManager.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2025 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
import { renderWithProviders } from '../../test-utils/render.js';
|
|
8
|
+
import { DialogManager } from './DialogManager.js';
|
|
9
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
10
|
+
import { Text } from 'ink';
|
|
11
|
+
import {} from '../contexts/UIStateContext.js';
|
|
12
|
+
import {} from '../hooks/useIdeTrustListener.js';
|
|
13
|
+
import {} from '@google/gemini-cli-core';
|
|
14
|
+
import {} from '../types.js';
|
|
15
|
+
// Mock child components
|
|
16
|
+
vi.mock('../IdeIntegrationNudge.js', () => ({
|
|
17
|
+
IdeIntegrationNudge: () => _jsx(Text, { children: "IdeIntegrationNudge" }),
|
|
18
|
+
}));
|
|
19
|
+
vi.mock('./LoopDetectionConfirmation.js', () => ({
|
|
20
|
+
LoopDetectionConfirmation: () => _jsx(Text, { children: "LoopDetectionConfirmation" }),
|
|
21
|
+
}));
|
|
22
|
+
vi.mock('./FolderTrustDialog.js', () => ({
|
|
23
|
+
FolderTrustDialog: () => _jsx(Text, { children: "FolderTrustDialog" }),
|
|
24
|
+
}));
|
|
25
|
+
vi.mock('./ShellConfirmationDialog.js', () => ({
|
|
26
|
+
ShellConfirmationDialog: () => _jsx(Text, { children: "ShellConfirmationDialog" }),
|
|
27
|
+
}));
|
|
28
|
+
vi.mock('./ConsentPrompt.js', () => ({
|
|
29
|
+
ConsentPrompt: () => _jsx(Text, { children: "ConsentPrompt" }),
|
|
30
|
+
}));
|
|
31
|
+
vi.mock('./ThemeDialog.js', () => ({
|
|
32
|
+
ThemeDialog: () => _jsx(Text, { children: "ThemeDialog" }),
|
|
33
|
+
}));
|
|
34
|
+
vi.mock('./SettingsDialog.js', () => ({
|
|
35
|
+
SettingsDialog: () => _jsx(Text, { children: "SettingsDialog" }),
|
|
36
|
+
}));
|
|
37
|
+
vi.mock('../auth/AuthInProgress.js', () => ({
|
|
38
|
+
AuthInProgress: () => _jsx(Text, { children: "AuthInProgress" }),
|
|
39
|
+
}));
|
|
40
|
+
vi.mock('../auth/AuthDialog.js', () => ({
|
|
41
|
+
AuthDialog: () => _jsx(Text, { children: "AuthDialog" }),
|
|
42
|
+
}));
|
|
43
|
+
vi.mock('../auth/ApiAuthDialog.js', () => ({
|
|
44
|
+
ApiAuthDialog: () => _jsx(Text, { children: "ApiAuthDialog" }),
|
|
45
|
+
}));
|
|
46
|
+
vi.mock('./EditorSettingsDialog.js', () => ({
|
|
47
|
+
EditorSettingsDialog: () => _jsx(Text, { children: "EditorSettingsDialog" }),
|
|
48
|
+
}));
|
|
49
|
+
vi.mock('../privacy/PrivacyNotice.js', () => ({
|
|
50
|
+
PrivacyNotice: () => _jsx(Text, { children: "PrivacyNotice" }),
|
|
51
|
+
}));
|
|
52
|
+
vi.mock('./ProQuotaDialog.js', () => ({
|
|
53
|
+
ProQuotaDialog: () => _jsx(Text, { children: "ProQuotaDialog" }),
|
|
54
|
+
}));
|
|
55
|
+
vi.mock('./PermissionsModifyTrustDialog.js', () => ({
|
|
56
|
+
PermissionsModifyTrustDialog: () => _jsx(Text, { children: "PermissionsModifyTrustDialog" }),
|
|
57
|
+
}));
|
|
58
|
+
vi.mock('./ModelDialog.js', () => ({
|
|
59
|
+
ModelDialog: () => _jsx(Text, { children: "ModelDialog" }),
|
|
60
|
+
}));
|
|
61
|
+
vi.mock('./IdeTrustChangeDialog.js', () => ({
|
|
62
|
+
IdeTrustChangeDialog: () => _jsx(Text, { children: "IdeTrustChangeDialog" }),
|
|
63
|
+
}));
|
|
64
|
+
describe('DialogManager', () => {
|
|
65
|
+
const defaultProps = {
|
|
66
|
+
addItem: vi.fn(),
|
|
67
|
+
terminalWidth: 100,
|
|
68
|
+
};
|
|
69
|
+
const baseUiState = {
|
|
70
|
+
constrainHeight: false,
|
|
71
|
+
terminalHeight: 24,
|
|
72
|
+
staticExtraHeight: 0,
|
|
73
|
+
mainAreaWidth: 80,
|
|
74
|
+
confirmUpdateExtensionRequests: [],
|
|
75
|
+
showIdeRestartPrompt: false,
|
|
76
|
+
proQuotaRequest: null,
|
|
77
|
+
shouldShowIdePrompt: false,
|
|
78
|
+
isFolderTrustDialogOpen: false,
|
|
79
|
+
shellConfirmationRequest: null,
|
|
80
|
+
loopDetectionConfirmationRequest: null,
|
|
81
|
+
confirmationRequest: null,
|
|
82
|
+
isThemeDialogOpen: false,
|
|
83
|
+
isSettingsDialogOpen: false,
|
|
84
|
+
isModelDialogOpen: false,
|
|
85
|
+
isAuthenticating: false,
|
|
86
|
+
isAwaitingApiKeyInput: false,
|
|
87
|
+
isAuthDialogOpen: false,
|
|
88
|
+
isEditorDialogOpen: false,
|
|
89
|
+
showPrivacyNotice: false,
|
|
90
|
+
isPermissionsDialogOpen: false,
|
|
91
|
+
};
|
|
92
|
+
it('renders nothing by default', () => {
|
|
93
|
+
const { lastFrame } = renderWithProviders(_jsx(DialogManager, { ...defaultProps }),
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
95
|
+
{ uiState: baseUiState });
|
|
96
|
+
expect(lastFrame()).toBe('');
|
|
97
|
+
});
|
|
98
|
+
const testCases = [
|
|
99
|
+
[
|
|
100
|
+
{
|
|
101
|
+
showIdeRestartPrompt: true,
|
|
102
|
+
ideTrustRestartReason: 'update',
|
|
103
|
+
},
|
|
104
|
+
'IdeTrustChangeDialog',
|
|
105
|
+
],
|
|
106
|
+
[
|
|
107
|
+
{
|
|
108
|
+
proQuotaRequest: {
|
|
109
|
+
failedModel: 'a',
|
|
110
|
+
fallbackModel: 'b',
|
|
111
|
+
message: 'c',
|
|
112
|
+
isTerminalQuotaError: false,
|
|
113
|
+
resolve: vi.fn(),
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
'ProQuotaDialog',
|
|
117
|
+
],
|
|
118
|
+
[
|
|
119
|
+
{
|
|
120
|
+
shouldShowIdePrompt: true,
|
|
121
|
+
currentIDE: { name: 'vscode', version: '1.0' },
|
|
122
|
+
},
|
|
123
|
+
'IdeIntegrationNudge',
|
|
124
|
+
],
|
|
125
|
+
[{ isFolderTrustDialogOpen: true }, 'FolderTrustDialog'],
|
|
126
|
+
[
|
|
127
|
+
{
|
|
128
|
+
shellConfirmationRequest: {
|
|
129
|
+
commands: [],
|
|
130
|
+
onConfirm: vi.fn(),
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
'ShellConfirmationDialog',
|
|
134
|
+
],
|
|
135
|
+
[
|
|
136
|
+
{ loopDetectionConfirmationRequest: { onComplete: vi.fn() } },
|
|
137
|
+
'LoopDetectionConfirmation',
|
|
138
|
+
],
|
|
139
|
+
[
|
|
140
|
+
{ confirmationRequest: { prompt: 'foo', onConfirm: vi.fn() } },
|
|
141
|
+
'ConsentPrompt',
|
|
142
|
+
],
|
|
143
|
+
[
|
|
144
|
+
{
|
|
145
|
+
confirmUpdateExtensionRequests: [{ prompt: 'foo', onConfirm: vi.fn() }],
|
|
146
|
+
},
|
|
147
|
+
'ConsentPrompt',
|
|
148
|
+
],
|
|
149
|
+
[{ isThemeDialogOpen: true }, 'ThemeDialog'],
|
|
150
|
+
[{ isSettingsDialogOpen: true }, 'SettingsDialog'],
|
|
151
|
+
[{ isModelDialogOpen: true }, 'ModelDialog'],
|
|
152
|
+
[{ isAuthenticating: true }, 'AuthInProgress'],
|
|
153
|
+
[{ isAwaitingApiKeyInput: true }, 'ApiAuthDialog'],
|
|
154
|
+
[{ isAuthDialogOpen: true }, 'AuthDialog'],
|
|
155
|
+
[{ isEditorDialogOpen: true }, 'EditorSettingsDialog'],
|
|
156
|
+
[{ showPrivacyNotice: true }, 'PrivacyNotice'],
|
|
157
|
+
[{ isPermissionsDialogOpen: true }, 'PermissionsModifyTrustDialog'],
|
|
158
|
+
];
|
|
159
|
+
it.each(testCases)('renders %s when state is %o', (uiStateOverride, expectedComponent) => {
|
|
160
|
+
const { lastFrame } = renderWithProviders(_jsx(DialogManager, { ...defaultProps }), {
|
|
161
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
162
|
+
uiState: { ...baseUiState, ...uiStateOverride },
|
|
163
|
+
});
|
|
164
|
+
expect(lastFrame()).toContain(expectedComponent);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=DialogManager.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DialogManager.test.js","sourceRoot":"","sources":["../../../../src/ui/components/DialogManager.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2025 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
import { render } from '../../test-utils/render.js';
|
|
8
|
+
import { EditorSettingsDialog } from './EditorSettingsDialog.js';
|
|
9
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
10
|
+
import { SettingScope } from '../../config/settings.js';
|
|
11
|
+
import { KeypressProvider } from '../contexts/KeypressContext.js';
|
|
12
|
+
import { act } from 'react';
|
|
13
|
+
import { waitFor } from '../../test-utils/async.js';
|
|
14
|
+
// Mock editorSettingsManager
|
|
15
|
+
vi.mock('../editors/editorSettingsManager.js', () => ({
|
|
16
|
+
editorSettingsManager: {
|
|
17
|
+
getAvailableEditorDisplays: () => [
|
|
18
|
+
{ name: 'VS Code', type: 'vscode', disabled: false },
|
|
19
|
+
{ name: 'Vim', type: 'vim', disabled: false },
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
}));
|
|
23
|
+
describe('EditorSettingsDialog', () => {
|
|
24
|
+
const mockSettings = {
|
|
25
|
+
forScope: (scope) => ({
|
|
26
|
+
settings: {
|
|
27
|
+
general: {
|
|
28
|
+
preferredEditor: scope === SettingScope.User ? 'vscode' : undefined,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
merged: {
|
|
33
|
+
general: {
|
|
34
|
+
preferredEditor: 'vscode',
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
beforeEach(() => {
|
|
39
|
+
vi.clearAllMocks();
|
|
40
|
+
});
|
|
41
|
+
const renderWithProvider = (ui) => render(_jsx(KeypressProvider, { children: ui }));
|
|
42
|
+
it('renders correctly', () => {
|
|
43
|
+
const { lastFrame } = renderWithProvider(_jsx(EditorSettingsDialog, { onSelect: vi.fn(), settings: mockSettings, onExit: vi.fn() }));
|
|
44
|
+
expect(lastFrame()).toMatchSnapshot();
|
|
45
|
+
});
|
|
46
|
+
it('calls onSelect when an editor is selected', () => {
|
|
47
|
+
const onSelect = vi.fn();
|
|
48
|
+
const { lastFrame } = renderWithProvider(_jsx(EditorSettingsDialog, { onSelect: onSelect, settings: mockSettings, onExit: vi.fn() }));
|
|
49
|
+
expect(lastFrame()).toContain('VS Code');
|
|
50
|
+
});
|
|
51
|
+
it('switches focus between editor and scope sections on Tab', async () => {
|
|
52
|
+
const { lastFrame, stdin } = renderWithProvider(_jsx(EditorSettingsDialog, { onSelect: vi.fn(), settings: mockSettings, onExit: vi.fn() }));
|
|
53
|
+
// Initial focus on editor
|
|
54
|
+
expect(lastFrame()).toContain('> Select Editor');
|
|
55
|
+
expect(lastFrame()).not.toContain('> Apply To');
|
|
56
|
+
// Press Tab
|
|
57
|
+
await act(async () => {
|
|
58
|
+
stdin.write('\t');
|
|
59
|
+
});
|
|
60
|
+
// Focus should be on scope
|
|
61
|
+
await waitFor(() => {
|
|
62
|
+
const frame = lastFrame() || '';
|
|
63
|
+
if (!frame.includes('> Apply To')) {
|
|
64
|
+
console.log('Waiting for scope focus. Current frame:', JSON.stringify(frame));
|
|
65
|
+
}
|
|
66
|
+
expect(frame).toContain('> Apply To');
|
|
67
|
+
});
|
|
68
|
+
expect(lastFrame()).toContain(' Select Editor');
|
|
69
|
+
// Press Tab again
|
|
70
|
+
await act(async () => {
|
|
71
|
+
stdin.write('\t');
|
|
72
|
+
});
|
|
73
|
+
// Focus should be back on editor
|
|
74
|
+
await waitFor(() => {
|
|
75
|
+
expect(lastFrame()).toContain('> Select Editor');
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
it('calls onExit when Escape is pressed', async () => {
|
|
79
|
+
const onExit = vi.fn();
|
|
80
|
+
const { stdin } = renderWithProvider(_jsx(EditorSettingsDialog, { onSelect: vi.fn(), settings: mockSettings, onExit: onExit }));
|
|
81
|
+
await act(async () => {
|
|
82
|
+
stdin.write('\u001B'); // Escape
|
|
83
|
+
});
|
|
84
|
+
await waitFor(() => {
|
|
85
|
+
expect(onExit).toHaveBeenCalled();
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
it('shows modified message when setting exists in other scope', () => {
|
|
89
|
+
const settingsWithOtherScope = {
|
|
90
|
+
forScope: (_scope) => ({
|
|
91
|
+
settings: {
|
|
92
|
+
general: {
|
|
93
|
+
preferredEditor: 'vscode', // Both scopes have it set
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
}),
|
|
97
|
+
merged: {
|
|
98
|
+
general: {
|
|
99
|
+
preferredEditor: 'vscode',
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
const { lastFrame } = renderWithProvider(_jsx(EditorSettingsDialog, { onSelect: vi.fn(), settings: settingsWithOtherScope, onExit: vi.fn() }));
|
|
104
|
+
const frame = lastFrame() || '';
|
|
105
|
+
if (!frame.includes('(Also modified')) {
|
|
106
|
+
console.log('Modified message test failure. Frame:', JSON.stringify(frame));
|
|
107
|
+
}
|
|
108
|
+
expect(frame).toContain('(Also modified');
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=EditorSettingsDialog.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditorSettingsDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/EditorSettingsDialog.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2025 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
import { render } from '../../test-utils/render.js';
|
|
8
|
+
import { ExitWarning } from './ExitWarning.js';
|
|
9
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
10
|
+
import { useUIState } from '../contexts/UIStateContext.js';
|
|
11
|
+
vi.mock('../contexts/UIStateContext.js');
|
|
12
|
+
describe('ExitWarning', () => {
|
|
13
|
+
const mockUseUIState = vi.mocked(useUIState);
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
vi.clearAllMocks();
|
|
16
|
+
});
|
|
17
|
+
it('renders nothing by default', () => {
|
|
18
|
+
mockUseUIState.mockReturnValue({
|
|
19
|
+
dialogsVisible: false,
|
|
20
|
+
ctrlCPressedOnce: false,
|
|
21
|
+
ctrlDPressedOnce: false,
|
|
22
|
+
});
|
|
23
|
+
const { lastFrame } = render(_jsx(ExitWarning, {}));
|
|
24
|
+
expect(lastFrame()).toBe('');
|
|
25
|
+
});
|
|
26
|
+
it('renders Ctrl+C warning when pressed once and dialogs visible', () => {
|
|
27
|
+
mockUseUIState.mockReturnValue({
|
|
28
|
+
dialogsVisible: true,
|
|
29
|
+
ctrlCPressedOnce: true,
|
|
30
|
+
ctrlDPressedOnce: false,
|
|
31
|
+
});
|
|
32
|
+
const { lastFrame } = render(_jsx(ExitWarning, {}));
|
|
33
|
+
expect(lastFrame()).toContain('Press Ctrl+C again to exit');
|
|
34
|
+
});
|
|
35
|
+
it('renders Ctrl+D warning when pressed once and dialogs visible', () => {
|
|
36
|
+
mockUseUIState.mockReturnValue({
|
|
37
|
+
dialogsVisible: true,
|
|
38
|
+
ctrlCPressedOnce: false,
|
|
39
|
+
ctrlDPressedOnce: true,
|
|
40
|
+
});
|
|
41
|
+
const { lastFrame } = render(_jsx(ExitWarning, {}));
|
|
42
|
+
expect(lastFrame()).toContain('Press Ctrl+D again to exit');
|
|
43
|
+
});
|
|
44
|
+
it('renders nothing if dialogs are not visible', () => {
|
|
45
|
+
mockUseUIState.mockReturnValue({
|
|
46
|
+
dialogsVisible: false,
|
|
47
|
+
ctrlCPressedOnce: true,
|
|
48
|
+
ctrlDPressedOnce: true,
|
|
49
|
+
});
|
|
50
|
+
const { lastFrame } = render(_jsx(ExitWarning, {}));
|
|
51
|
+
expect(lastFrame()).toBe('');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=ExitWarning.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExitWarning.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ExitWarning.test.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAgB,MAAM,+BAA+B,CAAC;AAEzE,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;AAEzC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE7C,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,cAAc,CAAC,eAAe,CAAC;YAC7B,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;SACF,CAAC,CAAC;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,WAAW,KAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,cAAc,CAAC,eAAe,CAAC;YAC7B,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,KAAK;SACF,CAAC,CAAC;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,WAAW,KAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,cAAc,CAAC,eAAe,CAAC;YAC7B,cAAc,EAAE,IAAI;YACpB,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,IAAI;SACD,CAAC,CAAC;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,WAAW,KAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,cAAc,CAAC,eAAe,CAAC;YAC7B,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,IAAI;SACD,CAAC,CAAC;QACzB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAC,WAAW,KAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2025 Google LLC
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
import { render } from '../../test-utils/render.js';
|
|
8
|
+
import { GeminiRespondingSpinner } from './GeminiRespondingSpinner.js';
|
|
9
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
10
|
+
import { useStreamingContext } from '../contexts/StreamingContext.js';
|
|
11
|
+
import { useIsScreenReaderEnabled } from 'ink';
|
|
12
|
+
import { StreamingState } from '../types.js';
|
|
13
|
+
import { SCREEN_READER_LOADING, SCREEN_READER_RESPONDING, } from '../textConstants.js';
|
|
14
|
+
vi.mock('../contexts/StreamingContext.js');
|
|
15
|
+
vi.mock('ink', async () => {
|
|
16
|
+
const actual = await vi.importActual('ink');
|
|
17
|
+
return {
|
|
18
|
+
...actual,
|
|
19
|
+
useIsScreenReaderEnabled: vi.fn(),
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
describe('GeminiRespondingSpinner', () => {
|
|
23
|
+
const mockUseStreamingContext = vi.mocked(useStreamingContext);
|
|
24
|
+
const mockUseIsScreenReaderEnabled = vi.mocked(useIsScreenReaderEnabled);
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
vi.clearAllMocks();
|
|
27
|
+
mockUseIsScreenReaderEnabled.mockReturnValue(false);
|
|
28
|
+
});
|
|
29
|
+
it('renders spinner when responding', () => {
|
|
30
|
+
mockUseStreamingContext.mockReturnValue(StreamingState.Responding);
|
|
31
|
+
const { lastFrame } = render(_jsx(GeminiRespondingSpinner, {}));
|
|
32
|
+
// Spinner output varies, but it shouldn't be empty
|
|
33
|
+
expect(lastFrame()).not.toBe('');
|
|
34
|
+
});
|
|
35
|
+
it('renders screen reader text when responding and screen reader enabled', () => {
|
|
36
|
+
mockUseStreamingContext.mockReturnValue(StreamingState.Responding);
|
|
37
|
+
mockUseIsScreenReaderEnabled.mockReturnValue(true);
|
|
38
|
+
const { lastFrame } = render(_jsx(GeminiRespondingSpinner, {}));
|
|
39
|
+
expect(lastFrame()).toContain(SCREEN_READER_RESPONDING);
|
|
40
|
+
});
|
|
41
|
+
it('renders nothing when not responding and no non-responding display', () => {
|
|
42
|
+
mockUseStreamingContext.mockReturnValue(StreamingState.Idle);
|
|
43
|
+
const { lastFrame } = render(_jsx(GeminiRespondingSpinner, {}));
|
|
44
|
+
expect(lastFrame()).toBe('');
|
|
45
|
+
});
|
|
46
|
+
it('renders non-responding display when provided', () => {
|
|
47
|
+
mockUseStreamingContext.mockReturnValue(StreamingState.Idle);
|
|
48
|
+
const { lastFrame } = render(_jsx(GeminiRespondingSpinner, { nonRespondingDisplay: "Waiting..." }));
|
|
49
|
+
expect(lastFrame()).toContain('Waiting...');
|
|
50
|
+
});
|
|
51
|
+
it('renders screen reader loading text when non-responding display provided and screen reader enabled', () => {
|
|
52
|
+
mockUseStreamingContext.mockReturnValue(StreamingState.Idle);
|
|
53
|
+
mockUseIsScreenReaderEnabled.mockReturnValue(true);
|
|
54
|
+
const { lastFrame } = render(_jsx(GeminiRespondingSpinner, { nonRespondingDisplay: "Waiting..." }));
|
|
55
|
+
expect(lastFrame()).toContain(SCREEN_READER_LOADING);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=GeminiRespondingSpinner.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeminiRespondingSpinner.test.js","sourceRoot":"","sources":["../../../../src/ui/components/GeminiRespondingSpinner.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -507,7 +507,7 @@ export const InputPrompt = ({ buffer, onSubmit, userMessages, onClearScreen, con
|
|
|
507
507
|
// newline that was part of the paste.
|
|
508
508
|
// This has the added benefit that in the worst case at least users
|
|
509
509
|
// get some feedback that their keypress was handled rather than
|
|
510
|
-
// wondering why it was
|
|
510
|
+
// wondering why it was completely ignored.
|
|
511
511
|
buffer.newline();
|
|
512
512
|
return;
|
|
513
513
|
}
|