@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.
Files changed (416) hide show
  1. package/README.md +11 -183
  2. package/dist/index.js +8 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +11 -2
  5. package/dist/src/built-in-extensions/conductor/README.md +242 -0
  6. package/dist/src/built-in-extensions/conductor/blackbox-extension.json +5 -0
  7. package/dist/src/built-in-extensions/conductor/commands/conductor/implement.toml +170 -0
  8. package/dist/src/built-in-extensions/conductor/commands/conductor/newTrack.toml +142 -0
  9. package/dist/src/built-in-extensions/conductor/commands/conductor/revert.toml +122 -0
  10. package/dist/src/built-in-extensions/conductor/commands/conductor/setup.toml +424 -0
  11. package/dist/src/built-in-extensions/conductor/commands/conductor/status.toml +57 -0
  12. package/dist/src/built-in-extensions/conductor/templates/code_styleguides/general.md +23 -0
  13. package/dist/src/built-in-extensions/conductor/templates/code_styleguides/go.md +48 -0
  14. package/dist/src/built-in-extensions/conductor/templates/code_styleguides/html-css.md +49 -0
  15. package/dist/src/built-in-extensions/conductor/templates/code_styleguides/javascript.md +51 -0
  16. package/dist/src/built-in-extensions/conductor/templates/code_styleguides/python.md +37 -0
  17. package/dist/src/built-in-extensions/conductor/templates/code_styleguides/typescript.md +43 -0
  18. package/dist/src/built-in-extensions/conductor/templates/workflow.md +333 -0
  19. package/dist/src/built-in-extensions-data.d.ts +15 -0
  20. package/dist/src/built-in-extensions-data.js +61 -0
  21. package/dist/src/built-in-extensions-data.js.map +1 -0
  22. package/dist/src/commands/configure/ConfigureUI.d.ts +5 -2
  23. package/dist/src/commands/configure/ConfigureUI.js +181 -41
  24. package/dist/src/commands/configure/ConfigureUI.js.map +1 -1
  25. package/dist/src/commands/configure/index.js +35 -3
  26. package/dist/src/commands/configure/index.js.map +1 -1
  27. package/dist/src/commands/configure.js +20 -3
  28. package/dist/src/commands/configure.js.map +1 -1
  29. package/dist/src/commands/extensions/enable.js +1 -1
  30. package/dist/src/commands/extensions/enable.js.map +1 -1
  31. package/dist/src/commands/extensions/examples/context/CONTEXT.md +16 -0
  32. package/dist/src/commands/extensions/examples/context/blackbox-extension.json +5 -0
  33. package/dist/src/commands/extensions/examples/custom-commands/blackbox-extension.json +4 -0
  34. package/dist/src/commands/extensions/examples/custom-commands/commands/deploy.toml +12 -0
  35. package/dist/src/commands/extensions/examples/exclude-tools/README.md +28 -0
  36. package/dist/src/commands/extensions/examples/exclude-tools/blackbox-extension.json +5 -0
  37. package/dist/src/commands/extensions/install.d.ts +6 -2
  38. package/dist/src/commands/extensions/install.js +109 -15
  39. package/dist/src/commands/extensions/install.js.map +1 -1
  40. package/dist/src/commands/extensions/link.d.ts +12 -0
  41. package/dist/src/commands/extensions/link.js +53 -0
  42. package/dist/src/commands/extensions/link.js.map +1 -0
  43. package/dist/src/commands/extensions/list.js +2 -2
  44. package/dist/src/commands/extensions/list.js.map +1 -1
  45. package/dist/src/commands/extensions/new.d.ts +13 -0
  46. package/dist/src/commands/extensions/new.js +145 -0
  47. package/dist/src/commands/extensions/new.js.map +1 -0
  48. package/dist/src/commands/extensions/settings.d.ts +18 -0
  49. package/dist/src/commands/extensions/settings.js +98 -0
  50. package/dist/src/commands/extensions/settings.js.map +1 -0
  51. package/dist/src/commands/extensions/update.d.ts +2 -1
  52. package/dist/src/commands/extensions/update.js +59 -10
  53. package/dist/src/commands/extensions/update.js.map +1 -1
  54. package/dist/src/commands/extensions/validate.d.ts +12 -0
  55. package/dist/src/commands/extensions/validate.js +72 -0
  56. package/dist/src/commands/extensions/validate.js.map +1 -0
  57. package/dist/src/commands/extensions.js +10 -1
  58. package/dist/src/commands/extensions.js.map +1 -1
  59. package/dist/src/commands/mcp/add.d.ts +11 -0
  60. package/dist/src/commands/mcp/add.js +61 -7
  61. package/dist/src/commands/mcp/add.js.map +1 -1
  62. package/dist/src/commands/update.d.ts +7 -0
  63. package/dist/src/commands/update.js +103 -0
  64. package/dist/src/commands/update.js.map +1 -0
  65. package/dist/src/commands/voice.d.ts +7 -0
  66. package/dist/src/commands/voice.js +510 -0
  67. package/dist/src/commands/voice.js.map +1 -0
  68. package/dist/src/config/auth.d.ts +4 -2
  69. package/dist/src/config/auth.js +36 -1
  70. package/dist/src/config/auth.js.map +1 -1
  71. package/dist/src/config/config.d.ts +7 -1
  72. package/dist/src/config/config.js +68 -9
  73. package/dist/src/config/config.js.map +1 -1
  74. package/dist/src/config/extension.d.ts +6 -1
  75. package/dist/src/config/extension.js +137 -11
  76. package/dist/src/config/extension.js.map +1 -1
  77. package/dist/src/config/extensions/github.d.ts +48 -0
  78. package/dist/src/config/extensions/github.js +308 -0
  79. package/dist/src/config/extensions/github.js.map +1 -0
  80. package/dist/src/config/keyBindings.d.ts +1 -0
  81. package/dist/src/config/keyBindings.js +3 -0
  82. package/dist/src/config/keyBindings.js.map +1 -1
  83. package/dist/src/config/modelFetcher.js +14 -39
  84. package/dist/src/config/modelFetcher.js.map +1 -1
  85. package/dist/src/config/settings.js +64 -0
  86. package/dist/src/config/settings.js.map +1 -1
  87. package/dist/src/config/settingsSchema.d.ts +351 -0
  88. package/dist/src/config/settingsSchema.js +351 -0
  89. package/dist/src/config/settingsSchema.js.map +1 -1
  90. package/dist/src/config/voice.d.ts +31 -0
  91. package/dist/src/config/voice.js +82 -0
  92. package/dist/src/config/voice.js.map +1 -0
  93. package/dist/src/encrypt/attestation.d.ts +5 -0
  94. package/dist/src/encrypt/attestation.js +100 -0
  95. package/dist/src/encrypt/attestation.js.map +1 -0
  96. package/dist/src/encrypt/bridge.d.ts +30 -0
  97. package/dist/src/encrypt/bridge.js +32 -0
  98. package/dist/src/encrypt/bridge.js.map +1 -0
  99. package/dist/src/encrypt/client.d.ts +14 -0
  100. package/dist/src/encrypt/client.js +133 -0
  101. package/dist/src/encrypt/client.js.map +1 -0
  102. package/dist/src/encrypt/config.d.ts +26 -0
  103. package/dist/src/encrypt/config.js +51 -0
  104. package/dist/src/encrypt/config.js.map +1 -0
  105. package/dist/src/encrypt/crypto-utils.d.ts +57 -0
  106. package/dist/src/encrypt/crypto-utils.js +257 -0
  107. package/dist/src/encrypt/crypto-utils.js.map +1 -0
  108. package/dist/src/encrypt/index.d.ts +12 -0
  109. package/dist/src/encrypt/index.js +13 -0
  110. package/dist/src/encrypt/index.js.map +1 -0
  111. package/dist/src/encrypt/retry-utils.d.ts +20 -0
  112. package/dist/src/encrypt/retry-utils.js +60 -0
  113. package/dist/src/encrypt/retry-utils.js.map +1 -0
  114. package/dist/src/encrypt/sessions.d.ts +17 -0
  115. package/dist/src/encrypt/sessions.js +221 -0
  116. package/dist/src/encrypt/sessions.js.map +1 -0
  117. package/dist/src/encrypt/streaming-client.d.ts +29 -0
  118. package/dist/src/encrypt/streaming-client.js +226 -0
  119. package/dist/src/encrypt/streaming-client.js.map +1 -0
  120. package/dist/src/encrypt/types.d.ts +81 -0
  121. package/dist/src/encrypt/types.js +2 -0
  122. package/dist/src/encrypt/types.js.map +1 -0
  123. package/dist/src/gemini.d.ts +1 -1
  124. package/dist/src/gemini.js +57 -27
  125. package/dist/src/gemini.js.map +1 -1
  126. package/dist/src/generated/git-commit.d.ts +3 -3
  127. package/dist/src/generated/git-commit.js +3 -3
  128. package/dist/src/nonInteractiveCli.d.ts +4 -0
  129. package/dist/src/nonInteractiveCli.js +418 -5
  130. package/dist/src/nonInteractiveCli.js.map +1 -1
  131. package/dist/src/on-demand-extensions/README.md +266 -0
  132. package/dist/src/on-demand-extensions/git-helper/README.md +16 -0
  133. package/dist/src/on-demand-extensions/git-helper/blackbox-extension.json +5 -0
  134. package/dist/src/on-demand-extensions/git-helper/commands/git/branch-cleanup.toml +18 -0
  135. package/dist/src/on-demand-extensions/git-helper/commands/git/smart-commit.toml +22 -0
  136. package/dist/src/on-demand-extensions/greet/README.md +76 -0
  137. package/dist/src/on-demand-extensions/greet/blackbox-extension.json +5 -0
  138. package/dist/src/on-demand-extensions/greet/commands/greet/hello.toml +9 -0
  139. package/dist/src/on-demand-extensions/registry.json +251 -0
  140. package/dist/src/services/BuiltinCommandLoader.js +20 -2
  141. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  142. package/dist/src/services/EncryptedContentGenerator.d.ts +63 -0
  143. package/dist/src/services/EncryptedContentGenerator.js +426 -0
  144. package/dist/src/services/EncryptedContentGenerator.js.map +1 -0
  145. package/dist/src/services/McpCommandLoader.d.ts +24 -0
  146. package/dist/src/services/McpCommandLoader.js +50 -0
  147. package/dist/src/services/McpCommandLoader.js.map +1 -0
  148. package/dist/src/services/McpPromptLoader.js +17 -2
  149. package/dist/src/services/McpPromptLoader.js.map +1 -1
  150. package/dist/src/services/ReleaseNotesCache.d.ts +57 -0
  151. package/dist/src/services/ReleaseNotesCache.js +186 -0
  152. package/dist/src/services/ReleaseNotesCache.js.map +1 -0
  153. package/dist/src/services/elevenLabsErrors.d.ts +65 -0
  154. package/dist/src/services/elevenLabsErrors.js +233 -0
  155. package/dist/src/services/elevenLabsErrors.js.map +1 -0
  156. package/dist/src/services/elevenLabsService.d.ts +62 -0
  157. package/dist/src/services/elevenLabsService.js +186 -0
  158. package/dist/src/services/elevenLabsService.js.map +1 -0
  159. package/dist/src/services/elevenLabsStreamingService.d.ts +59 -0
  160. package/dist/src/services/elevenLabsStreamingService.js +202 -0
  161. package/dist/src/services/elevenLabsStreamingService.js.map +1 -0
  162. package/dist/src/services/elevenLabsTokenService.d.ts +21 -0
  163. package/dist/src/services/elevenLabsTokenService.js +42 -0
  164. package/dist/src/services/elevenLabsTokenService.js.map +1 -0
  165. package/dist/src/services/voiceInputHandler.d.ts +26 -0
  166. package/dist/src/services/voiceInputHandler.js +209 -0
  167. package/dist/src/services/voiceInputHandler.js.map +1 -0
  168. package/dist/src/services/voiceRecordingService.d.ts +69 -0
  169. package/dist/src/services/voiceRecordingService.js +397 -0
  170. package/dist/src/services/voiceRecordingService.js.map +1 -0
  171. package/dist/src/ui/App.d.ts +1 -0
  172. package/dist/src/ui/App.js +412 -63
  173. package/dist/src/ui/App.js.map +1 -1
  174. package/dist/src/ui/commands/browseExtensionsCommand.d.ts +7 -0
  175. package/dist/src/ui/commands/browseExtensionsCommand.js +16 -0
  176. package/dist/src/ui/commands/browseExtensionsCommand.js.map +1 -0
  177. package/dist/src/ui/commands/chatCommand.js +356 -16
  178. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  179. package/dist/src/ui/commands/dbCommand.d.ts +7 -0
  180. package/dist/src/ui/commands/dbCommand.js +37 -0
  181. package/dist/src/ui/commands/dbCommand.js.map +1 -0
  182. package/dist/src/ui/commands/docsCommand.js +1 -1
  183. package/dist/src/ui/commands/docsCommand.js.map +1 -1
  184. package/dist/src/ui/commands/mcpCommand.js +3 -2
  185. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  186. package/dist/src/ui/commands/mcpInvokeCommand.d.ts +16 -0
  187. package/dist/src/ui/commands/mcpInvokeCommand.js +263 -0
  188. package/dist/src/ui/commands/mcpInvokeCommand.js.map +1 -0
  189. package/dist/src/ui/commands/modelCommand.js +79 -5
  190. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  191. package/dist/src/ui/commands/multiAgentCommand.d.ts +7 -0
  192. package/dist/src/ui/commands/multiAgentCommand.js +833 -0
  193. package/dist/src/ui/commands/multiAgentCommand.js.map +1 -0
  194. package/dist/src/ui/commands/multiAgentConfigureCommand.d.ts +7 -0
  195. package/dist/src/ui/commands/multiAgentConfigureCommand.js +17 -0
  196. package/dist/src/ui/commands/multiAgentConfigureCommand.js.map +1 -0
  197. package/dist/src/ui/commands/quitCommand.js +71 -2
  198. package/dist/src/ui/commands/quitCommand.js.map +1 -1
  199. package/dist/src/ui/commands/releasesCommand.d.ts +7 -0
  200. package/dist/src/ui/commands/releasesCommand.js +16 -0
  201. package/dist/src/ui/commands/releasesCommand.js.map +1 -0
  202. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  203. package/dist/src/ui/commands/shellPermissionsCommand.d.ts +7 -0
  204. package/dist/src/ui/commands/shellPermissionsCommand.js +109 -0
  205. package/dist/src/ui/commands/shellPermissionsCommand.js.map +1 -0
  206. package/dist/src/ui/commands/skillCommand.d.ts +7 -0
  207. package/dist/src/ui/commands/skillCommand.js +240 -0
  208. package/dist/src/ui/commands/skillCommand.js.map +1 -0
  209. package/dist/src/ui/commands/statsCommand.js +243 -1
  210. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  211. package/dist/src/ui/commands/tasksCommand.d.ts +7 -0
  212. package/dist/src/ui/commands/tasksCommand.js +535 -0
  213. package/dist/src/ui/commands/tasksCommand.js.map +1 -0
  214. package/dist/src/ui/commands/toolPermissionsCommand.d.ts +7 -0
  215. package/dist/src/ui/commands/toolPermissionsCommand.js +408 -0
  216. package/dist/src/ui/commands/toolPermissionsCommand.js.map +1 -0
  217. package/dist/src/ui/commands/types.d.ts +10 -2
  218. package/dist/src/ui/commands/types.js.map +1 -1
  219. package/dist/src/ui/commands/voiceCommand.d.ts +7 -0
  220. package/dist/src/ui/commands/voiceCommand.js +525 -0
  221. package/dist/src/ui/commands/voiceCommand.js.map +1 -0
  222. package/dist/src/ui/components/AuthDialog.d.ts +5 -4
  223. package/dist/src/ui/components/AuthDialog.js +89 -52
  224. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  225. package/dist/src/ui/components/AuthInProgress.js +3 -1
  226. package/dist/src/ui/components/AuthInProgress.js.map +1 -1
  227. package/dist/src/ui/components/ExtensionsDialog.d.ts +11 -0
  228. package/dist/src/ui/components/ExtensionsDialog.js +303 -0
  229. package/dist/src/ui/components/ExtensionsDialog.js.map +1 -0
  230. package/dist/src/ui/components/GenericProviderKeyPrompt.d.ts +3 -1
  231. package/dist/src/ui/components/GenericProviderKeyPrompt.js +17 -4
  232. package/dist/src/ui/components/GenericProviderKeyPrompt.js.map +1 -1
  233. package/dist/src/ui/components/Header.js +10 -1
  234. package/dist/src/ui/components/Header.js.map +1 -1
  235. package/dist/src/ui/components/HistoryBrowserDialog.d.ts +15 -0
  236. package/dist/src/ui/components/HistoryBrowserDialog.js +166 -0
  237. package/dist/src/ui/components/HistoryBrowserDialog.js.map +1 -0
  238. package/dist/src/ui/components/HistoryItemDisplay.js +13 -1
  239. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  240. package/dist/src/ui/components/InputPrompt.js +22 -8
  241. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  242. package/dist/src/ui/components/LoadingIndicator.d.ts +4 -0
  243. package/dist/src/ui/components/LoadingIndicator.js +16 -4
  244. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  245. package/dist/src/ui/components/LoadingIndicator.test.js +108 -16
  246. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -1
  247. package/dist/src/ui/components/ModelSelectionDialog.d.ts +2 -0
  248. package/dist/src/ui/components/ModelSelectionDialog.js +33 -4
  249. package/dist/src/ui/components/ModelSelectionDialog.js.map +1 -1
  250. package/dist/src/ui/components/ModelSelectionDialog.test.js +41 -4
  251. package/dist/src/ui/components/ModelSelectionDialog.test.js.map +1 -1
  252. package/dist/src/ui/components/ReleaseNotesDialog.d.ts +23 -0
  253. package/dist/src/ui/components/ReleaseNotesDialog.js +150 -0
  254. package/dist/src/ui/components/ReleaseNotesDialog.js.map +1 -0
  255. package/dist/src/ui/components/ReleaseNotesDisplay.d.ts +18 -0
  256. package/dist/src/ui/components/ReleaseNotesDisplay.js +14 -0
  257. package/dist/src/ui/components/ReleaseNotesDisplay.js.map +1 -0
  258. package/dist/src/ui/components/SessionSummaryDisplay.d.ts +2 -0
  259. package/dist/src/ui/components/SessionSummaryDisplay.js +1 -1
  260. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
  261. package/dist/src/ui/components/SettingsDialog.d.ts +3 -1
  262. package/dist/src/ui/components/SettingsDialog.js +17 -7
  263. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  264. package/dist/src/ui/components/ShellConfirmationDialog.d.ts +2 -0
  265. package/dist/src/ui/components/ShellConfirmationDialog.js +7 -3
  266. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  267. package/dist/src/ui/components/StatsDisplay.d.ts +2 -0
  268. package/dist/src/ui/components/StatsDisplay.js +92 -7
  269. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  270. package/dist/src/ui/components/SuggestionsDisplay.js +6 -1
  271. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  272. package/dist/src/ui/components/ThemeDialog.d.ts +3 -1
  273. package/dist/src/ui/components/ThemeDialog.js +5 -2
  274. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  275. package/dist/src/ui/components/Tips.js +1 -4
  276. package/dist/src/ui/components/Tips.js.map +1 -1
  277. package/dist/src/ui/components/TodoListDialog.d.ts +13 -0
  278. package/dist/src/ui/components/TodoListDialog.js +29 -0
  279. package/dist/src/ui/components/TodoListDialog.js.map +1 -0
  280. package/dist/src/ui/components/TodoListDialog.test.d.ts +6 -0
  281. package/dist/src/ui/components/TodoListDialog.test.js +60 -0
  282. package/dist/src/ui/components/TodoListDialog.test.js.map +1 -0
  283. package/dist/src/ui/components/VoiceConfigDialog.d.ts +17 -0
  284. package/dist/src/ui/components/VoiceConfigDialog.js +47 -0
  285. package/dist/src/ui/components/VoiceConfigDialog.js.map +1 -0
  286. package/dist/src/ui/components/messages/GeminiMessage.js +4 -0
  287. package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -1
  288. package/dist/src/ui/components/messages/GeminiMessageContent.js +4 -0
  289. package/dist/src/ui/components/messages/GeminiMessageContent.js.map +1 -1
  290. package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +2 -0
  291. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +96 -9
  292. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  293. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +3 -3
  294. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
  295. package/dist/src/ui/components/messages/ToolMessage.js +1 -1
  296. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  297. package/dist/src/ui/components/messages/ToolMessage.test.js +9 -12
  298. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
  299. package/dist/src/ui/components/multiagent/MultiAgentConfigDialog.d.ts +25 -0
  300. package/dist/src/ui/components/multiagent/MultiAgentConfigDialog.js +179 -0
  301. package/dist/src/ui/components/multiagent/MultiAgentConfigDialog.js.map +1 -0
  302. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +3 -1
  303. package/dist/src/ui/components/shared/RadioButtonSelect.js +57 -18
  304. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  305. package/dist/src/ui/components/shared/TextInput.d.ts +2 -1
  306. package/dist/src/ui/components/shared/TextInput.js +5 -2
  307. package/dist/src/ui/components/shared/TextInput.js.map +1 -1
  308. package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.js +3 -3
  309. package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.js.map +1 -1
  310. package/dist/src/ui/constants.d.ts +3 -3
  311. package/dist/src/ui/constants.js +3 -3
  312. package/dist/src/ui/constants.js.map +1 -1
  313. package/dist/src/ui/contexts/SessionContext.d.ts +6 -0
  314. package/dist/src/ui/contexts/SessionContext.js +24 -2
  315. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  316. package/dist/src/ui/hooks/atCommandProcessor.js +139 -57
  317. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  318. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -1
  319. package/dist/src/ui/hooks/slashCommandProcessor.js +189 -17
  320. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  321. package/dist/src/ui/hooks/useAdaptiveStream.d.ts +42 -0
  322. package/dist/src/ui/hooks/useAdaptiveStream.js +31 -0
  323. package/dist/src/ui/hooks/useAdaptiveStream.js.map +1 -0
  324. package/dist/src/ui/hooks/useAtCompletion.js +20 -4
  325. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  326. package/dist/src/ui/hooks/useAuthCommand.d.ts +2 -2
  327. package/dist/src/ui/hooks/useAuthCommand.js +99 -5
  328. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  329. package/dist/src/ui/hooks/useCommandCompletion.js +14 -10
  330. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  331. package/dist/src/ui/hooks/useDialogClose.d.ts +10 -0
  332. package/dist/src/ui/hooks/useDialogClose.js +25 -0
  333. package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
  334. package/dist/src/ui/hooks/useDialogCloseAnimation.d.ts +22 -0
  335. package/dist/src/ui/hooks/useDialogCloseAnimation.js +68 -0
  336. package/dist/src/ui/hooks/useDialogCloseAnimation.js.map +1 -0
  337. package/dist/src/ui/hooks/useEncryptedStream.d.ts +22 -0
  338. package/dist/src/ui/hooks/useEncryptedStream.js +378 -0
  339. package/dist/src/ui/hooks/useEncryptedStream.js.map +1 -0
  340. package/dist/src/ui/hooks/useExtensionsDialog.d.ts +10 -0
  341. package/dist/src/ui/hooks/useExtensionsDialog.js +21 -0
  342. package/dist/src/ui/hooks/useExtensionsDialog.js.map +1 -0
  343. package/dist/src/ui/hooks/useGeminiStream.js +4 -2
  344. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  345. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
  346. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +1 -1
  347. package/dist/src/ui/hooks/useLoadingIndicator.js +3 -2
  348. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  349. package/dist/src/ui/hooks/useLoadingIndicator.test.js +27 -5
  350. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  351. package/dist/src/ui/hooks/useMultiAgentConfigCommand.d.ts +10 -0
  352. package/dist/src/ui/hooks/useMultiAgentConfigCommand.js +21 -0
  353. package/dist/src/ui/hooks/useMultiAgentConfigCommand.js.map +1 -0
  354. package/dist/src/ui/hooks/useReleasesDialog.d.ts +20 -0
  355. package/dist/src/ui/hooks/useReleasesDialog.js +214 -0
  356. package/dist/src/ui/hooks/useReleasesDialog.js.map +1 -0
  357. package/dist/src/ui/hooks/useSlashCompletion.js +10 -8
  358. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  359. package/dist/src/ui/hooks/useTodoList.d.ts +17 -0
  360. package/dist/src/ui/hooks/useTodoList.js +51 -0
  361. package/dist/src/ui/hooks/useTodoList.js.map +1 -0
  362. package/dist/src/ui/keyMatchers.test.js +6 -0
  363. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  364. package/dist/src/ui/themes/blackbox-dark.js +1 -1
  365. package/dist/src/ui/themes/blackbox-dark.js.map +1 -1
  366. package/dist/src/ui/themes/blackbox-light.js +1 -1
  367. package/dist/src/ui/themes/blackbox-light.js.map +1 -1
  368. package/dist/src/ui/types.d.ts +15 -2
  369. package/dist/src/ui/types.js +1 -0
  370. package/dist/src/ui/types.js.map +1 -1
  371. package/dist/src/ui/utils/computeStats.d.ts +25 -1
  372. package/dist/src/ui/utils/computeStats.js +58 -1
  373. package/dist/src/ui/utils/computeStats.js.map +1 -1
  374. package/dist/src/ui/utils/updateCheck.js +37 -54
  375. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  376. package/dist/src/utils/backgroundUpdateCheck.d.ts +15 -0
  377. package/dist/src/utils/backgroundUpdateCheck.js +48 -0
  378. package/dist/src/utils/backgroundUpdateCheck.js.map +1 -0
  379. package/dist/src/utils/gitAutoDetect.d.ts +16 -0
  380. package/dist/src/utils/gitAutoDetect.js +45 -0
  381. package/dist/src/utils/gitAutoDetect.js.map +1 -0
  382. package/dist/src/utils/installationInfo.d.ts +1 -0
  383. package/dist/src/utils/installationInfo.js +24 -4
  384. package/dist/src/utils/installationInfo.js.map +1 -1
  385. package/dist/src/utils/preLaunchUpdateCheck.d.ts +17 -0
  386. package/dist/src/utils/preLaunchUpdateCheck.js +75 -0
  387. package/dist/src/utils/preLaunchUpdateCheck.js.map +1 -0
  388. package/dist/src/utils/version.js +12 -1
  389. package/dist/src/utils/version.js.map +1 -1
  390. package/dist/src/utils/versionStorage.d.ts +50 -0
  391. package/dist/src/utils/versionStorage.js +224 -0
  392. package/dist/src/utils/versionStorage.js.map +1 -0
  393. package/dist/src/validateNonInterActiveAuth.js +10 -3
  394. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  395. package/dist/src/virtual-extensions.d.ts +14 -0
  396. package/dist/src/virtual-extensions.js +56 -0
  397. package/dist/src/virtual-extensions.js.map +1 -0
  398. package/dist/src/zed-integration/fileSystemService.d.ts +3 -3
  399. package/dist/src/zed-integration/fileSystemService.js +5 -7
  400. package/dist/src/zed-integration/fileSystemService.js.map +1 -1
  401. package/dist/src/zed-integration/zedIntegration.js +62 -17
  402. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  403. package/dist/tsconfig.tsbuildinfo +1 -1
  404. package/package.json +11 -2
  405. package/dist/src/utils/handleAutoUpdate.d.ts +0 -11
  406. package/dist/src/utils/handleAutoUpdate.js +0 -102
  407. package/dist/src/utils/handleAutoUpdate.js.map +0 -1
  408. package/dist/src/utils/updateEventEmitter.d.ts +0 -11
  409. package/dist/src/utils/updateEventEmitter.js +0 -12
  410. package/dist/src/utils/updateEventEmitter.js.map +0 -1
  411. package/dist/src/zed-integration/acp.d.ts +0 -63
  412. package/dist/src/zed-integration/acp.js +0 -226
  413. package/dist/src/zed-integration/acp.js.map +0 -1
  414. package/dist/src/zed-integration/schema.d.ts +0 -11782
  415. package/dist/src/zed-integration/schema.js +0 -311
  416. package/dist/src/zed-integration/schema.js.map +0 -1
@@ -0,0 +1,100 @@
1
+ import { ENCRYPTION_CONFIG } from './config.js';
2
+ import { fromB64, generateUuid, generateKeyPair, deserializePublicKeyPem, deriveSharedKey } from './crypto-utils.js';
3
+ /**
4
+ * Basic attestation verification extracted from streaming-client.ts
5
+ * Validates structure, nonce binding, and key presence.
6
+ * Internal function - not exported since it's only used within this module.
7
+ */
8
+ async function verifyAttestationBasic(reportJson, signature, gpuEat, publicKeyPem, nonce) {
9
+ // Perform minimal structural checks consistent with previous implementation
10
+ const report = JSON.parse(reportJson);
11
+ const expectedNonceB64 = btoa(String.fromCharCode.apply(null, Array.from(nonce)));
12
+ if (report.nonce !== expectedNonceB64) {
13
+ throw new Error(`Nonce mismatch: expected ${expectedNonceB64}, got ${report.nonce}`);
14
+ }
15
+ if (!signature || signature.length === 0) {
16
+ throw new Error('Missing signature');
17
+ }
18
+ if (!publicKeyPem.includes('BEGIN PUBLIC KEY')) {
19
+ throw new Error('Invalid public key format');
20
+ }
21
+ }
22
+ /**
23
+ * Process a single attestation result
24
+ */
25
+ async function processAttestationResult(result, localKeys) {
26
+ const { body } = result;
27
+ // Extract server public key
28
+ const serverPubPem = body.public_key || body.public_key_worker;
29
+ if (!serverPubPem) {
30
+ throw new Error(`Attestation result ${result.id} missing server public key`);
31
+ }
32
+ // Extract nonce
33
+ const nonceB64 = body.nonce_b64 || body.nonceB64 || body.nonce;
34
+ if (!nonceB64) {
35
+ throw new Error(`Attestation result ${result.id} missing nonce_b64`);
36
+ }
37
+ const nonceBytes = fromB64(nonceB64);
38
+ // Verify attestation
39
+ await verifyAttestationBasic(body.report_json, body.signature, body.gpu_eat, serverPubPem, nonceBytes);
40
+ // Deserialize public key and derive shared key
41
+ const serverPublicKeySpki = deserializePublicKeyPem(serverPubPem);
42
+ const sharedKey = await deriveSharedKey(localKeys.ecdhPrivate, serverPublicKeySpki);
43
+ return {
44
+ id: result.id,
45
+ publicKeySpki: serverPublicKeySpki,
46
+ publicKeyPem: serverPubPem,
47
+ sharedKey
48
+ };
49
+ }
50
+ /**
51
+ * Performs secure attestation and key generation for a new session
52
+ */
53
+ export const performSecureAttestation = async (systemPrompt) => {
54
+ // Perform attestation
55
+ const response = await fetch(ENCRYPTION_CONFIG.attestationUrl);
56
+ if (!response.ok) {
57
+ throw new Error(`Attestation request failed: ${response.status}`);
58
+ }
59
+ const responseData = await response.json();
60
+ // Generate local keys once for all attestations
61
+ const localKeys = await generateKeyPair();
62
+ const serverPublicKeys = [];
63
+ const sharedKeys = [];
64
+ // Process each attestation result
65
+ for (const result of responseData.results) {
66
+ try {
67
+ if (result.status === 200) {
68
+ const processed = await processAttestationResult(result, localKeys);
69
+ serverPublicKeys.push({
70
+ id: processed.id,
71
+ publicKeySpki: processed.publicKeySpki,
72
+ publicKeyPem: processed.publicKeyPem
73
+ });
74
+ sharedKeys.push({
75
+ id: processed.id,
76
+ sharedKey: processed.sharedKey
77
+ });
78
+ }
79
+ else {
80
+ console.warn(`⚠️ Skipping attestation result ${result.id} with status ${result.status}`);
81
+ }
82
+ }
83
+ catch (error) {
84
+ console.error(`❌ Failed to process attestation result ${result.id}:`, error);
85
+ // Continue processing other results even if one fails
86
+ }
87
+ }
88
+ if (sharedKeys.length === 0) {
89
+ throw new Error('No successful attestation results could be processed');
90
+ }
91
+ return {
92
+ sessionId: generateUuid(),
93
+ nonce: 1000,
94
+ history: systemPrompt ? [{ role: 'system', content: systemPrompt }] : [],
95
+ serverPublicKeys,
96
+ localKeys,
97
+ sharedKeys,
98
+ };
99
+ };
100
+ //# sourceMappingURL=attestation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attestation.js","sourceRoot":"","sources":["../../../src/encrypt/attestation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Bridge module to register the encryption service globally
3
+ * so the core package can access it without direct imports
4
+ */
5
+ import { sendMessageStream } from './client.js';
6
+ /**
7
+ * Interface for the encryption service bridge
8
+ */
9
+ interface EncryptionServiceBridge {
10
+ sendMessageStream: typeof sendMessageStream;
11
+ }
12
+ /**
13
+ * Extended global interface to include our encryption service
14
+ */
15
+ declare global {
16
+ var blackboxEncryptionService: EncryptionServiceBridge | undefined;
17
+ }
18
+ /**
19
+ * Register the encryption service globally for use by the core package
20
+ */
21
+ export declare function registerEncryptionService(): void;
22
+ /**
23
+ * Unregister the encryption service
24
+ */
25
+ export declare function unregisterEncryptionService(): void;
26
+ /**
27
+ * Check if the encryption service is registered
28
+ */
29
+ export declare function isEncryptionServiceRegistered(): boolean;
30
+ export {};
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Bridge module to register the encryption service globally
3
+ * so the core package can access it without direct imports
4
+ */
5
+ import { sendMessageStream } from './client.js';
6
+ /**
7
+ * Register the encryption service globally for use by the core package
8
+ */
9
+ export function registerEncryptionService() {
10
+ if (typeof globalThis !== 'undefined') {
11
+ const bridge = {
12
+ sendMessageStream
13
+ };
14
+ globalThis.blackboxEncryptionService = bridge;
15
+ }
16
+ }
17
+ /**
18
+ * Unregister the encryption service
19
+ */
20
+ export function unregisterEncryptionService() {
21
+ if (typeof globalThis !== 'undefined') {
22
+ delete globalThis.blackboxEncryptionService;
23
+ }
24
+ }
25
+ /**
26
+ * Check if the encryption service is registered
27
+ */
28
+ export function isEncryptionServiceRegistered() {
29
+ return typeof globalThis !== 'undefined' &&
30
+ globalThis.blackboxEncryptionService !== undefined;
31
+ }
32
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/encrypt/bridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAiBhD;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;QACtC,MAAM,MAAM,GAA4B;YACtC,iBAAiB;SAClB,CAAC;QAEF,UAAU,CAAC,yBAAyB,GAAG,MAAM,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC,yBAAyB,CAAC;IAC9C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B;IAC3C,OAAO,OAAO,UAAU,KAAK,WAAW;QACjC,UAAU,CAAC,yBAAyB,KAAK,SAAS,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type FileData } from './types.js';
2
+ /**
3
+ * Sends a message through the encrypted stream using the StreamingClient.
4
+ * Now supports both sessionId and chatId for backward compatibility.
5
+ *
6
+ * @param sessionIdOrChatId - The session or chat ID
7
+ * @param userText - The current user message text
8
+ * @param fullMessageHistory - Optional full conversation history for proper context in followup messages
9
+ * @param fileData - Optional file data (images, PDFs, etc.)
10
+ */
11
+ export declare const sendMessageStream: (sessionIdOrChatId: string, userText: string, fullMessageHistory?: Array<{
12
+ role: "system" | "user" | "assistant";
13
+ content: string;
14
+ }>, fileData?: FileData) => Promise<ReadableStream<Uint8Array>>;
@@ -0,0 +1,133 @@
1
+ import { ENCRYPTION_CONFIG } from './config.js';
2
+ import { getHydratedSessionByChatId, initializeSecureSession } from './sessions.js';
3
+ import { StreamingClient } from './streaming-client.js';
4
+ import {} from './types.js';
5
+ /**
6
+ * Sends a message through the encrypted stream using the StreamingClient.
7
+ * Now supports both sessionId and chatId for backward compatibility.
8
+ *
9
+ * @param sessionIdOrChatId - The session or chat ID
10
+ * @param userText - The current user message text
11
+ * @param fullMessageHistory - Optional full conversation history for proper context in followup messages
12
+ * @param fileData - Optional file data (images, PDFs, etc.)
13
+ */
14
+ export const sendMessageStream = async (sessionIdOrChatId, userText, fullMessageHistory, fileData) => {
15
+ // Validate input parameters
16
+ if (!sessionIdOrChatId || sessionIdOrChatId.trim().length === 0) {
17
+ throw new Error('Session ID or Chat ID cannot be empty');
18
+ }
19
+ if (!userText || userText.trim().length === 0) {
20
+ throw new Error('User message cannot be empty');
21
+ }
22
+ // Try to get hydrated session by chatId first (includes crypto keys)
23
+ let session = await getHydratedSessionByChatId(sessionIdOrChatId);
24
+ // If no session exists, create a new one
25
+ if (!session || !session.initialized) {
26
+ const systemPrompt = fullMessageHistory?.find((m) => m.role === 'system')?.content;
27
+ session = await initializeSecureSession(sessionIdOrChatId, systemPrompt);
28
+ }
29
+ try {
30
+ // Use provided message history or fall back to session history
31
+ // Ensure we always have a valid array
32
+ const messageHistory = fullMessageHistory && fullMessageHistory.length > 0
33
+ ? fullMessageHistory
34
+ : session.history || [];
35
+ // Create a streaming client for this session (system prompt from message history)
36
+ const systemPrompt = messageHistory.find((m) => m.role === 'system')?.content;
37
+ const client = new StreamingClient(ENCRYPTION_CONFIG.baseUrl, ENCRYPTION_CONFIG.attestationUrl, systemPrompt);
38
+ // Initialize from existing session data to avoid re-attestation
39
+ if (session.attestationData) {
40
+ client.initializeFromSession({
41
+ sessionId: session.sessionId,
42
+ nonce: session.nonce,
43
+ history: messageHistory,
44
+ attestationData: session.attestationData
45
+ });
46
+ }
47
+ // Send the message and get the encrypted stream
48
+ const encryptedStream = await client.sendMessageStream(userText, fileData);
49
+ // Update session history with the new user message
50
+ // If fullMessageHistory was provided, sync session.history with it
51
+ if (fullMessageHistory && fullMessageHistory.length > 0) {
52
+ session.history = [...fullMessageHistory];
53
+ }
54
+ else {
55
+ // Ensure session.history is initialized
56
+ if (!session.history) {
57
+ session.history = [];
58
+ }
59
+ session.history.push({ role: 'user', content: userText });
60
+ }
61
+ session.nonce += 1;
62
+ // Update the session in sessionStorage with crypto materials
63
+ try {
64
+ // Import toB64 helper from crypto-utils
65
+ const { toB64 } = await import('./crypto-utils.js');
66
+ const attestationData = session.attestationData;
67
+ if (!attestationData) {
68
+ throw new Error('No attestation data available for storage update');
69
+ }
70
+ // Store multi-attestation data
71
+ const serverPublicKeysB64 = attestationData.serverPublicKeys.map((key) => ({
72
+ id: key.id,
73
+ publicKeySpki_b64: toB64(key.publicKeySpki),
74
+ publicKeyPem: key.publicKeyPem
75
+ }));
76
+ const sharedKeysB64 = attestationData.sharedKeys.map((key) => ({
77
+ id: key.id,
78
+ sharedKey_b64: toB64(key.sharedKey)
79
+ }));
80
+ const ecdsaPrivPkcs8 = await crypto.subtle.exportKey('pkcs8', attestationData.localKeys.ecdsaPrivate);
81
+ const ecdsaPrivB64 = toB64(new Uint8Array(ecdsaPrivPkcs8));
82
+ const ecdsaPubSpki = await crypto.subtle.exportKey('spki', attestationData.localKeys.ecdsaPublic);
83
+ const ecdsaPubB64 = toB64(new Uint8Array(ecdsaPubSpki));
84
+ const sessionFilePath = `${process.env['HOME'] || process.env['USERPROFILE']}/.blackboxcli/sessions/blackbox_secure_session_${sessionIdOrChatId}.json`;
85
+ const storedObj = {
86
+ sessionId: session.sessionId,
87
+ initialized: session.initialized,
88
+ nonce: session.nonce,
89
+ history: session.history,
90
+ createdAt: session.createdAt,
91
+ serverPublicKeys_b64: serverPublicKeysB64,
92
+ sharedKeys_b64: sharedKeysB64,
93
+ ecdsaPrivatePkcs8_b64: ecdsaPrivB64,
94
+ ecdsaPublicSpki_b64: ecdsaPubB64
95
+ };
96
+ // Import fs for file operations
97
+ const fs = await import('node:fs');
98
+ const path = await import('node:path');
99
+ // Ensure directory exists
100
+ const sessionDir = path.dirname(sessionFilePath);
101
+ if (!fs.existsSync(sessionDir)) {
102
+ fs.mkdirSync(sessionDir, { recursive: true });
103
+ }
104
+ fs.writeFileSync(sessionFilePath, JSON.stringify(storedObj));
105
+ }
106
+ catch (storageError) {
107
+ console.warn('⚠️ Failed to update session in storage:', storageError);
108
+ }
109
+ return encryptedStream;
110
+ }
111
+ catch (error) {
112
+ console.error('❌ Failed to send encrypted message:', error);
113
+ // Instead of creating a fake fallback response, throw the actual error
114
+ // This allows the model to learn from real errors and users to see actual issues
115
+ if (error instanceof Error) {
116
+ // Enhance the error with additional context for better debugging
117
+ const enhancedError = new Error(`Encryption service failed: ${error.message}\n` +
118
+ `Session ID: ${sessionIdOrChatId}\n` +
119
+ `Error Type: ${error.constructor.name}\n` +
120
+ `Timestamp: ${new Date().toISOString()}`);
121
+ enhancedError.stack = error.stack;
122
+ enhancedError.cause = error;
123
+ throw enhancedError;
124
+ }
125
+ else {
126
+ // Handle non-Error objects
127
+ throw new Error(`Encryption service failed with unknown error: ${String(error)}\n` +
128
+ `Session ID: ${sessionIdOrChatId}\n` +
129
+ `Timestamp: ${new Date().toISOString()}`);
130
+ }
131
+ }
132
+ };
133
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/encrypt/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Encrypted model identifiers - used to detect if a model requires encryption
3
+ */
4
+ export declare const ENCRYPTED_MODELS: string[];
5
+ /**
6
+ * Timeout constants for encrypted operations
7
+ */
8
+ export declare const DEFAULT_ENCRYPTED_TIMEOUT: number;
9
+ export declare const DEFAULT_ENCRYPTED_RETRY_COUNT: number;
10
+ export declare const ATTESTATION_TIMEOUT: number;
11
+ export declare const RETRY_INITIAL_DELAY: number;
12
+ export declare const RETRY_MAX_DELAY: number;
13
+ export declare const RETRY_BACKOFF_MULTIPLIER: number;
14
+ export declare const RETRYABLE_STATUS_CODES: number[];
15
+ export declare const ENCRYPTION_CONFIG: {
16
+ baseUrl: string;
17
+ attestationUrl: string;
18
+ messageStreamUrl: string;
19
+ streamingTimeout: number;
20
+ attestationTimeout: number;
21
+ retryCount: number;
22
+ };
23
+ /**
24
+ * Detects if the selected model requires encryption
25
+ */
26
+ export declare const isEncryptedModel: (modelName: string) => boolean;
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Encrypted model identifiers - used to detect if a model requires encryption
3
+ */
4
+ export const ENCRYPTED_MODELS = [
5
+ 'blackboxai/encrypted',
6
+ 'blackboxai/encrypted-pro',
7
+ 'blackboxai/secure-coder',
8
+ 'blackbox/encrypted',
9
+ 'encrypted-gpt-4',
10
+ 'encrypted-claude',
11
+ 'secure-model'
12
+ ];
13
+ /**
14
+ * Timeout constants for encrypted operations
15
+ */
16
+ export const DEFAULT_ENCRYPTED_TIMEOUT = parseInt(process.env['BLACKBOX_ENCRYPTED_TIMEOUT'] || '1800000', 10);
17
+ export const DEFAULT_ENCRYPTED_RETRY_COUNT = parseInt(process.env['BLACKBOX_ENCRYPTED_RETRY_COUNT'] || '3', 10);
18
+ // Connection timeout for initial attestation
19
+ export const ATTESTATION_TIMEOUT = parseInt(process.env['BLACKBOX_ATTESTATION_TIMEOUT'] || '30000', // 30 seconds
20
+ 10);
21
+ // Retry configuration for streaming requests
22
+ export const RETRY_INITIAL_DELAY = parseInt(process.env['BLACKBOX_RETRY_INITIAL_DELAY'] || '1000', // 1 second
23
+ 10);
24
+ export const RETRY_MAX_DELAY = parseInt(process.env['BLACKBOX_RETRY_MAX_DELAY'] || '10000', // 10 seconds
25
+ 10);
26
+ export const RETRY_BACKOFF_MULTIPLIER = parseFloat(process.env['BLACKBOX_RETRY_BACKOFF_MULTIPLIER'] || '2');
27
+ // HTTP status codes that should trigger a retry
28
+ export const RETRYABLE_STATUS_CODES = [500, 502, 503, 504];
29
+ /**
30
+ * Configuration for encryption service endpoints
31
+ */
32
+ // CLI environment - always use direct URL
33
+ const baseUrl = process.env['BLACKBOX_ENCRYPTION_BASE_URL'] || 'https://encrypt.blackboxai.app';
34
+ export const ENCRYPTION_CONFIG = {
35
+ baseUrl,
36
+ attestationUrl: `${baseUrl}/attestation`,
37
+ messageStreamUrl: `${baseUrl}/message_stream`,
38
+ // Timeout configuration
39
+ streamingTimeout: DEFAULT_ENCRYPTED_TIMEOUT,
40
+ attestationTimeout: ATTESTATION_TIMEOUT,
41
+ retryCount: DEFAULT_ENCRYPTED_RETRY_COUNT,
42
+ };
43
+ /**
44
+ * Detects if the selected model requires encryption
45
+ */
46
+ export const isEncryptedModel = (modelName) => {
47
+ if (!modelName)
48
+ return false;
49
+ return ENCRYPTED_MODELS.some(encryptedModel => modelName.toLowerCase().includes(encryptedModel.toLowerCase()));
50
+ };
51
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/encrypt/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,sBAAsB;IACtB,0BAA0B;IAC1B,yBAAyB;IACzB,oBAAoB;IACpB,iBAAiB;IACjB,kBAAkB;IAClB,cAAc;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,QAAQ,CAC/C,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,IAAI,SAAS,EACtD,EAAE,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,QAAQ,CACnD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,IAAI,GAAG,EACpD,EAAE,CACH,CAAC;AAEF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CACzC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,IAAI,OAAO,EAAE,aAAa;AACrE,EAAE,CACH,CAAC;AAEF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CACzC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,IAAI,MAAM,EAAE,WAAW;AAClE,EAAE,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CACrC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,OAAO,EAAE,aAAa;AACjE,EAAE,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAChD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,IAAI,GAAG,CACxD,CAAC;AAEF,gDAAgD;AAChD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE3D;;GAEG;AAEH,0CAA0C;AAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,IAAI,gCAAgC,CAAC;AAEhG,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO;IACP,cAAc,EAAE,GAAG,OAAO,cAAc;IACxC,gBAAgB,EAAE,GAAG,OAAO,iBAAiB;IAC7C,wBAAwB;IACxB,gBAAgB,EAAE,yBAAyB;IAC3C,kBAAkB,EAAE,mBAAmB;IACvC,UAAU,EAAE,6BAA6B;CAC1C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAW,EAAE;IAC7D,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,OAAO,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAC5C,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAC/D,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Low-level cryptographic utilities extracted from streaming-client.ts
3
+ */
4
+ export interface CryptoKeyPair {
5
+ ecdhPrivate: CryptoKey;
6
+ ecdsaPrivate: CryptoKey;
7
+ ecdsaPublic: CryptoKey;
8
+ }
9
+ /**
10
+ * Convert Uint8Array to base64 string
11
+ */
12
+ export declare const toB64: (u8: Uint8Array) => string;
13
+ /**
14
+ * Convert base64 string to Uint8Array
15
+ */
16
+ export declare const fromB64: (b64: string) => Uint8Array;
17
+ /**
18
+ * Generate a UUID for identification (moved from streaming-client.ts)
19
+ */
20
+ export declare const generateUuid: () => string;
21
+ /**
22
+ * Generate a P-384 keypair for both ECDSA and ECDH operations (moved from streaming-client.ts)
23
+ * Reuses the same key material for both operations (matching Rust behavior)
24
+ */
25
+ export declare function generateKeyPair(): Promise<CryptoKeyPair>;
26
+ export declare function ecdsaRawToDer(raw: Uint8Array): Uint8Array;
27
+ export declare function ecdsaDerToRaw(der: Uint8Array): Uint8Array;
28
+ /**
29
+ * Serialize a WebCrypto ECDSA/ECDH public key to PEM (SPKI)
30
+ */
31
+ export declare function serializePublicKeyPem(publicKey: CryptoKey): Promise<string>;
32
+ /**
33
+ * Deserialize PEM (SPKI) public key string to Uint8Array bytes
34
+ */
35
+ export declare function deserializePublicKeyPem(pem: string): Uint8Array;
36
+ /**
37
+ * Derive a shared key using ECDH + HKDF (SHA-256) from local private key and server public key (SPKI)
38
+ * Matches the Rust implementation detail (using only X coordinate for HKDF input).
39
+ */
40
+ export declare function deriveSharedKey(localPrivateKey: CryptoKey, serverPublicKeySpki: Uint8Array): Promise<Uint8Array>;
41
+ /**
42
+ * Encrypted payload interface (moved from streaming-client.ts)
43
+ */
44
+ export interface EncryptedPayload {
45
+ nonce: number;
46
+ iv: string;
47
+ ciphertext: string;
48
+ signature: string;
49
+ }
50
+ /**
51
+ * Encrypt and sign a message using AES-GCM and ECDSA (moved from streaming-client.ts)
52
+ */
53
+ export declare function encryptAndSign(plaintext: string, sharedKey: Uint8Array, signingKey: CryptoKey, nonce: number): Promise<EncryptedPayload>;
54
+ /**
55
+ * Decrypt and verify a message using AES-GCM and ECDSA (moved from streaming-client.ts)
56
+ */
57
+ export declare function decryptAndVerify(payload: EncryptedPayload, sharedKey: Uint8Array, serverVerifyingKeySpki: Uint8Array): Promise<string>;