@blackbox_ai/blackbox-cli 0.0.7 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) 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 +13 -3
  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 +14 -0
  23. package/dist/src/commands/configure/ConfigureUI.js +556 -0
  24. package/dist/src/commands/configure/ConfigureUI.js.map +1 -0
  25. package/dist/src/commands/configure/index.d.ts +7 -0
  26. package/dist/src/commands/configure/index.js +62 -0
  27. package/dist/src/commands/configure/index.js.map +1 -0
  28. package/dist/src/commands/configure.d.ts +7 -0
  29. package/dist/src/commands/configure.js +276 -0
  30. package/dist/src/commands/configure.js.map +1 -0
  31. package/dist/src/commands/configure.test.d.ts +6 -0
  32. package/dist/src/commands/configure.test.js +32 -0
  33. package/dist/src/commands/configure.test.js.map +1 -0
  34. package/dist/src/commands/extensions/enable.js +1 -1
  35. package/dist/src/commands/extensions/enable.js.map +1 -1
  36. package/dist/src/commands/extensions/examples/context/CONTEXT.md +16 -0
  37. package/dist/src/commands/extensions/examples/context/blackbox-extension.json +5 -0
  38. package/dist/src/commands/extensions/examples/custom-commands/blackbox-extension.json +4 -0
  39. package/dist/src/commands/extensions/examples/custom-commands/commands/deploy.toml +12 -0
  40. package/dist/src/commands/extensions/examples/exclude-tools/README.md +28 -0
  41. package/dist/src/commands/extensions/examples/exclude-tools/blackbox-extension.json +5 -0
  42. package/dist/src/commands/extensions/install.d.ts +6 -2
  43. package/dist/src/commands/extensions/install.js +109 -15
  44. package/dist/src/commands/extensions/install.js.map +1 -1
  45. package/dist/src/commands/extensions/link.d.ts +12 -0
  46. package/dist/src/commands/extensions/link.js +53 -0
  47. package/dist/src/commands/extensions/link.js.map +1 -0
  48. package/dist/src/commands/extensions/list.js +2 -2
  49. package/dist/src/commands/extensions/list.js.map +1 -1
  50. package/dist/src/commands/extensions/new.d.ts +13 -0
  51. package/dist/src/commands/extensions/new.js +145 -0
  52. package/dist/src/commands/extensions/new.js.map +1 -0
  53. package/dist/src/commands/extensions/settings.d.ts +18 -0
  54. package/dist/src/commands/extensions/settings.js +98 -0
  55. package/dist/src/commands/extensions/settings.js.map +1 -0
  56. package/dist/src/commands/extensions/update.d.ts +2 -1
  57. package/dist/src/commands/extensions/update.js +59 -10
  58. package/dist/src/commands/extensions/update.js.map +1 -1
  59. package/dist/src/commands/extensions/validate.d.ts +12 -0
  60. package/dist/src/commands/extensions/validate.js +72 -0
  61. package/dist/src/commands/extensions/validate.js.map +1 -0
  62. package/dist/src/commands/extensions.js +10 -1
  63. package/dist/src/commands/extensions.js.map +1 -1
  64. package/dist/src/commands/mcp/add.d.ts +11 -0
  65. package/dist/src/commands/mcp/add.js +61 -7
  66. package/dist/src/commands/mcp/add.js.map +1 -1
  67. package/dist/src/commands/update.d.ts +7 -0
  68. package/dist/src/commands/update.js +103 -0
  69. package/dist/src/commands/update.js.map +1 -0
  70. package/dist/src/commands/voice.d.ts +7 -0
  71. package/dist/src/commands/voice.js +510 -0
  72. package/dist/src/commands/voice.js.map +1 -0
  73. package/dist/src/config/auth.d.ts +32 -1
  74. package/dist/src/config/auth.js +317 -2
  75. package/dist/src/config/auth.js.map +1 -1
  76. package/dist/src/config/config.d.ts +7 -1
  77. package/dist/src/config/config.js +71 -10
  78. package/dist/src/config/config.js.map +1 -1
  79. package/dist/src/config/extension.d.ts +6 -1
  80. package/dist/src/config/extension.js +137 -11
  81. package/dist/src/config/extension.js.map +1 -1
  82. package/dist/src/config/extensions/github.d.ts +48 -0
  83. package/dist/src/config/extensions/github.js +308 -0
  84. package/dist/src/config/extensions/github.js.map +1 -0
  85. package/dist/src/config/keyBindings.d.ts +1 -0
  86. package/dist/src/config/keyBindings.js +3 -0
  87. package/dist/src/config/keyBindings.js.map +1 -1
  88. package/dist/src/config/modelFetcher.d.ts +21 -0
  89. package/dist/src/config/modelFetcher.js +226 -0
  90. package/dist/src/config/modelFetcher.js.map +1 -0
  91. package/dist/src/config/settings.js +101 -0
  92. package/dist/src/config/settings.js.map +1 -1
  93. package/dist/src/config/settingsSchema.d.ts +626 -0
  94. package/dist/src/config/settingsSchema.js +626 -0
  95. package/dist/src/config/settingsSchema.js.map +1 -1
  96. package/dist/src/config/voice.d.ts +31 -0
  97. package/dist/src/config/voice.js +82 -0
  98. package/dist/src/config/voice.js.map +1 -0
  99. package/dist/src/encrypt/attestation.d.ts +5 -0
  100. package/dist/src/encrypt/attestation.js +100 -0
  101. package/dist/src/encrypt/attestation.js.map +1 -0
  102. package/dist/src/encrypt/bridge.d.ts +30 -0
  103. package/dist/src/encrypt/bridge.js +32 -0
  104. package/dist/src/encrypt/bridge.js.map +1 -0
  105. package/dist/src/encrypt/client.d.ts +14 -0
  106. package/dist/src/encrypt/client.js +133 -0
  107. package/dist/src/encrypt/client.js.map +1 -0
  108. package/dist/src/encrypt/config.d.ts +26 -0
  109. package/dist/src/encrypt/config.js +51 -0
  110. package/dist/src/encrypt/config.js.map +1 -0
  111. package/dist/src/encrypt/crypto-utils.d.ts +57 -0
  112. package/dist/src/encrypt/crypto-utils.js +257 -0
  113. package/dist/src/encrypt/crypto-utils.js.map +1 -0
  114. package/dist/src/encrypt/index.d.ts +12 -0
  115. package/dist/src/encrypt/index.js +13 -0
  116. package/dist/src/encrypt/index.js.map +1 -0
  117. package/dist/src/encrypt/retry-utils.d.ts +20 -0
  118. package/dist/src/encrypt/retry-utils.js +60 -0
  119. package/dist/src/encrypt/retry-utils.js.map +1 -0
  120. package/dist/src/encrypt/sessions.d.ts +17 -0
  121. package/dist/src/encrypt/sessions.js +221 -0
  122. package/dist/src/encrypt/sessions.js.map +1 -0
  123. package/dist/src/encrypt/streaming-client.d.ts +29 -0
  124. package/dist/src/encrypt/streaming-client.js +226 -0
  125. package/dist/src/encrypt/streaming-client.js.map +1 -0
  126. package/dist/src/encrypt/types.d.ts +81 -0
  127. package/dist/src/encrypt/types.js +2 -0
  128. package/dist/src/encrypt/types.js.map +1 -0
  129. package/dist/src/gemini.d.ts +1 -1
  130. package/dist/src/gemini.js +61 -28
  131. package/dist/src/gemini.js.map +1 -1
  132. package/dist/src/generated/git-commit.d.ts +3 -3
  133. package/dist/src/generated/git-commit.js +3 -3
  134. package/dist/src/nonInteractiveCli.d.ts +4 -0
  135. package/dist/src/nonInteractiveCli.js +563 -6
  136. package/dist/src/nonInteractiveCli.js.map +1 -1
  137. package/dist/src/on-demand-extensions/README.md +266 -0
  138. package/dist/src/on-demand-extensions/git-helper/README.md +16 -0
  139. package/dist/src/on-demand-extensions/git-helper/blackbox-extension.json +5 -0
  140. package/dist/src/on-demand-extensions/git-helper/commands/git/branch-cleanup.toml +18 -0
  141. package/dist/src/on-demand-extensions/git-helper/commands/git/smart-commit.toml +22 -0
  142. package/dist/src/on-demand-extensions/greet/README.md +76 -0
  143. package/dist/src/on-demand-extensions/greet/blackbox-extension.json +5 -0
  144. package/dist/src/on-demand-extensions/greet/commands/greet/hello.toml +9 -0
  145. package/dist/src/on-demand-extensions/registry.json +251 -0
  146. package/dist/src/services/BuiltinCommandLoader.js +20 -2
  147. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  148. package/dist/src/services/EncryptedContentGenerator.d.ts +63 -0
  149. package/dist/src/services/EncryptedContentGenerator.js +426 -0
  150. package/dist/src/services/EncryptedContentGenerator.js.map +1 -0
  151. package/dist/src/services/McpCommandLoader.d.ts +24 -0
  152. package/dist/src/services/McpCommandLoader.js +50 -0
  153. package/dist/src/services/McpCommandLoader.js.map +1 -0
  154. package/dist/src/services/McpPromptLoader.js +17 -2
  155. package/dist/src/services/McpPromptLoader.js.map +1 -1
  156. package/dist/src/services/ReleaseNotesCache.d.ts +57 -0
  157. package/dist/src/services/ReleaseNotesCache.js +186 -0
  158. package/dist/src/services/ReleaseNotesCache.js.map +1 -0
  159. package/dist/src/services/elevenLabsErrors.d.ts +65 -0
  160. package/dist/src/services/elevenLabsErrors.js +233 -0
  161. package/dist/src/services/elevenLabsErrors.js.map +1 -0
  162. package/dist/src/services/elevenLabsService.d.ts +62 -0
  163. package/dist/src/services/elevenLabsService.js +186 -0
  164. package/dist/src/services/elevenLabsService.js.map +1 -0
  165. package/dist/src/services/elevenLabsStreamingService.d.ts +59 -0
  166. package/dist/src/services/elevenLabsStreamingService.js +202 -0
  167. package/dist/src/services/elevenLabsStreamingService.js.map +1 -0
  168. package/dist/src/services/elevenLabsTokenService.d.ts +21 -0
  169. package/dist/src/services/elevenLabsTokenService.js +42 -0
  170. package/dist/src/services/elevenLabsTokenService.js.map +1 -0
  171. package/dist/src/services/voiceInputHandler.d.ts +26 -0
  172. package/dist/src/services/voiceInputHandler.js +209 -0
  173. package/dist/src/services/voiceInputHandler.js.map +1 -0
  174. package/dist/src/services/voiceRecordingService.d.ts +69 -0
  175. package/dist/src/services/voiceRecordingService.js +397 -0
  176. package/dist/src/services/voiceRecordingService.js.map +1 -0
  177. package/dist/src/ui/App.d.ts +1 -0
  178. package/dist/src/ui/App.js +412 -63
  179. package/dist/src/ui/App.js.map +1 -1
  180. package/dist/src/ui/commands/browseExtensionsCommand.d.ts +7 -0
  181. package/dist/src/ui/commands/browseExtensionsCommand.js +16 -0
  182. package/dist/src/ui/commands/browseExtensionsCommand.js.map +1 -0
  183. package/dist/src/ui/commands/chatCommand.js +356 -16
  184. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  185. package/dist/src/ui/commands/dbCommand.d.ts +7 -0
  186. package/dist/src/ui/commands/dbCommand.js +37 -0
  187. package/dist/src/ui/commands/dbCommand.js.map +1 -0
  188. package/dist/src/ui/commands/docsCommand.js +1 -1
  189. package/dist/src/ui/commands/docsCommand.js.map +1 -1
  190. package/dist/src/ui/commands/mcpCommand.js +3 -2
  191. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  192. package/dist/src/ui/commands/mcpInvokeCommand.d.ts +16 -0
  193. package/dist/src/ui/commands/mcpInvokeCommand.js +263 -0
  194. package/dist/src/ui/commands/mcpInvokeCommand.js.map +1 -0
  195. package/dist/src/ui/commands/modelCommand.js +79 -5
  196. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  197. package/dist/src/ui/commands/multiAgentCommand.d.ts +7 -0
  198. package/dist/src/ui/commands/multiAgentCommand.js +833 -0
  199. package/dist/src/ui/commands/multiAgentCommand.js.map +1 -0
  200. package/dist/src/ui/commands/multiAgentConfigureCommand.d.ts +7 -0
  201. package/dist/src/ui/commands/multiAgentConfigureCommand.js +17 -0
  202. package/dist/src/ui/commands/multiAgentConfigureCommand.js.map +1 -0
  203. package/dist/src/ui/commands/quitCommand.js +71 -2
  204. package/dist/src/ui/commands/quitCommand.js.map +1 -1
  205. package/dist/src/ui/commands/releasesCommand.d.ts +7 -0
  206. package/dist/src/ui/commands/releasesCommand.js +16 -0
  207. package/dist/src/ui/commands/releasesCommand.js.map +1 -0
  208. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  209. package/dist/src/ui/commands/shellPermissionsCommand.d.ts +7 -0
  210. package/dist/src/ui/commands/shellPermissionsCommand.js +109 -0
  211. package/dist/src/ui/commands/shellPermissionsCommand.js.map +1 -0
  212. package/dist/src/ui/commands/skillCommand.d.ts +7 -0
  213. package/dist/src/ui/commands/skillCommand.js +240 -0
  214. package/dist/src/ui/commands/skillCommand.js.map +1 -0
  215. package/dist/src/ui/commands/statsCommand.js +243 -1
  216. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  217. package/dist/src/ui/commands/tasksCommand.d.ts +7 -0
  218. package/dist/src/ui/commands/tasksCommand.js +535 -0
  219. package/dist/src/ui/commands/tasksCommand.js.map +1 -0
  220. package/dist/src/ui/commands/toolPermissionsCommand.d.ts +7 -0
  221. package/dist/src/ui/commands/toolPermissionsCommand.js +408 -0
  222. package/dist/src/ui/commands/toolPermissionsCommand.js.map +1 -0
  223. package/dist/src/ui/commands/types.d.ts +10 -2
  224. package/dist/src/ui/commands/types.js.map +1 -1
  225. package/dist/src/ui/commands/voiceCommand.d.ts +7 -0
  226. package/dist/src/ui/commands/voiceCommand.js +525 -0
  227. package/dist/src/ui/commands/voiceCommand.js.map +1 -0
  228. package/dist/src/ui/components/AuthDialog.d.ts +4 -2
  229. package/dist/src/ui/components/AuthDialog.js +349 -64
  230. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  231. package/dist/src/ui/components/AuthInProgress.js +3 -1
  232. package/dist/src/ui/components/AuthInProgress.js.map +1 -1
  233. package/dist/src/ui/components/ExtensionsDialog.d.ts +11 -0
  234. package/dist/src/ui/components/ExtensionsDialog.js +303 -0
  235. package/dist/src/ui/components/ExtensionsDialog.js.map +1 -0
  236. package/dist/src/ui/components/GenericProviderKeyPrompt.d.ts +24 -0
  237. package/dist/src/ui/components/GenericProviderKeyPrompt.js +99 -0
  238. package/dist/src/ui/components/GenericProviderKeyPrompt.js.map +1 -0
  239. package/dist/src/ui/components/Header.js +10 -1
  240. package/dist/src/ui/components/Header.js.map +1 -1
  241. package/dist/src/ui/components/HistoryBrowserDialog.d.ts +15 -0
  242. package/dist/src/ui/components/HistoryBrowserDialog.js +166 -0
  243. package/dist/src/ui/components/HistoryBrowserDialog.js.map +1 -0
  244. package/dist/src/ui/components/HistoryItemDisplay.js +13 -1
  245. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  246. package/dist/src/ui/components/InputPrompt.js +22 -8
  247. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  248. package/dist/src/ui/components/LoadingIndicator.d.ts +4 -0
  249. package/dist/src/ui/components/LoadingIndicator.js +16 -4
  250. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  251. package/dist/src/ui/components/LoadingIndicator.test.js +108 -16
  252. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -1
  253. package/dist/src/ui/components/ModelSelectionDialog.d.ts +2 -0
  254. package/dist/src/ui/components/ModelSelectionDialog.js +33 -4
  255. package/dist/src/ui/components/ModelSelectionDialog.js.map +1 -1
  256. package/dist/src/ui/components/ModelSelectionDialog.test.js +41 -4
  257. package/dist/src/ui/components/ModelSelectionDialog.test.js.map +1 -1
  258. package/dist/src/ui/components/ReleaseNotesDialog.d.ts +23 -0
  259. package/dist/src/ui/components/ReleaseNotesDialog.js +150 -0
  260. package/dist/src/ui/components/ReleaseNotesDialog.js.map +1 -0
  261. package/dist/src/ui/components/ReleaseNotesDisplay.d.ts +18 -0
  262. package/dist/src/ui/components/ReleaseNotesDisplay.js +14 -0
  263. package/dist/src/ui/components/ReleaseNotesDisplay.js.map +1 -0
  264. package/dist/src/ui/components/SessionSummaryDisplay.d.ts +2 -0
  265. package/dist/src/ui/components/SessionSummaryDisplay.js +1 -1
  266. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
  267. package/dist/src/ui/components/SettingsDialog.d.ts +3 -1
  268. package/dist/src/ui/components/SettingsDialog.js +17 -7
  269. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  270. package/dist/src/ui/components/ShellConfirmationDialog.d.ts +2 -0
  271. package/dist/src/ui/components/ShellConfirmationDialog.js +7 -3
  272. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  273. package/dist/src/ui/components/StatsDisplay.d.ts +2 -0
  274. package/dist/src/ui/components/StatsDisplay.js +92 -7
  275. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  276. package/dist/src/ui/components/SuggestionsDisplay.js +6 -1
  277. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  278. package/dist/src/ui/components/ThemeDialog.d.ts +3 -1
  279. package/dist/src/ui/components/ThemeDialog.js +5 -2
  280. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  281. package/dist/src/ui/components/Tips.js +1 -4
  282. package/dist/src/ui/components/Tips.js.map +1 -1
  283. package/dist/src/ui/components/TodoListDialog.d.ts +13 -0
  284. package/dist/src/ui/components/TodoListDialog.js +29 -0
  285. package/dist/src/ui/components/TodoListDialog.js.map +1 -0
  286. package/dist/src/ui/components/TodoListDialog.test.d.ts +6 -0
  287. package/dist/src/ui/components/TodoListDialog.test.js +60 -0
  288. package/dist/src/ui/components/TodoListDialog.test.js.map +1 -0
  289. package/dist/src/ui/components/VoiceConfigDialog.d.ts +17 -0
  290. package/dist/src/ui/components/VoiceConfigDialog.js +47 -0
  291. package/dist/src/ui/components/VoiceConfigDialog.js.map +1 -0
  292. package/dist/src/ui/components/messages/GeminiMessage.js +4 -0
  293. package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -1
  294. package/dist/src/ui/components/messages/GeminiMessageContent.js +4 -0
  295. package/dist/src/ui/components/messages/GeminiMessageContent.js.map +1 -1
  296. package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +2 -0
  297. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +96 -9
  298. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  299. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +3 -3
  300. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
  301. package/dist/src/ui/components/messages/ToolMessage.js +1 -1
  302. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  303. package/dist/src/ui/components/messages/ToolMessage.test.js +9 -12
  304. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
  305. package/dist/src/ui/components/multiagent/MultiAgentConfigDialog.d.ts +25 -0
  306. package/dist/src/ui/components/multiagent/MultiAgentConfigDialog.js +179 -0
  307. package/dist/src/ui/components/multiagent/MultiAgentConfigDialog.js.map +1 -0
  308. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +3 -1
  309. package/dist/src/ui/components/shared/RadioButtonSelect.js +57 -18
  310. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  311. package/dist/src/ui/components/shared/TextInput.d.ts +2 -1
  312. package/dist/src/ui/components/shared/TextInput.js +5 -2
  313. package/dist/src/ui/components/shared/TextInput.js.map +1 -1
  314. package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.js +3 -3
  315. package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.js.map +1 -1
  316. package/dist/src/ui/constants.d.ts +3 -3
  317. package/dist/src/ui/constants.js +3 -3
  318. package/dist/src/ui/constants.js.map +1 -1
  319. package/dist/src/ui/contexts/SessionContext.d.ts +6 -0
  320. package/dist/src/ui/contexts/SessionContext.js +24 -2
  321. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  322. package/dist/src/ui/hooks/atCommandProcessor.js +139 -57
  323. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  324. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -1
  325. package/dist/src/ui/hooks/slashCommandProcessor.js +189 -17
  326. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  327. package/dist/src/ui/hooks/useAdaptiveStream.d.ts +42 -0
  328. package/dist/src/ui/hooks/useAdaptiveStream.js +31 -0
  329. package/dist/src/ui/hooks/useAdaptiveStream.js.map +1 -0
  330. package/dist/src/ui/hooks/useAtCompletion.js +20 -4
  331. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  332. package/dist/src/ui/hooks/useAuthCommand.d.ts +2 -2
  333. package/dist/src/ui/hooks/useAuthCommand.js +99 -5
  334. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  335. package/dist/src/ui/hooks/useCommandCompletion.js +14 -10
  336. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  337. package/dist/src/ui/hooks/useDialogClose.d.ts +10 -0
  338. package/dist/src/ui/hooks/useDialogClose.js +25 -0
  339. package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
  340. package/dist/src/ui/hooks/useDialogCloseAnimation.d.ts +22 -0
  341. package/dist/src/ui/hooks/useDialogCloseAnimation.js +68 -0
  342. package/dist/src/ui/hooks/useDialogCloseAnimation.js.map +1 -0
  343. package/dist/src/ui/hooks/useEncryptedStream.d.ts +22 -0
  344. package/dist/src/ui/hooks/useEncryptedStream.js +378 -0
  345. package/dist/src/ui/hooks/useEncryptedStream.js.map +1 -0
  346. package/dist/src/ui/hooks/useExtensionsDialog.d.ts +10 -0
  347. package/dist/src/ui/hooks/useExtensionsDialog.js +21 -0
  348. package/dist/src/ui/hooks/useExtensionsDialog.js.map +1 -0
  349. package/dist/src/ui/hooks/useGeminiStream.js +6 -2
  350. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  351. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
  352. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +1 -1
  353. package/dist/src/ui/hooks/useLoadingIndicator.js +3 -2
  354. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  355. package/dist/src/ui/hooks/useLoadingIndicator.test.js +27 -5
  356. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  357. package/dist/src/ui/hooks/useMultiAgentConfigCommand.d.ts +10 -0
  358. package/dist/src/ui/hooks/useMultiAgentConfigCommand.js +21 -0
  359. package/dist/src/ui/hooks/useMultiAgentConfigCommand.js.map +1 -0
  360. package/dist/src/ui/hooks/useReleasesDialog.d.ts +20 -0
  361. package/dist/src/ui/hooks/useReleasesDialog.js +214 -0
  362. package/dist/src/ui/hooks/useReleasesDialog.js.map +1 -0
  363. package/dist/src/ui/hooks/useSlashCompletion.js +10 -8
  364. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  365. package/dist/src/ui/hooks/useTodoList.d.ts +17 -0
  366. package/dist/src/ui/hooks/useTodoList.js +51 -0
  367. package/dist/src/ui/hooks/useTodoList.js.map +1 -0
  368. package/dist/src/ui/keyMatchers.test.js +6 -0
  369. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  370. package/dist/src/ui/themes/blackbox-dark.js +1 -1
  371. package/dist/src/ui/themes/blackbox-dark.js.map +1 -1
  372. package/dist/src/ui/themes/blackbox-light.js +1 -1
  373. package/dist/src/ui/themes/blackbox-light.js.map +1 -1
  374. package/dist/src/ui/types.d.ts +15 -2
  375. package/dist/src/ui/types.js +1 -0
  376. package/dist/src/ui/types.js.map +1 -1
  377. package/dist/src/ui/utils/computeStats.d.ts +25 -1
  378. package/dist/src/ui/utils/computeStats.js +58 -1
  379. package/dist/src/ui/utils/computeStats.js.map +1 -1
  380. package/dist/src/ui/utils/updateCheck.js +37 -54
  381. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  382. package/dist/src/utils/backgroundUpdateCheck.d.ts +15 -0
  383. package/dist/src/utils/backgroundUpdateCheck.js +48 -0
  384. package/dist/src/utils/backgroundUpdateCheck.js.map +1 -0
  385. package/dist/src/utils/gitAutoDetect.d.ts +16 -0
  386. package/dist/src/utils/gitAutoDetect.js +45 -0
  387. package/dist/src/utils/gitAutoDetect.js.map +1 -0
  388. package/dist/src/utils/installationInfo.d.ts +1 -0
  389. package/dist/src/utils/installationInfo.js +24 -4
  390. package/dist/src/utils/installationInfo.js.map +1 -1
  391. package/dist/src/utils/preLaunchUpdateCheck.d.ts +17 -0
  392. package/dist/src/utils/preLaunchUpdateCheck.js +75 -0
  393. package/dist/src/utils/preLaunchUpdateCheck.js.map +1 -0
  394. package/dist/src/utils/version.js +12 -1
  395. package/dist/src/utils/version.js.map +1 -1
  396. package/dist/src/utils/versionStorage.d.ts +50 -0
  397. package/dist/src/utils/versionStorage.js +224 -0
  398. package/dist/src/utils/versionStorage.js.map +1 -0
  399. package/dist/src/validateNonInterActiveAuth.js +10 -3
  400. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  401. package/dist/src/virtual-extensions.d.ts +14 -0
  402. package/dist/src/virtual-extensions.js +56 -0
  403. package/dist/src/virtual-extensions.js.map +1 -0
  404. package/dist/src/zed-integration/fileSystemService.d.ts +3 -3
  405. package/dist/src/zed-integration/fileSystemService.js +5 -7
  406. package/dist/src/zed-integration/fileSystemService.js.map +1 -1
  407. package/dist/src/zed-integration/zedIntegration.js +62 -17
  408. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  409. package/dist/tsconfig.tsbuildinfo +1 -1
  410. package/package.json +13 -3
  411. package/dist/src/utils/handleAutoUpdate.d.ts +0 -11
  412. package/dist/src/utils/handleAutoUpdate.js +0 -102
  413. package/dist/src/utils/handleAutoUpdate.js.map +0 -1
  414. package/dist/src/utils/updateEventEmitter.d.ts +0 -11
  415. package/dist/src/utils/updateEventEmitter.js +0 -12
  416. package/dist/src/utils/updateEventEmitter.js.map +0 -1
  417. package/dist/src/zed-integration/acp.d.ts +0 -63
  418. package/dist/src/zed-integration/acp.js +0 -226
  419. package/dist/src/zed-integration/acp.js.map +0 -1
  420. package/dist/src/zed-integration/schema.d.ts +0 -11782
  421. package/dist/src/zed-integration/schema.js +0 -311
  422. package/dist/src/zed-integration/schema.js.map +0 -1
@@ -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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"}
@@ -0,0 +1,29 @@
1
+ import { type FileData, type ProcessedAttestationData } from './types.js';
2
+ interface ChatMessage {
3
+ role: 'system' | 'user' | 'assistant';
4
+ content: string;
5
+ image_url?: string;
6
+ }
7
+ /**
8
+ * StreamingClient handles the complete encrypted streaming protocol
9
+ */
10
+ export declare class StreamingClient {
11
+ private baseUrl;
12
+ private initialized;
13
+ private nonce;
14
+ private history;
15
+ private attestationData?;
16
+ constructor(baseUrl: string, _attestationUrl: string, systemPrompt?: string);
17
+ /**
18
+ * Initialize from existing session data (avoids re-attestation)
19
+ * Now uses the session management layer
20
+ */
21
+ initializeFromSession(sessionData: {
22
+ sessionId: string;
23
+ nonce: number;
24
+ history: ChatMessage[];
25
+ attestationData: ProcessedAttestationData;
26
+ }): void;
27
+ sendMessageStream(userText: string, fileData?: FileData): Promise<ReadableStream<Uint8Array>>;
28
+ }
29
+ export {};
@@ -0,0 +1,226 @@
1
+ import { serializePublicKeyPem, encryptAndSign, decryptAndVerify } from './crypto-utils.js';
2
+ import {} from './types.js';
3
+ import { ENCRYPTION_CONFIG } from './config.js';
4
+ import { retryWithBackoff, isRetryableStatusCode } from './retry-utils.js';
5
+ /**
6
+ * StreamingClient handles the complete encrypted streaming protocol
7
+ */
8
+ export class StreamingClient {
9
+ baseUrl;
10
+ initialized = false;
11
+ nonce = 1000;
12
+ history = [];
13
+ attestationData;
14
+ constructor(baseUrl, _attestationUrl, systemPrompt) {
15
+ this.baseUrl = baseUrl;
16
+ if (systemPrompt) {
17
+ this.history.push({ role: 'system', content: systemPrompt });
18
+ }
19
+ }
20
+ /**
21
+ * Initialize from existing session data (avoids re-attestation)
22
+ * Now uses the session management layer
23
+ */
24
+ initializeFromSession(sessionData) {
25
+ // sessionId is stored in attestationData, no need to store separately
26
+ this.nonce = sessionData.nonce;
27
+ this.history = sessionData.history || [];
28
+ this.attestationData = sessionData.attestationData;
29
+ this.initialized = true;
30
+ }
31
+ async sendMessageStream(userText, fileData) {
32
+ if (!this.initialized || !this.attestationData) {
33
+ throw new Error('StreamingClient not initialized with attestation data. Call initializeFromSession() first.');
34
+ }
35
+ // Validate user text is not empty
36
+ if (!userText || userText.trim().length === 0) {
37
+ throw new Error('User message cannot be empty');
38
+ }
39
+ // Process file data and build context
40
+ let processedMessage = userText;
41
+ const contextParts = [];
42
+ // Process file data if provided
43
+ if (fileData) {
44
+ // Handle PDF/text content
45
+ if (fileData.fileText) {
46
+ contextParts.push(fileData.fileText);
47
+ }
48
+ // Build message with context
49
+ if (contextParts.length > 0) {
50
+ const contextText = contextParts.join('\n\n');
51
+ processedMessage = `Context:\n\n${contextText}\n\nQuery: ${userText}`;
52
+ }
53
+ }
54
+ // Create message object
55
+ const messageObj = {
56
+ role: 'user',
57
+ content: processedMessage
58
+ };
59
+ // Process image if provided
60
+ if (fileData?.imagesData && fileData.imagesData.length > 0) {
61
+ // Use the first image for now (following the sample pattern)
62
+ const firstImage = fileData.imagesData[0];
63
+ if (firstImage?.contents) {
64
+ // Extract base64 data (remove data:image/...;base64, prefix if present)
65
+ const base64Data = firstImage.contents.includes(',')
66
+ ? firstImage.contents.split(',')[1]
67
+ : firstImage.contents;
68
+ messageObj.image_url = base64Data;
69
+ }
70
+ }
71
+ // Ensure we have a valid history array - add the current message to history for encryption
72
+ const currentHistory = [...this.history, messageObj];
73
+ // Validate history is not empty
74
+ if (currentHistory.length === 0) {
75
+ throw new Error('Message history cannot be empty');
76
+ }
77
+ const historyJson = JSON.stringify(currentHistory);
78
+ const localKeys = this.attestationData.localKeys;
79
+ // Encrypt with all shared keys for attestation
80
+ const encryptedPayloads = {};
81
+ for (const sharedKeyData of this.attestationData.sharedKeys) {
82
+ // Use the imported encryptAndSign function for each shared key
83
+ const payload = await encryptAndSign(historyJson, sharedKeyData.sharedKey, localKeys.ecdsaPrivate, this.nonce);
84
+ const peerPubPem = await serializePublicKeyPem(localKeys.ecdsaPublic);
85
+ encryptedPayloads[sharedKeyData.id] = {
86
+ peer_public_key: peerPubPem,
87
+ payload
88
+ };
89
+ }
90
+ // Build request with all encrypted payloads
91
+ const request = {
92
+ payloads: encryptedPayloads
93
+ };
94
+ // Send to /message_stream endpoint with retry logic
95
+ const url = `${this.baseUrl.replace(/\/$/, '')}/message_stream`;
96
+ const response = await retryWithBackoff(async () => {
97
+ const res = await fetch(url, {
98
+ method: 'POST',
99
+ headers: { 'Content-Type': 'application/json' },
100
+ body: JSON.stringify(request),
101
+ signal: AbortSignal.timeout(ENCRYPTION_CONFIG.streamingTimeout)
102
+ });
103
+ if (!res.ok) {
104
+ // Provide helpful error messages for common failure cases
105
+ if (res.status === 401 || res.status === 403) {
106
+ throw new Error(`Authentication failed (${res.status}). ` +
107
+ `Please ensure BLACKBOX_API_KEY is set correctly. ` +
108
+ `Run 'blackbox configure' to set up your API key.`);
109
+ }
110
+ throw new Error(`Streaming request failed: ${res.status}`);
111
+ }
112
+ return res;
113
+ }, {
114
+ maxRetries: ENCRYPTION_CONFIG.retryCount,
115
+ onRetry: (attempt, error, delay) => {
116
+ console.error(`⚠️ Streaming request failed (attempt ${attempt}/${ENCRYPTION_CONFIG.retryCount}). ` +
117
+ `Retrying in ${delay}ms... Error: ${error instanceof Error ? error.message : String(error)}`);
118
+ },
119
+ shouldRetry: (error) => {
120
+ // Retry on network errors and 5xx server errors
121
+ if (error instanceof Error) {
122
+ const message = error.message;
123
+ // Check if it's a retryable status code (500, 502, 503, 504)
124
+ const statusMatch = message.match(/Streaming request failed: (\d+)/);
125
+ if (statusMatch) {
126
+ const statusCode = parseInt(statusMatch[1], 10);
127
+ return isRetryableStatusCode(statusCode);
128
+ }
129
+ // Also retry on network/timeout errors
130
+ return (message.includes('network') ||
131
+ message.includes('timeout') ||
132
+ message.includes('ECONNRESET') ||
133
+ message.includes('ECONNREFUSED') ||
134
+ message.includes('ETIMEDOUT'));
135
+ }
136
+ return false;
137
+ },
138
+ });
139
+ // Process streaming response using ReadableStream (NDJSON format)
140
+ let buffer = '';
141
+ let fullResponse = '';
142
+ const attestationData = this.attestationData;
143
+ // FIX: Use arrow functions to preserve 'this' context
144
+ const transformStream = new TransformStream({
145
+ transform: async (chunk, controller) => {
146
+ try {
147
+ buffer += new TextDecoder().decode(chunk);
148
+ // Process complete lines
149
+ const lines = buffer.split('\n');
150
+ buffer = lines.pop() || ''; // Keep incomplete line in buffer
151
+ for (const line of lines) {
152
+ const trimmed = line.trim();
153
+ if (!trimmed)
154
+ continue;
155
+ try {
156
+ const jsonData = JSON.parse(trimmed);
157
+ // Check for end-of-stream marker
158
+ if (jsonData.eos === true) {
159
+ // Add the complete response to history when stream ends
160
+ if (fullResponse.trim().length > 0) {
161
+ // 'this' correctly refers to the class instance here
162
+ this.history.push({ role: 'assistant', content: fullResponse });
163
+ this.nonce = this.nonce + 1;
164
+ }
165
+ controller.terminate();
166
+ return;
167
+ }
168
+ // The server should indicate which key was used for encryption
169
+ // Try to decrypt with the appropriate key based on server response
170
+ let decryptedChunk = null;
171
+ // If server indicates which key was used
172
+ if (jsonData.key_id) {
173
+ const keyData = attestationData.sharedKeys.find((k) => k.id === jsonData.key_id);
174
+ const serverKey = attestationData.serverPublicKeys.find((k) => k.id === jsonData.key_id);
175
+ if (keyData && serverKey) {
176
+ try {
177
+ decryptedChunk = await decryptAndVerify(jsonData, keyData.sharedKey, serverKey.publicKeySpki);
178
+ }
179
+ catch (_error) {
180
+ // Failed to decrypt with specified key, will try all keys
181
+ }
182
+ }
183
+ }
184
+ // If no key_id specified or decryption failed, try all keys
185
+ if (!decryptedChunk) {
186
+ for (let i = 0; i < attestationData.sharedKeys.length; i++) {
187
+ const keyData = attestationData.sharedKeys[i];
188
+ const serverKey = attestationData.serverPublicKeys[i];
189
+ try {
190
+ decryptedChunk = await decryptAndVerify(jsonData, keyData.sharedKey, serverKey.publicKeySpki);
191
+ break;
192
+ }
193
+ catch (_error) {
194
+ // Try next key
195
+ continue;
196
+ }
197
+ }
198
+ }
199
+ if (!decryptedChunk) {
200
+ throw new Error('Failed to decrypt chunk with any available key');
201
+ }
202
+ fullResponse += decryptedChunk;
203
+ // Enqueue the decrypted chunk
204
+ controller.enqueue(new TextEncoder().encode(decryptedChunk));
205
+ }
206
+ catch (_e) {
207
+ // Error processing chunk, skip this line
208
+ }
209
+ }
210
+ }
211
+ catch (error) {
212
+ controller.error(error);
213
+ }
214
+ },
215
+ flush: () => {
216
+ // Handle case where stream ends without explicit EOS marker
217
+ if (fullResponse.trim().length > 0) {
218
+ this.history.push({ role: 'assistant', content: fullResponse });
219
+ this.nonce = this.nonce + 1;
220
+ }
221
+ }
222
+ });
223
+ return response.body.pipeThrough(transformStream);
224
+ }
225
+ }
226
+ //# sourceMappingURL=streaming-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-client.js","sourceRoot":"","sources":["../../../src/encrypt/streaming-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import type { CryptoKeyPair } from './crypto-utils.js';
2
+ export interface EncryptedMessage {
3
+ id: string;
4
+ content: string;
5
+ role: 'user' | 'assistant' | 'system';
6
+ encrypted?: boolean;
7
+ encryptionKey?: string;
8
+ image_url?: string;
9
+ }
10
+ export interface FileData {
11
+ imagesData?: Array<{
12
+ filePath: string;
13
+ contents: string;
14
+ }>;
15
+ fileText?: string;
16
+ title?: string;
17
+ }
18
+ export interface SecureSession {
19
+ sessionId: string;
20
+ initialized: boolean;
21
+ nonce: number;
22
+ history: Array<{
23
+ role: 'user' | 'assistant' | 'system';
24
+ content: string;
25
+ }>;
26
+ serverPublicKeySpki?: Uint8Array;
27
+ localKeys?: CryptoKeyPair;
28
+ sharedKey?: Uint8Array;
29
+ createdAt: number;
30
+ }
31
+ /**
32
+ * Single attestation result interface
33
+ */
34
+ export interface AttestationResult {
35
+ id: string;
36
+ status: number;
37
+ body: AttestationResponse;
38
+ }
39
+ /**
40
+ * Attestation response interface for list-based results
41
+ */
42
+ export interface AttestationListResponse {
43
+ broadcast: boolean;
44
+ successful_servers: number;
45
+ total_servers: number;
46
+ results: AttestationResult[];
47
+ }
48
+ /**
49
+ * Attestation response interface
50
+ */
51
+ export interface AttestationResponse {
52
+ public_key?: string;
53
+ public_key_worker?: string;
54
+ nonce_b64?: string;
55
+ nonceB64?: string;
56
+ nonce?: string;
57
+ report_json: string;
58
+ signature: string;
59
+ gpu_eat: string;
60
+ }
61
+ /**
62
+ * Processed attestation data
63
+ */
64
+ export interface ProcessedAttestationData {
65
+ sessionId: string;
66
+ nonce: number;
67
+ history: Array<{
68
+ role: 'user' | 'assistant' | 'system';
69
+ content: string;
70
+ }>;
71
+ serverPublicKeys: Array<{
72
+ id: string;
73
+ publicKeySpki: Uint8Array;
74
+ publicKeyPem: string;
75
+ }>;
76
+ localKeys: CryptoKeyPair;
77
+ sharedKeys: Array<{
78
+ id: string;
79
+ sharedKey: Uint8Array;
80
+ }>;
81
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/encrypt/types.ts"],"names":[],"mappings":""}
@@ -7,5 +7,5 @@ import type { Config } from '@blackbox_ai/blackbox-cli-core';
7
7
  import type { DnsResolutionOrder, LoadedSettings } from './config/settings.js';
8
8
  export declare function validateDnsResolutionOrder(order: string | undefined): DnsResolutionOrder;
9
9
  export declare function setupUnhandledRejectionHandler(): void;
10
- export declare function startInteractiveUI(config: Config, settings: LoadedSettings, startupWarnings: string[], workspaceRoot: string): Promise<void>;
10
+ export declare function startInteractiveUI(config: Config, settings: LoadedSettings, startupWarnings: string[], workspaceRoot: string, initialSlashCommand?: string): Promise<void>;
11
11
  export declare function main(): Promise<void>;