@machina.ai/cell-cli 1.22.5-rc1 → 1.25.0-rc3

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 (723) hide show
  1. package/dist/package.json +5 -4
  2. package/dist/src/commands/extensions/configure.d.ts +13 -0
  3. package/dist/src/commands/extensions/configure.js +131 -0
  4. package/dist/src/commands/extensions/configure.js.map +1 -0
  5. package/dist/src/commands/extensions/configure.test.d.ts +1 -0
  6. package/dist/src/commands/extensions/configure.test.js +197 -0
  7. package/dist/src/commands/extensions/configure.test.js.map +1 -0
  8. package/dist/src/commands/extensions/disable.test.js.map +1 -1
  9. package/dist/src/commands/extensions/enable.test.js.map +1 -1
  10. package/dist/src/commands/extensions/install.js +7 -31
  11. package/dist/src/commands/extensions/install.js.map +1 -1
  12. package/dist/src/commands/extensions/install.test.js +21 -3
  13. package/dist/src/commands/extensions/install.test.js.map +1 -1
  14. package/dist/src/commands/extensions/link.test.js.map +1 -1
  15. package/dist/src/commands/extensions/uninstall.test.js.map +1 -1
  16. package/dist/src/commands/extensions/utils.d.ts +2 -1
  17. package/dist/src/commands/extensions/utils.js +5 -1
  18. package/dist/src/commands/extensions/utils.js.map +1 -1
  19. package/dist/src/commands/extensions/validate.js +1 -1
  20. package/dist/src/commands/extensions/validate.js.map +1 -1
  21. package/dist/src/commands/extensions/validate.test.js +1 -1
  22. package/dist/src/commands/extensions/validate.test.js.map +1 -1
  23. package/dist/src/commands/extensions.js +2 -2
  24. package/dist/src/commands/extensions.js.map +1 -1
  25. package/dist/src/commands/hooks/migrate.js +1 -1
  26. package/dist/src/commands/hooks/migrate.js.map +1 -1
  27. package/dist/src/commands/hooks/migrate.test.js +1 -1
  28. package/dist/src/commands/hooks/migrate.test.js.map +1 -1
  29. package/dist/src/commands/mcp/add.test.js +1 -1
  30. package/dist/src/commands/mcp/add.test.js.map +1 -1
  31. package/dist/src/commands/mcp/list.js +7 -1
  32. package/dist/src/commands/mcp/list.js.map +1 -1
  33. package/dist/src/commands/skills/disable.d.ts +14 -0
  34. package/dist/src/commands/skills/disable.js +45 -0
  35. package/dist/src/commands/skills/disable.js.map +1 -0
  36. package/dist/src/commands/skills/disable.test.d.ts +6 -0
  37. package/dist/src/commands/skills/disable.test.js +80 -0
  38. package/dist/src/commands/skills/disable.test.js.map +1 -0
  39. package/dist/src/commands/skills/enable.d.ts +12 -0
  40. package/dist/src/commands/skills/enable.js +35 -0
  41. package/dist/src/commands/skills/enable.js.map +1 -0
  42. package/dist/src/commands/skills/enable.test.d.ts +6 -0
  43. package/dist/src/commands/skills/enable.test.js +107 -0
  44. package/dist/src/commands/skills/enable.test.js.map +1 -0
  45. package/dist/src/commands/skills/install.d.ts +14 -0
  46. package/dist/src/commands/skills/install.js +61 -0
  47. package/dist/src/commands/skills/install.js.map +1 -0
  48. package/dist/src/commands/skills/install.test.d.ts +6 -0
  49. package/dist/src/commands/skills/install.test.js +57 -0
  50. package/dist/src/commands/skills/install.test.js.map +1 -0
  51. package/dist/src/commands/skills/list.d.ts +10 -0
  52. package/dist/src/commands/skills/list.js +60 -0
  53. package/dist/src/commands/skills/list.js.map +1 -0
  54. package/dist/src/commands/skills/list.test.d.ts +6 -0
  55. package/dist/src/commands/skills/list.test.js +136 -0
  56. package/dist/src/commands/skills/list.test.js.map +1 -0
  57. package/dist/src/commands/skills/uninstall.d.ts +13 -0
  58. package/dist/src/commands/skills/uninstall.js +56 -0
  59. package/dist/src/commands/skills/uninstall.js.map +1 -0
  60. package/dist/src/commands/skills/uninstall.test.d.ts +6 -0
  61. package/dist/src/commands/skills/uninstall.test.js +61 -0
  62. package/dist/src/commands/skills/uninstall.test.js.map +1 -0
  63. package/dist/src/commands/{extensions/settings.d.ts → skills.d.ts} +2 -2
  64. package/dist/src/commands/skills.js +30 -0
  65. package/dist/src/commands/skills.js.map +1 -0
  66. package/dist/src/commands/skills.test.d.ts +6 -0
  67. package/dist/src/commands/skills.test.js +49 -0
  68. package/dist/src/commands/skills.test.js.map +1 -0
  69. package/dist/src/config/config.d.ts +10 -3
  70. package/dist/src/config/config.js +91 -31
  71. package/dist/src/config/config.js.map +1 -1
  72. package/dist/src/config/config.test.js +224 -13
  73. package/dist/src/config/config.test.js.map +1 -1
  74. package/dist/src/config/extension-manager-agents.test.d.ts +6 -0
  75. package/dist/src/config/extension-manager-agents.test.js +115 -0
  76. package/dist/src/config/extension-manager-agents.test.js.map +1 -0
  77. package/dist/src/config/extension-manager-scope.test.js +164 -0
  78. package/dist/src/config/extension-manager-scope.test.js.map +1 -0
  79. package/dist/src/config/extension-manager-skills.test.js +150 -0
  80. package/dist/src/config/extension-manager-skills.test.js.map +1 -0
  81. package/dist/src/config/extension-manager.d.ts +6 -1
  82. package/dist/src/config/extension-manager.js +157 -34
  83. package/dist/src/config/extension-manager.js.map +1 -1
  84. package/dist/src/config/extension.test.js +98 -16
  85. package/dist/src/config/extension.test.js.map +1 -1
  86. package/dist/src/config/extensions/consent.d.ts +5 -3
  87. package/dist/src/config/extensions/consent.js +30 -7
  88. package/dist/src/config/extensions/consent.js.map +1 -1
  89. package/dist/src/config/extensions/consent.test.js +97 -3
  90. package/dist/src/config/extensions/consent.test.js.map +1 -1
  91. package/dist/src/config/extensions/extensionSettings.d.ts +5 -3
  92. package/dist/src/config/extensions/extensionSettings.js +32 -12
  93. package/dist/src/config/extensions/extensionSettings.js.map +1 -1
  94. package/dist/src/config/extensions/extensionSettings.test.js +8 -8
  95. package/dist/src/config/extensions/extensionSettings.test.js.map +1 -1
  96. package/dist/src/config/extensions/extensionUpdates.test.js +231 -0
  97. package/dist/src/config/extensions/extensionUpdates.test.js.map +1 -0
  98. package/dist/src/config/extensions/github.js +1 -1
  99. package/dist/src/config/extensions/github.js.map +1 -1
  100. package/dist/src/config/extensions/github.test.js +2 -2
  101. package/dist/src/config/extensions/github.test.js.map +1 -1
  102. package/dist/src/config/extensions/storage.js +2 -2
  103. package/dist/src/config/extensions/storage.js.map +1 -1
  104. package/dist/src/config/extensions/update.js +1 -1
  105. package/dist/src/config/extensions/update.js.map +1 -1
  106. package/dist/src/config/extensions/update.test.js +8 -8
  107. package/dist/src/config/extensions/update.test.js.map +1 -1
  108. package/dist/src/config/keyBindings.d.ts +14 -2
  109. package/dist/src/config/keyBindings.js +89 -11
  110. package/dist/src/config/keyBindings.js.map +1 -1
  111. package/dist/src/config/policy-engine.integration.test.js +13 -1
  112. package/dist/src/config/policy-engine.integration.test.js.map +1 -1
  113. package/dist/src/config/settings-validation.js +1 -1
  114. package/dist/src/config/settings-validation.js.map +1 -1
  115. package/dist/src/config/settings-validation.test.js +49 -1
  116. package/dist/src/config/settings-validation.test.js.map +1 -1
  117. package/dist/src/config/settings.d.ts +9 -7
  118. package/dist/src/config/settings.js +127 -250
  119. package/dist/src/config/settings.js.map +1 -1
  120. package/dist/src/config/settings.test.js +245 -594
  121. package/dist/src/config/settings.test.js.map +1 -1
  122. package/dist/src/config/settingsSchema.d.ts +284 -33
  123. package/dist/src/config/settingsSchema.js +328 -31
  124. package/dist/src/config/settingsSchema.js.map +1 -1
  125. package/dist/src/config/settingsSchema.test.js +17 -9
  126. package/dist/src/config/settingsSchema.test.js.map +1 -1
  127. package/dist/src/config/settings_repro.test.js +1 -1
  128. package/dist/src/config/settings_repro.test.js.map +1 -1
  129. package/dist/src/config/settings_validation_warning.test.d.ts +6 -0
  130. package/dist/src/config/settings_validation_warning.test.js +123 -0
  131. package/dist/src/config/settings_validation_warning.test.js.map +1 -0
  132. package/dist/src/config/trustedFolders.d.ts +1 -0
  133. package/dist/src/config/trustedFolders.js +18 -4
  134. package/dist/src/config/trustedFolders.js.map +1 -1
  135. package/dist/src/config/trustedFolders.test.js +45 -0
  136. package/dist/src/config/trustedFolders.test.js.map +1 -1
  137. package/dist/src/gemini.js +117 -85
  138. package/dist/src/gemini.js.map +1 -1
  139. package/dist/src/gemini.test.js +72 -95
  140. package/dist/src/gemini.test.js.map +1 -1
  141. package/dist/src/gemini_cleanup.test.js +6 -0
  142. package/dist/src/gemini_cleanup.test.js.map +1 -1
  143. package/dist/src/generated/git-commit.d.ts +3 -3
  144. package/dist/src/generated/git-commit.js +3 -3
  145. package/dist/src/nonInteractiveCli.js +54 -1
  146. package/dist/src/nonInteractiveCli.js.map +1 -1
  147. package/dist/src/nonInteractiveCli.test.js +94 -11
  148. package/dist/src/nonInteractiveCli.test.js.map +1 -1
  149. package/dist/src/services/BuiltinCommandLoader.d.ts +1 -1
  150. package/dist/src/services/BuiltinCommandLoader.js +65 -9
  151. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  152. package/dist/src/services/BuiltinCommandLoader.test.js +67 -13
  153. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  154. package/dist/src/services/FileCommandLoader.js +6 -6
  155. package/dist/src/services/FileCommandLoader.js.map +1 -1
  156. package/dist/src/services/prompt-processors/shellProcessor.js +13 -11
  157. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -1
  158. package/dist/src/services/prompt-processors/shellProcessor.test.js +93 -61
  159. package/dist/src/services/prompt-processors/shellProcessor.test.js.map +1 -1
  160. package/dist/src/test-utils/render.js +4 -2
  161. package/dist/src/test-utils/render.js.map +1 -1
  162. package/dist/src/ui/App.test.js +2 -2
  163. package/dist/src/ui/App.test.js.map +1 -1
  164. package/dist/src/ui/AppContainer.js +158 -77
  165. package/dist/src/ui/AppContainer.js.map +1 -1
  166. package/dist/src/ui/AppContainer.test.js +230 -41
  167. package/dist/src/ui/AppContainer.test.js.map +1 -1
  168. package/dist/src/ui/IdeIntegrationNudge.test.js +18 -7
  169. package/dist/src/ui/IdeIntegrationNudge.test.js.map +1 -1
  170. package/dist/src/ui/auth/AuthDialog.d.ts +4 -1
  171. package/dist/src/ui/auth/AuthDialog.js +8 -2
  172. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  173. package/dist/src/ui/auth/AuthDialog.test.js +17 -0
  174. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
  175. package/dist/src/ui/auth/AuthInProgress.test.js +16 -6
  176. package/dist/src/ui/auth/AuthInProgress.test.js.map +1 -1
  177. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.d.ts +10 -0
  178. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.js +27 -0
  179. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.js.map +1 -0
  180. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.d.ts +6 -0
  181. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js +68 -0
  182. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js.map +1 -0
  183. package/dist/src/ui/commands/aboutCommand.js +1 -1
  184. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  185. package/dist/src/ui/commands/aboutCommand.test.js +4 -4
  186. package/dist/src/ui/commands/aboutCommand.test.js.map +1 -1
  187. package/dist/src/ui/commands/agentsCommand.d.ts +7 -0
  188. package/dist/src/ui/commands/agentsCommand.js +79 -0
  189. package/dist/src/ui/commands/agentsCommand.js.map +1 -0
  190. package/dist/src/ui/commands/agentsCommand.test.d.ts +6 -0
  191. package/dist/src/ui/commands/agentsCommand.test.js +91 -0
  192. package/dist/src/ui/commands/agentsCommand.test.js.map +1 -0
  193. package/dist/src/ui/commands/authCommand.js +30 -3
  194. package/dist/src/ui/commands/authCommand.js.map +1 -1
  195. package/dist/src/ui/commands/authCommand.test.js +72 -4
  196. package/dist/src/ui/commands/authCommand.test.js.map +1 -1
  197. package/dist/src/ui/commands/bugCommand.js +36 -4
  198. package/dist/src/ui/commands/bugCommand.js.map +1 -1
  199. package/dist/src/ui/commands/bugCommand.test.js +83 -2
  200. package/dist/src/ui/commands/bugCommand.test.js.map +1 -1
  201. package/dist/src/ui/commands/chatCommand.d.ts +1 -2
  202. package/dist/src/ui/commands/chatCommand.js +50 -50
  203. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  204. package/dist/src/ui/commands/chatCommand.test.js +84 -58
  205. package/dist/src/ui/commands/chatCommand.test.js.map +1 -1
  206. package/dist/src/ui/commands/clearCommand.js +12 -8
  207. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  208. package/dist/src/ui/commands/clearCommand.test.js +4 -0
  209. package/dist/src/ui/commands/clearCommand.test.js.map +1 -1
  210. package/dist/src/ui/commands/copyCommand.js +1 -1
  211. package/dist/src/ui/commands/copyCommand.js.map +1 -1
  212. package/dist/src/ui/commands/directoryCommand.js +27 -10
  213. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  214. package/dist/src/ui/commands/directoryCommand.test.js +47 -11
  215. package/dist/src/ui/commands/directoryCommand.test.js.map +1 -1
  216. package/dist/src/ui/commands/extensionsCommand.js +193 -24
  217. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  218. package/dist/src/ui/commands/extensionsCommand.test.js +217 -27
  219. package/dist/src/ui/commands/extensionsCommand.test.js.map +1 -1
  220. package/dist/src/ui/commands/helpCommand.js +1 -1
  221. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  222. package/dist/src/ui/commands/helpCommand.test.js +1 -1
  223. package/dist/src/ui/commands/helpCommand.test.js.map +1 -1
  224. package/dist/src/ui/commands/hooksCommand.js +155 -20
  225. package/dist/src/ui/commands/hooksCommand.js.map +1 -1
  226. package/dist/src/ui/commands/hooksCommand.test.js +196 -17
  227. package/dist/src/ui/commands/hooksCommand.test.js.map +1 -1
  228. package/dist/src/ui/commands/mcpCommand.js +7 -7
  229. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  230. package/dist/src/ui/commands/mcpCommand.test.js +14 -6
  231. package/dist/src/ui/commands/mcpCommand.test.js.map +1 -1
  232. package/dist/src/ui/commands/memoryCommand.js +19 -33
  233. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  234. package/dist/src/ui/commands/memoryCommand.test.js +112 -16
  235. package/dist/src/ui/commands/memoryCommand.test.js.map +1 -1
  236. package/dist/src/ui/commands/restoreCommand.js +1 -1
  237. package/dist/src/ui/commands/restoreCommand.js.map +1 -1
  238. package/dist/src/ui/commands/skillsCommand.d.ts +7 -0
  239. package/dist/src/ui/commands/skillsCommand.js +235 -0
  240. package/dist/src/ui/commands/skillsCommand.js.map +1 -0
  241. package/dist/src/ui/commands/skillsCommand.test.d.ts +6 -0
  242. package/dist/src/ui/commands/skillsCommand.test.js +405 -0
  243. package/dist/src/ui/commands/skillsCommand.test.js.map +1 -0
  244. package/dist/src/ui/commands/statsCommand.js +4 -4
  245. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  246. package/dist/src/ui/commands/statsCommand.test.js +4 -4
  247. package/dist/src/ui/commands/statsCommand.test.js.map +1 -1
  248. package/dist/src/ui/commands/toolsCommand.js +2 -2
  249. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  250. package/dist/src/ui/commands/toolsCommand.test.js +2 -2
  251. package/dist/src/ui/commands/toolsCommand.test.js.map +1 -1
  252. package/dist/src/ui/commands/types.d.ts +15 -2
  253. package/dist/src/ui/commands/types.js +1 -0
  254. package/dist/src/ui/commands/types.js.map +1 -1
  255. package/dist/src/ui/components/AsciiArt.d.ts +6 -6
  256. package/dist/src/ui/components/AsciiArt.js +6 -6
  257. package/dist/src/ui/components/Composer.js +7 -7
  258. package/dist/src/ui/components/Composer.js.map +1 -1
  259. package/dist/src/ui/components/Composer.test.js +23 -4
  260. package/dist/src/ui/components/Composer.test.js.map +1 -1
  261. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +1 -0
  262. package/dist/src/ui/components/ContextSummaryDisplay.js +12 -5
  263. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  264. package/dist/src/ui/components/ContextSummaryDisplay.test.js +56 -25
  265. package/dist/src/ui/components/ContextSummaryDisplay.test.js.map +1 -1
  266. package/dist/src/ui/components/DialogManager.js +2 -2
  267. package/dist/src/ui/components/DialogManager.js.map +1 -1
  268. package/dist/src/ui/components/EditorSettingsDialog.js +2 -1
  269. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  270. package/dist/src/ui/components/EditorSettingsDialog.test.js +3 -2
  271. package/dist/src/ui/components/EditorSettingsDialog.test.js.map +1 -1
  272. package/dist/src/ui/components/FolderTrustDialog.js +20 -15
  273. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
  274. package/dist/src/ui/components/FolderTrustDialog.test.js +12 -2
  275. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  276. package/dist/src/ui/components/Footer.js +4 -4
  277. package/dist/src/ui/components/Footer.js.map +1 -1
  278. package/dist/src/ui/components/Help.js +1 -1
  279. package/dist/src/ui/components/Help.js.map +1 -1
  280. package/dist/src/ui/components/HistoryItemDisplay.js +3 -1
  281. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  282. package/dist/src/ui/components/HistoryItemDisplay.test.js +21 -0
  283. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
  284. package/dist/src/ui/components/HookStatusDisplay.d.ts +12 -0
  285. package/dist/src/ui/components/HookStatusDisplay.js +20 -0
  286. package/dist/src/ui/components/HookStatusDisplay.js.map +1 -0
  287. package/dist/src/ui/components/HookStatusDisplay.test.d.ts +6 -0
  288. package/dist/src/ui/components/HookStatusDisplay.test.js +51 -0
  289. package/dist/src/ui/components/HookStatusDisplay.test.js.map +1 -0
  290. package/dist/src/ui/components/IdeTrustChangeDialog.js +2 -1
  291. package/dist/src/ui/components/IdeTrustChangeDialog.js.map +1 -1
  292. package/dist/src/ui/components/IdeTrustChangeDialog.test.js +4 -3
  293. package/dist/src/ui/components/IdeTrustChangeDialog.test.js.map +1 -1
  294. package/dist/src/ui/components/InputPrompt.js +54 -24
  295. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  296. package/dist/src/ui/components/InputPrompt.test.js +172 -7
  297. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  298. package/dist/src/ui/components/LogoutConfirmationDialog.d.ts +15 -0
  299. package/dist/src/ui/components/LogoutConfirmationDialog.js +37 -0
  300. package/dist/src/ui/components/LogoutConfirmationDialog.js.map +1 -0
  301. package/dist/src/ui/components/LogoutConfirmationDialog.test.d.ts +6 -0
  302. package/dist/src/ui/components/LogoutConfirmationDialog.test.js +59 -0
  303. package/dist/src/ui/components/LogoutConfirmationDialog.test.js.map +1 -0
  304. package/dist/src/ui/components/MainContent.js +12 -10
  305. package/dist/src/ui/components/MainContent.js.map +1 -1
  306. package/dist/src/ui/components/MainContent.test.js +19 -9
  307. package/dist/src/ui/components/MainContent.test.js.map +1 -1
  308. package/dist/src/ui/components/ModelDialog.js +7 -3
  309. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  310. package/dist/src/ui/components/ModelDialog.test.js +16 -2
  311. package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
  312. package/dist/src/ui/components/ModelStatsDisplay.js +68 -14
  313. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -1
  314. package/dist/src/ui/components/ModelStatsDisplay.test.js +53 -2
  315. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +1 -1
  316. package/dist/src/ui/components/MultiFolderTrustDialog.d.ts +2 -2
  317. package/dist/src/ui/components/MultiFolderTrustDialog.js +2 -2
  318. package/dist/src/ui/components/MultiFolderTrustDialog.js.map +1 -1
  319. package/dist/src/ui/components/MultiFolderTrustDialog.test.js +9 -9
  320. package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +1 -1
  321. package/dist/src/ui/components/Notifications.js +3 -4
  322. package/dist/src/ui/components/Notifications.js.map +1 -1
  323. package/dist/src/ui/components/Notifications.test.js +1 -0
  324. package/dist/src/ui/components/Notifications.test.js.map +1 -1
  325. package/dist/src/ui/components/ProQuotaDialog.d.ts +1 -3
  326. package/dist/src/ui/components/ProQuotaDialog.js +3 -21
  327. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
  328. package/dist/src/ui/components/ProQuotaDialog.test.js +25 -10
  329. package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -1
  330. package/dist/src/ui/components/SettingsDialog.js +36 -16
  331. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  332. package/dist/src/ui/components/SettingsDialog.test.js +20 -3
  333. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  334. package/dist/src/ui/components/StatusDisplay.d.ts +11 -0
  335. package/dist/src/ui/components/StatusDisplay.js +40 -0
  336. package/dist/src/ui/components/StatusDisplay.js.map +1 -0
  337. package/dist/src/ui/components/StatusDisplay.test.d.ts +6 -0
  338. package/dist/src/ui/components/StatusDisplay.test.js +144 -0
  339. package/dist/src/ui/components/StatusDisplay.test.js.map +1 -0
  340. package/dist/src/ui/components/StickyHeader.d.ts +2 -0
  341. package/dist/src/ui/components/StickyHeader.js +1 -1
  342. package/dist/src/ui/components/StickyHeader.js.map +1 -1
  343. package/dist/src/ui/components/SuggestionsDisplay.js +7 -2
  344. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  345. package/dist/src/ui/components/Table.d.ts +21 -0
  346. package/dist/src/ui/components/Table.js +7 -0
  347. package/dist/src/ui/components/Table.js.map +1 -0
  348. package/dist/src/ui/components/Table.test.d.ts +6 -0
  349. package/dist/src/ui/components/Table.test.js +53 -0
  350. package/dist/src/ui/components/Table.test.js.map +1 -0
  351. package/dist/src/ui/components/ThemeDialog.js +63 -17
  352. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  353. package/dist/src/ui/components/ThemeDialog.test.js +66 -1
  354. package/dist/src/ui/components/ThemeDialog.test.js.map +1 -1
  355. package/dist/src/ui/components/messages/DiffRenderer.js +5 -13
  356. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  357. package/dist/src/ui/components/messages/DiffRenderer.test.js +26 -17
  358. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -1
  359. package/dist/src/ui/components/messages/ShellToolMessage.js +8 -5
  360. package/dist/src/ui/components/messages/ShellToolMessage.js.map +1 -1
  361. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +1 -5
  362. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  363. package/dist/src/ui/components/messages/ToolMessage.js +6 -2
  364. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  365. package/dist/src/ui/components/messages/ToolMessage.test.js +1 -0
  366. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
  367. package/dist/src/ui/components/messages/ToolResultDisplay.js +22 -16
  368. package/dist/src/ui/components/messages/ToolResultDisplay.js.map +1 -1
  369. package/dist/src/ui/components/messages/ToolResultDisplay.test.js +36 -18
  370. package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +1 -1
  371. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.d.ts +6 -0
  372. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js +134 -0
  373. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js.map +1 -0
  374. package/dist/src/ui/components/shared/MaxSizedBox.d.ts +2 -38
  375. package/dist/src/ui/components/shared/MaxSizedBox.js +34 -418
  376. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  377. package/dist/src/ui/components/shared/MaxSizedBox.test.js +48 -133
  378. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -1
  379. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +4 -1
  380. package/dist/src/ui/components/shared/RadioButtonSelect.js +11 -10
  381. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  382. package/dist/src/ui/components/shared/text-buffer.d.ts +40 -4
  383. package/dist/src/ui/components/shared/text-buffer.js +234 -64
  384. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  385. package/dist/src/ui/components/shared/text-buffer.test.js +147 -1
  386. package/dist/src/ui/components/shared/text-buffer.test.js.map +1 -1
  387. package/dist/src/ui/components/shared/vim-buffer-actions.test.js +3 -0
  388. package/dist/src/ui/components/shared/vim-buffer-actions.test.js.map +1 -1
  389. package/dist/src/ui/components/views/AgentsStatus.d.ts +13 -0
  390. package/dist/src/ui/components/views/AgentsStatus.js +23 -0
  391. package/dist/src/ui/components/views/AgentsStatus.js.map +1 -0
  392. package/dist/src/ui/components/views/ExtensionsList.js +3 -2
  393. package/dist/src/ui/components/views/ExtensionsList.js.map +1 -1
  394. package/dist/src/ui/components/views/ExtensionsList.test.js +37 -0
  395. package/dist/src/ui/components/views/ExtensionsList.test.js.map +1 -1
  396. package/dist/src/ui/components/views/HooksList.d.ts +2 -0
  397. package/dist/src/ui/components/views/HooksList.js +12 -7
  398. package/dist/src/ui/components/views/HooksList.js.map +1 -1
  399. package/dist/src/ui/components/views/McpStatus.js +7 -2
  400. package/dist/src/ui/components/views/McpStatus.js.map +1 -1
  401. package/dist/src/ui/components/views/McpStatus.test.js +10 -0
  402. package/dist/src/ui/components/views/McpStatus.test.js.map +1 -1
  403. package/dist/src/ui/components/views/SkillsList.d.ts +13 -0
  404. package/dist/src/ui/components/views/SkillsList.js +17 -0
  405. package/dist/src/ui/components/views/SkillsList.js.map +1 -0
  406. package/dist/src/ui/components/views/SkillsList.test.d.ts +6 -0
  407. package/dist/src/ui/components/views/SkillsList.test.js +97 -0
  408. package/dist/src/ui/components/views/SkillsList.test.js.map +1 -0
  409. package/dist/src/ui/constants/tips.js +1 -4
  410. package/dist/src/ui/constants/tips.js.map +1 -1
  411. package/dist/src/ui/constants.d.ts +4 -3
  412. package/dist/src/ui/constants.js +5 -6
  413. package/dist/src/ui/constants.js.map +1 -1
  414. package/dist/src/ui/contexts/KeypressContext.d.ts +1 -0
  415. package/dist/src/ui/contexts/KeypressContext.js +84 -6
  416. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  417. package/dist/src/ui/contexts/KeypressContext.test.js +130 -9
  418. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  419. package/dist/src/ui/contexts/UIActionsContext.d.ts +3 -0
  420. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  421. package/dist/src/ui/contexts/UIStateContext.d.ts +5 -1
  422. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  423. package/dist/src/ui/contexts/VimModeContext.js +1 -1
  424. package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
  425. package/dist/src/ui/hooks/atCommandProcessor.js +17 -3
  426. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  427. package/dist/src/ui/hooks/atCommandProcessor.test.js +9 -3
  428. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
  429. package/dist/src/ui/hooks/atCommandProcessor_agents.test.d.ts +6 -0
  430. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js +183 -0
  431. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js.map +1 -0
  432. package/dist/src/ui/hooks/slashCommandProcessor.js +18 -7
  433. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  434. package/dist/src/ui/hooks/slashCommandProcessor.test.js +2 -3
  435. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +1 -1
  436. package/dist/src/ui/hooks/useAtCompletion.js +31 -0
  437. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  438. package/dist/src/ui/hooks/useAtCompletion_agents.test.d.ts +6 -0
  439. package/dist/src/ui/hooks/useAtCompletion_agents.test.js +85 -0
  440. package/dist/src/ui/hooks/useAtCompletion_agents.test.js.map +1 -0
  441. package/dist/src/ui/hooks/useAutoAcceptIndicator.d.ts +2 -1
  442. package/dist/src/ui/hooks/useAutoAcceptIndicator.js +5 -4
  443. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -1
  444. package/dist/src/ui/hooks/useCommandCompletion.d.ts +1 -0
  445. package/dist/src/ui/hooks/useCommandCompletion.js +13 -8
  446. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  447. package/dist/src/ui/hooks/useCommandCompletion.test.js +88 -2
  448. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +1 -1
  449. package/dist/src/ui/hooks/useExtensionUpdates.js +5 -7
  450. package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -1
  451. package/dist/src/ui/hooks/useExtensionUpdates.test.js +20 -4
  452. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -1
  453. package/dist/src/ui/hooks/useFolderTrust.js +14 -19
  454. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  455. package/dist/src/ui/hooks/useFolderTrust.test.js +31 -23
  456. package/dist/src/ui/hooks/useFolderTrust.test.js.map +1 -1
  457. package/dist/src/ui/hooks/useGeminiStream.d.ts +2 -1
  458. package/dist/src/ui/hooks/useGeminiStream.js +84 -16
  459. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  460. package/dist/src/ui/hooks/useGeminiStream.test.js +290 -10
  461. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  462. package/dist/src/ui/hooks/useHistoryManager.d.ts +1 -1
  463. package/dist/src/ui/hooks/useHistoryManager.js +1 -1
  464. package/dist/src/ui/hooks/useHistoryManager.js.map +1 -1
  465. package/dist/src/ui/hooks/useHistoryManager.test.js +16 -0
  466. package/dist/src/ui/hooks/useHistoryManager.test.js.map +1 -1
  467. package/dist/src/ui/hooks/useHookDisplayState.d.ts +7 -0
  468. package/dist/src/ui/hooks/useHookDisplayState.js +83 -0
  469. package/dist/src/ui/hooks/useHookDisplayState.js.map +1 -0
  470. package/dist/src/ui/hooks/useHookDisplayState.test.d.ts +6 -0
  471. package/dist/src/ui/hooks/useHookDisplayState.test.js +180 -0
  472. package/dist/src/ui/hooks/useHookDisplayState.test.js.map +1 -0
  473. package/dist/src/ui/hooks/useIncludeDirsTrust.js +4 -4
  474. package/dist/src/ui/hooks/useIncludeDirsTrust.js.map +1 -1
  475. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js +2 -2
  476. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js.map +1 -1
  477. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js +2 -2
  478. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js.map +1 -1
  479. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +2 -1
  480. package/dist/src/ui/hooks/useLoadingIndicator.js +7 -3
  481. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  482. package/dist/src/ui/hooks/useLoadingIndicator.test.js +14 -4
  483. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  484. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +10 -3
  485. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +1 -1
  486. package/dist/src/ui/hooks/usePhraseCycler.d.ts +1 -1
  487. package/dist/src/ui/hooks/usePhraseCycler.js +2 -2
  488. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  489. package/dist/src/ui/hooks/usePromptCompletion.js +0 -2
  490. package/dist/src/ui/hooks/usePromptCompletion.js.map +1 -1
  491. package/dist/src/ui/hooks/useQuotaAndFallback.js +11 -9
  492. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -1
  493. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +22 -16
  494. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -1
  495. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +1 -1
  496. package/dist/src/ui/hooks/useReactToolScheduler.js +1 -1
  497. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  498. package/dist/src/ui/hooks/useRewind.d.ts +14 -0
  499. package/dist/src/ui/hooks/useRewind.js +31 -0
  500. package/dist/src/ui/hooks/useRewind.js.map +1 -0
  501. package/dist/src/ui/hooks/useRewind.test.d.ts +6 -0
  502. package/dist/src/ui/hooks/useRewind.test.js +100 -0
  503. package/dist/src/ui/hooks/useRewind.test.js.map +1 -0
  504. package/dist/src/ui/hooks/useSelectionList.js +2 -1
  505. package/dist/src/ui/hooks/useSelectionList.js.map +1 -1
  506. package/dist/src/ui/hooks/useSessionBrowser.js +3 -3
  507. package/dist/src/ui/hooks/useSessionBrowser.js.map +1 -1
  508. package/dist/src/ui/hooks/useSessionBrowser.test.js +4 -10
  509. package/dist/src/ui/hooks/useSessionBrowser.test.js.map +1 -1
  510. package/dist/src/ui/hooks/useShellHistory.js +3 -3
  511. package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
  512. package/dist/src/ui/hooks/useSlashCompletion.js +26 -11
  513. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  514. package/dist/src/ui/hooks/useSlashCompletion.test.js +115 -5
  515. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  516. package/dist/src/ui/hooks/useToolScheduler.test.js +73 -50
  517. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  518. package/dist/src/ui/hooks/vim.test.js +7 -0
  519. package/dist/src/ui/hooks/vim.test.js.map +1 -1
  520. package/dist/src/ui/keyMatchers.test.js +79 -53
  521. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  522. package/dist/src/ui/themes/ansi-light.js +1 -1
  523. package/dist/src/ui/themes/ansi-light.js.map +1 -1
  524. package/dist/src/ui/themes/ansi.js +1 -1
  525. package/dist/src/ui/themes/ansi.js.map +1 -1
  526. package/dist/src/ui/themes/color-utils.d.ts +1 -0
  527. package/dist/src/ui/themes/color-utils.js +13 -0
  528. package/dist/src/ui/themes/color-utils.js.map +1 -1
  529. package/dist/src/ui/themes/color-utils.test.js +20 -1
  530. package/dist/src/ui/themes/color-utils.test.js.map +1 -1
  531. package/dist/src/ui/themes/shades-of-purple.js +1 -1
  532. package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
  533. package/dist/src/ui/themes/theme-manager.d.ts +5 -0
  534. package/dist/src/ui/themes/theme-manager.js +9 -3
  535. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  536. package/dist/src/ui/themes/theme-manager.test.js +7 -0
  537. package/dist/src/ui/themes/theme-manager.test.js.map +1 -1
  538. package/dist/src/ui/themes/theme.d.ts +12 -0
  539. package/dist/src/ui/themes/theme.js +34 -4
  540. package/dist/src/ui/themes/theme.js.map +1 -1
  541. package/dist/src/ui/themes/theme.test.js +23 -0
  542. package/dist/src/ui/themes/theme.test.js.map +1 -1
  543. package/dist/src/ui/types.d.ts +23 -4
  544. package/dist/src/ui/types.js +4 -0
  545. package/dist/src/ui/types.js.map +1 -1
  546. package/dist/src/ui/utils/CodeColorizer.js +2 -2
  547. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  548. package/dist/src/ui/utils/CodeColorizer.test.js +1 -1
  549. package/dist/src/ui/utils/CodeColorizer.test.js.map +1 -1
  550. package/dist/src/ui/utils/ConsolePatcher.js +1 -0
  551. package/dist/src/ui/utils/ConsolePatcher.js.map +1 -1
  552. package/dist/src/ui/utils/InlineMarkdownRenderer.js +2 -1
  553. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  554. package/dist/src/ui/utils/MarkdownDisplay.test.js +1 -1
  555. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
  556. package/dist/src/ui/utils/clipboardUtils.d.ts +2 -2
  557. package/dist/src/ui/utils/clipboardUtils.js +50 -4
  558. package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
  559. package/dist/src/ui/utils/clipboardUtils.test.js +12 -12
  560. package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -1
  561. package/dist/src/ui/utils/clipboardUtils.windows.test.d.ts +6 -0
  562. package/dist/src/ui/utils/clipboardUtils.windows.test.js +52 -0
  563. package/dist/src/ui/utils/clipboardUtils.windows.test.js.map +1 -0
  564. package/dist/src/ui/utils/commandUtils.js +13 -10
  565. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  566. package/dist/src/ui/utils/commandUtils.test.js +39 -2
  567. package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
  568. package/dist/src/ui/utils/directoryUtils.d.ts +8 -0
  569. package/dist/src/ui/utils/directoryUtils.js +95 -3
  570. package/dist/src/ui/utils/directoryUtils.js.map +1 -1
  571. package/dist/src/ui/utils/directoryUtils.test.js +193 -3
  572. package/dist/src/ui/utils/directoryUtils.test.js.map +1 -1
  573. package/dist/src/ui/utils/highlight.d.ts +3 -2
  574. package/dist/src/ui/utils/highlight.js +46 -36
  575. package/dist/src/ui/utils/highlight.js.map +1 -1
  576. package/dist/src/ui/utils/highlight.test.js +75 -0
  577. package/dist/src/ui/utils/highlight.test.js.map +1 -1
  578. package/dist/src/ui/utils/historyExportUtils.d.ts +21 -0
  579. package/dist/src/ui/utils/historyExportUtils.js +59 -0
  580. package/dist/src/ui/utils/historyExportUtils.js.map +1 -0
  581. package/dist/src/ui/utils/rewindFileOps.d.ts +47 -0
  582. package/dist/src/ui/utils/rewindFileOps.js +190 -0
  583. package/dist/src/ui/utils/rewindFileOps.js.map +1 -0
  584. package/dist/src/ui/utils/rewindFileOps.test.d.ts +6 -0
  585. package/dist/src/ui/utils/rewindFileOps.test.js +375 -0
  586. package/dist/src/ui/utils/rewindFileOps.test.js.map +1 -0
  587. package/dist/src/ui/utils/terminalCapabilityManager.d.ts +41 -0
  588. package/dist/src/ui/utils/terminalCapabilityManager.js +209 -0
  589. package/dist/src/ui/utils/terminalCapabilityManager.js.map +1 -0
  590. package/dist/src/ui/utils/terminalCapabilityManager.test.d.ts +6 -0
  591. package/dist/src/ui/utils/terminalCapabilityManager.test.js +221 -0
  592. package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +1 -0
  593. package/dist/src/ui/utils/terminalSetup.d.ts +1 -1
  594. package/dist/src/ui/utils/terminalSetup.js +21 -6
  595. package/dist/src/ui/utils/terminalSetup.js.map +1 -1
  596. package/dist/src/ui/utils/terminalSetup.test.js +11 -2
  597. package/dist/src/ui/utils/terminalSetup.test.js.map +1 -1
  598. package/dist/src/ui/utils/textUtils.js +9 -1
  599. package/dist/src/ui/utils/textUtils.js.map +1 -1
  600. package/dist/src/ui/utils/textUtils.test.js +12 -1
  601. package/dist/src/ui/utils/textUtils.test.js.map +1 -1
  602. package/dist/src/ui/utils/ui-sizing.js +1 -1
  603. package/dist/src/ui/utils/ui-sizing.js.map +1 -1
  604. package/dist/src/ui/utils/ui-sizing.test.js +2 -2
  605. package/dist/src/ui/utils/ui-sizing.test.js.map +1 -1
  606. package/dist/src/utils/activityLogger.d.ts +47 -0
  607. package/dist/src/utils/activityLogger.js +297 -0
  608. package/dist/src/utils/activityLogger.js.map +1 -0
  609. package/dist/src/utils/cleanup.d.ts +5 -0
  610. package/dist/src/utils/cleanup.js +17 -0
  611. package/dist/src/utils/cleanup.js.map +1 -1
  612. package/dist/src/utils/cleanup.test.js +21 -31
  613. package/dist/src/utils/cleanup.test.js.map +1 -1
  614. package/dist/src/utils/errors.js +9 -10
  615. package/dist/src/utils/errors.js.map +1 -1
  616. package/dist/src/utils/errors.test.js +95 -37
  617. package/dist/src/utils/errors.test.js.map +1 -1
  618. package/dist/src/utils/handleAutoUpdate.test.js +2 -2
  619. package/dist/src/utils/processUtils.d.ts +1 -1
  620. package/dist/src/utils/processUtils.js +1 -1
  621. package/dist/src/utils/processUtils.js.map +1 -1
  622. package/dist/src/utils/readStdin.js +7 -0
  623. package/dist/src/utils/readStdin.js.map +1 -1
  624. package/dist/src/utils/readStdin.test.js +4 -0
  625. package/dist/src/utils/readStdin.test.js.map +1 -1
  626. package/dist/src/utils/readStdin_safety.test.d.ts +6 -0
  627. package/dist/src/utils/readStdin_safety.test.js +68 -0
  628. package/dist/src/utils/readStdin_safety.test.js.map +1 -0
  629. package/dist/src/utils/relaunch.js +3 -1
  630. package/dist/src/utils/relaunch.js.map +1 -1
  631. package/dist/src/utils/relaunch.test.js +13 -7
  632. package/dist/src/utils/relaunch.test.js.map +1 -1
  633. package/dist/src/utils/resolvePath.js +3 -3
  634. package/dist/src/utils/resolvePath.js.map +1 -1
  635. package/dist/src/utils/resolvePath.test.js +3 -0
  636. package/dist/src/utils/resolvePath.test.js.map +1 -1
  637. package/dist/src/utils/sandbox.js +27 -17
  638. package/dist/src/utils/sandbox.js.map +1 -1
  639. package/dist/src/utils/sandbox.test.js +17 -5
  640. package/dist/src/utils/sandbox.test.js.map +1 -1
  641. package/dist/src/utils/sessionCleanup.integration.test.js +2 -2
  642. package/dist/src/utils/sessionCleanup.integration.test.js.map +1 -1
  643. package/dist/src/utils/sessionCleanup.js +16 -4
  644. package/dist/src/utils/sessionCleanup.js.map +1 -1
  645. package/dist/src/utils/sessionCleanup.test.js +18 -68
  646. package/dist/src/utils/sessionCleanup.test.js.map +1 -1
  647. package/dist/src/utils/sessionUtils.d.ts +20 -0
  648. package/dist/src/utils/sessionUtils.js +32 -4
  649. package/dist/src/utils/sessionUtils.js.map +1 -1
  650. package/dist/src/utils/sessionUtils.test.js +3 -3
  651. package/dist/src/utils/sessionUtils.test.js.map +1 -1
  652. package/dist/src/utils/sessions.js +9 -9
  653. package/dist/src/utils/sessions.js.map +1 -1
  654. package/dist/src/utils/sessions.test.js +38 -41
  655. package/dist/src/utils/sessions.test.js.map +1 -1
  656. package/dist/src/utils/settingsUtils.js +0 -5
  657. package/dist/src/utils/settingsUtils.js.map +1 -1
  658. package/dist/src/utils/skillSettings.d.ts +33 -0
  659. package/dist/src/utils/skillSettings.js +101 -0
  660. package/dist/src/utils/skillSettings.js.map +1 -0
  661. package/dist/src/utils/skillUtils.d.ts +29 -0
  662. package/dist/src/utils/skillUtils.js +144 -0
  663. package/dist/src/utils/skillUtils.js.map +1 -0
  664. package/dist/src/utils/skillUtils.test.d.ts +6 -0
  665. package/dist/src/utils/skillUtils.test.js +57 -0
  666. package/dist/src/utils/skillUtils.test.js.map +1 -0
  667. package/dist/src/utils/terminalTheme.d.ts +15 -0
  668. package/dist/src/utils/terminalTheme.js +50 -0
  669. package/dist/src/utils/terminalTheme.js.map +1 -0
  670. package/dist/src/utils/userStartupWarnings.d.ts +2 -1
  671. package/dist/src/utils/userStartupWarnings.js +17 -7
  672. package/dist/src/utils/userStartupWarnings.js.map +1 -1
  673. package/dist/src/utils/userStartupWarnings.test.js +37 -6
  674. package/dist/src/utils/userStartupWarnings.test.js.map +1 -1
  675. package/dist/src/utils/windowTitle.d.ts +13 -4
  676. package/dist/src/utils/windowTitle.js +65 -7
  677. package/dist/src/utils/windowTitle.js.map +1 -1
  678. package/dist/src/utils/windowTitle.test.js +183 -40
  679. package/dist/src/utils/windowTitle.test.js.map +1 -1
  680. package/dist/src/validateNonInterActiveAuth.d.ts +1 -1
  681. package/dist/src/validateNonInterActiveAuth.js +1 -2
  682. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  683. package/dist/src/zed-integration/fileSystemService.d.ts +3 -3
  684. package/dist/src/zed-integration/fileSystemService.js +5 -7
  685. package/dist/src/zed-integration/fileSystemService.js.map +1 -1
  686. package/dist/src/zed-integration/fileSystemService.test.js +11 -13
  687. package/dist/src/zed-integration/fileSystemService.test.js.map +1 -1
  688. package/dist/src/zed-integration/zedIntegration.d.ts +5 -5
  689. package/dist/src/zed-integration/zedIntegration.js +42 -21
  690. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  691. package/dist/src/zed-integration/zedIntegration.test.js +29 -18
  692. package/dist/src/zed-integration/zedIntegration.test.js.map +1 -1
  693. package/dist/tsconfig.tsbuildinfo +1 -1
  694. package/package.json +5 -4
  695. package/dist/src/commands/extensions/settings.js +0 -111
  696. package/dist/src/commands/extensions/settings.js.map +0 -1
  697. package/dist/src/ui/hooks/useBracketedPaste.d.ts +0 -12
  698. package/dist/src/ui/hooks/useBracketedPaste.js +0 -31
  699. package/dist/src/ui/hooks/useBracketedPaste.js.map +0 -1
  700. package/dist/src/ui/utils/bracketedPaste.d.ts +0 -7
  701. package/dist/src/ui/utils/bracketedPaste.js +0 -15
  702. package/dist/src/ui/utils/bracketedPaste.js.map +0 -1
  703. package/dist/src/ui/utils/kittyProtocolDetector.d.ts +0 -17
  704. package/dist/src/ui/utils/kittyProtocolDetector.js +0 -111
  705. package/dist/src/ui/utils/kittyProtocolDetector.js.map +0 -1
  706. package/dist/src/ui/utils/kittyProtocolDetector.test.js +0 -113
  707. package/dist/src/ui/utils/kittyProtocolDetector.test.js.map +0 -1
  708. package/dist/src/zed-integration/acp.d.ts +0 -41
  709. package/dist/src/zed-integration/acp.js +0 -72
  710. package/dist/src/zed-integration/acp.js.map +0 -1
  711. package/dist/src/zed-integration/acp.test.js +0 -214
  712. package/dist/src/zed-integration/acp.test.js.map +0 -1
  713. package/dist/src/zed-integration/connection.d.ts +0 -28
  714. package/dist/src/zed-integration/connection.js +0 -165
  715. package/dist/src/zed-integration/connection.js.map +0 -1
  716. package/dist/src/zed-integration/connection.test.js +0 -175
  717. package/dist/src/zed-integration/connection.test.js.map +0 -1
  718. package/dist/src/zed-integration/schema.d.ts +0 -11792
  719. package/dist/src/zed-integration/schema.js +0 -311
  720. package/dist/src/zed-integration/schema.js.map +0 -1
  721. /package/dist/src/{ui/utils/kittyProtocolDetector.test.d.ts → config/extension-manager-scope.test.d.ts} +0 -0
  722. /package/dist/src/{zed-integration/acp.test.d.ts → config/extension-manager-skills.test.d.ts} +0 -0
  723. /package/dist/src/{zed-integration/connection.test.d.ts → config/extensions/extensionUpdates.test.d.ts} +0 -0
@@ -105,6 +105,7 @@ vi.mock('./contexts/SessionContext.js');
105
105
  vi.mock('./components/shared/text-buffer.js');
106
106
  vi.mock('./hooks/useLogger.js');
107
107
  vi.mock('./hooks/useInputHistoryStore.js');
108
+ vi.mock('./hooks/useHookDisplayState.js');
108
109
  // Mock external utilities
109
110
  vi.mock('../utils/events.js');
110
111
  vi.mock('../utils/handleAutoUpdate.js');
@@ -131,6 +132,7 @@ import { useTextBuffer } from './components/shared/text-buffer.js';
131
132
  import { useLogger } from './hooks/useLogger.js';
132
133
  import { useLoadingIndicator } from './hooks/useLoadingIndicator.js';
133
134
  import { useInputHistoryStore } from './hooks/useInputHistoryStore.js';
135
+ import { useHookDisplayState } from './hooks/useHookDisplayState.js';
134
136
  import { useKeypress } from './hooks/useKeypress.js';
135
137
  import { measureElement } from 'ink';
136
138
  import { useTerminalSize } from './hooks/useTerminalSize.js';
@@ -169,18 +171,13 @@ describe('AppContainer State Management', () => {
169
171
  const mockedUseLoadingIndicator = useLoadingIndicator;
170
172
  const mockedUseKeypress = useKeypress;
171
173
  const mockedUseInputHistoryStore = useInputHistoryStore;
174
+ const mockedUseHookDisplayState = useHookDisplayState;
172
175
  beforeEach(() => {
173
176
  vi.clearAllMocks();
177
+ mockIdeClient.getInstance.mockReturnValue(new Promise(() => { }));
174
178
  // Initialize mock stdout for terminal title tests
175
179
  mocks.mockStdout.write.mockClear();
176
- // Mock computeWindowTitle function to centralize title logic testing
177
- vi.mock('../utils/windowTitle.js', async () => ({
178
- computeWindowTitle: vi.fn((folderName) =>
179
- // Default behavior: return "Gemini - {folderName}" unless CLI_TITLE is set
180
- process.env['CLI_TITLE'] || `Gemini - ${folderName}`),
181
- }));
182
180
  capturedUIState = null;
183
- capturedUIActions = null;
184
181
  // **Provide a default return value for EVERY mocked hook.**
185
182
  mockedUseQuotaAndFallback.mockReturnValue({
186
183
  proQuotaRequest: null,
@@ -290,6 +287,7 @@ describe('AppContainer State Management', () => {
290
287
  elapsedTime: '0.0s',
291
288
  currentLoadingPhrase: '',
292
289
  });
290
+ mockedUseHookDisplayState.mockReturnValue([]);
293
291
  // Mock Config
294
292
  mockConfig = makeFakeConfig();
295
293
  // Mock config's getTargetDir to return consistent workspace directory
@@ -328,6 +326,7 @@ describe('AppContainer State Management', () => {
328
326
  });
329
327
  afterEach(() => {
330
328
  cleanup();
329
+ vi.restoreAllMocks();
331
330
  });
332
331
  describe('Basic Rendering', () => {
333
332
  it('renders without crashing with minimal props', async () => {
@@ -843,7 +842,7 @@ describe('AppContainer State Management', () => {
843
842
  const { stdout } = useStdout();
844
843
  expect(stdout).toBe(mocks.mockStdout);
845
844
  });
846
- it('should not update terminal title when showStatusInTitle is false', () => {
845
+ it('should update terminal title with Working… when showStatusInTitle is false', () => {
847
846
  // Arrange: Set up mock settings with showStatusInTitle disabled
848
847
  const mockSettingsWithShowStatusFalse = {
849
848
  ...mockSettings,
@@ -856,13 +855,55 @@ describe('AppContainer State Management', () => {
856
855
  },
857
856
  },
858
857
  };
858
+ // Mock the streaming state as Active
859
+ mockedUseGeminiStream.mockReturnValue({
860
+ streamingState: 'responding',
861
+ submitQuery: vi.fn(),
862
+ initError: null,
863
+ pendingHistoryItems: [],
864
+ thought: { subject: 'Some thought' },
865
+ cancelOngoingRequest: vi.fn(),
866
+ });
859
867
  // Act: Render the container
860
868
  const { unmount } = renderAppContainer({
861
869
  settings: mockSettingsWithShowStatusFalse,
862
870
  });
863
- // Assert: Check that no title-related writes occurred
864
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]2;'));
865
- expect(titleWrites).toHaveLength(0);
871
+ // Assert: Check that title was updated with "Working…"
872
+ const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
873
+ expect(titleWrites).toHaveLength(1);
874
+ expect(titleWrites[0][0]).toBe(`\x1b]0;${'✦ Working… (workspace)'.padEnd(80, ' ')}\x07`);
875
+ unmount();
876
+ });
877
+ it('should use legacy terminal title when dynamicWindowTitle is false', () => {
878
+ // Arrange: Set up mock settings with dynamicWindowTitle disabled
879
+ const mockSettingsWithDynamicTitleFalse = {
880
+ ...mockSettings,
881
+ merged: {
882
+ ...mockSettings.merged,
883
+ ui: {
884
+ ...mockSettings.merged.ui,
885
+ dynamicWindowTitle: false,
886
+ hideWindowTitle: false,
887
+ },
888
+ },
889
+ };
890
+ // Mock the streaming state
891
+ mockedUseGeminiStream.mockReturnValue({
892
+ streamingState: 'responding',
893
+ submitQuery: vi.fn(),
894
+ initError: null,
895
+ pendingHistoryItems: [],
896
+ thought: { subject: 'Some thought' },
897
+ cancelOngoingRequest: vi.fn(),
898
+ });
899
+ // Act: Render the container
900
+ const { unmount } = renderAppContainer({
901
+ settings: mockSettingsWithDynamicTitleFalse,
902
+ });
903
+ // Assert: Check that legacy title was used
904
+ const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
905
+ expect(titleWrites).toHaveLength(1);
906
+ expect(titleWrites[0][0]).toBe(`\x1b]0;${'Cell CLI (workspace)'.padEnd(80, ' ')}\x07`);
866
907
  unmount();
867
908
  });
868
909
  it('should not update terminal title when hideWindowTitle is true', () => {
@@ -883,7 +924,7 @@ describe('AppContainer State Management', () => {
883
924
  settings: mockSettingsWithHideTitleTrue,
884
925
  });
885
926
  // Assert: Check that no title-related writes occurred
886
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]2;'));
927
+ const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
887
928
  expect(titleWrites).toHaveLength(0);
888
929
  unmount();
889
930
  });
@@ -914,10 +955,10 @@ describe('AppContainer State Management', () => {
914
955
  const { unmount } = renderAppContainer({
915
956
  settings: mockSettingsWithTitleEnabled,
916
957
  });
917
- // Assert: Check that title was updated with thought subject
918
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]2;'));
958
+ // Assert: Check that title was updated with thought subject and suffix
959
+ const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
919
960
  expect(titleWrites).toHaveLength(1);
920
- expect(titleWrites[0][0]).toBe(`\x1b]2;${thoughtSubject.padEnd(80, ' ')}\x07`);
961
+ expect(titleWrites[0][0]).toBe(`\x1b]0;${`✦ ${thoughtSubject} (workspace)`.padEnd(80, ' ')}\x07`);
921
962
  unmount();
922
963
  });
923
964
  it('should update terminal title with default text when in Idle state and no thought subject', () => {
@@ -947,12 +988,12 @@ describe('AppContainer State Management', () => {
947
988
  settings: mockSettingsWithTitleEnabled,
948
989
  });
949
990
  // Assert: Check that title was updated with default Idle text
950
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]2;'));
991
+ const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
951
992
  expect(titleWrites).toHaveLength(1);
952
- expect(titleWrites[0][0]).toBe(`\x1b]2;${'Gemini - workspace'.padEnd(80, ' ')}\x07`);
993
+ expect(titleWrites[0][0]).toBe(`\x1b]0;${'◇ Ready (workspace)'.padEnd(80, ' ')}\x07`);
953
994
  unmount();
954
995
  });
955
- it('should update terminal title when in WaitingForConfirmation state with thought subject', () => {
996
+ it('should update terminal title when in WaitingForConfirmation state with thought subject', async () => {
956
997
  // Arrange: Set up mock settings with showStatusInTitle enabled
957
998
  const mockSettingsWithTitleEnabled = {
958
999
  ...mockSettings,
@@ -968,7 +1009,7 @@ describe('AppContainer State Management', () => {
968
1009
  // Mock the streaming state and thought
969
1010
  const thoughtSubject = 'Confirm tool execution';
970
1011
  mockedUseGeminiStream.mockReturnValue({
971
- streamingState: 'waitingForConfirmation',
1012
+ streamingState: 'waiting_for_confirmation',
972
1013
  submitQuery: vi.fn(),
973
1014
  initError: null,
974
1015
  pendingHistoryItems: [],
@@ -976,15 +1017,146 @@ describe('AppContainer State Management', () => {
976
1017
  cancelOngoingRequest: vi.fn(),
977
1018
  });
978
1019
  // Act: Render the container
979
- const { unmount } = renderAppContainer({
980
- settings: mockSettingsWithTitleEnabled,
1020
+ let unmount;
1021
+ await act(async () => {
1022
+ const result = renderAppContainer({
1023
+ settings: mockSettingsWithTitleEnabled,
1024
+ });
1025
+ unmount = result.unmount;
981
1026
  });
982
1027
  // Assert: Check that title was updated with confirmation text
983
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]2;'));
1028
+ const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
984
1029
  expect(titleWrites).toHaveLength(1);
985
- expect(titleWrites[0][0]).toBe(`\x1b]2;${thoughtSubject.padEnd(80, ' ')}\x07`);
1030
+ expect(titleWrites[0][0]).toBe(`\x1b]0;${'✋ Action Required (workspace)'.padEnd(80, ' ')}\x07`);
986
1031
  unmount();
987
1032
  });
1033
+ describe('Shell Focus Action Required', () => {
1034
+ beforeEach(() => {
1035
+ vi.useFakeTimers();
1036
+ });
1037
+ afterEach(() => {
1038
+ vi.useRealTimers();
1039
+ });
1040
+ it('should show Action Required in title after a delay when shell is awaiting focus', async () => {
1041
+ const startTime = 1000000;
1042
+ vi.setSystemTime(startTime);
1043
+ // Arrange: Set up mock settings with showStatusInTitle enabled
1044
+ const mockSettingsWithTitleEnabled = {
1045
+ ...mockSettings,
1046
+ merged: {
1047
+ ...mockSettings.merged,
1048
+ ui: {
1049
+ ...mockSettings.merged.ui,
1050
+ showStatusInTitle: true,
1051
+ hideWindowTitle: false,
1052
+ },
1053
+ },
1054
+ };
1055
+ // Mock an active shell pty but not focused
1056
+ mockedUseGeminiStream.mockReturnValue({
1057
+ streamingState: 'responding',
1058
+ submitQuery: vi.fn(),
1059
+ initError: null,
1060
+ pendingHistoryItems: [],
1061
+ thought: { subject: 'Executing shell command' },
1062
+ cancelOngoingRequest: vi.fn(),
1063
+ activePtyId: 'pty-1',
1064
+ lastOutputTime: 0,
1065
+ });
1066
+ vi.spyOn(mockConfig, 'isInteractive').mockReturnValue(true);
1067
+ vi.spyOn(mockConfig, 'isInteractiveShellEnabled').mockReturnValue(true);
1068
+ // Act: Render the container (embeddedShellFocused is false by default in state)
1069
+ const { unmount } = renderAppContainer({
1070
+ settings: mockSettingsWithTitleEnabled,
1071
+ });
1072
+ // Initially it should show the working status
1073
+ const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1074
+ expect(titleWrites[titleWrites.length - 1][0]).toContain('✦ Executing shell command');
1075
+ // Fast-forward time by 40 seconds
1076
+ await act(async () => {
1077
+ await vi.advanceTimersByTimeAsync(40000);
1078
+ });
1079
+ // Now it should show Action Required
1080
+ const titleWritesDelayed = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1081
+ const lastTitle = titleWritesDelayed[titleWritesDelayed.length - 1][0];
1082
+ expect(lastTitle).toContain('✋ Action Required');
1083
+ unmount();
1084
+ });
1085
+ it('should NOT show Action Required in title if shell is streaming output', async () => {
1086
+ const startTime = 1000000;
1087
+ vi.setSystemTime(startTime);
1088
+ // Arrange: Set up mock settings with showStatusInTitle enabled
1089
+ const mockSettingsWithTitleEnabled = {
1090
+ ...mockSettings,
1091
+ merged: {
1092
+ ...mockSettings.merged,
1093
+ ui: {
1094
+ ...mockSettings.merged.ui,
1095
+ showStatusInTitle: true,
1096
+ hideWindowTitle: false,
1097
+ },
1098
+ },
1099
+ };
1100
+ // Mock an active shell pty but not focused
1101
+ let lastOutputTime = 1000;
1102
+ mockedUseGeminiStream.mockImplementation(() => ({
1103
+ streamingState: 'responding',
1104
+ submitQuery: vi.fn(),
1105
+ initError: null,
1106
+ pendingHistoryItems: [],
1107
+ thought: { subject: 'Executing shell command' },
1108
+ cancelOngoingRequest: vi.fn(),
1109
+ activePtyId: 'pty-1',
1110
+ lastOutputTime,
1111
+ }));
1112
+ vi.spyOn(mockConfig, 'isInteractive').mockReturnValue(true);
1113
+ vi.spyOn(mockConfig, 'isInteractiveShellEnabled').mockReturnValue(true);
1114
+ // Act: Render the container
1115
+ const { unmount, rerender } = renderAppContainer({
1116
+ settings: mockSettingsWithTitleEnabled,
1117
+ });
1118
+ // Fast-forward time by 20 seconds
1119
+ await act(async () => {
1120
+ await vi.advanceTimersByTimeAsync(20000);
1121
+ });
1122
+ // Update lastOutputTime to simulate new output
1123
+ lastOutputTime = 21000;
1124
+ mockedUseGeminiStream.mockImplementation(() => ({
1125
+ streamingState: 'responding',
1126
+ submitQuery: vi.fn(),
1127
+ initError: null,
1128
+ pendingHistoryItems: [],
1129
+ thought: { subject: 'Executing shell command' },
1130
+ cancelOngoingRequest: vi.fn(),
1131
+ activePtyId: 'pty-1',
1132
+ lastOutputTime,
1133
+ }));
1134
+ // Rerender to propagate the new lastOutputTime
1135
+ await act(async () => {
1136
+ rerender(getAppContainer({ settings: mockSettingsWithTitleEnabled }));
1137
+ });
1138
+ // Fast-forward time by another 20 seconds
1139
+ // Total time elapsed: 40s.
1140
+ // Time since last output: 20s.
1141
+ // It should NOT show Action Required yet.
1142
+ await act(async () => {
1143
+ await vi.advanceTimersByTimeAsync(20000);
1144
+ });
1145
+ const titleWritesAfterOutput = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1146
+ const lastTitle = titleWritesAfterOutput[titleWritesAfterOutput.length - 1][0];
1147
+ expect(lastTitle).not.toContain('✋ Action Required');
1148
+ expect(lastTitle).toContain('✦ Executing shell command');
1149
+ // Fast-forward another 40 seconds (Total 60s since last output)
1150
+ await act(async () => {
1151
+ await vi.advanceTimersByTimeAsync(40000);
1152
+ });
1153
+ // Now it SHOULD show Action Required
1154
+ const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1155
+ const lastTitleFinal = titleWrites[titleWrites.length - 1][0];
1156
+ expect(lastTitleFinal).toContain('✋ Action Required');
1157
+ unmount();
1158
+ });
1159
+ });
988
1160
  it('should pad title to exactly 80 characters', () => {
989
1161
  // Arrange: Set up mock settings with showStatusInTitle enabled
990
1162
  const mockSettingsWithTitleEnabled = {
@@ -1013,14 +1185,12 @@ describe('AppContainer State Management', () => {
1013
1185
  settings: mockSettingsWithTitleEnabled,
1014
1186
  });
1015
1187
  // Assert: Check that title is padded to exactly 80 characters
1016
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]2;'));
1188
+ const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1017
1189
  expect(titleWrites).toHaveLength(1);
1018
1190
  const calledWith = titleWrites[0][0];
1019
- const expectedTitle = shortTitle.padEnd(80, ' ');
1020
- expect(calledWith).toContain(shortTitle);
1021
- expect(calledWith).toContain('\x1b]2;');
1022
- expect(calledWith).toContain('\x07');
1023
- expect(calledWith).toBe('\x1b]2;' + expectedTitle + '\x07');
1191
+ const expectedTitle = `✦ ${shortTitle} (workspace)`.padEnd(80, ' ');
1192
+ const expectedEscapeSequence = `\x1b]0;${expectedTitle}\x07`;
1193
+ expect(calledWith).toBe(expectedEscapeSequence);
1024
1194
  unmount();
1025
1195
  });
1026
1196
  it('should use correct ANSI escape code format', () => {
@@ -1051,30 +1221,30 @@ describe('AppContainer State Management', () => {
1051
1221
  settings: mockSettingsWithTitleEnabled,
1052
1222
  });
1053
1223
  // Assert: Check that the correct ANSI escape sequence is used
1054
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]2;'));
1224
+ const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1055
1225
  expect(titleWrites).toHaveLength(1);
1056
- const expectedEscapeSequence = `\x1b]2;${title.padEnd(80, ' ')}\x07`;
1226
+ const expectedEscapeSequence = `\x1b]0;${`✦ ${title} (workspace)`.padEnd(80, ' ')}\x07`;
1057
1227
  expect(titleWrites[0][0]).toBe(expectedEscapeSequence);
1058
1228
  unmount();
1059
1229
  });
1060
1230
  it('should use CLI_TITLE environment variable when set', () => {
1061
- // Arrange: Set up mock settings with showStatusInTitle enabled
1062
- const mockSettingsWithTitleEnabled = {
1231
+ // Arrange: Set up mock settings with showStatusInTitle disabled (so it shows suffix)
1232
+ const mockSettingsWithTitleDisabled = {
1063
1233
  ...mockSettings,
1064
1234
  merged: {
1065
1235
  ...mockSettings.merged,
1066
1236
  ui: {
1067
1237
  ...mockSettings.merged.ui,
1068
- showStatusInTitle: true,
1238
+ showStatusInTitle: false,
1069
1239
  hideWindowTitle: false,
1070
1240
  },
1071
1241
  },
1072
1242
  };
1073
1243
  // Mock CLI_TITLE environment variable
1074
1244
  vi.stubEnv('CLI_TITLE', 'Custom Gemini Title');
1075
- // Mock the streaming state as Idle with no thought
1245
+ // Mock the streaming state
1076
1246
  mockedUseGeminiStream.mockReturnValue({
1077
- streamingState: 'idle',
1247
+ streamingState: 'responding',
1078
1248
  submitQuery: vi.fn(),
1079
1249
  initError: null,
1080
1250
  pendingHistoryItems: [],
@@ -1083,12 +1253,12 @@ describe('AppContainer State Management', () => {
1083
1253
  });
1084
1254
  // Act: Render the container
1085
1255
  const { unmount } = renderAppContainer({
1086
- settings: mockSettingsWithTitleEnabled,
1256
+ settings: mockSettingsWithTitleDisabled,
1087
1257
  });
1088
1258
  // Assert: Check that title was updated with CLI_TITLE value
1089
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]2;'));
1259
+ const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1090
1260
  expect(titleWrites).toHaveLength(1);
1091
- expect(titleWrites[0][0]).toBe(`\x1b]2;${'Custom Gemini Title'.padEnd(80, ' ')}\x07`);
1261
+ expect(titleWrites[0][0]).toBe(`\x1b]0;${'✦ Working… (Custom Gemini Title)'.padEnd(80, ' ')}\x07`);
1092
1262
  unmount();
1093
1263
  });
1094
1264
  });
@@ -1098,6 +1268,7 @@ describe('AppContainer State Management', () => {
1098
1268
  });
1099
1269
  afterEach(() => {
1100
1270
  vi.useRealTimers();
1271
+ vi.restoreAllMocks();
1101
1272
  });
1102
1273
  it('should set and clear the queue error message after a timeout', async () => {
1103
1274
  const { rerender, unmount } = renderAppContainer();
@@ -1241,6 +1412,7 @@ describe('AppContainer State Management', () => {
1241
1412
  });
1242
1413
  afterEach(() => {
1243
1414
  vi.useRealTimers();
1415
+ vi.restoreAllMocks();
1244
1416
  });
1245
1417
  describe('CTRL+C', () => {
1246
1418
  it('should cancel ongoing request on first press', async () => {
@@ -1341,6 +1513,7 @@ describe('AppContainer State Management', () => {
1341
1513
  });
1342
1514
  afterEach(() => {
1343
1515
  vi.useRealTimers();
1516
+ vi.restoreAllMocks();
1344
1517
  });
1345
1518
  describe.each([
1346
1519
  {
@@ -1551,7 +1724,21 @@ describe('AppContainer State Management', () => {
1551
1724
  handler({ model: 'new-model' });
1552
1725
  });
1553
1726
  // Assert: Verify model is updated
1554
- expect(capturedUIState.currentModel).toBe('new-model');
1727
+ await waitFor(() => {
1728
+ expect(capturedUIState.currentModel).toBe('new-model');
1729
+ });
1730
+ unmount();
1731
+ });
1732
+ it('provides activeHooks from useHookDisplayState', async () => {
1733
+ const mockHooks = [{ name: 'hook1', eventName: 'event1' }];
1734
+ mockedUseHookDisplayState.mockReturnValue(mockHooks);
1735
+ let unmount;
1736
+ await act(async () => {
1737
+ const result = renderAppContainer();
1738
+ unmount = result.unmount;
1739
+ });
1740
+ await waitFor(() => expect(capturedUIState).toBeTruthy());
1741
+ expect(capturedUIState.activeHooks).toEqual(mockHooks);
1555
1742
  unmount();
1556
1743
  });
1557
1744
  });
@@ -1644,7 +1831,9 @@ describe('AppContainer State Management', () => {
1644
1831
  await act(async () => {
1645
1832
  onCancelSubmit(true);
1646
1833
  });
1647
- expect(mockSetText).toHaveBeenCalledWith('previous message');
1834
+ await waitFor(() => {
1835
+ expect(mockSetText).toHaveBeenCalledWith('previous message');
1836
+ });
1648
1837
  unmount();
1649
1838
  });
1650
1839
  it('input history is independent from conversation history (survives /clear)', async () => {