@blackbox_ai/blackbox-cli 0.0.7 → 0.8.1
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 +11 -183
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/package.json +13 -3
- package/dist/src/built-in-extensions/conductor/README.md +242 -0
- package/dist/src/built-in-extensions/conductor/blackbox-extension.json +5 -0
- package/dist/src/built-in-extensions/conductor/commands/conductor/implement.toml +170 -0
- package/dist/src/built-in-extensions/conductor/commands/conductor/newTrack.toml +142 -0
- package/dist/src/built-in-extensions/conductor/commands/conductor/revert.toml +122 -0
- package/dist/src/built-in-extensions/conductor/commands/conductor/setup.toml +424 -0
- package/dist/src/built-in-extensions/conductor/commands/conductor/status.toml +57 -0
- package/dist/src/built-in-extensions/conductor/templates/code_styleguides/general.md +23 -0
- package/dist/src/built-in-extensions/conductor/templates/code_styleguides/go.md +48 -0
- package/dist/src/built-in-extensions/conductor/templates/code_styleguides/html-css.md +49 -0
- package/dist/src/built-in-extensions/conductor/templates/code_styleguides/javascript.md +51 -0
- package/dist/src/built-in-extensions/conductor/templates/code_styleguides/python.md +37 -0
- package/dist/src/built-in-extensions/conductor/templates/code_styleguides/typescript.md +43 -0
- package/dist/src/built-in-extensions/conductor/templates/workflow.md +333 -0
- package/dist/src/built-in-extensions-data.d.ts +15 -0
- package/dist/src/built-in-extensions-data.js +61 -0
- package/dist/src/built-in-extensions-data.js.map +1 -0
- package/dist/src/commands/configure/ConfigureUI.d.ts +14 -0
- package/dist/src/commands/configure/ConfigureUI.js +556 -0
- package/dist/src/commands/configure/ConfigureUI.js.map +1 -0
- package/dist/src/commands/configure/index.d.ts +7 -0
- package/dist/src/commands/configure/index.js +62 -0
- package/dist/src/commands/configure/index.js.map +1 -0
- package/dist/src/commands/configure.d.ts +7 -0
- package/dist/src/commands/configure.js +276 -0
- package/dist/src/commands/configure.js.map +1 -0
- package/dist/src/commands/configure.test.d.ts +6 -0
- package/dist/src/commands/configure.test.js +32 -0
- package/dist/src/commands/configure.test.js.map +1 -0
- package/dist/src/commands/extensions/enable.js +1 -1
- package/dist/src/commands/extensions/enable.js.map +1 -1
- package/dist/src/commands/extensions/examples/context/CONTEXT.md +16 -0
- package/dist/src/commands/extensions/examples/context/blackbox-extension.json +5 -0
- package/dist/src/commands/extensions/examples/custom-commands/blackbox-extension.json +4 -0
- package/dist/src/commands/extensions/examples/custom-commands/commands/deploy.toml +12 -0
- package/dist/src/commands/extensions/examples/exclude-tools/README.md +28 -0
- package/dist/src/commands/extensions/examples/exclude-tools/blackbox-extension.json +5 -0
- package/dist/src/commands/extensions/install.d.ts +6 -2
- package/dist/src/commands/extensions/install.js +109 -15
- package/dist/src/commands/extensions/install.js.map +1 -1
- package/dist/src/commands/extensions/link.d.ts +12 -0
- package/dist/src/commands/extensions/link.js +53 -0
- package/dist/src/commands/extensions/link.js.map +1 -0
- package/dist/src/commands/extensions/list.js +2 -2
- package/dist/src/commands/extensions/list.js.map +1 -1
- package/dist/src/commands/extensions/new.d.ts +13 -0
- package/dist/src/commands/extensions/new.js +145 -0
- package/dist/src/commands/extensions/new.js.map +1 -0
- package/dist/src/commands/extensions/settings.d.ts +18 -0
- package/dist/src/commands/extensions/settings.js +98 -0
- package/dist/src/commands/extensions/settings.js.map +1 -0
- package/dist/src/commands/extensions/update.d.ts +2 -1
- package/dist/src/commands/extensions/update.js +59 -10
- package/dist/src/commands/extensions/update.js.map +1 -1
- package/dist/src/commands/extensions/validate.d.ts +12 -0
- package/dist/src/commands/extensions/validate.js +72 -0
- package/dist/src/commands/extensions/validate.js.map +1 -0
- package/dist/src/commands/extensions.js +10 -1
- package/dist/src/commands/extensions.js.map +1 -1
- package/dist/src/commands/mcp/add.d.ts +11 -0
- package/dist/src/commands/mcp/add.js +61 -7
- package/dist/src/commands/mcp/add.js.map +1 -1
- package/dist/src/commands/update.d.ts +7 -0
- package/dist/src/commands/update.js +103 -0
- package/dist/src/commands/update.js.map +1 -0
- package/dist/src/commands/voice.d.ts +7 -0
- package/dist/src/commands/voice.js +510 -0
- package/dist/src/commands/voice.js.map +1 -0
- package/dist/src/config/auth.d.ts +32 -1
- package/dist/src/config/auth.js +317 -2
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/config.d.ts +7 -1
- package/dist/src/config/config.js +71 -10
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension.d.ts +6 -1
- package/dist/src/config/extension.js +137 -11
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/extensions/github.d.ts +48 -0
- package/dist/src/config/extensions/github.js +308 -0
- package/dist/src/config/extensions/github.js.map +1 -0
- package/dist/src/config/keyBindings.d.ts +1 -0
- package/dist/src/config/keyBindings.js +3 -0
- package/dist/src/config/keyBindings.js.map +1 -1
- package/dist/src/config/modelFetcher.d.ts +21 -0
- package/dist/src/config/modelFetcher.js +226 -0
- package/dist/src/config/modelFetcher.js.map +1 -0
- package/dist/src/config/settings.js +101 -0
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +626 -0
- package/dist/src/config/settingsSchema.js +626 -0
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/voice.d.ts +31 -0
- package/dist/src/config/voice.js +82 -0
- package/dist/src/config/voice.js.map +1 -0
- package/dist/src/encrypt/attestation.d.ts +5 -0
- package/dist/src/encrypt/attestation.js +100 -0
- package/dist/src/encrypt/attestation.js.map +1 -0
- package/dist/src/encrypt/bridge.d.ts +30 -0
- package/dist/src/encrypt/bridge.js +32 -0
- package/dist/src/encrypt/bridge.js.map +1 -0
- package/dist/src/encrypt/client.d.ts +14 -0
- package/dist/src/encrypt/client.js +133 -0
- package/dist/src/encrypt/client.js.map +1 -0
- package/dist/src/encrypt/config.d.ts +26 -0
- package/dist/src/encrypt/config.js +51 -0
- package/dist/src/encrypt/config.js.map +1 -0
- package/dist/src/encrypt/crypto-utils.d.ts +57 -0
- package/dist/src/encrypt/crypto-utils.js +257 -0
- package/dist/src/encrypt/crypto-utils.js.map +1 -0
- package/dist/src/encrypt/index.d.ts +12 -0
- package/dist/src/encrypt/index.js +13 -0
- package/dist/src/encrypt/index.js.map +1 -0
- package/dist/src/encrypt/retry-utils.d.ts +20 -0
- package/dist/src/encrypt/retry-utils.js +60 -0
- package/dist/src/encrypt/retry-utils.js.map +1 -0
- package/dist/src/encrypt/sessions.d.ts +17 -0
- package/dist/src/encrypt/sessions.js +221 -0
- package/dist/src/encrypt/sessions.js.map +1 -0
- package/dist/src/encrypt/streaming-client.d.ts +29 -0
- package/dist/src/encrypt/streaming-client.js +226 -0
- package/dist/src/encrypt/streaming-client.js.map +1 -0
- package/dist/src/encrypt/types.d.ts +81 -0
- package/dist/src/encrypt/types.js +2 -0
- package/dist/src/encrypt/types.js.map +1 -0
- package/dist/src/gemini.d.ts +1 -1
- package/dist/src/gemini.js +61 -28
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +3 -3
- package/dist/src/generated/git-commit.js +3 -3
- package/dist/src/nonInteractiveCli.d.ts +4 -0
- package/dist/src/nonInteractiveCli.js +563 -6
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/on-demand-extensions/README.md +266 -0
- package/dist/src/on-demand-extensions/git-helper/README.md +16 -0
- package/dist/src/on-demand-extensions/git-helper/blackbox-extension.json +5 -0
- package/dist/src/on-demand-extensions/git-helper/commands/git/branch-cleanup.toml +18 -0
- package/dist/src/on-demand-extensions/git-helper/commands/git/smart-commit.toml +22 -0
- package/dist/src/on-demand-extensions/greet/README.md +76 -0
- package/dist/src/on-demand-extensions/greet/blackbox-extension.json +5 -0
- package/dist/src/on-demand-extensions/greet/commands/greet/hello.toml +9 -0
- package/dist/src/on-demand-extensions/registry.json +251 -0
- package/dist/src/services/BuiltinCommandLoader.js +20 -2
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/EncryptedContentGenerator.d.ts +63 -0
- package/dist/src/services/EncryptedContentGenerator.js +426 -0
- package/dist/src/services/EncryptedContentGenerator.js.map +1 -0
- package/dist/src/services/McpCommandLoader.d.ts +24 -0
- package/dist/src/services/McpCommandLoader.js +50 -0
- package/dist/src/services/McpCommandLoader.js.map +1 -0
- package/dist/src/services/McpPromptLoader.js +17 -2
- package/dist/src/services/McpPromptLoader.js.map +1 -1
- package/dist/src/services/ReleaseNotesCache.d.ts +57 -0
- package/dist/src/services/ReleaseNotesCache.js +186 -0
- package/dist/src/services/ReleaseNotesCache.js.map +1 -0
- package/dist/src/services/elevenLabsErrors.d.ts +65 -0
- package/dist/src/services/elevenLabsErrors.js +233 -0
- package/dist/src/services/elevenLabsErrors.js.map +1 -0
- package/dist/src/services/elevenLabsService.d.ts +62 -0
- package/dist/src/services/elevenLabsService.js +186 -0
- package/dist/src/services/elevenLabsService.js.map +1 -0
- package/dist/src/services/elevenLabsStreamingService.d.ts +59 -0
- package/dist/src/services/elevenLabsStreamingService.js +202 -0
- package/dist/src/services/elevenLabsStreamingService.js.map +1 -0
- package/dist/src/services/elevenLabsTokenService.d.ts +21 -0
- package/dist/src/services/elevenLabsTokenService.js +42 -0
- package/dist/src/services/elevenLabsTokenService.js.map +1 -0
- package/dist/src/services/voiceInputHandler.d.ts +26 -0
- package/dist/src/services/voiceInputHandler.js +209 -0
- package/dist/src/services/voiceInputHandler.js.map +1 -0
- package/dist/src/services/voiceRecordingService.d.ts +69 -0
- package/dist/src/services/voiceRecordingService.js +397 -0
- package/dist/src/services/voiceRecordingService.js.map +1 -0
- package/dist/src/ui/App.d.ts +1 -0
- package/dist/src/ui/App.js +412 -63
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/commands/browseExtensionsCommand.d.ts +7 -0
- package/dist/src/ui/commands/browseExtensionsCommand.js +16 -0
- package/dist/src/ui/commands/browseExtensionsCommand.js.map +1 -0
- package/dist/src/ui/commands/chatCommand.js +356 -16
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/dbCommand.d.ts +7 -0
- package/dist/src/ui/commands/dbCommand.js +37 -0
- package/dist/src/ui/commands/dbCommand.js.map +1 -0
- package/dist/src/ui/commands/docsCommand.js +1 -1
- package/dist/src/ui/commands/docsCommand.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.js +3 -2
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/mcpInvokeCommand.d.ts +16 -0
- package/dist/src/ui/commands/mcpInvokeCommand.js +263 -0
- package/dist/src/ui/commands/mcpInvokeCommand.js.map +1 -0
- package/dist/src/ui/commands/modelCommand.js +79 -5
- package/dist/src/ui/commands/modelCommand.js.map +1 -1
- package/dist/src/ui/commands/multiAgentCommand.d.ts +7 -0
- package/dist/src/ui/commands/multiAgentCommand.js +833 -0
- package/dist/src/ui/commands/multiAgentCommand.js.map +1 -0
- package/dist/src/ui/commands/multiAgentConfigureCommand.d.ts +7 -0
- package/dist/src/ui/commands/multiAgentConfigureCommand.js +17 -0
- package/dist/src/ui/commands/multiAgentConfigureCommand.js.map +1 -0
- package/dist/src/ui/commands/quitCommand.js +71 -2
- package/dist/src/ui/commands/quitCommand.js.map +1 -1
- package/dist/src/ui/commands/releasesCommand.d.ts +7 -0
- package/dist/src/ui/commands/releasesCommand.js +16 -0
- package/dist/src/ui/commands/releasesCommand.js.map +1 -0
- package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
- package/dist/src/ui/commands/shellPermissionsCommand.d.ts +7 -0
- package/dist/src/ui/commands/shellPermissionsCommand.js +109 -0
- package/dist/src/ui/commands/shellPermissionsCommand.js.map +1 -0
- package/dist/src/ui/commands/skillCommand.d.ts +7 -0
- package/dist/src/ui/commands/skillCommand.js +240 -0
- package/dist/src/ui/commands/skillCommand.js.map +1 -0
- package/dist/src/ui/commands/statsCommand.js +243 -1
- package/dist/src/ui/commands/statsCommand.js.map +1 -1
- package/dist/src/ui/commands/tasksCommand.d.ts +7 -0
- package/dist/src/ui/commands/tasksCommand.js +535 -0
- package/dist/src/ui/commands/tasksCommand.js.map +1 -0
- package/dist/src/ui/commands/toolPermissionsCommand.d.ts +7 -0
- package/dist/src/ui/commands/toolPermissionsCommand.js +408 -0
- package/dist/src/ui/commands/toolPermissionsCommand.js.map +1 -0
- package/dist/src/ui/commands/types.d.ts +10 -2
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/commands/voiceCommand.d.ts +7 -0
- package/dist/src/ui/commands/voiceCommand.js +525 -0
- package/dist/src/ui/commands/voiceCommand.js.map +1 -0
- package/dist/src/ui/components/AuthDialog.d.ts +4 -2
- package/dist/src/ui/components/AuthDialog.js +349 -64
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/AuthInProgress.js +3 -1
- package/dist/src/ui/components/AuthInProgress.js.map +1 -1
- package/dist/src/ui/components/ExtensionsDialog.d.ts +11 -0
- package/dist/src/ui/components/ExtensionsDialog.js +303 -0
- package/dist/src/ui/components/ExtensionsDialog.js.map +1 -0
- package/dist/src/ui/components/GenericProviderKeyPrompt.d.ts +24 -0
- package/dist/src/ui/components/GenericProviderKeyPrompt.js +99 -0
- package/dist/src/ui/components/GenericProviderKeyPrompt.js.map +1 -0
- package/dist/src/ui/components/Header.js +10 -1
- package/dist/src/ui/components/Header.js.map +1 -1
- package/dist/src/ui/components/HistoryBrowserDialog.d.ts +15 -0
- package/dist/src/ui/components/HistoryBrowserDialog.js +166 -0
- package/dist/src/ui/components/HistoryBrowserDialog.js.map +1 -0
- package/dist/src/ui/components/HistoryItemDisplay.js +13 -1
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +22 -8
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/LoadingIndicator.d.ts +4 -0
- package/dist/src/ui/components/LoadingIndicator.js +16 -4
- package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
- package/dist/src/ui/components/LoadingIndicator.test.js +108 -16
- package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -1
- package/dist/src/ui/components/ModelSelectionDialog.d.ts +2 -0
- package/dist/src/ui/components/ModelSelectionDialog.js +33 -4
- package/dist/src/ui/components/ModelSelectionDialog.js.map +1 -1
- package/dist/src/ui/components/ModelSelectionDialog.test.js +41 -4
- package/dist/src/ui/components/ModelSelectionDialog.test.js.map +1 -1
- package/dist/src/ui/components/ReleaseNotesDialog.d.ts +23 -0
- package/dist/src/ui/components/ReleaseNotesDialog.js +150 -0
- package/dist/src/ui/components/ReleaseNotesDialog.js.map +1 -0
- package/dist/src/ui/components/ReleaseNotesDisplay.d.ts +18 -0
- package/dist/src/ui/components/ReleaseNotesDisplay.js +14 -0
- package/dist/src/ui/components/ReleaseNotesDisplay.js.map +1 -0
- package/dist/src/ui/components/SessionSummaryDisplay.d.ts +2 -0
- package/dist/src/ui/components/SessionSummaryDisplay.js +1 -1
- package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.d.ts +3 -1
- package/dist/src/ui/components/SettingsDialog.js +17 -7
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/ShellConfirmationDialog.d.ts +2 -0
- package/dist/src/ui/components/ShellConfirmationDialog.js +7 -3
- package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
- package/dist/src/ui/components/StatsDisplay.d.ts +2 -0
- package/dist/src/ui/components/StatsDisplay.js +92 -7
- package/dist/src/ui/components/StatsDisplay.js.map +1 -1
- package/dist/src/ui/components/SuggestionsDisplay.js +6 -1
- package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
- package/dist/src/ui/components/ThemeDialog.d.ts +3 -1
- package/dist/src/ui/components/ThemeDialog.js +5 -2
- package/dist/src/ui/components/ThemeDialog.js.map +1 -1
- package/dist/src/ui/components/Tips.js +1 -4
- package/dist/src/ui/components/Tips.js.map +1 -1
- package/dist/src/ui/components/TodoListDialog.d.ts +13 -0
- package/dist/src/ui/components/TodoListDialog.js +29 -0
- package/dist/src/ui/components/TodoListDialog.js.map +1 -0
- package/dist/src/ui/components/TodoListDialog.test.d.ts +6 -0
- package/dist/src/ui/components/TodoListDialog.test.js +60 -0
- package/dist/src/ui/components/TodoListDialog.test.js.map +1 -0
- package/dist/src/ui/components/VoiceConfigDialog.d.ts +17 -0
- package/dist/src/ui/components/VoiceConfigDialog.js +47 -0
- package/dist/src/ui/components/VoiceConfigDialog.js.map +1 -0
- package/dist/src/ui/components/messages/GeminiMessage.js +4 -0
- package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -1
- package/dist/src/ui/components/messages/GeminiMessageContent.js +4 -0
- package/dist/src/ui/components/messages/GeminiMessageContent.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +2 -0
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +96 -9
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js +3 -3
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessage.js +1 -1
- package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessage.test.js +9 -12
- package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
- package/dist/src/ui/components/multiagent/MultiAgentConfigDialog.d.ts +25 -0
- package/dist/src/ui/components/multiagent/MultiAgentConfigDialog.js +179 -0
- package/dist/src/ui/components/multiagent/MultiAgentConfigDialog.js.map +1 -0
- package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +3 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js +57 -18
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/components/shared/TextInput.d.ts +2 -1
- package/dist/src/ui/components/shared/TextInput.js +5 -2
- package/dist/src/ui/components/shared/TextInput.js.map +1 -1
- package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.js +3 -3
- package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.js.map +1 -1
- package/dist/src/ui/constants.d.ts +3 -3
- package/dist/src/ui/constants.js +3 -3
- package/dist/src/ui/constants.js.map +1 -1
- package/dist/src/ui/contexts/SessionContext.d.ts +6 -0
- package/dist/src/ui/contexts/SessionContext.js +24 -2
- package/dist/src/ui/contexts/SessionContext.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.js +139 -57
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js +189 -17
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAdaptiveStream.d.ts +42 -0
- package/dist/src/ui/hooks/useAdaptiveStream.js +31 -0
- package/dist/src/ui/hooks/useAdaptiveStream.js.map +1 -0
- package/dist/src/ui/hooks/useAtCompletion.js +20 -4
- package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useAuthCommand.d.ts +2 -2
- package/dist/src/ui/hooks/useAuthCommand.js +99 -5
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useCommandCompletion.js +14 -10
- package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useDialogClose.d.ts +10 -0
- package/dist/src/ui/hooks/useDialogClose.js +25 -0
- package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
- package/dist/src/ui/hooks/useDialogCloseAnimation.d.ts +22 -0
- package/dist/src/ui/hooks/useDialogCloseAnimation.js +68 -0
- package/dist/src/ui/hooks/useDialogCloseAnimation.js.map +1 -0
- package/dist/src/ui/hooks/useEncryptedStream.d.ts +22 -0
- package/dist/src/ui/hooks/useEncryptedStream.js +378 -0
- package/dist/src/ui/hooks/useEncryptedStream.js.map +1 -0
- package/dist/src/ui/hooks/useExtensionsDialog.d.ts +10 -0
- package/dist/src/ui/hooks/useExtensionsDialog.js +21 -0
- package/dist/src/ui/hooks/useExtensionsDialog.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.js +6 -2
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.d.ts +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.js +3 -2
- package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.test.js +27 -5
- package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
- package/dist/src/ui/hooks/useMultiAgentConfigCommand.d.ts +10 -0
- package/dist/src/ui/hooks/useMultiAgentConfigCommand.js +21 -0
- package/dist/src/ui/hooks/useMultiAgentConfigCommand.js.map +1 -0
- package/dist/src/ui/hooks/useReleasesDialog.d.ts +20 -0
- package/dist/src/ui/hooks/useReleasesDialog.js +214 -0
- package/dist/src/ui/hooks/useReleasesDialog.js.map +1 -0
- package/dist/src/ui/hooks/useSlashCompletion.js +10 -8
- package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useTodoList.d.ts +17 -0
- package/dist/src/ui/hooks/useTodoList.js +51 -0
- package/dist/src/ui/hooks/useTodoList.js.map +1 -0
- package/dist/src/ui/keyMatchers.test.js +6 -0
- package/dist/src/ui/keyMatchers.test.js.map +1 -1
- package/dist/src/ui/themes/blackbox-dark.js +1 -1
- package/dist/src/ui/themes/blackbox-dark.js.map +1 -1
- package/dist/src/ui/themes/blackbox-light.js +1 -1
- package/dist/src/ui/themes/blackbox-light.js.map +1 -1
- package/dist/src/ui/types.d.ts +15 -2
- package/dist/src/ui/types.js +1 -0
- package/dist/src/ui/types.js.map +1 -1
- package/dist/src/ui/utils/computeStats.d.ts +25 -1
- package/dist/src/ui/utils/computeStats.js +58 -1
- package/dist/src/ui/utils/computeStats.js.map +1 -1
- package/dist/src/ui/utils/updateCheck.js +37 -54
- package/dist/src/ui/utils/updateCheck.js.map +1 -1
- package/dist/src/utils/backgroundUpdateCheck.d.ts +15 -0
- package/dist/src/utils/backgroundUpdateCheck.js +48 -0
- package/dist/src/utils/backgroundUpdateCheck.js.map +1 -0
- package/dist/src/utils/gitAutoDetect.d.ts +16 -0
- package/dist/src/utils/gitAutoDetect.js +45 -0
- package/dist/src/utils/gitAutoDetect.js.map +1 -0
- package/dist/src/utils/installationInfo.d.ts +1 -0
- package/dist/src/utils/installationInfo.js +24 -4
- package/dist/src/utils/installationInfo.js.map +1 -1
- package/dist/src/utils/preLaunchUpdateCheck.d.ts +17 -0
- package/dist/src/utils/preLaunchUpdateCheck.js +75 -0
- package/dist/src/utils/preLaunchUpdateCheck.js.map +1 -0
- package/dist/src/utils/version.js +12 -1
- package/dist/src/utils/version.js.map +1 -1
- package/dist/src/utils/versionStorage.d.ts +50 -0
- package/dist/src/utils/versionStorage.js +224 -0
- package/dist/src/utils/versionStorage.js.map +1 -0
- package/dist/src/validateNonInterActiveAuth.js +10 -3
- package/dist/src/validateNonInterActiveAuth.js.map +1 -1
- package/dist/src/virtual-extensions.d.ts +14 -0
- package/dist/src/virtual-extensions.js +56 -0
- package/dist/src/virtual-extensions.js.map +1 -0
- package/dist/src/zed-integration/fileSystemService.d.ts +3 -3
- package/dist/src/zed-integration/fileSystemService.js +5 -7
- package/dist/src/zed-integration/fileSystemService.js.map +1 -1
- package/dist/src/zed-integration/zedIntegration.js +62 -17
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -3
- package/dist/src/utils/handleAutoUpdate.d.ts +0 -11
- package/dist/src/utils/handleAutoUpdate.js +0 -102
- package/dist/src/utils/handleAutoUpdate.js.map +0 -1
- package/dist/src/utils/updateEventEmitter.d.ts +0 -11
- package/dist/src/utils/updateEventEmitter.js +0 -12
- package/dist/src/utils/updateEventEmitter.js.map +0 -1
- package/dist/src/zed-integration/acp.d.ts +0 -63
- package/dist/src/zed-integration/acp.js +0 -226
- package/dist/src/zed-integration/acp.js.map +0 -1
- package/dist/src/zed-integration/schema.d.ts +0 -11782
- package/dist/src/zed-integration/schema.js +0 -311
- package/dist/src/zed-integration/schema.js.map +0 -1
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
3
|
+
import { Box, Text, useApp } from 'ink';
|
|
4
|
+
import { useKeypress } from '../../ui/hooks/useKeypress.js';
|
|
5
|
+
import { AuthType } from '@blackbox_ai/blackbox-cli-core';
|
|
6
|
+
import { Colors } from '../../ui/colors.js';
|
|
7
|
+
import { RadioButtonSelect } from '../../ui/components/shared/RadioButtonSelect.js';
|
|
8
|
+
import { TextInput } from '../../ui/components/shared/TextInput.js';
|
|
9
|
+
import { setBlackboxApiKey, setBlackboxApiBaseUrl, setBlackboxApiModel, setBlackboxEncryptionBaseUrl, setBlackboxEncryptedModel, setOpenAIApiKey, setOpenAIBaseUrl, setOpenAIModel, setOpenRouterApiKey, setOpenRouterBaseUrl, setOpenRouterModel, setCustomApiKey, setCustomBaseUrl, setCustomModel, setAnthropicApiKey, setAnthropicBaseUrl, setAnthropicModel, setGoogleApiKey, setGoogleBaseUrl, setGoogleModel, setXaiApiKey, setXaiBaseUrl, setXaiModel, saveProviderCredentials, } from '../../config/auth.js';
|
|
10
|
+
import { loadSettings, SettingScope } from '../../config/settings.js';
|
|
11
|
+
import { fetchModelsForProvider } from '../../config/modelFetcher.js';
|
|
12
|
+
const PROVIDERS = [
|
|
13
|
+
{
|
|
14
|
+
name: 'blackbox',
|
|
15
|
+
displayName: 'BlackboxAI',
|
|
16
|
+
authType: AuthType.USE_BLACKBOX_API,
|
|
17
|
+
requiresApiKey: true,
|
|
18
|
+
defaultBaseUrl: 'https://api.blackbox.ai/v1',
|
|
19
|
+
defaultModel: 'blackbox-ai',
|
|
20
|
+
envKeyName: 'BLACKBOX_API_KEY',
|
|
21
|
+
envBaseUrlName: 'BLACKBOX_API_BASE_URL',
|
|
22
|
+
envModelName: 'BLACKBOX_API_MODEL',
|
|
23
|
+
availableModels: [
|
|
24
|
+
'blackboxai/anthropic/claude-sonnet-4.5',
|
|
25
|
+
'blackboxai/anthropic/claude-sonnet-4',
|
|
26
|
+
'blackboxai/anthropic/claude-opus-4',
|
|
27
|
+
'blackboxai/anthropic/claude-3.7-sonnet:thinking',
|
|
28
|
+
'blackboxai/anthropic/claude-haiku-4.5',
|
|
29
|
+
'blackboxai/anthropic/claude-3.5-sonnet',
|
|
30
|
+
'blackboxai/encrypted',
|
|
31
|
+
'blackboxai/deepseek/deepseek-chat',
|
|
32
|
+
'blackboxai/deepseek/deepseek-chat:free',
|
|
33
|
+
'blackboxai/google/gemini-2.5-flash',
|
|
34
|
+
'blackboxai/google/gemini-2.5-pro',
|
|
35
|
+
'blackboxai/mistralai/mistral-large',
|
|
36
|
+
'blackboxai/openai/codex-mini',
|
|
37
|
+
'blackboxai/openai/gpt-4.1',
|
|
38
|
+
'blackboxai/openai/gpt-4.1-mini',
|
|
39
|
+
'blackboxai/openai/gpt-4o',
|
|
40
|
+
'blackboxai/openai/gpt-4o-mini',
|
|
41
|
+
'blackboxai/openai/o4-mini',
|
|
42
|
+
'blackboxai/openai/o3-mini'
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'blackbox-encrypted',
|
|
47
|
+
displayName: 'BlackboxAI Encrypted',
|
|
48
|
+
authType: AuthType.USE_BLACKBOX_API,
|
|
49
|
+
requiresApiKey: false, // Special case: no API key required
|
|
50
|
+
defaultBaseUrl: 'https://encrypt.blackboxai.app',
|
|
51
|
+
defaultModel: 'blackboxai/encrypted',
|
|
52
|
+
envKeyName: 'BLACKBOX_API_KEY',
|
|
53
|
+
envBaseUrlName: 'BLACKBOX_ENCRYPTION_BASE_URL',
|
|
54
|
+
envModelName: 'BLACKBOX_ENCRYPTED_MODEL',
|
|
55
|
+
availableModels: [
|
|
56
|
+
'blackboxai/encrypted',
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'xai',
|
|
61
|
+
displayName: 'xAI',
|
|
62
|
+
authType: AuthType.USE_OPENAI, // xAI uses OpenAI-compatible API
|
|
63
|
+
requiresApiKey: true,
|
|
64
|
+
defaultBaseUrl: 'https://api.x.ai/v1',
|
|
65
|
+
defaultModel: 'grok-code-fast-1',
|
|
66
|
+
envKeyName: 'XAI_API_KEY',
|
|
67
|
+
envBaseUrlName: 'XAI_HOST',
|
|
68
|
+
envModelName: 'XAI_MODEL',
|
|
69
|
+
availableModels: [
|
|
70
|
+
'grok-code-fast-1',
|
|
71
|
+
'grok-4-0709',
|
|
72
|
+
'grok-3',
|
|
73
|
+
'grok-3-fast',
|
|
74
|
+
'grok-3-mini',
|
|
75
|
+
'grok-3-mini-fast',
|
|
76
|
+
'grok-2-vision-1212',
|
|
77
|
+
'grok-2-image-1212',
|
|
78
|
+
'grok-3-latest',
|
|
79
|
+
'grok-3-fast-latest',
|
|
80
|
+
'grok-3-mini-latest',
|
|
81
|
+
'grok-3-mini-fast-latest',
|
|
82
|
+
'grok-2-vision',
|
|
83
|
+
'grok-2-vision-latest',
|
|
84
|
+
'grok-2-image',
|
|
85
|
+
'grok-2-image-latest',
|
|
86
|
+
'grok-2',
|
|
87
|
+
'grok-2-latest',
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'google',
|
|
92
|
+
displayName: 'Google Gemini',
|
|
93
|
+
authType: AuthType.USE_OPENAI, // Google uses OpenAI-compatible API
|
|
94
|
+
requiresApiKey: true,
|
|
95
|
+
defaultBaseUrl: 'https://generativelanguage.googleapis.com',
|
|
96
|
+
defaultModel: 'gemini-2.5-flash',
|
|
97
|
+
envKeyName: 'GOOGLE_API_KEY',
|
|
98
|
+
envBaseUrlName: 'GOOGLE_HOST',
|
|
99
|
+
envModelName: 'GOOGLE_MODEL',
|
|
100
|
+
availableModels: [
|
|
101
|
+
'gemini-2.5-pro',
|
|
102
|
+
'gemini-2.5-pro-preview-06-05',
|
|
103
|
+
'gemini-2.5-pro-preview-05-06',
|
|
104
|
+
'gemini-2.5-flash',
|
|
105
|
+
'gemini-2.5-flash-preview-05-20',
|
|
106
|
+
'gemini-2.5-flash-lite-preview-06-17',
|
|
107
|
+
'gemini-2.0-flash',
|
|
108
|
+
'gemini-2.0-flash-exp',
|
|
109
|
+
'gemini-2.0-flash-lite',
|
|
110
|
+
'gemini-1.5-flash',
|
|
111
|
+
'gemini-1.5-flash-latest',
|
|
112
|
+
'gemini-1.5-flash-002',
|
|
113
|
+
'gemini-1.5-flash-8b',
|
|
114
|
+
'gemini-1.5-flash-8b-latest',
|
|
115
|
+
'gemini-1.5-pro',
|
|
116
|
+
'gemini-1.5-pro-latest',
|
|
117
|
+
'gemini-1.5-pro-002',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'anthropic',
|
|
122
|
+
displayName: 'Anthropic',
|
|
123
|
+
authType: AuthType.USE_OPENAI, // Anthropic uses OpenAI-compatible API
|
|
124
|
+
requiresApiKey: true,
|
|
125
|
+
defaultBaseUrl: 'https://api.anthropic.com/v1',
|
|
126
|
+
defaultModel: 'claude-3-5-sonnet-latest',
|
|
127
|
+
envKeyName: 'ANTHROPIC_API_KEY',
|
|
128
|
+
envBaseUrlName: 'ANTHROPIC_BASE_URL',
|
|
129
|
+
envModelName: 'ANTHROPIC_MODEL',
|
|
130
|
+
availableModels: [
|
|
131
|
+
'claude-sonnet-4-latest',
|
|
132
|
+
'claude-sonnet-4-20250514',
|
|
133
|
+
'claude-opus-4-latest',
|
|
134
|
+
'claude-opus-4-20250514',
|
|
135
|
+
'claude-3-7-sonnet-latest',
|
|
136
|
+
'claude-3-7-sonnet-20250219',
|
|
137
|
+
'claude-3-5-sonnet-latest',
|
|
138
|
+
'claude-3-5-sonnet-20241022',
|
|
139
|
+
'claude-3-5-haiku-latest',
|
|
140
|
+
'claude-3-5-haiku-20241022',
|
|
141
|
+
'claude-3-opus-latest',
|
|
142
|
+
'claude-3-opus-20240229',
|
|
143
|
+
'claude-3-sonnet-20240229',
|
|
144
|
+
'claude-3-haiku-20240307',
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: 'openai',
|
|
149
|
+
displayName: 'OpenAI',
|
|
150
|
+
authType: AuthType.USE_OPENAI,
|
|
151
|
+
requiresApiKey: true,
|
|
152
|
+
defaultBaseUrl: 'https://api.openai.com/v1',
|
|
153
|
+
defaultModel: 'gpt-4',
|
|
154
|
+
envKeyName: 'OPENAI_API_KEY',
|
|
155
|
+
envBaseUrlName: 'OPENAI_BASE_URL',
|
|
156
|
+
envModelName: 'OPENAI_MODEL',
|
|
157
|
+
availableModels: [
|
|
158
|
+
'gpt-4',
|
|
159
|
+
'gpt-4-turbo',
|
|
160
|
+
'gpt-4o',
|
|
161
|
+
'gpt-4o-mini',
|
|
162
|
+
'gpt-3.5-turbo',
|
|
163
|
+
'o1',
|
|
164
|
+
'o1-mini',
|
|
165
|
+
'o1-preview',
|
|
166
|
+
],
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
name: 'openrouter',
|
|
170
|
+
displayName: 'OpenRouter',
|
|
171
|
+
authType: AuthType.USE_OPENAI, // OpenRouter uses OpenAI-compatible API
|
|
172
|
+
requiresApiKey: true,
|
|
173
|
+
defaultBaseUrl: 'https://openrouter.ai/api/v1',
|
|
174
|
+
defaultModel: 'anthropic/claude-3.5-sonnet',
|
|
175
|
+
envKeyName: 'OPENROUTER_API_KEY',
|
|
176
|
+
envBaseUrlName: 'OPENROUTER_BASE_URL',
|
|
177
|
+
envModelName: 'OPENROUTER_MODEL',
|
|
178
|
+
availableModels: [
|
|
179
|
+
'anthropic/claude-3.5-sonnet',
|
|
180
|
+
'anthropic/claude-3.7-sonnet',
|
|
181
|
+
'anthropic/claude-sonnet-4',
|
|
182
|
+
'google/gemini-2.5-pro',
|
|
183
|
+
'deepseek/deepseek-r1-0528',
|
|
184
|
+
'openai/gpt-4o',
|
|
185
|
+
'openai/gpt-4-turbo',
|
|
186
|
+
'meta-llama/llama-3.3-70b-instruct',
|
|
187
|
+
],
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
name: 'custom',
|
|
191
|
+
displayName: 'Custom Provider',
|
|
192
|
+
authType: AuthType.USE_OPENAI, // Custom provider uses OpenAI-compatible API
|
|
193
|
+
requiresApiKey: true,
|
|
194
|
+
defaultBaseUrl: '',
|
|
195
|
+
defaultModel: '',
|
|
196
|
+
envKeyName: 'CUSTOM_API_KEY',
|
|
197
|
+
envBaseUrlName: 'CUSTOM_BASE_URL',
|
|
198
|
+
envModelName: 'CUSTOM_MODEL',
|
|
199
|
+
availableModels: [],
|
|
200
|
+
},
|
|
201
|
+
];
|
|
202
|
+
export function ConfigureUI({ onComplete, onCancel, embedded = false, mode = 'provider', }) {
|
|
203
|
+
const { exit } = useApp();
|
|
204
|
+
const [step, setStep] = useState(mode === 'db' ? 'dbType' : 'provider');
|
|
205
|
+
// Handle ESC key to close dialog when in embedded mode
|
|
206
|
+
const handleKeypress = useCallback((key) => {
|
|
207
|
+
if (key.name === 'escape' && embedded) {
|
|
208
|
+
// Use onCancel if provided, otherwise fall back to onComplete
|
|
209
|
+
if (onCancel) {
|
|
210
|
+
onCancel();
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
onComplete();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}, [embedded, onComplete, onCancel]);
|
|
217
|
+
useKeypress(handleKeypress, { isActive: embedded });
|
|
218
|
+
const [selectedProvider, setSelectedProvider] = useState(null);
|
|
219
|
+
const [apiKey, setApiKey] = useState('');
|
|
220
|
+
const [dbType, setDbType] = useState('');
|
|
221
|
+
const [dbUri, setDbUri] = useState('');
|
|
222
|
+
const [dbName, setDbName] = useState('');
|
|
223
|
+
const [baseUrl, setBaseUrl] = useState('');
|
|
224
|
+
const [model, setModel] = useState('');
|
|
225
|
+
const [modelSearch, setModelSearch] = useState('');
|
|
226
|
+
const [error, setError] = useState(null);
|
|
227
|
+
const [isFetchingModels, setIsFetchingModels] = useState(false);
|
|
228
|
+
const [fetchedModels, setFetchedModels] = useState([]);
|
|
229
|
+
// Check for existing environment variables when provider is selected
|
|
230
|
+
useEffect(() => {
|
|
231
|
+
if (selectedProvider) {
|
|
232
|
+
const existingApiKey = process.env[selectedProvider.envKeyName];
|
|
233
|
+
const existingBaseUrl = process.env[selectedProvider.envBaseUrlName];
|
|
234
|
+
const existingModel = process.env[selectedProvider.envModelName];
|
|
235
|
+
if (existingApiKey) {
|
|
236
|
+
setApiKey(existingApiKey);
|
|
237
|
+
}
|
|
238
|
+
if (existingBaseUrl) {
|
|
239
|
+
setBaseUrl(existingBaseUrl);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
setBaseUrl(selectedProvider.defaultBaseUrl);
|
|
243
|
+
}
|
|
244
|
+
if (existingModel) {
|
|
245
|
+
setModel(existingModel);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
setModel(selectedProvider.defaultModel);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}, [selectedProvider]);
|
|
252
|
+
// Fetch models when moving to model selection step
|
|
253
|
+
useEffect(() => {
|
|
254
|
+
if (step === 'model' && selectedProvider && apiKey && baseUrl) {
|
|
255
|
+
const providerName = selectedProvider.name;
|
|
256
|
+
console.log(`[${providerName}] Fetching models from API...`);
|
|
257
|
+
setIsFetchingModels(true);
|
|
258
|
+
setFetchedModels([]); // Clear previous models
|
|
259
|
+
fetchModelsForProvider(providerName, apiKey, baseUrl)
|
|
260
|
+
.then((models) => {
|
|
261
|
+
console.log(`[${providerName}] Fetched ${models.length} models`);
|
|
262
|
+
if (models.length > 0) {
|
|
263
|
+
setFetchedModels(models);
|
|
264
|
+
console.log(`[${providerName}] First 5 models:`, models.slice(0, 5));
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
console.log(`[${providerName}] No models fetched, using defaults`);
|
|
268
|
+
}
|
|
269
|
+
})
|
|
270
|
+
.catch((error) => {
|
|
271
|
+
console.error(`[${providerName}] Error fetching models:`, error);
|
|
272
|
+
})
|
|
273
|
+
.finally(() => {
|
|
274
|
+
setIsFetchingModels(false);
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
}, [step, selectedProvider, apiKey, baseUrl]);
|
|
278
|
+
const handleProviderSelect = (providerName) => {
|
|
279
|
+
const provider = PROVIDERS.find((p) => p.name === providerName);
|
|
280
|
+
if (provider) {
|
|
281
|
+
setSelectedProvider(provider);
|
|
282
|
+
// Special case for blackbox-encrypted: skip all configuration steps
|
|
283
|
+
if (provider.name === 'blackbox-encrypted') {
|
|
284
|
+
// Set predefined values
|
|
285
|
+
setApiKey(''); // No API key needed
|
|
286
|
+
setBaseUrl(provider.defaultBaseUrl);
|
|
287
|
+
setModel(provider.defaultModel);
|
|
288
|
+
setStep('confirm');
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
setStep('apiKey');
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
const handleApiKeySubmit = () => {
|
|
296
|
+
if (!apiKey.trim()) {
|
|
297
|
+
setError('API key is required');
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
setError(null);
|
|
301
|
+
// Skip baseUrl step for non-custom providers (use default)
|
|
302
|
+
if (selectedProvider?.name === 'custom') {
|
|
303
|
+
setStep('baseUrl');
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
setStep('model');
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
const handleBaseUrlSubmit = () => {
|
|
310
|
+
if (!baseUrl.trim()) {
|
|
311
|
+
setError('Base URL is required');
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
setError(null);
|
|
315
|
+
setStep('model');
|
|
316
|
+
};
|
|
317
|
+
const handleModelSelect = (selectedModel) => {
|
|
318
|
+
setModel(selectedModel);
|
|
319
|
+
setStep('confirm');
|
|
320
|
+
};
|
|
321
|
+
// Filter models based on search
|
|
322
|
+
// Use fetched models if available, otherwise use default list
|
|
323
|
+
const availableModels = selectedProvider
|
|
324
|
+
? fetchedModels.length > 0
|
|
325
|
+
? fetchedModels
|
|
326
|
+
: selectedProvider.availableModels
|
|
327
|
+
: [];
|
|
328
|
+
const filteredModels = availableModels.filter((m) => m.toLowerCase().includes(modelSearch.toLowerCase()));
|
|
329
|
+
const handleModelSearchSubmit = () => {
|
|
330
|
+
// Only submit if there are no filtered results (custom model entry)
|
|
331
|
+
// If there are filtered results, the RadioButtonSelect should handle selection
|
|
332
|
+
if (filteredModels.length > 0) {
|
|
333
|
+
return; // Don't submit, let RadioButtonSelect handle it
|
|
334
|
+
}
|
|
335
|
+
if (!modelSearch.trim()) {
|
|
336
|
+
setError('Model name is required');
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
setModel(modelSearch);
|
|
340
|
+
setStep('confirm');
|
|
341
|
+
};
|
|
342
|
+
const handleDbTypeSelect = (selected) => {
|
|
343
|
+
if (selected === 'postgres' ||
|
|
344
|
+
selected === 'mysql' ||
|
|
345
|
+
selected === 'mongodb' ||
|
|
346
|
+
selected === 'redis') {
|
|
347
|
+
setDbType(selected);
|
|
348
|
+
setDbUri(process.env['DB_CONNECTION_URI'] || '');
|
|
349
|
+
setDbName('');
|
|
350
|
+
setError(null);
|
|
351
|
+
setStep('dbUri');
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
const handleDbUriSubmit = () => {
|
|
355
|
+
const trimmed = dbUri.trim();
|
|
356
|
+
if (!trimmed) {
|
|
357
|
+
setError('Connection URI is required');
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
setError(null);
|
|
361
|
+
if (dbType === 'postgres') {
|
|
362
|
+
try {
|
|
363
|
+
const url = new URL(trimmed);
|
|
364
|
+
const hasDb = url.pathname && url.pathname !== '/' && url.pathname !== '';
|
|
365
|
+
if (!hasDb) {
|
|
366
|
+
setStep('dbName');
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
catch {
|
|
371
|
+
// fallthrough: save as-is and let tool validation handle exact format
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
setStep('dbComplete');
|
|
375
|
+
try {
|
|
376
|
+
const settings = loadSettings(process.cwd());
|
|
377
|
+
settings.setValue(SettingScope.User, 'tools.sqlDb.type', dbType);
|
|
378
|
+
settings.setValue(SettingScope.User, 'tools.sqlDb.connectionUri', trimmed);
|
|
379
|
+
process.env['DB_CONNECTION_URI'] = trimmed;
|
|
380
|
+
setTimeout(() => {
|
|
381
|
+
onComplete();
|
|
382
|
+
if (!embedded) {
|
|
383
|
+
exit();
|
|
384
|
+
}
|
|
385
|
+
}, 1500);
|
|
386
|
+
}
|
|
387
|
+
catch (err) {
|
|
388
|
+
setError(err instanceof Error ? err.message : 'Configuration failed');
|
|
389
|
+
setStep('dbUri');
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
const handleDbNameSubmit = () => {
|
|
393
|
+
const uri = dbUri.trim();
|
|
394
|
+
const name = dbName.trim();
|
|
395
|
+
if (!name) {
|
|
396
|
+
setError('Database name is required for Postgres');
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
setError(null);
|
|
400
|
+
try {
|
|
401
|
+
const url = new URL(uri);
|
|
402
|
+
url.pathname = `/${encodeURIComponent(name)}`;
|
|
403
|
+
const finalUri = url.toString();
|
|
404
|
+
const settings = loadSettings(process.cwd());
|
|
405
|
+
settings.setValue(SettingScope.User, 'tools.sqlDb.type', dbType);
|
|
406
|
+
settings.setValue(SettingScope.User, 'tools.sqlDb.connectionUri', finalUri);
|
|
407
|
+
process.env['DB_CONNECTION_URI'] = finalUri;
|
|
408
|
+
setStep('dbComplete');
|
|
409
|
+
setTimeout(() => {
|
|
410
|
+
onComplete();
|
|
411
|
+
if (!embedded) {
|
|
412
|
+
exit();
|
|
413
|
+
}
|
|
414
|
+
}, 1500);
|
|
415
|
+
}
|
|
416
|
+
catch (_err) {
|
|
417
|
+
setError('Invalid connection URI');
|
|
418
|
+
}
|
|
419
|
+
};
|
|
420
|
+
const handleConfirm = async () => {
|
|
421
|
+
if (!selectedProvider)
|
|
422
|
+
return;
|
|
423
|
+
try {
|
|
424
|
+
// Load settings first
|
|
425
|
+
const settings = loadSettings(process.cwd());
|
|
426
|
+
// Apply configuration based on provider name (not authType, since OpenRouter uses USE_OPENAI)
|
|
427
|
+
if (selectedProvider.name === 'openrouter') {
|
|
428
|
+
// Set environment variables for immediate use
|
|
429
|
+
setOpenRouterApiKey(apiKey);
|
|
430
|
+
setOpenRouterBaseUrl(baseUrl);
|
|
431
|
+
setOpenRouterModel(model);
|
|
432
|
+
// Save to settings for persistence
|
|
433
|
+
saveProviderCredentials(settings, 'openrouter', {
|
|
434
|
+
apiKey,
|
|
435
|
+
baseUrl,
|
|
436
|
+
model,
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
else if (selectedProvider.name === 'openai') {
|
|
440
|
+
// Set environment variables for immediate use
|
|
441
|
+
setOpenAIApiKey(apiKey);
|
|
442
|
+
setOpenAIBaseUrl(baseUrl);
|
|
443
|
+
setOpenAIModel(model);
|
|
444
|
+
// Save to settings for persistence
|
|
445
|
+
saveProviderCredentials(settings, 'openai', {
|
|
446
|
+
apiKey,
|
|
447
|
+
baseUrl,
|
|
448
|
+
model,
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
else if (selectedProvider.name === 'blackbox') {
|
|
452
|
+
// Set environment variables for immediate use
|
|
453
|
+
setBlackboxApiKey(apiKey);
|
|
454
|
+
setBlackboxApiBaseUrl(baseUrl);
|
|
455
|
+
setBlackboxApiModel(model);
|
|
456
|
+
// Save to settings for persistence
|
|
457
|
+
saveProviderCredentials(settings, 'blackbox', {
|
|
458
|
+
apiKey,
|
|
459
|
+
baseUrl,
|
|
460
|
+
model,
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
else if (selectedProvider.name === 'blackbox-encrypted') {
|
|
464
|
+
// Set environment variables for immediate use (no API key needed for encrypted provider)
|
|
465
|
+
setBlackboxEncryptionBaseUrl(baseUrl);
|
|
466
|
+
setBlackboxEncryptedModel(model);
|
|
467
|
+
// Save to settings for persistence (no API key needed)
|
|
468
|
+
saveProviderCredentials(settings, 'blackbox-encrypted', {
|
|
469
|
+
baseUrl,
|
|
470
|
+
model,
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
else if (selectedProvider.name === 'xai') {
|
|
474
|
+
// Set environment variables for immediate use
|
|
475
|
+
setXaiApiKey(apiKey);
|
|
476
|
+
setXaiBaseUrl(baseUrl);
|
|
477
|
+
setXaiModel(model);
|
|
478
|
+
// Save to settings for persistence
|
|
479
|
+
saveProviderCredentials(settings, 'xai', {
|
|
480
|
+
apiKey,
|
|
481
|
+
baseUrl,
|
|
482
|
+
model,
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
else if (selectedProvider.name === 'google') {
|
|
486
|
+
// Set environment variables for immediate use
|
|
487
|
+
setGoogleApiKey(apiKey);
|
|
488
|
+
setGoogleBaseUrl(baseUrl);
|
|
489
|
+
setGoogleModel(model);
|
|
490
|
+
// Save to settings for persistence
|
|
491
|
+
saveProviderCredentials(settings, 'google', {
|
|
492
|
+
apiKey,
|
|
493
|
+
baseUrl,
|
|
494
|
+
model,
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
else if (selectedProvider.name === 'anthropic') {
|
|
498
|
+
// Set environment variables for immediate use
|
|
499
|
+
setAnthropicApiKey(apiKey);
|
|
500
|
+
setAnthropicBaseUrl(baseUrl);
|
|
501
|
+
setAnthropicModel(model);
|
|
502
|
+
// Save to settings for persistence
|
|
503
|
+
saveProviderCredentials(settings, 'anthropic', {
|
|
504
|
+
apiKey,
|
|
505
|
+
baseUrl,
|
|
506
|
+
model,
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
else if (selectedProvider.name === 'custom') {
|
|
510
|
+
// Set environment variables for immediate use
|
|
511
|
+
setCustomApiKey(apiKey);
|
|
512
|
+
setCustomBaseUrl(baseUrl);
|
|
513
|
+
setCustomModel(model);
|
|
514
|
+
// Save to settings for persistence
|
|
515
|
+
saveProviderCredentials(settings, 'custom', {
|
|
516
|
+
apiKey,
|
|
517
|
+
baseUrl,
|
|
518
|
+
model,
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
// Save provider selection and model name
|
|
522
|
+
// For selectedType, we use authType for backward compatibility
|
|
523
|
+
settings.setValue(SettingScope.User, 'security.auth.selectedType', selectedProvider.authType);
|
|
524
|
+
// Save the actual provider name so we can distinguish between OpenAI and OpenRouter
|
|
525
|
+
settings.setValue(SettingScope.User, 'security.auth.selectedProvider', selectedProvider.name);
|
|
526
|
+
settings.setValue(SettingScope.User, 'model.name', model);
|
|
527
|
+
setStep('complete');
|
|
528
|
+
setTimeout(() => {
|
|
529
|
+
onComplete(selectedProvider.name);
|
|
530
|
+
if (!embedded) {
|
|
531
|
+
exit();
|
|
532
|
+
}
|
|
533
|
+
}, 2000);
|
|
534
|
+
}
|
|
535
|
+
catch (err) {
|
|
536
|
+
setError(err instanceof Error ? err.message : 'Configuration failed');
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: Colors.AccentCyan, children: mode === 'db'
|
|
540
|
+
? '🗄️ Database Connection Configuration'
|
|
541
|
+
: '🚀 Blackbox CLI Configuration' }) }), step === 'dbType' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Select database type for `sql_db_connect`:" }) }), _jsx(RadioButtonSelect, { items: [
|
|
542
|
+
{ label: 'PostgreSQL', value: 'postgres' },
|
|
543
|
+
{ label: 'MySQL', value: 'mysql' },
|
|
544
|
+
{ label: 'MongoDB', value: 'mongodb' },
|
|
545
|
+
{ label: 'Redis', value: 'redis' },
|
|
546
|
+
], onSelect: handleDbTypeSelect, isFocused: true }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "Press Enter to select, Ctrl+C to cancel" }) })] })), step === 'dbUri' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Enter your connection URI (saved as `DB_CONNECTION_URI`)." }) }), _jsx(TextInput, { value: dbUri, onChange: setDbUri, onSubmit: handleDbUriSubmit, placeholder: "postgresql://user:pass@host:5432/db", isActive: true, maskValue: true }), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.AccentRed, children: ["\u274C ", error] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "Press Enter to save, Ctrl+C to cancel" }) })] })), step === 'dbName' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Postgres URI is missing a database name. Enter database name:" }) }), _jsx(TextInput, { value: dbName, onChange: setDbName, onSubmit: handleDbNameSubmit, placeholder: "my_database", isActive: true }), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.AccentRed, children: ["\u274C ", error] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "Press Enter to save, Ctrl+C to cancel" }) })] })), step === 'dbComplete' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: Colors.AccentGreen, children: "\u2705 DB connection saved successfully!" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentCyan, children: "\uD83D\uDCA1 Please retry your request (the previous tool call will not auto-retry)." }) })] })), step === 'provider' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Select your AI provider:" }) }), _jsx(RadioButtonSelect, { items: PROVIDERS.map((p) => ({
|
|
547
|
+
label: p.displayName,
|
|
548
|
+
value: p.name,
|
|
549
|
+
})), onSelect: handleProviderSelect, isFocused: true }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "Use \u2191\u2193 arrows to navigate, Enter to select, Ctrl+C to cancel" }) })] })), step === 'apiKey' && selectedProvider && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Configure ", _jsx(Text, { color: Colors.AccentGreen, children: selectedProvider.displayName })] }) }), process.env[selectedProvider.envKeyName] && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: Colors.AccentGreen, children: ["\u2713 API key found in environment variable ", selectedProvider.envKeyName] }) })), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Enter your API key (or press Enter to use existing):" }) }), _jsx(TextInput, { value: apiKey, onChange: setApiKey, onSubmit: handleApiKeySubmit, placeholder: "Enter API key...", isActive: true, maskValue: true }), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.AccentRed, children: ["\u274C ", error] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "Press Enter to continue, Ctrl+C to cancel" }) })] })), step === 'baseUrl' && selectedProvider && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Base URL (press Enter to use default):" }) }), _jsx(TextInput, { value: baseUrl, onChange: setBaseUrl, onSubmit: handleBaseUrlSubmit, placeholder: selectedProvider.defaultBaseUrl, isActive: true }), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.AccentRed, children: ["\u274C ", error] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "Press Enter to continue, Ctrl+C to cancel" }) })] })), step === 'model' && selectedProvider && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Select a model or search for a custom one:" }) }), isFetchingModels && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: Colors.AccentCyan, children: ["\u23F3 Fetching available models from ", selectedProvider.displayName, "..."] }) })), !isFetchingModels && fetchedModels.length > 0 && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: Colors.AccentGreen, children: ["\u2713 Loaded ", fetchedModels.length, " models from ", selectedProvider.displayName, " API"] }) })), !isFetchingModels && fetchedModels.length === 0 && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: Colors.AccentYellow, children: "\u26A0 Could not fetch models from API, using default list" }) })), _jsx(Box, { marginBottom: 1, children: _jsx(TextInput, { value: modelSearch, onChange: setModelSearch, onSubmit: handleModelSearchSubmit, placeholder: "Search models or enter custom model name...", isActive: true }) }), filteredModels.length > 0 && (_jsx(Box, { marginTop: 1, children: _jsx(RadioButtonSelect, { items: filteredModels.map((m) => ({
|
|
550
|
+
label: m,
|
|
551
|
+
value: m,
|
|
552
|
+
})), onSelect: handleModelSelect, isFocused: true, maxItemsToShow: 8, showScrollArrows: true }) })), modelSearch && filteredModels.length === 0 && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.Gray, children: ["No matching models. Press Enter to use ", modelSearch, " as custom model."] }) })), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.AccentRed, children: ["\u274C ", error] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: filteredModels.length > 0
|
|
553
|
+
? 'Type to filter, use ↑↓ to navigate, Enter to select, Ctrl+C to cancel'
|
|
554
|
+
: 'Type model name and press Enter to use custom model, Ctrl+C to cancel' }) })] })), step === 'confirm' && selectedProvider && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, children: "Review your configuration:" }) }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Provider: ", _jsx(Text, { color: Colors.AccentGreen, children: selectedProvider.displayName })] }) }), apiKey && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["API Key: ", _jsxs(Text, { color: Colors.AccentGreen, children: [apiKey.substring(0, 8), "..."] })] }) })), !apiKey && selectedProvider.name === 'blackbox-encrypted' && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Security: ", _jsx(Text, { color: Colors.AccentGreen, children: "\uD83D\uDD12 Encrypted Communication" })] }) })), selectedProvider.name !== 'blackbox-encrypted' && (_jsxs(_Fragment, { children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Base URL: ", _jsx(Text, { color: Colors.AccentGreen, children: baseUrl })] }) }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Model: ", _jsx(Text, { color: Colors.AccentGreen, children: model })] }) })] })), _jsx(Box, { marginTop: 1, marginBottom: 1, children: _jsx(Text, { children: "Press Enter to save, Ctrl+C to cancel" }) }), _jsx(TextInput, { value: "", onChange: () => { }, onSubmit: handleConfirm, placeholder: "Press Enter to confirm...", isActive: true })] })), step === 'complete' && selectedProvider && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: Colors.AccentGreen, children: "\u2705 Configuration saved successfully!" }) }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Provider: ", _jsx(Text, { color: Colors.AccentGreen, children: selectedProvider.displayName })] }) }), selectedProvider.name !== 'blackbox-encrypted' && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Model: ", _jsx(Text, { color: Colors.AccentGreen, children: model })] }) })), selectedProvider.name === 'blackbox-encrypted' && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Security: ", _jsx(Text, { color: Colors.AccentGreen, children: "\uD83D\uDD12 E2E Encrypted Communication Enabled" })] }) })), apiKey && selectedProvider.name !== 'blackbox-encrypted' && (_jsxs(_Fragment, { children: [_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentYellow, children: "\uD83D\uDCDD To persist your API key across sessions, add it to:" }) }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: Colors.Gray, children: "\u2022 Your shell profile (~/.bashrc, ~/.zshrc, etc.)" }) }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: Colors.Gray, children: "\u2022 Or ~/.blackboxcli/.env" }) }), _jsx(Box, { marginTop: 1, marginLeft: 2, children: _jsxs(Text, { color: Colors.Gray, children: ["export ", selectedProvider.envKeyName, "='", apiKey.substring(0, 8), "...'"] }) })] })), selectedProvider.name === 'blackbox-encrypted' && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentYellow, children: "\uD83D\uDD12 This provider uses encrypted communication without requiring an API key." }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentCyan, children: "\uD83D\uDCA1 Run 'blackbox' to start using the CLI!" }) })] }))] }));
|
|
555
|
+
}
|
|
556
|
+
//# sourceMappingURL=ConfigureUI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigureUI.js","sourceRoot":"","sources":["../../../../src/commands/configure/ConfigureUI.tsx"],"names":[],"mappings":"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"}
|