@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,525 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CommandKind } from './types.js';
7
+ import { VoiceRecordingService } from '../../services/voiceRecordingService.js';
8
+ import { isVoiceConfigured } from '../../config/voice.js';
9
+ import { parseElevenLabsError, formatElevenLabsError } from '../../services/elevenLabsErrors.js';
10
+ import process from 'node:process';
11
+ import WebSocket from 'ws';
12
+ // Debug mode flag - can be set via environment variable
13
+ const DEBUG_MODE = process.env['DEBUG'] === 'true' || process.env['DEBUG'] === '1' || process.env['DEBUG_MODE'] === 'true' || process.env['DEBUG_MODE'] === '1';
14
+ function debugLog(...args) {
15
+ if (DEBUG_MODE) {
16
+ console.debug('[DEBUG][VoiceCommand]', ...args);
17
+ }
18
+ }
19
+ function sanitizeApiKey(apiKey) {
20
+ if (apiKey.length <= 8)
21
+ return '***';
22
+ return `${apiKey.substring(0, 4)}...${apiKey.substring(apiKey.length - 4)}`;
23
+ }
24
+ const voiceRecordCommand = {
25
+ name: 'record',
26
+ altNames: ['start'],
27
+ description: 'record voice input with live transcription and submit as prompt',
28
+ kind: CommandKind.BUILT_IN,
29
+ action: async (context, _args) => {
30
+ const settings = context.services.settings;
31
+ debugLog('Voice record command invoked');
32
+ // Initialize voice service
33
+ const voiceService = new VoiceRecordingService({
34
+ sampleRate: 16000,
35
+ audioFormat: 'wav',
36
+ });
37
+ // Check API key - if not configured, open the config dialog
38
+ const apiKey = settings.merged.voice?.elevenLabs?.apiKey || process.env['ELEVENLABS_API_KEY'];
39
+ if (!apiKey) {
40
+ debugLog('No API key found, opening config dialog');
41
+ return {
42
+ type: 'dialog',
43
+ dialog: 'voice_config',
44
+ };
45
+ }
46
+ debugLog('API key found:', sanitizeApiKey(apiKey));
47
+ try {
48
+ let fullTranscript = '';
49
+ let lastPartialTranscript = '';
50
+ let websocketError = null;
51
+ // Create temporary file path for recording
52
+ const os = await import('node:os');
53
+ const path = await import('node:path');
54
+ const tempFilePath = path.join(os.tmpdir(), `voice-recording-${Date.now()}.wav`);
55
+ // Connect to ElevenLabs WebSocket with English language explicitly set
56
+ const uri = "wss://api.elevenlabs.io/v1/speech-to-text/realtime?model_id=scribe_v2_realtime&language_code=en&commit_strategy=manual";
57
+ debugLog('Connecting to WebSocket:', uri);
58
+ const websocket = new WebSocket(uri, {
59
+ headers: {
60
+ "xi-api-key": apiKey,
61
+ },
62
+ });
63
+ let sessionStarted = false;
64
+ let pendingItemSet = false;
65
+ let isRecordingPhase = true; // Flag to control which handler processes messages
66
+ // Set up WebSocket event handlers
67
+ websocket.on("open", () => {
68
+ debugLog('WebSocket connection opened');
69
+ });
70
+ const recordingMessageHandler = (event) => {
71
+ // Only process messages during recording phase
72
+ if (!isRecordingPhase)
73
+ return;
74
+ const data = JSON.parse(event.toString());
75
+ debugLog('WebSocket message received:', data.message_type);
76
+ switch (data.message_type) {
77
+ case "session_started":
78
+ sessionStarted = true;
79
+ debugLog('Session started successfully');
80
+ // Set pending item only once when session starts
81
+ if (!pendingItemSet) {
82
+ context.ui.setPendingItem({
83
+ type: 'gemini',
84
+ text: `🔴 Recording... (press Enter to stop, ESC to cancel)`,
85
+ });
86
+ pendingItemSet = true;
87
+ }
88
+ break;
89
+ case "partial_transcript": {
90
+ const partialText = data.text || '';
91
+ debugLog('Partial transcript:', partialText ? `"${partialText}"` : '(empty)');
92
+ if (partialText && partialText.trim()) {
93
+ lastPartialTranscript = partialText;
94
+ const displayText = fullTranscript
95
+ ? `${fullTranscript} ${partialText}`
96
+ : partialText;
97
+ // Create a new object to trigger React re-render
98
+ context.ui.setPendingItem({
99
+ type: 'gemini',
100
+ text: `🔴 Recording... (press Enter to stop, ESC to cancel)\n\n💬 ${displayText}`,
101
+ });
102
+ }
103
+ break;
104
+ }
105
+ case "committed_transcript": {
106
+ const committedText = data.text || '';
107
+ debugLog('Committed transcript:', committedText ? `"${committedText}"` : '(empty)');
108
+ if (committedText) {
109
+ if (fullTranscript && !fullTranscript.endsWith(' ')) {
110
+ fullTranscript += ' ';
111
+ }
112
+ fullTranscript += committedText;
113
+ lastPartialTranscript = '';
114
+ const displayText = fullTranscript;
115
+ // Create a new object to trigger React re-render
116
+ context.ui.setPendingItem({
117
+ type: 'gemini',
118
+ text: `🔴 Recording... (press Enter to stop, ESC to cancel)\n\n💬 ${displayText}`,
119
+ });
120
+ }
121
+ break;
122
+ }
123
+ case "error":
124
+ debugLog('WebSocket error message:', JSON.stringify(data));
125
+ break;
126
+ default:
127
+ debugLog('Unknown message type:', data.message_type, JSON.stringify(data));
128
+ break;
129
+ }
130
+ };
131
+ websocket.on("message", recordingMessageHandler);
132
+ websocket.on("error", (error) => {
133
+ // Capture WebSocket errors for later handling
134
+ websocketError = error;
135
+ debugLog('WebSocket error event:', error.message, error.stack);
136
+ console.error('WebSocket error:', error.message);
137
+ });
138
+ websocket.on("close", (code, reason) => {
139
+ // Handle WebSocket close events, especially authentication failures
140
+ const reasonString = reason.toString();
141
+ debugLog('WebSocket closed - code:', code, 'reason:', reasonString || '(none)');
142
+ // WebSocket close codes:
143
+ // 1000 = Normal closure
144
+ // 1001 = Going away (e.g., server going down or browser navigating away)
145
+ // 1005 = No Status Received (reserved code, used internally when no close code was received)
146
+ // 1008 = Policy violation (often used for auth failures)
147
+ // 4001 = Unauthorized (custom code used by some APIs)
148
+ // 1002 = Protocol error
149
+ // Handle authentication and protocol errors
150
+ if (code === 1008 || code === 4001 || code === 1002) {
151
+ // Parse the error using our error handler
152
+ const httpStatus = code === 1008 || code === 4001 ? 401 : 403;
153
+ const errorInfo = parseElevenLabsError(httpStatus, reasonString || 'Authentication failed');
154
+ const formattedError = formatElevenLabsError(errorInfo);
155
+ websocketError = new Error(formattedError);
156
+ debugLog('Authentication/protocol error detected');
157
+ console.error('WebSocket authentication error:', formattedError);
158
+ }
159
+ else if (code !== 1000 && code !== 1001 && code !== 1005) {
160
+ // Log non-normal closures
161
+ // Exclude 1000 (normal), 1001 (going away), and 1005 (no status received - benign)
162
+ const errorMessage = `WebSocket closed unexpectedly: ${reasonString || 'Unknown reason'} (code: ${code})`;
163
+ websocketError = new Error(errorMessage);
164
+ debugLog('Unexpected WebSocket closure');
165
+ console.error(errorMessage);
166
+ }
167
+ else {
168
+ debugLog('Normal WebSocket closure');
169
+ }
170
+ // Note: Codes 1000, 1001, and 1005 are considered normal and don't generate errors
171
+ });
172
+ // Wait for session to start with timeout and error checking
173
+ debugLog('Waiting for session to start...');
174
+ await new Promise((resolve, reject) => {
175
+ const timeout = setTimeout(() => {
176
+ clearInterval(checkSession);
177
+ debugLog('Session start timeout reached');
178
+ // Check for captured errors first
179
+ if (websocketError) {
180
+ debugLog('Rejecting with captured WebSocket error');
181
+ reject(websocketError);
182
+ }
183
+ else if (websocket.readyState === WebSocket.CLOSED || websocket.readyState === WebSocket.CLOSING) {
184
+ // WebSocket closed without starting session - likely an auth error
185
+ debugLog('WebSocket closed before session started');
186
+ const errorInfo = parseElevenLabsError(401, 'WebSocket connection closed before session started. This usually indicates an authentication issue.');
187
+ const formattedError = formatElevenLabsError(errorInfo);
188
+ reject(new Error(formattedError));
189
+ }
190
+ else {
191
+ debugLog('Session failed to start within timeout');
192
+ reject(new Error('WebSocket session failed to start (timeout after 10s)'));
193
+ }
194
+ }, 10000); // 10 second timeout
195
+ const checkSession = setInterval(() => {
196
+ // Check for errors first - this is the highest priority
197
+ if (websocketError) {
198
+ clearInterval(checkSession);
199
+ clearTimeout(timeout);
200
+ reject(websocketError);
201
+ return;
202
+ }
203
+ // Check if WebSocket closed without starting session
204
+ if (!sessionStarted && (websocket.readyState === WebSocket.CLOSED || websocket.readyState === WebSocket.CLOSING)) {
205
+ clearInterval(checkSession);
206
+ clearTimeout(timeout);
207
+ // WebSocket closed early - this is likely an authentication error
208
+ const errorInfo = parseElevenLabsError(401, 'WebSocket connection closed before session started. This usually indicates an authentication issue.');
209
+ const formattedError = formatElevenLabsError(errorInfo);
210
+ reject(new Error(formattedError));
211
+ return;
212
+ }
213
+ // Check if session started successfully
214
+ if (sessionStarted) {
215
+ clearInterval(checkSession);
216
+ clearTimeout(timeout);
217
+ resolve();
218
+ }
219
+ }, 50); // Check more frequently (every 50ms instead of 100ms)
220
+ });
221
+ // Track elapsed time without updating UI
222
+ let isRecording = true;
223
+ let elapsedSeconds = 0;
224
+ const durationInterval = setInterval(() => {
225
+ if (isRecording) {
226
+ elapsedSeconds++;
227
+ }
228
+ }, 1000);
229
+ // WebSocket keepalive - send ping every 5 seconds to prevent timeout
230
+ const keepaliveInterval = setInterval(() => {
231
+ if (websocket.readyState === WebSocket.OPEN) {
232
+ websocket.ping();
233
+ }
234
+ }, 5000);
235
+ // Periodic commit interval - commit every 30 seconds to avoid buffer overflow
236
+ // This helps with very long recordings by ensuring audio is processed incrementally
237
+ let lastCommitTime = Date.now();
238
+ const COMMIT_INTERVAL_MS = 30000; // 30 seconds
239
+ // Start recording with streaming callback and save to tmp file
240
+ debugLog('Starting audio recording with streaming to WebSocket');
241
+ let audioChunksSent = 0;
242
+ let totalAudioBytesSent = 0;
243
+ await voiceService.startRecording(tempFilePath, (audioChunk) => {
244
+ // Stream audio chunks to WebSocket in real-time
245
+ if (websocket.readyState === WebSocket.OPEN) {
246
+ audioChunksSent++;
247
+ totalAudioBytesSent += audioChunk.length;
248
+ if (audioChunksSent === 1) {
249
+ debugLog('First audio chunk sent to WebSocket, size:', audioChunk.length, 'bytes');
250
+ }
251
+ else if (audioChunksSent % 100 === 0) {
252
+ debugLog(`Audio chunks sent: ${audioChunksSent}, total bytes: ${totalAudioBytesSent}`);
253
+ }
254
+ const chunkBase64 = audioChunk.toString("base64");
255
+ const now = Date.now();
256
+ const shouldCommit = (now - lastCommitTime) >= COMMIT_INTERVAL_MS;
257
+ if (shouldCommit) {
258
+ debugLog('Sending commit with audio chunk');
259
+ }
260
+ websocket.send(JSON.stringify({
261
+ message_type: "input_audio_chunk",
262
+ audio_base_64: chunkBase64,
263
+ commit: shouldCommit,
264
+ sample_rate: 16000,
265
+ }));
266
+ // Reset commit timer if we just committed
267
+ if (shouldCommit) {
268
+ lastCommitTime = now;
269
+ }
270
+ }
271
+ else {
272
+ debugLog('WebSocket not open, skipping audio chunk. State:', websocket.readyState);
273
+ }
274
+ });
275
+ // Wait for Enter key
276
+ await new Promise((resolve, reject) => {
277
+ const stdin = process.stdin;
278
+ const wasRaw = stdin.isRaw;
279
+ const wasPaused = stdin.isPaused();
280
+ stdin.setRawMode(true);
281
+ stdin.resume();
282
+ stdin.setEncoding('utf8');
283
+ const cleanup = () => {
284
+ stdin.setRawMode(wasRaw || false);
285
+ if (wasPaused) {
286
+ stdin.pause();
287
+ }
288
+ stdin.removeListener('data', onData);
289
+ };
290
+ const onData = (key) => {
291
+ // Enter key
292
+ if (key === '\r' || key === '\n') {
293
+ cleanup();
294
+ resolve();
295
+ return;
296
+ }
297
+ // Ctrl+C
298
+ if (key === '\u0003') {
299
+ cleanup();
300
+ // Synchronously cancel recording to prevent race condition
301
+ isRecording = false;
302
+ isRecordingPhase = false; // Stop message handler immediately
303
+ clearInterval(durationInterval);
304
+ clearInterval(keepaliveInterval);
305
+ // Clear UI immediately
306
+ context.ui.setPendingItem(null);
307
+ // Close WebSocket synchronously
308
+ websocket.close();
309
+ // Cancel recording (fire and forget - don't wait)
310
+ voiceService.cancelRecording().catch((error) => {
311
+ console.error('Error during cleanup:', error);
312
+ });
313
+ // Reject immediately
314
+ reject(new Error('Recording cancelled'));
315
+ return;
316
+ }
317
+ // ESC key
318
+ if (key === '\u001b') {
319
+ cleanup();
320
+ // Synchronously cancel recording to prevent race condition
321
+ isRecording = false;
322
+ isRecordingPhase = false; // Stop message handler immediately
323
+ clearInterval(durationInterval);
324
+ clearInterval(keepaliveInterval);
325
+ // Clear UI immediately
326
+ context.ui.setPendingItem(null);
327
+ // Close WebSocket synchronously
328
+ websocket.close();
329
+ // Cancel recording (fire and forget - don't wait)
330
+ voiceService.cancelRecording().catch((error) => {
331
+ console.error('Error during cleanup:', error);
332
+ });
333
+ // Reject immediately
334
+ reject(new Error('Recording cancelled'));
335
+ return;
336
+ }
337
+ };
338
+ stdin.on('data', onData);
339
+ });
340
+ // Stop recording
341
+ isRecording = false;
342
+ isRecordingPhase = false; // Stop the recording handler from processing new messages
343
+ clearInterval(durationInterval);
344
+ clearInterval(keepaliveInterval);
345
+ debugLog('Stopping audio recording...');
346
+ await voiceService.stopRecording();
347
+ debugLog('Audio recording stopped');
348
+ debugLog('Total audio chunks sent:', audioChunksSent, 'Total bytes:', totalAudioBytesSent);
349
+ // Show processing message
350
+ context.ui.setPendingItem({
351
+ type: 'gemini',
352
+ text: `⏳ Processing final audio... (${elapsedSeconds}s recorded)`,
353
+ });
354
+ // Send final commit to flush any remaining audio in the buffer
355
+ if (websocket.readyState === WebSocket.OPEN) {
356
+ debugLog('Sending final commit to flush remaining audio');
357
+ websocket.send(JSON.stringify({
358
+ message_type: "input_audio_chunk",
359
+ audio_base_64: "",
360
+ commit: true,
361
+ sample_rate: 16000,
362
+ }));
363
+ }
364
+ else {
365
+ debugLog('WARNING: WebSocket not open for final commit. State:', websocket.readyState);
366
+ }
367
+ // Wait for all remaining committed transcripts with dynamic timeout based on recording duration
368
+ // The API can send multiple committed_transcript messages after the final commit
369
+ // We need to keep listening and appending until no more data arrives
370
+ const baseTimeout = 3000; // 3 seconds base
371
+ const additionalTimePerMinute = 2000; // Add 2 seconds per minute of recording
372
+ const recordingMinutes = Math.ceil(elapsedSeconds / 60);
373
+ const dynamicTimeout = baseTimeout + (additionalTimePerMinute * recordingMinutes);
374
+ await new Promise((resolve) => {
375
+ let noDataTimeout;
376
+ // Main timeout - maximum time to wait
377
+ const mainTimeout = setTimeout(() => {
378
+ clearTimeout(noDataTimeout);
379
+ websocket.removeListener('message', finalTranscriptHandler);
380
+ resolve();
381
+ }, dynamicTimeout);
382
+ // Reset the no-data timeout whenever we receive data
383
+ const resetNoDataTimeout = () => {
384
+ clearTimeout(noDataTimeout);
385
+ // If no data for 1 second, assume we're done
386
+ noDataTimeout = setTimeout(() => {
387
+ clearTimeout(mainTimeout);
388
+ websocket.removeListener('message', finalTranscriptHandler);
389
+ resolve();
390
+ }, 1000);
391
+ };
392
+ // Listen for all committed transcripts and keep appending
393
+ const finalTranscriptHandler = (event) => {
394
+ const data = JSON.parse(event.toString());
395
+ if (data.message_type === "committed_transcript") {
396
+ const committedText = data.text || '';
397
+ if (committedText) {
398
+ // Append to full transcript
399
+ if (fullTranscript && !fullTranscript.endsWith(' ')) {
400
+ fullTranscript += ' ';
401
+ }
402
+ fullTranscript += committedText;
403
+ lastPartialTranscript = '';
404
+ // Update UI with latest transcript
405
+ context.ui.setPendingItem({
406
+ type: 'gemini',
407
+ text: `⏳ Processing final audio... (${elapsedSeconds}s recorded)\n\n💬 ${fullTranscript}`,
408
+ });
409
+ resetNoDataTimeout();
410
+ }
411
+ }
412
+ else if (data.message_type === "partial_transcript") {
413
+ // Also handle any partial transcripts that come after commit
414
+ const partialText = data.text || '';
415
+ if (partialText && partialText.trim()) {
416
+ lastPartialTranscript = partialText;
417
+ const displayText = fullTranscript
418
+ ? `${fullTranscript} ${partialText}`
419
+ : partialText;
420
+ context.ui.setPendingItem({
421
+ type: 'gemini',
422
+ text: `⏳ Processing final audio... (${elapsedSeconds}s recorded)\n\n💬 ${displayText}`,
423
+ });
424
+ resetNoDataTimeout();
425
+ }
426
+ }
427
+ };
428
+ websocket.on('message', finalTranscriptHandler);
429
+ resetNoDataTimeout(); // Start the no-data timeout
430
+ });
431
+ // Close WebSocket
432
+ debugLog('Closing WebSocket connection');
433
+ websocket.close();
434
+ const duration = elapsedSeconds;
435
+ // Combine committed transcript with any remaining partial transcript
436
+ let finalTranscript = fullTranscript;
437
+ if (lastPartialTranscript) {
438
+ debugLog('Adding remaining partial transcript to final result');
439
+ finalTranscript = finalTranscript
440
+ ? `${finalTranscript} ${lastPartialTranscript}`
441
+ : lastPartialTranscript;
442
+ }
443
+ debugLog('Final transcript length:', finalTranscript.length);
444
+ debugLog('Final transcript:', finalTranscript ? `"${finalTranscript}"` : '(empty)');
445
+ // Clear pending item
446
+ context.ui.setPendingItem(null);
447
+ // Show final result in history
448
+ context.ui.addItem({
449
+ type: 'gemini',
450
+ text: `✓ Recording complete: ${duration}s\n\nTranscription:\n${finalTranscript}`,
451
+ }, Date.now());
452
+ // Check if transcription is empty
453
+ if (!finalTranscript || finalTranscript.trim().length === 0) {
454
+ // Show error message instead of submitting empty transcription
455
+ return {
456
+ type: 'message',
457
+ messageType: 'error',
458
+ content: 'No speech detected. Please try recording again and speak clearly into your microphone.',
459
+ };
460
+ }
461
+ // Submit the transcribed text as a prompt
462
+ return {
463
+ type: 'submit_prompt',
464
+ content: finalTranscript,
465
+ };
466
+ }
467
+ catch (error) {
468
+ // Clear any pending UI items
469
+ context.ui.setPendingItem(null);
470
+ // Parse error message - the error should already be formatted with helpful information
471
+ const errorMessage = error instanceof Error ? error.message : String(error);
472
+ debugLog('Voice recording error:', errorMessage);
473
+ if (error instanceof Error && error.stack) {
474
+ debugLog('Error stack:', error.stack);
475
+ }
476
+ // Check if the error message contains ElevenLabs error information
477
+ // If it already has "Solution:" it means it's been formatted by our error handler
478
+ if (errorMessage.includes('Solution:')) {
479
+ // Error is already formatted, use it directly
480
+ return {
481
+ type: 'message',
482
+ messageType: 'error',
483
+ content: `Voice recording failed:\n\n${errorMessage}`,
484
+ };
485
+ }
486
+ // For other errors, display as-is
487
+ return {
488
+ type: 'message',
489
+ messageType: 'error',
490
+ content: `Voice recording failed:\n\n${errorMessage}`,
491
+ };
492
+ }
493
+ },
494
+ };
495
+ const voiceConfigureCommand = {
496
+ name: 'configure',
497
+ altNames: ['config', 'setup'],
498
+ description: 'configure ElevenLabs API key for voice input',
499
+ kind: CommandKind.BUILT_IN,
500
+ action: async (_context, _args) => ({
501
+ type: 'dialog',
502
+ dialog: 'voice_config',
503
+ }),
504
+ };
505
+ export const voiceCommand = {
506
+ name: 'voice',
507
+ description: 'voice input commands',
508
+ kind: CommandKind.BUILT_IN,
509
+ subCommands: [voiceRecordCommand, voiceConfigureCommand],
510
+ action: async (context, _args) => {
511
+ // When called without subcommand, check if configured
512
+ // If not configured, open config dialog
513
+ // If configured, start recording
514
+ const settings = context.services.settings;
515
+ if (!isVoiceConfigured(settings)) {
516
+ return {
517
+ type: 'dialog',
518
+ dialog: 'voice_config',
519
+ };
520
+ }
521
+ // If configured, delegate to record command
522
+ return voiceRecordCommand.action(context, _args);
523
+ },
524
+ };
525
+ //# sourceMappingURL=voiceCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voiceCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/voiceCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AACjG,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,wDAAwD;AACxD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC;AAEhK,SAAS,QAAQ,CAAC,GAAG,IAAe;IAClC,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED,MAAM,kBAAkB,GAAiB;IACvC,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,OAAO,CAAC;IACnB,WAAW,EAAE,iEAAiE;IAC9E,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAE3C,QAAQ,CAAC,8BAA8B,CAAC,CAAC;QAEzC,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAI,qBAAqB,CAAC;YAC7C,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;QAEH,4DAA4D;QAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,QAAQ,CAAC,yCAAyC,CAAC,CAAC;YACpD,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,cAAc;aACvB,CAAC;QACJ,CAAC;QAED,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnD,IAAI,CAAC;YACH,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,IAAI,qBAAqB,GAAG,EAAE,CAAC;YAC/B,IAAI,cAAc,GAAiB,IAAI,CAAC;YAExC,2CAA2C;YAC3C,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC5B,EAAE,CAAC,MAAM,EAAE,EACX,mBAAmB,IAAI,CAAC,GAAG,EAAE,MAAM,CACpC,CAAC;YAEF,uEAAuE;YACvE,MAAM,GAAG,GAAG,wHAAwH,CAAC;YACrI,QAAQ,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YAE1C,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE;gBACnC,OAAO,EAAE;oBACP,YAAY,EAAE,MAAM;iBACrB;aACF,CAAC,CAAC;YAEH,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,gBAAgB,GAAG,IAAI,CAAC,CAAC,mDAAmD;YAEhF,kCAAkC;YAClC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACxB,QAAQ,CAAC,6BAA6B,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,MAAM,uBAAuB,GAAG,CAAC,KAAa,EAAE,EAAE;gBAChD,+CAA+C;gBAC/C,IAAI,CAAC,gBAAgB;oBAAE,OAAO;gBAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC1C,QAAQ,CAAC,6BAA6B,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE3D,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC1B,KAAK,iBAAiB;wBACpB,cAAc,GAAG,IAAI,CAAC;wBACtB,QAAQ,CAAC,8BAA8B,CAAC,CAAC;wBACzC,iDAAiD;wBACjD,IAAI,CAAC,cAAc,EAAE,CAAC;4BACpB,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC;gCACxB,IAAI,EAAE,QAAiB;gCACvB,IAAI,EAAE,sDAAsD;6BAC7D,CAAC,CAAC;4BACH,cAAc,GAAG,IAAI,CAAC;wBACxB,CAAC;wBACD,MAAM;oBACR,KAAK,oBAAoB,CAAC,CAAC,CAAC;wBAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;wBACpC,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;wBAC9E,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;4BACtC,qBAAqB,GAAG,WAAW,CAAC;4BACpC,MAAM,WAAW,GAAG,cAAc;gCAChC,CAAC,CAAC,GAAG,cAAc,IAAI,WAAW,EAAE;gCACpC,CAAC,CAAC,WAAW,CAAC;4BAChB,iDAAiD;4BACjD,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC;gCACxB,IAAI,EAAE,QAAiB;gCACvB,IAAI,EAAE,8DAA8D,WAAW,EAAE;6BAClF,CAAC,CAAC;wBACL,CAAC;wBACD,MAAM;oBACR,CAAC;oBACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;wBAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;wBACtC,QAAQ,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;wBACpF,IAAI,aAAa,EAAE,CAAC;4BAClB,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gCACpD,cAAc,IAAI,GAAG,CAAC;4BACxB,CAAC;4BACD,cAAc,IAAI,aAAa,CAAC;4BAChC,qBAAqB,GAAG,EAAE,CAAC;4BAC3B,MAAM,WAAW,GAAG,cAAc,CAAC;4BACnC,iDAAiD;4BACjD,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC;gCACxB,IAAI,EAAE,QAAiB;gCACvB,IAAI,EAAE,8DAA8D,WAAW,EAAE;6BAClF,CAAC,CAAC;wBACL,CAAC;wBACD,MAAM;oBACR,CAAC;oBACD,KAAK,OAAO;wBACV,QAAQ,CAAC,0BAA0B,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC3D,MAAM;oBACR;wBACE,QAAQ,CAAC,uBAAuB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC3E,MAAM;gBACV,CAAC;YACH,CAAC,CAAC;YAEF,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;YAEjD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;gBACrC,8CAA8C;gBAC9C,cAAc,GAAG,KAAK,CAAC;gBACvB,QAAQ,CAAC,wBAAwB,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC/D,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;gBACrD,oEAAoE;gBACpE,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACvC,QAAQ,CAAC,0BAA0B,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,IAAI,QAAQ,CAAC,CAAC;gBAEhF,yBAAyB;gBACzB,wBAAwB;gBACxB,yEAAyE;gBACzE,6FAA6F;gBAC7F,yDAAyD;gBACzD,sDAAsD;gBACtD,wBAAwB;gBAExB,4CAA4C;gBAC5C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBACpD,0CAA0C;oBAC1C,MAAM,UAAU,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC9D,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,EAAE,YAAY,IAAI,uBAAuB,CAAC,CAAC;oBAC5F,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;oBACxD,cAAc,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;oBAC3C,QAAQ,CAAC,wCAAwC,CAAC,CAAC;oBACnD,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,cAAc,CAAC,CAAC;gBACnE,CAAC;qBAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAC3D,0BAA0B;oBAC1B,mFAAmF;oBACnF,MAAM,YAAY,GAAG,kCAAkC,YAAY,IAAI,gBAAgB,WAAW,IAAI,GAAG,CAAC;oBAC1G,cAAc,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;oBACzC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;oBACzC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,0BAA0B,CAAC,CAAC;gBACvC,CAAC;gBACD,mFAAmF;YACrF,CAAC,CAAC,CAAC;YAEH,4DAA4D;YAC5D,QAAQ,CAAC,iCAAiC,CAAC,CAAC;YAC5C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC9B,aAAa,CAAC,YAAY,CAAC,CAAC;oBAC5B,QAAQ,CAAC,+BAA+B,CAAC,CAAC;oBAC1C,kCAAkC;oBAClC,IAAI,cAAc,EAAE,CAAC;wBACnB,QAAQ,CAAC,yCAAyC,CAAC,CAAC;wBACpD,MAAM,CAAC,cAAc,CAAC,CAAC;oBACzB,CAAC;yBAAM,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;wBACnG,mEAAmE;wBACnE,QAAQ,CAAC,yCAAyC,CAAC,CAAC;wBACpD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,EAAE,qGAAqG,CAAC,CAAC;wBACnJ,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;wBACxD,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;oBACpC,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,wCAAwC,CAAC,CAAC;wBACnD,MAAM,CAAC,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC;oBAC7E,CAAC;gBACH,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,oBAAoB;gBAE/B,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;oBACpC,wDAAwD;oBACxD,IAAI,cAAc,EAAE,CAAC;wBACnB,aAAa,CAAC,YAAY,CAAC,CAAC;wBAC5B,YAAY,CAAC,OAAO,CAAC,CAAC;wBACtB,MAAM,CAAC,cAAc,CAAC,CAAC;wBACvB,OAAO;oBACT,CAAC;oBAED,qDAAqD;oBACrD,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;wBACjH,aAAa,CAAC,YAAY,CAAC,CAAC;wBAC5B,YAAY,CAAC,OAAO,CAAC,CAAC;wBACtB,kEAAkE;wBAClE,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,EAAE,qGAAqG,CAAC,CAAC;wBACnJ,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;wBACxD,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;wBAClC,OAAO;oBACT,CAAC;oBAED,wCAAwC;oBACxC,IAAI,cAAc,EAAE,CAAC;wBACnB,aAAa,CAAC,YAAY,CAAC,CAAC;wBAC5B,YAAY,CAAC,OAAO,CAAC,CAAC;wBACtB,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sDAAsD;YAChE,CAAC,CAAC,CAAC;YAEH,yCAAyC;YACzC,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;gBACxC,IAAI,WAAW,EAAE,CAAC;oBAChB,cAAc,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,qEAAqE;YACrE,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;gBACzC,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oBAC5C,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,8EAA8E;YAC9E,oFAAoF;YACpF,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,aAAa;YAE/C,+DAA+D;YAC/D,QAAQ,CAAC,sDAAsD,CAAC,CAAC;YACjE,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,IAAI,mBAAmB,GAAG,CAAC,CAAC;YAE5B,MAAM,YAAY,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,UAAkB,EAAE,EAAE;gBACrE,gDAAgD;gBAChD,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oBAC5C,eAAe,EAAE,CAAC;oBAClB,mBAAmB,IAAI,UAAU,CAAC,MAAM,CAAC;oBAEzC,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;wBAC1B,QAAQ,CAAC,4CAA4C,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBACrF,CAAC;yBAAM,IAAI,eAAe,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;wBACvC,QAAQ,CAAC,sBAAsB,eAAe,kBAAkB,mBAAmB,EAAE,CAAC,CAAC;oBACzF,CAAC;oBAED,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAClD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACvB,MAAM,YAAY,GAAG,CAAC,GAAG,GAAG,cAAc,CAAC,IAAI,kBAAkB,CAAC;oBAElE,IAAI,YAAY,EAAE,CAAC;wBACjB,QAAQ,CAAC,iCAAiC,CAAC,CAAC;oBAC9C,CAAC;oBAED,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;wBAC5B,YAAY,EAAE,mBAAmB;wBACjC,aAAa,EAAE,WAAW;wBAC1B,MAAM,EAAE,YAAY;wBACpB,WAAW,EAAE,KAAK;qBACnB,CAAC,CAAC,CAAC;oBAEJ,0CAA0C;oBAC1C,IAAI,YAAY,EAAE,CAAC;wBACjB,cAAc,GAAG,GAAG,CAAC;oBACvB,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,kDAAkD,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,qBAAqB;YACrB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAEnC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACvB,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAE1B,MAAM,OAAO,GAAG,GAAG,EAAE;oBACnB,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;oBAClC,IAAI,SAAS,EAAE,CAAC;wBACd,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChB,CAAC;oBACD,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvC,CAAC,CAAC;gBAEF,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE;oBAC7B,YAAY;oBACZ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;wBACjC,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,CAAC;wBACV,OAAO;oBACT,CAAC;oBACD,SAAS;oBACT,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;wBACrB,OAAO,EAAE,CAAC;wBACV,2DAA2D;wBAC3D,WAAW,GAAG,KAAK,CAAC;wBACpB,gBAAgB,GAAG,KAAK,CAAC,CAAC,mCAAmC;wBAC7D,aAAa,CAAC,gBAAgB,CAAC,CAAC;wBAChC,aAAa,CAAC,iBAAiB,CAAC,CAAC;wBAEjC,uBAAuB;wBACvB,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;wBAEhC,gCAAgC;wBAChC,SAAS,CAAC,KAAK,EAAE,CAAC;wBAElB,kDAAkD;wBAClD,YAAY,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;4BAC7C,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;wBAChD,CAAC,CAAC,CAAC;wBAEH,qBAAqB;wBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;wBACzC,OAAO;oBACT,CAAC;oBACD,UAAU;oBACV,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;wBACrB,OAAO,EAAE,CAAC;wBACV,2DAA2D;wBAC3D,WAAW,GAAG,KAAK,CAAC;wBACpB,gBAAgB,GAAG,KAAK,CAAC,CAAC,mCAAmC;wBAC7D,aAAa,CAAC,gBAAgB,CAAC,CAAC;wBAChC,aAAa,CAAC,iBAAiB,CAAC,CAAC;wBAEjC,uBAAuB;wBACvB,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;wBAEhC,gCAAgC;wBAChC,SAAS,CAAC,KAAK,EAAE,CAAC;wBAElB,kDAAkD;wBAClD,YAAY,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;4BAC7C,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;wBAChD,CAAC,CAAC,CAAC;wBAEH,qBAAqB;wBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;wBACzC,OAAO;oBACT,CAAC;gBACH,CAAC,CAAC;gBAEF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,iBAAiB;YACjB,WAAW,GAAG,KAAK,CAAC;YACpB,gBAAgB,GAAG,KAAK,CAAC,CAAC,0DAA0D;YACpF,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAChC,aAAa,CAAC,iBAAiB,CAAC,CAAC;YACjC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;YACxC,MAAM,YAAY,CAAC,aAAa,EAAE,CAAC;YACnC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;YACpC,QAAQ,CAAC,0BAA0B,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;YAE3F,0BAA0B;YAC1B,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC;gBACxB,IAAI,EAAE,QAAiB;gBACvB,IAAI,EAAE,gCAAgC,cAAc,aAAa;aAClE,CAAC,CAAC;YAEH,+DAA+D;YAC/D,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC5C,QAAQ,CAAC,+CAA+C,CAAC,CAAC;gBAC1D,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC5B,YAAY,EAAE,mBAAmB;oBACjC,aAAa,EAAE,EAAE;oBACjB,MAAM,EAAE,IAAI;oBACZ,WAAW,EAAE,KAAK;iBACnB,CAAC,CAAC,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,sDAAsD,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;YACzF,CAAC;YAED,gGAAgG;YAChG,iFAAiF;YACjF,qEAAqE;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,iBAAiB;YAC3C,MAAM,uBAAuB,GAAG,IAAI,CAAC,CAAC,wCAAwC;YAC9E,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC;YACxD,MAAM,cAAc,GAAG,WAAW,GAAG,CAAC,uBAAuB,GAAG,gBAAgB,CAAC,CAAC;YAElF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,aAA6B,CAAC;gBAElC,sCAAsC;gBACtC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;oBAClC,YAAY,CAAC,aAAa,CAAC,CAAC;oBAC5B,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;oBAC5D,OAAO,EAAE,CAAC;gBACZ,CAAC,EAAE,cAAc,CAAC,CAAC;gBAEnB,qDAAqD;gBACrD,MAAM,kBAAkB,GAAG,GAAG,EAAE;oBAC9B,YAAY,CAAC,aAAa,CAAC,CAAC;oBAC5B,6CAA6C;oBAC7C,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;wBAC9B,YAAY,CAAC,WAAW,CAAC,CAAC;wBAC1B,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;wBAC5D,OAAO,EAAE,CAAC;oBACZ,CAAC,EAAE,IAAI,CAAC,CAAC;gBACX,CAAC,CAAC;gBAEF,0DAA0D;gBAC1D,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAE,EAAE;oBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAE1C,IAAI,IAAI,CAAC,YAAY,KAAK,sBAAsB,EAAE,CAAC;wBACjD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;wBACtC,IAAI,aAAa,EAAE,CAAC;4BAClB,4BAA4B;4BAC5B,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gCACpD,cAAc,IAAI,GAAG,CAAC;4BACxB,CAAC;4BACD,cAAc,IAAI,aAAa,CAAC;4BAChC,qBAAqB,GAAG,EAAE,CAAC;4BAE3B,mCAAmC;4BACnC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC;gCACxB,IAAI,EAAE,QAAiB;gCACvB,IAAI,EAAE,gCAAgC,cAAc,qBAAqB,cAAc,EAAE;6BAC1F,CAAC,CAAC;4BAEH,kBAAkB,EAAE,CAAC;wBACvB,CAAC;oBACH,CAAC;yBAAM,IAAI,IAAI,CAAC,YAAY,KAAK,oBAAoB,EAAE,CAAC;wBACtD,6DAA6D;wBAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;wBACpC,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;4BACtC,qBAAqB,GAAG,WAAW,CAAC;4BACpC,MAAM,WAAW,GAAG,cAAc;gCAChC,CAAC,CAAC,GAAG,cAAc,IAAI,WAAW,EAAE;gCACpC,CAAC,CAAC,WAAW,CAAC;4BAEhB,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC;gCACxB,IAAI,EAAE,QAAiB;gCACvB,IAAI,EAAE,gCAAgC,cAAc,qBAAqB,WAAW,EAAE;6BACvF,CAAC,CAAC;4BAEH,kBAAkB,EAAE,CAAC;wBACvB,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC;gBAEF,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;gBAChD,kBAAkB,EAAE,CAAC,CAAC,4BAA4B;YACpD,CAAC,CAAC,CAAC;YAEH,kBAAkB;YAClB,QAAQ,CAAC,8BAA8B,CAAC,CAAC;YACzC,SAAS,CAAC,KAAK,EAAE,CAAC;YAElB,MAAM,QAAQ,GAAG,cAAc,CAAC;YAEhC,qEAAqE;YACrE,IAAI,eAAe,GAAG,cAAc,CAAC;YACrC,IAAI,qBAAqB,EAAE,CAAC;gBAC1B,QAAQ,CAAC,qDAAqD,CAAC,CAAC;gBAChE,eAAe,GAAG,eAAe;oBAC/B,CAAC,CAAC,GAAG,eAAe,IAAI,qBAAqB,EAAE;oBAC/C,CAAC,CAAC,qBAAqB,CAAC;YAC5B,CAAC;YAED,QAAQ,CAAC,0BAA0B,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;YAC7D,QAAQ,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAEpF,qBAAqB;YACrB,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAEhC,+BAA+B;YAC/B,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,yBAAyB,QAAQ,wBAAwB,eAAe,EAAE;aACjF,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YAEF,kCAAkC;YAClC,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5D,+DAA+D;gBAC/D,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,OAAO;oBACpB,OAAO,EAAE,wFAAwF;iBAClG,CAAC;YACJ,CAAC;YAED,0CAA0C;YAC1C,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,eAAe;aACzB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,6BAA6B;YAC7B,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAEhC,uFAAuF;YACvF,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,QAAQ,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC;YACjD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC1C,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;YAED,mEAAmE;YACnE,kFAAkF;YAClF,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvC,8CAA8C;gBAC9C,OAAO;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,OAAO;oBACpB,OAAO,EAAE,8BAA8B,YAAY,EAAE;iBACtD,CAAC;YACJ,CAAC;YAED,kCAAkC;YAClC,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,8BAA8B,YAAY,EAAE;aACtD,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC;AAEF,MAAM,qBAAqB,GAAiB;IAC1C,IAAI,EAAE,WAAW;IACjB,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,8CAA8C;IAC3D,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,cAAc;KACvB,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,sBAAsB;IACnC,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,WAAW,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;IACxD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC/B,sDAAsD;QACtD,wCAAwC;QACxC,iCAAiC;QACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAE3C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,cAAc;aACvB,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,OAAO,kBAAkB,CAAC,MAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;CACF,CAAC"}
@@ -4,13 +4,14 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import type React from 'react';
7
- import { AuthType, type Config } from '@blackbox_ai/blackbox-cli-core';
7
+ import { AuthType } from '@blackbox_ai/blackbox-cli-core';
8
8
  import { type LoadedSettings, SettingScope } from '../../config/settings.js';
9
9
  interface AuthDialogProps {
10
- onSelect: (authMethod: AuthType | undefined, scope: SettingScope) => void;
10
+ onSelect: (authMethod: AuthType | undefined, scope: SettingScope, providerName?: string) => void;
11
11
  settings: LoadedSettings;
12
12
  initialErrorMessage?: string | null;
13
- config?: Config;
13
+ /** Whether the dialog is in closing animation state */
14
+ isClosing?: boolean;
14
15
  }
15
- export declare function AuthDialog({ onSelect, settings, initialErrorMessage, config, }: AuthDialogProps): React.JSX.Element;
16
+ export declare function AuthDialog({ onSelect, settings, initialErrorMessage, isClosing, }: AuthDialogProps): React.JSX.Element;
16
17
  export {};