@blackbox_ai/blackbox-cli 0.0.9 → 0.8.2
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 +22 -196
- 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,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Low-level cryptographic utilities extracted from streaming-client.ts
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Convert Uint8Array to base64 string
|
|
6
|
+
*/
|
|
7
|
+
export const toB64 = (u8) => {
|
|
8
|
+
// Handle large arrays by chunking to avoid "Maximum call stack size exceeded"
|
|
9
|
+
if (u8.length > 8192) {
|
|
10
|
+
let result = '';
|
|
11
|
+
for (let i = 0; i < u8.length; i += 8192) {
|
|
12
|
+
const chunk = u8.slice(i, i + 8192);
|
|
13
|
+
result += String.fromCharCode.apply(null, Array.from(chunk));
|
|
14
|
+
}
|
|
15
|
+
return btoa(result);
|
|
16
|
+
}
|
|
17
|
+
return btoa(String.fromCharCode.apply(null, Array.from(u8)));
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Convert base64 string to Uint8Array
|
|
21
|
+
*/
|
|
22
|
+
export const fromB64 = (b64) => new Uint8Array(Array.from(atob(b64), c => c.charCodeAt(0)));
|
|
23
|
+
/**
|
|
24
|
+
* Generate a UUID for identification (moved from streaming-client.ts)
|
|
25
|
+
*/
|
|
26
|
+
export const generateUuid = () => 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
27
|
+
const r = Math.random() * 16 | 0;
|
|
28
|
+
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
|
29
|
+
return v.toString(16);
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* Generate a P-384 keypair for both ECDSA and ECDH operations (moved from streaming-client.ts)
|
|
33
|
+
* Reuses the same key material for both operations (matching Rust behavior)
|
|
34
|
+
*/
|
|
35
|
+
export async function generateKeyPair() {
|
|
36
|
+
// Generate a single P-384 keypair
|
|
37
|
+
const ecdsaKeyPair = await crypto.subtle.generateKey({ name: 'ECDSA', namedCurve: 'P-384' }, true, ['sign', 'verify']);
|
|
38
|
+
// Export the private key to reuse for ECDH
|
|
39
|
+
const pkcs8 = await crypto.subtle.exportKey('pkcs8', ecdsaKeyPair.privateKey);
|
|
40
|
+
// Import the same private key for ECDH operations
|
|
41
|
+
const ecdhPrivate = await crypto.subtle.importKey('pkcs8', pkcs8, { name: 'ECDH', namedCurve: 'P-384' }, false, ['deriveBits']);
|
|
42
|
+
return {
|
|
43
|
+
ecdhPrivate,
|
|
44
|
+
ecdsaPrivate: ecdsaKeyPair.privateKey,
|
|
45
|
+
ecdsaPublic: ecdsaKeyPair.publicKey
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export function ecdsaRawToDer(raw) {
|
|
49
|
+
// raw is Uint8Array of length 96 for P-384: r(48) || s(48)
|
|
50
|
+
const n = raw.length / 2;
|
|
51
|
+
let r = new Uint8Array(raw.buffer.slice(0, n));
|
|
52
|
+
let s = new Uint8Array(raw.buffer.slice(n));
|
|
53
|
+
// Trim leading zeros
|
|
54
|
+
r = trimZeros(r);
|
|
55
|
+
s = trimZeros(s);
|
|
56
|
+
// Ensure positive (prepend 0x00 if high bit is set)
|
|
57
|
+
if (r[0] & 0x80) {
|
|
58
|
+
const padding = new Uint8Array([0x00]);
|
|
59
|
+
r = concatBytes(padding, r);
|
|
60
|
+
}
|
|
61
|
+
if (s[0] & 0x80) {
|
|
62
|
+
const padding = new Uint8Array([0x00]);
|
|
63
|
+
s = concatBytes(padding, s);
|
|
64
|
+
}
|
|
65
|
+
const rHeader = new Uint8Array([0x02, r.length]);
|
|
66
|
+
const rEnc = concatBytes(rHeader, r);
|
|
67
|
+
const sHeader = new Uint8Array([0x02, s.length]);
|
|
68
|
+
const sEnc = concatBytes(sHeader, s);
|
|
69
|
+
const seqLen = rEnc.length + sEnc.length;
|
|
70
|
+
const seqHeader = new Uint8Array([0x30, seqLen]);
|
|
71
|
+
const der = concatBytes(seqHeader, rEnc, sEnc);
|
|
72
|
+
return der;
|
|
73
|
+
function trimZeros(bytes) {
|
|
74
|
+
let i = 0;
|
|
75
|
+
while (i < bytes.length - 1 && bytes[i] === 0)
|
|
76
|
+
i++;
|
|
77
|
+
const trimmed = new Uint8Array(bytes.length - i);
|
|
78
|
+
for (let j = 0; j < trimmed.length; j++) {
|
|
79
|
+
trimmed[j] = bytes[i + j];
|
|
80
|
+
}
|
|
81
|
+
return trimmed;
|
|
82
|
+
}
|
|
83
|
+
function concatBytes(a, b, c) {
|
|
84
|
+
if (c) {
|
|
85
|
+
const total = a.length + b.length + c.length;
|
|
86
|
+
const out = new Uint8Array(total);
|
|
87
|
+
out.set(a, 0);
|
|
88
|
+
out.set(b, a.length);
|
|
89
|
+
out.set(c, a.length + b.length);
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const total = a.length + b.length;
|
|
94
|
+
const out = new Uint8Array(total);
|
|
95
|
+
out.set(a, 0);
|
|
96
|
+
out.set(b, a.length);
|
|
97
|
+
return out;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Convert ASN.1 DER signature to WebCrypto raw format (r||s)
|
|
102
|
+
export function ecdsaDerToRaw(der) {
|
|
103
|
+
// Parse DER: SEQUENCE { INTEGER r, INTEGER s }
|
|
104
|
+
if (der[0] !== 0x30) {
|
|
105
|
+
throw new Error('Invalid DER signature: not a SEQUENCE');
|
|
106
|
+
}
|
|
107
|
+
let offset = 2; // Skip SEQUENCE tag and length
|
|
108
|
+
// Parse r
|
|
109
|
+
if (der[offset] !== 0x02) {
|
|
110
|
+
throw new Error('Invalid DER signature: r not an INTEGER');
|
|
111
|
+
}
|
|
112
|
+
offset++;
|
|
113
|
+
const rLen = der[offset++];
|
|
114
|
+
let r = der.slice(offset, offset + rLen);
|
|
115
|
+
offset += rLen;
|
|
116
|
+
// Parse s
|
|
117
|
+
if (der[offset] !== 0x02) {
|
|
118
|
+
throw new Error('Invalid DER signature: s not an INTEGER');
|
|
119
|
+
}
|
|
120
|
+
offset++;
|
|
121
|
+
const sLen = der[offset++];
|
|
122
|
+
let s = der.slice(offset, offset + sLen);
|
|
123
|
+
// Remove leading zero padding if present
|
|
124
|
+
if (r[0] === 0x00 && r.length > 1)
|
|
125
|
+
r = r.slice(1);
|
|
126
|
+
if (s[0] === 0x00 && s.length > 1)
|
|
127
|
+
s = s.slice(1);
|
|
128
|
+
// Pad to 48 bytes for P-384
|
|
129
|
+
const targetLen = 48;
|
|
130
|
+
if (r.length < targetLen) {
|
|
131
|
+
const padded = new Uint8Array(targetLen);
|
|
132
|
+
padded.set(r, targetLen - r.length);
|
|
133
|
+
r = padded;
|
|
134
|
+
}
|
|
135
|
+
if (s.length < targetLen) {
|
|
136
|
+
const padded = new Uint8Array(targetLen);
|
|
137
|
+
padded.set(s, targetLen - s.length);
|
|
138
|
+
s = padded;
|
|
139
|
+
}
|
|
140
|
+
// Concatenate r || s
|
|
141
|
+
const raw = new Uint8Array(targetLen * 2);
|
|
142
|
+
raw.set(r, 0);
|
|
143
|
+
raw.set(s, targetLen);
|
|
144
|
+
return raw;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Serialize a WebCrypto ECDSA/ECDH public key to PEM (SPKI)
|
|
148
|
+
*/
|
|
149
|
+
export async function serializePublicKeyPem(publicKey) {
|
|
150
|
+
const spkiBytes = await crypto.subtle.exportKey('spki', publicKey);
|
|
151
|
+
const spkiArray = new Uint8Array(spkiBytes);
|
|
152
|
+
const b64 = toB64(spkiArray);
|
|
153
|
+
const lines = b64.match(/.{1,64}/g) || [];
|
|
154
|
+
const body = lines.join('\r\n');
|
|
155
|
+
return `-----BEGIN PUBLIC KEY-----\r\n${body}\r\n-----END PUBLIC KEY-----\r\n`;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Deserialize PEM (SPKI) public key string to Uint8Array bytes
|
|
159
|
+
*/
|
|
160
|
+
export function deserializePublicKeyPem(pem) {
|
|
161
|
+
const b64 = pem
|
|
162
|
+
.replace('-----BEGIN PUBLIC KEY-----', '')
|
|
163
|
+
.replace('-----END PUBLIC KEY-----', '')
|
|
164
|
+
.replace(/\s/g, '');
|
|
165
|
+
const binaryString = atob(b64);
|
|
166
|
+
const bytes = new Uint8Array(binaryString.length);
|
|
167
|
+
for (let i = 0; i < binaryString.length; i++) {
|
|
168
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
169
|
+
}
|
|
170
|
+
return bytes;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Derive a shared key using ECDH + HKDF (SHA-256) from local private key and server public key (SPKI)
|
|
174
|
+
* Matches the Rust implementation detail (using only X coordinate for HKDF input).
|
|
175
|
+
*/
|
|
176
|
+
export async function deriveSharedKey(localPrivateKey, serverPublicKeySpki) {
|
|
177
|
+
const serverPublicKey = await crypto.subtle.importKey('spki', serverPublicKeySpki.slice().buffer, { name: 'ECDH', namedCurve: 'P-384' }, false, []);
|
|
178
|
+
const sharedSecret = await crypto.subtle.deriveBits({ name: 'ECDH', public: serverPublicKey }, localPrivateKey, 384);
|
|
179
|
+
const sharedSecretBytes = new Uint8Array(sharedSecret);
|
|
180
|
+
// Use X coordinate only (48 bytes for P-384)
|
|
181
|
+
const xCoordinate = sharedSecretBytes.length === 48 ? sharedSecretBytes : sharedSecretBytes.slice(1, 49);
|
|
182
|
+
const hkdfKey = await crypto.subtle.importKey('raw', xCoordinate, 'HKDF', false, ['deriveBits']);
|
|
183
|
+
const derivedKey = await crypto.subtle.deriveBits({
|
|
184
|
+
name: 'HKDF',
|
|
185
|
+
hash: 'SHA-256',
|
|
186
|
+
salt: new Uint8Array(32), // 32 zero bytes for SHA-256
|
|
187
|
+
info: new TextEncoder().encode('handshake data'),
|
|
188
|
+
}, hkdfKey, 256);
|
|
189
|
+
return new Uint8Array(derivedKey);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Encrypt and sign a message using AES-GCM and ECDSA (moved from streaming-client.ts)
|
|
193
|
+
*/
|
|
194
|
+
export async function encryptAndSign(plaintext, sharedKey, signingKey, nonce) {
|
|
195
|
+
const plaintextBytes = new TextEncoder().encode(plaintext);
|
|
196
|
+
const iv = new Uint8Array(12);
|
|
197
|
+
crypto.getRandomValues(iv);
|
|
198
|
+
const aesKey = await crypto.subtle.importKey('raw', sharedKey.slice().buffer, { name: 'AES-GCM' }, false, ['encrypt']);
|
|
199
|
+
const ciphertext = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, aesKey, plaintextBytes);
|
|
200
|
+
const ciphertextArray = new Uint8Array(ciphertext);
|
|
201
|
+
const nonceBytes = new Uint8Array(8);
|
|
202
|
+
const view = new DataView(nonceBytes.buffer);
|
|
203
|
+
view.setBigUint64(0, BigInt(nonce), false);
|
|
204
|
+
const dataToSign = new Uint8Array(nonceBytes.length + iv.length + ciphertextArray.length);
|
|
205
|
+
dataToSign.set(nonceBytes, 0);
|
|
206
|
+
dataToSign.set(iv, nonceBytes.length);
|
|
207
|
+
dataToSign.set(ciphertextArray, nonceBytes.length + iv.length);
|
|
208
|
+
const rawSignature = new Uint8Array(await crypto.subtle.sign({ name: 'ECDSA', hash: 'SHA-256' }, signingKey, dataToSign));
|
|
209
|
+
// Convert to DER format if needed
|
|
210
|
+
let signature;
|
|
211
|
+
if (rawSignature[0] === 0x30) {
|
|
212
|
+
signature = rawSignature;
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
signature = ecdsaRawToDer(rawSignature);
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
nonce,
|
|
219
|
+
iv: toB64(iv),
|
|
220
|
+
ciphertext: toB64(ciphertextArray),
|
|
221
|
+
signature: toB64(signature)
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Decrypt and verify a message using AES-GCM and ECDSA (moved from streaming-client.ts)
|
|
226
|
+
*/
|
|
227
|
+
export async function decryptAndVerify(payload, sharedKey, serverVerifyingKeySpki) {
|
|
228
|
+
const iv = new Uint8Array(Array.from(atob(payload.iv), c => c.charCodeAt(0)));
|
|
229
|
+
const ciphertext = new Uint8Array(Array.from(atob(payload.ciphertext), c => c.charCodeAt(0)));
|
|
230
|
+
const signatureBytes = new Uint8Array(Array.from(atob(payload.signature), c => c.charCodeAt(0)));
|
|
231
|
+
const nonceBytes = new Uint8Array(8);
|
|
232
|
+
const view = new DataView(nonceBytes.buffer);
|
|
233
|
+
view.setBigUint64(0, BigInt(payload.nonce), false);
|
|
234
|
+
const dataToVerify = new Uint8Array(nonceBytes.length + iv.length + ciphertext.length);
|
|
235
|
+
dataToVerify.set(nonceBytes, 0);
|
|
236
|
+
dataToVerify.set(iv, nonceBytes.length);
|
|
237
|
+
dataToVerify.set(ciphertext, nonceBytes.length + iv.length);
|
|
238
|
+
const serverVerifyingKey = await crypto.subtle.importKey('spki', serverVerifyingKeySpki.slice().buffer, { name: 'ECDSA', namedCurve: 'P-384' }, false, ['verify']);
|
|
239
|
+
// Convert DER signature to raw format for WebCrypto verification
|
|
240
|
+
let rawSignature;
|
|
241
|
+
if (signatureBytes[0] === 0x30) {
|
|
242
|
+
// DER format, convert to raw
|
|
243
|
+
rawSignature = ecdsaDerToRaw(signatureBytes);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
// Already raw format
|
|
247
|
+
rawSignature = signatureBytes;
|
|
248
|
+
}
|
|
249
|
+
const isValid = await crypto.subtle.verify({ name: 'ECDSA', hash: 'SHA-256' }, serverVerifyingKey, rawSignature, dataToVerify);
|
|
250
|
+
if (!isValid) {
|
|
251
|
+
throw new Error('Response signature verification failed');
|
|
252
|
+
}
|
|
253
|
+
const aesKey = await crypto.subtle.importKey('raw', sharedKey.slice().buffer, { name: 'AES-GCM' }, false, ['decrypt']);
|
|
254
|
+
const plaintext = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, aesKey, ciphertext);
|
|
255
|
+
return new TextDecoder().decode(plaintext);
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=crypto-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../../../src/encrypt/crypto-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Barrel exports for the encryption module, now split across logical files:
|
|
3
|
+
* - types.ts: shared interfaces
|
|
4
|
+
* - config.ts: configuration and model detection
|
|
5
|
+
* - sessions.ts: session lifecycle management
|
|
6
|
+
* - client.ts: streaming/send functionality
|
|
7
|
+
*/
|
|
8
|
+
export type { EncryptedMessage, SecureSession } from './types.js';
|
|
9
|
+
export { ENCRYPTED_MODELS, ENCRYPTION_CONFIG, isEncryptedModel } from './config.js';
|
|
10
|
+
export { initializeSecureSession, initializeSessionCleanup, } from './sessions.js';
|
|
11
|
+
export { sendMessageStream, } from './client.js';
|
|
12
|
+
export { initializeSecureSession as initializeSession } from './sessions.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Barrel exports for the encryption module, now split across logical files:
|
|
3
|
+
* - types.ts: shared interfaces
|
|
4
|
+
* - config.ts: configuration and model detection
|
|
5
|
+
* - sessions.ts: session lifecycle management
|
|
6
|
+
* - client.ts: streaming/send functionality
|
|
7
|
+
*/
|
|
8
|
+
export { ENCRYPTED_MODELS, ENCRYPTION_CONFIG, isEncryptedModel } from './config.js';
|
|
9
|
+
export { initializeSecureSession, initializeSessionCleanup, } from './sessions.js';
|
|
10
|
+
export { sendMessageStream, } from './client.js';
|
|
11
|
+
// Backward-compatible alias
|
|
12
|
+
export { initializeSecureSession as initializeSession } from './sessions.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/encrypt/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpF,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,4BAA4B;AAC5B,OAAO,EAAE,uBAAuB,IAAI,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculate exponential backoff delay
|
|
3
|
+
*/
|
|
4
|
+
export declare const calculateBackoffDelay: (attemptNumber: number, initialDelay?: number, maxDelay?: number, multiplier?: number) => number;
|
|
5
|
+
/**
|
|
6
|
+
* Check if an HTTP status code should trigger a retry
|
|
7
|
+
*/
|
|
8
|
+
export declare const isRetryableStatusCode: (statusCode: number) => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Check if an error is retryable
|
|
11
|
+
*/
|
|
12
|
+
export declare const isRetryableError: (error: unknown) => boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Retry a function with exponential backoff
|
|
15
|
+
*/
|
|
16
|
+
export declare function retryWithBackoff<T>(fn: () => Promise<T>, options: {
|
|
17
|
+
maxRetries: number;
|
|
18
|
+
onRetry?: (attempt: number, error: unknown, delay: number) => void;
|
|
19
|
+
shouldRetry?: (error: unknown) => boolean;
|
|
20
|
+
}): Promise<T>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { RETRY_INITIAL_DELAY, RETRY_MAX_DELAY, RETRY_BACKOFF_MULTIPLIER, RETRYABLE_STATUS_CODES, } from './config.js';
|
|
2
|
+
/**
|
|
3
|
+
* Sleep for a specified duration
|
|
4
|
+
*/
|
|
5
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
6
|
+
/**
|
|
7
|
+
* Calculate exponential backoff delay
|
|
8
|
+
*/
|
|
9
|
+
export const calculateBackoffDelay = (attemptNumber, initialDelay = RETRY_INITIAL_DELAY, maxDelay = RETRY_MAX_DELAY, multiplier = RETRY_BACKOFF_MULTIPLIER) => {
|
|
10
|
+
const delay = initialDelay * Math.pow(multiplier, attemptNumber);
|
|
11
|
+
return Math.min(delay, maxDelay);
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Check if an HTTP status code should trigger a retry
|
|
15
|
+
*/
|
|
16
|
+
export const isRetryableStatusCode = (statusCode) => RETRYABLE_STATUS_CODES.includes(statusCode);
|
|
17
|
+
/**
|
|
18
|
+
* Check if an error is retryable
|
|
19
|
+
*/
|
|
20
|
+
export const isRetryableError = (error) => {
|
|
21
|
+
if (error instanceof Error) {
|
|
22
|
+
const message = error.message.toLowerCase();
|
|
23
|
+
// Retry on network errors, timeouts, and server errors
|
|
24
|
+
return (message.includes('network') ||
|
|
25
|
+
message.includes('timeout') ||
|
|
26
|
+
message.includes('econnreset') ||
|
|
27
|
+
message.includes('econnrefused') ||
|
|
28
|
+
message.includes('etimedout') ||
|
|
29
|
+
message.includes('streaming request failed: 5') // 5xx errors
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Retry a function with exponential backoff
|
|
36
|
+
*/
|
|
37
|
+
export async function retryWithBackoff(fn, options) {
|
|
38
|
+
const { maxRetries, onRetry, shouldRetry = isRetryableError } = options;
|
|
39
|
+
let lastError;
|
|
40
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
41
|
+
try {
|
|
42
|
+
return await fn();
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
lastError = error;
|
|
46
|
+
// Don't retry if this is the last attempt or error is not retryable
|
|
47
|
+
if (attempt === maxRetries || !shouldRetry(error)) {
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
// Calculate delay and notify
|
|
51
|
+
const delay = calculateBackoffDelay(attempt);
|
|
52
|
+
onRetry?.(attempt + 1, error, delay);
|
|
53
|
+
// Wait before retrying
|
|
54
|
+
await sleep(delay);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// This should never be reached, but TypeScript needs it
|
|
58
|
+
throw lastError;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=retry-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-utils.js","sourceRoot":"","sources":["../../../src/encrypt/retry-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAC1C,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,aAAqB,EACrB,eAAuB,mBAAmB,EAC1C,WAAmB,eAAe,EAClC,aAAqB,wBAAwB,EACrC,EAAE;IACV,MAAM,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,UAAkB,EAAW,EAAE,CACnE,sBAAsB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE9C;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAW,EAAE;IAC1D,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC5C,uDAAuD;QACvD,OAAO,CACL,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC7B,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC,aAAa;SAC9D,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAoB,EACpB,OAIC;IAED,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,gBAAgB,EAAE,GAAG,OAAO,CAAC;IAExE,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAElB,oEAAoE;YACpE,IAAI,OAAO,KAAK,UAAU,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,6BAA6B;YAC7B,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAErC,uBAAuB;YACvB,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,MAAM,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SecureSession } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Hydrates a session from sessionStorage by reconstructing crypto keys
|
|
4
|
+
* so that attestation is NOT required again for the same chatId.
|
|
5
|
+
*/
|
|
6
|
+
export declare const getHydratedSessionByChatId: (chatId: string) => Promise<SecureSession | undefined>;
|
|
7
|
+
/**
|
|
8
|
+
* Initializes a secure session for encrypted communication.
|
|
9
|
+
* Sessions are stored in sessionStorage and keyed by chatId to ensure one session per chat per tab.
|
|
10
|
+
* Attestation happens only once per chatId - subsequent calls reuse existing crypto keys.
|
|
11
|
+
*/
|
|
12
|
+
export declare const initializeSecureSession: (chatId: string, systemPrompt?: string) => Promise<SecureSession>;
|
|
13
|
+
/**
|
|
14
|
+
* Initializes session cleanup on page load and sets up cleanup on page unload
|
|
15
|
+
* Call this once when the app starts to ensure proper session lifecycle management
|
|
16
|
+
*/
|
|
17
|
+
export declare const initializeSessionCleanup: () => void;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { toB64, fromB64 } from './crypto-utils.js';
|
|
2
|
+
import { performSecureAttestation } from './attestation.js';
|
|
3
|
+
import * as fs from 'node:fs';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import * as os from 'node:os';
|
|
6
|
+
/**
|
|
7
|
+
* Session storage directory for CLI (replaces browser sessionStorage)
|
|
8
|
+
*/
|
|
9
|
+
const getSessionStorageDir = () => {
|
|
10
|
+
const homeDir = os.homedir();
|
|
11
|
+
const sessionDir = path.join(homeDir, '.blackboxcli', 'sessions');
|
|
12
|
+
if (!fs.existsSync(sessionDir)) {
|
|
13
|
+
fs.mkdirSync(sessionDir, { recursive: true });
|
|
14
|
+
}
|
|
15
|
+
return sessionDir;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Session file prefix for secure sessions
|
|
19
|
+
*/
|
|
20
|
+
const SESSION_FILE_PREFIX = 'blackbox_secure_session_';
|
|
21
|
+
/**
|
|
22
|
+
* Deserializes session data from storage
|
|
23
|
+
*/
|
|
24
|
+
const deserializeSession = (data) => {
|
|
25
|
+
try {
|
|
26
|
+
return JSON.parse(data);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Gets the session file path for a chatId
|
|
34
|
+
*/
|
|
35
|
+
const getSessionFilePath = (chatId) => path.join(getSessionStorageDir(), `${SESSION_FILE_PREFIX}${chatId}.json`);
|
|
36
|
+
/**
|
|
37
|
+
* Hydrates a session from sessionStorage by reconstructing crypto keys
|
|
38
|
+
* so that attestation is NOT required again for the same chatId.
|
|
39
|
+
*/
|
|
40
|
+
export const getHydratedSessionByChatId = async (chatId) => {
|
|
41
|
+
try {
|
|
42
|
+
const filePath = getSessionFilePath(chatId);
|
|
43
|
+
if (!fs.existsSync(filePath))
|
|
44
|
+
return undefined;
|
|
45
|
+
const stored = fs.readFileSync(filePath, 'utf8');
|
|
46
|
+
const data = JSON.parse(stored);
|
|
47
|
+
if (!data['sessionId'] || !data['initialized'])
|
|
48
|
+
return undefined;
|
|
49
|
+
if (!data['serverPublicKeys_b64'] || !data['sharedKeys_b64']) {
|
|
50
|
+
console.warn('⚠️ Session is not attestation format or missing required data');
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
if (!data['ecdsaPrivatePkcs8_b64'] || !data['ecdsaPublicSpki_b64']) {
|
|
54
|
+
console.warn('⚠️ Attestation session missing crypto key data');
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
const pkcs8Array = fromB64(data['ecdsaPrivatePkcs8_b64']);
|
|
58
|
+
const spkiArray = fromB64(data['ecdsaPublicSpki_b64']);
|
|
59
|
+
// Reconstruct local keys
|
|
60
|
+
const ecdsaPrivate = await crypto.subtle.importKey('pkcs8', pkcs8Array.slice().buffer, { name: 'ECDSA', namedCurve: 'P-384' }, true, ['sign']);
|
|
61
|
+
const ecdsaPublic = await crypto.subtle.importKey('spki', spkiArray.slice().buffer, { name: 'ECDSA', namedCurve: 'P-384' }, true, ['verify']);
|
|
62
|
+
const ecdhPrivate = await crypto.subtle.importKey('pkcs8', pkcs8Array.slice().buffer, { name: 'ECDH', namedCurve: 'P-384' }, false, ['deriveBits']);
|
|
63
|
+
// Reconstruct server public keys
|
|
64
|
+
const serverPublicKeys = data['serverPublicKeys_b64'].map((keyData) => ({
|
|
65
|
+
id: keyData.id,
|
|
66
|
+
publicKeySpki: fromB64(keyData.publicKeySpki_b64),
|
|
67
|
+
publicKeyPem: keyData.publicKeyPem
|
|
68
|
+
}));
|
|
69
|
+
// Reconstruct shared keys
|
|
70
|
+
const sharedKeys = data['sharedKeys_b64'].map((keyData) => ({
|
|
71
|
+
id: keyData.id,
|
|
72
|
+
sharedKey: fromB64(keyData.sharedKey_b64)
|
|
73
|
+
}));
|
|
74
|
+
// Create ProcessedAttestationData for attestation sessions
|
|
75
|
+
const attestationData = {
|
|
76
|
+
sessionId: data['sessionId'],
|
|
77
|
+
nonce: data['nonce'],
|
|
78
|
+
history: data['history'] || [],
|
|
79
|
+
serverPublicKeys,
|
|
80
|
+
localKeys: { ecdhPrivate, ecdsaPrivate, ecdsaPublic },
|
|
81
|
+
sharedKeys
|
|
82
|
+
};
|
|
83
|
+
const session = {
|
|
84
|
+
sessionId: data['sessionId'],
|
|
85
|
+
initialized: true,
|
|
86
|
+
nonce: data['nonce'],
|
|
87
|
+
history: data['history'] || [],
|
|
88
|
+
serverPublicKeySpki: undefined, // API will select the key
|
|
89
|
+
localKeys: { ecdhPrivate, ecdsaPrivate, ecdsaPublic },
|
|
90
|
+
sharedKey: undefined, // API will select the key
|
|
91
|
+
createdAt: data['createdAt'] || Date.now(),
|
|
92
|
+
};
|
|
93
|
+
// Store the full attestation data for use by StreamingClient
|
|
94
|
+
session.attestationData = attestationData;
|
|
95
|
+
return session;
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.warn('⚠️ Failed to hydrate session from storage:', error);
|
|
99
|
+
console.warn('Error details:', error);
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Initializes a secure session for encrypted communication.
|
|
105
|
+
* Sessions are stored in sessionStorage and keyed by chatId to ensure one session per chat per tab.
|
|
106
|
+
* Attestation happens only once per chatId - subsequent calls reuse existing crypto keys.
|
|
107
|
+
*/
|
|
108
|
+
export const initializeSecureSession = async (chatId, systemPrompt) => {
|
|
109
|
+
// First try to hydrate from sessionStorage (includes crypto keys)
|
|
110
|
+
const hydratedSession = await getHydratedSessionByChatId(chatId);
|
|
111
|
+
if (hydratedSession && hydratedSession.initialized) {
|
|
112
|
+
return hydratedSession;
|
|
113
|
+
}
|
|
114
|
+
// Perform attestation
|
|
115
|
+
const attestationData = await performSecureAttestation(systemPrompt);
|
|
116
|
+
// Create session object
|
|
117
|
+
const session = {
|
|
118
|
+
sessionId: attestationData.sessionId,
|
|
119
|
+
initialized: true,
|
|
120
|
+
nonce: attestationData.nonce,
|
|
121
|
+
history: attestationData.history,
|
|
122
|
+
localKeys: attestationData.localKeys,
|
|
123
|
+
createdAt: Date.now(),
|
|
124
|
+
};
|
|
125
|
+
// Store the full attestation data for use by StreamingClient
|
|
126
|
+
session.attestationData = attestationData;
|
|
127
|
+
// Store attestation data in sessionStorage for potential reuse
|
|
128
|
+
try {
|
|
129
|
+
// Store complex attestation data
|
|
130
|
+
const serverPublicKeysB64 = attestationData.serverPublicKeys.map(key => ({
|
|
131
|
+
id: key.id,
|
|
132
|
+
publicKeySpki_b64: toB64(key.publicKeySpki),
|
|
133
|
+
publicKeyPem: key.publicKeyPem
|
|
134
|
+
}));
|
|
135
|
+
const sharedKeysB64 = attestationData.sharedKeys.map(key => ({
|
|
136
|
+
id: key.id,
|
|
137
|
+
sharedKey_b64: toB64(key.sharedKey)
|
|
138
|
+
}));
|
|
139
|
+
const ecdsaPrivPkcs8 = await crypto.subtle.exportKey('pkcs8', attestationData.localKeys.ecdsaPrivate);
|
|
140
|
+
const ecdsaPrivB64 = toB64(new Uint8Array(ecdsaPrivPkcs8));
|
|
141
|
+
const ecdsaPubSpki = await crypto.subtle.exportKey('spki', attestationData.localKeys.ecdsaPublic);
|
|
142
|
+
const ecdsaPubB64 = toB64(new Uint8Array(ecdsaPubSpki));
|
|
143
|
+
const storedObj = {
|
|
144
|
+
sessionId: attestationData.sessionId,
|
|
145
|
+
initialized: true,
|
|
146
|
+
nonce: attestationData.nonce,
|
|
147
|
+
history: attestationData.history,
|
|
148
|
+
createdAt: Date.now(),
|
|
149
|
+
serverPublicKeys_b64: serverPublicKeysB64,
|
|
150
|
+
sharedKeys_b64: sharedKeysB64,
|
|
151
|
+
ecdsaPrivatePkcs8_b64: ecdsaPrivB64,
|
|
152
|
+
ecdsaPublicSpki_b64: ecdsaPubB64
|
|
153
|
+
};
|
|
154
|
+
fs.writeFileSync(getSessionFilePath(chatId), JSON.stringify(storedObj));
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
console.warn('⚠️ Failed to store session in sessionStorage:', error);
|
|
158
|
+
}
|
|
159
|
+
// Cleanup old sessions
|
|
160
|
+
cleanupOldSessions();
|
|
161
|
+
return session;
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Internal cleanup for sessions older than one hour
|
|
165
|
+
*/
|
|
166
|
+
const cleanupOldSessions = () => {
|
|
167
|
+
try {
|
|
168
|
+
const oneHourAgo = Date.now() - 60 * 60 * 1000;
|
|
169
|
+
const sessionDir = getSessionStorageDir();
|
|
170
|
+
const files = fs.readdirSync(sessionDir);
|
|
171
|
+
for (const file of files) {
|
|
172
|
+
if (file.startsWith(SESSION_FILE_PREFIX) && file.endsWith('.json')) {
|
|
173
|
+
const filePath = path.join(sessionDir, file);
|
|
174
|
+
try {
|
|
175
|
+
const stored = fs.readFileSync(filePath, 'utf8');
|
|
176
|
+
const session = deserializeSession(stored);
|
|
177
|
+
if (session.createdAt && session.createdAt < oneHourAgo) {
|
|
178
|
+
fs.unlinkSync(filePath);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (_fileError) {
|
|
182
|
+
// If we can't read the file, delete it
|
|
183
|
+
fs.unlinkSync(filePath);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.warn('⚠️ Failed to cleanup old sessions:', error);
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* Initializes session cleanup on page load and sets up cleanup on page unload
|
|
194
|
+
* Call this once when the app starts to ensure proper session lifecycle management
|
|
195
|
+
*/
|
|
196
|
+
export const initializeSessionCleanup = () => {
|
|
197
|
+
// Cleanup old sessions on page load
|
|
198
|
+
cleanupOldSessions();
|
|
199
|
+
// Setup cleanup on page unload (when user closes tab or navigates away)
|
|
200
|
+
const handleBeforeUnload = () => {
|
|
201
|
+
try {
|
|
202
|
+
// Optional: You could implement more aggressive cleanup here
|
|
203
|
+
// For now, we rely on the time-based cleanup
|
|
204
|
+
console.log('🔄 Page unloading, sessions will be cleaned up on next load');
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
console.warn('⚠️ Error during page unload cleanup:', error);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
// Add event listener for page unload
|
|
211
|
+
if (typeof window !== 'undefined') {
|
|
212
|
+
window.addEventListener('beforeunload', handleBeforeUnload);
|
|
213
|
+
// Also cleanup when the page becomes hidden (mobile browsers)
|
|
214
|
+
document.addEventListener('visibilitychange', () => {
|
|
215
|
+
if (document.hidden) {
|
|
216
|
+
cleanupOldSessions();
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/encrypt/sessions.ts"],"names":[],"mappings":"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"}
|