@blackbox_ai/blackbox-cli 0.0.9 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/README.md +22 -196
  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
@@ -48,7 +48,13 @@ describe('<LoadingIndicator />', () => {
48
48
  const output = lastFrame();
49
49
  expect(output).toContain('MockRespondingSpinner');
50
50
  expect(output).toContain('Loading...');
51
- expect(output).toContain('(esc to cancel, 5s)');
51
+ expect(output).toContain('(esc to cancel · 5s)');
52
+ expect(output).not.toContain('ctrl+y to show todos');
53
+ });
54
+ it('should show ctrl+y option when hasTodos is true', () => {
55
+ const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...defaultProps, hasTodos: true }), StreamingState.Responding);
56
+ const output = lastFrame();
57
+ expect(output).toContain('(esc to cancel · ctrl+y to show todos · 5s)');
52
58
  });
53
59
  it('should render spinner (static), phrase but no time/cancel when streamingState is WaitingForConfirmation', () => {
54
60
  const props = {
@@ -74,17 +80,19 @@ describe('<LoadingIndicator />', () => {
74
80
  const props = {
75
81
  currentLoadingPhrase: 'Working...',
76
82
  elapsedTime: 60,
83
+ hasTodos: true,
77
84
  };
78
85
  const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...props }), StreamingState.Responding);
79
- expect(lastFrame()).toContain('(esc to cancel, 1m)');
86
+ expect(lastFrame()).toContain('(esc to cancel · ctrl+y to show todos · 1m)');
80
87
  });
81
88
  it('should display the elapsedTime correctly in human-readable format', () => {
82
89
  const props = {
83
90
  currentLoadingPhrase: 'Working...',
84
91
  elapsedTime: 125,
92
+ hasTodos: true,
85
93
  };
86
94
  const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...props }), StreamingState.Responding);
87
- expect(lastFrame()).toContain('(esc to cancel, 2m 5s)');
95
+ expect(lastFrame()).toContain('(esc to cancel · ctrl+y to show todos · 2m 5s)');
88
96
  });
89
97
  it('should render rightContent when provided', () => {
90
98
  const rightContent = _jsx(Text, { children: "Extra Info" });
@@ -95,11 +103,11 @@ describe('<LoadingIndicator />', () => {
95
103
  const { lastFrame, rerender } = renderWithContext(_jsx(LoadingIndicator, { ...defaultProps }), StreamingState.Idle);
96
104
  expect(lastFrame()).toBe(''); // Initial: Idle
97
105
  // Transition to Responding
98
- rerender(_jsx(StreamingContext.Provider, { value: StreamingState.Responding, children: _jsx(LoadingIndicator, { currentLoadingPhrase: "Now Responding", elapsedTime: 2 }) }));
106
+ rerender(_jsx(StreamingContext.Provider, { value: StreamingState.Responding, children: _jsx(LoadingIndicator, { currentLoadingPhrase: "Now Responding", elapsedTime: 2, hasTodos: true }) }));
99
107
  let output = lastFrame();
100
108
  expect(output).toContain('MockRespondingSpinner');
101
109
  expect(output).toContain('Now Responding');
102
- expect(output).toContain('(esc to cancel, 2s)');
110
+ expect(output).toContain('(esc to cancel · ctrl+y to show todos · 2s)');
103
111
  // Transition to WaitingForConfirmation
104
112
  rerender(_jsx(StreamingContext.Provider, { value: StreamingState.WaitingForConfirmation, children: _jsx(LoadingIndicator, { currentLoadingPhrase: "Please Confirm", elapsedTime: 15 }) }));
105
113
  output = lastFrame();
@@ -158,7 +166,7 @@ describe('<LoadingIndicator />', () => {
158
166
  // Check for single line output
159
167
  expect(output?.includes('\n')).toBe(false);
160
168
  expect(output).toContain('Loading...');
161
- expect(output).toContain('(esc to cancel, 5s)');
169
+ expect(output).toContain('(esc to cancel · 5s)');
162
170
  expect(output).toContain('Right');
163
171
  });
164
172
  it('should render on multiple lines on a narrow terminal', () => {
@@ -172,19 +180,103 @@ describe('<LoadingIndicator />', () => {
172
180
  expect(lines).toHaveLength(3);
173
181
  if (lines) {
174
182
  expect(lines[0]).toContain('Loading...');
175
- expect(lines[0]).not.toContain('(esc to cancel, 5s)');
176
- expect(lines[1]).toContain('(esc to cancel, 5s)');
183
+ expect(lines[0]).not.toContain('(esc to cancel · 5s)');
184
+ expect(lines[1]).toContain('(esc to cancel · 5s)');
177
185
  expect(lines[2]).toContain('Right');
178
186
  }
179
187
  });
180
- it('should use wide layout at 80 columns', () => {
181
- const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...defaultProps }), StreamingState.Responding, 80);
182
- expect(lastFrame()?.includes('\n')).toBe(false);
183
- });
184
- it('should use narrow layout at 79 columns', () => {
185
- const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...defaultProps }), StreamingState.Responding, 79);
186
- expect(lastFrame()?.includes('\n')).toBe(true);
187
- });
188
+ });
189
+ it('should use wide layout at 80 columns', () => {
190
+ const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...defaultProps }), StreamingState.Responding, 80);
191
+ expect(lastFrame()?.includes('\n')).toBe(false);
192
+ });
193
+ it('should use narrow layout at 79 columns', () => {
194
+ const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...defaultProps }), StreamingState.Responding, 79);
195
+ expect(lastFrame()?.includes('\n')).toBe(true);
196
+ });
197
+ it('should display current todo when provided', () => {
198
+ const props = {
199
+ currentLoadingPhrase: 'Loading...',
200
+ currentTodo: 'Implementing feature X',
201
+ elapsedTime: 5,
202
+ };
203
+ const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...props }), StreamingState.Responding);
204
+ const output = lastFrame();
205
+ expect(output).toContain('Implementing feature X');
206
+ expect(output).not.toContain('Loading...');
207
+ });
208
+ it('should display token count when provided', () => {
209
+ const props = {
210
+ currentLoadingPhrase: 'Loading...',
211
+ tokenCount: 11234,
212
+ elapsedTime: 5,
213
+ hasTodos: true,
214
+ };
215
+ const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...props }), StreamingState.Responding);
216
+ const output = lastFrame();
217
+ expect(output).toContain('↓ 11.2k tokens');
218
+ });
219
+ it('should format token count correctly for small numbers', () => {
220
+ const props = {
221
+ currentLoadingPhrase: 'Loading...',
222
+ tokenCount: 500,
223
+ elapsedTime: 5,
224
+ };
225
+ const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...props }), StreamingState.Responding);
226
+ const output = lastFrame();
227
+ expect(output).toContain('↓ 500 tokens');
228
+ });
229
+ it('should prioritize thought over currentTodo over currentLoadingPhrase', () => {
230
+ const props = {
231
+ thought: {
232
+ subject: 'Thought subject',
233
+ description: 'Description',
234
+ },
235
+ currentTodo: 'Current todo',
236
+ currentLoadingPhrase: 'Loading phrase',
237
+ elapsedTime: 5,
238
+ };
239
+ const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...props }), StreamingState.Responding);
240
+ const output = lastFrame();
241
+ expect(output).toContain('Thought subject');
242
+ expect(output).not.toContain('Current todo');
243
+ expect(output).not.toContain('Loading phrase');
244
+ });
245
+ it('should prioritize currentTodo over currentLoadingPhrase when no thought', () => {
246
+ const props = {
247
+ currentTodo: 'Current todo',
248
+ currentLoadingPhrase: 'Loading phrase',
249
+ elapsedTime: 5,
250
+ };
251
+ const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...props }), StreamingState.Responding);
252
+ const output = lastFrame();
253
+ expect(output).toContain('Current todo');
254
+ expect(output).not.toContain('Loading phrase');
255
+ });
256
+ it('should display next todo when provided', () => {
257
+ const props = {
258
+ currentLoadingPhrase: 'Loading...',
259
+ currentTodo: 'Implementing feature X',
260
+ nextTodo: 'Write unit tests',
261
+ elapsedTime: 5,
262
+ hasTodos: true,
263
+ };
264
+ const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...props }), StreamingState.Responding);
265
+ const output = lastFrame();
266
+ expect(output).toContain('Implementing feature X');
267
+ expect(output).toContain('└ Next: Write unit tests');
268
+ });
269
+ it('should not display next todo line when nextTodo is not provided', () => {
270
+ const props = {
271
+ currentLoadingPhrase: 'Loading...',
272
+ currentTodo: 'Implementing feature X',
273
+ elapsedTime: 5,
274
+ hasTodos: true,
275
+ };
276
+ const { lastFrame } = renderWithContext(_jsx(LoadingIndicator, { ...props }), StreamingState.Responding);
277
+ const output = lastFrame();
278
+ expect(output).toContain('Implementing feature X');
279
+ expect(output).not.toContain('Next:');
188
280
  });
189
281
  });
190
282
  //# sourceMappingURL=LoadingIndicator.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoadingIndicator.test.js","sourceRoot":"","sources":["../../../../src/ui/components/LoadingIndicator.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LoadingIndicator.test.js","sourceRoot":"","sources":["../../../../src/ui/components/LoadingIndicator.test.tsx"],"names":[],"mappings":"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"}
@@ -10,5 +10,7 @@ export interface ModelSelectionDialogProps {
10
10
  currentModel: string;
11
11
  onSelect: (modelId: string) => void;
12
12
  onCancel: () => void;
13
+ /** Whether the dialog is in closing animation state */
14
+ isClosing?: boolean;
13
15
  }
14
16
  export declare const ModelSelectionDialog: React.FC<ModelSelectionDialogProps>;
@@ -1,15 +1,27 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
2
3
  import { Box, Text } from 'ink';
3
4
  import { Colors } from '../colors.js';
4
5
  import { RadioButtonSelect, } from './shared/RadioButtonSelect.js';
6
+ import { TextInput } from './shared/TextInput.js';
5
7
  import { useKeypress } from '../hooks/useKeypress.js';
6
- export const ModelSelectionDialog = ({ availableModels, currentModel, onSelect, onCancel, }) => {
8
+ export const ModelSelectionDialog = ({ availableModels, currentModel, onSelect, onCancel, isClosing = false, }) => {
9
+ const [modelSearch, setModelSearch] = useState('');
10
+ // Reset search when dialog is opened (when availableModels changes from empty to populated)
11
+ useEffect(() => {
12
+ if (availableModels.length > 0) {
13
+ setModelSearch('');
14
+ }
15
+ }, [availableModels.length]);
7
16
  useKeypress((key) => {
8
17
  if (key.name === 'escape') {
9
18
  onCancel();
10
19
  }
11
20
  }, { isActive: true });
12
- const options = availableModels.map((model) => {
21
+ // Filter models based on search
22
+ const filteredModels = availableModels.filter((model) => model.label.toLowerCase().includes(modelSearch.toLowerCase()) ||
23
+ model.id.toLowerCase().includes(modelSearch.toLowerCase()));
24
+ const options = filteredModels.map((model) => {
13
25
  const visionIndicator = model.isVision ? ' [Vision]' : '';
14
26
  const currentIndicator = model.id === currentModel ? ' (current)' : '';
15
27
  return {
@@ -17,10 +29,27 @@ export const ModelSelectionDialog = ({ availableModels, currentModel, onSelect,
17
29
  value: model.id,
18
30
  };
19
31
  });
20
- const initialIndex = Math.max(0, availableModels.findIndex((model) => model.id === currentModel));
32
+ const initialIndex = Math.max(0, filteredModels.findIndex((model) => model.id === currentModel));
21
33
  const handleSelect = (modelId) => {
22
34
  onSelect(modelId);
23
35
  };
24
- return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: Colors.AccentBlue, padding: 1, width: "100%", marginLeft: 1, children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Select Model" }), _jsx(Text, { children: "Choose a model for this session:" })] }), _jsx(Box, { marginBottom: 1, children: _jsx(RadioButtonSelect, { items: options, initialIndex: initialIndex, onSelect: handleSelect, isFocused: true }) }), _jsx(Box, { children: _jsx(Text, { color: Colors.Gray, children: "Press Enter to select, Esc to cancel" }) })] }));
36
+ const handleModelSearchSubmit = () => {
37
+ // Only submit if there are no filtered results (custom model entry)
38
+ // If there are filtered results, the RadioButtonSelect should handle selection
39
+ if (filteredModels.length > 0) {
40
+ return; // Don't submit, let RadioButtonSelect handle it
41
+ }
42
+ if (!modelSearch.trim()) {
43
+ return; // Don't submit empty search
44
+ }
45
+ // Allow custom model entry
46
+ onSelect(modelSearch.trim());
47
+ };
48
+ // Use dimmed colors when closing
49
+ const borderColor = isClosing ? Colors.Gray : Colors.AccentBlue;
50
+ const textColor = isClosing ? Colors.Gray : Colors.Foreground;
51
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: borderColor, padding: 1, width: "100%", marginLeft: 1, children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: !isClosing, color: textColor, children: "Select Model" }), _jsx(Text, { color: textColor, children: "Search for a model or enter a custom model name:" })] }), _jsx(Box, { marginBottom: 1, children: _jsx(TextInput, { value: modelSearch, onChange: setModelSearch, onSubmit: handleModelSearchSubmit, placeholder: "Search models or enter custom model name...", isActive: true }) }), filteredModels.length > 0 && (_jsx(Box, { marginBottom: 1, children: _jsx(RadioButtonSelect, { items: options, initialIndex: initialIndex, onSelect: handleSelect, isFocused: true, maxItemsToShow: 8, showScrollArrows: true, showNumbers: false }) })), modelSearch && filteredModels.length === 0 && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: Colors.Gray, children: ["No matching models. Press Enter to use ", modelSearch, " as custom model."] }) })), _jsx(Box, { children: _jsx(Text, { color: Colors.Gray, children: filteredModels.length > 0
52
+ ? 'Type to filter, use ↑↓ to navigate, Enter to select, Esc to cancel'
53
+ : 'Type model name and press Enter to use custom model, Esc to cancel' }) })] }));
25
54
  };
26
55
  //# sourceMappingURL=ModelSelectionDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelSelectionDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/ModelSelectionDialog.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,iBAAiB,GAElB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAUtD,MAAM,CAAC,MAAM,oBAAoB,GAAwC,CAAC,EACxE,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,QAAQ,GACT,EAAE,EAAE;IACH,WAAW,CACT,CAAC,GAAG,EAAE,EAAE;QACN,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB,CAAC;IAEF,MAAM,OAAO,GAAmC,eAAe,CAAC,GAAG,CACjE,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,MAAM,gBAAgB,GAAG,KAAK,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO;YACL,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,eAAe,GAAG,gBAAgB,EAAE;YAC5D,KAAK,EAAE,KAAK,CAAC,EAAE;SAChB,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,CAAC,EACD,eAAe,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,YAAY,CAAC,CAChE,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,EAAE;QACvC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,MAAM,CAAC,UAAU,EAC9B,OAAO,EAAE,CAAC,EACV,KAAK,EAAC,MAAM,EACZ,UAAU,EAAE,CAAC,aAEb,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACzC,KAAC,IAAI,IAAC,IAAI,mCAAoB,EAC9B,KAAC,IAAI,mDAAwC,IACzC,EAEN,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,iBAAiB,IAChB,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,YAAY,EACtB,SAAS,SACT,GACE,EAEN,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,qDAA6C,GACjE,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"ModelSelectionDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/ModelSelectionDialog.tsx"],"names":[],"mappings":"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"}
@@ -18,6 +18,11 @@ const mockRadioButtonSelect = vi.hoisted(() => vi.fn());
18
18
  vi.mock('./shared/RadioButtonSelect.js', () => ({
19
19
  RadioButtonSelect: mockRadioButtonSelect,
20
20
  }));
21
+ // Mock the TextInput component
22
+ const mockTextInput = vi.hoisted(() => vi.fn());
23
+ vi.mock('./shared/TextInput.js', () => ({
24
+ TextInput: mockTextInput,
25
+ }));
21
26
  describe('ModelSelectionDialog', () => {
22
27
  const mockAvailableModels = [
23
28
  { id: 'blackbox3-coder-plus', label: 'blackbox3-coder-plus' },
@@ -30,6 +35,8 @@ describe('ModelSelectionDialog', () => {
30
35
  vi.clearAllMocks();
31
36
  // Mock RadioButtonSelect to return a simple div
32
37
  mockRadioButtonSelect.mockReturnValue(React.createElement('div', { 'data-testid': 'radio-select' }));
38
+ // Mock TextInput to return a simple div
39
+ mockTextInput.mockReturnValue(React.createElement('div', { 'data-testid': 'text-input' }));
33
40
  });
34
41
  it('should setup escape key handler to call onCancel', () => {
35
42
  render(_jsx(ModelSelectionDialog, { availableModels: mockAvailableModels, currentModel: "blackbox3-coder-plus", onSelect: mockOnSelect, onCancel: mockOnCancel }));
@@ -47,6 +54,13 @@ describe('ModelSelectionDialog', () => {
47
54
  keypressHandler({ name: 'enter' });
48
55
  expect(mockOnCancel).not.toHaveBeenCalled();
49
56
  });
57
+ it('should render TextInput component for search', () => {
58
+ render(_jsx(ModelSelectionDialog, { availableModels: mockAvailableModels, currentModel: "blackbox3-coder-plus", onSelect: mockOnSelect, onCancel: mockOnCancel }));
59
+ expect(mockTextInput).toHaveBeenCalled();
60
+ const textInputProps = mockTextInput.mock.calls[0][0];
61
+ expect(textInputProps.placeholder).toBe('Search models or enter custom model name...');
62
+ expect(textInputProps.isActive).toBe(true);
63
+ });
50
64
  it('should set correct initial index for current model', () => {
51
65
  render(_jsx(ModelSelectionDialog, { availableModels: mockAvailableModels, currentModel: "blackbox-vl-max-latest", onSelect: mockOnSelect, onCancel: mockOnCancel }));
52
66
  const callArgs = mockRadioButtonSelect.mock.calls[0][0];
@@ -68,9 +82,8 @@ describe('ModelSelectionDialog', () => {
68
82
  });
69
83
  it('should handle empty models array', () => {
70
84
  render(_jsx(ModelSelectionDialog, { availableModels: [], currentModel: "", onSelect: mockOnSelect, onCancel: mockOnCancel }));
71
- const callArgs = mockRadioButtonSelect.mock.calls[0][0];
72
- expect(callArgs.items).toEqual([]);
73
- expect(callArgs.initialIndex).toBe(0);
85
+ // RadioButtonSelect should not be rendered when there are no models
86
+ expect(mockRadioButtonSelect).not.toHaveBeenCalled();
74
87
  });
75
88
  it('should create correct option items with proper labels', () => {
76
89
  render(_jsx(ModelSelectionDialog, { availableModels: mockAvailableModels, currentModel: "blackbox3-coder-plus", onSelect: mockOnSelect, onCancel: mockOnCancel }));
@@ -103,10 +116,12 @@ describe('ModelSelectionDialog', () => {
103
116
  const currentModelItem = callArgs.items.find((item) => item.value === 'blackbox-vl-max-latest');
104
117
  expect(currentModelItem?.label).toContain('(current)');
105
118
  });
106
- it('should pass isFocused prop to RadioButtonSelect', () => {
119
+ it('should pass isFocused, maxItemsToShow, and showScrollArrows props to RadioButtonSelect', () => {
107
120
  render(_jsx(ModelSelectionDialog, { availableModels: mockAvailableModels, currentModel: "blackbox3-coder-plus", onSelect: mockOnSelect, onCancel: mockOnCancel }));
108
121
  const callArgs = mockRadioButtonSelect.mock.calls[0][0];
109
122
  expect(callArgs.isFocused).toBe(true);
123
+ expect(callArgs.maxItemsToShow).toBe(8);
124
+ expect(callArgs.showScrollArrows).toBe(true);
110
125
  });
111
126
  it('should handle multiple onSelect calls correctly', () => {
112
127
  render(_jsx(ModelSelectionDialog, { availableModels: mockAvailableModels, currentModel: "blackbox3-coder-plus", onSelect: mockOnSelect, onCancel: mockOnCancel }));
@@ -120,5 +135,27 @@ describe('ModelSelectionDialog', () => {
120
135
  expect(mockOnSelect).toHaveBeenNthCalledWith(2, 'blackbox-vl-max-latest');
121
136
  expect(mockOnSelect).toHaveBeenNthCalledWith(3, 'gpt-4');
122
137
  });
138
+ it('should filter models based on search input', () => {
139
+ const { rerender } = render(_jsx(ModelSelectionDialog, { availableModels: mockAvailableModels, currentModel: "blackbox3-coder-plus", onSelect: mockOnSelect, onCancel: mockOnCancel }));
140
+ // Get the onChange handler from TextInput
141
+ const textInputProps = mockTextInput.mock.calls[0][0];
142
+ const onChangeHandler = textInputProps.onChange;
143
+ // Simulate typing "gpt" in the search box
144
+ onChangeHandler('gpt');
145
+ // Re-render to trigger the filter
146
+ rerender(_jsx(ModelSelectionDialog, { availableModels: mockAvailableModels, currentModel: "blackbox3-coder-plus", onSelect: mockOnSelect, onCancel: mockOnCancel }));
147
+ // The RadioButtonSelect should now only show filtered items
148
+ // Note: In the actual implementation, the filter happens in the component
149
+ // This test verifies the structure is correct
150
+ expect(mockRadioButtonSelect).toHaveBeenCalled();
151
+ });
152
+ it('should allow custom model entry when search has no results', () => {
153
+ render(_jsx(ModelSelectionDialog, { availableModels: mockAvailableModels, currentModel: "blackbox3-coder-plus", onSelect: mockOnSelect, onCancel: mockOnCancel }));
154
+ // Get the onSubmit handler from TextInput
155
+ const textInputProps = mockTextInput.mock.calls[0][0];
156
+ const onSubmitHandler = textInputProps.onSubmit;
157
+ // The onSubmit handler should be defined
158
+ expect(typeof onSubmitHandler).toBe('function');
159
+ });
123
160
  });
124
161
  //# sourceMappingURL=ModelSelectionDialog.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelSelectionDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ModelSelectionDialog.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ModelSelectionDialog.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ModelSelectionDialog.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type React from 'react';
7
+ interface ReleaseVersion {
8
+ version: string;
9
+ publishedAt: string;
10
+ isLatest: boolean;
11
+ briefNotes: string;
12
+ detailedChanges: string[];
13
+ }
14
+ interface ReleaseNotesDialogProps {
15
+ versions: ReleaseVersion[];
16
+ onClose: () => void;
17
+ availableTerminalHeight?: number;
18
+ terminalWidth?: number;
19
+ isClosing?: boolean;
20
+ isLoading?: boolean;
21
+ }
22
+ export declare function ReleaseNotesDialog({ versions, onClose, availableTerminalHeight: rawAvailableTerminalHeight, terminalWidth: _terminalWidth, isClosing, isLoading, }: ReleaseNotesDialogProps): React.JSX.Element;
23
+ export {};
@@ -0,0 +1,150 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useState, useMemo } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import Spinner from 'ink-spinner';
5
+ import { Colors } from '../colors.js';
6
+ import { RadioButtonSelect } from './shared/RadioButtonSelect.js';
7
+ import { useKeypress } from '../hooks/useKeypress.js';
8
+ export function ReleaseNotesDialog({ versions, onClose, availableTerminalHeight: rawAvailableTerminalHeight, terminalWidth: _terminalWidth, isClosing = false, isLoading = false, }) {
9
+ // Track the currently highlighted version
10
+ const [highlightedVersionIndex, setHighlightedVersionIndex] = useState(0);
11
+ // Track which pane has focus: 'versions' or 'details'
12
+ const [focusedPane, setFocusedPane] = useState('versions');
13
+ // Track scroll position in details pane
14
+ const [detailsScrollOffset, setDetailsScrollOffset] = useState(0);
15
+ // Get the currently highlighted version - MUST be defined before useKeypress
16
+ const highlightedVersion = versions[highlightedVersionIndex];
17
+ // Generate version items for the selector
18
+ const versionItems = versions.map((version) => ({
19
+ label: `${version.isLatest ? '● ' : '○ '}${version.version}${version.isLatest ? ' (Latest)' : ''}`,
20
+ value: version.version,
21
+ }));
22
+ const handleVersionHighlight = (versionValue) => {
23
+ const index = versions.findIndex((v) => v.version === versionValue);
24
+ if (index >= 0) {
25
+ setHighlightedVersionIndex(index);
26
+ // Reset scroll when changing versions
27
+ setDetailsScrollOffset(0);
28
+ }
29
+ };
30
+ const handleVersionSelect = useCallback(() => {
31
+ // Just close the dialog on selection
32
+ onClose();
33
+ }, [onClose]);
34
+ // Constants for layout calculations
35
+ const TAB_TO_SELECT_HEIGHT = 2;
36
+ const PREVIEW_PANE_FIXED_VERTICAL_SPACE = 6; // Title, borders, margins
37
+ const SCROLL_INDICATOR_LINES = 2; // Space for up/down scroll indicators
38
+ // Calculate available height consistently
39
+ const availableTerminalHeight = useMemo(() => ((rawAvailableTerminalHeight ?? Number.MAX_SAFE_INTEGER) - 2 - TAB_TO_SELECT_HEIGHT), [rawAvailableTerminalHeight]);
40
+ const includePadding = availableTerminalHeight > 20;
41
+ const isCompactMode = availableTerminalHeight < 20;
42
+ // Calculate available height for the details pane content
43
+ const availableHeightForDetails = useMemo(() => Math.max(5, // Minimum height to show at least some content
44
+ availableTerminalHeight -
45
+ PREVIEW_PANE_FIXED_VERTICAL_SPACE -
46
+ (includePadding ? 2 : 0) * 2), [availableTerminalHeight, includePadding]);
47
+ // Calculate max visible lines (accounting for scroll indicators)
48
+ const maxVisibleLines = useMemo(() => Math.max(3, availableHeightForDetails - SCROLL_INDICATOR_LINES), [availableHeightForDetails]);
49
+ // Build the details content as an array of lines
50
+ const detailsLines = useMemo(() => {
51
+ if (!highlightedVersion)
52
+ return [];
53
+ const lines = [];
54
+ // Version header
55
+ lines.push(`Version ${highlightedVersion.version}${highlightedVersion.isLatest ? ' (Latest)' : ''}`);
56
+ lines.push(''); // Empty line
57
+ // Publication date
58
+ lines.push(`Released: ${new Date(highlightedVersion.publishedAt).toLocaleDateString('en-US', {
59
+ year: 'numeric',
60
+ month: 'long',
61
+ day: 'numeric',
62
+ })}`);
63
+ lines.push(''); // Empty line
64
+ // Brief notes - split long lines
65
+ if (highlightedVersion.briefNotes) {
66
+ const briefLines = highlightedVersion.briefNotes.split('\n');
67
+ lines.push(...briefLines);
68
+ lines.push(''); // Empty line
69
+ }
70
+ // Detailed changes - split long lines
71
+ if (highlightedVersion.detailedChanges.length > 0) {
72
+ lines.push('Changes:');
73
+ for (const change of highlightedVersion.detailedChanges) {
74
+ // Split long change descriptions into multiple lines if needed
75
+ const changeLines = change.split('\n');
76
+ for (const changeLine of changeLines) {
77
+ lines.push(` • ${changeLine}`);
78
+ }
79
+ }
80
+ }
81
+ else {
82
+ lines.push('No detailed changelog available for this version.');
83
+ }
84
+ return lines;
85
+ }, [highlightedVersion]);
86
+ // Calculate max scroll offset based on actual content
87
+ const maxScrollOffset = useMemo(() => Math.max(0, detailsLines.length - maxVisibleLines), [detailsLines.length, maxVisibleLines]);
88
+ // Clamp scroll offset to valid range
89
+ const clampedScrollOffset = useMemo(() => Math.min(detailsScrollOffset, maxScrollOffset), [detailsScrollOffset, maxScrollOffset]);
90
+ // Calculate if we can scroll
91
+ const canScrollUp = clampedScrollOffset > 0;
92
+ const canScrollDown = clampedScrollOffset < maxScrollOffset;
93
+ // Handle keypress for scrolling - uses detailsLines.length for accurate bounds
94
+ useKeypress(useCallback((key) => {
95
+ if (key.name === 'escape' || key.name === 'q') {
96
+ onClose();
97
+ }
98
+ else if (key.name === 'tab') {
99
+ // Toggle focus between panes
100
+ setFocusedPane(prev => prev === 'versions' ? 'details' : 'versions');
101
+ }
102
+ else if (focusedPane === 'details') {
103
+ // Handle scrolling in details pane using actual content length
104
+ if (key.name === 'up' || key.name === 'k') {
105
+ setDetailsScrollOffset(prev => Math.max(0, prev - 1));
106
+ }
107
+ else if (key.name === 'down' || key.name === 'j') {
108
+ setDetailsScrollOffset(prev => Math.min(maxScrollOffset, prev + 1));
109
+ }
110
+ else if (key.name === 'pageup') {
111
+ setDetailsScrollOffset(prev => Math.max(0, prev - 10));
112
+ }
113
+ else if (key.name === 'pagedown') {
114
+ setDetailsScrollOffset(prev => Math.min(maxScrollOffset, prev + 10));
115
+ }
116
+ }
117
+ }, [onClose, focusedPane, maxScrollOffset]), { isActive: true });
118
+ // Calculate visible lines based on scroll offset
119
+ const visibleDetailsLines = useMemo(() => detailsLines.slice(clampedScrollOffset, clampedScrollOffset + maxVisibleLines), [detailsLines, clampedScrollOffset, maxVisibleLines]);
120
+ // Use dimmed colors when closing
121
+ const borderColor = isClosing ? Colors.Gray : Colors.Gray;
122
+ const textColor = isClosing ? Colors.Gray : Colors.Foreground;
123
+ return (_jsxs(Box, { borderStyle: "round", borderColor: borderColor, flexDirection: "column", paddingTop: includePadding ? 1 : 0, paddingBottom: includePadding ? 1 : 0, paddingLeft: 1, paddingRight: 1, width: "100%", children: [isLoading ? (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", paddingY: 2, children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: Colors.AccentCyan, children: [_jsx(Spinner, { type: "dots" }), ' ', "Loading release notes..."] }) }), _jsx(Text, { color: Colors.Gray, children: "Fetching data from API and parsing CHANGELOG" })] })) : (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Box, { flexDirection: "column", width: isCompactMode ? "35%" : "40%", paddingRight: isCompactMode ? 1 : 2, children: [_jsxs(Text, { bold: !isClosing, wrap: "truncate", color: textColor, children: [focusedPane === 'versions' ? '> ' : ' ', "Select Version"] }), _jsx(RadioButtonSelect, { items: versionItems, initialIndex: 0, onSelect: handleVersionSelect, onHighlight: handleVersionHighlight, isFocused: focusedPane === 'versions', maxItemsToShow: Math.min(versions.length, 15), showScrollArrows: versions.length > 15, showNumbers: true, isDimmed: focusedPane !== 'versions' })] }), _jsxs(Box, { flexDirection: "column", width: isCompactMode ? "65%" : "60%", paddingLeft: isCompactMode ? 1 : 2, children: [_jsxs(Text, { bold: !isClosing, color: textColor, wrap: "truncate", children: [focusedPane === 'details' ? '> ' : ' ', "Release Details"] }), _jsx(Box, { borderStyle: "single", borderColor: focusedPane === 'details' ? Colors.AccentCyan : Colors.Gray, paddingTop: includePadding ? 1 : 0, paddingBottom: includePadding ? 1 : 0, paddingLeft: 1, paddingRight: 1, flexDirection: "column", height: availableHeightForDetails, overflow: "hidden", children: highlightedVersion && (_jsxs(Box, { flexDirection: "column", height: "100%", children: [_jsx(Box, { height: 1, flexShrink: 0, children: canScrollUp ? (_jsxs(Text, { color: focusedPane === 'details' ? Colors.AccentCyan : Colors.Gray, wrap: "truncate", children: ["\u25B2 More above ", focusedPane === 'details' ? '(↑/k to scroll)' : '(Tab to scroll)'] })) : (_jsx(Text, { children: " " })) }), _jsx(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden", children: visibleDetailsLines.map((line, idx) => {
124
+ let color = Colors.Foreground;
125
+ let bold = false;
126
+ // Style based on content
127
+ if (line.startsWith('Version ')) {
128
+ color = highlightedVersion.isLatest ? Colors.AccentGreen : Colors.AccentCyan;
129
+ bold = true;
130
+ }
131
+ else if (line.startsWith('Released:')) {
132
+ color = Colors.Gray;
133
+ }
134
+ else if (line === 'Changes:') {
135
+ color = Colors.AccentBlue;
136
+ bold = true;
137
+ }
138
+ else if (line.startsWith(' •')) {
139
+ color = Colors.Foreground;
140
+ }
141
+ else if (line.includes('No detailed changelog')) {
142
+ color = Colors.Gray;
143
+ }
144
+ else if (line.trim() !== '') {
145
+ color = Colors.LightBlue;
146
+ }
147
+ return (_jsx(Box, { height: 1, flexShrink: 0, children: _jsx(Text, { color: color, bold: bold, wrap: "truncate", children: line || ' ' }) }, idx));
148
+ }) }), _jsx(Box, { height: 1, flexShrink: 0, children: canScrollDown ? (_jsxs(Text, { color: focusedPane === 'details' ? Colors.AccentCyan : Colors.Gray, wrap: "truncate", children: ["\u25BC More below ", focusedPane === 'details' ? '(↓/j to scroll)' : '(Tab to scroll)'] })) : (_jsx(Text, { children: " " })) })] })) })] })] })), !isLoading && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, wrap: "wrap", children: "(Tab to switch panes, \u2191\u2193/j/k to navigate/scroll, Enter to close, Esc/Q to exit)" }) }))] }));
149
+ }
150
+ //# sourceMappingURL=ReleaseNotesDialog.js.map