@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,431 @@
|
|
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 { setCommand } from './setCommand.js';
|
8
|
+
import { createMockCommandContext } from '../../test-utils/mockCommandContext.js';
|
9
|
+
// import { getProviderManager } from '../../providers/providerManagerInstance.js';
|
10
|
+
// Mock the provider manager module
|
11
|
+
vi.mock('../../providers/providerManagerInstance.js', () => ({
|
12
|
+
getProviderManager: vi.fn(),
|
13
|
+
}));
|
14
|
+
describe('setCommand', () => {
|
15
|
+
let context;
|
16
|
+
let mockProvider;
|
17
|
+
let mockProviderManager;
|
18
|
+
let mockConfig;
|
19
|
+
beforeEach(() => {
|
20
|
+
// Create a mock provider with setModelParams and getModelParams methods
|
21
|
+
mockProvider = {
|
22
|
+
name: 'test-provider',
|
23
|
+
getModels: vi.fn().mockResolvedValue([]),
|
24
|
+
generateChatCompletion: vi.fn(),
|
25
|
+
getDefaultModel: vi.fn().mockReturnValue('default'),
|
26
|
+
getServerTools: vi.fn().mockReturnValue([]),
|
27
|
+
invokeServerTool: vi.fn().mockResolvedValue(undefined),
|
28
|
+
setModelParams: vi.fn(),
|
29
|
+
getModelParams: vi.fn(),
|
30
|
+
};
|
31
|
+
// Create a mock provider manager
|
32
|
+
mockProviderManager = {
|
33
|
+
getActiveProvider: vi.fn().mockReturnValue(mockProvider),
|
34
|
+
};
|
35
|
+
// Create a mock config
|
36
|
+
mockConfig = {
|
37
|
+
getProviderManager: vi.fn().mockReturnValue(mockProviderManager),
|
38
|
+
setEphemeralSetting: vi.fn(),
|
39
|
+
getEphemeralSetting: vi.fn(() => undefined),
|
40
|
+
getEphemeralSettings: vi.fn(() => ({})),
|
41
|
+
getGeminiClient: vi.fn(() => ({
|
42
|
+
setCompressionSettings: vi.fn(),
|
43
|
+
})),
|
44
|
+
getSettingsService: vi.fn().mockReturnValue(null), // Return null to use fallback behavior
|
45
|
+
};
|
46
|
+
// Create context with the mock config
|
47
|
+
context = createMockCommandContext({
|
48
|
+
services: {
|
49
|
+
config: mockConfig,
|
50
|
+
},
|
51
|
+
});
|
52
|
+
});
|
53
|
+
it('should have correct metadata', () => {
|
54
|
+
expect(setCommand.name).toBe('set');
|
55
|
+
expect(setCommand.description).toBe('set model parameters or ephemeral settings');
|
56
|
+
});
|
57
|
+
it('should show usage when no arguments provided', async () => {
|
58
|
+
const result = await setCommand.action(context, '');
|
59
|
+
expect(result).toEqual({
|
60
|
+
type: 'message',
|
61
|
+
messageType: 'error',
|
62
|
+
content: 'Usage: /set <ephemeral-key> <value>\nExample: /set context-limit 100000\n\nFor model parameters use: /set modelparam <key> <value>',
|
63
|
+
});
|
64
|
+
});
|
65
|
+
it('should show usage when insufficient arguments provided', async () => {
|
66
|
+
const result = await setCommand.action(context, 'temperature');
|
67
|
+
expect(result).toEqual({
|
68
|
+
type: 'message',
|
69
|
+
messageType: 'error',
|
70
|
+
content: 'Usage: /set temperature <value>\n\nValid ephemeral keys:\n context-limit: Maximum number of tokens for the context window (e.g., 100000)\n compression-threshold: Fraction of context limit that triggers compression (0.0-1.0, e.g., 0.7 for 70%)\n base-url: Base URL for API requests\n tool-format: Tool format override for the provider\n api-version: API version to use\n custom-headers: Custom HTTP headers as JSON object\n stream-options: Stream options for OpenAI API (default: { include_usage: true })\n shell-replacement: Allow command substitution ($(), <(), backticks) in shell commands (default: false)\n tool-output-max-items: Maximum number of items/files/matches returned by tools (default: 50)\n tool-output-max-tokens: Maximum tokens in tool output (default: 50000)\n tool-output-truncate-mode: How to handle exceeding limits: warn, truncate, or sample (default: warn)\n tool-output-item-size-limit: Maximum size per item/file in bytes (default: 524288 = 512KB)\n max-prompt-tokens: Maximum tokens allowed in any prompt sent to LLM (default: 200000)\n emojifilter: Emoji filter mode (allowed, auto, warn, error)',
|
71
|
+
});
|
72
|
+
});
|
73
|
+
it('should set model parameter successfully', async () => {
|
74
|
+
const modelParamCommand = setCommand.subCommands[0];
|
75
|
+
const result = await modelParamCommand.action(context, 'temperature 0.7');
|
76
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
77
|
+
temperature: 0.7,
|
78
|
+
});
|
79
|
+
expect(result).toEqual({
|
80
|
+
type: 'message',
|
81
|
+
messageType: 'info',
|
82
|
+
content: "Model parameter 'temperature' set to 0.7 (use /profile save to persist)",
|
83
|
+
});
|
84
|
+
});
|
85
|
+
it('should show error for modelparam with insufficient arguments', async () => {
|
86
|
+
const modelParamCommand = setCommand.subCommands[0];
|
87
|
+
const result = await modelParamCommand.action(context, 'temperature');
|
88
|
+
expect(result).toEqual({
|
89
|
+
type: 'message',
|
90
|
+
messageType: 'error',
|
91
|
+
content: 'Usage: /set modelparam <key> <value>\nExample: /set modelparam temperature 0.7',
|
92
|
+
});
|
93
|
+
});
|
94
|
+
it('should set ephemeral setting successfully', async () => {
|
95
|
+
const result = await setCommand.action(context, 'context-limit 32000');
|
96
|
+
expect(mockConfig.setEphemeralSetting).toHaveBeenCalledWith('context-limit', 32000);
|
97
|
+
expect(result).toEqual({
|
98
|
+
type: 'message',
|
99
|
+
messageType: 'info',
|
100
|
+
content: "Ephemeral setting 'context-limit' set to 32000 (session only, use /profile save to persist)",
|
101
|
+
});
|
102
|
+
});
|
103
|
+
it('should show error for invalid ephemeral key', async () => {
|
104
|
+
const result = await setCommand.action(context, 'invalid-key some-value');
|
105
|
+
expect(result).toEqual({
|
106
|
+
type: 'message',
|
107
|
+
messageType: 'error',
|
108
|
+
content: 'Invalid setting key: invalid-key. Valid keys are: context-limit, compression-threshold, base-url, tool-format, api-version, custom-headers, stream-options, shell-replacement, tool-output-max-items, tool-output-max-tokens, tool-output-truncate-mode, tool-output-item-size-limit, max-prompt-tokens, emojifilter',
|
109
|
+
});
|
110
|
+
});
|
111
|
+
it('should handle multi-word JSON values correctly', async () => {
|
112
|
+
const result = await setCommand.action(context, 'custom-headers {"Authorization": "Bearer token"}');
|
113
|
+
expect(mockConfig.setEphemeralSetting).toHaveBeenCalledWith('custom-headers', {
|
114
|
+
Authorization: 'Bearer token',
|
115
|
+
});
|
116
|
+
expect(result).toEqual({
|
117
|
+
type: 'message',
|
118
|
+
messageType: 'info',
|
119
|
+
content: 'Ephemeral setting \'custom-headers\' set to {"Authorization":"Bearer token"} (session only, use /profile save to persist)',
|
120
|
+
});
|
121
|
+
});
|
122
|
+
describe('modelparam behavioral tests', () => {
|
123
|
+
it('should call provider.setModelParams with correct parameters', async () => {
|
124
|
+
const modelParamCommand = setCommand.subCommands[0];
|
125
|
+
const result = await modelParamCommand.action(context, 'temperature 0.7');
|
126
|
+
// Verify the calls
|
127
|
+
expect(mockConfig.getProviderManager).toHaveBeenCalled();
|
128
|
+
expect(mockProviderManager.getActiveProvider).toHaveBeenCalled();
|
129
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
130
|
+
temperature: 0.7,
|
131
|
+
});
|
132
|
+
// Verify success message
|
133
|
+
expect(result).toEqual({
|
134
|
+
type: 'message',
|
135
|
+
messageType: 'info',
|
136
|
+
content: "Model parameter 'temperature' set to 0.7 (use /profile save to persist)",
|
137
|
+
});
|
138
|
+
});
|
139
|
+
it('should show warning if provider does not support setModelParams', async () => {
|
140
|
+
// Create a provider without setModelParams method
|
141
|
+
const providerWithoutModelParams = {
|
142
|
+
name: 'basic-provider',
|
143
|
+
getModels: vi.fn().mockResolvedValue([]),
|
144
|
+
generateChatCompletion: vi.fn(),
|
145
|
+
getServerTools: vi.fn().mockReturnValue([]),
|
146
|
+
invokeServerTool: vi.fn().mockResolvedValue(undefined),
|
147
|
+
// No setModelParams method
|
148
|
+
};
|
149
|
+
mockProviderManager.getActiveProvider.mockReturnValue(providerWithoutModelParams);
|
150
|
+
const modelParamCommand = setCommand.subCommands[0];
|
151
|
+
const result = await modelParamCommand.action(context, 'temperature 0.7');
|
152
|
+
expect(result).toEqual({
|
153
|
+
type: 'message',
|
154
|
+
messageType: 'error',
|
155
|
+
content: "Provider 'basic-provider' does not support model parameters",
|
156
|
+
});
|
157
|
+
});
|
158
|
+
it('should parse numeric values correctly for temperature', async () => {
|
159
|
+
const modelParamCommand = setCommand.subCommands[0];
|
160
|
+
await modelParamCommand.action(context, 'temperature 0.95');
|
161
|
+
// Verify it was called with a number, not a string
|
162
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
163
|
+
temperature: 0.95,
|
164
|
+
});
|
165
|
+
expect(mockProvider.setModelParams).not.toHaveBeenCalledWith({
|
166
|
+
temperature: '0.95',
|
167
|
+
});
|
168
|
+
});
|
169
|
+
it('should parse integer values correctly for max_tokens', async () => {
|
170
|
+
const modelParamCommand = setCommand.subCommands[0];
|
171
|
+
await modelParamCommand.action(context, 'max_tokens 4096');
|
172
|
+
// Verify it was called with a number
|
173
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
174
|
+
max_tokens: 4096,
|
175
|
+
});
|
176
|
+
expect(typeof mockProvider.setModelParams.mock.calls[0][0].max_tokens).toBe('number');
|
177
|
+
});
|
178
|
+
it('should handle multiple modelparams being set sequentially', async () => {
|
179
|
+
const modelParamCommand = setCommand.subCommands[0];
|
180
|
+
// Set temperature first
|
181
|
+
await modelParamCommand.action(context, 'temperature 0.7');
|
182
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
183
|
+
temperature: 0.7,
|
184
|
+
});
|
185
|
+
// Set max_tokens second
|
186
|
+
await modelParamCommand.action(context, 'max_tokens 2048');
|
187
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
188
|
+
max_tokens: 2048,
|
189
|
+
});
|
190
|
+
// Verify both calls were made independently
|
191
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledTimes(2);
|
192
|
+
});
|
193
|
+
it('should handle string values without parsing', async () => {
|
194
|
+
const modelParamCommand = setCommand.subCommands[0];
|
195
|
+
await modelParamCommand.action(context, 'model gpt-4-turbo');
|
196
|
+
// Verify it was called with a string
|
197
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
198
|
+
model: 'gpt-4-turbo',
|
199
|
+
});
|
200
|
+
expect(typeof mockProvider.setModelParams.mock.calls[0][0].model).toBe('string');
|
201
|
+
});
|
202
|
+
it('should handle JSON values for complex parameters', async () => {
|
203
|
+
const modelParamCommand = setCommand.subCommands[0];
|
204
|
+
await modelParamCommand.action(context, 'response_format {"type":"json_object"}');
|
205
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
206
|
+
response_format: { type: 'json_object' },
|
207
|
+
});
|
208
|
+
});
|
209
|
+
});
|
210
|
+
describe('ephemeral settings behavioral tests', () => {
|
211
|
+
it('should store context-limit as ephemeral setting', async () => {
|
212
|
+
const result = await setCommand.action(context, 'context-limit 32000');
|
213
|
+
expect(result).toEqual({
|
214
|
+
type: 'message',
|
215
|
+
messageType: 'info',
|
216
|
+
content: "Ephemeral setting 'context-limit' set to 32000 (session only, use /profile save to persist)",
|
217
|
+
});
|
218
|
+
});
|
219
|
+
it('should store compression-threshold as ephemeral setting', async () => {
|
220
|
+
// Valid value
|
221
|
+
const result = await setCommand.action(context, 'compression-threshold 0.8');
|
222
|
+
expect(result).toEqual({
|
223
|
+
type: 'message',
|
224
|
+
messageType: 'info',
|
225
|
+
content: "Ephemeral setting 'compression-threshold' set to 0.8 (session only, use /profile save to persist)",
|
226
|
+
});
|
227
|
+
// Note: Validation of compression-threshold range should be done when the value is used,
|
228
|
+
// not when it's set, as we're just storing ephemeral settings for now
|
229
|
+
});
|
230
|
+
it('should store auth-key as ephemeral setting', async () => {
|
231
|
+
const result = await setCommand.action(context, 'auth-key sk-1234567890');
|
232
|
+
expect(result).toEqual({
|
233
|
+
type: 'message',
|
234
|
+
messageType: 'error',
|
235
|
+
content: 'Invalid setting key: auth-key. Valid keys are: context-limit, compression-threshold, base-url, tool-format, api-version, custom-headers, stream-options, shell-replacement, tool-output-max-items, tool-output-max-tokens, tool-output-truncate-mode, tool-output-item-size-limit, max-prompt-tokens, emojifilter',
|
236
|
+
});
|
237
|
+
});
|
238
|
+
it('should store auth-keyfile path as ephemeral setting', async () => {
|
239
|
+
const result = await setCommand.action(context, 'auth-keyfile ~/.keys/api-key');
|
240
|
+
expect(result).toEqual({
|
241
|
+
type: 'message',
|
242
|
+
messageType: 'error',
|
243
|
+
content: 'Invalid setting key: auth-keyfile. Valid keys are: context-limit, compression-threshold, base-url, tool-format, api-version, custom-headers, stream-options, shell-replacement, tool-output-max-items, tool-output-max-tokens, tool-output-truncate-mode, tool-output-item-size-limit, max-prompt-tokens, emojifilter',
|
244
|
+
});
|
245
|
+
});
|
246
|
+
it('should store base-url as ephemeral setting', async () => {
|
247
|
+
const result = await setCommand.action(context, 'base-url http://localhost:8080/v1');
|
248
|
+
expect(result).toEqual({
|
249
|
+
type: 'message',
|
250
|
+
messageType: 'info',
|
251
|
+
content: 'Ephemeral setting \'base-url\' set to "http://localhost:8080/v1" (session only, use /profile save to persist)',
|
252
|
+
});
|
253
|
+
});
|
254
|
+
it('should store custom-headers as JSON', async () => {
|
255
|
+
const result = await setCommand.action(context, 'custom-headers {"Authorization":"Bearer token","X-Custom":"value"}');
|
256
|
+
expect(result).toEqual({
|
257
|
+
type: 'message',
|
258
|
+
messageType: 'info',
|
259
|
+
content: 'Ephemeral setting \'custom-headers\' set to {"Authorization":"Bearer token","X-Custom":"value"} (session only, use /profile save to persist)',
|
260
|
+
});
|
261
|
+
});
|
262
|
+
it('should store tool-output-max-items as ephemeral setting', async () => {
|
263
|
+
const result = await setCommand.action(context, 'tool-output-max-items 100');
|
264
|
+
expect(mockConfig.setEphemeralSetting).toHaveBeenCalledWith('tool-output-max-items', 100);
|
265
|
+
expect(result).toEqual({
|
266
|
+
type: 'message',
|
267
|
+
messageType: 'info',
|
268
|
+
content: "Ephemeral setting 'tool-output-max-items' set to 100 (session only, use /profile save to persist)",
|
269
|
+
});
|
270
|
+
});
|
271
|
+
it('should store tool-output-max-tokens as ephemeral setting', async () => {
|
272
|
+
const result = await setCommand.action(context, 'tool-output-max-tokens 75000');
|
273
|
+
expect(mockConfig.setEphemeralSetting).toHaveBeenCalledWith('tool-output-max-tokens', 75000);
|
274
|
+
expect(result).toEqual({
|
275
|
+
type: 'message',
|
276
|
+
messageType: 'info',
|
277
|
+
content: "Ephemeral setting 'tool-output-max-tokens' set to 75000 (session only, use /profile save to persist)",
|
278
|
+
});
|
279
|
+
});
|
280
|
+
it('should store tool-output-truncate-mode as ephemeral setting', async () => {
|
281
|
+
const result = await setCommand.action(context, 'tool-output-truncate-mode truncate');
|
282
|
+
expect(mockConfig.setEphemeralSetting).toHaveBeenCalledWith('tool-output-truncate-mode', 'truncate');
|
283
|
+
expect(result).toEqual({
|
284
|
+
type: 'message',
|
285
|
+
messageType: 'info',
|
286
|
+
content: 'Ephemeral setting \'tool-output-truncate-mode\' set to "truncate" (session only, use /profile save to persist)',
|
287
|
+
});
|
288
|
+
});
|
289
|
+
it('should validate tool-output-truncate-mode values', async () => {
|
290
|
+
const result = await setCommand.action(context, 'tool-output-truncate-mode invalid-mode');
|
291
|
+
expect(result).toEqual({
|
292
|
+
type: 'message',
|
293
|
+
messageType: 'error',
|
294
|
+
content: 'tool-output-truncate-mode must be one of: warn, truncate, sample',
|
295
|
+
});
|
296
|
+
});
|
297
|
+
it('should store tool-output-item-size-limit as ephemeral setting', async () => {
|
298
|
+
const result = await setCommand.action(context, 'tool-output-item-size-limit 1048576');
|
299
|
+
expect(mockConfig.setEphemeralSetting).toHaveBeenCalledWith('tool-output-item-size-limit', 1048576);
|
300
|
+
expect(result).toEqual({
|
301
|
+
type: 'message',
|
302
|
+
messageType: 'info',
|
303
|
+
content: "Ephemeral setting 'tool-output-item-size-limit' set to 1048576 (session only, use /profile save to persist)",
|
304
|
+
});
|
305
|
+
});
|
306
|
+
it('should store max-prompt-tokens as ephemeral setting', async () => {
|
307
|
+
const result = await setCommand.action(context, 'max-prompt-tokens 150000');
|
308
|
+
expect(mockConfig.setEphemeralSetting).toHaveBeenCalledWith('max-prompt-tokens', 150000);
|
309
|
+
expect(result).toEqual({
|
310
|
+
type: 'message',
|
311
|
+
messageType: 'info',
|
312
|
+
content: "Ephemeral setting 'max-prompt-tokens' set to 150000 (session only, use /profile save to persist)",
|
313
|
+
});
|
314
|
+
});
|
315
|
+
it('should store stream-options as ephemeral setting', async () => {
|
316
|
+
const result = await setCommand.action(context, 'stream-options {"include_usage":true}');
|
317
|
+
expect(mockConfig.setEphemeralSetting).toHaveBeenCalledWith('stream-options', { include_usage: true });
|
318
|
+
expect(result).toEqual({
|
319
|
+
type: 'message',
|
320
|
+
messageType: 'info',
|
321
|
+
content: 'Ephemeral setting \'stream-options\' set to {"include_usage":true} (session only, use /profile save to persist)',
|
322
|
+
});
|
323
|
+
});
|
324
|
+
it('should store stream-options as null when set to null', async () => {
|
325
|
+
const result = await setCommand.action(context, 'stream-options null');
|
326
|
+
expect(mockConfig.setEphemeralSetting).toHaveBeenCalledWith('stream-options', null);
|
327
|
+
expect(result).toEqual({
|
328
|
+
type: 'message',
|
329
|
+
messageType: 'info',
|
330
|
+
content: "Ephemeral setting 'stream-options' set to null (session only, use /profile save to persist)",
|
331
|
+
});
|
332
|
+
});
|
333
|
+
it('should validate numeric tool-output settings', async () => {
|
334
|
+
// Test non-numeric value
|
335
|
+
const result = await setCommand.action(context, 'tool-output-max-items not-a-number');
|
336
|
+
expect(result).toEqual({
|
337
|
+
type: 'message',
|
338
|
+
messageType: 'error',
|
339
|
+
content: 'tool-output-max-items must be a positive integer',
|
340
|
+
});
|
341
|
+
// Test negative value
|
342
|
+
const result2 = await setCommand.action(context, 'tool-output-max-tokens -100');
|
343
|
+
expect(result2).toEqual({
|
344
|
+
type: 'message',
|
345
|
+
messageType: 'error',
|
346
|
+
content: 'tool-output-max-tokens must be a positive integer',
|
347
|
+
});
|
348
|
+
// Test non-integer value
|
349
|
+
const result3 = await setCommand.action(context, 'max-prompt-tokens 100.5');
|
350
|
+
expect(result3).toEqual({
|
351
|
+
type: 'message',
|
352
|
+
messageType: 'error',
|
353
|
+
content: 'max-prompt-tokens must be a positive integer',
|
354
|
+
});
|
355
|
+
});
|
356
|
+
});
|
357
|
+
describe('error handling behavioral tests', () => {
|
358
|
+
it('should handle invalid JSON gracefully', async () => {
|
359
|
+
// When value looks like JSON but isn't valid, it's treated as a string
|
360
|
+
const modelParamCommand = setCommand.subCommands[0];
|
361
|
+
const result = await modelParamCommand.action(context, 'response_format {invalid json}');
|
362
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
363
|
+
response_format: '{invalid json}',
|
364
|
+
});
|
365
|
+
expect(result).toEqual({
|
366
|
+
type: 'message',
|
367
|
+
messageType: 'info',
|
368
|
+
content: 'Model parameter \'response_format\' set to "{invalid json}" (use /profile save to persist)',
|
369
|
+
});
|
370
|
+
});
|
371
|
+
it('should handle provider errors gracefully', async () => {
|
372
|
+
mockProvider.setModelParams = vi.fn().mockImplementation(() => {
|
373
|
+
throw new Error('Provider error');
|
374
|
+
});
|
375
|
+
const modelParamCommand = setCommand.subCommands[0];
|
376
|
+
const result = await modelParamCommand.action(context, 'temperature 0.7');
|
377
|
+
expect(result).toEqual({
|
378
|
+
type: 'message',
|
379
|
+
messageType: 'error',
|
380
|
+
content: 'Failed to set model parameter: Provider error',
|
381
|
+
});
|
382
|
+
});
|
383
|
+
it('should handle missing config gracefully', async () => {
|
384
|
+
context.services.config = null;
|
385
|
+
const modelParamCommand = setCommand.subCommands[0];
|
386
|
+
const result = await modelParamCommand.action(context, 'temperature 0.7');
|
387
|
+
expect(result).toEqual({
|
388
|
+
type: 'message',
|
389
|
+
messageType: 'error',
|
390
|
+
content: 'No configuration available',
|
391
|
+
});
|
392
|
+
});
|
393
|
+
});
|
394
|
+
describe('value parsing behavioral tests', () => {
|
395
|
+
it('should parse boolean values correctly', async () => {
|
396
|
+
const modelParamCommand = setCommand.subCommands[0];
|
397
|
+
await modelParamCommand.action(context, 'stream true');
|
398
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
399
|
+
stream: true,
|
400
|
+
});
|
401
|
+
expect(typeof mockProvider.setModelParams.mock.calls[0][0].stream).toBe('boolean');
|
402
|
+
// Test false as well
|
403
|
+
await modelParamCommand.action(context, 'stream false');
|
404
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
405
|
+
stream: false,
|
406
|
+
});
|
407
|
+
});
|
408
|
+
it('should handle null values', async () => {
|
409
|
+
const modelParamCommand = setCommand.subCommands[0];
|
410
|
+
await modelParamCommand.action(context, 'stop null');
|
411
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({ stop: null });
|
412
|
+
});
|
413
|
+
it('should preserve string values that look like numbers', async () => {
|
414
|
+
// Quoted values are parsed as JSON, which preserves them as strings
|
415
|
+
const modelParamCommand = setCommand.subCommands[0];
|
416
|
+
await modelParamCommand.action(context, 'api_version "2023-05-15"');
|
417
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
418
|
+
api_version: '2023-05-15',
|
419
|
+
});
|
420
|
+
expect(typeof mockProvider.setModelParams.mock.calls[0][0].api_version).toBe('string');
|
421
|
+
});
|
422
|
+
it('should handle array values', async () => {
|
423
|
+
const modelParamCommand = setCommand.subCommands[0];
|
424
|
+
await modelParamCommand.action(context, 'stop ["\\n","END"]');
|
425
|
+
expect(mockProvider.setModelParams).toHaveBeenCalledWith({
|
426
|
+
stop: ['\n', 'END'],
|
427
|
+
});
|
428
|
+
});
|
429
|
+
});
|
430
|
+
});
|
431
|
+
//# sourceMappingURL=setCommand.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"setCommand.test.js","sourceRoot":"","sources":["../../../../src/ui/commands/setCommand.test.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
/**
|
2
|
+
* @license
|
3
|
+
* Copyright 2025 Google LLC
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
5
|
+
*/
|
6
|
+
import { vi, describe, expect, it, afterEach, beforeEach } from 'vitest';
|
7
|
+
import * as gitUtils from '../../utils/gitUtils.js';
|
8
|
+
import { setupGithubCommand } from './setupGithubCommand.js';
|
9
|
+
vi.mock('child_process');
|
10
|
+
// Mock fetch globally
|
11
|
+
global.fetch = vi.fn();
|
12
|
+
vi.mock('../../utils/gitUtils.js', () => ({
|
13
|
+
isGitHubRepository: vi.fn(),
|
14
|
+
getGitRepoRoot: vi.fn(),
|
15
|
+
getLatestGitHubRelease: vi.fn(),
|
16
|
+
getGitHubRepoInfo: vi.fn(),
|
17
|
+
}));
|
18
|
+
describe('setupGithubCommand', async () => {
|
19
|
+
beforeEach(() => {
|
20
|
+
vi.resetAllMocks();
|
21
|
+
});
|
22
|
+
afterEach(() => {
|
23
|
+
vi.restoreAllMocks();
|
24
|
+
});
|
25
|
+
it('returns a message indicating the command is disabled', () => {
|
26
|
+
const result = setupGithubCommand.action?.({}, '');
|
27
|
+
expect(result.type).toBe('message');
|
28
|
+
expect(result.messageType).toBe('info');
|
29
|
+
expect(result.content).toContain('currently disabled');
|
30
|
+
expect(result.content).toContain('llxprt-code');
|
31
|
+
expect(result.content).toContain('multi-provider');
|
32
|
+
});
|
33
|
+
// TODO: Re-enable these tests when the command is adapted for llxprt
|
34
|
+
it.skip('returns a tool action to download github workflows and handles paths', async () => {
|
35
|
+
const fakeRepoOwner = 'fake';
|
36
|
+
const fakeRepoName = 'repo';
|
37
|
+
const fakeRepoRoot = `/github.com/${fakeRepoOwner}/${fakeRepoName}/root`;
|
38
|
+
const fakeReleaseVersion = 'v1.2.3';
|
39
|
+
vi.mocked(gitUtils.isGitHubRepository).mockReturnValueOnce(true);
|
40
|
+
vi.mocked(gitUtils.getGitRepoRoot).mockReturnValueOnce(fakeRepoRoot);
|
41
|
+
vi.mocked(gitUtils.getLatestGitHubRelease).mockResolvedValueOnce(fakeReleaseVersion);
|
42
|
+
vi.mocked(gitUtils.getGitHubRepoInfo).mockReturnValue({
|
43
|
+
owner: fakeRepoOwner,
|
44
|
+
repo: fakeRepoName,
|
45
|
+
});
|
46
|
+
const result = (await setupGithubCommand.action?.({}, ''));
|
47
|
+
const { command } = result.toolArgs;
|
48
|
+
// TODO: Update these expectations for llxprt workflows
|
49
|
+
const expectedSubstrings = [
|
50
|
+
`set -eEuo pipefail`,
|
51
|
+
`mkdir -p "${fakeRepoRoot}/.github/workflows"`,
|
52
|
+
`curl --fail --location --output "/github.com/fake/repo/root/.github/workflows/llxprt-cli.yml" --show-error --silent`,
|
53
|
+
`curl --fail --location --output "/github.com/fake/repo/root/.github/workflows/llxprt-issue-automated-triage.yml" --show-error --silent`,
|
54
|
+
`curl --fail --location --output "/github.com/fake/repo/root/.github/workflows/llxprt-issue-scheduled-triage.yml" --show-error --silent`,
|
55
|
+
`curl --fail --location --output "/github.com/fake/repo/root/.github/workflows/llxprt-pr-review.yml" --show-error --silent`,
|
56
|
+
`https://raw.githubusercontent.com/acoliver/run-llxprt-code/refs/tags/`,
|
57
|
+
];
|
58
|
+
for (const substring of expectedSubstrings) {
|
59
|
+
expect(command).toContain(substring);
|
60
|
+
}
|
61
|
+
});
|
62
|
+
it.skip('throws an error if git root cannot be determined', () => {
|
63
|
+
vi.mocked(gitUtils.isGitHubRepository).mockReturnValueOnce(false);
|
64
|
+
expect(() => {
|
65
|
+
setupGithubCommand.action?.({}, '');
|
66
|
+
}).toThrow('Unable to determine the GitHub repository. /setup-github must be run from a git repository.');
|
67
|
+
});
|
68
|
+
});
|
69
|
+
//# sourceMappingURL=setupGithubCommand.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"setupGithubCommand.test.js","sourceRoot":"","sources":["../../../../src/ui/commands/setupGithubCommand.test.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|