@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,833 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Blackbox
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CommandKind } from './types.js';
7
+ import { getDefaultModelForAgent, getModelDisplayName, isGitRepository } from '@blackbox_ai/blackbox-cli-core';
8
+ export const multiAgentCommand = {
9
+ name: 'multi-agent',
10
+ description: 'Set up parallel AI agent execution. Usage: /multi-agent <task>',
11
+ kind: CommandKind.BUILT_IN,
12
+ action: async (context, args) => {
13
+ const task = args.trim();
14
+ if (!task) {
15
+ return {
16
+ type: 'message',
17
+ messageType: 'error',
18
+ content: 'Please provide a task. Usage: /multi-agent <task description>',
19
+ };
20
+ }
21
+ // Detect if we're in a git repository
22
+ const isGitRepo = isGitRepository(process.cwd());
23
+ // Get Blackbox API key from environment (set by auth system)
24
+ const blackboxApiKey = process.env['BLACKBOX_API_KEY'];
25
+ if (!blackboxApiKey) {
26
+ return {
27
+ type: 'message',
28
+ messageType: 'error',
29
+ content: 'Blackbox API key not found. Please configure your Blackbox authentication first using the /auth command.',
30
+ };
31
+ }
32
+ // Check for OpenAI API key (required for Codex agent - only sk- keys supported)
33
+ const openaiApiKey = process.env['OPENAI_API_KEY'];
34
+ const hasOpenAIKey = !!openaiApiKey && openaiApiKey.startsWith('sk-');
35
+ // Check for Gemini API key (required for Gemini agent)
36
+ const geminiApiKey = process.env['GEMINI_API_KEY'];
37
+ const hasGeminiKey = !!geminiApiKey;
38
+ // Get agent configurations from settings - access the merged settings properly
39
+ const settings = context.services.settings;
40
+ const multiAgentSettings = settings.merged?.multiAgent || {};
41
+ // Debug: Log the actual settings being read
42
+ console.log('[DEBUG] Full settings object:', JSON.stringify(settings.merged, null, 2));
43
+ console.log('[DEBUG] Multi-agent settings:', JSON.stringify(multiAgentSettings, null, 2));
44
+ // Read the actual enabled states from settings
45
+ // Only default to true if NO configuration exists at all (backward compatibility)
46
+ const hasAnyConfig = multiAgentSettings && Object.keys(multiAgentSettings).length > 0;
47
+ const blackboxEnabled = hasAnyConfig
48
+ ? (multiAgentSettings.blackbox?.enabled === true) // Explicit true check
49
+ : true; // Default only when no config exists
50
+ const blackboxModel = multiAgentSettings.blackbox?.model || getDefaultModelForAgent('blackbox');
51
+ const claudeEnabled = hasAnyConfig
52
+ ? (multiAgentSettings.claude?.enabled === true) // Explicit true check
53
+ : true; // Default only when no config exists
54
+ const claudeModel = multiAgentSettings.claude?.model || getDefaultModelForAgent('claude');
55
+ // Codex requires OpenAI API key
56
+ const codexEnabled = hasAnyConfig
57
+ ? (multiAgentSettings.codex?.enabled === true && hasOpenAIKey) // Explicit true check
58
+ : hasOpenAIKey; // Default only when no config exists
59
+ const codexModel = multiAgentSettings.codex?.model || getDefaultModelForAgent('codex');
60
+ // Gemini requires GEMINI_API_KEY
61
+ const geminiEnabled = hasAnyConfig
62
+ ? (multiAgentSettings.gemini?.enabled === true && hasGeminiKey) // Explicit true check
63
+ : hasGeminiKey; // Default only when no config exists
64
+ const geminiModel = multiAgentSettings.gemini?.model || getDefaultModelForAgent('gemini');
65
+ // Debug: Log what was determined
66
+ console.log('[DEBUG] Determined enabled states:', {
67
+ blackboxEnabled,
68
+ claudeEnabled,
69
+ codexEnabled,
70
+ geminiEnabled,
71
+ hasOpenAIKey,
72
+ hasGeminiKey
73
+ });
74
+ // Check if at least one agent is enabled
75
+ if (!blackboxEnabled && !claudeEnabled && !codexEnabled && !geminiEnabled) {
76
+ return {
77
+ type: 'message',
78
+ messageType: 'error',
79
+ content: 'At least one agent must be enabled. Please check your multi-agent settings. You can enable agents using the /multi-agent-configure command.',
80
+ };
81
+ }
82
+ // Extract model name for Codex config (remove provider prefix)
83
+ const codexModelName = codexModel.split('/').pop() || 'gpt-5-codex';
84
+ // Codex configuration (only for OpenAI API keys starting with sk-)
85
+ const codexConfigToml = `model = "${codexModelName}"
86
+ model_provider = "openai"
87
+
88
+ [model_providers.openai]
89
+ name = "OpenAI"
90
+ base_url = "https://api.openai.com/v1"
91
+ env_key = "OPENAI_API_KEY"
92
+ wire_api = "responses"
93
+
94
+ [debug]
95
+ log_requests = true`;
96
+ // Get display names for models
97
+ const blackboxDisplayName = getModelDisplayName(blackboxModel);
98
+ const claudeDisplayName = getModelDisplayName(claudeModel);
99
+ const codexDisplayName = getModelDisplayName(codexModel);
100
+ const geminiDisplayName = getModelDisplayName(geminiModel);
101
+ // Generate timestamp for unique branch/directory names
102
+ const timestamp = Date.now();
103
+ // Build list of enabled agents for display
104
+ const enabledAgents = [];
105
+ if (blackboxEnabled)
106
+ enabledAgents.push('Blackbox');
107
+ if (claudeEnabled)
108
+ enabledAgents.push('Claude');
109
+ if (codexEnabled)
110
+ enabledAgents.push('Codex');
111
+ if (geminiEnabled)
112
+ enabledAgents.push('Gemini');
113
+ // Build configuration display
114
+ const configLines = [];
115
+ if (blackboxEnabled)
116
+ configLines.push(`- Blackbox Agent: ${blackboxDisplayName}`);
117
+ if (claudeEnabled)
118
+ configLines.push(`- Claude Agent: ${claudeDisplayName}`);
119
+ if (codexEnabled)
120
+ configLines.push(`- Codex Agent: ${codexDisplayName}`);
121
+ if (geminiEnabled)
122
+ configLines.push(`- Gemini Agent: ${geminiDisplayName}`);
123
+ if (!codexEnabled && multiAgentSettings.codex?.enabled !== false && !hasOpenAIKey) {
124
+ configLines.push('- Codex Agent: Disabled (requires OPENAI_API_KEY)');
125
+ }
126
+ if (!geminiEnabled && multiAgentSettings.gemini?.enabled !== false && !hasGeminiKey) {
127
+ configLines.push('- Gemini Agent: Disabled (requires GEMINI_API_KEY)');
128
+ }
129
+ // Generate instructions based on whether we're in a git repository
130
+ if (isGitRepo) {
131
+ // GIT REPOSITORY: Use existing git worktree approach (no changes to preserve existing behavior)
132
+ return generateGitWorkflowInstructions(task, timestamp, enabledAgents, configLines, blackboxEnabled, claudeEnabled, codexEnabled, geminiEnabled, blackboxDisplayName, claudeDisplayName, codexDisplayName, geminiDisplayName, blackboxModel, claudeModel, codexModel, geminiModel, blackboxApiKey, openaiApiKey, geminiApiKey, hasOpenAIKey, hasGeminiKey, codexConfigToml, multiAgentSettings);
133
+ }
134
+ else {
135
+ // NON-GIT DIRECTORY: Use new in-place workflow
136
+ return generateNonGitWorkflowInstructions(task, timestamp, enabledAgents, configLines, blackboxEnabled, claudeEnabled, codexEnabled, geminiEnabled, blackboxDisplayName, claudeDisplayName, codexDisplayName, geminiDisplayName, blackboxModel, claudeModel, codexModel, geminiModel, blackboxApiKey, openaiApiKey, geminiApiKey, hasOpenAIKey, hasGeminiKey, codexConfigToml, multiAgentSettings);
137
+ }
138
+ },
139
+ };
140
+ /**
141
+ * Generates instructions for git repository workflow (existing behavior - unchanged)
142
+ */
143
+ function generateGitWorkflowInstructions(task, timestamp, enabledAgents, configLines, blackboxEnabled, claudeEnabled, codexEnabled, geminiEnabled, blackboxDisplayName, claudeDisplayName, codexDisplayName, geminiDisplayName, blackboxModel, claudeModel, codexModel, geminiModel, blackboxApiKey, openaiApiKey, geminiApiKey, hasOpenAIKey, hasGeminiKey, codexConfigToml, _multiAgentSettings) {
144
+ const instructions = `I need to set up parallel AI agent execution for the following task: "${task}"
145
+
146
+ **Configuration:**
147
+ ${configLines.join('\n')}
148
+ - API: https://api.blackbox.ai (Blackbox API Gateway)
149
+ - Enabled Agents: ${enabledAgents.join(', ')}
150
+
151
+ ${!hasOpenAIKey ? 'Add a note to the user saying To enable Codex agent, set the OPENAI_API_KEY environment variable with your OpenAI API key (must start with sk-).\n' : ''}
152
+ ${!hasGeminiKey ? 'Add a note to the user saying To enable Gemini agent, set the GEMINI_API_KEY environment variable with your Gemini API key.\n' : ''}
153
+ **CRITICAL:** You MUST ONLY execute steps for these ${enabledAgents.length} enabled agent(s): ${enabledAgents.join(', ')}.
154
+ DO NOT create worktrees, check CLIs, or run commands for any other agents. Ignore any disabled agents completely.
155
+
156
+ Please follow these steps using the shell tool:
157
+
158
+ 1. **Check CLI installations and install if needed (ONLY for enabled agents):**
159
+ ${claudeEnabled ? ` - Check Claude CLI:
160
+ \`\`\`
161
+ which claude || (echo "Claude CLI not found. Installing..." && npm install -g @anthropic-ai/claude-code)
162
+ \`\`\`
163
+ ` : ''}${codexEnabled ? ` - Check Codex CLI:
164
+ \`\`\`
165
+ which codex || (echo "Codex CLI not found. Installing..." && npm install -g @openai/codex)
166
+ \`\`\`
167
+ ` : ''}${geminiEnabled ? ` - Check Gemini CLI:
168
+ \`\`\`
169
+ which gemini || (echo "Gemini CLI not found. Installing..." && npm install -g @google/gemini-cli)
170
+ \`\`\`
171
+ ` : ''}${!claudeEnabled && !codexEnabled && !geminiEnabled ? ' - No CLI checks needed (Blackbox CLI is built-in)\n' : ''}
172
+
173
+ 2. **Create Git worktrees for each enabled agent:**
174
+ ${blackboxEnabled ? `- For blackbox agent:
175
+ \`\`\`
176
+ git worktree add /tmp/blackbox-multi-agent-blackbox-${timestamp} -b blackboxai/multi-agent-blackbox-${timestamp}
177
+ \`\`\`` : ''}
178
+
179
+ ${claudeEnabled ? `- For claude agent:
180
+ \`\`\`
181
+ git worktree add /tmp/blackbox-multi-agent-claude-${timestamp} -b blackboxai/multi-agent-claude-${timestamp}
182
+ \`\`\`` : ''}
183
+
184
+ ${codexEnabled ? `- For codex agent:
185
+ \`\`\`
186
+ git worktree add /tmp/blackbox-multi-agent-codex-${timestamp} -b blackboxai/multi-agent-codex-${timestamp}
187
+ \`\`\`` : ''}
188
+
189
+ ${geminiEnabled ? `- For gemini agent:
190
+ \`\`\`
191
+ git worktree add /tmp/blackbox-multi-agent-gemini-${timestamp} -b blackboxai/multi-agent-gemini-${timestamp}
192
+ \`\`\`` : ''}
193
+
194
+
195
+ - Use the current branch as the base for all worktrees (to inherit existing code context). Make sure to stash any uncommitted changes before creating worktrees.
196
+
197
+ ${codexEnabled ? `3. **Set up Codex CLI configuration** (using OpenAI API):
198
+ \`\`\`
199
+ mkdir -p ~/.codex && cat > ~/.codex/config.toml << 'EOF'
200
+ ${codexConfigToml}
201
+ EOF
202
+ \`\`\`` : ''}
203
+
204
+ ${codexEnabled || geminiEnabled ? '4' : '3'}. **Run all enabled agents in parallel** (use background processes with &):
205
+ ${blackboxEnabled ? `- Blackbox agent (using ${blackboxDisplayName}):
206
+ \`\`\`
207
+ cd /tmp/blackbox-multi-agent-blackbox-${timestamp} && blackbox -p "${task}" -y > /tmp/blackbox-output-${timestamp}.log 2>&1 &
208
+ \`\`\`` : ''}
209
+
210
+ ${claudeEnabled ? `- Claude agent (using ${claudeDisplayName}, with enhanced jq parsing for readable output):
211
+ \`\`\`
212
+ cd /tmp/blackbox-multi-agent-claude-${timestamp} && ANTHROPIC_API_KEY="${blackboxApiKey}" ANTHROPIC_BASE_URL="https://api.blackbox.ai" claude --model "${claudeModel}" -p --output-format=stream-json --dangerously-skip-permissions --verbose '${task.replace(/'/g, "'\\''")}' 2>&1 | jq -r '
213
+ if .type == "assistant" and .message.content then
214
+ .message.content[] |
215
+ if .type == "text" then .text
216
+ elif .type == "tool_use" then
217
+ "+-------------------------------------------------------------+\\n" +
218
+ "| 🔧 TOOL USE: \\(.name)\\n" +
219
+ "+-------------------------------------------------------------+\\n" +
220
+ "| Input:\\n" +
221
+ ((.input | @json | split("\\n")) | map("| " + .) | join("\\n")) + "\\n" +
222
+ "+-------------------------------------------------------------+\\n"
223
+ else empty
224
+ end
225
+ elif .type == "user" and .message.content then
226
+ .message.content[] |
227
+ if .type == "tool_result" then
228
+ "\\n" +
229
+ ((.content | split("\\n")) as $lines |
230
+ if ($lines | length) > 10 then
231
+ ($lines[:10] | join("\\n")) + "\\n" +
232
+ "\\n... (\\($lines | length - 10) more lines hidden) ...\\n"
233
+ else
234
+ $lines | join("\\n")
235
+ end) +
236
+ "\\n"
237
+ else empty
238
+ end
239
+ else empty
240
+ end
241
+ ' > /tmp/claude-output-${timestamp}.log 2>&1 &
242
+ \`\`\`
243
+
244
+ Note: The enhanced jq command parses Claude's stream-json format with visual separators (using --unbuffered for real-time streaming):
245
+ - Extracts clean text from AI responses
246
+ - Shows tool calls with 🔧 icon in bordered boxes
247
+ - Displays formatted JSON input for each tool use
248
+ - Shows tool results with truncation (first 10 lines, then summary)
249
+ - Creates structured, readable output` : ''}
250
+
251
+ ${codexEnabled ? `- Codex agent (using ${codexDisplayName}, with OpenAI API key):
252
+ \`\`\`
253
+ cd /tmp/blackbox-multi-agent-codex-${timestamp} && echo "${openaiApiKey}" | codex login --with-api-key && codex exec --dangerously-bypass-approvals-and-sandbox '${task.replace(/'/g, "'\\''")}' > /tmp/codex-output-${timestamp}.log 2>&1 &
254
+ \`\`\`` : ''}
255
+
256
+ ${geminiEnabled ? `- Gemini agent (using ${geminiDisplayName}, with GEMINI_API_KEY):
257
+ \`\`\`
258
+ cd /tmp/blackbox-multi-agent-gemini-${timestamp} && GEMINI_API_KEY="${geminiApiKey}" gemini --model "${geminiModel}" --yolo '${task.replace(/'/g, "'\\''")}' --output-format stream-json | jq -r '
259
+ def hr(n): ("─" * n);
260
+
261
+ def box(title; body):
262
+ "\\n┌" + hr(78) + "┐\\n" +
263
+ "│ " + (title | ascii_upcase) + (" " * (77 - (title|length))) + "│\\n" +
264
+ "├" + hr(78) + "┤\\n" +
265
+ (body
266
+ | split("\\n")
267
+ | map("│ " + . + (" " * (77 - (. | length))))
268
+ | join("\\n")
269
+ ) +
270
+ "\\n└" + hr(78) + "┘";
271
+
272
+ if .type == "message" and .role == "assistant" then
273
+ box("assistant"; .content)
274
+ elif .type == "tool_use" then
275
+ box("tool call: " + .tool_name; "INPUT:\\n" + (.parameters | tojson))
276
+ elif .type == "tool_result" then
277
+ box("tool result"; "STATUS: " + .status + (if .output != null and .output != "" then "\\nOUTPUT:\\n" + .output else "" end))
278
+ else empty end' > /tmp/gemini-output-${timestamp}.log 2>&1 &
279
+ \`\`\`` : ''}
280
+
281
+ ${codexEnabled || geminiEnabled ? '5' : '4'}. **Monitor the agents' progress:**
282
+
283
+
284
+ The agents are now running in the background. You can check their progress by:
285
+
286
+ - Checking if processes are still running:
287
+ \`\`\`
288
+ ps aux | grep -E "(${enabledAgents.map(a => a.toLowerCase()).join('|')})" | grep -v grep
289
+ \`\`\`
290
+
291
+ - Viewing the last 20 lines from each enabled agent's log:
292
+ \`\`\`
293
+ ${blackboxEnabled ? `echo "=== Blackbox Agent (${blackboxDisplayName}) ===" && tail -20 /tmp/blackbox-output-${timestamp}.log 2>/dev/null || echo "No output yet"` : ''}
294
+ ${claudeEnabled ? `echo "" && echo "=== Claude Agent (${claudeDisplayName}, Enhanced Format) ===" && tail -20 /tmp/claude-output-${timestamp}.log 2>/dev/null || echo "No Claude output yet"` : ''}
295
+ ${codexEnabled ? `echo "" && echo "=== Codex Agent (${codexDisplayName}) ===" && tail -20 /tmp/codex-output-${timestamp}.log 2>/dev/null || echo "No output yet"` : ''}
296
+ ${geminiEnabled ? `echo "" && echo "=== Gemini Agent (${geminiDisplayName}) ===" && tail -20 /tmp/gemini-output-${timestamp}.log 2>/dev/null || echo "No output yet"` : ''}
297
+ \`\`\`
298
+
299
+ ${claudeEnabled ? '**Important**: The Claude output is already formatted with enhanced visual separators in the log file.\n' : ''}
300
+ Periodically check the logs every 30-60 seconds to show progress updates to the user.
301
+
302
+ ${codexEnabled ? '6' : '5'}. **After completion:**
303
+ - Show the results from all enabled agents
304
+ - List the branches created:
305
+ \`\`\`
306
+ git branch | grep blackboxai/multi-agent
307
+ \`\`\`
308
+ - Show changes from each branch:
309
+ \`\`\`
310
+ ${blackboxEnabled ? `echo "=== Blackbox Changes ==="; git diff blackboxai/multi-agent-blackbox-${timestamp}; echo ""` : ''}
311
+ ${claudeEnabled ? `echo "=== Claude Changes ==="; git diff blackboxai/multi-agent-claude-${timestamp}; echo ""` : ''}
312
+ ${codexEnabled ? `echo "=== Codex Changes ==="; git diff blackboxai/multi-agent-codex-${timestamp}; echo ""` : ''}
313
+ ${geminiEnabled ? `echo "=== Gemini Changes ==="; git diff blackboxai/multi-agent-gemini-${timestamp}; echo ""` : ''}
314
+ \`\`\`
315
+ - Commit the changes made by each agent with appropriate commit messages to their branches.
316
+
317
+ ${codexEnabled ? '7' : '6'}. **Provide recommendations and ask user for preference:**
318
+
319
+ Based on the outputs and changes from all agents, provide your analysis:
320
+ - Which agent performed best for this task?
321
+ - What were the key differences in their approaches?
322
+ - Compare the changes made by each agent
323
+ - Provide your recommendation on which agent's solution is best
324
+
325
+ Then, **ASK THE USER** which agent's branch they want to merge:
326
+
327
+ "Which agent's solution would you like to merge to your current branch? Please choose one:
328
+ ${blackboxEnabled ? '- blackbox' : ''}
329
+ ${claudeEnabled ? '- claude' : ''}
330
+ ${codexEnabled ? '- codex' : ''}
331
+ ${geminiEnabled ? '- gemini' : ''}
332
+ - none (keep all branches for manual review)
333
+
334
+ Or type 'compare' to see a detailed comparison of specific files between branches."
335
+
336
+ ${codexEnabled ? '8' : '7'}. **After user chooses, help with merging and cleanup:**
337
+
338
+ Based on the user's choice, execute the appropriate merge and cleanup commands:
339
+
340
+ **If user chooses Blackbox:**
341
+ \`\`\`
342
+ # Merge Blackbox's branch
343
+ git merge blackboxai/multi-agent-blackbox-${timestamp} --no-ff -m "Merge Blackbox agent solution for: ${task}"
344
+ echo "Merged Blackbox's solution"
345
+
346
+ # Delete other branches
347
+ ${claudeEnabled ? `git branch -D blackboxai/multi-agent-claude-${timestamp}` : ''}
348
+ ${codexEnabled ? `git branch -D blackboxai/multi-agent-codex-${timestamp}` : ''}
349
+ ${geminiEnabled ? `git branch -D blackboxai/multi-agent-gemini-${timestamp}` : ''}
350
+
351
+ # Remove worktrees
352
+ ${blackboxEnabled ? `git worktree remove /tmp/blackbox-multi-agent-blackbox-${timestamp} --force` : ''}
353
+ ${claudeEnabled ? `git worktree remove /tmp/blackbox-multi-agent-claude-${timestamp} --force` : ''}
354
+ ${codexEnabled ? `git worktree remove /tmp/blackbox-multi-agent-codex-${timestamp} --force` : ''}
355
+ ${geminiEnabled ? `git worktree remove /tmp/blackbox-multi-agent-gemini-${timestamp} --force` : ''}
356
+
357
+ echo "Cleanup complete! Blackbox's solution has been merged."
358
+ \`\`\`
359
+
360
+ **If user chooses Claude:**
361
+ \`\`\`
362
+ # Merge Claude's branch
363
+ git merge blackboxai/multi-agent-claude-${timestamp} --no-ff -m "Merge Claude agent solution for: ${task}"
364
+ echo "Merged Claude's solution"
365
+
366
+ # Delete other branches
367
+ ${blackboxEnabled ? `git branch -D blackboxai/multi-agent-blackbox-${timestamp}` : ''}
368
+ ${codexEnabled ? `git branch -D blackboxai/multi-agent-codex-${timestamp}` : ''}
369
+ ${geminiEnabled ? `git branch -D blackboxai/multi-agent-gemini-${timestamp}` : ''}
370
+
371
+ # Remove worktrees
372
+ ${blackboxEnabled ? `git worktree remove /tmp/blackbox-multi-agent-blackbox-${timestamp} --force` : ''}
373
+ ${claudeEnabled ? `git worktree remove /tmp/blackbox-multi-agent-claude-${timestamp} --force` : ''}
374
+ ${codexEnabled ? `git worktree remove /tmp/blackbox-multi-agent-codex-${timestamp} --force` : ''}
375
+ ${geminiEnabled ? `git worktree remove /tmp/blackbox-multi-agent-gemini-${timestamp} --force` : ''}
376
+
377
+ echo "Cleanup complete! Claude's solution has been merged."
378
+ \`\`\`
379
+
380
+ **If user chooses Codex:**
381
+ \`\`\`
382
+ # Merge Codex's branch
383
+ git merge blackboxai/multi-agent-codex-${timestamp} --no-ff -m "Merge Codex agent solution for: ${task}"
384
+ echo "Merged Codex's solution"
385
+
386
+ # Delete other branches
387
+ ${blackboxEnabled ? `git branch -D blackboxai/multi-agent-blackbox-${timestamp}` : ''}
388
+ ${claudeEnabled ? `git branch -D blackboxai/multi-agent-claude-${timestamp}` : ''}
389
+ ${geminiEnabled ? `git branch -D blackboxai/multi-agent-gemini-${timestamp}` : ''}
390
+
391
+ # Remove worktrees
392
+ ${blackboxEnabled ? `git worktree remove /tmp/blackbox-multi-agent-blackbox-${timestamp} --force` : ''}
393
+ ${claudeEnabled ? `git worktree remove /tmp/blackbox-multi-agent-claude-${timestamp} --force` : ''}
394
+ ${codexEnabled ? `git worktree remove /tmp/blackbox-multi-agent-codex-${timestamp} --force` : ''}
395
+ ${geminiEnabled ? `git worktree remove /tmp/blackbox-multi-agent-gemini-${timestamp} --force` : ''}
396
+
397
+ echo "Cleanup complete! Codex's solution has been merged."
398
+ \`\`\`
399
+
400
+ **If user chooses Gemini:**
401
+ \`\`\`
402
+ # Merge Gemini's branch
403
+ git merge blackboxai/multi-agent-gemini-${timestamp} --no-ff -m "Merge Gemini agent solution for: ${task}"
404
+ echo "Merged Gemini's solution"
405
+
406
+ # Delete other branches
407
+ ${blackboxEnabled ? `git branch -D blackboxai/multi-agent-blackbox-${timestamp}` : ''}
408
+ ${claudeEnabled ? `git branch -D blackboxai/multi-agent-claude-${timestamp}` : ''}
409
+ ${codexEnabled ? `git branch -D blackboxai/multi-agent-codex-${timestamp}` : ''}
410
+
411
+ # Remove worktrees
412
+ ${blackboxEnabled ? `git worktree remove /tmp/blackbox-multi-agent-blackbox-${timestamp} --force` : ''}
413
+ ${claudeEnabled ? `git worktree remove /tmp/blackbox-multi-agent-claude-${timestamp} --force` : ''}
414
+ ${codexEnabled ? `git worktree remove /tmp/blackbox-multi-agent-codex-${timestamp} --force` : ''}
415
+ ${geminiEnabled ? `git worktree remove /tmp/blackbox-multi-agent-gemini-${timestamp} --force` : ''}
416
+
417
+ echo "Cleanup complete! Gemini's solution has been merged."
418
+ \`\`\`
419
+
420
+ **If user chooses 'none':**
421
+ \`\`\`
422
+ echo "All branches have been kept for your manual review."
423
+ echo "You can merge them manually or compare them further."
424
+ echo "Branches available:"
425
+ git branch | grep blackboxai/multi-agent
426
+
427
+ # Still remove worktrees to free up space
428
+ ${blackboxEnabled ? `git worktree remove /tmp/blackbox-multi-agent-blackbox-${timestamp} --force` : ''}
429
+ ${claudeEnabled ? `git worktree remove /tmp/blackbox-multi-agent-claude-${timestamp} --force` : ''}
430
+ ${codexEnabled ? `git worktree remove /tmp/blackbox-multi-agent-codex-${timestamp} --force` : ''}
431
+ ${geminiEnabled ? `git worktree remove /tmp/blackbox-multi-agent-gemini-${timestamp} --force` : ''}
432
+ \`\`\`
433
+
434
+ **If user chooses 'compare':**
435
+ Ask which specific files they want to compare, then show diffs between branches:
436
+ \`\`\`
437
+ # Example: Compare a specific file across branches
438
+ echo "Comparing [filename] from different agents:"
439
+ ${blackboxEnabled ? 'echo ""; echo "=== BLACKBOX VERSION ==="; git show blackboxai/multi-agent-blackbox-' + timestamp + ':[filename] 2>/dev/null || echo "Not found"' : ''}
440
+ ${claudeEnabled ? 'echo ""; echo "=== CLAUDE VERSION ==="; git show blackboxai/multi-agent-claude-' + timestamp + ':[filename] 2>/dev/null || echo "Not found"' : ''}
441
+ ${codexEnabled ? 'echo ""; echo "=== CODEX VERSION ==="; git show blackboxai/multi-agent-codex-' + timestamp + ':[filename] 2>/dev/null || echo "Not found"' : ''}
442
+ ${geminiEnabled ? 'echo ""; echo "=== GEMINI VERSION ==="; git show blackboxai/multi-agent-gemini-' + timestamp + ':[filename] 2>/dev/null || echo "Not found"' : ''}
443
+ \`\`\`
444
+
445
+ ${codexEnabled ? '9' : '8'}. **Final steps:**
446
+ - Unstash any stashed changes back to the current branch
447
+ - Remove any temporary files created during the process
448
+ - Show final summary of what was merged
449
+
450
+ **Note:** Each agent worked in its own git branch. The cleanup process will:
451
+ 1. Merge the chosen agent's branch to your current branch
452
+ 2. Delete all other agent branches
453
+ 3. Remove all worktrees
454
+ 4. Keep your repository clean with only the selected solution
455
+
456
+ Please execute these steps, show me the streaming output from all agents, provide your analysis, ask for my preference, and help me with the merge and cleanup.`;
457
+ return {
458
+ type: 'submit_prompt',
459
+ content: instructions,
460
+ };
461
+ }
462
+ /**
463
+ * Generates instructions for non-git directory workflow (new functionality)
464
+ */
465
+ function generateNonGitWorkflowInstructions(task, timestamp, enabledAgents, configLines, blackboxEnabled, claudeEnabled, codexEnabled, geminiEnabled, blackboxDisplayName, claudeDisplayName, codexDisplayName, geminiDisplayName, blackboxModel, claudeModel, codexModel, geminiModel, blackboxApiKey, openaiApiKey, geminiApiKey, hasOpenAIKey, hasGeminiKey, codexConfigToml, _multiAgentSettings) {
466
+ const instructions = `I need to set up parallel AI agent execution for the following task: "${task}"
467
+
468
+ **Configuration:**
469
+ ${configLines.join('\n')}
470
+ - API: https://api.blackbox.ai (Blackbox API Gateway)
471
+ - Enabled Agents: ${enabledAgents.join(', ')}
472
+ - **Mode: Non-Git Directory** (working in-place without git worktrees)
473
+
474
+ ${!hasOpenAIKey ? 'Please make a note to the user saying To enable Codex agent, set the OPENAI_API_KEY environment variable with your OpenAI API key (must start with sk-).\n' : ''}
475
+ ${!hasGeminiKey ? 'Please make a note to the user saying To enable Gemini agent, set the GEMINI_API_KEY environment variable with your Gemini API key.\n' : ''}
476
+ **CRITICAL:** You MUST ONLY execute steps for these ${enabledAgents.length} enabled agent(s): ${enabledAgents.join(', ')}.
477
+ DO NOT create worktrees, check CLIs, or run commands for any other agents. Ignore any disabled agents completely.
478
+
479
+ **Important:** This directory is NOT a git repository, so we'll use a different approach:
480
+ - Agents will work in the current directory
481
+ - Each agent's output will be saved to separate folders for comparison
482
+ - No git branches or worktrees will be created
483
+
484
+ Please follow these steps using the shell tool:
485
+
486
+ 1. **Check CLI installations and install if needed (ONLY for enabled agents):**
487
+ ${claudeEnabled ? ` - Check Claude CLI:
488
+ \`\`\`
489
+ which claude || (echo "Claude CLI not found. Installing..." && npm install -g @anthropic-ai/claude-code)
490
+ \`\`\`
491
+ ` : ''}${codexEnabled ? ` - Check Codex CLI:
492
+ \`\`\`
493
+ which codex || (echo "Codex CLI not found. Installing..." && npm install -g @openai/codex)
494
+ \`\`\`
495
+ ` : ''}${geminiEnabled ? ` - Check Gemini CLI:
496
+ \`\`\`
497
+ which gemini || (echo "Gemini CLI not found. Installing..." && npm install -g @google/gemini-cli)
498
+ \`\`\`
499
+ ` : ''}${!claudeEnabled && !codexEnabled && !geminiEnabled ? ' - No CLI checks needed (Blackbox CLI is built-in)\n' : ''}
500
+
501
+ 2. **Set up multi-agent workspace in current directory:**
502
+ \`\`\`
503
+ mkdir -p .blackbox-multi-agent-${timestamp}/logs
504
+ echo "Multi-agent workspace created at: .blackbox-multi-agent-${timestamp}/"
505
+ \`\`\`
506
+
507
+ ${codexEnabled ? `4. **Set up Codex CLI configuration** (using OpenAI API):
508
+ \`\`\`
509
+ mkdir -p ~/.codex && cat > ~/.codex/config.toml << 'EOF'
510
+ ${codexConfigToml}
511
+ EOF
512
+ \`\`\`` : ''}
513
+
514
+ ${codexEnabled || geminiEnabled ? '5' : '4'}. **Important Instructions for All Agents:**
515
+
516
+ **CRITICAL FILE NAMING CONVENTION:**
517
+ When creating or modifying files, each agent MUST follow this naming convention to avoid conflicts:
518
+
519
+ - **For NEW files**: Create with agent name prefix
520
+ Example: If creating \`utils.ts\`, save as:
521
+ ${blackboxEnabled ? '- Blackbox: `blackbox_utils.ts`' : ''}
522
+ ${claudeEnabled ? '- Claude: `claude_utils.ts`' : ''}
523
+ ${codexEnabled ? '- Codex: `codex_utils.ts`' : ''}
524
+ ${geminiEnabled ? '- Gemini: `gemini_utils.ts`' : ''}
525
+
526
+ - **For MODIFIED files**: Create a copy with agent name prefix, don't modify original
527
+ Example: If modifying \`src/app.ts\`, create:
528
+ ${blackboxEnabled ? '- Blackbox: `src/blackbox_app.ts` (copy and modify)' : ''}
529
+ ${claudeEnabled ? '- Claude: `src/claude_app.ts` (copy and modify)' : ''}
530
+ ${codexEnabled ? '- Codex: `src/codex_app.ts` (copy and modify)' : ''}
531
+ ${geminiEnabled ? '- Gemini: `src/gemini_app.ts` (copy and modify)' : ''}
532
+
533
+ - **Original files remain untouched** - This allows users to compare all versions and choose the best one
534
+
535
+ - **Reading files**: Agents can read any existing files normally (no prefix needed)
536
+
537
+ ${codexEnabled || geminiEnabled ? '6' : '5'}. **Run all enabled agents in parallel** (use background processes with &):
538
+
539
+ Each agent will work in the current directory following the file naming convention above.
540
+
541
+ ${blackboxEnabled ? `- Blackbox agent (using ${blackboxDisplayName}):
542
+ \`\`\`
543
+ (blackbox -p "IMPORTANT: When creating or modifying files, use 'blackbox_' prefix for all new/modified files. Original task: ${task}" -y 2>&1 | tee .blackbox-multi-agent-${timestamp}/logs/blackbox.log) &
544
+ BLACKBOX_PID=$!
545
+ echo "Blackbox agent started (PID: $BLACKBOX_PID)"
546
+ \`\`\`` : ''}
547
+
548
+ ${claudeEnabled ? `- Claude agent (using ${claudeDisplayName}, with enhanced jq parsing for readable output):
549
+ \`\`\`
550
+ (ANTHROPIC_API_KEY="${blackboxApiKey}" ANTHROPIC_BASE_URL="https://api.blackbox.ai" claude --model "${claudeModel}" -p --output-format=stream-json --dangerously-skip-permissions --verbose 'IMPORTANT: When creating or modifying files, use "claude_" prefix for all new/modified files. Original task: ${task.replace(/'/g, "'\\''")}' 2>&1 | jq -r '
551
+ if .type == "assistant" and .message.content then
552
+ .message.content[] |
553
+ if .type == "text" then .text
554
+ elif .type == "tool_use" then
555
+ "+-------------------------------------------------------------+\\n" +
556
+ "| 🔧 TOOL USE: \\(.name)\\n" +
557
+ "+-------------------------------------------------------------+\\n" +
558
+ "| Input:\\n" +
559
+ ((.input | @json | split("\\n")) | map("| " + .) | join("\\n")) + "\\n" +
560
+ "+-------------------------------------------------------------+\\n"
561
+ else empty
562
+ end
563
+ elif .type == "user" and .message.content then
564
+ .message.content[] |
565
+ if .type == "tool_result" then
566
+ "\\n" +
567
+ ((.content | split("\\n")) as $lines |
568
+ if ($lines | length) > 10 then
569
+ ($lines[:10] | join("\\n")) + "\\n" +
570
+ "\\n... (\\($lines | length - 10) more lines hidden) ...\\n"
571
+ else
572
+ $lines | join("\\n")
573
+ end) +
574
+ "\\n"
575
+ else empty
576
+ end
577
+ else empty
578
+ end
579
+ ' | tee .blackbox-multi-agent-${timestamp}/logs/claude.log) &
580
+ CLAUDE_PID=$!
581
+ echo "Claude agent started (PID: $CLAUDE_PID)"
582
+ \`\`\`` : ''}
583
+
584
+ ${codexEnabled ? `- Codex agent (using ${codexDisplayName}, with OpenAI API key):
585
+ \`\`\`
586
+ (echo "${openaiApiKey}" | codex login --with-api-key && codex exec --dangerously-bypass-approvals-and-sandbox 'IMPORTANT: When creating or modifying files, use "codex_" prefix for all new/modified files. Original task: ${task.replace(/'/g, "'\\''")}' 2>&1 | tee .blackbox-multi-agent-${timestamp}/logs/codex.log) &
587
+ CODEX_PID=$!
588
+ echo "Codex agent started (PID: $CODEX_PID)"
589
+ \`\`\`` : ''}
590
+
591
+ ${geminiEnabled ? `- Gemini agent (using ${geminiDisplayName}, with GEMINI_API_KEY):
592
+ \`\`\`
593
+ (GEMINI_API_KEY="${geminiApiKey}" gemini --model "${geminiModel}" --yolo 'IMPORTANT: When creating or modifying files, use "gemini_" prefix for all new/modified files. Original task: ${task.replace(/'/g, "'\\''")}' --output-format stream-json 2>&1 | jq -r '
594
+ def hr(n): ("─" * n);
595
+
596
+ def box(title; body):
597
+ "\\n┌" + hr(78) + "┐\\n" +
598
+ "│ " + (title | ascii_upcase) + (" " * (77 - (title|length))) + "│\\n" +
599
+ "├" + hr(78) + "┤\\n" +
600
+ (body
601
+ | split("\\n")
602
+ | map("│ " + . + (" " * (77 - (. | length))))
603
+ | join("\\n")
604
+ ) +
605
+ "\\n└" + hr(78) + "┘";
606
+
607
+ if .type == "message" and .role == "assistant" then
608
+ box("assistant"; .content)
609
+ elif .type == "tool_use" then
610
+ box("tool call: " + .tool_name; "INPUT:\\n" + (.parameters | tojson))
611
+ elif .type == "tool_result" then
612
+ box("tool result"; "STATUS: " + .status + (if .output != null and .output != "" then "\\nOUTPUT:\\n" + .output else "" end))
613
+ else empty end' | tee .blackbox-multi-agent-${timestamp}/logs/gemini.log) &
614
+ GEMINI_PID=$!
615
+ echo "Gemini agent started (PID: $GEMINI_PID)"
616
+ \`\`\`` : ''}
617
+
618
+ ${codexEnabled || geminiEnabled ? '7' : '6'}. **Monitor the agents' progress:**
619
+
620
+ The agents are now running in the background in the current directory. You can check their progress by:
621
+
622
+ - Checking if processes are still running:
623
+ \`\`\`
624
+ ps aux | grep -E "(${enabledAgents.map(a => a.toLowerCase()).join('|')})" | grep -v grep
625
+ \`\`\`
626
+
627
+ - Viewing the last 20 lines from each enabled agent's log:
628
+ \`\`\`
629
+ ${blackboxEnabled ? `echo "=== Blackbox Agent (${blackboxDisplayName}) ===" && tail -20 .blackbox-multi-agent-${timestamp}/logs/blackbox.log 2>/dev/null || echo "No output yet"` : ''}
630
+ ${claudeEnabled ? `echo "" && echo "=== Claude Agent (${claudeDisplayName}, Enhanced Format) ===" && tail -20 .blackbox-multi-agent-${timestamp}/logs/claude.log 2>/dev/null || echo "No Claude output yet"` : ''}
631
+ ${codexEnabled ? `echo "" && echo "=== Codex Agent (${codexDisplayName}) ===" && tail -20 .blackbox-multi-agent-${timestamp}/logs/codex.log 2>/dev/null || echo "No output yet"` : ''}
632
+ ${geminiEnabled ? `echo "" && echo "=== Gemini Agent (${geminiDisplayName}) ===" && tail -20 .blackbox-multi-agent-${timestamp}/logs/gemini.log 2>/dev/null || echo "No output yet"` : ''}
633
+ \`\`\`
634
+
635
+ Periodically check the logs every 30-60 seconds to show progress updates to the user.
636
+
637
+ ${codexEnabled || geminiEnabled ? '8' : '7'}. **Wait for all agents to complete:**
638
+ \`\`\`
639
+ echo "Waiting for all agents to complete..."
640
+ ${blackboxEnabled ? 'wait $BLACKBOX_PID && echo "Blackbox agent completed"' : ''}
641
+ ${claudeEnabled ? 'wait $CLAUDE_PID && echo "Claude agent completed"' : ''}
642
+ ${codexEnabled ? 'wait $CODEX_PID && echo "Codex agent completed"' : ''}
643
+ ${geminiEnabled ? 'wait $GEMINI_PID && echo "Gemini agent completed"' : ''}
644
+ echo "All agents have completed!"
645
+ \`\`\`
646
+
647
+ ${codexEnabled || geminiEnabled ? '9' : '8'}. **Show execution summary:**
648
+
649
+ After all agents complete, show a summary:
650
+
651
+ \`\`\`
652
+ echo ""
653
+ echo "=== MULTI-AGENT EXECUTION SUMMARY ==="
654
+ echo ""
655
+ echo "Task: ${task}"
656
+ echo "Agents used: ${enabledAgents.join(', ')}"
657
+ echo ""
658
+ echo "All agent logs are available in: .blackbox-multi-agent-${timestamp}/logs/"
659
+ echo ""
660
+ echo "To review each agent's complete log:"
661
+ ${blackboxEnabled ? `echo " - Blackbox: cat .blackbox-multi-agent-${timestamp}/logs/blackbox.log"` : ''}
662
+ ${claudeEnabled ? `echo " - Claude: cat .blackbox-multi-agent-${timestamp}/logs/claude.log"` : ''}
663
+ ${codexEnabled ? `echo " - Codex: cat .blackbox-multi-agent-${timestamp}/logs/codex.log"` : ''}
664
+ ${geminiEnabled ? `echo " - Gemini: cat .blackbox-multi-agent-${timestamp}/logs/gemini.log"` : ''}
665
+ echo ""
666
+ \`\`\`
667
+
668
+ ${codexEnabled || geminiEnabled ? '10' : '9'}. **Show final results from all agents:**
669
+
670
+ Display the complete output from each agent:
671
+
672
+ \`\`\`
673
+ ${blackboxEnabled ? `echo ""; echo "=== BLACKBOX AGENT COMPLETE OUTPUT ==="; cat .blackbox-multi-agent-${timestamp}/logs/blackbox.log; echo ""` : ''}
674
+ ${claudeEnabled ? `echo ""; echo "=== CLAUDE AGENT COMPLETE OUTPUT ==="; cat .blackbox-multi-agent-${timestamp}/logs/claude.log; echo ""` : ''}
675
+ ${codexEnabled ? `echo ""; echo "=== CODEX AGENT COMPLETE OUTPUT ==="; cat .blackbox-multi-agent-${timestamp}/logs/codex.log; echo ""` : ''}
676
+ ${geminiEnabled ? `echo ""; echo "=== GEMINI AGENT COMPLETE OUTPUT ==="; cat .blackbox-multi-agent-${timestamp}/logs/gemini.log; echo ""` : ''}
677
+ \`\`\`
678
+
679
+ ${codexEnabled || geminiEnabled ? '11' : '10'}. **List all files created by each agent:**
680
+
681
+ Show which files each agent created/modified:
682
+
683
+ \`\`\`
684
+ echo ""
685
+ echo "=== FILES CREATED BY EACH AGENT ==="
686
+ echo ""
687
+ ${blackboxEnabled ? `echo "Blackbox files:"
688
+ find . -name "blackbox_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" 2>/dev/null || echo " No files created"
689
+ echo ""` : ''}
690
+ ${claudeEnabled ? `echo "Claude files:"
691
+ find . -name "claude_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" 2>/dev/null || echo " No files created"
692
+ echo ""` : ''}
693
+ ${codexEnabled ? `echo "Codex files:"
694
+ find . -name "codex_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" 2>/dev/null || echo " No files created"
695
+ echo ""` : ''}
696
+ ${geminiEnabled ? `echo "Gemini files:"
697
+ find . -name "gemini_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" 2>/dev/null || echo " No files created"
698
+ echo ""` : ''}
699
+ \`\`\`
700
+
701
+ ${codexEnabled || geminiEnabled ? '12' : '11'}. **Provide recommendations and ask user for preference:**
702
+
703
+ Based on the outputs from all agents, provide your analysis:
704
+ - Which agent performed best for this task?
705
+ - What were the key differences in their approaches?
706
+ - List the specific files each agent created (with their prefixes)
707
+ - Compare the quality and completeness of each agent's solution
708
+ - Provide your recommendation on which agent's solution is best
709
+
710
+ Then, **ASK THE USER** which agent's files they want to keep:
711
+
712
+ "Which agent's solution would you like to use? Please choose one:
713
+ ${blackboxEnabled ? '- blackbox' : ''}
714
+ ${claudeEnabled ? '- claude' : ''}
715
+ ${codexEnabled ? '- codex' : ''}
716
+ ${geminiEnabled ? '- gemini' : ''}
717
+ - none (keep all files for manual review)
718
+
719
+ Or type 'compare' to see a detailed comparison of specific files."
720
+
721
+ ${codexEnabled || geminiEnabled ? '13' : '12'}. **After user chooses, help with cleanup:**
722
+
723
+ Based on the user's choice, execute the appropriate cleanup commands:
724
+
725
+ **If user chooses Blackbox:**
726
+ \`\`\`
727
+ # Rename Blackbox's files (remove prefix)
728
+ for file in (find . -name "blackbox_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*"); do
729
+ newname="{file#./}"
730
+ newname="{newname/blackbox_/}"
731
+ mv "file" "newname"
732
+ echo "Renamed: file -> newname"
733
+ done
734
+
735
+ # Remove other agents' files
736
+ find . -name "claude_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
737
+ find . -name "codex_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
738
+ find . -name "gemini_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
739
+
740
+ echo "Cleanup complete! Blackbox's files are now active."
741
+ \`\`\`
742
+
743
+ **If user chooses Claude:**
744
+ \`\`\`
745
+ # Rename Claude's files (remove prefix)
746
+ for file in (find . -name "claude_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*"); do
747
+ newname="{file#./}"
748
+ newname="{newname/claude_/}"
749
+ mv "file" "newname"
750
+ echo "Renamed: file -> newname"
751
+ done
752
+
753
+ # Remove other agents' files
754
+ find . -name "blackbox_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
755
+ find . -name "codex_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
756
+ find . -name "gemini_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
757
+
758
+ echo "Cleanup complete! Claude's files are now active."
759
+ \`\`\`
760
+
761
+ **If user chooses Codex:**
762
+ \`\`\`
763
+ # Rename Codex's files (remove prefix)
764
+ for file in (find . -name "codex_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*"); do
765
+ newname="{file#./}"
766
+ newname="{newname/codex_/}"
767
+ mv "file" "newname"
768
+ echo "Renamed: file -> newname"
769
+ done
770
+
771
+ # Remove other agents' files
772
+ find . -name "blackbox_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
773
+ find . -name "claude_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
774
+ find . -name "gemini_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
775
+
776
+ echo "Cleanup complete! Codex's files are now active."
777
+ \`\`\`
778
+
779
+ **If user chooses Gemini:**
780
+ \`\`\`
781
+ # Rename Gemini's files (remove prefix)
782
+ for file in (find . -name "gemini_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*"); do
783
+ newname="{file#./}"
784
+ newname="{newname/gemini_/}"
785
+ mv "file" "newname"
786
+ echo "Renamed: file -> newname"
787
+ done
788
+
789
+ # Remove other agents' files
790
+ find . -name "blackbox_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
791
+ find . -name "claude_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
792
+ find . -name "codex_*" -type f -not -path "./.blackbox-multi-agent-${timestamp}/*" -delete
793
+
794
+ echo "Cleanup complete! Gemini's files are now active."
795
+ \`\`\`
796
+
797
+ **If user chooses 'none':**
798
+ \`\`\`
799
+ echo "All agent files have been kept for your manual review."
800
+ echo "You can compare them and manually choose which ones to keep."
801
+ \`\`\`
802
+
803
+ **If user chooses 'compare':**
804
+ Ask which specific files they want to compare, then show side-by-side diffs:
805
+ \`\`\`
806
+ # Example: Compare a specific file from different agents
807
+ echo "Comparing [filename] from different agents:"
808
+ ${blackboxEnabled ? 'echo ""; echo "=== BLACKBOX VERSION ==="; cat blackbox_[filename] 2>/dev/null || echo "Not found"' : ''}
809
+ ${claudeEnabled ? 'echo ""; echo "=== CLAUDE VERSION ==="; cat claude_[filename] 2>/dev/null || echo "Not found"' : ''}
810
+ ${codexEnabled ? 'echo ""; echo "=== CODEX VERSION ==="; cat codex_[filename] 2>/dev/null || echo "Not found"' : ''}
811
+ ${geminiEnabled ? 'echo ""; echo "=== GEMINI VERSION ==="; cat gemini_[filename] 2>/dev/null || echo "Not found"' : ''}
812
+ \`\`\`
813
+
814
+ ${codexEnabled || geminiEnabled ? '14' : '13'}. **Final cleanup of logs:**
815
+
816
+ After the user is satisfied with their choice, remove the logs directory:
817
+ \`\`\`
818
+ rm -rf .blackbox-multi-agent-${timestamp}
819
+ echo "Multi-agent logs removed. Task complete!"
820
+ \`\`\`
821
+
822
+ **Note:** Each agent created files with their name prefix (e.g., \`blackbox_file.ts\`, \`claude_file.ts\`). This allows easy comparison and selection. The cleanup process will:
823
+ 1. Rename the chosen agent's files (remove prefix)
824
+ 2. Delete all other agents' files
825
+ 3. Keep the directory clean with only the selected solution
826
+
827
+ Please execute these steps, show me the streaming output from all agents, provide your analysis, ask for my preference, and help me with the cleanup.`;
828
+ return {
829
+ type: 'submit_prompt',
830
+ content: instructions,
831
+ };
832
+ }
833
+ //# sourceMappingURL=multiAgentCommand.js.map