@vybestack/llxprt-code 0.1.20 → 0.1.21
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/README.md +31 -0
- package/dist/package.json +3 -3
- package/dist/src/config/auth.test.d.ts +6 -0
- package/dist/src/config/auth.test.js +57 -0
- package/dist/src/config/auth.test.js.map +1 -0
- package/dist/src/config/config.d.ts +1 -1
- package/dist/src/config/config.js +27 -14
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/keyBindings.js +2 -2
- package/dist/src/config/keyBindings.test.d.ts +6 -0
- package/dist/src/config/keyBindings.test.js +51 -0
- package/dist/src/config/keyBindings.test.js.map +1 -0
- package/dist/src/config/logging/loggingConfig.test.d.ts +6 -0
- package/dist/src/config/logging/loggingConfig.test.js +363 -0
- package/dist/src/config/logging/loggingConfig.test.js.map +1 -0
- package/dist/src/config/settingsSchema.d.ts +0 -9
- package/dist/src/config/settingsSchema.js +0 -9
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/settingsSchema.test.d.ts +6 -0
- package/dist/src/config/settingsSchema.test.js +195 -0
- package/dist/src/config/settingsSchema.test.js.map +1 -0
- package/dist/src/config/trustedFolders.test.d.ts +6 -0
- package/dist/src/config/trustedFolders.test.js +156 -0
- package/dist/src/config/trustedFolders.test.js.map +1 -0
- package/dist/src/gemini.js +14 -4
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.d.ts +6 -0
- package/dist/src/gemini.test.js +199 -0
- package/dist/src/gemini.test.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/integration-tests/base-url-behavior.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/base-url-behavior.integration.test.js +492 -0
- package/dist/src/integration-tests/base-url-behavior.integration.test.js.map +1 -0
- package/dist/src/integration-tests/cli-args.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/cli-args.integration.test.js +398 -0
- package/dist/src/integration-tests/cli-args.integration.test.js.map +1 -0
- package/dist/src/integration-tests/compression-settings-apply.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/compression-settings-apply.integration.test.js +436 -0
- package/dist/src/integration-tests/compression-settings-apply.integration.test.js.map +1 -0
- package/dist/src/integration-tests/ephemeral-settings.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/ephemeral-settings.integration.test.js +290 -0
- package/dist/src/integration-tests/ephemeral-settings.integration.test.js.map +1 -0
- package/dist/src/integration-tests/model-params-isolation.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/model-params-isolation.integration.test.js +564 -0
- package/dist/src/integration-tests/model-params-isolation.integration.test.js.map +1 -0
- package/dist/src/integration-tests/modelParams.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/modelParams.integration.test.js +784 -0
- package/dist/src/integration-tests/modelParams.integration.test.js.map +1 -0
- package/dist/src/integration-tests/profile-keyfile.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/profile-keyfile.integration.test.js +429 -0
- package/dist/src/integration-tests/profile-keyfile.integration.test.js.map +1 -0
- package/dist/src/integration-tests/profile-system.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/profile-system.integration.test.js +364 -0
- package/dist/src/integration-tests/profile-system.integration.test.js.map +1 -0
- package/dist/src/integration-tests/provider-switching.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/provider-switching.integration.test.js +207 -0
- package/dist/src/integration-tests/provider-switching.integration.test.js.map +1 -0
- package/dist/src/integration-tests/security.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/security.integration.test.js +319 -0
- package/dist/src/integration-tests/security.integration.test.js.map +1 -0
- package/dist/src/integration-tests/test-utils.test.d.ts +6 -0
- package/dist/src/integration-tests/test-utils.test.js +221 -0
- package/dist/src/integration-tests/test-utils.test.js.map +1 -0
- package/dist/src/integration-tests/todo-continuation.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/todo-continuation.integration.test.js +559 -0
- package/dist/src/integration-tests/todo-continuation.integration.test.js.map +1 -0
- package/dist/src/providers/logging/LoggingProviderWrapper.test.d.ts +6 -0
- package/dist/src/providers/logging/LoggingProviderWrapper.test.js +305 -0
- package/dist/src/providers/logging/LoggingProviderWrapper.test.js.map +1 -0
- package/dist/src/providers/logging/git-stats.integration.test.d.ts +6 -0
- package/dist/src/providers/logging/git-stats.integration.test.js +245 -0
- package/dist/src/providers/logging/git-stats.integration.test.js.map +1 -0
- package/dist/src/providers/logging/git-stats.test.d.ts +6 -0
- package/dist/src/providers/logging/git-stats.test.js +432 -0
- package/dist/src/providers/logging/git-stats.test.js.map +1 -0
- package/dist/src/providers/logging/multi-provider-logging.integration.test.d.ts +6 -0
- package/dist/src/providers/logging/multi-provider-logging.integration.test.js +531 -0
- package/dist/src/providers/logging/multi-provider-logging.integration.test.js.map +1 -0
- package/dist/src/providers/logging/performance.test.d.ts +6 -0
- package/dist/src/providers/logging/performance.test.js +465 -0
- package/dist/src/providers/logging/performance.test.js.map +1 -0
- package/dist/src/providers/provider-gemini-switching.test.d.ts +6 -0
- package/dist/src/providers/provider-gemini-switching.test.js +129 -0
- package/dist/src/providers/provider-gemini-switching.test.js.map +1 -0
- package/dist/src/providers/provider-switching.integration.test.d.ts +6 -0
- package/dist/src/providers/provider-switching.integration.test.js +113 -0
- package/dist/src/providers/provider-switching.integration.test.js.map +1 -0
- package/dist/src/providers/providerManagerInstance.test.d.ts +6 -0
- package/dist/src/providers/providerManagerInstance.test.js +104 -0
- package/dist/src/providers/providerManagerInstance.test.js.map +1 -0
- package/dist/src/services/BuiltinCommandLoader.test.d.ts +6 -0
- package/dist/src/services/BuiltinCommandLoader.test.js +118 -0
- package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -0
- package/dist/src/services/CommandService.test.d.ts +6 -0
- package/dist/src/services/CommandService.test.js +232 -0
- package/dist/src/services/CommandService.test.js.map +1 -0
- package/dist/src/storage/ConversationStorage.test.d.ts +6 -0
- package/dist/src/storage/ConversationStorage.test.js +379 -0
- package/dist/src/storage/ConversationStorage.test.js.map +1 -0
- package/dist/src/test-utils/customMatchers.d.ts +14 -0
- package/dist/src/test-utils/customMatchers.js +46 -0
- package/dist/src/test-utils/customMatchers.js.map +1 -0
- package/dist/src/test-utils/mockCommandContext.d.ts +18 -0
- package/dist/src/test-utils/mockCommandContext.js +86 -0
- package/dist/src/test-utils/mockCommandContext.js.map +1 -0
- package/dist/src/test-utils/mockCommandContext.test.d.ts +6 -0
- package/dist/src/test-utils/mockCommandContext.test.js +51 -0
- package/dist/src/test-utils/mockCommandContext.test.js.map +1 -0
- package/dist/src/test-utils/responsive-testing.d.ts +14 -0
- package/dist/src/test-utils/responsive-testing.js +35 -0
- package/dist/src/test-utils/responsive-testing.js.map +1 -0
- package/dist/src/test-utils/responsive-testing.test.d.ts +6 -0
- package/dist/src/test-utils/responsive-testing.test.js +89 -0
- package/dist/src/test-utils/responsive-testing.test.js.map +1 -0
- package/dist/src/test-utils/testProviderConfig.d.ts +18 -0
- package/dist/src/test-utils/testProviderConfig.js +19 -0
- package/dist/src/test-utils/testProviderConfig.js.map +1 -0
- package/dist/src/ui/App.js +1 -1
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/IdeIntegrationNudge.js +1 -1
- package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +8 -6
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/diagnosticsCommand.js +0 -1
- package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
- package/dist/src/ui/commands/ideCommand.js +5 -5
- package/dist/src/ui/commands/ideCommand.js.map +1 -1
- package/dist/src/ui/commands/keyCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/keyCommand.test.js +128 -0
- package/dist/src/ui/commands/keyCommand.test.js.map +1 -0
- package/dist/src/ui/commands/profileCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/profileCommand.test.js +343 -0
- package/dist/src/ui/commands/profileCommand.test.js.map +1 -0
- package/dist/src/ui/commands/setCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/setCommand.test.js +431 -0
- package/dist/src/ui/commands/setCommand.test.js.map +1 -0
- package/dist/src/ui/commands/setupGithubCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/setupGithubCommand.test.js +69 -0
- package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -0
- package/dist/src/ui/commands/toolformatCommand.test.d.ts +1 -0
- package/dist/src/ui/commands/toolformatCommand.test.js +145 -0
- package/dist/src/ui/commands/toolformatCommand.test.js.map +1 -0
- package/dist/src/ui/components/AuthDialog.js +1 -1
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.test.d.ts +6 -0
- package/dist/src/ui/components/AuthDialog.test.js +252 -0
- package/dist/src/ui/components/AuthDialog.test.js.map +1 -0
- package/dist/src/ui/components/ContextIndicator.ui.test.d.ts +1 -0
- package/dist/src/ui/components/ContextIndicator.ui.test.js +89 -0
- package/dist/src/ui/components/ContextIndicator.ui.test.js.map +1 -0
- package/dist/src/ui/components/ContextSummaryDisplay.js +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.semantic.test.d.ts +6 -0
- package/dist/src/ui/components/ContextUsageDisplay.semantic.test.js +75 -0
- package/dist/src/ui/components/ContextUsageDisplay.semantic.test.js.map +1 -0
- package/dist/src/ui/components/FolderTrustDialog.test.d.ts +6 -0
- package/dist/src/ui/components/FolderTrustDialog.test.js +26 -0
- package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -0
- package/dist/src/ui/components/Footer.d.ts +1 -0
- package/dist/src/ui/components/Footer.js +2 -2
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/Footer.responsive.test.d.ts +6 -0
- package/dist/src/ui/components/Footer.responsive.test.js +262 -0
- package/dist/src/ui/components/Footer.responsive.test.js.map +1 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +6 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.js +92 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -0
- package/dist/src/ui/components/InputPrompt.paste.test.d.ts +6 -0
- package/dist/src/ui/components/InputPrompt.paste.test.js +263 -0
- package/dist/src/ui/components/InputPrompt.paste.test.js.map +1 -0
- package/dist/src/ui/components/LoadingIndicator.test.d.ts +6 -0
- package/dist/src/ui/components/LoadingIndicator.test.js +149 -0
- package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -0
- package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.d.ts +6 -0
- package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.js +127 -0
- package/dist/src/ui/components/MemoryUsageDisplay.semantic.test.js.map +1 -0
- package/dist/src/ui/components/ProviderDialog.responsive.test.d.ts +6 -0
- package/dist/src/ui/components/ProviderDialog.responsive.test.js +153 -0
- package/dist/src/ui/components/ProviderDialog.responsive.test.js.map +1 -0
- package/dist/src/ui/components/ProviderModelDialog.responsive.test.d.ts +6 -0
- package/dist/src/ui/components/ProviderModelDialog.responsive.test.js +252 -0
- package/dist/src/ui/components/ProviderModelDialog.responsive.test.js.map +1 -0
- package/dist/src/ui/components/ProviderModelDialog.test.d.ts +6 -0
- package/dist/src/ui/components/ProviderModelDialog.test.js +197 -0
- package/dist/src/ui/components/ProviderModelDialog.test.js.map +1 -0
- package/dist/src/ui/components/SettingsDialog.test.d.ts +6 -0
- package/dist/src/ui/components/SettingsDialog.test.js +555 -0
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -0
- package/dist/src/ui/components/ShellConfirmationDialog.test.d.ts +6 -0
- package/dist/src/ui/components/ShellConfirmationDialog.test.js +40 -0
- package/dist/src/ui/components/ShellConfirmationDialog.test.js.map +1 -0
- package/dist/src/ui/components/TodoPanel.responsive.test.d.ts +6 -0
- package/dist/src/ui/components/TodoPanel.responsive.test.js +221 -0
- package/dist/src/ui/components/TodoPanel.responsive.test.js.map +1 -0
- package/dist/src/ui/components/TodoPanel.semantic.test.d.ts +6 -0
- package/dist/src/ui/components/TodoPanel.semantic.test.js +137 -0
- package/dist/src/ui/components/TodoPanel.semantic.test.js.map +1 -0
- package/dist/src/ui/components/__tests__/LayoutManager.test.d.ts +6 -0
- package/dist/src/ui/components/__tests__/LayoutManager.test.js +94 -0
- package/dist/src/ui/components/__tests__/LayoutManager.test.js.map +1 -0
- package/dist/src/ui/components/messages/DiffRenderer.js +9 -7
- package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
- package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +6 -0
- package/dist/src/ui/components/messages/DiffRenderer.test.js +239 -0
- package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +13 -4
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.js +172 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.responsive.test.js.map +1 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +37 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -0
- package/dist/src/ui/components/messages/ToolMessage.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolMessage.test.js +118 -0
- package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -0
- package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +6 -0
- package/dist/src/ui/components/shared/MaxSizedBox.test.js +154 -0
- package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.js +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +6 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js +112 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -0
- package/dist/src/ui/containers/SessionController.test.d.ts +6 -0
- package/dist/src/ui/containers/SessionController.test.js +440 -0
- package/dist/src/ui/containers/SessionController.test.js.map +1 -0
- package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +6 -0
- package/dist/src/ui/hooks/atCommandProcessor.test.js +830 -0
- package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -0
- package/dist/src/ui/hooks/shellCommandProcessor.test.d.ts +6 -0
- package/dist/src/ui/hooks/shellCommandProcessor.test.js +328 -0
- package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -0
- package/dist/src/ui/hooks/useAutoAcceptIndicator.test.d.ts +6 -0
- package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +191 -0
- package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -0
- package/dist/src/ui/hooks/useEditorSettings.test.d.ts +6 -0
- package/dist/src/ui/hooks/useEditorSettings.test.js +221 -0
- package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.integration.test.d.ts +6 -0
- package/dist/src/ui/hooks/useGeminiStream.integration.test.js +800 -0
- package/dist/src/ui/hooks/useGeminiStream.integration.test.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.js +12 -47
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useGitBranchName.test.d.ts +6 -0
- package/dist/src/ui/hooks/useGitBranchName.test.js +170 -0
- package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -0
- package/dist/src/ui/hooks/useHistoryManager.test.d.ts +6 -0
- package/dist/src/ui/hooks/useHistoryManager.test.js +171 -0
- package/dist/src/ui/hooks/useHistoryManager.test.js.map +1 -0
- package/dist/src/ui/hooks/useInputHistory.test.d.ts +6 -0
- package/dist/src/ui/hooks/useInputHistory.test.js +207 -0
- package/dist/src/ui/hooks/useInputHistory.test.js.map +1 -0
- package/dist/src/ui/hooks/useKeypress.test.d.ts +6 -0
- package/dist/src/ui/hooks/useKeypress.test.js +171 -0
- package/dist/src/ui/hooks/useKeypress.test.js.map +1 -0
- package/dist/src/ui/hooks/useResponsive.test.d.ts +6 -0
- package/dist/src/ui/hooks/useResponsive.test.js +124 -0
- package/dist/src/ui/hooks/useResponsive.test.js.map +1 -0
- package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +6 -0
- package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +163 -0
- package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +1 -0
- package/dist/src/ui/hooks/useShellHistory.test.d.ts +6 -0
- package/dist/src/ui/hooks/useShellHistory.test.js +162 -0
- package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -0
- package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +6 -0
- package/dist/src/ui/hooks/useSlashCompletion.test.js +929 -0
- package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -0
- package/dist/src/ui/hooks/useStableCallback.test.d.ts +6 -0
- package/dist/src/ui/hooks/useStableCallback.test.js +57 -0
- package/dist/src/ui/hooks/useStableCallback.test.js.map +1 -0
- package/dist/src/ui/keyMatchers.test.d.ts +6 -0
- package/dist/src/ui/keyMatchers.test.js +276 -0
- package/dist/src/ui/keyMatchers.test.js.map +1 -0
- package/dist/src/ui/reducers/appReducer.test.d.ts +6 -0
- package/dist/src/ui/reducers/appReducer.test.js +519 -0
- package/dist/src/ui/reducers/appReducer.test.js.map +1 -0
- package/dist/src/ui/themes/color-utils.test.d.ts +6 -0
- package/dist/src/ui/themes/color-utils.test.js +197 -0
- package/dist/src/ui/themes/color-utils.test.js.map +1 -0
- package/dist/src/ui/themes/semantic-resolver.test.d.ts +6 -0
- package/dist/src/ui/themes/semantic-resolver.test.js +210 -0
- package/dist/src/ui/themes/semantic-resolver.test.js.map +1 -0
- package/dist/src/ui/themes/semantic-tokens.test.d.ts +6 -0
- package/dist/src/ui/themes/semantic-tokens.test.js +272 -0
- package/dist/src/ui/themes/semantic-tokens.test.js.map +1 -0
- package/dist/src/ui/themes/theme-manager.test.d.ts +6 -0
- package/dist/src/ui/themes/theme-manager.test.js +151 -0
- package/dist/src/ui/themes/theme-manager.test.js.map +1 -0
- package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +6 -0
- package/dist/src/ui/utils/MarkdownDisplay.test.js +151 -0
- package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -0
- package/dist/src/ui/utils/clipboardUtils.test.d.ts +6 -0
- package/dist/src/ui/utils/clipboardUtils.test.js +65 -0
- package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -0
- package/dist/src/ui/utils/commandUtils.test.d.ts +6 -0
- package/dist/src/ui/utils/commandUtils.test.js +294 -0
- package/dist/src/ui/utils/commandUtils.test.js.map +1 -0
- package/dist/src/ui/utils/displayUtils.test.d.ts +6 -0
- package/dist/src/ui/utils/displayUtils.test.js +42 -0
- package/dist/src/ui/utils/displayUtils.test.js.map +1 -0
- package/dist/src/ui/utils/formatters.test.d.ts +6 -0
- package/dist/src/ui/utils/formatters.test.js +56 -0
- package/dist/src/ui/utils/formatters.test.js.map +1 -0
- package/dist/src/ui/utils/markdownUtilities.test.d.ts +6 -0
- package/dist/src/ui/utils/markdownUtilities.test.js +42 -0
- package/dist/src/ui/utils/markdownUtilities.test.js.map +1 -0
- package/dist/src/ui/utils/responsive.test.d.ts +6 -0
- package/dist/src/ui/utils/responsive.test.js +107 -0
- package/dist/src/ui/utils/responsive.test.js.map +1 -0
- package/dist/src/ui/utils/secureInputHandler.test.d.ts +6 -0
- package/dist/src/ui/utils/secureInputHandler.test.js +274 -0
- package/dist/src/ui/utils/secureInputHandler.test.js.map +1 -0
- package/dist/src/ui/utils/updateCheck.test.d.ts +6 -0
- package/dist/src/ui/utils/updateCheck.test.js +202 -0
- package/dist/src/ui/utils/updateCheck.test.js.map +1 -0
- package/dist/src/utils/ConversationContext.test.d.ts +6 -0
- package/dist/src/utils/ConversationContext.test.js +64 -0
- package/dist/src/utils/ConversationContext.test.js.map +1 -0
- package/dist/src/utils/gitUtils.test.d.ts +6 -0
- package/dist/src/utils/gitUtils.test.js +113 -0
- package/dist/src/utils/gitUtils.test.js.map +1 -0
- package/dist/src/utils/installationInfo.test.d.ts +6 -0
- package/dist/src/utils/installationInfo.test.js +242 -0
- package/dist/src/utils/installationInfo.test.js.map +1 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.test.d.ts +6 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.test.js +463 -0
- package/dist/src/utils/privacy/ConversationDataRedactor.test.js.map +1 -0
- package/dist/src/utils/readStdin.js +10 -0
- package/dist/src/utils/readStdin.js.map +1 -1
- package/dist/src/utils/sandbox.js +2 -2
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/utils/settingsUtils.test.d.ts +6 -0
- package/dist/src/utils/settingsUtils.test.js +514 -0
- package/dist/src/utils/settingsUtils.test.js.map +1 -0
- package/dist/src/utils/userStartupWarnings.js +2 -2
- package/dist/src/utils/userStartupWarnings.test.d.ts +6 -0
- package/dist/src/utils/userStartupWarnings.test.js +67 -0
- package/dist/src/utils/userStartupWarnings.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
@@ -0,0 +1,145 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Vybestack LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
7
|
+
import { toolformatCommand } from './toolformatCommand.js';
|
8
|
+
import { createMockCommandContext } from '../../test-utils/mockCommandContext.js';
|
9
|
+
import { getProviderManager } from '../../providers/providerManagerInstance.js';
|
10
|
+
vi.mock('../../providers/providerManagerInstance.js');
|
11
|
+
function mockProvider(extra = {}) {
|
12
|
+
return {
|
13
|
+
name: 'openai',
|
14
|
+
getToolFormat: vi.fn().mockReturnValue('openai'),
|
15
|
+
setToolFormatOverride: vi.fn(),
|
16
|
+
getModels: vi.fn().mockResolvedValue([]),
|
17
|
+
generateChatCompletion: vi.fn(),
|
18
|
+
getServerTools: vi.fn().mockReturnValue([]),
|
19
|
+
invokeServerTool: vi.fn().mockResolvedValue({}),
|
20
|
+
...extra,
|
21
|
+
};
|
22
|
+
}
|
23
|
+
describe('toolformatCommand', () => {
|
24
|
+
let mockContext;
|
25
|
+
let providerManager;
|
26
|
+
let provider;
|
27
|
+
let mockSettingsService;
|
28
|
+
beforeEach(() => {
|
29
|
+
provider = mockProvider();
|
30
|
+
providerManager = {
|
31
|
+
hasActiveProvider: vi.fn().mockReturnValue(true),
|
32
|
+
getActiveProvider: vi.fn().mockReturnValue(provider),
|
33
|
+
listProviders: vi.fn().mockReturnValue([]),
|
34
|
+
switchProvider: vi.fn(),
|
35
|
+
resetAllProviders: vi.fn(),
|
36
|
+
};
|
37
|
+
getProviderManager.mockReturnValue(providerManager);
|
38
|
+
// Mock SettingsService
|
39
|
+
mockSettingsService = {
|
40
|
+
getSettings: vi.fn().mockResolvedValue({ toolFormat: undefined }),
|
41
|
+
updateSettings: vi.fn().mockResolvedValue(undefined),
|
42
|
+
};
|
43
|
+
mockContext = createMockCommandContext();
|
44
|
+
mockContext.services.settings.merged.providerToolFormatOverrides = {
|
45
|
+
openai: 'xml',
|
46
|
+
};
|
47
|
+
mockContext.services.settings.setValue = vi.fn();
|
48
|
+
mockContext.services.config = {
|
49
|
+
getSettingsService: vi.fn().mockReturnValue(mockSettingsService),
|
50
|
+
};
|
51
|
+
});
|
52
|
+
it('shows current format and persist status if called with no arguments', async () => {
|
53
|
+
const result = await toolformatCommand.action(mockContext, '');
|
54
|
+
expect(result).toBeDefined();
|
55
|
+
expect(result?.type).toBe('message');
|
56
|
+
if (result && result.type === 'message') {
|
57
|
+
expect(result.content).toContain('Current tool format: openai');
|
58
|
+
expect(result.content).toMatch(/auto-detected|manual override/);
|
59
|
+
}
|
60
|
+
});
|
61
|
+
it('clears the override with auto', async () => {
|
62
|
+
const result = await toolformatCommand.action(mockContext, 'auto');
|
63
|
+
expect(result?.type).toBe('message');
|
64
|
+
if (result && result.type === 'message') {
|
65
|
+
expect(result.content).toMatch(/override cleared|auto-detection/);
|
66
|
+
}
|
67
|
+
expect(provider.setToolFormatOverride).toHaveBeenCalledWith(null);
|
68
|
+
// Should use SettingsService, not legacy settings
|
69
|
+
expect(mockSettingsService.updateSettings).toHaveBeenCalledWith('openai', { toolFormat: 'auto' });
|
70
|
+
});
|
71
|
+
it('errors for invalid format', async () => {
|
72
|
+
const result = await toolformatCommand.action(mockContext, 'notrealformat');
|
73
|
+
expect(result?.type).toBe('message');
|
74
|
+
if (result && result.type === 'message') {
|
75
|
+
expect(result.messageType).toBe('error');
|
76
|
+
expect(result.content).toContain('Invalid tool format');
|
77
|
+
}
|
78
|
+
});
|
79
|
+
it('sets a valid override and persists', async () => {
|
80
|
+
const result = await toolformatCommand.action(mockContext, 'hermes');
|
81
|
+
expect(provider.setToolFormatOverride).toHaveBeenCalledWith('hermes');
|
82
|
+
// Should use SettingsService, not legacy settings
|
83
|
+
expect(mockSettingsService.updateSettings).toHaveBeenCalledWith('openai', { toolFormat: 'hermes' });
|
84
|
+
expect(result?.type).toBe('message');
|
85
|
+
if (result && result.type === 'message') {
|
86
|
+
expect(result.messageType).toBe('info');
|
87
|
+
expect(result.content).toContain("override set to 'hermes'");
|
88
|
+
}
|
89
|
+
});
|
90
|
+
it('shows error if no active provider', async () => {
|
91
|
+
providerManager.hasActiveProvider = vi.fn().mockReturnValue(false);
|
92
|
+
const result = await toolformatCommand.action(mockContext, 'hermes');
|
93
|
+
expect(result?.type).toBe('message');
|
94
|
+
if (result && result.type === 'message') {
|
95
|
+
expect(result.messageType).toBe('error');
|
96
|
+
expect(result.content).toContain('No active provider');
|
97
|
+
}
|
98
|
+
});
|
99
|
+
describe('SettingsService integration', () => {
|
100
|
+
it('uses SettingsService when available for setting format', async () => {
|
101
|
+
const result = await toolformatCommand.action(mockContext, 'xml');
|
102
|
+
expect(mockSettingsService.updateSettings).toHaveBeenCalledWith('openai', { toolFormat: 'xml' });
|
103
|
+
expect(result?.type).toBe('message');
|
104
|
+
if (result && result.type === 'message') {
|
105
|
+
expect(result.messageType).toBe('info');
|
106
|
+
expect(result.content).toContain("override set to 'xml'");
|
107
|
+
}
|
108
|
+
});
|
109
|
+
it('uses SettingsService when available for clearing format', async () => {
|
110
|
+
const result = await toolformatCommand.action(mockContext, 'auto');
|
111
|
+
expect(mockSettingsService.updateSettings).toHaveBeenCalledWith('openai', { toolFormat: 'auto' });
|
112
|
+
expect(result?.type).toBe('message');
|
113
|
+
if (result && result.type === 'message') {
|
114
|
+
expect(result.content).toMatch(/override cleared|auto-detection/);
|
115
|
+
}
|
116
|
+
});
|
117
|
+
it('falls back to legacy settings when SettingsService is not available', async () => {
|
118
|
+
// Remove SettingsService
|
119
|
+
mockContext.services.config = {
|
120
|
+
getSettingsService: vi.fn().mockReturnValue(null),
|
121
|
+
};
|
122
|
+
const result = await toolformatCommand.action(mockContext, 'hermes');
|
123
|
+
expect(mockContext.services.settings.setValue).toHaveBeenCalledWith('User', 'providerToolFormatOverrides', { openai: 'hermes' });
|
124
|
+
expect(result?.type).toBe('message');
|
125
|
+
if (result && result.type === 'message') {
|
126
|
+
expect(result.messageType).toBe('info');
|
127
|
+
expect(result.content).toContain("override set to 'hermes'");
|
128
|
+
}
|
129
|
+
});
|
130
|
+
it('handles SettingsService errors gracefully', async () => {
|
131
|
+
// Make SettingsService throw an error
|
132
|
+
mockSettingsService.updateSettings = vi
|
133
|
+
.fn()
|
134
|
+
.mockRejectedValue(new Error('Settings update failed'));
|
135
|
+
const result = await toolformatCommand.action(mockContext, 'xml');
|
136
|
+
expect(result?.type).toBe('message');
|
137
|
+
if (result && result.type === 'message') {
|
138
|
+
expect(result.messageType).toBe('error');
|
139
|
+
expect(result.content).toContain('Failed to set tool format override');
|
140
|
+
expect(result.content).toContain('Settings update failed');
|
141
|
+
}
|
142
|
+
});
|
143
|
+
});
|
144
|
+
});
|
145
|
+
//# sourceMappingURL=toolformatCommand.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"toolformatCommand.test.js","sourceRoot":"","sources":["../../../../src/ui/commands/toolformatCommand.test.ts"],"names":[],"mappings":"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"}
|
@@ -85,6 +85,6 @@ export function AuthDialog({ onSelect, settings, initialErrorMessage, }) {
|
|
85
85
|
onSelect(undefined, SettingScope.User);
|
86
86
|
}
|
87
87
|
}, { isActive: true });
|
88
|
-
return (_jsxs(Box, { borderStyle: "round", borderColor: Colors.Gray, flexDirection: "column", padding: 1, width: "100%", children: [_jsx(Text, { bold: true, children: "OAuth Authentication" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Select an OAuth provider to authenticate:" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Note: You can also use API keys via /key, /keyfile, --key, --keyfile, or environment variables" }) }), _jsx(Box, { marginTop: 1, children: _jsx(RadioButtonSelect, { items: items, initialIndex: safeInitialIndex, onSelect: handleAuthSelect
|
88
|
+
return (_jsxs(Box, { borderStyle: "round", borderColor: Colors.Gray, flexDirection: "column", padding: 1, width: "100%", children: [_jsx(Text, { bold: true, children: "OAuth Authentication" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Select an OAuth provider to authenticate:" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Note: You can also use API keys via /key, /keyfile, --key, --keyfile, or environment variables" }) }), _jsx(Box, { marginTop: 1, children: _jsx(RadioButtonSelect, { items: items, initialIndex: safeInitialIndex, onSelect: handleAuthSelect }) }), errorMessage && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentRed, children: errorMessage }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "(Use Enter to select, ESC to close)" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Terms of Services and Privacy Notice for Gemini CLI" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentBlue, children: 'https://github.com/acoliver/llxprt-code/blob/main/docs/tos-privacy.md' }) })] }));
|
89
89
|
}
|
90
90
|
//# sourceMappingURL=AuthDialog.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AuthDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/AuthDialog.tsx"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"AuthDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/AuthDialog.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,252 @@
|
|
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 'ink-testing-library';
|
8
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
9
|
+
import { AuthDialog } from './AuthDialog.js';
|
10
|
+
import { LoadedSettings, SettingScope } from '../../config/settings.js';
|
11
|
+
import { AuthType } from '@vybestack/llxprt-code-core';
|
12
|
+
describe('AuthDialog', () => {
|
13
|
+
const wait = (ms = 50) => new Promise((resolve) => setTimeout(resolve, ms));
|
14
|
+
let originalEnv;
|
15
|
+
beforeEach(() => {
|
16
|
+
originalEnv = { ...process.env };
|
17
|
+
process.env.GEMINI_API_KEY = '';
|
18
|
+
process.env.GEMINI_DEFAULT_AUTH_TYPE = '';
|
19
|
+
vi.clearAllMocks();
|
20
|
+
});
|
21
|
+
afterEach(() => {
|
22
|
+
process.env = originalEnv;
|
23
|
+
});
|
24
|
+
it('should show an error if the initial auth type is invalid', () => {
|
25
|
+
process.env.GEMINI_API_KEY = '';
|
26
|
+
const settings = new LoadedSettings({
|
27
|
+
settings: { customThemes: {}, mcpServers: {} },
|
28
|
+
path: '',
|
29
|
+
}, {
|
30
|
+
settings: {
|
31
|
+
selectedAuthType: AuthType.USE_GEMINI,
|
32
|
+
},
|
33
|
+
path: '',
|
34
|
+
}, {
|
35
|
+
settings: { customThemes: {}, mcpServers: {} },
|
36
|
+
path: '',
|
37
|
+
}, []);
|
38
|
+
const mockOnSelect = vi.fn();
|
39
|
+
const { lastFrame } = render(_jsx(AuthDialog, { onSelect: mockOnSelect, settings: settings, initialErrorMessage: "GEMINI_API_KEY environment variable not found" }));
|
40
|
+
expect(lastFrame()).toContain('GEMINI_API_KEY environment variable not found');
|
41
|
+
});
|
42
|
+
describe('GEMINI_API_KEY environment variable', () => {
|
43
|
+
it('should show OAuth dialog even when GEMINI_API_KEY is set', () => {
|
44
|
+
process.env.GEMINI_API_KEY = 'foobar';
|
45
|
+
const settings = new LoadedSettings({
|
46
|
+
settings: {
|
47
|
+
selectedAuthType: undefined,
|
48
|
+
customThemes: {},
|
49
|
+
mcpServers: {},
|
50
|
+
},
|
51
|
+
path: '',
|
52
|
+
}, {
|
53
|
+
settings: { customThemes: {}, mcpServers: {} },
|
54
|
+
path: '',
|
55
|
+
}, {
|
56
|
+
settings: { customThemes: {}, mcpServers: {} },
|
57
|
+
path: '',
|
58
|
+
}, []);
|
59
|
+
const mockOnSelect = vi.fn();
|
60
|
+
const { lastFrame } = render(_jsx(AuthDialog, { onSelect: mockOnSelect, settings: settings }));
|
61
|
+
// OAuth-only dialog shows regardless of API key presence
|
62
|
+
expect(lastFrame()).toContain('OAuth Authentication');
|
63
|
+
expect(lastFrame()).toContain('Gemini (Google OAuth)');
|
64
|
+
expect(lastFrame()).toContain('Qwen (OAuth)');
|
65
|
+
});
|
66
|
+
it('should show OAuth options regardless of GEMINI_DEFAULT_AUTH_TYPE', () => {
|
67
|
+
process.env.GEMINI_API_KEY = 'foobar';
|
68
|
+
process.env.GEMINI_DEFAULT_AUTH_TYPE = AuthType.LOGIN_WITH_GOOGLE;
|
69
|
+
const settings = new LoadedSettings({
|
70
|
+
settings: {
|
71
|
+
selectedAuthType: undefined,
|
72
|
+
customThemes: {},
|
73
|
+
mcpServers: {},
|
74
|
+
},
|
75
|
+
path: '',
|
76
|
+
}, {
|
77
|
+
settings: { customThemes: {}, mcpServers: {} },
|
78
|
+
path: '',
|
79
|
+
}, {
|
80
|
+
settings: { customThemes: {}, mcpServers: {} },
|
81
|
+
path: '',
|
82
|
+
}, []);
|
83
|
+
const { lastFrame } = render(_jsx(AuthDialog, { onSelect: vi.fn(), settings: settings }));
|
84
|
+
// OAuth-only implementation doesn't show API key messages
|
85
|
+
expect(lastFrame()).not.toContain('Existing API key detected (GEMINI_API_KEY)');
|
86
|
+
expect(lastFrame()).toContain('OAuth Authentication');
|
87
|
+
});
|
88
|
+
it('should show OAuth dialog even when GEMINI_DEFAULT_AUTH_TYPE is set to use api key', () => {
|
89
|
+
process.env.GEMINI_API_KEY = 'foobar';
|
90
|
+
process.env.GEMINI_DEFAULT_AUTH_TYPE = AuthType.USE_GEMINI;
|
91
|
+
const settings = new LoadedSettings({
|
92
|
+
settings: {
|
93
|
+
selectedAuthType: undefined,
|
94
|
+
customThemes: {},
|
95
|
+
mcpServers: {},
|
96
|
+
},
|
97
|
+
path: '',
|
98
|
+
}, {
|
99
|
+
settings: { customThemes: {}, mcpServers: {} },
|
100
|
+
path: '',
|
101
|
+
}, {
|
102
|
+
settings: { customThemes: {}, mcpServers: {} },
|
103
|
+
path: '',
|
104
|
+
}, []);
|
105
|
+
const { lastFrame } = render(_jsx(AuthDialog, { onSelect: vi.fn(), settings: settings }));
|
106
|
+
// OAuth-only dialog shows, API key message not shown
|
107
|
+
expect(lastFrame()).not.toContain('Existing API key detected (GEMINI_API_KEY)');
|
108
|
+
expect(lastFrame()).toContain('OAuth Authentication');
|
109
|
+
expect(lastFrame()).toContain('Note: You can also use API keys');
|
110
|
+
});
|
111
|
+
});
|
112
|
+
describe('GEMINI_DEFAULT_AUTH_TYPE environment variable', () => {
|
113
|
+
it('should select the auth type specified by GEMINI_DEFAULT_AUTH_TYPE', () => {
|
114
|
+
process.env.GEMINI_DEFAULT_AUTH_TYPE = AuthType.LOGIN_WITH_GOOGLE;
|
115
|
+
const settings = new LoadedSettings({
|
116
|
+
settings: {
|
117
|
+
selectedAuthType: undefined,
|
118
|
+
customThemes: {},
|
119
|
+
mcpServers: {},
|
120
|
+
},
|
121
|
+
path: '',
|
122
|
+
}, {
|
123
|
+
settings: { customThemes: {}, mcpServers: {} },
|
124
|
+
path: '',
|
125
|
+
}, {
|
126
|
+
settings: { customThemes: {}, mcpServers: {} },
|
127
|
+
path: '',
|
128
|
+
}, []);
|
129
|
+
const { lastFrame } = render(_jsx(AuthDialog, { onSelect: vi.fn(), settings: settings }));
|
130
|
+
// OAuth-only implementation always shows first option selected by default
|
131
|
+
expect(lastFrame()).toContain('[*]1. Gemini (Google OAuth)');
|
132
|
+
});
|
133
|
+
it('should fall back to default if GEMINI_DEFAULT_AUTH_TYPE is not set', () => {
|
134
|
+
const settings = new LoadedSettings({
|
135
|
+
settings: {
|
136
|
+
selectedAuthType: undefined,
|
137
|
+
customThemes: {},
|
138
|
+
mcpServers: {},
|
139
|
+
},
|
140
|
+
path: '',
|
141
|
+
}, {
|
142
|
+
settings: { customThemes: {}, mcpServers: {} },
|
143
|
+
path: '',
|
144
|
+
}, {
|
145
|
+
settings: { customThemes: {}, mcpServers: {} },
|
146
|
+
path: '',
|
147
|
+
}, []);
|
148
|
+
const { lastFrame } = render(_jsx(AuthDialog, { onSelect: vi.fn(), settings: settings }));
|
149
|
+
// OAuth-only implementation defaults to Gemini OAuth
|
150
|
+
expect(lastFrame()).toContain('[*]1. Gemini (Google OAuth)');
|
151
|
+
});
|
152
|
+
it('should show an error and fall back to default if GEMINI_DEFAULT_AUTH_TYPE is invalid', () => {
|
153
|
+
process.env.GEMINI_DEFAULT_AUTH_TYPE = 'invalid-auth-type';
|
154
|
+
const settings = new LoadedSettings({
|
155
|
+
settings: {
|
156
|
+
selectedAuthType: undefined,
|
157
|
+
customThemes: {},
|
158
|
+
mcpServers: {},
|
159
|
+
},
|
160
|
+
path: '',
|
161
|
+
}, {
|
162
|
+
settings: { customThemes: {}, mcpServers: {} },
|
163
|
+
path: '',
|
164
|
+
}, {
|
165
|
+
settings: { customThemes: {}, mcpServers: {} },
|
166
|
+
path: '',
|
167
|
+
}, []);
|
168
|
+
const { lastFrame } = render(_jsx(AuthDialog, { onSelect: vi.fn(), settings: settings }));
|
169
|
+
// OAuth-only implementation doesn't validate GEMINI_DEFAULT_AUTH_TYPE anymore
|
170
|
+
expect(lastFrame()).not.toContain('Invalid value for GEMINI_DEFAULT_AUTH_TYPE');
|
171
|
+
// OAuth-only implementation defaults to Gemini OAuth
|
172
|
+
expect(lastFrame()).toContain('[*]1. Gemini (Google OAuth)');
|
173
|
+
});
|
174
|
+
});
|
175
|
+
it('should close dialog when ESC is pressed', async () => {
|
176
|
+
const onSelect = vi.fn();
|
177
|
+
const settings = new LoadedSettings({
|
178
|
+
settings: { customThemes: {}, mcpServers: {} },
|
179
|
+
path: '',
|
180
|
+
}, {
|
181
|
+
settings: {
|
182
|
+
selectedAuthType: undefined,
|
183
|
+
customThemes: {},
|
184
|
+
mcpServers: {},
|
185
|
+
},
|
186
|
+
path: '',
|
187
|
+
}, {
|
188
|
+
settings: { customThemes: {}, mcpServers: {} },
|
189
|
+
path: '',
|
190
|
+
}, []);
|
191
|
+
const { stdin, unmount } = render(_jsx(AuthDialog, { onSelect: onSelect, settings: settings }));
|
192
|
+
await wait();
|
193
|
+
// Simulate pressing escape key
|
194
|
+
stdin.write('\u001b'); // ESC key
|
195
|
+
await wait();
|
196
|
+
// Should call onSelect with undefined to close the dialog
|
197
|
+
expect(onSelect).toHaveBeenCalledWith(undefined, 'User');
|
198
|
+
unmount();
|
199
|
+
});
|
200
|
+
it('should close dialog even with an error message when ESC is pressed', async () => {
|
201
|
+
const onSelect = vi.fn();
|
202
|
+
const settings = new LoadedSettings({
|
203
|
+
settings: { customThemes: {}, mcpServers: {} },
|
204
|
+
path: '',
|
205
|
+
}, {
|
206
|
+
settings: {
|
207
|
+
selectedAuthType: undefined,
|
208
|
+
customThemes: {},
|
209
|
+
mcpServers: {},
|
210
|
+
},
|
211
|
+
path: '',
|
212
|
+
}, {
|
213
|
+
settings: { customThemes: {}, mcpServers: {} },
|
214
|
+
path: '',
|
215
|
+
}, []);
|
216
|
+
const { lastFrame, stdin, unmount } = render(_jsx(AuthDialog, { onSelect: onSelect, settings: settings, initialErrorMessage: "Initial error" }));
|
217
|
+
await wait();
|
218
|
+
expect(lastFrame()).toContain('Initial error');
|
219
|
+
// Simulate pressing escape key
|
220
|
+
stdin.write('\u001b'); // ESC key
|
221
|
+
await wait();
|
222
|
+
// Should call onSelect with undefined to close the dialog
|
223
|
+
expect(onSelect).toHaveBeenCalledWith(undefined, 'User');
|
224
|
+
unmount();
|
225
|
+
});
|
226
|
+
it('should allow exiting when auth method is already selected', async () => {
|
227
|
+
const onSelect = vi.fn();
|
228
|
+
const settings = new LoadedSettings({
|
229
|
+
settings: { customThemes: {}, mcpServers: {} },
|
230
|
+
path: '',
|
231
|
+
}, {
|
232
|
+
settings: {
|
233
|
+
selectedAuthType: AuthType.USE_GEMINI,
|
234
|
+
customThemes: {},
|
235
|
+
mcpServers: {},
|
236
|
+
},
|
237
|
+
path: '',
|
238
|
+
}, {
|
239
|
+
settings: { customThemes: {}, mcpServers: {} },
|
240
|
+
path: '',
|
241
|
+
}, []);
|
242
|
+
const { stdin, unmount } = render(_jsx(AuthDialog, { onSelect: onSelect, settings: settings }));
|
243
|
+
await wait();
|
244
|
+
// Simulate pressing escape key
|
245
|
+
stdin.write('\u001b'); // ESC key
|
246
|
+
await wait();
|
247
|
+
// Should call onSelect with undefined to exit
|
248
|
+
expect(onSelect).toHaveBeenCalledWith(undefined, SettingScope.User);
|
249
|
+
unmount();
|
250
|
+
});
|
251
|
+
});
|
252
|
+
//# sourceMappingURL=AuthDialog.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"AuthDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/AuthDialog.test.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,89 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import { render } from 'ink-testing-library';
|
3
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
4
|
+
import { Footer } from './Footer.js';
|
5
|
+
import { getProviderManager } from '../../providers/providerManagerInstance.js';
|
6
|
+
import { OpenAIProvider, ProviderManager, } from '@vybestack/llxprt-code-core';
|
7
|
+
// Mock the provider manager
|
8
|
+
vi.mock('../../providers/providerManagerInstance.js', () => ({
|
9
|
+
getProviderManager: vi.fn(),
|
10
|
+
}));
|
11
|
+
describe('ContextIndicator UI', () => {
|
12
|
+
let mockProvider;
|
13
|
+
let mockProviderManager;
|
14
|
+
beforeEach(() => {
|
15
|
+
// Create mock OpenAI provider
|
16
|
+
mockProvider = {
|
17
|
+
estimateContextUsage: vi.fn(),
|
18
|
+
};
|
19
|
+
// Make it an instance of OpenAIProvider for instanceof check
|
20
|
+
Object.setPrototypeOf(mockProvider, OpenAIProvider.prototype);
|
21
|
+
// Create a real ProviderManager instance and mock its methods
|
22
|
+
mockProviderManager = new ProviderManager();
|
23
|
+
// Mock the methods we need
|
24
|
+
vi.spyOn(mockProviderManager, 'hasActiveProvider').mockReturnValue(true);
|
25
|
+
vi.spyOn(mockProviderManager, 'getActiveProvider').mockReturnValue(mockProvider);
|
26
|
+
vi.mocked(getProviderManager).mockReturnValue(mockProviderManager);
|
27
|
+
});
|
28
|
+
it('should display context percentage without remote tokens', () => {
|
29
|
+
const { lastFrame } = render(_jsx(Footer, { model: "gpt-4o", targetDir: "/test/dir", debugMode: false, debugMessage: "", errorCount: 0, showErrorDetails: false, promptTokenCount: 1000, nightly: false }));
|
30
|
+
// Should show context in new format: Ctx: 1.0k/128k
|
31
|
+
expect(lastFrame()).toContain('Ctx: 1.0k/128k');
|
32
|
+
});
|
33
|
+
it('should display context percentage when using OpenAI', () => {
|
34
|
+
// Mock the context estimation
|
35
|
+
mockProvider.estimateContextUsage.mockReturnValue({
|
36
|
+
totalTokens: 52000,
|
37
|
+
remoteTokens: 50000,
|
38
|
+
promptTokens: 2000,
|
39
|
+
maxTokens: 128000,
|
40
|
+
contextUsedPercent: 40.625,
|
41
|
+
tokensRemaining: 76000,
|
42
|
+
});
|
43
|
+
const { lastFrame } = render(_jsx(Footer, { model: "gpt-4o", targetDir: "/test/dir", debugMode: false, debugMessage: "", errorCount: 0, showErrorDetails: false, promptTokenCount: 1000, nightly: false }));
|
44
|
+
// Should show context in new format: Ctx: 1.0k/128k
|
45
|
+
expect(lastFrame()).toContain('Ctx: 1.0k/128k');
|
46
|
+
});
|
47
|
+
it('should handle high token usage', () => {
|
48
|
+
// Mock near-limit context usage
|
49
|
+
mockProvider.estimateContextUsage.mockReturnValue({
|
50
|
+
totalTokens: 120000,
|
51
|
+
remoteTokens: 115000,
|
52
|
+
promptTokens: 5000,
|
53
|
+
maxTokens: 128000,
|
54
|
+
contextUsedPercent: 93.75,
|
55
|
+
tokensRemaining: 8000,
|
56
|
+
});
|
57
|
+
const { lastFrame } = render(_jsx(Footer, { model: "gpt-4o", targetDir: "/test/dir", debugMode: false, debugMessage: "", errorCount: 0, showErrorDetails: false, promptTokenCount: 1000, nightly: false }));
|
58
|
+
// Should show context in new format: Ctx: 1.0k/128k
|
59
|
+
expect(lastFrame()).toContain('Ctx: 1.0k/128k');
|
60
|
+
});
|
61
|
+
it('should fallback to local calculation on error', () => {
|
62
|
+
// Make estimateContextUsage throw an error
|
63
|
+
mockProvider.estimateContextUsage.mockImplementation(() => {
|
64
|
+
throw new Error('API error');
|
65
|
+
});
|
66
|
+
const { lastFrame } = render(_jsx(Footer, { model: "gpt-4o", targetDir: "/test/dir", debugMode: false, debugMessage: "", errorCount: 0, showErrorDetails: false, promptTokenCount: 1000, nightly: false }));
|
67
|
+
// Should fallback to local calculation in new format
|
68
|
+
expect(lastFrame()).toContain('Ctx: 1.0k/128k');
|
69
|
+
expect(lastFrame()).not.toContain('remote');
|
70
|
+
});
|
71
|
+
it('should handle non-OpenAI providers', () => {
|
72
|
+
// Mock a non-OpenAI provider
|
73
|
+
vi.mocked(mockProviderManager.getActiveProvider).mockReturnValue({
|
74
|
+
name: 'anthropic',
|
75
|
+
});
|
76
|
+
const { lastFrame } = render(_jsx(Footer, { model: "claude-3-opus", targetDir: "/test/dir", debugMode: false, debugMessage: "", errorCount: 0, showErrorDetails: false, promptTokenCount: 1000, nightly: false }));
|
77
|
+
// Should use local calculation for non-OpenAI providers in new format
|
78
|
+
expect(lastFrame()).toContain('Ctx: 1.0k/1049k');
|
79
|
+
expect(lastFrame()).not.toContain('remote');
|
80
|
+
});
|
81
|
+
it('should handle missing conversation context', () => {
|
82
|
+
const { lastFrame } = render(_jsx(Footer, { model: "gpt-4o", targetDir: "/test/dir", debugMode: false, debugMessage: "", errorCount: 0, showErrorDetails: false, promptTokenCount: 1000, nightly: false }));
|
83
|
+
// Should not attempt to get remote context
|
84
|
+
expect(mockProvider.estimateContextUsage).not.toHaveBeenCalled();
|
85
|
+
expect(lastFrame()).toContain('Ctx: 1.0k/128k');
|
86
|
+
expect(lastFrame()).not.toContain('remote');
|
87
|
+
});
|
88
|
+
});
|
89
|
+
//# sourceMappingURL=ContextIndicator.ui.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ContextIndicator.ui.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ContextIndicator.ui.test.tsx"],"names":[],"mappings":"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"}
|
@@ -15,7 +15,7 @@ export const ContextSummaryDisplay = ({ activeFile: _activeFile, llxprtMdFileCou
|
|
15
15
|
if (openFileCount === 0) {
|
16
16
|
return '';
|
17
17
|
}
|
18
|
-
return `${openFileCount} open file${openFileCount > 1 ? 's' : ''} (ctrl+
|
18
|
+
return `${openFileCount} open file${openFileCount > 1 ? 's' : ''} (ctrl+g to view)`;
|
19
19
|
})();
|
20
20
|
const geminiMdText = (() => {
|
21
21
|
if (llxprtMdFileCount === 0) {
|