@vybestack/llxprt-code 0.1.20-nightly.250818.90f427f5 → 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,153 @@
|
|
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, } from 'vitest';
|
9
|
+
import { ProviderDialog } from './ProviderDialog.js';
|
10
|
+
import { useTerminalSize } from '../hooks/useTerminalSize.js';
|
11
|
+
vi.mock('../hooks/useTerminalSize.js');
|
12
|
+
const testProviders = [
|
13
|
+
'anthropic',
|
14
|
+
'openai',
|
15
|
+
'gemini',
|
16
|
+
'azure-openai',
|
17
|
+
'very-long-provider-name-that-should-be-truncated',
|
18
|
+
'short',
|
19
|
+
'another-moderately-long-provider-name',
|
20
|
+
];
|
21
|
+
describe('ProviderDialog Responsive Behavior', () => {
|
22
|
+
let mockUseTerminalSize;
|
23
|
+
const mockOnSelect = vi.fn();
|
24
|
+
const mockOnClose = vi.fn();
|
25
|
+
beforeEach(() => {
|
26
|
+
vi.clearAllMocks();
|
27
|
+
mockUseTerminalSize = useTerminalSize;
|
28
|
+
});
|
29
|
+
describe('NARROW width behavior (< 80 cols)', () => {
|
30
|
+
beforeEach(() => {
|
31
|
+
mockUseTerminalSize.mockReturnValue({ columns: 60, rows: 20 });
|
32
|
+
});
|
33
|
+
it('should show search-first approach with help text below search', () => {
|
34
|
+
const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
|
35
|
+
const output = lastFrame();
|
36
|
+
// Should have search input prominently displayed
|
37
|
+
expect(output).toMatch(/search:/i);
|
38
|
+
expect(output).toMatch(/type to filter/i);
|
39
|
+
// Should have help text below search
|
40
|
+
expect(output).toMatch(/enter to select.*esc to cancel/i);
|
41
|
+
// Should have minimal or no borders
|
42
|
+
expect(output).not.toMatch(/┌─+┐/); // No fancy borders
|
43
|
+
// Should show abbreviated provider names
|
44
|
+
expect(output).toContain('anthropic');
|
45
|
+
expect(output).toContain('openai');
|
46
|
+
expect(output).not.toContain('very-long-provider-name-that-should-be-truncated'); // Should be truncated
|
47
|
+
expect(output).toMatch(/very-long.*\.\.\./); // Should show truncated version
|
48
|
+
});
|
49
|
+
it('should focus on search functionality over grid layout', () => {
|
50
|
+
const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
|
51
|
+
const output = lastFrame();
|
52
|
+
// Should not show complex grid layout
|
53
|
+
expect(output).not.toMatch(/├|┤|│.*│.*│/); // No multi-column separators
|
54
|
+
// Should show results in single column or minimal columns
|
55
|
+
expect(output).toMatch(/● openai/); // Selected item should be visible
|
56
|
+
});
|
57
|
+
});
|
58
|
+
describe('STANDARD width behavior (80-120 cols)', () => {
|
59
|
+
beforeEach(() => {
|
60
|
+
mockUseTerminalSize.mockReturnValue({ columns: 100, rows: 20 });
|
61
|
+
});
|
62
|
+
it('should show condensed layout with abbreviated descriptions', () => {
|
63
|
+
const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
|
64
|
+
const output = lastFrame();
|
65
|
+
// Should have proper borders
|
66
|
+
expect(output).toMatch(/┌─+┐|╭─+╮/); // Should have borders
|
67
|
+
// Should show providers in a grid layout but condensed
|
68
|
+
expect(output).toContain('anthropic');
|
69
|
+
expect(output).toContain('openai');
|
70
|
+
expect(output).toContain('gemini');
|
71
|
+
// Should show abbreviated long names
|
72
|
+
expect(output).toMatch(/very-long.*\.\.\./);
|
73
|
+
expect(output).not.toContain('very-long-provider-name-that-should-be-truncated');
|
74
|
+
// Should have navigation instructions
|
75
|
+
expect(output).toMatch(/←\/→\/↑\/↓.*enter.*esc/i);
|
76
|
+
});
|
77
|
+
it('should optimize for multi-column layout within width constraints', () => {
|
78
|
+
const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "anthropic", onSelect: mockOnSelect, onClose: mockOnClose }));
|
79
|
+
const output = lastFrame();
|
80
|
+
// Should show multiple providers per row when possible
|
81
|
+
expect(output).toMatch(/● anthropic.*○/); // Selected and another on same line or nearby
|
82
|
+
// Should show reasonable number of columns (2-3 for standard width)
|
83
|
+
const lines = output.split('\n');
|
84
|
+
const providerLines = lines.filter((line) => line.includes('○') || line.includes('●'));
|
85
|
+
expect(providerLines.length).toBeGreaterThan(1); // Multiple rows
|
86
|
+
});
|
87
|
+
});
|
88
|
+
describe('WIDE width behavior (> 120 cols)', () => {
|
89
|
+
beforeEach(() => {
|
90
|
+
mockUseTerminalSize.mockReturnValue({ columns: 180, rows: 20 });
|
91
|
+
});
|
92
|
+
it('should show full layout with all details visible', () => {
|
93
|
+
const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "azure-openai", onSelect: mockOnSelect, onClose: mockOnClose }));
|
94
|
+
const output = lastFrame();
|
95
|
+
// Should show full provider names without truncation
|
96
|
+
expect(output).toContain('very-long-provider-name-that-should-be-truncated');
|
97
|
+
expect(output).toContain('another-moderately-long-provider-name');
|
98
|
+
// Should have full decorative borders
|
99
|
+
expect(output).toMatch(/┌─+┐|╭─+╮/);
|
100
|
+
// Should show full instructions
|
101
|
+
expect(output).toMatch(/select provider.*←\/→\/↑\/↓.*enter to choose.*esc to cancel/i);
|
102
|
+
// Should have optimal multi-column layout
|
103
|
+
expect(output).toContain('● azure-openai'); // Current selection visible
|
104
|
+
});
|
105
|
+
it('should utilize full width for optimal grid layout', () => {
|
106
|
+
const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "gemini", onSelect: mockOnSelect, onClose: mockOnClose }));
|
107
|
+
const output = lastFrame();
|
108
|
+
// Should show multiple columns efficiently using wide width
|
109
|
+
const lines = output.split('\n');
|
110
|
+
const contentLines = lines.filter((line) => line.includes('○') || line.includes('●'));
|
111
|
+
expect(contentLines.length).toBeLessThanOrEqual(3); // Should pack efficiently in wide layout
|
112
|
+
// Should show all providers
|
113
|
+
expect(output).toContain('anthropic');
|
114
|
+
expect(output).toContain('● gemini');
|
115
|
+
expect(output).toContain('azure-openai');
|
116
|
+
expect(output).toContain('very-long-provider-name-that-should-be-truncated');
|
117
|
+
});
|
118
|
+
});
|
119
|
+
describe('Responsive breakpoint transitions', () => {
|
120
|
+
it('should handle transitions between breakpoints correctly', () => {
|
121
|
+
// Test exactly at NARROW/STANDARD boundary (80 cols)
|
122
|
+
mockUseTerminalSize.mockReturnValue({ columns: 80, rows: 20 });
|
123
|
+
const { lastFrame: standardFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
|
124
|
+
const standardOutput = standardFrame();
|
125
|
+
// At 80 columns, should be STANDARD behavior (not NARROW)
|
126
|
+
expect(standardOutput).toMatch(/┌─+┐|╭─+╮/); // Should have borders
|
127
|
+
expect(standardOutput).not.toMatch(/type to filter/i); // No search-first approach
|
128
|
+
// Test exactly at STANDARD/WIDE boundary (120 cols)
|
129
|
+
mockUseTerminalSize.mockReturnValue({ columns: 120, rows: 20 });
|
130
|
+
const { lastFrame: wideFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
|
131
|
+
const wideOutput = wideFrame();
|
132
|
+
// At 120 columns, should be STANDARD behavior (not WIDE yet)
|
133
|
+
expect(wideOutput).toMatch(/very-long.*\.\.\./); // Should still truncate at boundary
|
134
|
+
expect(wideOutput).not.toContain('very-long-provider-name-that-should-be-truncated');
|
135
|
+
});
|
136
|
+
});
|
137
|
+
describe('Semantic color preservation', () => {
|
138
|
+
it('should maintain semantic colors across all breakpoints', () => {
|
139
|
+
// Test that semantic colors are preserved at each breakpoint
|
140
|
+
const widths = [60, 100, 180];
|
141
|
+
widths.forEach((width) => {
|
142
|
+
mockUseTerminalSize.mockReturnValue({ columns: width, rows: 20 });
|
143
|
+
const { lastFrame } = render(_jsx(ProviderDialog, { providers: testProviders, currentProvider: "openai", onSelect: mockOnSelect, onClose: mockOnClose }));
|
144
|
+
const output = lastFrame();
|
145
|
+
// Should show selected provider with accent color (●)
|
146
|
+
expect(output).toMatch(/● openai/);
|
147
|
+
// Should show unselected providers with primary color (○)
|
148
|
+
expect(output).toMatch(/○ anthropic/);
|
149
|
+
});
|
150
|
+
});
|
151
|
+
});
|
152
|
+
});
|
153
|
+
//# sourceMappingURL=ProviderDialog.responsive.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ProviderDialog.responsive.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ProviderDialog.responsive.test.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, } from 'vitest';
|
9
|
+
import { ProviderModelDialog } from './ProviderModelDialog.js';
|
10
|
+
import { useTerminalSize } from '../hooks/useTerminalSize.js';
|
11
|
+
vi.mock('../hooks/useTerminalSize.js');
|
12
|
+
const testModels = [
|
13
|
+
{
|
14
|
+
id: 'gpt-4',
|
15
|
+
name: 'GPT-4',
|
16
|
+
provider: 'openai',
|
17
|
+
supportedToolFormats: ['openai'],
|
18
|
+
},
|
19
|
+
{
|
20
|
+
id: 'gpt-3.5-turbo',
|
21
|
+
name: 'GPT-3.5 Turbo',
|
22
|
+
provider: 'openai',
|
23
|
+
supportedToolFormats: ['openai'],
|
24
|
+
},
|
25
|
+
{
|
26
|
+
id: 'claude-3-opus-20240229',
|
27
|
+
name: 'Claude 3 Opus',
|
28
|
+
provider: 'anthropic',
|
29
|
+
supportedToolFormats: ['anthropic'],
|
30
|
+
},
|
31
|
+
{
|
32
|
+
id: 'claude-3-sonnet-20240229',
|
33
|
+
name: 'Claude 3 Sonnet',
|
34
|
+
provider: 'anthropic',
|
35
|
+
supportedToolFormats: ['anthropic'],
|
36
|
+
},
|
37
|
+
{
|
38
|
+
id: 'gemini-pro-very-long-model-name-that-should-be-truncated',
|
39
|
+
name: 'Gemini Pro Long',
|
40
|
+
provider: 'google',
|
41
|
+
supportedToolFormats: ['google'],
|
42
|
+
},
|
43
|
+
{
|
44
|
+
id: 'text-embedding-ada-002',
|
45
|
+
name: 'Ada Embedding',
|
46
|
+
provider: 'openai',
|
47
|
+
supportedToolFormats: ['openai'],
|
48
|
+
},
|
49
|
+
{
|
50
|
+
id: 'another-very-long-model-identifier-for-testing-truncation',
|
51
|
+
name: 'Long Model',
|
52
|
+
provider: 'test',
|
53
|
+
supportedToolFormats: ['test'],
|
54
|
+
},
|
55
|
+
];
|
56
|
+
describe('ProviderModelDialog Responsive Behavior', () => {
|
57
|
+
let mockUseTerminalSize;
|
58
|
+
const mockOnSelect = vi.fn();
|
59
|
+
const mockOnClose = vi.fn();
|
60
|
+
beforeEach(() => {
|
61
|
+
vi.clearAllMocks();
|
62
|
+
mockUseTerminalSize = useTerminalSize;
|
63
|
+
});
|
64
|
+
describe('NARROW width behavior (< 80 cols)', () => {
|
65
|
+
beforeEach(() => {
|
66
|
+
mockUseTerminalSize.mockReturnValue({ columns: 60, rows: 20 });
|
67
|
+
});
|
68
|
+
it('should prioritize search-first approach with help text below search', () => {
|
69
|
+
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
70
|
+
const output = lastFrame();
|
71
|
+
// Should prominently show search functionality
|
72
|
+
expect(output).toMatch(/search:/i);
|
73
|
+
expect(output).toContain('▌'); // Active search cursor
|
74
|
+
// Should show help text below search
|
75
|
+
expect(output).toMatch(/tab.*switch modes/i);
|
76
|
+
expect(output).toMatch(/enter.*select/i);
|
77
|
+
expect(output).toMatch(/esc.*cancel/i);
|
78
|
+
// Should have minimal borders to save space
|
79
|
+
expect(output).not.toMatch(/┌─+┐/); // No fancy borders or simpler borders
|
80
|
+
// Should show model IDs (may not be truncated at narrow width anymore)
|
81
|
+
expect(output).toContain('gemini-pro'); // Should show at least part of the model name
|
82
|
+
// Should show model results but prioritize search
|
83
|
+
expect(output).toContain('gpt-4');
|
84
|
+
expect(output).toContain('claude-3-opus');
|
85
|
+
});
|
86
|
+
it('should focus search over grid layout for narrow width', () => {
|
87
|
+
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-3.5-turbo", onSelect: mockOnSelect, onClose: mockOnClose }));
|
88
|
+
const output = lastFrame();
|
89
|
+
// Should not show complex multi-column layout
|
90
|
+
expect(output).not.toMatch(/├|┤|│.*│.*│/); // No multi-column separators
|
91
|
+
// Search should be the primary focus
|
92
|
+
expect(output).toMatch(/search:.*▌/);
|
93
|
+
// Should show models in simple list format (note: gpt-3.5-turbo is selected, hence ●)
|
94
|
+
expect(output).toMatch(/○ gpt-4/);
|
95
|
+
expect(output).toMatch(/● gpt-3.5-turbo/);
|
96
|
+
});
|
97
|
+
});
|
98
|
+
describe('STANDARD width behavior (80-120 cols)', () => {
|
99
|
+
beforeEach(() => {
|
100
|
+
mockUseTerminalSize.mockReturnValue({ columns: 100, rows: 20 });
|
101
|
+
});
|
102
|
+
it('should show condensed layout with abbreviated model descriptions', () => {
|
103
|
+
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "claude-3-opus-20240229", onSelect: mockOnSelect, onClose: mockOnClose }));
|
104
|
+
const output = lastFrame();
|
105
|
+
// Should have proper borders
|
106
|
+
expect(output).toMatch(/┌─+┐|╭─+╮/);
|
107
|
+
// Should show search but not as prominently
|
108
|
+
expect(output).toMatch(/search:/i);
|
109
|
+
// Should show model names (may not truncate anymore)
|
110
|
+
expect(output).toContain('gemini-pro'); // Should show model names
|
111
|
+
// Should show model grid in condensed form
|
112
|
+
expect(output).toContain('gpt-4');
|
113
|
+
expect(output).toContain('● claude-3-opus-20240229'); // Selected model
|
114
|
+
// Should show model count information
|
115
|
+
expect(output).toMatch(/found \d+ of \d+ models/i);
|
116
|
+
// Should have scrolling indicators if needed
|
117
|
+
expect(output).toMatch(/tab.*switch modes/i);
|
118
|
+
});
|
119
|
+
it('should balance search functionality with grid layout', () => {
|
120
|
+
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
121
|
+
const output = lastFrame();
|
122
|
+
// Should show both search and grid effectively
|
123
|
+
expect(output).toMatch(/search:.*▌/);
|
124
|
+
// Should have multi-column layout but condensed
|
125
|
+
const lines = output.split('\n');
|
126
|
+
const modelLines = lines.filter((line) => line.includes('○') || line.includes('●'));
|
127
|
+
expect(modelLines.length).toBeGreaterThan(2); // Multiple rows
|
128
|
+
// Should show current selection info
|
129
|
+
expect(output).toMatch(/● gpt-4/);
|
130
|
+
});
|
131
|
+
});
|
132
|
+
describe('WIDE width behavior (> 120 cols)', () => {
|
133
|
+
beforeEach(() => {
|
134
|
+
mockUseTerminalSize.mockReturnValue({ columns: 180, rows: 20 });
|
135
|
+
});
|
136
|
+
it('should show full layout with all model details visible', () => {
|
137
|
+
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "text-embedding-ada-002", onSelect: mockOnSelect, onClose: mockOnClose }));
|
138
|
+
const output = lastFrame();
|
139
|
+
// Should show full model names without truncation
|
140
|
+
expect(output).toContain('gemini-pro-very-long-model-name-that-should-be-truncated');
|
141
|
+
expect(output).toContain('another-very-long-model-identifier-for-testing-truncation');
|
142
|
+
// Should have full decorative borders
|
143
|
+
expect(output).toMatch(/┌─+┐|╭─+╮/);
|
144
|
+
// Should show comprehensive search interface
|
145
|
+
expect(output).toMatch(/search:.*▌/);
|
146
|
+
// Should show complete instructions (simplified check)
|
147
|
+
expect(output).toMatch(/tab.*switch modes/i);
|
148
|
+
expect(output).toMatch(/search models/i);
|
149
|
+
// Should show the selected model with ● marker
|
150
|
+
expect(output).toMatch(/● text-embedding-ada-002/);
|
151
|
+
// Should show model count information
|
152
|
+
expect(output).toMatch(/found \d+ of \d+ models/i);
|
153
|
+
});
|
154
|
+
it('should utilize full width for optimal model grid layout', () => {
|
155
|
+
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "claude-3-sonnet-20240229", onSelect: mockOnSelect, onClose: mockOnClose }));
|
156
|
+
const output = lastFrame();
|
157
|
+
// Should efficiently use wide layout for multiple columns
|
158
|
+
expect(output).toContain('● claude-3-sonnet-20240229');
|
159
|
+
// Should show all models with full names
|
160
|
+
expect(output).toContain('gpt-4');
|
161
|
+
expect(output).toContain('gpt-3.5-turbo');
|
162
|
+
expect(output).toContain('claude-3-opus-20240229');
|
163
|
+
// Should pack efficiently - fewer rows due to more columns
|
164
|
+
const lines = output.split('\n');
|
165
|
+
const contentLines = lines.filter((line) => line.includes('○') || line.includes('●'));
|
166
|
+
expect(contentLines.length).toBeLessThanOrEqual(4); // Efficient packing
|
167
|
+
});
|
168
|
+
it('should create proper fixed-width columns with consistent spacing', () => {
|
169
|
+
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
170
|
+
const output = lastFrame();
|
171
|
+
// Parse model grid lines to check column layout
|
172
|
+
const lines = output.split('\n');
|
173
|
+
const modelLines = lines.filter((line) => line.includes('○') || line.includes('●'));
|
174
|
+
if (modelLines.length > 0) {
|
175
|
+
// Each model line should have consistent column widths
|
176
|
+
// Models should be spaced with proper fixed-width columns, not just single spaces
|
177
|
+
const firstLine = modelLines[0];
|
178
|
+
// Should NOT have models separated by only single spaces (the zigzag issue)
|
179
|
+
// Instead should have proper column alignment
|
180
|
+
const modelMatches = firstLine.match(/[○●]\s+[^\s]+/g);
|
181
|
+
if (modelMatches && modelMatches.length > 1) {
|
182
|
+
// Check spacing between first two models on same line
|
183
|
+
const model1End = firstLine.indexOf(modelMatches[0]) + modelMatches[0].length;
|
184
|
+
const model2Start = firstLine.indexOf(modelMatches[1]);
|
185
|
+
const spacing = model2Start - model1End;
|
186
|
+
// Should have proper column spacing
|
187
|
+
expect(spacing).toBeGreaterThanOrEqual(2); // Fixed-width columns should have adequate spacing
|
188
|
+
}
|
189
|
+
}
|
190
|
+
});
|
191
|
+
});
|
192
|
+
describe('Search functionality across breakpoints', () => {
|
193
|
+
it('should maintain search functionality at all breakpoints', () => {
|
194
|
+
const widths = [60, 100, 180];
|
195
|
+
widths.forEach((width) => {
|
196
|
+
mockUseTerminalSize.mockReturnValue({ columns: width, rows: 20 });
|
197
|
+
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
198
|
+
const output = lastFrame();
|
199
|
+
// Search should be available at all breakpoints
|
200
|
+
expect(output).toMatch(/search:/i);
|
201
|
+
expect(output).toContain('▌'); // Search cursor
|
202
|
+
// Models should be visible
|
203
|
+
expect(output).toContain('gpt-4');
|
204
|
+
});
|
205
|
+
});
|
206
|
+
it('should show search results count at standard and wide breakpoints', () => {
|
207
|
+
// Standard width
|
208
|
+
mockUseTerminalSize.mockReturnValue({ columns: 100, rows: 20 });
|
209
|
+
let { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
210
|
+
expect(lastFrame()).toMatch(/found \d+ of \d+ models/i);
|
211
|
+
// Wide width
|
212
|
+
mockUseTerminalSize.mockReturnValue({ columns: 180, rows: 20 });
|
213
|
+
({ lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose })));
|
214
|
+
expect(lastFrame()).toMatch(/found \d+ of \d+ models/i);
|
215
|
+
});
|
216
|
+
});
|
217
|
+
describe('Responsive breakpoint transitions', () => {
|
218
|
+
it('should handle transitions between breakpoints correctly', () => {
|
219
|
+
// Test at NARROW/STANDARD boundary (80 cols)
|
220
|
+
mockUseTerminalSize.mockReturnValue({ columns: 80, rows: 20 });
|
221
|
+
const { lastFrame: standardFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
222
|
+
const standardOutput = standardFrame();
|
223
|
+
// At 80 columns, should be STANDARD behavior
|
224
|
+
expect(standardOutput).toMatch(/┌─+┐|╭─+╮/); // Should have borders
|
225
|
+
expect(standardOutput).toMatch(/found.*models/i); // Should show model count
|
226
|
+
// Test at STANDARD/WIDE boundary (120 cols)
|
227
|
+
mockUseTerminalSize.mockReturnValue({ columns: 120, rows: 20 });
|
228
|
+
const { lastFrame: wideFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
229
|
+
const wideOutput = wideFrame();
|
230
|
+
// At 120 columns, should be STANDARD (not WIDE yet)
|
231
|
+
expect(wideOutput).toContain('gemini-pro'); // Should show model name
|
232
|
+
});
|
233
|
+
});
|
234
|
+
describe('Semantic color preservation', () => {
|
235
|
+
it('should maintain semantic colors across all breakpoints', () => {
|
236
|
+
const widths = [60, 100, 180];
|
237
|
+
widths.forEach((width) => {
|
238
|
+
mockUseTerminalSize.mockReturnValue({ columns: width, rows: 20 });
|
239
|
+
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "claude-3-opus-20240229", onSelect: mockOnSelect, onClose: mockOnClose }));
|
240
|
+
const output = lastFrame();
|
241
|
+
// Should show selected model with accent color (●)
|
242
|
+
// Note: Model names might be truncated at narrow width
|
243
|
+
expect(output).toMatch(/● claude-3-opus/);
|
244
|
+
// Should show unselected models with appropriate colors (○)
|
245
|
+
expect(output).toMatch(/○ gpt-4/);
|
246
|
+
// Search cursor should use accent color
|
247
|
+
expect(output).toContain('▌');
|
248
|
+
});
|
249
|
+
});
|
250
|
+
});
|
251
|
+
});
|
252
|
+
//# sourceMappingURL=ProviderModelDialog.responsive.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ProviderModelDialog.responsive.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ProviderModelDialog.responsive.test.tsx"],"names":[],"mappings":"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"}
|