@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
|
@@ -104,76 +104,42 @@ describe('Settings Loading and Merging', () => {
|
|
|
104
104
|
expect(settings.workspace.settings).toEqual({});
|
|
105
105
|
expect(settings.merged).toEqual({});
|
|
106
106
|
});
|
|
107
|
-
it(
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
});
|
|
131
|
-
it('should load user settings if only user file exists', () => {
|
|
132
|
-
const expectedUserSettingsPath = USER_SETTINGS_PATH; // Use the path actually resolved by the (mocked) module
|
|
133
|
-
mockFsExistsSync.mockImplementation((p) => p === expectedUserSettingsPath);
|
|
134
|
-
const userSettingsContent = {
|
|
135
|
-
ui: {
|
|
136
|
-
theme: 'dark',
|
|
137
|
-
},
|
|
138
|
-
context: {
|
|
139
|
-
fileName: 'USER_CONTEXT.md',
|
|
107
|
+
it.each([
|
|
108
|
+
{
|
|
109
|
+
scope: 'system',
|
|
110
|
+
path: getSystemSettingsPath(),
|
|
111
|
+
content: {
|
|
112
|
+
ui: { theme: 'system-default' },
|
|
113
|
+
tools: { sandbox: false },
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
scope: 'user',
|
|
118
|
+
path: USER_SETTINGS_PATH,
|
|
119
|
+
content: {
|
|
120
|
+
ui: { theme: 'dark' },
|
|
121
|
+
context: { fileName: 'USER_CONTEXT.md' },
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
scope: 'workspace',
|
|
126
|
+
path: MOCK_WORKSPACE_SETTINGS_PATH,
|
|
127
|
+
content: {
|
|
128
|
+
tools: { sandbox: true },
|
|
129
|
+
context: { fileName: 'WORKSPACE_CONTEXT.md' },
|
|
140
130
|
},
|
|
141
|
-
}
|
|
131
|
+
},
|
|
132
|
+
])('should load $scope settings if only $scope file exists', ({ scope, path, content }) => {
|
|
133
|
+
mockFsExistsSync.mockImplementation((p) => p === path);
|
|
142
134
|
fs.readFileSync.mockImplementation((p) => {
|
|
143
|
-
if (p ===
|
|
144
|
-
return JSON.stringify(
|
|
135
|
+
if (p === path)
|
|
136
|
+
return JSON.stringify(content);
|
|
145
137
|
return '{}';
|
|
146
138
|
});
|
|
147
139
|
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
148
|
-
expect(fs.readFileSync).toHaveBeenCalledWith(
|
|
149
|
-
expect(settings.
|
|
150
|
-
expect(settings.
|
|
151
|
-
expect(settings.merged).toEqual({
|
|
152
|
-
...userSettingsContent,
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
it('should load workspace settings if only workspace file exists', () => {
|
|
156
|
-
mockFsExistsSync.mockImplementation((p) => p === MOCK_WORKSPACE_SETTINGS_PATH);
|
|
157
|
-
const workspaceSettingsContent = {
|
|
158
|
-
tools: {
|
|
159
|
-
sandbox: true,
|
|
160
|
-
},
|
|
161
|
-
context: {
|
|
162
|
-
fileName: 'WORKSPACE_CONTEXT.md',
|
|
163
|
-
},
|
|
164
|
-
};
|
|
165
|
-
fs.readFileSync.mockImplementation((p) => {
|
|
166
|
-
if (p === MOCK_WORKSPACE_SETTINGS_PATH)
|
|
167
|
-
return JSON.stringify(workspaceSettingsContent);
|
|
168
|
-
return '';
|
|
169
|
-
});
|
|
170
|
-
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
171
|
-
expect(fs.readFileSync).toHaveBeenCalledWith(MOCK_WORKSPACE_SETTINGS_PATH, 'utf-8');
|
|
172
|
-
expect(settings.user.settings).toEqual({});
|
|
173
|
-
expect(settings.workspace.settings).toEqual(workspaceSettingsContent);
|
|
174
|
-
expect(settings.merged).toEqual({
|
|
175
|
-
...workspaceSettingsContent,
|
|
176
|
-
});
|
|
140
|
+
expect(fs.readFileSync).toHaveBeenCalledWith(path, 'utf-8');
|
|
141
|
+
expect(settings[scope].settings).toEqual(content);
|
|
142
|
+
expect(settings.merged).toEqual(content);
|
|
177
143
|
});
|
|
178
144
|
it('should merge system, user and workspace settings, with system taking precedence over workspace, and workspace over user', () => {
|
|
179
145
|
mockFsExistsSync.mockImplementation((p) => p === getSystemSettingsPath() ||
|
|
@@ -523,64 +489,55 @@ describe('Settings Loading and Merging', () => {
|
|
|
523
489
|
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
524
490
|
expect(settings.merged.security?.disableYoloMode).toBe(true); // System setting should be used
|
|
525
491
|
});
|
|
526
|
-
it(
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
492
|
+
it.each([
|
|
493
|
+
{
|
|
494
|
+
description: 'contextFileName in user settings',
|
|
495
|
+
path: USER_SETTINGS_PATH,
|
|
496
|
+
content: { context: { fileName: 'CUSTOM.md' } },
|
|
497
|
+
expected: { key: 'context.fileName', value: 'CUSTOM.md' },
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
description: 'contextFileName in workspace settings',
|
|
501
|
+
path: MOCK_WORKSPACE_SETTINGS_PATH,
|
|
502
|
+
content: { context: { fileName: 'PROJECT_SPECIFIC.md' } },
|
|
503
|
+
expected: { key: 'context.fileName', value: 'PROJECT_SPECIFIC.md' },
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
description: 'excludedProjectEnvVars in user settings',
|
|
507
|
+
path: USER_SETTINGS_PATH,
|
|
508
|
+
content: {
|
|
509
|
+
advanced: { excludedEnvVars: ['DEBUG', 'NODE_ENV', 'CUSTOM_VAR'] },
|
|
510
|
+
},
|
|
511
|
+
expected: {
|
|
512
|
+
key: 'advanced.excludedEnvVars',
|
|
513
|
+
value: ['DEBUG', 'NODE_ENV', 'CUSTOM_VAR'],
|
|
514
|
+
},
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
description: 'excludedProjectEnvVars in workspace settings',
|
|
518
|
+
path: MOCK_WORKSPACE_SETTINGS_PATH,
|
|
519
|
+
content: {
|
|
520
|
+
advanced: { excludedEnvVars: ['WORKSPACE_DEBUG', 'WORKSPACE_VAR'] },
|
|
521
|
+
},
|
|
522
|
+
expected: {
|
|
523
|
+
key: 'advanced.excludedEnvVars',
|
|
524
|
+
value: ['WORKSPACE_DEBUG', 'WORKSPACE_VAR'],
|
|
525
|
+
},
|
|
526
|
+
},
|
|
527
|
+
])('should handle $description correctly', ({ path, content, expected }) => {
|
|
528
|
+
mockFsExistsSync.mockImplementation((p) => p === path);
|
|
542
529
|
fs.readFileSync.mockImplementation((p) => {
|
|
543
|
-
if (p ===
|
|
544
|
-
return JSON.stringify(
|
|
545
|
-
return '';
|
|
546
|
-
});
|
|
547
|
-
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
548
|
-
expect(settings.merged.context?.fileName).toBe('PROJECT_SPECIFIC.md');
|
|
549
|
-
});
|
|
550
|
-
it('should handle excludedProjectEnvVars correctly when only in user settings', () => {
|
|
551
|
-
mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
|
|
552
|
-
const userSettingsContent = {
|
|
553
|
-
general: {},
|
|
554
|
-
advanced: { excludedEnvVars: ['DEBUG', 'NODE_ENV', 'CUSTOM_VAR'] },
|
|
555
|
-
};
|
|
556
|
-
fs.readFileSync.mockImplementation((p) => {
|
|
557
|
-
if (p === USER_SETTINGS_PATH)
|
|
558
|
-
return JSON.stringify(userSettingsContent);
|
|
559
|
-
return '';
|
|
560
|
-
});
|
|
561
|
-
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
562
|
-
expect(settings.merged.advanced?.excludedEnvVars).toEqual([
|
|
563
|
-
'DEBUG',
|
|
564
|
-
'NODE_ENV',
|
|
565
|
-
'CUSTOM_VAR',
|
|
566
|
-
]);
|
|
567
|
-
});
|
|
568
|
-
it('should handle excludedProjectEnvVars correctly when only in workspace settings', () => {
|
|
569
|
-
mockFsExistsSync.mockImplementation((p) => p === MOCK_WORKSPACE_SETTINGS_PATH);
|
|
570
|
-
const workspaceSettingsContent = {
|
|
571
|
-
general: {},
|
|
572
|
-
advanced: { excludedEnvVars: ['WORKSPACE_DEBUG', 'WORKSPACE_VAR'] },
|
|
573
|
-
};
|
|
574
|
-
fs.readFileSync.mockImplementation((p) => {
|
|
575
|
-
if (p === MOCK_WORKSPACE_SETTINGS_PATH)
|
|
576
|
-
return JSON.stringify(workspaceSettingsContent);
|
|
577
|
-
return '';
|
|
530
|
+
if (p === path)
|
|
531
|
+
return JSON.stringify(content);
|
|
532
|
+
return '{}';
|
|
578
533
|
});
|
|
579
534
|
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
535
|
+
const keys = expected.key.split('.');
|
|
536
|
+
let result = settings.merged;
|
|
537
|
+
for (const key of keys) {
|
|
538
|
+
result = result[key];
|
|
539
|
+
}
|
|
540
|
+
expect(result).toEqual(expected.value);
|
|
584
541
|
});
|
|
585
542
|
it('should merge excludedProjectEnvVars with workspace taking precedence over user', () => {
|
|
586
543
|
mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH || p === MOCK_WORKSPACE_SETTINGS_PATH);
|
|
@@ -631,27 +588,28 @@ describe('Settings Loading and Merging', () => {
|
|
|
631
588
|
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
632
589
|
expect(settings.merged.context?.fileName).toBeUndefined();
|
|
633
590
|
});
|
|
634
|
-
it(
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
591
|
+
it.each([
|
|
592
|
+
{
|
|
593
|
+
scope: 'user',
|
|
594
|
+
path: USER_SETTINGS_PATH,
|
|
595
|
+
content: { telemetry: { enabled: true } },
|
|
596
|
+
expected: true,
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
scope: 'workspace',
|
|
600
|
+
path: MOCK_WORKSPACE_SETTINGS_PATH,
|
|
601
|
+
content: { telemetry: { enabled: false } },
|
|
602
|
+
expected: false,
|
|
603
|
+
},
|
|
604
|
+
])('should load telemetry setting from $scope settings', ({ path, content, expected }) => {
|
|
605
|
+
mockFsExistsSync.mockImplementation((p) => p === path);
|
|
648
606
|
fs.readFileSync.mockImplementation((p) => {
|
|
649
|
-
if (p ===
|
|
650
|
-
return JSON.stringify(
|
|
607
|
+
if (p === path)
|
|
608
|
+
return JSON.stringify(content);
|
|
651
609
|
return '{}';
|
|
652
610
|
});
|
|
653
611
|
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
654
|
-
expect(settings.merged.telemetry?.enabled).toBe(
|
|
612
|
+
expect(settings.merged.telemetry?.enabled).toBe(expected);
|
|
655
613
|
});
|
|
656
614
|
it('should prioritize workspace telemetry setting over user setting', () => {
|
|
657
615
|
mockFsExistsSync.mockReturnValue(true);
|
|
@@ -730,51 +688,52 @@ describe('Settings Loading and Merging', () => {
|
|
|
730
688
|
},
|
|
731
689
|
});
|
|
732
690
|
});
|
|
733
|
-
it(
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
691
|
+
it.each([
|
|
692
|
+
{
|
|
693
|
+
scope: 'user',
|
|
694
|
+
path: USER_SETTINGS_PATH,
|
|
695
|
+
content: {
|
|
696
|
+
mcpServers: {
|
|
697
|
+
'user-only-server': {
|
|
698
|
+
command: 'user-only-command',
|
|
699
|
+
description: 'User only server',
|
|
700
|
+
},
|
|
701
|
+
},
|
|
702
|
+
},
|
|
703
|
+
expected: {
|
|
737
704
|
'user-only-server': {
|
|
738
705
|
command: 'user-only-command',
|
|
739
706
|
description: 'User only server',
|
|
740
707
|
},
|
|
741
708
|
},
|
|
742
|
-
}
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
scope: 'workspace',
|
|
712
|
+
path: MOCK_WORKSPACE_SETTINGS_PATH,
|
|
713
|
+
content: {
|
|
714
|
+
mcpServers: {
|
|
715
|
+
'workspace-only-server': {
|
|
716
|
+
command: 'workspace-only-command',
|
|
717
|
+
description: 'Workspace only server',
|
|
718
|
+
},
|
|
719
|
+
},
|
|
753
720
|
},
|
|
754
|
-
|
|
755
|
-
});
|
|
756
|
-
it('should handle MCP servers when only in workspace settings', () => {
|
|
757
|
-
mockFsExistsSync.mockImplementation((p) => p === MOCK_WORKSPACE_SETTINGS_PATH);
|
|
758
|
-
const workspaceSettingsContent = {
|
|
759
|
-
mcpServers: {
|
|
721
|
+
expected: {
|
|
760
722
|
'workspace-only-server': {
|
|
761
723
|
command: 'workspace-only-command',
|
|
762
724
|
description: 'Workspace only server',
|
|
763
725
|
},
|
|
764
726
|
},
|
|
765
|
-
}
|
|
727
|
+
},
|
|
728
|
+
])('should handle MCP servers when only in $scope settings', ({ path, content, expected }) => {
|
|
729
|
+
mockFsExistsSync.mockImplementation((p) => p === path);
|
|
766
730
|
fs.readFileSync.mockImplementation((p) => {
|
|
767
|
-
if (p ===
|
|
768
|
-
return JSON.stringify(
|
|
769
|
-
return '';
|
|
731
|
+
if (p === path)
|
|
732
|
+
return JSON.stringify(content);
|
|
733
|
+
return '{}';
|
|
770
734
|
});
|
|
771
735
|
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
772
|
-
expect(settings.merged.mcpServers).toEqual(
|
|
773
|
-
'workspace-only-server': {
|
|
774
|
-
command: 'workspace-only-command',
|
|
775
|
-
description: 'Workspace only server',
|
|
776
|
-
},
|
|
777
|
-
});
|
|
736
|
+
expect(settings.merged.mcpServers).toEqual(expected);
|
|
778
737
|
});
|
|
779
738
|
it('should have mcpServers as undefined if not in any settings file', () => {
|
|
780
739
|
mockFsExistsSync.mockReturnValue(false); // No settings files exist
|
|
@@ -877,65 +836,44 @@ describe('Settings Loading and Merging', () => {
|
|
|
877
836
|
excluded: ['workspace-excluded'],
|
|
878
837
|
});
|
|
879
838
|
});
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
}
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
918
|
-
expect(settings.merged.output?.format).toBe('json');
|
|
919
|
-
});
|
|
920
|
-
it('should handle compressionThreshold when only in user settings', () => {
|
|
921
|
-
mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
|
|
922
|
-
const userSettingsContent = {
|
|
923
|
-
general: {},
|
|
924
|
-
model: { compressionThreshold: 0.5 },
|
|
925
|
-
};
|
|
926
|
-
fs.readFileSync.mockImplementation((p) => {
|
|
927
|
-
if (p === USER_SETTINGS_PATH)
|
|
928
|
-
return JSON.stringify(userSettingsContent);
|
|
929
|
-
return '{}';
|
|
839
|
+
describe('compressionThreshold settings', () => {
|
|
840
|
+
it.each([
|
|
841
|
+
{
|
|
842
|
+
description: 'should be taken from user settings if only present there',
|
|
843
|
+
userContent: { model: { compressionThreshold: 0.5 } },
|
|
844
|
+
workspaceContent: {},
|
|
845
|
+
expected: 0.5,
|
|
846
|
+
},
|
|
847
|
+
{
|
|
848
|
+
description: 'should be taken from workspace settings if only present there',
|
|
849
|
+
userContent: {},
|
|
850
|
+
workspaceContent: { model: { compressionThreshold: 0.8 } },
|
|
851
|
+
expected: 0.8,
|
|
852
|
+
},
|
|
853
|
+
{
|
|
854
|
+
description: 'should prioritize workspace settings over user settings',
|
|
855
|
+
userContent: { model: { compressionThreshold: 0.5 } },
|
|
856
|
+
workspaceContent: { model: { compressionThreshold: 0.8 } },
|
|
857
|
+
expected: 0.8,
|
|
858
|
+
},
|
|
859
|
+
{
|
|
860
|
+
description: 'should be undefined if not in any settings file',
|
|
861
|
+
userContent: {},
|
|
862
|
+
workspaceContent: {},
|
|
863
|
+
expected: undefined,
|
|
864
|
+
},
|
|
865
|
+
])('$description', ({ userContent, workspaceContent, expected }) => {
|
|
866
|
+
mockFsExistsSync.mockReturnValue(true);
|
|
867
|
+
fs.readFileSync.mockImplementation((p) => {
|
|
868
|
+
if (p === USER_SETTINGS_PATH)
|
|
869
|
+
return JSON.stringify(userContent);
|
|
870
|
+
if (p === MOCK_WORKSPACE_SETTINGS_PATH)
|
|
871
|
+
return JSON.stringify(workspaceContent);
|
|
872
|
+
return '{}';
|
|
873
|
+
});
|
|
874
|
+
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
875
|
+
expect(settings.merged.model?.compressionThreshold).toEqual(expected);
|
|
930
876
|
});
|
|
931
|
-
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
932
|
-
expect(settings.merged.model?.compressionThreshold).toEqual(0.5);
|
|
933
|
-
});
|
|
934
|
-
it('should have model as undefined if not in any settings file', () => {
|
|
935
|
-
mockFsExistsSync.mockReturnValue(false); // No settings files exist
|
|
936
|
-
fs.readFileSync.mockReturnValue('{}');
|
|
937
|
-
const settings = loadSettings(MOCK_WORKSPACE_DIR);
|
|
938
|
-
expect(settings.merged.model).toBeUndefined();
|
|
939
877
|
});
|
|
940
878
|
it('should use user compressionThreshold if workspace does not define it', () => {
|
|
941
879
|
mockFsExistsSync.mockReturnValue(true);
|