@google/gemini-cli 0.30.1 → 0.31.0-preview.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 (727) hide show
  1. package/README.md +1 -1
  2. package/dist/google-gemini-cli-0.31.0-preview.0.tgz +0 -0
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +15 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/package.json +7 -6
  7. package/dist/src/commands/extensions/install.js +72 -4
  8. package/dist/src/commands/extensions/install.js.map +1 -1
  9. package/dist/src/commands/extensions/install.test.js +153 -20
  10. package/dist/src/commands/extensions/install.test.js.map +1 -1
  11. package/dist/src/commands/extensions/utils.js +1 -0
  12. package/dist/src/commands/extensions/utils.js.map +1 -1
  13. package/dist/src/config/config.js +17 -5
  14. package/dist/src/config/config.js.map +1 -1
  15. package/dist/src/config/config.test.js +79 -4
  16. package/dist/src/config/config.test.js.map +1 -1
  17. package/dist/src/config/extension-manager-hydration.test.js +2 -2
  18. package/dist/src/config/extension-manager-hydration.test.js.map +1 -1
  19. package/dist/src/config/extension-manager.js +10 -6
  20. package/dist/src/config/extension-manager.js.map +1 -1
  21. package/dist/src/config/extension.test.js +20 -20
  22. package/dist/src/config/extension.test.js.map +1 -1
  23. package/dist/src/config/extensionRegistryClient.js +3 -2
  24. package/dist/src/config/extensionRegistryClient.js.map +1 -1
  25. package/dist/src/config/extensionRegistryClient.test.js +52 -0
  26. package/dist/src/config/extensionRegistryClient.test.js.map +1 -1
  27. package/dist/src/config/extensions/consent.d.ts +10 -0
  28. package/dist/src/config/extensions/consent.js +10 -3
  29. package/dist/src/config/extensions/consent.js.map +1 -1
  30. package/dist/src/config/extensions/consent.test.js +1 -1
  31. package/dist/src/config/extensions/consent.test.js.map +1 -1
  32. package/dist/src/config/extensions/extensionEnablement.js +1 -0
  33. package/dist/src/config/extensions/extensionEnablement.js.map +1 -1
  34. package/dist/src/config/extensions/extensionSettings.js +20 -3
  35. package/dist/src/config/extensions/extensionSettings.js.map +1 -1
  36. package/dist/src/config/extensions/extensionSettings.test.js +16 -0
  37. package/dist/src/config/extensions/extensionSettings.test.js.map +1 -1
  38. package/dist/src/config/extensions/github.test.js +1 -1
  39. package/dist/src/config/extensions/github.test.js.map +1 -1
  40. package/dist/src/config/extensions/variables.js +3 -1
  41. package/dist/src/config/extensions/variables.js.map +1 -1
  42. package/dist/src/config/keyBindings.js +6 -2
  43. package/dist/src/config/keyBindings.js.map +1 -1
  44. package/dist/src/config/policy-engine.integration.test.js +51 -13
  45. package/dist/src/config/policy-engine.integration.test.js.map +1 -1
  46. package/dist/src/config/policy.d.ts +15 -3
  47. package/dist/src/config/policy.js +49 -4
  48. package/dist/src/config/policy.js.map +1 -1
  49. package/dist/src/config/policy.test.d.ts +6 -0
  50. package/dist/src/config/policy.test.js +152 -0
  51. package/dist/src/config/policy.test.js.map +1 -0
  52. package/dist/src/config/settings-validation.js +1 -1
  53. package/dist/src/config/settings-validation.js.map +1 -1
  54. package/dist/src/config/settings-validation.test.js +2 -3
  55. package/dist/src/config/settings-validation.test.js.map +1 -1
  56. package/dist/src/config/settings.d.ts +2 -0
  57. package/dist/src/config/settings.js +18 -20
  58. package/dist/src/config/settings.js.map +1 -1
  59. package/dist/src/config/settings.test.js +118 -18
  60. package/dist/src/config/settings.test.js.map +1 -1
  61. package/dist/src/config/settingsSchema.d.ts +171 -9
  62. package/dist/src/config/settingsSchema.js +159 -9
  63. package/dist/src/config/settingsSchema.js.map +1 -1
  64. package/dist/src/config/settingsSchema.test.js +26 -0
  65. package/dist/src/config/settingsSchema.test.js.map +1 -1
  66. package/dist/src/config/settings_repro.test.js +0 -1
  67. package/dist/src/config/settings_repro.test.js.map +1 -1
  68. package/dist/src/config/trustedFolders.test.js +3 -1
  69. package/dist/src/config/trustedFolders.test.js.map +1 -1
  70. package/dist/src/config/workspace-policy-cli.test.d.ts +6 -0
  71. package/dist/src/config/workspace-policy-cli.test.js +180 -0
  72. package/dist/src/config/workspace-policy-cli.test.js.map +1 -0
  73. package/dist/src/gemini.d.ts +2 -2
  74. package/dist/src/gemini.js +15 -5
  75. package/dist/src/gemini.js.map +1 -1
  76. package/dist/src/gemini.test.js +18 -2
  77. package/dist/src/gemini.test.js.map +1 -1
  78. package/dist/src/gemini_cleanup.test.js +27 -24
  79. package/dist/src/gemini_cleanup.test.js.map +1 -1
  80. package/dist/src/generated/git-commit.d.ts +2 -2
  81. package/dist/src/generated/git-commit.js +2 -2
  82. package/dist/src/generated/git-commit.js.map +1 -1
  83. package/dist/src/integration-tests/modelSteering.test.d.ts +6 -0
  84. package/dist/src/integration-tests/modelSteering.test.js +65 -0
  85. package/dist/src/integration-tests/modelSteering.test.js.map +1 -0
  86. package/dist/src/nonInteractiveCli.js +2 -3
  87. package/dist/src/nonInteractiveCli.js.map +1 -1
  88. package/dist/src/test-utils/AppRig.d.ts +1 -1
  89. package/dist/src/test-utils/AppRig.js +16 -7
  90. package/dist/src/test-utils/AppRig.js.map +1 -1
  91. package/dist/src/test-utils/AppRig.test.js +37 -2
  92. package/dist/src/test-utils/AppRig.test.js.map +1 -1
  93. package/dist/src/test-utils/async.d.ts +1 -1
  94. package/dist/src/test-utils/async.js +1 -1
  95. package/dist/src/test-utils/async.js.map +1 -1
  96. package/dist/src/test-utils/customMatchers.js +1 -1
  97. package/dist/src/test-utils/customMatchers.js.map +1 -1
  98. package/dist/src/test-utils/mockCommandContext.js +8 -2
  99. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  100. package/dist/src/test-utils/mockConfig.js +2 -1
  101. package/dist/src/test-utils/mockConfig.js.map +1 -1
  102. package/dist/src/test-utils/render.d.ts +81 -5
  103. package/dist/src/test-utils/render.js +299 -29
  104. package/dist/src/test-utils/render.js.map +1 -1
  105. package/dist/src/test-utils/render.test.js +49 -23
  106. package/dist/src/test-utils/render.test.js.map +1 -1
  107. package/dist/src/test-utils/settings.js +4 -2
  108. package/dist/src/test-utils/settings.js.map +1 -1
  109. package/dist/src/ui/App.test.js +56 -24
  110. package/dist/src/ui/App.test.js.map +1 -1
  111. package/dist/src/ui/AppContainer.d.ts +2 -2
  112. package/dist/src/ui/AppContainer.js +231 -11
  113. package/dist/src/ui/AppContainer.js.map +1 -1
  114. package/dist/src/ui/AppContainer.test.js +561 -7
  115. package/dist/src/ui/AppContainer.test.js.map +1 -1
  116. package/dist/src/ui/IdeIntegrationNudge.test.js +29 -33
  117. package/dist/src/ui/IdeIntegrationNudge.test.js.map +1 -1
  118. package/dist/src/ui/auth/ApiAuthDialog.test.js +19 -9
  119. package/dist/src/ui/auth/ApiAuthDialog.test.js.map +1 -1
  120. package/dist/src/ui/auth/AuthDialog.js +1 -1
  121. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  122. package/dist/src/ui/auth/AuthDialog.test.js +61 -27
  123. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
  124. package/dist/src/ui/auth/AuthInProgress.test.js +35 -14
  125. package/dist/src/ui/auth/AuthInProgress.test.js.map +1 -1
  126. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js +11 -5
  127. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js.map +1 -1
  128. package/dist/src/ui/colors.js +6 -0
  129. package/dist/src/ui/colors.js.map +1 -1
  130. package/dist/src/ui/commands/clearCommand.js +2 -0
  131. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  132. package/dist/src/ui/commands/clearCommand.test.js +7 -1
  133. package/dist/src/ui/commands/clearCommand.test.js.map +1 -1
  134. package/dist/src/ui/commands/copyCommand.js +2 -1
  135. package/dist/src/ui/commands/copyCommand.js.map +1 -1
  136. package/dist/src/ui/commands/copyCommand.test.js +6 -4
  137. package/dist/src/ui/commands/copyCommand.test.js.map +1 -1
  138. package/dist/src/ui/commands/extensionsCommand.js +18 -0
  139. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  140. package/dist/src/ui/commands/extensionsCommand.test.js +4 -4
  141. package/dist/src/ui/commands/extensionsCommand.test.js.map +1 -1
  142. package/dist/src/ui/commands/planCommand.js +1 -1
  143. package/dist/src/ui/commands/planCommand.js.map +1 -1
  144. package/dist/src/ui/commands/planCommand.test.js +1 -1
  145. package/dist/src/ui/commands/planCommand.test.js.map +1 -1
  146. package/dist/src/ui/commands/policiesCommand.js +5 -0
  147. package/dist/src/ui/commands/policiesCommand.js.map +1 -1
  148. package/dist/src/ui/commands/policiesCommand.test.js +38 -1
  149. package/dist/src/ui/commands/policiesCommand.test.js.map +1 -1
  150. package/dist/src/ui/commands/rewindCommand.js +3 -2
  151. package/dist/src/ui/commands/rewindCommand.js.map +1 -1
  152. package/dist/src/ui/components/AboutBox.test.js +16 -8
  153. package/dist/src/ui/components/AboutBox.test.js.map +1 -1
  154. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js +7 -4
  155. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js.map +1 -1
  156. package/dist/src/ui/components/AgentConfigDialog.test.js +41 -19
  157. package/dist/src/ui/components/AgentConfigDialog.test.js.map +1 -1
  158. package/dist/src/ui/components/AlternateBufferQuittingDisplay.js +1 -1
  159. package/dist/src/ui/components/AlternateBufferQuittingDisplay.js.map +1 -1
  160. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js +24 -12
  161. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js.map +1 -1
  162. package/dist/src/ui/components/AnsiOutput.test.js +35 -19
  163. package/dist/src/ui/components/AnsiOutput.test.js.map +1 -1
  164. package/dist/src/ui/components/AppHeader.test.js +27 -17
  165. package/dist/src/ui/components/AppHeader.test.js.map +1 -1
  166. package/dist/src/ui/components/ApprovalModeIndicator.test.js +18 -12
  167. package/dist/src/ui/components/ApprovalModeIndicator.test.js.map +1 -1
  168. package/dist/src/ui/components/AskUserDialog.test.js +147 -85
  169. package/dist/src/ui/components/AskUserDialog.test.js.map +1 -1
  170. package/dist/src/ui/components/BackgroundShellDisplay.test.js +50 -48
  171. package/dist/src/ui/components/BackgroundShellDisplay.test.js.map +1 -1
  172. package/dist/src/ui/components/Banner.test.js +8 -4
  173. package/dist/src/ui/components/Banner.test.js.map +1 -1
  174. package/dist/src/ui/components/Checklist.test.js +17 -12
  175. package/dist/src/ui/components/Checklist.test.js.map +1 -1
  176. package/dist/src/ui/components/ChecklistItem.test.js +9 -6
  177. package/dist/src/ui/components/ChecklistItem.test.js.map +1 -1
  178. package/dist/src/ui/components/CliSpinner.test.js +8 -5
  179. package/dist/src/ui/components/CliSpinner.test.js.map +1 -1
  180. package/dist/src/ui/components/Composer.js +5 -5
  181. package/dist/src/ui/components/Composer.js.map +1 -1
  182. package/dist/src/ui/components/Composer.test.js +104 -100
  183. package/dist/src/ui/components/Composer.test.js.map +1 -1
  184. package/dist/src/ui/components/ConfigInitDisplay.test.js +3 -2
  185. package/dist/src/ui/components/ConfigInitDisplay.test.js.map +1 -1
  186. package/dist/src/ui/components/ConsentPrompt.test.js +15 -8
  187. package/dist/src/ui/components/ConsentPrompt.test.js.map +1 -1
  188. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js +9 -5
  189. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js.map +1 -1
  190. package/dist/src/ui/components/ContextSummaryDisplay.test.js +16 -14
  191. package/dist/src/ui/components/ContextSummaryDisplay.test.js.map +1 -1
  192. package/dist/src/ui/components/ContextUsageDisplay.test.js +12 -6
  193. package/dist/src/ui/components/ContextUsageDisplay.test.js.map +1 -1
  194. package/dist/src/ui/components/CopyModeWarning.test.js +9 -5
  195. package/dist/src/ui/components/CopyModeWarning.test.js.map +1 -1
  196. package/dist/src/ui/components/DebugProfiler.test.js +17 -14
  197. package/dist/src/ui/components/DebugProfiler.test.js.map +1 -1
  198. package/dist/src/ui/components/DetailedMessagesDisplay.test.js +13 -7
  199. package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +1 -1
  200. package/dist/src/ui/components/DialogManager.js +5 -1
  201. package/dist/src/ui/components/DialogManager.js.map +1 -1
  202. package/dist/src/ui/components/DialogManager.test.js +9 -5
  203. package/dist/src/ui/components/DialogManager.test.js.map +1 -1
  204. package/dist/src/ui/components/EditorSettingsDialog.test.js +16 -8
  205. package/dist/src/ui/components/EditorSettingsDialog.test.js.map +1 -1
  206. package/dist/src/ui/components/ExitPlanModeDialog.js +2 -2
  207. package/dist/src/ui/components/ExitPlanModeDialog.js.map +1 -1
  208. package/dist/src/ui/components/ExitPlanModeDialog.test.js +2 -2
  209. package/dist/src/ui/components/ExitPlanModeDialog.test.js.map +1 -1
  210. package/dist/src/ui/components/ExitWarning.test.js +18 -10
  211. package/dist/src/ui/components/ExitWarning.test.js.map +1 -1
  212. package/dist/src/ui/components/FolderTrustDialog.d.ts +2 -0
  213. package/dist/src/ui/components/FolderTrustDialog.js +49 -3
  214. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
  215. package/dist/src/ui/components/FolderTrustDialog.test.js +249 -18
  216. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  217. package/dist/src/ui/components/Footer.test.js +101 -50
  218. package/dist/src/ui/components/Footer.test.js.map +1 -1
  219. package/dist/src/ui/components/GeminiRespondingSpinner.test.js +23 -13
  220. package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +1 -1
  221. package/dist/src/ui/components/GradientRegression.test.js +20 -10
  222. package/dist/src/ui/components/GradientRegression.test.js.map +1 -1
  223. package/dist/src/ui/components/Header.test.js +2 -0
  224. package/dist/src/ui/components/Header.test.js.map +1 -1
  225. package/dist/src/ui/components/Help.test.js +9 -6
  226. package/dist/src/ui/components/Help.test.js.map +1 -1
  227. package/dist/src/ui/components/HistoryItemDisplay.d.ts +1 -2
  228. package/dist/src/ui/components/HistoryItemDisplay.js +4 -3
  229. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  230. package/dist/src/ui/components/HistoryItemDisplay.test.js +80 -35
  231. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
  232. package/dist/src/ui/components/HookStatusDisplay.test.js +13 -9
  233. package/dist/src/ui/components/HookStatusDisplay.test.js.map +1 -1
  234. package/dist/src/ui/components/IdeTrustChangeDialog.test.js +36 -16
  235. package/dist/src/ui/components/IdeTrustChangeDialog.test.js.map +1 -1
  236. package/dist/src/ui/components/InputPrompt.js +10 -12
  237. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  238. package/dist/src/ui/components/InputPrompt.test.js +127 -13
  239. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  240. package/dist/src/ui/components/LoadingIndicator.test.js +97 -47
  241. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -1
  242. package/dist/src/ui/components/LogoutConfirmationDialog.test.js +25 -9
  243. package/dist/src/ui/components/LogoutConfirmationDialog.test.js.map +1 -1
  244. package/dist/src/ui/components/LoopDetectionConfirmation.test.js +9 -5
  245. package/dist/src/ui/components/LoopDetectionConfirmation.test.js.map +1 -1
  246. package/dist/src/ui/components/MainContent.js +35 -14
  247. package/dist/src/ui/components/MainContent.js.map +1 -1
  248. package/dist/src/ui/components/MainContent.test.js +224 -10
  249. package/dist/src/ui/components/MainContent.test.js.map +1 -1
  250. package/dist/src/ui/components/MemoryUsageDisplay.test.js +8 -3
  251. package/dist/src/ui/components/MemoryUsageDisplay.test.js.map +1 -1
  252. package/dist/src/ui/components/ModelDialog.js +6 -6
  253. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  254. package/dist/src/ui/components/ModelDialog.test.js +142 -16
  255. package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
  256. package/dist/src/ui/components/ModelStatsDisplay.test.js +38 -24
  257. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +1 -1
  258. package/dist/src/ui/components/MultiFolderTrustDialog.test.js +32 -9
  259. package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +1 -1
  260. package/dist/src/ui/components/NewAgentsNotification.test.js +6 -4
  261. package/dist/src/ui/components/NewAgentsNotification.test.js.map +1 -1
  262. package/dist/src/ui/components/Notifications.js +50 -4
  263. package/dist/src/ui/components/Notifications.js.map +1 -1
  264. package/dist/src/ui/components/Notifications.test.js +162 -30
  265. package/dist/src/ui/components/Notifications.test.js.map +1 -1
  266. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +36 -10
  267. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +1 -1
  268. package/dist/src/ui/components/PolicyUpdateDialog.d.ts +18 -0
  269. package/dist/src/ui/components/PolicyUpdateDialog.js +59 -0
  270. package/dist/src/ui/components/PolicyUpdateDialog.js.map +1 -0
  271. package/dist/src/ui/components/PolicyUpdateDialog.test.d.ts +6 -0
  272. package/dist/src/ui/components/PolicyUpdateDialog.test.js +93 -0
  273. package/dist/src/ui/components/PolicyUpdateDialog.test.js.map +1 -0
  274. package/dist/src/ui/components/QueuedMessageDisplay.test.js +16 -11
  275. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +1 -1
  276. package/dist/src/ui/components/QuittingDisplay.test.js +9 -5
  277. package/dist/src/ui/components/QuittingDisplay.test.js.map +1 -1
  278. package/dist/src/ui/components/QuotaDisplay.test.js +40 -22
  279. package/dist/src/ui/components/QuotaDisplay.test.js.map +1 -1
  280. package/dist/src/ui/components/RawMarkdownIndicator.test.js +8 -4
  281. package/dist/src/ui/components/RawMarkdownIndicator.test.js.map +1 -1
  282. package/dist/src/ui/components/RewindConfirmation.test.js +15 -7
  283. package/dist/src/ui/components/RewindConfirmation.test.js.map +1 -1
  284. package/dist/src/ui/components/RewindViewer.js +9 -7
  285. package/dist/src/ui/components/RewindViewer.js.map +1 -1
  286. package/dist/src/ui/components/RewindViewer.test.js +54 -17
  287. package/dist/src/ui/components/RewindViewer.test.js.map +1 -1
  288. package/dist/src/ui/components/SessionBrowser.test.js +24 -11
  289. package/dist/src/ui/components/SessionBrowser.test.js.map +1 -1
  290. package/dist/src/ui/components/SessionRetentionWarningDialog.test.js +12 -7
  291. package/dist/src/ui/components/SessionRetentionWarningDialog.test.js.map +1 -1
  292. package/dist/src/ui/components/SessionSummaryDisplay.js +1 -1
  293. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
  294. package/dist/src/ui/components/SessionSummaryDisplay.test.js +7 -4
  295. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +1 -1
  296. package/dist/src/ui/components/SettingsDialog.js +76 -7
  297. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  298. package/dist/src/ui/components/SettingsDialog.test.js +252 -109
  299. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  300. package/dist/src/ui/components/ShellInputPrompt.test.js +120 -67
  301. package/dist/src/ui/components/ShellInputPrompt.test.js.map +1 -1
  302. package/dist/src/ui/components/ShellModeIndicator.test.js +4 -2
  303. package/dist/src/ui/components/ShellModeIndicator.test.js.map +1 -1
  304. package/dist/src/ui/components/ShortcutsHelp.js +1 -1
  305. package/dist/src/ui/components/ShortcutsHelp.js.map +1 -1
  306. package/dist/src/ui/components/ShortcutsHelp.test.js +6 -3
  307. package/dist/src/ui/components/ShortcutsHelp.test.js.map +1 -1
  308. package/dist/src/ui/components/ShowMoreLines.d.ts +2 -1
  309. package/dist/src/ui/components/ShowMoreLines.js +10 -5
  310. package/dist/src/ui/components/ShowMoreLines.js.map +1 -1
  311. package/dist/src/ui/components/ShowMoreLines.test.js +47 -7
  312. package/dist/src/ui/components/ShowMoreLines.test.js.map +1 -1
  313. package/dist/src/ui/components/StatsDisplay.d.ts +1 -0
  314. package/dist/src/ui/components/StatsDisplay.js +9 -3
  315. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  316. package/dist/src/ui/components/StatsDisplay.test.js +51 -34
  317. package/dist/src/ui/components/StatsDisplay.test.js.map +1 -1
  318. package/dist/src/ui/components/StatusDisplay.test.js +30 -17
  319. package/dist/src/ui/components/StatusDisplay.test.js.map +1 -1
  320. package/dist/src/ui/components/StickyHeader.test.js +4 -2
  321. package/dist/src/ui/components/StickyHeader.test.js.map +1 -1
  322. package/dist/src/ui/components/SuggestionsDisplay.test.js +19 -13
  323. package/dist/src/ui/components/SuggestionsDisplay.test.js.map +1 -1
  324. package/dist/src/ui/components/Table.test.js +9 -6
  325. package/dist/src/ui/components/Table.test.js.map +1 -1
  326. package/dist/src/ui/components/ThemeDialog.test.js +42 -19
  327. package/dist/src/ui/components/ThemeDialog.test.js.map +1 -1
  328. package/dist/src/ui/components/ThemedGradient.test.js +4 -2
  329. package/dist/src/ui/components/ThemedGradient.test.js.map +1 -1
  330. package/dist/src/ui/components/Tips.test.js +4 -2
  331. package/dist/src/ui/components/Tips.test.js.map +1 -1
  332. package/dist/src/ui/components/ToastDisplay.js +6 -1
  333. package/dist/src/ui/components/ToastDisplay.js.map +1 -1
  334. package/dist/src/ui/components/ToastDisplay.test.js +48 -17
  335. package/dist/src/ui/components/ToastDisplay.test.js.map +1 -1
  336. package/dist/src/ui/components/ToolConfirmationQueue.js +11 -8
  337. package/dist/src/ui/components/ToolConfirmationQueue.js.map +1 -1
  338. package/dist/src/ui/components/ToolConfirmationQueue.test.js +75 -17
  339. package/dist/src/ui/components/ToolConfirmationQueue.test.js.map +1 -1
  340. package/dist/src/ui/components/ToolStatsDisplay.test.js +19 -12
  341. package/dist/src/ui/components/ToolStatsDisplay.test.js.map +1 -1
  342. package/dist/src/ui/components/UpdateNotification.test.js +4 -2
  343. package/dist/src/ui/components/UpdateNotification.test.js.map +1 -1
  344. package/dist/src/ui/components/UserIdentity.test.js +16 -11
  345. package/dist/src/ui/components/UserIdentity.test.js.map +1 -1
  346. package/dist/src/ui/components/ValidationDialog.test.js +33 -16
  347. package/dist/src/ui/components/ValidationDialog.test.js.map +1 -1
  348. package/dist/src/ui/components/messages/CompressionMessage.test.js +99 -101
  349. package/dist/src/ui/components/messages/CompressionMessage.test.js.map +1 -1
  350. package/dist/src/ui/components/messages/ErrorMessage.test.js +8 -4
  351. package/dist/src/ui/components/messages/ErrorMessage.test.js.map +1 -1
  352. package/dist/src/ui/components/messages/GeminiMessage.js +5 -1
  353. package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -1
  354. package/dist/src/ui/components/messages/GeminiMessage.test.js +12 -6
  355. package/dist/src/ui/components/messages/GeminiMessage.test.js.map +1 -1
  356. package/dist/src/ui/components/messages/HintMessage.d.ts +11 -0
  357. package/dist/src/ui/components/messages/HintMessage.js +14 -0
  358. package/dist/src/ui/components/messages/HintMessage.js.map +1 -0
  359. package/dist/src/ui/components/messages/InfoMessage.d.ts +1 -0
  360. package/dist/src/ui/components/messages/InfoMessage.js +2 -2
  361. package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
  362. package/dist/src/ui/components/messages/InfoMessage.test.js +12 -6
  363. package/dist/src/ui/components/messages/InfoMessage.test.js.map +1 -1
  364. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js +4 -2
  365. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js.map +1 -1
  366. package/dist/src/ui/components/messages/ShellToolMessage.d.ts +1 -2
  367. package/dist/src/ui/components/messages/ShellToolMessage.js +15 -29
  368. package/dist/src/ui/components/messages/ShellToolMessage.js.map +1 -1
  369. package/dist/src/ui/components/messages/ShellToolMessage.test.js +91 -22
  370. package/dist/src/ui/components/messages/ShellToolMessage.test.js.map +1 -1
  371. package/dist/src/ui/components/messages/ThinkingMessage.test.js +25 -13
  372. package/dist/src/ui/components/messages/ThinkingMessage.test.js.map +1 -1
  373. package/dist/src/ui/components/messages/Todo.test.js +34 -19
  374. package/dist/src/ui/components/messages/Todo.test.js.map +1 -1
  375. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +128 -13
  376. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  377. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +175 -20
  378. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
  379. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +3 -4
  380. package/dist/src/ui/components/messages/ToolGroupMessage.js +91 -35
  381. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  382. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +286 -63
  383. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
  384. package/dist/src/ui/components/messages/ToolMessage.js +4 -4
  385. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  386. package/dist/src/ui/components/messages/ToolMessage.test.js +118 -39
  387. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
  388. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js +15 -6
  389. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js.map +1 -1
  390. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js +4 -2
  391. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js.map +1 -1
  392. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.d.ts +6 -0
  393. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js +79 -0
  394. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js.map +1 -0
  395. package/dist/src/ui/components/messages/ToolResultDisplay.js +25 -14
  396. package/dist/src/ui/components/messages/ToolResultDisplay.js.map +1 -1
  397. package/dist/src/ui/components/messages/ToolResultDisplay.test.js +81 -31
  398. package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +1 -1
  399. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js +5 -5
  400. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js.map +1 -1
  401. package/dist/src/ui/components/messages/ToolShared.d.ts +8 -0
  402. package/dist/src/ui/components/messages/ToolShared.js +27 -9
  403. package/dist/src/ui/components/messages/ToolShared.js.map +1 -1
  404. package/dist/src/ui/components/messages/ToolShared.test.d.ts +6 -0
  405. package/dist/src/ui/components/messages/ToolShared.test.js +52 -0
  406. package/dist/src/ui/components/messages/ToolShared.test.js.map +1 -0
  407. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js +11 -4
  408. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js.map +1 -1
  409. package/dist/src/ui/components/messages/UserMessage.js +1 -2
  410. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  411. package/dist/src/ui/components/messages/UserMessage.test.js +16 -8
  412. package/dist/src/ui/components/messages/UserMessage.test.js.map +1 -1
  413. package/dist/src/ui/components/messages/UserShellMessage.js +1 -2
  414. package/dist/src/ui/components/messages/UserShellMessage.js.map +1 -1
  415. package/dist/src/ui/components/messages/WarningMessage.test.js +8 -4
  416. package/dist/src/ui/components/messages/WarningMessage.test.js.map +1 -1
  417. package/dist/src/ui/components/shared/BaseSelectionList.test.js +118 -106
  418. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -1
  419. package/dist/src/ui/components/shared/BaseSettingsDialog.js +22 -24
  420. package/dist/src/ui/components/shared/BaseSettingsDialog.js.map +1 -1
  421. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js +139 -40
  422. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js.map +1 -1
  423. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +10 -6
  424. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +1 -1
  425. package/dist/src/ui/components/shared/EnumSelector.test.js +42 -20
  426. package/dist/src/ui/components/shared/EnumSelector.test.js.map +1 -1
  427. package/dist/src/ui/components/shared/ExpandableText.test.js +21 -14
  428. package/dist/src/ui/components/shared/ExpandableText.test.js.map +1 -1
  429. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js +8 -4
  430. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js.map +1 -1
  431. package/dist/src/ui/components/shared/MaxSizedBox.test.js +41 -30
  432. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -1
  433. package/dist/src/ui/components/shared/Scrollable.js +2 -3
  434. package/dist/src/ui/components/shared/Scrollable.js.map +1 -1
  435. package/dist/src/ui/components/shared/Scrollable.test.js +33 -17
  436. package/dist/src/ui/components/shared/Scrollable.test.js.map +1 -1
  437. package/dist/src/ui/components/shared/ScrollableList.js +1 -1
  438. package/dist/src/ui/components/shared/ScrollableList.js.map +1 -1
  439. package/dist/src/ui/components/shared/ScrollableList.test.js +36 -6
  440. package/dist/src/ui/components/shared/ScrollableList.test.js.map +1 -1
  441. package/dist/src/ui/components/shared/SearchableList.d.ts +46 -14
  442. package/dist/src/ui/components/shared/SearchableList.js +69 -57
  443. package/dist/src/ui/components/shared/SearchableList.js.map +1 -1
  444. package/dist/src/ui/components/shared/SearchableList.test.js +67 -14
  445. package/dist/src/ui/components/shared/SearchableList.test.js.map +1 -1
  446. package/dist/src/ui/components/shared/SectionHeader.d.ts +1 -0
  447. package/dist/src/ui/components/shared/SectionHeader.js +1 -1
  448. package/dist/src/ui/components/shared/SectionHeader.js.map +1 -1
  449. package/dist/src/ui/components/shared/SectionHeader.test.js +9 -2
  450. package/dist/src/ui/components/shared/SectionHeader.test.js.map +1 -1
  451. package/dist/src/ui/components/shared/TabHeader.js +1 -1
  452. package/dist/src/ui/components/shared/TabHeader.js.map +1 -1
  453. package/dist/src/ui/components/shared/TabHeader.test.js +65 -25
  454. package/dist/src/ui/components/shared/TabHeader.test.js.map +1 -1
  455. package/dist/src/ui/components/shared/TextInput.test.js +111 -65
  456. package/dist/src/ui/components/shared/TextInput.test.js.map +1 -1
  457. package/dist/src/ui/components/shared/VirtualizedList.test.js +27 -35
  458. package/dist/src/ui/components/shared/VirtualizedList.test.js.map +1 -1
  459. package/dist/src/ui/components/triage/TriageDuplicates.js +1 -0
  460. package/dist/src/ui/components/triage/TriageDuplicates.js.map +1 -1
  461. package/dist/src/ui/components/triage/TriageIssues.js +1 -0
  462. package/dist/src/ui/components/triage/TriageIssues.js.map +1 -1
  463. package/dist/src/ui/components/views/ChatList.test.js +9 -6
  464. package/dist/src/ui/components/views/ChatList.test.js.map +1 -1
  465. package/dist/src/ui/components/views/ExtensionRegistryView.d.ts +15 -0
  466. package/dist/src/ui/components/views/ExtensionRegistryView.js +60 -0
  467. package/dist/src/ui/components/views/ExtensionRegistryView.js.map +1 -0
  468. package/dist/src/ui/components/views/ExtensionRegistryView.test.d.ts +6 -0
  469. package/dist/src/ui/components/views/ExtensionRegistryView.test.js +168 -0
  470. package/dist/src/ui/components/views/ExtensionRegistryView.test.js.map +1 -0
  471. package/dist/src/ui/components/views/ExtensionsList.test.js +21 -19
  472. package/dist/src/ui/components/views/ExtensionsList.test.js.map +1 -1
  473. package/dist/src/ui/components/views/McpStatus.test.js +38 -25
  474. package/dist/src/ui/components/views/McpStatus.test.js.map +1 -1
  475. package/dist/src/ui/components/views/SkillsList.test.js +18 -12
  476. package/dist/src/ui/components/views/SkillsList.test.js.map +1 -1
  477. package/dist/src/ui/components/views/ToolsList.test.js +9 -6
  478. package/dist/src/ui/components/views/ToolsList.test.js.map +1 -1
  479. package/dist/src/ui/constants/tips.js +1 -1
  480. package/dist/src/ui/constants/tips.js.map +1 -1
  481. package/dist/src/ui/constants.d.ts +2 -1
  482. package/dist/src/ui/constants.js +2 -1
  483. package/dist/src/ui/constants.js.map +1 -1
  484. package/dist/src/ui/contexts/AppContext.d.ts +2 -1
  485. package/dist/src/ui/contexts/AppContext.js.map +1 -1
  486. package/dist/src/ui/contexts/KeypressContext.js +37 -8
  487. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  488. package/dist/src/ui/contexts/KeypressContext.test.js +68 -0
  489. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  490. package/dist/src/ui/contexts/OverflowContext.d.ts +3 -3
  491. package/dist/src/ui/contexts/OverflowContext.js +5 -1
  492. package/dist/src/ui/contexts/OverflowContext.js.map +1 -1
  493. package/dist/src/ui/contexts/TerminalContext.test.js +26 -15
  494. package/dist/src/ui/contexts/TerminalContext.test.js.map +1 -1
  495. package/dist/src/ui/contexts/UIActionsContext.d.ts +6 -1
  496. package/dist/src/ui/contexts/UIActionsContext.js +1 -1
  497. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  498. package/dist/src/ui/contexts/UIStateContext.d.ts +7 -1
  499. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  500. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  501. package/dist/src/ui/hooks/atCommandProcessor.test.js +6 -2
  502. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
  503. package/dist/src/ui/hooks/slashCommandProcessor.js +23 -11
  504. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  505. package/dist/src/ui/hooks/slashCommandProcessor.test.js +30 -14
  506. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +1 -1
  507. package/dist/src/ui/hooks/toolMapping.d.ts +2 -0
  508. package/dist/src/ui/hooks/toolMapping.js +13 -1
  509. package/dist/src/ui/hooks/toolMapping.js.map +1 -1
  510. package/dist/src/ui/hooks/toolMapping.test.js +42 -0
  511. package/dist/src/ui/hooks/toolMapping.test.js.map +1 -1
  512. package/dist/src/ui/hooks/useAnimatedScrollbar.js +13 -3
  513. package/dist/src/ui/hooks/useAnimatedScrollbar.js.map +1 -1
  514. package/dist/src/ui/hooks/useAtCompletion.js +74 -22
  515. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  516. package/dist/src/ui/hooks/useAtCompletion.test.js +88 -0
  517. package/dist/src/ui/hooks/useAtCompletion.test.js.map +1 -1
  518. package/dist/src/ui/hooks/useCommandCompletion.js +2 -3
  519. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  520. package/dist/src/ui/hooks/useCommandCompletion.test.js +0 -4
  521. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +1 -1
  522. package/dist/src/ui/hooks/useConfirmingTool.d.ts +2 -6
  523. package/dist/src/ui/hooks/useConfirmingTool.js +2 -23
  524. package/dist/src/ui/hooks/useConfirmingTool.js.map +1 -1
  525. package/dist/src/ui/hooks/useConsoleMessages.js +18 -6
  526. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  527. package/dist/src/ui/hooks/useConsoleMessages.test.js +4 -4
  528. package/dist/src/ui/hooks/useExtensionRegistry.d.ts +13 -0
  529. package/dist/src/ui/hooks/useExtensionRegistry.js +70 -0
  530. package/dist/src/ui/hooks/useExtensionRegistry.js.map +1 -0
  531. package/dist/src/ui/hooks/useFocus.d.ts +4 -1
  532. package/dist/src/ui/hooks/useFocus.js +7 -1
  533. package/dist/src/ui/hooks/useFocus.js.map +1 -1
  534. package/dist/src/ui/hooks/useFocus.test.js +20 -11
  535. package/dist/src/ui/hooks/useFocus.test.js.map +1 -1
  536. package/dist/src/ui/hooks/useFolderTrust.d.ts +2 -0
  537. package/dist/src/ui/hooks/useFolderTrust.js +15 -3
  538. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  539. package/dist/src/ui/hooks/useFolderTrust.test.js +3 -0
  540. package/dist/src/ui/hooks/useFolderTrust.test.js.map +1 -1
  541. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  542. package/dist/src/ui/hooks/useGeminiStream.js +86 -20
  543. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  544. package/dist/src/ui/hooks/useGeminiStream.test.js +150 -1
  545. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  546. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +3 -1
  547. package/dist/src/ui/hooks/useLoadingIndicator.js +2 -2
  548. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  549. package/dist/src/ui/hooks/useLoadingIndicator.test.js +9 -4
  550. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  551. package/dist/src/ui/hooks/useMouseClick.test.js +15 -7
  552. package/dist/src/ui/hooks/useMouseClick.test.js.map +1 -1
  553. package/dist/src/ui/hooks/usePhraseCycler.d.ts +4 -2
  554. package/dist/src/ui/hooks/usePhraseCycler.js +38 -26
  555. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  556. package/dist/src/ui/hooks/usePhraseCycler.test.js +123 -73
  557. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +1 -1
  558. package/dist/src/ui/hooks/usePromptCompletion.d.ts +1 -2
  559. package/dist/src/ui/hooks/usePromptCompletion.js +2 -2
  560. package/dist/src/ui/hooks/usePromptCompletion.js.map +1 -1
  561. package/dist/src/ui/hooks/useRegistrySearch.d.ts +19 -0
  562. package/dist/src/ui/hooks/useRegistrySearch.js +35 -0
  563. package/dist/src/ui/hooks/useRegistrySearch.js.map +1 -0
  564. package/dist/src/ui/hooks/useRunEventNotifications.d.ts +22 -0
  565. package/dist/src/ui/hooks/useRunEventNotifications.js +93 -0
  566. package/dist/src/ui/hooks/useRunEventNotifications.js.map +1 -0
  567. package/dist/src/ui/hooks/useSearchBuffer.d.ts +11 -0
  568. package/dist/src/ui/hooks/useSearchBuffer.js +24 -0
  569. package/dist/src/ui/hooks/useSearchBuffer.js.map +1 -0
  570. package/dist/src/ui/hooks/useSelectionList.test.js +111 -45
  571. package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -1
  572. package/dist/src/ui/hooks/useSessionBrowser.js +3 -2
  573. package/dist/src/ui/hooks/useSessionBrowser.js.map +1 -1
  574. package/dist/src/ui/hooks/useSessionBrowser.test.js +15 -12
  575. package/dist/src/ui/hooks/useSessionBrowser.test.js.map +1 -1
  576. package/dist/src/ui/hooks/useSessionResume.js +2 -2
  577. package/dist/src/ui/hooks/useSessionResume.js.map +1 -1
  578. package/dist/src/ui/hooks/useSlashCompletion.js +1 -0
  579. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  580. package/dist/src/ui/hooks/useStateAndRef.js +1 -0
  581. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
  582. package/dist/src/ui/hooks/useTerminalTheme.test.js +29 -18
  583. package/dist/src/ui/hooks/useTerminalTheme.test.js.map +1 -1
  584. package/dist/src/ui/hooks/useToolScheduler.js +19 -2
  585. package/dist/src/ui/hooks/useToolScheduler.js.map +1 -1
  586. package/dist/src/ui/hooks/useToolScheduler.test.js +44 -0
  587. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  588. package/dist/src/ui/keyMatchers.test.js +1 -0
  589. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  590. package/dist/src/ui/layouts/DefaultAppLayout.test.js +12 -6
  591. package/dist/src/ui/layouts/DefaultAppLayout.test.js.map +1 -1
  592. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js +24 -8
  593. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js.map +1 -1
  594. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js +16 -5
  595. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js.map +1 -1
  596. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js +16 -5
  597. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js.map +1 -1
  598. package/dist/src/ui/privacy/PrivacyNotice.test.js +4 -2
  599. package/dist/src/ui/privacy/PrivacyNotice.test.js.map +1 -1
  600. package/dist/src/ui/themes/no-color.js +4 -0
  601. package/dist/src/ui/themes/no-color.js.map +1 -1
  602. package/dist/src/ui/themes/semantic-tokens.d.ts +2 -0
  603. package/dist/src/ui/themes/semantic-tokens.js +6 -2
  604. package/dist/src/ui/themes/semantic-tokens.js.map +1 -1
  605. package/dist/src/ui/themes/solarized-dark.js +2 -0
  606. package/dist/src/ui/themes/solarized-dark.js.map +1 -1
  607. package/dist/src/ui/themes/solarized-light.js +2 -0
  608. package/dist/src/ui/themes/solarized-light.js.map +1 -1
  609. package/dist/src/ui/themes/theme-manager.js +9 -4
  610. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  611. package/dist/src/ui/themes/theme.d.ts +2 -0
  612. package/dist/src/ui/themes/theme.js +20 -7
  613. package/dist/src/ui/themes/theme.js.map +1 -1
  614. package/dist/src/ui/themes/theme.test.js +7 -7
  615. package/dist/src/ui/themes/theme.test.js.map +1 -1
  616. package/dist/src/ui/types.d.ts +14 -2
  617. package/dist/src/ui/types.js +1 -0
  618. package/dist/src/ui/types.js.map +1 -1
  619. package/dist/src/ui/utils/CodeColorizer.js +3 -5
  620. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  621. package/dist/src/ui/utils/CodeColorizer.test.js +4 -2
  622. package/dist/src/ui/utils/CodeColorizer.test.js.map +1 -1
  623. package/dist/src/ui/utils/InlineMarkdownRenderer.js +3 -1
  624. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  625. package/dist/src/ui/utils/MarkdownDisplay.js +1 -1
  626. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  627. package/dist/src/ui/utils/MarkdownDisplay.test.js +65 -33
  628. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
  629. package/dist/src/ui/utils/TableRenderer.js +7 -3
  630. package/dist/src/ui/utils/TableRenderer.js.map +1 -1
  631. package/dist/src/ui/utils/TableRenderer.test.js +43 -22
  632. package/dist/src/ui/utils/TableRenderer.test.js.map +1 -1
  633. package/dist/src/ui/utils/borderStyles.d.ts +18 -0
  634. package/dist/src/ui/utils/borderStyles.js +78 -0
  635. package/dist/src/ui/utils/borderStyles.js.map +1 -0
  636. package/dist/src/ui/utils/commandUtils.d.ts +2 -1
  637. package/dist/src/ui/utils/commandUtils.js +8 -3
  638. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  639. package/dist/src/ui/utils/commandUtils.test.js +18 -0
  640. package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
  641. package/dist/src/ui/utils/confirmingTool.d.ts +15 -0
  642. package/dist/src/ui/utils/confirmingTool.js +27 -0
  643. package/dist/src/ui/utils/confirmingTool.js.map +1 -0
  644. package/dist/src/ui/utils/pendingAttentionNotification.d.ts +12 -0
  645. package/dist/src/ui/utils/pendingAttentionNotification.js +101 -0
  646. package/dist/src/ui/utils/pendingAttentionNotification.js.map +1 -0
  647. package/dist/src/ui/utils/pendingAttentionNotification.test.d.ts +6 -0
  648. package/dist/src/ui/utils/pendingAttentionNotification.test.js +79 -0
  649. package/dist/src/ui/utils/pendingAttentionNotification.test.js.map +1 -0
  650. package/dist/src/ui/utils/terminalCapabilityManager.d.ts +2 -0
  651. package/dist/src/ui/utils/terminalCapabilityManager.js +18 -0
  652. package/dist/src/ui/utils/terminalCapabilityManager.js.map +1 -1
  653. package/dist/src/ui/utils/terminalCapabilityManager.test.js +68 -0
  654. package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +1 -1
  655. package/dist/src/ui/utils/terminalSetup.d.ts +24 -0
  656. package/dist/src/ui/utils/terminalSetup.js +130 -34
  657. package/dist/src/ui/utils/terminalSetup.js.map +1 -1
  658. package/dist/src/ui/utils/terminalSetup.test.js +35 -1
  659. package/dist/src/ui/utils/terminalSetup.test.js.map +1 -1
  660. package/dist/src/ui/utils/textUtils.d.ts +4 -0
  661. package/dist/src/ui/utils/textUtils.js +10 -1
  662. package/dist/src/ui/utils/textUtils.js.map +1 -1
  663. package/dist/src/ui/utils/textUtils.test.js +25 -2
  664. package/dist/src/ui/utils/textUtils.test.js.map +1 -1
  665. package/dist/src/ui/utils/toolLayoutUtils.d.ts +44 -0
  666. package/dist/src/ui/utils/toolLayoutUtils.js +73 -0
  667. package/dist/src/ui/utils/toolLayoutUtils.js.map +1 -0
  668. package/dist/src/ui/utils/urlSecurityUtils.d.ts +32 -0
  669. package/dist/src/ui/utils/urlSecurityUtils.js +71 -0
  670. package/dist/src/ui/utils/urlSecurityUtils.js.map +1 -0
  671. package/dist/src/ui/utils/urlSecurityUtils.test.d.ts +6 -0
  672. package/dist/src/ui/utils/urlSecurityUtils.test.js +49 -0
  673. package/dist/src/ui/utils/urlSecurityUtils.test.js.map +1 -0
  674. package/dist/src/utils/activityLogger.js +95 -24
  675. package/dist/src/utils/activityLogger.js.map +1 -1
  676. package/dist/src/utils/devtoolsService.js +1 -2
  677. package/dist/src/utils/devtoolsService.js.map +1 -1
  678. package/dist/src/utils/devtoolsService.test.js +1 -1
  679. package/dist/src/utils/devtoolsService.test.js.map +1 -1
  680. package/dist/src/utils/envVarResolver.js +4 -1
  681. package/dist/src/utils/envVarResolver.js.map +1 -1
  682. package/dist/src/utils/gitUtils.js +2 -0
  683. package/dist/src/utils/gitUtils.js.map +1 -1
  684. package/dist/src/utils/jsonoutput.js +2 -0
  685. package/dist/src/utils/jsonoutput.js.map +1 -1
  686. package/dist/src/utils/persistentState.d.ts +2 -0
  687. package/dist/src/utils/persistentState.js +1 -0
  688. package/dist/src/utils/persistentState.js.map +1 -1
  689. package/dist/src/utils/readStdin.js +1 -0
  690. package/dist/src/utils/readStdin.js.map +1 -1
  691. package/dist/src/utils/sessionUtils.d.ts +1 -6
  692. package/dist/src/utils/sessionUtils.js +8 -101
  693. package/dist/src/utils/sessionUtils.js.map +1 -1
  694. package/dist/src/utils/sessionUtils.test.js +47 -0
  695. package/dist/src/utils/sessionUtils.test.js.map +1 -1
  696. package/dist/src/utils/settingsUtils.js +2 -0
  697. package/dist/src/utils/settingsUtils.js.map +1 -1
  698. package/dist/src/utils/skillUtils.test.js +7 -5
  699. package/dist/src/utils/skillUtils.test.js.map +1 -1
  700. package/dist/src/utils/terminalNotifications.d.ts +25 -0
  701. package/dist/src/utils/terminalNotifications.js +77 -0
  702. package/dist/src/utils/terminalNotifications.js.map +1 -0
  703. package/dist/src/utils/terminalNotifications.test.d.ts +6 -0
  704. package/dist/src/utils/terminalNotifications.test.js +123 -0
  705. package/dist/src/utils/terminalNotifications.test.js.map +1 -0
  706. package/dist/src/utils/userStartupWarnings.d.ts +4 -1
  707. package/dist/src/utils/userStartupWarnings.js +22 -4
  708. package/dist/src/utils/userStartupWarnings.js.map +1 -1
  709. package/dist/src/utils/userStartupWarnings.test.js +53 -11
  710. package/dist/src/utils/userStartupWarnings.test.js.map +1 -1
  711. package/dist/src/zed-integration/acpErrors.js +2 -0
  712. package/dist/src/zed-integration/acpErrors.js.map +1 -1
  713. package/dist/src/zed-integration/acpResume.test.js +53 -3
  714. package/dist/src/zed-integration/acpResume.test.js.map +1 -1
  715. package/dist/src/zed-integration/fileSystemService.js +2 -0
  716. package/dist/src/zed-integration/fileSystemService.js.map +1 -1
  717. package/dist/src/zed-integration/zedIntegration.d.ts +2 -0
  718. package/dist/src/zed-integration/zedIntegration.js +77 -6
  719. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  720. package/dist/src/zed-integration/zedIntegration.test.js +176 -2
  721. package/dist/src/zed-integration/zedIntegration.test.js.map +1 -1
  722. package/dist/tsconfig.tsbuildinfo +1 -1
  723. package/package.json +8 -7
  724. package/dist/google-gemini-cli-0.30.0.tgz +0 -0
  725. package/dist/src/ui/hooks/useFuzzyList.d.ts +0 -25
  726. package/dist/src/ui/hooks/useFuzzyList.js +0 -100
  727. package/dist/src/ui/hooks/useFuzzyList.js.map +0 -1
@@ -59,7 +59,8 @@ describe('useSelectionList', () => {
59
59
  hookResult = useSelectionList(props);
60
60
  return null;
61
61
  }
62
- const { rerender, unmount } = render(_jsx(TestComponent, { ...initialProps }));
62
+ const { rerender, unmount, waitUntilReady } = render(_jsx(TestComponent, { ...initialProps }));
63
+ await waitUntilReady();
63
64
  return {
64
65
  result: {
65
66
  get current() {
@@ -67,11 +68,15 @@ describe('useSelectionList', () => {
67
68
  },
68
69
  },
69
70
  rerender: async (newProps) => {
70
- rerender(_jsx(TestComponent, { ...initialProps, ...newProps }));
71
+ await act(async () => {
72
+ rerender(_jsx(TestComponent, { ...initialProps, ...newProps }));
73
+ });
74
+ await waitUntilReady();
71
75
  },
72
76
  unmount: async () => {
73
77
  unmount();
74
78
  },
79
+ waitUntilReady,
75
80
  };
76
81
  };
77
82
  describe('Initialization', () => {
@@ -147,30 +152,34 @@ describe('useSelectionList', () => {
147
152
  });
148
153
  describe('Keyboard Navigation (Up/Down/J/K)', () => {
149
154
  it('should move down with "j" and "down" keys, skipping disabled items', async () => {
150
- const { result } = await renderSelectionListHook({
155
+ const { result, waitUntilReady } = await renderSelectionListHook({
151
156
  items,
152
157
  onSelect: mockOnSelect,
153
158
  });
154
159
  expect(result.current.activeIndex).toBe(0);
155
160
  pressKey('j');
161
+ await waitUntilReady();
156
162
  expect(result.current.activeIndex).toBe(2);
157
163
  pressKey('down');
164
+ await waitUntilReady();
158
165
  expect(result.current.activeIndex).toBe(3);
159
166
  });
160
167
  it('should move up with "k" and "up" keys, skipping disabled items', async () => {
161
- const { result } = await renderSelectionListHook({
168
+ const { result, waitUntilReady } = await renderSelectionListHook({
162
169
  items,
163
170
  initialIndex: 3,
164
171
  onSelect: mockOnSelect,
165
172
  });
166
173
  expect(result.current.activeIndex).toBe(3);
167
174
  pressKey('k');
175
+ await waitUntilReady();
168
176
  expect(result.current.activeIndex).toBe(2);
169
177
  pressKey('up');
178
+ await waitUntilReady();
170
179
  expect(result.current.activeIndex).toBe(0);
171
180
  });
172
181
  it('should ignore navigation keys when shift is pressed', async () => {
173
- const { result } = await renderSelectionListHook({
182
+ const { result, waitUntilReady } = await renderSelectionListHook({
174
183
  items,
175
184
  initialIndex: 2, // Start at middle item 'C'
176
185
  onSelect: mockOnSelect,
@@ -178,48 +187,57 @@ describe('useSelectionList', () => {
178
187
  expect(result.current.activeIndex).toBe(2);
179
188
  // Shift+Down / Shift+J should not move down
180
189
  pressKey('down', undefined, { shift: true });
190
+ await waitUntilReady();
181
191
  expect(result.current.activeIndex).toBe(2);
182
192
  pressKey('j', undefined, { shift: true });
193
+ await waitUntilReady();
183
194
  expect(result.current.activeIndex).toBe(2);
184
195
  // Shift+Up / Shift+K should not move up
185
196
  pressKey('up', undefined, { shift: true });
197
+ await waitUntilReady();
186
198
  expect(result.current.activeIndex).toBe(2);
187
199
  pressKey('k', undefined, { shift: true });
200
+ await waitUntilReady();
188
201
  expect(result.current.activeIndex).toBe(2);
189
202
  // Verify normal navigation still works
190
203
  pressKey('down');
204
+ await waitUntilReady();
191
205
  expect(result.current.activeIndex).toBe(3);
192
206
  });
193
207
  it('should wrap navigation correctly', async () => {
194
- const { result } = await renderSelectionListHook({
208
+ const { result, waitUntilReady } = await renderSelectionListHook({
195
209
  items,
196
210
  initialIndex: items.length - 1,
197
211
  onSelect: mockOnSelect,
198
212
  });
199
213
  expect(result.current.activeIndex).toBe(3);
200
214
  pressKey('down');
215
+ await waitUntilReady();
201
216
  expect(result.current.activeIndex).toBe(0);
202
217
  pressKey('up');
218
+ await waitUntilReady();
203
219
  expect(result.current.activeIndex).toBe(3);
204
220
  });
205
221
  it('should call onHighlight when index changes', async () => {
206
- await renderSelectionListHook({
222
+ const { waitUntilReady } = await renderSelectionListHook({
207
223
  items,
208
224
  onSelect: mockOnSelect,
209
225
  onHighlight: mockOnHighlight,
210
226
  });
211
227
  pressKey('down');
228
+ await waitUntilReady();
212
229
  expect(mockOnHighlight).toHaveBeenCalledTimes(1);
213
230
  expect(mockOnHighlight).toHaveBeenCalledWith('C');
214
231
  });
215
232
  it('should not move or call onHighlight if navigation results in the same index (e.g., single item)', async () => {
216
233
  const singleItem = [{ value: 'A', key: 'A' }];
217
- const { result } = await renderSelectionListHook({
234
+ const { result, waitUntilReady } = await renderSelectionListHook({
218
235
  items: singleItem,
219
236
  onSelect: mockOnSelect,
220
237
  onHighlight: mockOnHighlight,
221
238
  });
222
239
  pressKey('down');
240
+ await waitUntilReady();
223
241
  expect(result.current.activeIndex).toBe(0);
224
242
  expect(mockOnHighlight).not.toHaveBeenCalled();
225
243
  });
@@ -228,32 +246,35 @@ describe('useSelectionList', () => {
228
246
  { value: 'A', disabled: true, key: 'A' },
229
247
  { value: 'B', disabled: true, key: 'B' },
230
248
  ];
231
- const { result } = await renderSelectionListHook({
249
+ const { result, waitUntilReady } = await renderSelectionListHook({
232
250
  items: allDisabled,
233
251
  onSelect: mockOnSelect,
234
252
  onHighlight: mockOnHighlight,
235
253
  });
236
254
  const initialIndex = result.current.activeIndex;
237
255
  pressKey('down');
256
+ await waitUntilReady();
238
257
  expect(result.current.activeIndex).toBe(initialIndex);
239
258
  expect(mockOnHighlight).not.toHaveBeenCalled();
240
259
  });
241
260
  });
242
261
  describe('Wrapping (wrapAround)', () => {
243
262
  it('should wrap by default (wrapAround=true)', async () => {
244
- const { result } = await renderSelectionListHook({
263
+ const { result, waitUntilReady } = await renderSelectionListHook({
245
264
  items,
246
265
  initialIndex: items.length - 1,
247
266
  onSelect: mockOnSelect,
248
267
  });
249
268
  expect(result.current.activeIndex).toBe(3);
250
269
  pressKey('down');
270
+ await waitUntilReady();
251
271
  expect(result.current.activeIndex).toBe(0);
252
272
  pressKey('up');
273
+ await waitUntilReady();
253
274
  expect(result.current.activeIndex).toBe(3);
254
275
  });
255
276
  it('should not wrap when wrapAround is false', async () => {
256
- const { result } = await renderSelectionListHook({
277
+ const { result, waitUntilReady } = await renderSelectionListHook({
257
278
  items,
258
279
  initialIndex: items.length - 1,
259
280
  onSelect: mockOnSelect,
@@ -261,37 +282,43 @@ describe('useSelectionList', () => {
261
282
  });
262
283
  expect(result.current.activeIndex).toBe(3);
263
284
  pressKey('down');
285
+ await waitUntilReady();
264
286
  expect(result.current.activeIndex).toBe(3); // Should stay at bottom
265
287
  act(() => result.current.setActiveIndex(0));
288
+ await waitUntilReady();
266
289
  expect(result.current.activeIndex).toBe(0);
267
290
  pressKey('up');
291
+ await waitUntilReady();
268
292
  expect(result.current.activeIndex).toBe(0); // Should stay at top
269
293
  });
270
294
  });
271
295
  describe('Selection (Enter)', () => {
272
296
  it('should call onSelect when "return" is pressed on enabled item', async () => {
273
- await renderSelectionListHook({
297
+ const { waitUntilReady } = await renderSelectionListHook({
274
298
  items,
275
299
  initialIndex: 2,
276
300
  onSelect: mockOnSelect,
277
301
  });
278
302
  pressKey('return');
303
+ await waitUntilReady();
279
304
  expect(mockOnSelect).toHaveBeenCalledTimes(1);
280
305
  expect(mockOnSelect).toHaveBeenCalledWith('C');
281
306
  });
282
307
  it('should not call onSelect if the active item is disabled', async () => {
283
- const { result } = await renderSelectionListHook({
308
+ const { result, waitUntilReady } = await renderSelectionListHook({
284
309
  items,
285
310
  onSelect: mockOnSelect,
286
311
  });
287
312
  act(() => result.current.setActiveIndex(1));
313
+ await waitUntilReady();
288
314
  pressKey('return');
315
+ await waitUntilReady();
289
316
  expect(mockOnSelect).not.toHaveBeenCalled();
290
317
  });
291
318
  });
292
319
  describe('Keyboard Navigation Robustness (Rapid Input)', () => {
293
320
  it('should handle rapid navigation and selection robustly (avoiding stale state)', async () => {
294
- const { result } = await renderSelectionListHook({
321
+ const { result, waitUntilReady } = await renderSelectionListHook({
295
322
  items, // A, B(disabled), C, D. Initial index 0 (A).
296
323
  onSelect: mockOnSelect,
297
324
  onHighlight: mockOnHighlight,
@@ -316,14 +343,17 @@ describe('useSelectionList', () => {
316
343
  act(() => {
317
344
  press('down');
318
345
  });
346
+ await waitUntilReady();
319
347
  // 2. Press Down again. Should move 2 (C) -> 3 (D).
320
348
  act(() => {
321
349
  press('down');
322
350
  });
351
+ await waitUntilReady();
323
352
  // 3. Press Enter. Should select D.
324
353
  act(() => {
325
354
  press('return');
326
355
  });
356
+ await waitUntilReady();
327
357
  expect(result.current.activeIndex).toBe(3);
328
358
  expect(mockOnHighlight).toHaveBeenCalledTimes(2);
329
359
  expect(mockOnHighlight).toHaveBeenNthCalledWith(1, 'C');
@@ -333,7 +363,7 @@ describe('useSelectionList', () => {
333
363
  expect(mockOnSelect).not.toHaveBeenCalledWith('A');
334
364
  });
335
365
  it('should handle ultra-rapid input (multiple presses in single act) without stale state', async () => {
336
- const { result } = await renderSelectionListHook({
366
+ const { result, waitUntilReady } = await renderSelectionListHook({
337
367
  items, // A, B(disabled), C, D. Initial index 0 (A).
338
368
  onSelect: mockOnSelect,
339
369
  onHighlight: mockOnHighlight,
@@ -360,6 +390,7 @@ describe('useSelectionList', () => {
360
390
  press('down'); // Should move 2 (C) -> 3 (D)
361
391
  press('return'); // Should select D
362
392
  });
393
+ await waitUntilReady();
363
394
  expect(result.current.activeIndex).toBe(3);
364
395
  expect(mockOnHighlight).toHaveBeenCalledWith('D');
365
396
  expect(mockOnSelect).toHaveBeenCalledTimes(1);
@@ -368,12 +399,13 @@ describe('useSelectionList', () => {
368
399
  });
369
400
  describe('Focus Management (isFocused)', () => {
370
401
  it('should activate the keypress handler when focused (default) and items exist', async () => {
371
- const { result } = await renderSelectionListHook({
402
+ const { result, waitUntilReady } = await renderSelectionListHook({
372
403
  items,
373
404
  onSelect: mockOnSelect,
374
405
  });
375
406
  expect(activeKeypressHandler).not.toBeNull();
376
407
  pressKey('down');
408
+ await waitUntilReady();
377
409
  expect(result.current.activeIndex).toBe(2);
378
410
  });
379
411
  it('should not activate the keypress handler when isFocused is false', async () => {
@@ -395,7 +427,7 @@ describe('useSelectionList', () => {
395
427
  expect(() => pressKey('down')).toThrow(/keypress handler is not active/);
396
428
  });
397
429
  it('should activate/deactivate when isFocused prop changes', async () => {
398
- const { result, rerender } = await renderSelectionListHook({
430
+ const { result, rerender, waitUntilReady } = await renderSelectionListHook({
399
431
  items,
400
432
  onSelect: mockOnSelect,
401
433
  isFocused: false,
@@ -404,6 +436,7 @@ describe('useSelectionList', () => {
404
436
  await rerender({ isFocused: true });
405
437
  expect(activeKeypressHandler).not.toBeNull();
406
438
  pressKey('down');
439
+ await waitUntilReady();
407
440
  expect(result.current.activeIndex).toBe(2);
408
441
  await rerender({ isFocused: false });
409
442
  expect(activeKeypressHandler).toBeNull();
@@ -421,22 +454,24 @@ describe('useSelectionList', () => {
421
454
  const longList = Array.from({ length: 15 }, (_, i) => ({ value: `Item ${i + 1}`, key: `Item ${i + 1}` }));
422
455
  const pressNumber = (num) => pressKey(num, num);
423
456
  it('should not respond to numbers if showNumbers is false (default)', async () => {
424
- const { result } = await renderSelectionListHook({
457
+ const { result, waitUntilReady } = await renderSelectionListHook({
425
458
  items: shortList,
426
459
  onSelect: mockOnSelect,
427
460
  });
428
461
  pressNumber('1');
462
+ await waitUntilReady();
429
463
  expect(result.current.activeIndex).toBe(0);
430
464
  expect(mockOnSelect).not.toHaveBeenCalled();
431
465
  });
432
466
  it('should select item immediately if the number cannot be extended (unambiguous)', async () => {
433
- const { result } = await renderSelectionListHook({
467
+ const { result, waitUntilReady } = await renderSelectionListHook({
434
468
  items: shortList,
435
469
  onSelect: mockOnSelect,
436
470
  onHighlight: mockOnHighlight,
437
471
  showNumbers: true,
438
472
  });
439
473
  pressNumber('3');
474
+ await waitUntilReady();
440
475
  expect(result.current.activeIndex).toBe(2);
441
476
  expect(mockOnHighlight).toHaveBeenCalledWith('C');
442
477
  expect(mockOnSelect).toHaveBeenCalledTimes(1);
@@ -444,7 +479,7 @@ describe('useSelectionList', () => {
444
479
  expect(vi.getTimerCount()).toBe(0);
445
480
  });
446
481
  it('should highlight and wait for timeout if the number can be extended (ambiguous)', async () => {
447
- const { result } = await renderSelectionListHook({
482
+ const { result, waitUntilReady } = await renderSelectionListHook({
448
483
  items: longList,
449
484
  initialIndex: 1, // Start at index 1 so pressing "1" (index 0) causes a change
450
485
  onSelect: mockOnSelect,
@@ -452,82 +487,94 @@ describe('useSelectionList', () => {
452
487
  showNumbers: true,
453
488
  });
454
489
  pressNumber('1');
490
+ await waitUntilReady();
455
491
  expect(result.current.activeIndex).toBe(0);
456
492
  expect(mockOnHighlight).toHaveBeenCalledWith('Item 1');
457
493
  expect(mockOnSelect).not.toHaveBeenCalled();
458
494
  expect(vi.getTimerCount()).toBe(1);
459
- act(() => {
495
+ await act(async () => {
460
496
  vi.advanceTimersByTime(1000);
461
497
  });
498
+ await waitUntilReady();
462
499
  expect(mockOnSelect).toHaveBeenCalledTimes(1);
463
500
  expect(mockOnSelect).toHaveBeenCalledWith('Item 1');
464
501
  });
465
502
  it('should handle multi-digit input correctly', async () => {
466
- const { result } = await renderSelectionListHook({
503
+ const { result, waitUntilReady } = await renderSelectionListHook({
467
504
  items: longList,
468
505
  onSelect: mockOnSelect,
469
506
  showNumbers: true,
470
507
  });
471
508
  pressNumber('1');
509
+ await waitUntilReady();
472
510
  expect(mockOnSelect).not.toHaveBeenCalled();
473
511
  pressNumber('2');
512
+ await waitUntilReady();
474
513
  expect(result.current.activeIndex).toBe(11);
475
514
  expect(mockOnSelect).toHaveBeenCalledTimes(1);
476
515
  expect(mockOnSelect).toHaveBeenCalledWith('Item 12');
477
516
  });
478
517
  it('should reset buffer if input becomes invalid (out of bounds)', async () => {
479
- const { result } = await renderSelectionListHook({
518
+ const { result, waitUntilReady } = await renderSelectionListHook({
480
519
  items: shortList,
481
520
  onSelect: mockOnSelect,
482
521
  showNumbers: true,
483
522
  });
484
523
  pressNumber('5');
524
+ await waitUntilReady();
485
525
  expect(result.current.activeIndex).toBe(0);
486
526
  expect(mockOnSelect).not.toHaveBeenCalled();
487
527
  pressNumber('3');
528
+ await waitUntilReady();
488
529
  expect(result.current.activeIndex).toBe(2);
489
530
  expect(mockOnSelect).toHaveBeenCalledWith('C');
490
531
  });
491
532
  it('should allow "0" as subsequent digit, but ignore as first digit', async () => {
492
- const { result } = await renderSelectionListHook({
533
+ const { result, waitUntilReady } = await renderSelectionListHook({
493
534
  items: longList,
494
535
  onSelect: mockOnSelect,
495
536
  showNumbers: true,
496
537
  });
497
538
  pressNumber('0');
539
+ await waitUntilReady();
498
540
  expect(result.current.activeIndex).toBe(0);
499
541
  expect(mockOnSelect).not.toHaveBeenCalled();
500
542
  // Timer should be running to clear the '0' input buffer
501
543
  expect(vi.getTimerCount()).toBe(1);
502
544
  // Press '1', then '0' (Item 10, index 9)
503
545
  pressNumber('1');
546
+ await waitUntilReady();
504
547
  pressNumber('0');
548
+ await waitUntilReady();
505
549
  expect(result.current.activeIndex).toBe(9);
506
550
  expect(mockOnSelect).toHaveBeenCalledWith('Item 10');
507
551
  });
508
552
  it('should clear the initial "0" input after timeout', async () => {
509
- await renderSelectionListHook({
553
+ const { waitUntilReady } = await renderSelectionListHook({
510
554
  items: longList,
511
555
  onSelect: mockOnSelect,
512
556
  showNumbers: true,
513
557
  });
514
558
  pressNumber('0');
515
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
516
- act(() => vi.advanceTimersByTime(1000)); // Timeout the '0' input
559
+ await waitUntilReady();
560
+ await act(async () => vi.advanceTimersByTime(1000)); // Timeout the '0' input
561
+ await waitUntilReady();
517
562
  pressNumber('1');
563
+ await waitUntilReady();
518
564
  expect(mockOnSelect).not.toHaveBeenCalled(); // Should be waiting for second digit
519
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
520
- act(() => vi.advanceTimersByTime(1000)); // Timeout '1'
565
+ await act(async () => vi.advanceTimersByTime(1000)); // Timeout '1'
566
+ await waitUntilReady();
521
567
  expect(mockOnSelect).toHaveBeenCalledWith('Item 1');
522
568
  });
523
569
  it('should highlight but not select a disabled item (immediate selection case)', async () => {
524
- const { result } = await renderSelectionListHook({
570
+ const { result, waitUntilReady } = await renderSelectionListHook({
525
571
  items: shortList, // B (index 1, number 2) is disabled
526
572
  onSelect: mockOnSelect,
527
573
  onHighlight: mockOnHighlight,
528
574
  showNumbers: true,
529
575
  });
530
576
  pressNumber('2');
577
+ await waitUntilReady();
531
578
  expect(result.current.activeIndex).toBe(1);
532
579
  expect(mockOnHighlight).toHaveBeenCalledWith('B');
533
580
  // Should not select immediately, even though 20 > 4
@@ -539,48 +586,56 @@ describe('useSelectionList', () => {
539
586
  { value: 'Item 1 Disabled', disabled: true, key: 'Item 1 Disabled' },
540
587
  ...longList.slice(1),
541
588
  ];
542
- const { result } = await renderSelectionListHook({
589
+ const { result, waitUntilReady } = await renderSelectionListHook({
543
590
  items: disabledAmbiguousList,
544
591
  onSelect: mockOnSelect,
545
592
  showNumbers: true,
546
593
  });
547
594
  pressNumber('1');
595
+ await waitUntilReady();
548
596
  expect(result.current.activeIndex).toBe(0);
549
597
  expect(vi.getTimerCount()).toBe(1);
550
- act(() => {
598
+ await act(async () => {
551
599
  vi.advanceTimersByTime(1000);
552
600
  });
601
+ await waitUntilReady();
553
602
  // Should not select after timeout
554
603
  expect(mockOnSelect).not.toHaveBeenCalled();
555
604
  });
556
605
  it('should clear the number buffer if a non-numeric key (e.g., navigation) is pressed', async () => {
557
- const { result } = await renderSelectionListHook({
606
+ const { result, waitUntilReady } = await renderSelectionListHook({
558
607
  items: longList,
559
608
  onSelect: mockOnSelect,
560
609
  showNumbers: true,
561
610
  });
562
611
  pressNumber('1');
612
+ await waitUntilReady();
563
613
  expect(vi.getTimerCount()).toBe(1);
564
614
  pressKey('down');
615
+ await waitUntilReady();
565
616
  expect(result.current.activeIndex).toBe(1);
566
617
  expect(vi.getTimerCount()).toBe(0);
567
618
  pressNumber('3');
619
+ await waitUntilReady();
568
620
  // Should select '3', not '13'
569
621
  expect(result.current.activeIndex).toBe(2);
570
622
  });
571
623
  it('should clear the number buffer if "return" is pressed', async () => {
572
- await renderSelectionListHook({
624
+ const { waitUntilReady } = await renderSelectionListHook({
573
625
  items: longList,
574
626
  onSelect: mockOnSelect,
575
627
  showNumbers: true,
576
628
  });
577
629
  pressNumber('1');
630
+ await waitUntilReady();
578
631
  pressKey('return');
632
+ await waitUntilReady();
579
633
  expect(mockOnSelect).toHaveBeenCalledTimes(1);
580
634
  expect(vi.getTimerCount()).toBe(0);
581
- act(() => {
635
+ await act(async () => {
582
636
  vi.advanceTimersByTime(1000);
583
637
  });
638
+ await waitUntilReady();
584
639
  expect(mockOnSelect).toHaveBeenCalledTimes(1);
585
640
  });
586
641
  });
@@ -597,13 +652,14 @@ describe('useSelectionList', () => {
597
652
  });
598
653
  });
599
654
  it('should respect a new initialIndex even after user interaction', async () => {
600
- const { result, rerender } = await renderSelectionListHook({
655
+ const { result, rerender, waitUntilReady } = await renderSelectionListHook({
601
656
  items,
602
657
  onSelect: mockOnSelect,
603
658
  initialIndex: 0,
604
659
  });
605
660
  // User navigates, changing the active index
606
661
  pressKey('down');
662
+ await waitUntilReady();
607
663
  expect(result.current.activeIndex).toBe(2);
608
664
  // The component re-renders with a new initial index
609
665
  await rerender({ initialIndex: 3 });
@@ -680,16 +736,17 @@ describe('useSelectionList', () => {
680
736
  { value: 'C', key: 'C' },
681
737
  { value: 'D', key: 'D' },
682
738
  ];
683
- const { result, rerender } = await renderSelectionListHook({
739
+ const { result, rerender, waitUntilReady } = await renderSelectionListHook({
684
740
  onSelect: mockOnSelect,
685
741
  onHighlight: mockOnHighlight,
686
742
  initialIndex: 2,
687
743
  items: initialItems,
688
744
  });
689
745
  expect(result.current.activeIndex).toBe(2);
690
- act(() => {
746
+ await act(async () => {
691
747
  result.current.setActiveIndex(3);
692
748
  });
749
+ await waitUntilReady();
693
750
  expect(result.current.activeIndex).toBe(3);
694
751
  mockOnHighlight.mockClear();
695
752
  // Create new array with same content (deeply equal but not identical)
@@ -764,11 +821,12 @@ describe('useSelectionList', () => {
764
821
  { value: 'B', key: 'B' },
765
822
  { value: 'C', key: 'C' },
766
823
  ];
767
- const { result, rerender } = await renderSelectionListHook({
824
+ const { result, rerender, waitUntilReady } = await renderSelectionListHook({
768
825
  onSelect: mockOnSelect,
769
826
  items: initialItems,
770
827
  });
771
828
  pressKey('down');
829
+ await waitUntilReady();
772
830
  expect(result.current.activeIndex).toBe(1);
773
831
  const newItems = [
774
832
  { value: 'D', key: 'D' },
@@ -797,10 +855,14 @@ describe('useSelectionList', () => {
797
855
  });
798
856
  return null;
799
857
  }
800
- const { rerender } = render(_jsx(TestComponent, { ...initialProps }));
858
+ const { rerender, waitUntilReady } = render(_jsx(TestComponent, { ...initialProps }));
859
+ await waitUntilReady();
801
860
  return {
802
861
  rerender: async (newProps) => {
803
- rerender(_jsx(TestComponent, { ...initialProps, ...newProps }));
862
+ await act(async () => {
863
+ rerender(_jsx(TestComponent, { ...initialProps, ...newProps }));
864
+ });
865
+ await waitUntilReady();
804
866
  },
805
867
  };
806
868
  };
@@ -825,22 +887,26 @@ describe('useSelectionList', () => {
825
887
  });
826
888
  it('should clear timeout on unmount when timer is active', async () => {
827
889
  const longList = Array.from({ length: 15 }, (_, i) => ({ value: `Item ${i + 1}`, key: `Item ${i + 1}` }));
828
- const { unmount } = await renderSelectionListHook({
890
+ const { unmount, waitUntilReady } = await renderSelectionListHook({
829
891
  items: longList,
830
892
  onSelect: mockOnSelect,
831
893
  showNumbers: true,
832
894
  });
833
895
  pressKey('1', '1');
896
+ await waitUntilReady();
834
897
  expect(vi.getTimerCount()).toBe(1);
835
- act(() => {
898
+ await act(async () => {
836
899
  vi.advanceTimersByTime(500);
837
900
  });
901
+ await waitUntilReady();
838
902
  expect(mockOnSelect).not.toHaveBeenCalled();
903
+ const clearTimeoutSpy = vi.spyOn(global, 'clearTimeout');
839
904
  await unmount();
840
- expect(vi.getTimerCount()).toBe(0);
841
- act(() => {
905
+ expect(clearTimeoutSpy).toHaveBeenCalled();
906
+ await act(async () => {
842
907
  vi.advanceTimersByTime(1000);
843
908
  });
909
+ // No waitUntilReady here as component is unmounted
844
910
  expect(mockOnSelect).not.toHaveBeenCalled();
845
911
  });
846
912
  });