@blackbox_ai/blackbox-cli 0.0.9 → 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 +11 -2
- 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 +5 -2
- package/dist/src/commands/configure/ConfigureUI.js +181 -41
- package/dist/src/commands/configure/ConfigureUI.js.map +1 -1
- package/dist/src/commands/configure/index.js +35 -3
- package/dist/src/commands/configure/index.js.map +1 -1
- package/dist/src/commands/configure.js +20 -3
- package/dist/src/commands/configure.js.map +1 -1
- 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 +4 -2
- package/dist/src/config/auth.js +36 -1
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/config.d.ts +7 -1
- package/dist/src/config/config.js +68 -9
- 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.js +14 -39
- package/dist/src/config/modelFetcher.js.map +1 -1
- package/dist/src/config/settings.js +64 -0
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +351 -0
- package/dist/src/config/settingsSchema.js +351 -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 +57 -27
- 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 +418 -5
- 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 +5 -4
- package/dist/src/ui/components/AuthDialog.js +89 -52
- 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 +3 -1
- package/dist/src/ui/components/GenericProviderKeyPrompt.js +17 -4
- package/dist/src/ui/components/GenericProviderKeyPrompt.js.map +1 -1
- 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 +4 -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 +11 -2
- 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,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":"AAAA;;;;GAIG;AAEH;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,mBAgBX;AAhBD,WAAY,mBAAmB;IAC7B,iBAAiB;IACjB,oFAA6D,CAAA;IAC7D,0DAAmC,CAAA;IACnC,wDAAiC,CAAA;IACjC,0DAAmC,CAAA;IAEnC,aAAa;IACb,kEAA2C,CAAA;IAE3C,aAAa;IACb,oFAA6D,CAAA;IAC7D,kDAA2B,CAAA;IAE3B,kBAAkB;IAClB,0CAAmB,CAAA;AACrB,CAAC,EAhBW,mBAAmB,KAAnB,mBAAmB,QAgB9B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,mBAQX;AARD,WAAY,mBAAmB;IAC7B,wDAAiC,CAAA;IACjC,gDAAyB,CAAA;IACzB,sCAAe,CAAA;IACf,gDAAyB,CAAA;IACzB,gDAAyB,CAAA;IACzB,0CAAmB,CAAA;IACnB,0CAAmB,CAAA;AACrB,CAAC,EARW,mBAAmB,KAAnB,mBAAmB,QAQ9B;AAcD;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAqD;IACpF,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,EAAE;QAClD,IAAI,EAAE,mBAAmB,CAAC,4BAA4B;QACtD,IAAI,EAAE,mBAAmB,CAAC,UAAU;QACpC,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,0DAA0D;QACnE,QAAQ,EAAE,8JAA8J;QACxK,gBAAgB,EAAE,0EAA0E;KAC7F;IAED,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE;QACrC,IAAI,EAAE,mBAAmB,CAAC,eAAe;QACzC,IAAI,EAAE,mBAAmB,CAAC,cAAc;QACxC,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,wDAAwD;QACjE,QAAQ,EAAE,oJAAoJ;QAC9J,gBAAgB,EAAE,yDAAyD;KAC5E;IAED,CAAC,mBAAmB,CAAC,cAAc,CAAC,EAAE;QACpC,IAAI,EAAE,mBAAmB,CAAC,cAAc;QACxC,IAAI,EAAE,mBAAmB,CAAC,KAAK;QAC/B,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,sDAAsD;QAC/D,QAAQ,EAAE,yIAAyI;QACnJ,gBAAgB,EAAE,wCAAwC;KAC3D;IAED,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE;QACrC,IAAI,EAAE,mBAAmB,CAAC,eAAe;QACzC,IAAI,EAAE,mBAAmB,CAAC,UAAU;QACpC,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,wCAAwC;QACjD,QAAQ,EAAE,0JAA0J;QACpK,gBAAgB,EAAE,yCAAyC;KAC5D;IAED,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,EAAE;QAC3C,IAAI,EAAE,mBAAmB,CAAC,qBAAqB;QAC/C,IAAI,EAAE,mBAAmB,CAAC,UAAU;QACpC,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,4EAA4E;QACrF,QAAQ,EAAE,kGAAkG;QAC5G,gBAAgB,EAAE,+BAA+B;KAClD;IAED,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,EAAE;QAClD,IAAI,EAAE,mBAAmB,CAAC,4BAA4B;QACtD,IAAI,EAAE,mBAAmB,CAAC,UAAU;QACpC,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,gEAAgE;QACzE,QAAQ,EAAE,wMAAwM;QAClN,gBAAgB,EAAE,mEAAmE;KACtF;IAED,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;QACjC,IAAI,EAAE,mBAAmB,CAAC,WAAW;QACrC,IAAI,EAAE,mBAAmB,CAAC,UAAU;QACpC,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,+FAA+F;QACxG,QAAQ,EAAE,oLAAoL;QAC9L,gBAAgB,EAAE,mEAAmE;KACtF;IAED,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE;QAC7B,IAAI,EAAE,mBAAmB,CAAC,OAAO;QACjC,IAAI,EAAE,mBAAmB,CAAC,OAAO;QACjC,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,4BAA4B;QACrC,QAAQ,EAAE,2HAA2H;QACrI,gBAAgB,EAAE,kDAAkD;KACrE;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,CAAC;QACH,uBAAuB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CASnC,CAAC;QAEF,qDAAqD;QACrD,MAAM,SAAS,GACb,IAAI,CAAC,MAAM,EAAE,IAAI;YACjB,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,MAAM,EAAE,MAAM;YACnB,IAAI,CAAC,MAAM,CAAC;QAEd,sCAAsC;QACtC,IAAI,SAAS,IAAI,SAAS,IAAI,oBAAoB,EAAE,CAAC;YACnD,OAAO,oBAAoB,CAAC,SAAgC,CAAC,CAAC;QAChE,CAAC;QAED,wCAAwC;QACxC,OAAO,oBAAoB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;QACjD,OAAO,oBAAoB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,UAAkB,EAAE,YAAoB;IACpE,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,GAAG;YACN,qCAAqC;YACrC,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrD,OAAO,oBAAoB,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjD,OAAO,oBAAoB,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;YACnE,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,mBAAmB,CAAC,OAAO;gBACjC,IAAI,EAAE,mBAAmB,CAAC,UAAU;gBACpC,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,gBAAgB,YAAY,EAAE;gBACvC,QAAQ,EAAE,8CAA8C;aACzD,CAAC;QAEJ,KAAK,GAAG;YACN,wBAAwB;YACxB,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjD,OAAO,oBAAoB,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,oBAAoB,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;QAEnE,KAAK,GAAG;YACN,oBAAoB;YACpB,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC9C,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACxD,OAAO,oBAAoB,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;YACzE,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,mBAAmB,CAAC,OAAO;gBACjC,IAAI,EAAE,mBAAmB,CAAC,UAAU;gBACpC,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,sBAAsB,YAAY,EAAE;gBAC7C,QAAQ,EAAE,iGAAiG;gBAC3G,gBAAgB,EAAE,6CAA6C;aAChE,CAAC;QAEJ,KAAK,GAAG;YACN,oBAAoB;YACpB,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtD,OAAO,oBAAoB,CAAC,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC3C,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnD,OAAO,oBAAoB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,mBAAmB,CAAC,OAAO;gBACjC,IAAI,EAAE,mBAAmB,CAAC,UAAU;gBACpC,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,wBAAwB,YAAY,EAAE;gBAC/C,QAAQ,EAAE,qFAAqF;aAChG,CAAC;QAEJ;YACE,OAAO;gBACL,IAAI,EAAE,mBAAmB,CAAC,OAAO;gBACjC,IAAI,EAAE,mBAAmB,CAAC,OAAO;gBACjC,UAAU,EAAE,UAAU;gBACtB,OAAO,EAAE,YAAY,IAAI,2BAA2B;gBACpD,QAAQ,EAAE,2HAA2H;gBACrI,gBAAgB,EAAE,kDAAkD;aACrE,CAAC;IACN,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAA8B;IAClE,IAAI,OAAO,GAAG,GAAG,SAAS,CAAC,OAAO,MAAM,CAAC;IACzC,OAAO,IAAI,aAAa,SAAS,CAAC,QAAQ,EAAE,CAAC;IAE7C,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAC/B,OAAO,IAAI,oCAAoC,SAAS,CAAC,gBAAgB,EAAE,CAAC;IAC9E,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA8B;IAC7D,OAAO,SAAS,CAAC,IAAI,KAAK,mBAAmB,CAAC,UAAU,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,SAA8B,EAAE,aAAqB;IACjF,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,2CAA2C;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC;IACvB,MAAM,QAAQ,GAAG,KAAK,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE7E,wCAAwC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;IAE3C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { getErrorMessage } from '@blackbox_ai/blackbox-cli-core';
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import { fetch } from 'undici';
|
|
9
|
+
import { parseElevenLabsError, formatElevenLabsError, ElevenLabsErrorType, } from './elevenLabsErrors.js';
|
|
10
|
+
/**
|
|
11
|
+
* Service for interacting with ElevenLabs Speech-to-Text API
|
|
12
|
+
*/
|
|
13
|
+
export class ElevenLabsService {
|
|
14
|
+
apiKey;
|
|
15
|
+
model;
|
|
16
|
+
language;
|
|
17
|
+
baseUrl = 'https://api.elevenlabs.io/v1';
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.apiKey = config.apiKey;
|
|
20
|
+
this.model = config.model || 'scribe_v2';
|
|
21
|
+
this.language = config.language || 'en';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Transcribe audio file to text using ElevenLabs API
|
|
25
|
+
* @param audioFilePath Path to the audio file
|
|
26
|
+
* @returns Transcription result
|
|
27
|
+
*/
|
|
28
|
+
async transcribe(audioFilePath) {
|
|
29
|
+
try {
|
|
30
|
+
// Read audio file
|
|
31
|
+
const audioBuffer = fs.readFileSync(audioFilePath);
|
|
32
|
+
// Create boundary for multipart/form-data
|
|
33
|
+
const boundary = `----WebKitFormBoundary${Math.random().toString(36).substring(2)}`;
|
|
34
|
+
// Build multipart form data manually
|
|
35
|
+
const parts = [];
|
|
36
|
+
// Add model_id field
|
|
37
|
+
parts.push(Buffer.from(`--${boundary}\r\n` +
|
|
38
|
+
`Content-Disposition: form-data; name="model_id"\r\n\r\n` +
|
|
39
|
+
`${this.model}\r\n`));
|
|
40
|
+
// Add language field if provided
|
|
41
|
+
if (this.language) {
|
|
42
|
+
parts.push(Buffer.from(`--${boundary}\r\n` +
|
|
43
|
+
`Content-Disposition: form-data; name="language"\r\n\r\n` +
|
|
44
|
+
`${this.language}\r\n`));
|
|
45
|
+
}
|
|
46
|
+
// Add audio file - API expects "file" not "audio"
|
|
47
|
+
parts.push(Buffer.from(`--${boundary}\r\n` +
|
|
48
|
+
`Content-Disposition: form-data; name="file"; filename="recording.wav"\r\n` +
|
|
49
|
+
`Content-Type: audio/wav\r\n\r\n`));
|
|
50
|
+
parts.push(audioBuffer);
|
|
51
|
+
parts.push(Buffer.from(`\r\n`));
|
|
52
|
+
// Add closing boundary
|
|
53
|
+
parts.push(Buffer.from(`--${boundary}--\r\n`));
|
|
54
|
+
// Combine all parts
|
|
55
|
+
const body = Buffer.concat(parts);
|
|
56
|
+
// Make API request with proper Content-Type
|
|
57
|
+
const response = await fetch(`${this.baseUrl}/speech-to-text`, {
|
|
58
|
+
method: 'POST',
|
|
59
|
+
headers: {
|
|
60
|
+
'xi-api-key': this.apiKey,
|
|
61
|
+
'Content-Type': `multipart/form-data; boundary=${boundary}`,
|
|
62
|
+
'Content-Length': body.length.toString(),
|
|
63
|
+
},
|
|
64
|
+
body,
|
|
65
|
+
});
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
const responseText = await response.text();
|
|
68
|
+
const errorInfo = parseElevenLabsError(response.status, responseText);
|
|
69
|
+
const errorMessage = formatElevenLabsError(errorInfo);
|
|
70
|
+
throw new Error(errorMessage);
|
|
71
|
+
}
|
|
72
|
+
const result = (await response.json());
|
|
73
|
+
return {
|
|
74
|
+
text: result.text || '',
|
|
75
|
+
language: result.language,
|
|
76
|
+
duration: result.duration,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
throw new Error(`Failed to transcribe audio: ${getErrorMessage(error)}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validate API key by making a test request
|
|
85
|
+
* @returns true if API key is valid
|
|
86
|
+
*/
|
|
87
|
+
async validateApiKey() {
|
|
88
|
+
const result = await this.validateApiKeyDetailed();
|
|
89
|
+
return result.valid;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Validate API key with detailed error information
|
|
93
|
+
* @returns Validation result with error details
|
|
94
|
+
*/
|
|
95
|
+
async validateApiKeyDetailed() {
|
|
96
|
+
try {
|
|
97
|
+
// Try to get user subscription info to validate the key
|
|
98
|
+
const response = await fetch(`${this.baseUrl}/user/subscription`, {
|
|
99
|
+
method: 'GET',
|
|
100
|
+
headers: {
|
|
101
|
+
'xi-api-key': this.apiKey,
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
if (response.ok) {
|
|
105
|
+
return { valid: true };
|
|
106
|
+
}
|
|
107
|
+
// Parse error response with detailed error information
|
|
108
|
+
const responseText = await response.text();
|
|
109
|
+
const errorInfo = parseElevenLabsError(response.status, responseText);
|
|
110
|
+
// Map error type to validation result
|
|
111
|
+
let errorType;
|
|
112
|
+
switch (errorInfo.type) {
|
|
113
|
+
case ElevenLabsErrorType.AUTHENTICATION:
|
|
114
|
+
errorType = 'invalid';
|
|
115
|
+
break;
|
|
116
|
+
case ElevenLabsErrorType.PERMISSION:
|
|
117
|
+
errorType = 'permission';
|
|
118
|
+
break;
|
|
119
|
+
case ElevenLabsErrorType.NETWORK:
|
|
120
|
+
errorType = 'network';
|
|
121
|
+
break;
|
|
122
|
+
default:
|
|
123
|
+
errorType = 'unknown';
|
|
124
|
+
}
|
|
125
|
+
// If subscription endpoint fails, try the voices endpoint as fallback
|
|
126
|
+
if (response.status >= 500) {
|
|
127
|
+
const voicesResponse = await fetch(`${this.baseUrl}/voices`, {
|
|
128
|
+
method: 'GET',
|
|
129
|
+
headers: {
|
|
130
|
+
'xi-api-key': this.apiKey,
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
if (voicesResponse.ok) {
|
|
134
|
+
return { valid: true };
|
|
135
|
+
}
|
|
136
|
+
const voicesResponseText = await voicesResponse.text();
|
|
137
|
+
const voicesErrorInfo = parseElevenLabsError(voicesResponse.status, voicesResponseText);
|
|
138
|
+
return {
|
|
139
|
+
valid: false,
|
|
140
|
+
error: formatElevenLabsError(voicesErrorInfo),
|
|
141
|
+
errorType: voicesErrorInfo.type === ElevenLabsErrorType.AUTHENTICATION ? 'invalid' :
|
|
142
|
+
voicesErrorInfo.type === ElevenLabsErrorType.PERMISSION ? 'permission' :
|
|
143
|
+
voicesErrorInfo.type === ElevenLabsErrorType.NETWORK ? 'network' : 'unknown',
|
|
144
|
+
errorInfo: voicesErrorInfo,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
valid: false,
|
|
149
|
+
error: formatElevenLabsError(errorInfo),
|
|
150
|
+
errorType,
|
|
151
|
+
errorInfo,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
return {
|
|
156
|
+
valid: false,
|
|
157
|
+
error: `Network error: ${getErrorMessage(error)}`,
|
|
158
|
+
errorType: 'network',
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get available models for speech-to-text
|
|
164
|
+
* @returns List of available models
|
|
165
|
+
*/
|
|
166
|
+
async getAvailableModels() {
|
|
167
|
+
try {
|
|
168
|
+
const response = await fetch(`${this.baseUrl}/models`, {
|
|
169
|
+
method: 'GET',
|
|
170
|
+
headers: {
|
|
171
|
+
'xi-api-key': this.apiKey,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
if (!response.ok) {
|
|
175
|
+
throw new Error(`Failed to fetch models: ${response.statusText}`);
|
|
176
|
+
}
|
|
177
|
+
const data = (await response.json());
|
|
178
|
+
return data.models?.map((m) => m.model_id) || [];
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
console.error('Failed to fetch available models:', error);
|
|
182
|
+
return ['scribe_v1', 'scribe_v1_experimental', 'scribe_v2']; // Update default models
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=elevenLabsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elevenLabsService.js","sourceRoot":"","sources":["../../../src/services/elevenLabsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export interface StreamingTranscriptionConfig {
|
|
7
|
+
apiKey: string;
|
|
8
|
+
model?: string;
|
|
9
|
+
language?: string;
|
|
10
|
+
onPartialTranscript?: (text: string) => void;
|
|
11
|
+
onFinalTranscript?: (text: string) => void;
|
|
12
|
+
onError?: (error: Error) => void;
|
|
13
|
+
}
|
|
14
|
+
export interface StreamingTranscriptionResult {
|
|
15
|
+
fullText: string;
|
|
16
|
+
partialTexts: string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Service for real-time streaming transcription using ElevenLabs WebSocket API
|
|
20
|
+
* Based on: https://elevenlabs.io/docs/developers/guides/cookbooks/speech-to-text/streaming
|
|
21
|
+
*/
|
|
22
|
+
export declare class ElevenLabsStreamingService {
|
|
23
|
+
private readonly apiKey;
|
|
24
|
+
private readonly model;
|
|
25
|
+
private readonly onPartialTranscript?;
|
|
26
|
+
private readonly onFinalTranscript?;
|
|
27
|
+
private readonly onError?;
|
|
28
|
+
private ws;
|
|
29
|
+
private fullTranscript;
|
|
30
|
+
private partialTranscripts;
|
|
31
|
+
private isConnected;
|
|
32
|
+
constructor(config: StreamingTranscriptionConfig);
|
|
33
|
+
/**
|
|
34
|
+
* Start streaming transcription session
|
|
35
|
+
*/
|
|
36
|
+
startStreaming(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Send audio chunk for transcription
|
|
39
|
+
* Audio should be in the correct format (PCM, 16kHz, mono)
|
|
40
|
+
* @param audioChunk Audio data as Buffer
|
|
41
|
+
*/
|
|
42
|
+
sendAudioChunk(audioChunk: Buffer): void;
|
|
43
|
+
/**
|
|
44
|
+
* Stop streaming and close connection
|
|
45
|
+
*/
|
|
46
|
+
stopStreaming(): Promise<StreamingTranscriptionResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Get current full transcript
|
|
49
|
+
*/
|
|
50
|
+
getFullTranscript(): string;
|
|
51
|
+
/**
|
|
52
|
+
* Check if streaming is active
|
|
53
|
+
*/
|
|
54
|
+
isStreaming(): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Reset transcript state
|
|
57
|
+
*/
|
|
58
|
+
reset(): void;
|
|
59
|
+
}
|