@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
@@ -182,58 +182,67 @@ describe('SettingsDialog', () => {
182
182
  vi.resetAllMocks();
183
183
  });
184
184
  describe('Initial Rendering', () => {
185
- it('should render the settings dialog with default state', () => {
185
+ it('should render the settings dialog with default state', async () => {
186
186
  const settings = createMockSettings();
187
187
  const onSelect = vi.fn();
188
- const { lastFrame } = renderDialog(settings, onSelect);
188
+ const { lastFrame, waitUntilReady, unmount } = renderDialog(settings, onSelect);
189
+ await waitUntilReady();
189
190
  const output = lastFrame();
190
191
  expect(output).toContain('Settings');
191
192
  expect(output).toContain('Apply To');
192
193
  // Use regex for more flexible help text matching
193
194
  expect(output).toMatch(/Enter.*select.*Esc.*close/);
195
+ unmount();
194
196
  });
195
- it('should accept availableTerminalHeight prop without errors', () => {
197
+ it('should accept availableTerminalHeight prop without errors', async () => {
196
198
  const settings = createMockSettings();
197
199
  const onSelect = vi.fn();
198
- const { lastFrame } = renderDialog(settings, onSelect, {
200
+ const { lastFrame, waitUntilReady, unmount } = renderDialog(settings, onSelect, {
199
201
  availableTerminalHeight: 20,
200
202
  });
203
+ await waitUntilReady();
201
204
  const output = lastFrame();
202
205
  // Should still render properly with the height prop
203
206
  expect(output).toContain('Settings');
204
207
  // Use regex for more flexible help text matching
205
208
  expect(output).toMatch(/Enter.*select.*Esc.*close/);
209
+ unmount();
206
210
  });
207
- it('should render settings list with visual indicators', () => {
211
+ it('should render settings list with visual indicators', async () => {
208
212
  const settings = createMockSettings();
209
213
  const onSelect = vi.fn();
210
- const { lastFrame } = renderDialog(settings, onSelect);
214
+ const { lastFrame, waitUntilReady, unmount } = renderDialog(settings, onSelect);
215
+ await waitUntilReady();
211
216
  const output = lastFrame();
212
217
  // Use snapshot to capture visual layout including indicators
213
218
  expect(output).toMatchSnapshot();
219
+ unmount();
214
220
  });
215
221
  it('should use almost full height of the window but no more when the window height is 25 rows', async () => {
216
222
  const settings = createMockSettings();
217
223
  const onSelect = vi.fn();
218
224
  // Render with a fixed height of 25 rows
219
- const { lastFrame } = renderDialog(settings, onSelect, {
225
+ const { lastFrame, waitUntilReady, unmount } = renderDialog(settings, onSelect, {
220
226
  availableTerminalHeight: 25,
221
227
  });
228
+ await waitUntilReady();
222
229
  // Wait for the dialog to render
223
230
  await waitFor(() => {
224
231
  const output = lastFrame();
225
232
  expect(output).toBeDefined();
226
- const lines = output.split('\n');
233
+ const lines = output.trim().split('\n');
227
234
  expect(lines.length).toBeGreaterThanOrEqual(24);
228
235
  expect(lines.length).toBeLessThanOrEqual(25);
229
236
  });
237
+ unmount();
230
238
  });
231
239
  });
232
240
  describe('Setting Descriptions', () => {
233
- it('should render descriptions for settings that have them', () => {
241
+ it('should render descriptions for settings that have them', async () => {
234
242
  const settings = createMockSettings();
235
243
  const onSelect = vi.fn();
236
- const { lastFrame } = renderDialog(settings, onSelect);
244
+ const { lastFrame, waitUntilReady, unmount } = renderDialog(settings, onSelect);
245
+ await waitUntilReady();
237
246
  const output = lastFrame();
238
247
  // 'general.vimMode' has description 'Enable Vim keybindings' in settingsSchema.ts
239
248
  expect(output).toContain('Vim Mode');
@@ -241,6 +250,7 @@ describe('SettingsDialog', () => {
241
250
  // 'general.enableAutoUpdate' has description 'Enable automatic updates.'
242
251
  expect(output).toContain('Enable Auto Update');
243
252
  expect(output).toContain('Enable automatic updates.');
253
+ unmount();
244
254
  });
245
255
  });
246
256
  describe('Settings Navigation', () => {
@@ -258,20 +268,23 @@ describe('SettingsDialog', () => {
258
268
  ])('should navigate with $name', async ({ down, up }) => {
259
269
  const settings = createMockSettings();
260
270
  const onSelect = vi.fn();
261
- const { stdin, unmount, lastFrame } = renderDialog(settings, onSelect);
271
+ const { stdin, unmount, lastFrame, waitUntilReady } = renderDialog(settings, onSelect);
272
+ await waitUntilReady();
262
273
  const initialFrame = lastFrame();
263
274
  expect(initialFrame).toContain('Vim Mode');
264
275
  // Navigate down
265
- act(() => {
276
+ await act(async () => {
266
277
  stdin.write(down);
267
278
  });
279
+ await waitUntilReady();
268
280
  await waitFor(() => {
269
281
  expect(lastFrame()).toContain('Enable Auto Update');
270
282
  });
271
283
  // Navigate up
272
- act(() => {
284
+ await act(async () => {
273
285
  stdin.write(up);
274
286
  });
287
+ await waitUntilReady();
275
288
  await waitFor(() => {
276
289
  expect(lastFrame()).toContain('Vim Mode');
277
290
  });
@@ -280,11 +293,13 @@ describe('SettingsDialog', () => {
280
293
  it('wraps around when at the top of the list', async () => {
281
294
  const settings = createMockSettings();
282
295
  const onSelect = vi.fn();
283
- const { stdin, unmount, lastFrame } = renderDialog(settings, onSelect);
296
+ const { stdin, unmount, lastFrame, waitUntilReady } = renderDialog(settings, onSelect);
297
+ await waitUntilReady();
284
298
  // Try to go up from first item
285
- act(() => {
299
+ await act(async () => {
286
300
  stdin.write(TerminalKeys.UP_ARROW);
287
301
  });
302
+ await waitUntilReady();
288
303
  await waitFor(() => {
289
304
  // Should wrap to last setting (without relying on exact bullet character)
290
305
  expect(lastFrame()).toContain('Hook Notifications');
@@ -297,15 +312,17 @@ describe('SettingsDialog', () => {
297
312
  vi.mocked(saveModifiedSettings).mockClear();
298
313
  const settings = createMockSettings();
299
314
  const onSelect = vi.fn();
300
- const { stdin, unmount, lastFrame } = renderDialog(settings, onSelect);
315
+ const { stdin, unmount, lastFrame, waitUntilReady } = renderDialog(settings, onSelect);
316
+ await waitUntilReady();
301
317
  // Wait for initial render and verify we're on Vim Mode (first setting)
302
318
  await waitFor(() => {
303
319
  expect(lastFrame()).toContain('Vim Mode');
304
320
  });
305
321
  // Toggle the setting (Vim Mode is the first setting now)
306
- act(() => {
322
+ await act(async () => {
307
323
  stdin.write(TerminalKeys.ENTER);
308
324
  });
325
+ await waitUntilReady();
309
326
  // Wait for the setting change to be processed
310
327
  await waitFor(() => {
311
328
  expect(vi.mocked(saveModifiedSettings).mock.calls.length).toBeGreaterThan(0);
@@ -341,11 +358,16 @@ describe('SettingsDialog', () => {
341
358
  settings.setValue(SettingScope.User, 'ui.theme', initialValue);
342
359
  }
343
360
  const onSelect = vi.fn();
344
- const { stdin, unmount } = renderDialog(settings, onSelect);
345
- act(() => {
361
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
362
+ await waitUntilReady();
363
+ await act(async () => {
346
364
  stdin.write(TerminalKeys.DOWN_ARROW);
365
+ });
366
+ await waitUntilReady();
367
+ await act(async () => {
347
368
  stdin.write(TerminalKeys.ENTER);
348
369
  });
370
+ await waitUntilReady();
349
371
  await waitFor(() => {
350
372
  expect(vi.mocked(saveModifiedSettings)).toHaveBeenCalled();
351
373
  });
@@ -360,12 +382,14 @@ describe('SettingsDialog', () => {
360
382
  it('should handle vim mode setting specially', async () => {
361
383
  const settings = createMockSettings();
362
384
  const onSelect = vi.fn();
363
- const { stdin, unmount } = renderDialog(settings, onSelect);
385
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
386
+ await waitUntilReady();
364
387
  // Navigate to vim mode setting and toggle it
365
388
  // This would require knowing the exact position, so we'll just test that the mock is called
366
- act(() => {
389
+ await act(async () => {
367
390
  stdin.write(TerminalKeys.ENTER); // Enter key
368
391
  });
392
+ await waitUntilReady();
369
393
  // The mock should potentially be called if vim mode was toggled
370
394
  unmount();
371
395
  });
@@ -374,19 +398,22 @@ describe('SettingsDialog', () => {
374
398
  it('should switch between scopes', async () => {
375
399
  const settings = createMockSettings();
376
400
  const onSelect = vi.fn();
377
- const { stdin, unmount } = renderDialog(settings, onSelect);
401
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
402
+ await waitUntilReady();
378
403
  // Switch to scope focus
379
- act(() => {
404
+ await act(async () => {
380
405
  stdin.write(TerminalKeys.TAB); // Tab key
381
406
  // Select different scope (numbers 1-3 typically available)
382
407
  stdin.write('2'); // Select second scope option
383
408
  });
409
+ await waitUntilReady();
384
410
  unmount();
385
411
  });
386
412
  it('should reset to settings focus when scope is selected', async () => {
387
413
  const settings = createMockSettings();
388
414
  const onSelect = vi.fn();
389
- const { lastFrame, unmount } = renderDialog(settings, onSelect);
415
+ const { lastFrame, unmount, waitUntilReady } = renderDialog(settings, onSelect);
416
+ await waitUntilReady();
390
417
  // Wait for initial render
391
418
  await waitFor(() => {
392
419
  expect(lastFrame()).toContain('Vim Mode');
@@ -403,9 +430,10 @@ describe('SettingsDialog', () => {
403
430
  it('should show restart prompt for restart-required settings', async () => {
404
431
  const settings = createMockSettings();
405
432
  const onRestartRequest = vi.fn();
406
- const { unmount } = renderDialog(settings, vi.fn(), {
433
+ const { unmount, waitUntilReady } = renderDialog(settings, vi.fn(), {
407
434
  onRestartRequest,
408
435
  });
436
+ await waitUntilReady();
409
437
  // This test would need to trigger a restart-required setting change
410
438
  // The exact steps depend on which settings require restart
411
439
  unmount();
@@ -413,13 +441,15 @@ describe('SettingsDialog', () => {
413
441
  it('should handle restart request when r is pressed', async () => {
414
442
  const settings = createMockSettings();
415
443
  const onRestartRequest = vi.fn();
416
- const { stdin, unmount } = renderDialog(settings, vi.fn(), {
444
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, vi.fn(), {
417
445
  onRestartRequest,
418
446
  });
447
+ await waitUntilReady();
419
448
  // Press 'r' key (this would only work if restart prompt is showing)
420
- act(() => {
449
+ await act(async () => {
421
450
  stdin.write('r');
422
451
  });
452
+ await waitUntilReady();
423
453
  // If restart prompt was showing, onRestartRequest should be called
424
454
  unmount();
425
455
  });
@@ -428,7 +458,8 @@ describe('SettingsDialog', () => {
428
458
  it('should call onSelect with undefined when Escape is pressed', async () => {
429
459
  const settings = createMockSettings();
430
460
  const onSelect = vi.fn();
431
- const { lastFrame, unmount } = renderDialog(settings, onSelect);
461
+ const { lastFrame, unmount, waitUntilReady } = renderDialog(settings, onSelect);
462
+ await waitUntilReady();
432
463
  // Wait for initial render
433
464
  await waitFor(() => {
434
465
  expect(lastFrame()).toContain('Vim Mode');
@@ -445,16 +476,18 @@ describe('SettingsDialog', () => {
445
476
  it('should persist settings across scope changes', async () => {
446
477
  const settings = createMockSettings({ vimMode: true });
447
478
  const onSelect = vi.fn();
448
- const { stdin, unmount } = renderDialog(settings, onSelect);
479
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
480
+ await waitUntilReady();
449
481
  // Switch to scope selector and change scope
450
- act(() => {
482
+ await act(async () => {
451
483
  stdin.write(TerminalKeys.TAB); // Tab
452
484
  stdin.write('2'); // Select workspace scope
453
485
  });
486
+ await waitUntilReady();
454
487
  // Settings should be reloaded for new scope
455
488
  unmount();
456
489
  });
457
- it('should show different values for different scopes', () => {
490
+ it('should show different values for different scopes', async () => {
458
491
  const settings = createMockSettings({
459
492
  user: {
460
493
  settings: { vimMode: true },
@@ -473,10 +506,12 @@ describe('SettingsDialog', () => {
473
506
  },
474
507
  });
475
508
  const onSelect = vi.fn();
476
- const { lastFrame } = renderDialog(settings, onSelect);
509
+ const { lastFrame, waitUntilReady, unmount } = renderDialog(settings, onSelect);
510
+ await waitUntilReady();
477
511
  // Should show user scope values initially
478
512
  const output = lastFrame();
479
513
  expect(output).toContain('Settings');
514
+ unmount();
480
515
  });
481
516
  });
482
517
  describe('Error Handling', () => {
@@ -484,11 +519,13 @@ describe('SettingsDialog', () => {
484
519
  mockToggleVimEnabled.mockRejectedValue(new Error('Toggle failed'));
485
520
  const settings = createMockSettings();
486
521
  const onSelect = vi.fn();
487
- const { stdin, unmount } = renderDialog(settings, onSelect);
522
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
523
+ await waitUntilReady();
488
524
  // Try to toggle a setting (this might trigger vim mode toggle)
489
- act(() => {
525
+ await act(async () => {
490
526
  stdin.write(TerminalKeys.ENTER); // Enter
491
527
  });
528
+ await waitUntilReady();
492
529
  // Should not crash
493
530
  unmount();
494
531
  });
@@ -497,26 +534,36 @@ describe('SettingsDialog', () => {
497
534
  it('should track modified settings correctly', async () => {
498
535
  const settings = createMockSettings();
499
536
  const onSelect = vi.fn();
500
- const { stdin, unmount } = renderDialog(settings, onSelect);
537
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
538
+ await waitUntilReady();
501
539
  // Toggle a setting, then toggle another setting
502
- act(() => {
540
+ await act(async () => {
503
541
  stdin.write(TerminalKeys.ENTER); // Enter
542
+ });
543
+ await waitUntilReady();
544
+ await act(async () => {
504
545
  stdin.write(TerminalKeys.DOWN_ARROW); // Down
546
+ });
547
+ await waitUntilReady();
548
+ await act(async () => {
505
549
  stdin.write(TerminalKeys.ENTER); // Enter
506
550
  });
551
+ await waitUntilReady();
507
552
  // Should track multiple modified settings
508
553
  unmount();
509
554
  });
510
555
  it('should handle scrolling when there are many settings', async () => {
511
556
  const settings = createMockSettings();
512
557
  const onSelect = vi.fn();
513
- const { stdin, unmount } = renderDialog(settings, onSelect);
558
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
559
+ await waitUntilReady();
514
560
  // Navigate down many times to test scrolling
515
- act(() => {
561
+ await act(async () => {
516
562
  for (let i = 0; i < 10; i++) {
517
563
  stdin.write(TerminalKeys.DOWN_ARROW); // Down arrow
518
564
  }
519
565
  });
566
+ await waitUntilReady();
520
567
  unmount();
521
568
  });
522
569
  });
@@ -524,17 +571,19 @@ describe('SettingsDialog', () => {
524
571
  it('should sync with VimModeContext when vim mode is toggled', async () => {
525
572
  const settings = createMockSettings();
526
573
  const onSelect = vi.fn();
527
- const { stdin, unmount } = render(_jsx(VimModeProvider, { settings: settings, children: _jsx(KeypressProvider, { children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }) }));
574
+ const { stdin, unmount, waitUntilReady } = render(_jsx(VimModeProvider, { settings: settings, children: _jsx(KeypressProvider, { children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }) }));
575
+ await waitUntilReady();
528
576
  // Navigate to and toggle vim mode setting
529
577
  // This would require knowing the exact position of vim mode setting
530
- act(() => {
578
+ await act(async () => {
531
579
  stdin.write(TerminalKeys.ENTER); // Enter
532
580
  });
581
+ await waitUntilReady();
533
582
  unmount();
534
583
  });
535
584
  });
536
585
  describe('Specific Settings Behavior', () => {
537
- it('should show correct display values for settings with different states', () => {
586
+ it('should show correct display values for settings with different states', async () => {
538
587
  const settings = createMockSettings({
539
588
  user: {
540
589
  settings: { vimMode: true, hideTips: false },
@@ -553,26 +602,31 @@ describe('SettingsDialog', () => {
553
602
  },
554
603
  });
555
604
  const onSelect = vi.fn();
556
- const { lastFrame } = renderDialog(settings, onSelect);
605
+ const { lastFrame, waitUntilReady, unmount } = renderDialog(settings, onSelect);
606
+ await waitUntilReady();
557
607
  const output = lastFrame();
558
608
  // Should contain settings labels
559
609
  expect(output).toContain('Settings');
610
+ unmount();
560
611
  });
561
612
  it('should handle immediate settings save for non-restart-required settings', async () => {
562
613
  const settings = createMockSettings();
563
614
  const onSelect = vi.fn();
564
- const { stdin, unmount } = renderDialog(settings, onSelect);
615
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
616
+ await waitUntilReady();
565
617
  // Toggle a non-restart-required setting (like hideTips)
566
- act(() => {
618
+ await act(async () => {
567
619
  stdin.write(TerminalKeys.ENTER); // Enter - toggle current setting
568
620
  });
621
+ await waitUntilReady();
569
622
  // Should save immediately without showing restart prompt
570
623
  unmount();
571
624
  });
572
625
  it('should show restart prompt for restart-required settings', async () => {
573
626
  const settings = createMockSettings();
574
627
  const onSelect = vi.fn();
575
- const { lastFrame, unmount } = renderDialog(settings, onSelect);
628
+ const { lastFrame, unmount, waitUntilReady } = renderDialog(settings, onSelect);
629
+ await waitUntilReady();
576
630
  // This test would need to navigate to a specific restart-required setting
577
631
  // Since we can't easily target specific settings, we test the general behavior
578
632
  // Should not show restart prompt initially
@@ -584,13 +638,14 @@ describe('SettingsDialog', () => {
584
638
  it('should clear restart prompt when switching scopes', async () => {
585
639
  const settings = createMockSettings();
586
640
  const onSelect = vi.fn();
587
- const { unmount } = renderDialog(settings, onSelect);
641
+ const { unmount, waitUntilReady } = renderDialog(settings, onSelect);
642
+ await waitUntilReady();
588
643
  // Restart prompt should be cleared when switching scopes
589
644
  unmount();
590
645
  });
591
646
  });
592
647
  describe('Settings Display Values', () => {
593
- it('should show correct values for inherited settings', () => {
648
+ it('should show correct values for inherited settings', async () => {
594
649
  const settings = createMockSettings({
595
650
  system: {
596
651
  settings: { vimMode: true, hideWindowTitle: false },
@@ -599,12 +654,14 @@ describe('SettingsDialog', () => {
599
654
  },
600
655
  });
601
656
  const onSelect = vi.fn();
602
- const { lastFrame } = renderDialog(settings, onSelect);
657
+ const { lastFrame, waitUntilReady, unmount } = renderDialog(settings, onSelect);
658
+ await waitUntilReady();
603
659
  const output = lastFrame();
604
660
  // Settings should show inherited values
605
661
  expect(output).toContain('Settings');
662
+ unmount();
606
663
  });
607
- it('should show override indicator for overridden settings', () => {
664
+ it('should show override indicator for overridden settings', async () => {
608
665
  const settings = createMockSettings({
609
666
  user: {
610
667
  settings: { vimMode: false },
@@ -618,10 +675,12 @@ describe('SettingsDialog', () => {
618
675
  },
619
676
  });
620
677
  const onSelect = vi.fn();
621
- const { lastFrame } = renderDialog(settings, onSelect);
678
+ const { lastFrame, waitUntilReady, unmount } = renderDialog(settings, onSelect);
679
+ await waitUntilReady();
622
680
  const output = lastFrame();
623
681
  // Should show settings with override indicators
624
682
  expect(output).toContain('Settings');
683
+ unmount();
625
684
  });
626
685
  });
627
686
  describe('Race Condition Regression Tests', () => {
@@ -659,11 +718,13 @@ describe('SettingsDialog', () => {
659
718
  },
660
719
  });
661
720
  const onSelect = vi.fn();
662
- const { stdin, unmount } = renderDialog(settings, onSelect);
721
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
722
+ await waitUntilReady();
663
723
  for (let i = 0; i < toggleCount; i++) {
664
- act(() => {
724
+ await act(async () => {
665
725
  stdin.write(TerminalKeys.ENTER);
666
726
  });
727
+ await waitUntilReady();
667
728
  }
668
729
  await waitFor(() => {
669
730
  expect(vi.mocked(saveModifiedSettings).mock.calls.length).toBeGreaterThan(0);
@@ -688,14 +749,16 @@ describe('SettingsDialog', () => {
688
749
  it('should handle rapid key presses gracefully', async () => {
689
750
  const settings = createMockSettings();
690
751
  const onSelect = vi.fn();
691
- const { stdin, unmount } = renderDialog(settings, onSelect);
752
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
753
+ await waitUntilReady();
692
754
  // Rapid navigation
693
- act(() => {
755
+ await act(async () => {
694
756
  for (let i = 0; i < 5; i++) {
695
757
  stdin.write(TerminalKeys.DOWN_ARROW);
696
758
  stdin.write(TerminalKeys.UP_ARROW);
697
759
  }
698
760
  });
761
+ await waitUntilReady();
699
762
  // Should not crash
700
763
  unmount();
701
764
  });
@@ -705,28 +768,36 @@ describe('SettingsDialog', () => {
705
768
  ])('should handle $key to reset current setting to default', async ({ code }) => {
706
769
  const settings = createMockSettings({ vimMode: true });
707
770
  const onSelect = vi.fn();
708
- const { stdin, unmount } = renderDialog(settings, onSelect);
709
- act(() => {
771
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
772
+ await waitUntilReady();
773
+ await act(async () => {
710
774
  stdin.write(code);
711
775
  });
776
+ await waitUntilReady();
712
777
  // Should reset the current setting to its default value
713
778
  unmount();
714
779
  });
715
780
  it('should handle navigation when only one setting exists', async () => {
716
781
  const settings = createMockSettings();
717
782
  const onSelect = vi.fn();
718
- const { stdin, unmount } = renderDialog(settings, onSelect);
783
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
784
+ await waitUntilReady();
719
785
  // Try to navigate when potentially at bounds
720
- act(() => {
786
+ await act(async () => {
721
787
  stdin.write(TerminalKeys.DOWN_ARROW);
788
+ });
789
+ await waitUntilReady();
790
+ await act(async () => {
722
791
  stdin.write(TerminalKeys.UP_ARROW);
723
792
  });
793
+ await waitUntilReady();
724
794
  unmount();
725
795
  });
726
796
  it('should properly handle Tab navigation between sections', async () => {
727
797
  const settings = createMockSettings();
728
798
  const onSelect = vi.fn();
729
- const { lastFrame, unmount } = renderDialog(settings, onSelect);
799
+ const { lastFrame, unmount, waitUntilReady } = renderDialog(settings, onSelect);
800
+ await waitUntilReady();
730
801
  // Wait for initial render
731
802
  await waitFor(() => {
732
803
  expect(lastFrame()).toContain('Vim Mode');
@@ -740,7 +811,7 @@ describe('SettingsDialog', () => {
740
811
  });
741
812
  });
742
813
  describe('Error Recovery', () => {
743
- it('should handle malformed settings gracefully', () => {
814
+ it('should handle malformed settings gracefully', async () => {
744
815
  // Create settings with potentially problematic values
745
816
  const settings = createMockSettings({
746
817
  user: {
@@ -750,23 +821,28 @@ describe('SettingsDialog', () => {
750
821
  },
751
822
  });
752
823
  const onSelect = vi.fn();
753
- const { lastFrame } = renderDialog(settings, onSelect);
824
+ const { lastFrame, waitUntilReady, unmount } = renderDialog(settings, onSelect);
825
+ await waitUntilReady();
754
826
  // Should still render without crashing
755
827
  expect(lastFrame()).toContain('Settings');
828
+ unmount();
756
829
  });
757
- it('should handle missing setting definitions gracefully', () => {
830
+ it('should handle missing setting definitions gracefully', async () => {
758
831
  const settings = createMockSettings();
759
832
  const onSelect = vi.fn();
760
833
  // Should not crash even if some settings are missing definitions
761
- const { lastFrame } = renderDialog(settings, onSelect);
834
+ const { lastFrame, waitUntilReady, unmount } = renderDialog(settings, onSelect);
835
+ await waitUntilReady();
762
836
  expect(lastFrame()).toContain('Settings');
837
+ unmount();
763
838
  });
764
839
  });
765
840
  describe('Complex User Interactions', () => {
766
841
  it('should handle complete user workflow: navigate, toggle, change scope, exit', async () => {
767
842
  const settings = createMockSettings();
768
843
  const onSelect = vi.fn();
769
- const { lastFrame, unmount } = renderDialog(settings, onSelect);
844
+ const { lastFrame, unmount, waitUntilReady } = renderDialog(settings, onSelect);
845
+ await waitUntilReady();
770
846
  // Wait for initial render
771
847
  await waitFor(() => {
772
848
  expect(lastFrame()).toContain('Vim Mode');
@@ -785,15 +861,29 @@ describe('SettingsDialog', () => {
785
861
  it('should allow changing multiple settings without losing pending changes', async () => {
786
862
  const settings = createMockSettings();
787
863
  const onSelect = vi.fn();
788
- const { stdin, unmount } = renderDialog(settings, onSelect);
864
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
865
+ await waitUntilReady();
789
866
  // Toggle multiple settings
790
- act(() => {
867
+ await act(async () => {
791
868
  stdin.write(TerminalKeys.ENTER); // Enter
869
+ });
870
+ await waitUntilReady();
871
+ await act(async () => {
792
872
  stdin.write(TerminalKeys.DOWN_ARROW); // Down
873
+ });
874
+ await waitUntilReady();
875
+ await act(async () => {
793
876
  stdin.write(TerminalKeys.ENTER); // Enter
877
+ });
878
+ await waitUntilReady();
879
+ await act(async () => {
794
880
  stdin.write(TerminalKeys.DOWN_ARROW); // Down
881
+ });
882
+ await waitUntilReady();
883
+ await act(async () => {
795
884
  stdin.write(TerminalKeys.ENTER); // Enter
796
885
  });
886
+ await waitUntilReady();
797
887
  // The test verifies that all changes are preserved and the dialog still works
798
888
  // This tests the fix for the bug where changing one setting would reset all pending changes
799
889
  unmount();
@@ -801,28 +891,44 @@ describe('SettingsDialog', () => {
801
891
  it('should maintain state consistency during complex interactions', async () => {
802
892
  const settings = createMockSettings({ vimMode: true });
803
893
  const onSelect = vi.fn();
804
- const { stdin, unmount } = renderDialog(settings, onSelect);
894
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
895
+ await waitUntilReady();
805
896
  // Multiple scope changes
806
- act(() => {
897
+ await act(async () => {
807
898
  stdin.write(TerminalKeys.TAB); // Tab to scope
899
+ });
900
+ await waitUntilReady();
901
+ await act(async () => {
808
902
  stdin.write('2'); // Workspace
903
+ });
904
+ await waitUntilReady();
905
+ await act(async () => {
809
906
  stdin.write(TerminalKeys.TAB); // Tab to settings
907
+ });
908
+ await waitUntilReady();
909
+ await act(async () => {
810
910
  stdin.write(TerminalKeys.TAB); // Tab to scope
911
+ });
912
+ await waitUntilReady();
913
+ await act(async () => {
811
914
  stdin.write('1'); // User
812
915
  });
916
+ await waitUntilReady();
813
917
  // Should maintain consistent state
814
918
  unmount();
815
919
  });
816
920
  it('should handle restart workflow correctly', async () => {
817
921
  const settings = createMockSettings();
818
922
  const onRestartRequest = vi.fn();
819
- const { stdin, unmount } = renderDialog(settings, vi.fn(), {
923
+ const { stdin, unmount, waitUntilReady } = renderDialog(settings, vi.fn(), {
820
924
  onRestartRequest,
821
925
  });
926
+ await waitUntilReady();
822
927
  // This would test the restart workflow if we could trigger it
823
- act(() => {
928
+ await act(async () => {
824
929
  stdin.write('r'); // Try restart key
825
930
  });
931
+ await waitUntilReady();
826
932
  // Without restart prompt showing, this should have no effect
827
933
  expect(onRestartRequest).not.toHaveBeenCalled();
828
934
  unmount();
@@ -833,28 +939,32 @@ describe('SettingsDialog', () => {
833
939
  vi.mocked(getSettingsSchema).mockReturnValue(TOOLS_SHELL_FAKE_SCHEMA);
834
940
  const settings = createMockSettings();
835
941
  const onRestartRequest = vi.fn();
836
- const { stdin, lastFrame, unmount } = renderDialog(settings, vi.fn(), {
942
+ const { stdin, lastFrame, unmount, waitUntilReady } = renderDialog(settings, vi.fn(), {
837
943
  onRestartRequest,
838
944
  });
945
+ await waitUntilReady();
839
946
  // Wait for initial render
840
947
  await waitFor(() => expect(lastFrame()).toContain('Show Color'));
841
948
  // Navigate to "Enable Interactive Shell" (second item in TOOLS_SHELL_FAKE_SCHEMA)
842
- act(() => {
949
+ await act(async () => {
843
950
  stdin.write(TerminalKeys.DOWN_ARROW);
844
951
  });
952
+ await waitUntilReady();
845
953
  // Wait for navigation to complete
846
954
  await waitFor(() => expect(lastFrame()).toContain('● Enable Interactive Shell'));
847
955
  // Toggle it to trigger restart required
848
- act(() => {
956
+ await act(async () => {
849
957
  stdin.write(TerminalKeys.ENTER);
850
958
  });
959
+ await waitUntilReady();
851
960
  await waitFor(() => {
852
961
  expect(lastFrame()).toContain('To see changes, Gemini CLI must be restarted');
853
962
  });
854
963
  // Press 'r' - it should call onRestartRequest, NOT be handled by search
855
- act(() => {
964
+ await act(async () => {
856
965
  stdin.write('r');
857
966
  });
967
+ await waitUntilReady();
858
968
  await waitFor(() => {
859
969
  expect(onRestartRequest).toHaveBeenCalled();
860
970
  });
@@ -863,17 +973,20 @@ describe('SettingsDialog', () => {
863
973
  it('should hide search box when showRestartPrompt is true', async () => {
864
974
  vi.mocked(getSettingsSchema).mockReturnValue(TOOLS_SHELL_FAKE_SCHEMA);
865
975
  const settings = createMockSettings();
866
- const { stdin, lastFrame, unmount } = renderDialog(settings, vi.fn());
976
+ const { stdin, lastFrame, unmount, waitUntilReady } = renderDialog(settings, vi.fn());
977
+ await waitUntilReady();
867
978
  // Search box should be visible initially (searchPlaceholder)
868
979
  expect(lastFrame()).toContain('Search to filter');
869
980
  // Navigate to "Enable Interactive Shell" and toggle it
870
- act(() => {
981
+ await act(async () => {
871
982
  stdin.write(TerminalKeys.DOWN_ARROW);
872
983
  });
984
+ await waitUntilReady();
873
985
  await waitFor(() => expect(lastFrame()).toContain('● Enable Interactive Shell'));
874
- act(() => {
986
+ await act(async () => {
875
987
  stdin.write(TerminalKeys.ENTER);
876
988
  });
989
+ await waitUntilReady();
877
990
  await waitFor(() => {
878
991
  expect(lastFrame()).toContain('To see changes, Gemini CLI must be restarted');
879
992
  });
@@ -884,33 +997,51 @@ describe('SettingsDialog', () => {
884
997
  });
885
998
  describe('String Settings Editing', () => {
886
999
  it('should allow editing and committing a string setting', async () => {
887
- let settings = createMockSettings({ 'a.string.setting': 'initial' });
1000
+ let settings = createMockSettings({
1001
+ 'general.sessionCleanup.maxAge': 'initial',
1002
+ });
888
1003
  const onSelect = vi.fn();
889
- const { stdin, unmount, rerender } = render(_jsx(KeypressProvider, { children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
890
- // Navigate to the last setting
891
- act(() => {
892
- for (let i = 0; i < 20; i++) {
893
- stdin.write('j'); // Down
894
- }
1004
+ const { stdin, unmount, rerender, waitUntilReady } = render(_jsx(KeypressProvider, { children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
1005
+ await waitUntilReady();
1006
+ // Search for 'chat history' to filter the list
1007
+ await act(async () => {
1008
+ stdin.write('chat history');
1009
+ });
1010
+ await waitUntilReady();
1011
+ // Press Down Arrow to focus the list
1012
+ await act(async () => {
1013
+ stdin.write(TerminalKeys.DOWN_ARROW);
895
1014
  });
1015
+ await waitUntilReady();
896
1016
  // Press Enter to start editing, type new value, and commit
897
- act(() => {
1017
+ await act(async () => {
898
1018
  stdin.write('\r'); // Start editing
1019
+ });
1020
+ await waitUntilReady();
1021
+ await act(async () => {
899
1022
  stdin.write('new value');
1023
+ });
1024
+ await waitUntilReady();
1025
+ await act(async () => {
900
1026
  stdin.write('\r'); // Commit
901
1027
  });
1028
+ await waitUntilReady();
902
1029
  settings = createMockSettings({
903
1030
  user: {
904
- settings: { 'a.string.setting': 'new value' },
905
- originalSettings: { 'a.string.setting': 'new value' },
1031
+ settings: { 'general.sessionCleanup.maxAge': 'new value' },
1032
+ originalSettings: { 'general.sessionCleanup.maxAge': 'new value' },
906
1033
  path: '',
907
1034
  },
908
1035
  });
909
- rerender(_jsx(KeypressProvider, { children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
1036
+ await act(async () => {
1037
+ rerender(_jsx(KeypressProvider, { children: _jsx(SettingsDialog, { settings: settings, onSelect: onSelect }) }));
1038
+ });
1039
+ await waitUntilReady();
910
1040
  // Press Escape to exit
911
- act(() => {
1041
+ await act(async () => {
912
1042
  stdin.write('\u001B');
913
1043
  });
1044
+ await waitUntilReady();
914
1045
  await waitFor(() => {
915
1046
  expect(onSelect).toHaveBeenCalledWith(undefined, 'User');
916
1047
  });
@@ -921,16 +1052,18 @@ describe('SettingsDialog', () => {
921
1052
  it('should display text entered in search', async () => {
922
1053
  const settings = createMockSettings();
923
1054
  const onSelect = vi.fn();
924
- const { lastFrame, stdin, unmount } = renderDialog(settings, onSelect);
1055
+ const { lastFrame, stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
1056
+ await waitUntilReady();
925
1057
  // Wait for initial render and verify that search is not active
926
1058
  await waitFor(() => {
927
1059
  expect(lastFrame()).not.toContain('> Search:');
928
1060
  });
929
1061
  expect(lastFrame()).toContain('Search to filter');
930
1062
  // Press '/' to enter search mode
931
- act(() => {
1063
+ await act(async () => {
932
1064
  stdin.write('/');
933
1065
  });
1066
+ await waitUntilReady();
934
1067
  await waitFor(() => {
935
1068
  expect(lastFrame()).toContain('/');
936
1069
  expect(lastFrame()).not.toContain('Search to filter');
@@ -940,10 +1073,12 @@ describe('SettingsDialog', () => {
940
1073
  it('should show search query and filter settings as user types', async () => {
941
1074
  const settings = createMockSettings();
942
1075
  const onSelect = vi.fn();
943
- const { lastFrame, stdin, unmount } = renderDialog(settings, onSelect);
944
- act(() => {
1076
+ const { lastFrame, stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
1077
+ await waitUntilReady();
1078
+ await act(async () => {
945
1079
  stdin.write('yolo');
946
1080
  });
1081
+ await waitUntilReady();
947
1082
  await waitFor(() => {
948
1083
  expect(lastFrame()).toContain('yolo');
949
1084
  expect(lastFrame()).toContain('Disable YOLO Mode');
@@ -953,17 +1088,20 @@ describe('SettingsDialog', () => {
953
1088
  it('should exit search settings when Escape is pressed', async () => {
954
1089
  const settings = createMockSettings();
955
1090
  const onSelect = vi.fn();
956
- const { lastFrame, stdin, unmount } = renderDialog(settings, onSelect);
957
- act(() => {
1091
+ const { lastFrame, stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
1092
+ await waitUntilReady();
1093
+ await act(async () => {
958
1094
  stdin.write('vim');
959
1095
  });
1096
+ await waitUntilReady();
960
1097
  await waitFor(() => {
961
1098
  expect(lastFrame()).toContain('vim');
962
1099
  });
963
1100
  // Press Escape
964
- act(() => {
1101
+ await act(async () => {
965
1102
  stdin.write(TerminalKeys.ESCAPE);
966
1103
  });
1104
+ await waitUntilReady();
967
1105
  await waitFor(() => {
968
1106
  // onSelect is called with (settingName, scope).
969
1107
  // undefined settingName means "close dialog"
@@ -974,17 +1112,20 @@ describe('SettingsDialog', () => {
974
1112
  it('should handle backspace to modify search query', async () => {
975
1113
  const settings = createMockSettings();
976
1114
  const onSelect = vi.fn();
977
- const { lastFrame, stdin, unmount } = renderDialog(settings, onSelect);
978
- act(() => {
1115
+ const { lastFrame, stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
1116
+ await waitUntilReady();
1117
+ await act(async () => {
979
1118
  stdin.write('vimm');
980
1119
  });
1120
+ await waitUntilReady();
981
1121
  await waitFor(() => {
982
1122
  expect(lastFrame()).toContain('vimm');
983
1123
  });
984
1124
  // Press backspace
985
- act(() => {
1125
+ await act(async () => {
986
1126
  stdin.write(TerminalKeys.BACKSPACE);
987
1127
  });
1128
+ await waitUntilReady();
988
1129
  await waitFor(() => {
989
1130
  expect(lastFrame()).toContain('vim');
990
1131
  expect(lastFrame()).toContain('Vim Mode');
@@ -995,14 +1136,15 @@ describe('SettingsDialog', () => {
995
1136
  it('should display nothing when search yields no results', async () => {
996
1137
  const settings = createMockSettings();
997
1138
  const onSelect = vi.fn();
998
- const { lastFrame, stdin, unmount } = renderDialog(settings, onSelect);
1139
+ const { lastFrame, stdin, unmount, waitUntilReady } = renderDialog(settings, onSelect);
1140
+ await waitUntilReady();
999
1141
  // Type a search query that won't match any settings
1000
- act(() => {
1142
+ await act(async () => {
1001
1143
  stdin.write('nonexistentsetting');
1002
1144
  });
1145
+ await waitUntilReady();
1003
1146
  await waitFor(() => {
1004
1147
  expect(lastFrame()).toContain('nonexistentsetting');
1005
- expect(lastFrame()).toContain('');
1006
1148
  expect(lastFrame()).not.toContain('Vim Mode'); // Should not contain any settings
1007
1149
  expect(lastFrame()).not.toContain('Enable Auto Update'); // Should not contain any settings
1008
1150
  });
@@ -1030,7 +1172,6 @@ describe('SettingsDialog', () => {
1030
1172
  vimMode: true,
1031
1173
  enableAutoUpdate: false,
1032
1174
  debugKeystrokeLogging: true,
1033
- enablePromptCompletion: true,
1034
1175
  },
1035
1176
  ui: {
1036
1177
  hideWindowTitle: true,
@@ -1100,10 +1241,11 @@ describe('SettingsDialog', () => {
1100
1241
  userSettings: {},
1101
1242
  systemSettings: {},
1102
1243
  workspaceSettings: {},
1103
- stdinActions: (stdin) => {
1104
- act(() => {
1244
+ stdinActions: async (stdin, waitUntilReady) => {
1245
+ await act(async () => {
1105
1246
  stdin.write('\t');
1106
1247
  });
1248
+ await waitUntilReady();
1107
1249
  },
1108
1250
  },
1109
1251
  {
@@ -1172,7 +1314,6 @@ describe('SettingsDialog', () => {
1172
1314
  vimMode: false,
1173
1315
  enableAutoUpdate: true,
1174
1316
  debugKeystrokeLogging: false,
1175
- enablePromptCompletion: false,
1176
1317
  },
1177
1318
  ui: {
1178
1319
  hideWindowTitle: false,
@@ -1211,7 +1352,7 @@ describe('SettingsDialog', () => {
1211
1352
  workspaceSettings: {},
1212
1353
  stdinActions: undefined,
1213
1354
  },
1214
- ])('should render $name correctly', ({ userSettings, systemSettings, workspaceSettings, stdinActions }) => {
1355
+ ])('should render $name correctly', async ({ userSettings, systemSettings, workspaceSettings, stdinActions, }) => {
1215
1356
  const settings = createMockSettings({
1216
1357
  user: {
1217
1358
  settings: userSettings,
@@ -1230,11 +1371,13 @@ describe('SettingsDialog', () => {
1230
1371
  },
1231
1372
  });
1232
1373
  const onSelect = vi.fn();
1233
- const { lastFrame, stdin } = renderDialog(settings, onSelect);
1374
+ const { lastFrame, stdin, waitUntilReady, unmount } = renderDialog(settings, onSelect);
1375
+ await waitUntilReady();
1234
1376
  if (stdinActions) {
1235
- stdinActions(stdin);
1377
+ await stdinActions(stdin, waitUntilReady);
1236
1378
  }
1237
1379
  expect(lastFrame()).toMatchSnapshot();
1380
+ unmount();
1238
1381
  });
1239
1382
  });
1240
1383
  });