@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,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { getCliVersion } from '../utils/version.js';
|
|
7
|
+
const CACHE_DURATION_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
8
|
+
/**
|
|
9
|
+
* Release Notes Cache Service
|
|
10
|
+
* Caches release notes and automatically invalidates when:
|
|
11
|
+
* 1. CLI version changes (new release installed)
|
|
12
|
+
* 2. Cache is older than 24 hours
|
|
13
|
+
*/
|
|
14
|
+
export class ReleaseNotesCache {
|
|
15
|
+
static instance;
|
|
16
|
+
cache = null;
|
|
17
|
+
cacheFilePath = null;
|
|
18
|
+
initPromise = null;
|
|
19
|
+
constructor() {
|
|
20
|
+
// Start initialization but don't wait for it
|
|
21
|
+
this.initPromise = this.initializeCachePath();
|
|
22
|
+
}
|
|
23
|
+
static getInstance() {
|
|
24
|
+
if (!ReleaseNotesCache.instance) {
|
|
25
|
+
ReleaseNotesCache.instance = new ReleaseNotesCache();
|
|
26
|
+
}
|
|
27
|
+
return ReleaseNotesCache.instance;
|
|
28
|
+
}
|
|
29
|
+
async initializeCachePath() {
|
|
30
|
+
try {
|
|
31
|
+
const path = await import('node:path');
|
|
32
|
+
const os = await import('node:os');
|
|
33
|
+
const fs = await import('node:fs/promises');
|
|
34
|
+
const cacheDir = path.join(os.homedir(), '.blackboxcli', 'cache');
|
|
35
|
+
// Ensure cache directory exists
|
|
36
|
+
try {
|
|
37
|
+
await fs.mkdir(cacheDir, { recursive: true });
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Directory might already exist
|
|
41
|
+
}
|
|
42
|
+
this.cacheFilePath = path.join(cacheDir, 'release-notes.json');
|
|
43
|
+
console.log(`[ReleaseNotesCache] Cache file path: ${this.cacheFilePath}`);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.error('[ReleaseNotesCache] Failed to initialize cache path:', error);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Ensure cache path is initialized before use
|
|
51
|
+
*/
|
|
52
|
+
async ensureInitialized() {
|
|
53
|
+
if (this.initPromise) {
|
|
54
|
+
await this.initPromise;
|
|
55
|
+
this.initPromise = null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get cached release notes if valid
|
|
60
|
+
*/
|
|
61
|
+
async get() {
|
|
62
|
+
// Ensure cache path is initialized
|
|
63
|
+
await this.ensureInitialized();
|
|
64
|
+
try {
|
|
65
|
+
// Try memory cache first
|
|
66
|
+
if (this.cache && await this.isCacheValid(this.cache)) {
|
|
67
|
+
console.log('[ReleaseNotesCache] Using memory cache');
|
|
68
|
+
return {
|
|
69
|
+
data: this.cache.data,
|
|
70
|
+
changelogData: this.cache.changelogData,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// Try disk cache
|
|
74
|
+
if (this.cacheFilePath) {
|
|
75
|
+
const fs = await import('node:fs/promises');
|
|
76
|
+
try {
|
|
77
|
+
const content = await fs.readFile(this.cacheFilePath, 'utf-8');
|
|
78
|
+
const cached = JSON.parse(content);
|
|
79
|
+
// Convert plain object back to Map
|
|
80
|
+
cached.changelogData = new Map(Object.entries(cached.changelogData || {}));
|
|
81
|
+
if (await this.isCacheValid(cached)) {
|
|
82
|
+
console.log('[ReleaseNotesCache] Using disk cache');
|
|
83
|
+
this.cache = cached;
|
|
84
|
+
return {
|
|
85
|
+
data: cached.data,
|
|
86
|
+
changelogData: cached.changelogData,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.log('[ReleaseNotesCache] Cache invalid, will fetch fresh data');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (_error) {
|
|
94
|
+
// Cache file doesn't exist or is corrupted
|
|
95
|
+
console.log('[ReleaseNotesCache] No valid cache found');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
console.error('[ReleaseNotesCache] Error reading cache:', err);
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Save release notes to cache
|
|
107
|
+
*/
|
|
108
|
+
async set(data, changelogData) {
|
|
109
|
+
// Ensure cache path is initialized
|
|
110
|
+
await this.ensureInitialized();
|
|
111
|
+
try {
|
|
112
|
+
const cliVersion = await getCliVersion();
|
|
113
|
+
const cacheData = {
|
|
114
|
+
version: data[0]?.version || 'unknown',
|
|
115
|
+
data,
|
|
116
|
+
changelogData,
|
|
117
|
+
cachedAt: Date.now(),
|
|
118
|
+
cliVersion,
|
|
119
|
+
};
|
|
120
|
+
// Save to memory
|
|
121
|
+
this.cache = cacheData;
|
|
122
|
+
// Save to disk
|
|
123
|
+
if (this.cacheFilePath) {
|
|
124
|
+
const fs = await import('node:fs/promises');
|
|
125
|
+
// Convert Map to plain object for JSON serialization
|
|
126
|
+
const serializable = {
|
|
127
|
+
...cacheData,
|
|
128
|
+
changelogData: Object.fromEntries(cacheData.changelogData),
|
|
129
|
+
};
|
|
130
|
+
await fs.writeFile(this.cacheFilePath, JSON.stringify(serializable, null, 2), 'utf-8');
|
|
131
|
+
console.log('[ReleaseNotesCache] Cache saved successfully');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
console.error('[ReleaseNotesCache] Error saving cache:', err);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Check if cache is still valid
|
|
140
|
+
*/
|
|
141
|
+
async isCacheValid(cached) {
|
|
142
|
+
try {
|
|
143
|
+
// Check if cache is too old
|
|
144
|
+
const age = Date.now() - cached.cachedAt;
|
|
145
|
+
if (age > CACHE_DURATION_MS) {
|
|
146
|
+
console.log('[ReleaseNotesCache] Cache expired (age: ${Math.round(age / 1000 / 60)} minutes)');
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
// Check if CLI version has changed (new release installed)
|
|
150
|
+
const currentVersion = await getCliVersion();
|
|
151
|
+
if (cached.cliVersion !== currentVersion) {
|
|
152
|
+
console.log(`[ReleaseNotesCache] CLI version changed: ${cached.cliVersion} -> ${currentVersion}`);
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
console.error('[ReleaseNotesCache] Error validating cache:', err);
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Clear the cache
|
|
164
|
+
*/
|
|
165
|
+
async clear() {
|
|
166
|
+
// Ensure cache path is initialized
|
|
167
|
+
await this.ensureInitialized();
|
|
168
|
+
try {
|
|
169
|
+
this.cache = null;
|
|
170
|
+
if (this.cacheFilePath) {
|
|
171
|
+
const fs = await import('node:fs/promises');
|
|
172
|
+
try {
|
|
173
|
+
await fs.unlink(this.cacheFilePath);
|
|
174
|
+
console.log('[ReleaseNotesCache] Cache cleared');
|
|
175
|
+
}
|
|
176
|
+
catch (_error) {
|
|
177
|
+
// File might not exist
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.error('[ReleaseNotesCache] Error clearing cache:', error);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=ReleaseNotesCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReleaseNotesCache.js","sourceRoot":"","sources":["../../../src/services/ReleaseNotesCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* ElevenLabs API error codes and types based on official documentation
|
|
8
|
+
* https://elevenlabs.io/docs/api-reference/error-messages
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Error codes returned by ElevenLabs API
|
|
12
|
+
*/
|
|
13
|
+
export declare enum ElevenLabsErrorCode {
|
|
14
|
+
MAX_CHARACTER_LIMIT_EXCEEDED = "max_character_limit_exceeded",
|
|
15
|
+
INVALID_API_KEY = "invalid_api_key",
|
|
16
|
+
QUOTA_EXCEEDED = "quota_exceeded",
|
|
17
|
+
VOICE_NOT_FOUND = "voice_not_found",
|
|
18
|
+
ONLY_FOR_CREATOR_PLUS = "only_for_creator+",
|
|
19
|
+
TOO_MANY_CONCURRENT_REQUESTS = "too_many_concurrent_requests",
|
|
20
|
+
SYSTEM_BUSY = "system_busy",
|
|
21
|
+
UNKNOWN = "unknown"
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Error type categories for easier handling
|
|
25
|
+
*/
|
|
26
|
+
export declare enum ElevenLabsErrorType {
|
|
27
|
+
AUTHENTICATION = "authentication",
|
|
28
|
+
PERMISSION = "permission",
|
|
29
|
+
QUOTA = "quota",
|
|
30
|
+
RATE_LIMIT = "rate_limit",
|
|
31
|
+
VALIDATION = "validation",
|
|
32
|
+
NETWORK = "network",
|
|
33
|
+
UNKNOWN = "unknown"
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Detailed error information with user-friendly messages and solutions
|
|
37
|
+
*/
|
|
38
|
+
export interface ElevenLabsErrorInfo {
|
|
39
|
+
code: ElevenLabsErrorCode;
|
|
40
|
+
type: ElevenLabsErrorType;
|
|
41
|
+
httpStatus: number;
|
|
42
|
+
message: string;
|
|
43
|
+
solution: string;
|
|
44
|
+
documentationUrl?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Map of error codes to detailed error information
|
|
48
|
+
*/
|
|
49
|
+
export declare const ELEVENLABS_ERROR_MAP: Record<ElevenLabsErrorCode, ElevenLabsErrorInfo>;
|
|
50
|
+
/**
|
|
51
|
+
* Parse ElevenLabs API error response and return detailed error information
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseElevenLabsError(statusCode: number, responseBody: string): ElevenLabsErrorInfo;
|
|
54
|
+
/**
|
|
55
|
+
* Format error information into a user-friendly message
|
|
56
|
+
*/
|
|
57
|
+
export declare function formatElevenLabsError(errorInfo: ElevenLabsErrorInfo): string;
|
|
58
|
+
/**
|
|
59
|
+
* Check if an error is retryable (rate limit errors)
|
|
60
|
+
*/
|
|
61
|
+
export declare function isRetryableError(errorInfo: ElevenLabsErrorInfo): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Get recommended retry delay in milliseconds for retryable errors
|
|
64
|
+
*/
|
|
65
|
+
export declare function getRetryDelay(errorInfo: ElevenLabsErrorInfo, attemptNumber: number): number;
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* ElevenLabs API error codes and types based on official documentation
|
|
8
|
+
* https://elevenlabs.io/docs/api-reference/error-messages
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Error codes returned by ElevenLabs API
|
|
12
|
+
*/
|
|
13
|
+
export var ElevenLabsErrorCode;
|
|
14
|
+
(function (ElevenLabsErrorCode) {
|
|
15
|
+
// 400/401 errors
|
|
16
|
+
ElevenLabsErrorCode["MAX_CHARACTER_LIMIT_EXCEEDED"] = "max_character_limit_exceeded";
|
|
17
|
+
ElevenLabsErrorCode["INVALID_API_KEY"] = "invalid_api_key";
|
|
18
|
+
ElevenLabsErrorCode["QUOTA_EXCEEDED"] = "quota_exceeded";
|
|
19
|
+
ElevenLabsErrorCode["VOICE_NOT_FOUND"] = "voice_not_found";
|
|
20
|
+
// 403 errors
|
|
21
|
+
ElevenLabsErrorCode["ONLY_FOR_CREATOR_PLUS"] = "only_for_creator+";
|
|
22
|
+
// 429 errors
|
|
23
|
+
ElevenLabsErrorCode["TOO_MANY_CONCURRENT_REQUESTS"] = "too_many_concurrent_requests";
|
|
24
|
+
ElevenLabsErrorCode["SYSTEM_BUSY"] = "system_busy";
|
|
25
|
+
// Generic/Unknown
|
|
26
|
+
ElevenLabsErrorCode["UNKNOWN"] = "unknown";
|
|
27
|
+
})(ElevenLabsErrorCode || (ElevenLabsErrorCode = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Error type categories for easier handling
|
|
30
|
+
*/
|
|
31
|
+
export var ElevenLabsErrorType;
|
|
32
|
+
(function (ElevenLabsErrorType) {
|
|
33
|
+
ElevenLabsErrorType["AUTHENTICATION"] = "authentication";
|
|
34
|
+
ElevenLabsErrorType["PERMISSION"] = "permission";
|
|
35
|
+
ElevenLabsErrorType["QUOTA"] = "quota";
|
|
36
|
+
ElevenLabsErrorType["RATE_LIMIT"] = "rate_limit";
|
|
37
|
+
ElevenLabsErrorType["VALIDATION"] = "validation";
|
|
38
|
+
ElevenLabsErrorType["NETWORK"] = "network";
|
|
39
|
+
ElevenLabsErrorType["UNKNOWN"] = "unknown";
|
|
40
|
+
})(ElevenLabsErrorType || (ElevenLabsErrorType = {}));
|
|
41
|
+
/**
|
|
42
|
+
* Map of error codes to detailed error information
|
|
43
|
+
*/
|
|
44
|
+
export const ELEVENLABS_ERROR_MAP = {
|
|
45
|
+
[ElevenLabsErrorCode.MAX_CHARACTER_LIMIT_EXCEEDED]: {
|
|
46
|
+
code: ElevenLabsErrorCode.MAX_CHARACTER_LIMIT_EXCEEDED,
|
|
47
|
+
type: ElevenLabsErrorType.VALIDATION,
|
|
48
|
+
httpStatus: 400,
|
|
49
|
+
message: 'You are sending too many characters in a single request.',
|
|
50
|
+
solution: 'Split the request into smaller chunks. Check the character limits for your model at https://elevenlabs.io/docs/api-reference/text-to-speech#character-limits',
|
|
51
|
+
documentationUrl: 'https://elevenlabs.io/docs/api-reference/text-to-speech#character-limits',
|
|
52
|
+
},
|
|
53
|
+
[ElevenLabsErrorCode.INVALID_API_KEY]: {
|
|
54
|
+
code: ElevenLabsErrorCode.INVALID_API_KEY,
|
|
55
|
+
type: ElevenLabsErrorType.AUTHENTICATION,
|
|
56
|
+
httpStatus: 401,
|
|
57
|
+
message: 'Your API key is invalid or has not been set correctly.',
|
|
58
|
+
solution: 'Ensure the request is correctly authenticated. Check your API key at https://elevenlabs.io/app/settings/api-keys and run: blackbox voice configure',
|
|
59
|
+
documentationUrl: 'https://elevenlabs.io/docs/api-reference/authentication',
|
|
60
|
+
},
|
|
61
|
+
[ElevenLabsErrorCode.QUOTA_EXCEEDED]: {
|
|
62
|
+
code: ElevenLabsErrorCode.QUOTA_EXCEEDED,
|
|
63
|
+
type: ElevenLabsErrorType.QUOTA,
|
|
64
|
+
httpStatus: 401,
|
|
65
|
+
message: 'You have insufficient quota to complete the request.',
|
|
66
|
+
solution: 'On the Creator plan and above, you can enable usage-based billing from your Subscription page at https://elevenlabs.io/app/subscription',
|
|
67
|
+
documentationUrl: 'https://elevenlabs.io/app/subscription',
|
|
68
|
+
},
|
|
69
|
+
[ElevenLabsErrorCode.VOICE_NOT_FOUND]: {
|
|
70
|
+
code: ElevenLabsErrorCode.VOICE_NOT_FOUND,
|
|
71
|
+
type: ElevenLabsErrorType.VALIDATION,
|
|
72
|
+
httpStatus: 400,
|
|
73
|
+
message: 'The voice_id you entered is incorrect.',
|
|
74
|
+
solution: 'Check that you are using the correct voice_id for the voice you want to use. You can verify this in My Voices at https://elevenlabs.io/app/voice-library',
|
|
75
|
+
documentationUrl: 'https://elevenlabs.io/app/voice-library',
|
|
76
|
+
},
|
|
77
|
+
[ElevenLabsErrorCode.ONLY_FOR_CREATOR_PLUS]: {
|
|
78
|
+
code: ElevenLabsErrorCode.ONLY_FOR_CREATOR_PLUS,
|
|
79
|
+
type: ElevenLabsErrorType.PERMISSION,
|
|
80
|
+
httpStatus: 403,
|
|
81
|
+
message: 'You are trying to use professional voices on a free or basic subscription.',
|
|
82
|
+
solution: 'Upgrade to Creator tier or higher to access professional voices at https://elevenlabs.io/pricing',
|
|
83
|
+
documentationUrl: 'https://elevenlabs.io/pricing',
|
|
84
|
+
},
|
|
85
|
+
[ElevenLabsErrorCode.TOO_MANY_CONCURRENT_REQUESTS]: {
|
|
86
|
+
code: ElevenLabsErrorCode.TOO_MANY_CONCURRENT_REQUESTS,
|
|
87
|
+
type: ElevenLabsErrorType.RATE_LIMIT,
|
|
88
|
+
httpStatus: 429,
|
|
89
|
+
message: 'You have exceeded the concurrency limit for your subscription.',
|
|
90
|
+
solution: 'Wait for existing requests to complete before making new ones. Consider upgrading your subscription for higher concurrency limits at https://elevenlabs.io/docs/api-reference/concurrency-and-priority',
|
|
91
|
+
documentationUrl: 'https://elevenlabs.io/docs/api-reference/concurrency-and-priority',
|
|
92
|
+
},
|
|
93
|
+
[ElevenLabsErrorCode.SYSTEM_BUSY]: {
|
|
94
|
+
code: ElevenLabsErrorCode.SYSTEM_BUSY,
|
|
95
|
+
type: ElevenLabsErrorType.RATE_LIMIT,
|
|
96
|
+
httpStatus: 429,
|
|
97
|
+
message: 'Our services are experiencing high levels of traffic and your request could not be processed.',
|
|
98
|
+
solution: 'Retry the request later with exponential backoff. Consider upgrading your subscription to get higher priority at https://elevenlabs.io/docs/api-reference/concurrency-and-priority',
|
|
99
|
+
documentationUrl: 'https://elevenlabs.io/docs/api-reference/concurrency-and-priority',
|
|
100
|
+
},
|
|
101
|
+
[ElevenLabsErrorCode.UNKNOWN]: {
|
|
102
|
+
code: ElevenLabsErrorCode.UNKNOWN,
|
|
103
|
+
type: ElevenLabsErrorType.UNKNOWN,
|
|
104
|
+
httpStatus: 500,
|
|
105
|
+
message: 'An unknown error occurred.',
|
|
106
|
+
solution: 'Please try again. If the problem persists, contact ElevenLabs support at https://help.elevenlabs.io/hc/en-us/requests/new',
|
|
107
|
+
documentationUrl: 'https://help.elevenlabs.io/hc/en-us/requests/new',
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Parse ElevenLabs API error response and return detailed error information
|
|
112
|
+
*/
|
|
113
|
+
export function parseElevenLabsError(statusCode, responseBody) {
|
|
114
|
+
try {
|
|
115
|
+
// Try to parse as JSON
|
|
116
|
+
const json = JSON.parse(responseBody);
|
|
117
|
+
// Extract error code from various possible locations
|
|
118
|
+
const errorCode = json.detail?.code ||
|
|
119
|
+
json.code ||
|
|
120
|
+
json.detail?.status ||
|
|
121
|
+
json.status;
|
|
122
|
+
// Check if we have a known error code
|
|
123
|
+
if (errorCode && errorCode in ELEVENLABS_ERROR_MAP) {
|
|
124
|
+
return ELEVENLABS_ERROR_MAP[errorCode];
|
|
125
|
+
}
|
|
126
|
+
// Fall back to HTTP status code mapping
|
|
127
|
+
return mapHttpStatusToError(statusCode, responseBody);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// If JSON parsing fails, map by HTTP status code
|
|
131
|
+
return mapHttpStatusToError(statusCode, responseBody);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Map HTTP status code to error information when specific error code is not available
|
|
136
|
+
*/
|
|
137
|
+
function mapHttpStatusToError(statusCode, responseBody) {
|
|
138
|
+
switch (statusCode) {
|
|
139
|
+
case 400:
|
|
140
|
+
// Could be various validation errors
|
|
141
|
+
if (responseBody.toLowerCase().includes('character')) {
|
|
142
|
+
return ELEVENLABS_ERROR_MAP[ElevenLabsErrorCode.MAX_CHARACTER_LIMIT_EXCEEDED];
|
|
143
|
+
}
|
|
144
|
+
if (responseBody.toLowerCase().includes('voice')) {
|
|
145
|
+
return ELEVENLABS_ERROR_MAP[ElevenLabsErrorCode.VOICE_NOT_FOUND];
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
code: ElevenLabsErrorCode.UNKNOWN,
|
|
149
|
+
type: ElevenLabsErrorType.VALIDATION,
|
|
150
|
+
httpStatus: 400,
|
|
151
|
+
message: `Bad request: ${responseBody}`,
|
|
152
|
+
solution: 'Check your request parameters and try again.',
|
|
153
|
+
};
|
|
154
|
+
case 401:
|
|
155
|
+
// Authentication errors
|
|
156
|
+
if (responseBody.toLowerCase().includes('quota')) {
|
|
157
|
+
return ELEVENLABS_ERROR_MAP[ElevenLabsErrorCode.QUOTA_EXCEEDED];
|
|
158
|
+
}
|
|
159
|
+
return ELEVENLABS_ERROR_MAP[ElevenLabsErrorCode.INVALID_API_KEY];
|
|
160
|
+
case 403:
|
|
161
|
+
// Permission errors
|
|
162
|
+
if (responseBody.toLowerCase().includes('creator') ||
|
|
163
|
+
responseBody.toLowerCase().includes('professional')) {
|
|
164
|
+
return ELEVENLABS_ERROR_MAP[ElevenLabsErrorCode.ONLY_FOR_CREATOR_PLUS];
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
code: ElevenLabsErrorCode.UNKNOWN,
|
|
168
|
+
type: ElevenLabsErrorType.PERMISSION,
|
|
169
|
+
httpStatus: 403,
|
|
170
|
+
message: `Permission denied: ${responseBody}`,
|
|
171
|
+
solution: 'Ensure your API key has the required permissions at https://elevenlabs.io/app/settings/api-keys',
|
|
172
|
+
documentationUrl: 'https://elevenlabs.io/app/settings/api-keys',
|
|
173
|
+
};
|
|
174
|
+
case 429:
|
|
175
|
+
// Rate limit errors
|
|
176
|
+
if (responseBody.toLowerCase().includes('concurrent')) {
|
|
177
|
+
return ELEVENLABS_ERROR_MAP[ElevenLabsErrorCode.TOO_MANY_CONCURRENT_REQUESTS];
|
|
178
|
+
}
|
|
179
|
+
if (responseBody.toLowerCase().includes('busy') ||
|
|
180
|
+
responseBody.toLowerCase().includes('traffic')) {
|
|
181
|
+
return ELEVENLABS_ERROR_MAP[ElevenLabsErrorCode.SYSTEM_BUSY];
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
code: ElevenLabsErrorCode.UNKNOWN,
|
|
185
|
+
type: ElevenLabsErrorType.RATE_LIMIT,
|
|
186
|
+
httpStatus: 429,
|
|
187
|
+
message: `Rate limit exceeded: ${responseBody}`,
|
|
188
|
+
solution: 'Wait a moment and try again. Consider implementing exponential backoff for retries.',
|
|
189
|
+
};
|
|
190
|
+
default:
|
|
191
|
+
return {
|
|
192
|
+
code: ElevenLabsErrorCode.UNKNOWN,
|
|
193
|
+
type: ElevenLabsErrorType.UNKNOWN,
|
|
194
|
+
httpStatus: statusCode,
|
|
195
|
+
message: responseBody || 'An unknown error occurred',
|
|
196
|
+
solution: 'Please try again. If the problem persists, contact ElevenLabs support at https://help.elevenlabs.io/hc/en-us/requests/new',
|
|
197
|
+
documentationUrl: 'https://help.elevenlabs.io/hc/en-us/requests/new',
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Format error information into a user-friendly message
|
|
203
|
+
*/
|
|
204
|
+
export function formatElevenLabsError(errorInfo) {
|
|
205
|
+
let message = `${errorInfo.message}\n\n`;
|
|
206
|
+
message += `Solution: ${errorInfo.solution}`;
|
|
207
|
+
if (errorInfo.documentationUrl) {
|
|
208
|
+
message += `\n\nFor more information, visit: ${errorInfo.documentationUrl}`;
|
|
209
|
+
}
|
|
210
|
+
return message;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Check if an error is retryable (rate limit errors)
|
|
214
|
+
*/
|
|
215
|
+
export function isRetryableError(errorInfo) {
|
|
216
|
+
return errorInfo.type === ElevenLabsErrorType.RATE_LIMIT;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get recommended retry delay in milliseconds for retryable errors
|
|
220
|
+
*/
|
|
221
|
+
export function getRetryDelay(errorInfo, attemptNumber) {
|
|
222
|
+
if (!isRetryableError(errorInfo)) {
|
|
223
|
+
return 0;
|
|
224
|
+
}
|
|
225
|
+
// Exponential backoff: 1s, 2s, 4s, 8s, 16s
|
|
226
|
+
const baseDelay = 1000;
|
|
227
|
+
const maxDelay = 16000;
|
|
228
|
+
const delay = Math.min(baseDelay * Math.pow(2, attemptNumber - 1), maxDelay);
|
|
229
|
+
// Add jitter to prevent thundering herd
|
|
230
|
+
const jitter = Math.random() * 0.3 * delay;
|
|
231
|
+
return Math.floor(delay + jitter);
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=elevenLabsErrors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elevenLabsErrors.js","sourceRoot":"","sources":["../../../src/services/elevenLabsErrors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { type ElevenLabsErrorInfo } from './elevenLabsErrors.js';
|
|
7
|
+
export interface ElevenLabsConfig {
|
|
8
|
+
apiKey: string;
|
|
9
|
+
agentId?: string;
|
|
10
|
+
model?: string;
|
|
11
|
+
language?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface TranscriptionResult {
|
|
14
|
+
text: string;
|
|
15
|
+
language?: string;
|
|
16
|
+
duration?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ApiKeyValidationResult {
|
|
19
|
+
valid: boolean;
|
|
20
|
+
error?: string;
|
|
21
|
+
errorType?: 'missing' | 'invalid' | 'permission' | 'network' | 'unknown';
|
|
22
|
+
errorInfo?: ElevenLabsErrorInfo;
|
|
23
|
+
}
|
|
24
|
+
export interface ElevenLabsError {
|
|
25
|
+
detail?: {
|
|
26
|
+
status?: string;
|
|
27
|
+
message?: string;
|
|
28
|
+
};
|
|
29
|
+
message?: string;
|
|
30
|
+
status?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Service for interacting with ElevenLabs Speech-to-Text API
|
|
34
|
+
*/
|
|
35
|
+
export declare class ElevenLabsService {
|
|
36
|
+
private readonly apiKey;
|
|
37
|
+
private readonly model;
|
|
38
|
+
private readonly language;
|
|
39
|
+
private readonly baseUrl;
|
|
40
|
+
constructor(config: ElevenLabsConfig);
|
|
41
|
+
/**
|
|
42
|
+
* Transcribe audio file to text using ElevenLabs API
|
|
43
|
+
* @param audioFilePath Path to the audio file
|
|
44
|
+
* @returns Transcription result
|
|
45
|
+
*/
|
|
46
|
+
transcribe(audioFilePath: string): Promise<TranscriptionResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Validate API key by making a test request
|
|
49
|
+
* @returns true if API key is valid
|
|
50
|
+
*/
|
|
51
|
+
validateApiKey(): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Validate API key with detailed error information
|
|
54
|
+
* @returns Validation result with error details
|
|
55
|
+
*/
|
|
56
|
+
validateApiKeyDetailed(): Promise<ApiKeyValidationResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Get available models for speech-to-text
|
|
59
|
+
* @returns List of available models
|
|
60
|
+
*/
|
|
61
|
+
getAvailableModels(): Promise<string[]>;
|
|
62
|
+
}
|