@didim365/agent-cli 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1034) hide show
  1. package/package.json +6 -3
  2. package/dist/src/commands/extensions/configure.test.d.ts +0 -1
  3. package/dist/src/commands/extensions/configure.test.js +0 -197
  4. package/dist/src/commands/extensions/configure.test.js.map +0 -1
  5. package/dist/src/commands/extensions/disable.test.d.ts +0 -6
  6. package/dist/src/commands/extensions/disable.test.js +0 -169
  7. package/dist/src/commands/extensions/disable.test.js.map +0 -1
  8. package/dist/src/commands/extensions/enable.test.d.ts +0 -6
  9. package/dist/src/commands/extensions/enable.test.js +0 -199
  10. package/dist/src/commands/extensions/enable.test.js.map +0 -1
  11. package/dist/src/commands/extensions/install.test.d.ts +0 -6
  12. package/dist/src/commands/extensions/install.test.js +0 -140
  13. package/dist/src/commands/extensions/install.test.js.map +0 -1
  14. package/dist/src/commands/extensions/link.test.d.ts +0 -6
  15. package/dist/src/commands/extensions/link.test.js +0 -137
  16. package/dist/src/commands/extensions/link.test.js.map +0 -1
  17. package/dist/src/commands/extensions/list.test.d.ts +0 -6
  18. package/dist/src/commands/extensions/list.test.js +0 -148
  19. package/dist/src/commands/extensions/list.test.js.map +0 -1
  20. package/dist/src/commands/extensions/new.test.d.ts +0 -6
  21. package/dist/src/commands/extensions/new.test.js +0 -62
  22. package/dist/src/commands/extensions/new.test.js.map +0 -1
  23. package/dist/src/commands/extensions/uninstall.test.d.ts +0 -6
  24. package/dist/src/commands/extensions/uninstall.test.js +0 -199
  25. package/dist/src/commands/extensions/uninstall.test.js.map +0 -1
  26. package/dist/src/commands/extensions/update.test.d.ts +0 -6
  27. package/dist/src/commands/extensions/update.test.js +0 -170
  28. package/dist/src/commands/extensions/update.test.js.map +0 -1
  29. package/dist/src/commands/extensions/validate.test.d.ts +0 -6
  30. package/dist/src/commands/extensions/validate.test.js +0 -96
  31. package/dist/src/commands/extensions/validate.test.js.map +0 -1
  32. package/dist/src/commands/extensions.test.d.ts +0 -6
  33. package/dist/src/commands/extensions.test.js +0 -67
  34. package/dist/src/commands/extensions.test.js.map +0 -1
  35. package/dist/src/commands/hooks/migrate.test.d.ts +0 -6
  36. package/dist/src/commands/hooks/migrate.test.js +0 -388
  37. package/dist/src/commands/hooks/migrate.test.js.map +0 -1
  38. package/dist/src/commands/mcp/add.test.d.ts +0 -6
  39. package/dist/src/commands/mcp/add.test.js +0 -274
  40. package/dist/src/commands/mcp/add.test.js.map +0 -1
  41. package/dist/src/commands/mcp/list.test.d.ts +0 -6
  42. package/dist/src/commands/mcp/list.test.js +0 -150
  43. package/dist/src/commands/mcp/list.test.js.map +0 -1
  44. package/dist/src/commands/mcp/remove.test.d.ts +0 -6
  45. package/dist/src/commands/mcp/remove.test.js +0 -189
  46. package/dist/src/commands/mcp/remove.test.js.map +0 -1
  47. package/dist/src/commands/mcp.test.d.ts +0 -6
  48. package/dist/src/commands/mcp.test.js +0 -65
  49. package/dist/src/commands/mcp.test.js.map +0 -1
  50. package/dist/src/commands/skills/disable.test.d.ts +0 -6
  51. package/dist/src/commands/skills/disable.test.js +0 -96
  52. package/dist/src/commands/skills/disable.test.js.map +0 -1
  53. package/dist/src/commands/skills/enable.test.d.ts +0 -6
  54. package/dist/src/commands/skills/enable.test.js +0 -107
  55. package/dist/src/commands/skills/enable.test.js.map +0 -1
  56. package/dist/src/commands/skills/install.test.d.ts +0 -6
  57. package/dist/src/commands/skills/install.test.js +0 -95
  58. package/dist/src/commands/skills/install.test.js.map +0 -1
  59. package/dist/src/commands/skills/list.test.d.ts +0 -6
  60. package/dist/src/commands/skills/list.test.js +0 -136
  61. package/dist/src/commands/skills/list.test.js.map +0 -1
  62. package/dist/src/commands/skills/uninstall.test.d.ts +0 -6
  63. package/dist/src/commands/skills/uninstall.test.js +0 -61
  64. package/dist/src/commands/skills/uninstall.test.js.map +0 -1
  65. package/dist/src/commands/skills.test.d.ts +0 -6
  66. package/dist/src/commands/skills.test.js +0 -49
  67. package/dist/src/commands/skills.test.js.map +0 -1
  68. package/dist/src/commands/utils.test.d.ts +0 -6
  69. package/dist/src/commands/utils.test.js +0 -35
  70. package/dist/src/commands/utils.test.js.map +0 -1
  71. package/dist/src/config/auth.test.d.ts +0 -6
  72. package/dist/src/config/auth.test.js +0 -89
  73. package/dist/src/config/auth.test.js.map +0 -1
  74. package/dist/src/config/config.integration.test.d.ts +0 -6
  75. package/dist/src/config/config.integration.test.js +0 -205
  76. package/dist/src/config/config.integration.test.js.map +0 -1
  77. package/dist/src/config/config.test.d.ts +0 -6
  78. package/dist/src/config/config.test.js +0 -2413
  79. package/dist/src/config/config.test.js.map +0 -1
  80. package/dist/src/config/extension-manager-agents.test.d.ts +0 -6
  81. package/dist/src/config/extension-manager-agents.test.js +0 -114
  82. package/dist/src/config/extension-manager-agents.test.js.map +0 -1
  83. package/dist/src/config/extension-manager-scope.test.d.ts +0 -6
  84. package/dist/src/config/extension-manager-scope.test.js +0 -153
  85. package/dist/src/config/extension-manager-scope.test.js.map +0 -1
  86. package/dist/src/config/extension-manager-skills.test.d.ts +0 -6
  87. package/dist/src/config/extension-manager-skills.test.js +0 -148
  88. package/dist/src/config/extension-manager-skills.test.js.map +0 -1
  89. package/dist/src/config/extension.test.d.ts +0 -6
  90. package/dist/src/config/extension.test.js +0 -1671
  91. package/dist/src/config/extension.test.js.map +0 -1
  92. package/dist/src/config/extensions/consent.test.d.ts +0 -6
  93. package/dist/src/config/extensions/consent.test.js +0 -280
  94. package/dist/src/config/extensions/consent.test.js.map +0 -1
  95. package/dist/src/config/extensions/extensionEnablement.test.d.ts +0 -6
  96. package/dist/src/config/extensions/extensionEnablement.test.js +0 -404
  97. package/dist/src/config/extensions/extensionEnablement.test.js.map +0 -1
  98. package/dist/src/config/extensions/extensionSettings.test.d.ts +0 -6
  99. package/dist/src/config/extensions/extensionSettings.test.js +0 -493
  100. package/dist/src/config/extensions/extensionSettings.test.js.map +0 -1
  101. package/dist/src/config/extensions/extensionUpdates.test.d.ts +0 -6
  102. package/dist/src/config/extensions/extensionUpdates.test.js +0 -230
  103. package/dist/src/config/extensions/extensionUpdates.test.js.map +0 -1
  104. package/dist/src/config/extensions/github.test.d.ts +0 -6
  105. package/dist/src/config/extensions/github.test.js +0 -441
  106. package/dist/src/config/extensions/github.test.js.map +0 -1
  107. package/dist/src/config/extensions/github_fetch.test.d.ts +0 -6
  108. package/dist/src/config/extensions/github_fetch.test.js +0 -169
  109. package/dist/src/config/extensions/github_fetch.test.js.map +0 -1
  110. package/dist/src/config/extensions/storage.test.d.ts +0 -6
  111. package/dist/src/config/extensions/storage.test.js +0 -64
  112. package/dist/src/config/extensions/storage.test.js.map +0 -1
  113. package/dist/src/config/extensions/update.test.d.ts +0 -6
  114. package/dist/src/config/extensions/update.test.js +0 -231
  115. package/dist/src/config/extensions/update.test.js.map +0 -1
  116. package/dist/src/config/extensions/variables.test.d.ts +0 -6
  117. package/dist/src/config/extensions/variables.test.js +0 -103
  118. package/dist/src/config/extensions/variables.test.js.map +0 -1
  119. package/dist/src/config/keyBindings.test.d.ts +0 -6
  120. package/dist/src/config/keyBindings.test.js +0 -108
  121. package/dist/src/config/keyBindings.test.js.map +0 -1
  122. package/dist/src/config/mcp/mcpServerEnablement.test.d.ts +0 -6
  123. package/dist/src/config/mcp/mcpServerEnablement.test.js +0 -147
  124. package/dist/src/config/mcp/mcpServerEnablement.test.js.map +0 -1
  125. package/dist/src/config/policy-engine.integration.test.d.ts +0 -6
  126. package/dist/src/config/policy-engine.integration.test.js +0 -353
  127. package/dist/src/config/policy-engine.integration.test.js.map +0 -1
  128. package/dist/src/config/sandboxConfig.test.d.ts +0 -6
  129. package/dist/src/config/sandboxConfig.test.js +0 -184
  130. package/dist/src/config/sandboxConfig.test.js.map +0 -1
  131. package/dist/src/config/settingPaths.test.d.ts +0 -6
  132. package/dist/src/config/settingPaths.test.js +0 -22
  133. package/dist/src/config/settingPaths.test.js.map +0 -1
  134. package/dist/src/config/settings-validation.test.d.ts +0 -6
  135. package/dist/src/config/settings-validation.test.js +0 -370
  136. package/dist/src/config/settings-validation.test.js.map +0 -1
  137. package/dist/src/config/settings.test.d.ts +0 -6
  138. package/dist/src/config/settings.test.js +0 -1822
  139. package/dist/src/config/settings.test.js.map +0 -1
  140. package/dist/src/config/settingsSchema.test.d.ts +0 -6
  141. package/dist/src/config/settingsSchema.test.js +0 -309
  142. package/dist/src/config/settingsSchema.test.js.map +0 -1
  143. package/dist/src/config/settings_repro.test.d.ts +0 -6
  144. package/dist/src/config/settings_repro.test.js +0 -166
  145. package/dist/src/config/settings_repro.test.js.map +0 -1
  146. package/dist/src/config/settings_validation_warning.test.d.ts +0 -6
  147. package/dist/src/config/settings_validation_warning.test.js +0 -123
  148. package/dist/src/config/settings_validation_warning.test.js.map +0 -1
  149. package/dist/src/config/skills-backward-compatibility.test.d.ts +0 -6
  150. package/dist/src/config/skills-backward-compatibility.test.js +0 -99
  151. package/dist/src/config/skills-backward-compatibility.test.js.map +0 -1
  152. package/dist/src/config/trustedFolders.test.d.ts +0 -6
  153. package/dist/src/config/trustedFolders.test.js +0 -385
  154. package/dist/src/config/trustedFolders.test.js.map +0 -1
  155. package/dist/src/core/auth.test.d.ts +0 -6
  156. package/dist/src/core/auth.test.js +0 -47
  157. package/dist/src/core/auth.test.js.map +0 -1
  158. package/dist/src/core/initializer.test.d.ts +0 -6
  159. package/dist/src/core/initializer.test.js +0 -101
  160. package/dist/src/core/initializer.test.js.map +0 -1
  161. package/dist/src/core/theme.test.d.ts +0 -6
  162. package/dist/src/core/theme.test.js +0 -46
  163. package/dist/src/core/theme.test.js.map +0 -1
  164. package/dist/src/deferred.test.d.ts +0 -6
  165. package/dist/src/deferred.test.js +0 -164
  166. package/dist/src/deferred.test.js.map +0 -1
  167. package/dist/src/gemini.test.d.ts +0 -6
  168. package/dist/src/gemini.test.js +0 -1334
  169. package/dist/src/gemini.test.js.map +0 -1
  170. package/dist/src/gemini_cleanup.test.d.ts +0 -6
  171. package/dist/src/gemini_cleanup.test.js +0 -208
  172. package/dist/src/gemini_cleanup.test.js.map +0 -1
  173. package/dist/src/nonInteractiveCli.test.d.ts +0 -6
  174. package/dist/src/nonInteractiveCli.test.js +0 -1687
  175. package/dist/src/nonInteractiveCli.test.js.map +0 -1
  176. package/dist/src/services/BuiltinCommandLoader.test.d.ts +0 -6
  177. package/dist/src/services/BuiltinCommandLoader.test.js +0 -254
  178. package/dist/src/services/BuiltinCommandLoader.test.js.map +0 -1
  179. package/dist/src/services/CommandService.test.d.ts +0 -6
  180. package/dist/src/services/CommandService.test.js +0 -234
  181. package/dist/src/services/CommandService.test.js.map +0 -1
  182. package/dist/src/services/FileCommandLoader.test.d.ts +0 -6
  183. package/dist/src/services/FileCommandLoader.test.js +0 -1102
  184. package/dist/src/services/FileCommandLoader.test.js.map +0 -1
  185. package/dist/src/services/McpPromptLoader.test.d.ts +0 -6
  186. package/dist/src/services/McpPromptLoader.test.js +0 -411
  187. package/dist/src/services/McpPromptLoader.test.js.map +0 -1
  188. package/dist/src/services/prompt-processors/argumentProcessor.test.d.ts +0 -6
  189. package/dist/src/services/prompt-processors/argumentProcessor.test.js +0 -40
  190. package/dist/src/services/prompt-processors/argumentProcessor.test.js.map +0 -1
  191. package/dist/src/services/prompt-processors/atFileProcessor.test.d.ts +0 -6
  192. package/dist/src/services/prompt-processors/atFileProcessor.test.js +0 -174
  193. package/dist/src/services/prompt-processors/atFileProcessor.test.js.map +0 -1
  194. package/dist/src/services/prompt-processors/injectionParser.test.d.ts +0 -6
  195. package/dist/src/services/prompt-processors/injectionParser.test.js +0 -189
  196. package/dist/src/services/prompt-processors/injectionParser.test.js.map +0 -1
  197. package/dist/src/services/prompt-processors/shellProcessor.test.d.ts +0 -6
  198. package/dist/src/services/prompt-processors/shellProcessor.test.js +0 -514
  199. package/dist/src/services/prompt-processors/shellProcessor.test.js.map +0 -1
  200. package/dist/src/test-utils/mockCommandContext.test.d.ts +0 -6
  201. package/dist/src/test-utils/mockCommandContext.test.js +0 -51
  202. package/dist/src/test-utils/mockCommandContext.test.js.map +0 -1
  203. package/dist/src/test-utils/render.test.d.ts +0 -6
  204. package/dist/src/test-utils/render.test.js +0 -79
  205. package/dist/src/test-utils/render.test.js.map +0 -1
  206. package/dist/src/ui/App.test.d.ts +0 -6
  207. package/dist/src/ui/App.test.js +0 -218
  208. package/dist/src/ui/App.test.js.map +0 -1
  209. package/dist/src/ui/AppContainer.test.d.ts +0 -6
  210. package/dist/src/ui/AppContainer.test.js +0 -2072
  211. package/dist/src/ui/AppContainer.test.js.map +0 -1
  212. package/dist/src/ui/IdeIntegrationNudge.test.d.ts +0 -6
  213. package/dist/src/ui/IdeIntegrationNudge.test.js +0 -158
  214. package/dist/src/ui/IdeIntegrationNudge.test.js.map +0 -1
  215. package/dist/src/ui/auth/ApiAuthDialog.test.d.ts +0 -6
  216. package/dist/src/ui/auth/ApiAuthDialog.test.js +0 -109
  217. package/dist/src/ui/auth/ApiAuthDialog.test.js.map +0 -1
  218. package/dist/src/ui/auth/AuthDialog.test.d.ts +0 -6
  219. package/dist/src/ui/auth/AuthDialog.test.js +0 -309
  220. package/dist/src/ui/auth/AuthDialog.test.js.map +0 -1
  221. package/dist/src/ui/auth/AuthInProgress.test.d.ts +0 -6
  222. package/dist/src/ui/auth/AuthInProgress.test.js +0 -81
  223. package/dist/src/ui/auth/AuthInProgress.test.js.map +0 -1
  224. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.d.ts +0 -6
  225. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js +0 -66
  226. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js.map +0 -1
  227. package/dist/src/ui/auth/useAuth.test.d.ts +0 -6
  228. package/dist/src/ui/auth/useAuth.test.js +0 -189
  229. package/dist/src/ui/auth/useAuth.test.js.map +0 -1
  230. package/dist/src/ui/commands/aboutCommand.test.d.ts +0 -6
  231. package/dist/src/ui/commands/aboutCommand.test.js +0 -143
  232. package/dist/src/ui/commands/aboutCommand.test.js.map +0 -1
  233. package/dist/src/ui/commands/agentsCommand.test.d.ts +0 -6
  234. package/dist/src/ui/commands/agentsCommand.test.js +0 -344
  235. package/dist/src/ui/commands/agentsCommand.test.js.map +0 -1
  236. package/dist/src/ui/commands/authCommand.test.d.ts +0 -6
  237. package/dist/src/ui/commands/authCommand.test.js +0 -98
  238. package/dist/src/ui/commands/authCommand.test.js.map +0 -1
  239. package/dist/src/ui/commands/bugCommand.test.d.ts +0 -6
  240. package/dist/src/ui/commands/bugCommand.test.js +0 -186
  241. package/dist/src/ui/commands/bugCommand.test.js.map +0 -1
  242. package/dist/src/ui/commands/chatCommand.test.d.ts +0 -6
  243. package/dist/src/ui/commands/chatCommand.test.js +0 -620
  244. package/dist/src/ui/commands/chatCommand.test.js.map +0 -1
  245. package/dist/src/ui/commands/clearCommand.test.d.ts +0 -6
  246. package/dist/src/ui/commands/clearCommand.test.js +0 -87
  247. package/dist/src/ui/commands/clearCommand.test.js.map +0 -1
  248. package/dist/src/ui/commands/compressCommand.test.d.ts +0 -6
  249. package/dist/src/ui/commands/compressCommand.test.js +0 -98
  250. package/dist/src/ui/commands/compressCommand.test.js.map +0 -1
  251. package/dist/src/ui/commands/copyCommand.test.d.ts +0 -6
  252. package/dist/src/ui/commands/copyCommand.test.js +0 -242
  253. package/dist/src/ui/commands/copyCommand.test.js.map +0 -1
  254. package/dist/src/ui/commands/corgiCommand.test.d.ts +0 -6
  255. package/dist/src/ui/commands/corgiCommand.test.js +0 -28
  256. package/dist/src/ui/commands/corgiCommand.test.js.map +0 -1
  257. package/dist/src/ui/commands/directoryCommand.test.d.ts +0 -6
  258. package/dist/src/ui/commands/directoryCommand.test.js +0 -353
  259. package/dist/src/ui/commands/directoryCommand.test.js.map +0 -1
  260. package/dist/src/ui/commands/docsCommand.test.d.ts +0 -6
  261. package/dist/src/ui/commands/docsCommand.test.js +0 -72
  262. package/dist/src/ui/commands/docsCommand.test.js.map +0 -1
  263. package/dist/src/ui/commands/editorCommand.test.d.ts +0 -6
  264. package/dist/src/ui/commands/editorCommand.test.js +0 -27
  265. package/dist/src/ui/commands/editorCommand.test.js.map +0 -1
  266. package/dist/src/ui/commands/extensionsCommand.test.d.ts +0 -6
  267. package/dist/src/ui/commands/extensionsCommand.test.js +0 -778
  268. package/dist/src/ui/commands/extensionsCommand.test.js.map +0 -1
  269. package/dist/src/ui/commands/helpCommand.test.d.ts +0 -6
  270. package/dist/src/ui/commands/helpCommand.test.js +0 -42
  271. package/dist/src/ui/commands/helpCommand.test.js.map +0 -1
  272. package/dist/src/ui/commands/hooksCommand.test.d.ts +0 -6
  273. package/dist/src/ui/commands/hooksCommand.test.js +0 -572
  274. package/dist/src/ui/commands/hooksCommand.test.js.map +0 -1
  275. package/dist/src/ui/commands/ideCommand.test.d.ts +0 -6
  276. package/dist/src/ui/commands/ideCommand.test.js +0 -203
  277. package/dist/src/ui/commands/ideCommand.test.js.map +0 -1
  278. package/dist/src/ui/commands/initCommand.test.d.ts +0 -6
  279. package/dist/src/ui/commands/initCommand.test.js +0 -84
  280. package/dist/src/ui/commands/initCommand.test.js.map +0 -1
  281. package/dist/src/ui/commands/mcpCommand.test.d.ts +0 -6
  282. package/dist/src/ui/commands/mcpCommand.test.js +0 -189
  283. package/dist/src/ui/commands/mcpCommand.test.js.map +0 -1
  284. package/dist/src/ui/commands/memoryCommand.test.d.ts +0 -6
  285. package/dist/src/ui/commands/memoryCommand.test.js +0 -350
  286. package/dist/src/ui/commands/memoryCommand.test.js.map +0 -1
  287. package/dist/src/ui/commands/modelCommand.test.d.ts +0 -6
  288. package/dist/src/ui/commands/modelCommand.test.js +0 -41
  289. package/dist/src/ui/commands/modelCommand.test.js.map +0 -1
  290. package/dist/src/ui/commands/permissionsCommand.test.d.ts +0 -6
  291. package/dist/src/ui/commands/permissionsCommand.test.js +0 -86
  292. package/dist/src/ui/commands/permissionsCommand.test.js.map +0 -1
  293. package/dist/src/ui/commands/policiesCommand.test.d.ts +0 -6
  294. package/dist/src/ui/commands/policiesCommand.test.js +0 -87
  295. package/dist/src/ui/commands/policiesCommand.test.js.map +0 -1
  296. package/dist/src/ui/commands/privacyCommand.test.d.ts +0 -6
  297. package/dist/src/ui/commands/privacyCommand.test.js +0 -32
  298. package/dist/src/ui/commands/privacyCommand.test.js.map +0 -1
  299. package/dist/src/ui/commands/quitCommand.test.d.ts +0 -6
  300. package/dist/src/ui/commands/quitCommand.test.js +0 -50
  301. package/dist/src/ui/commands/quitCommand.test.js.map +0 -1
  302. package/dist/src/ui/commands/restoreCommand.test.d.ts +0 -6
  303. package/dist/src/ui/commands/restoreCommand.test.js +0 -190
  304. package/dist/src/ui/commands/restoreCommand.test.js.map +0 -1
  305. package/dist/src/ui/commands/rewindCommand.test.d.ts +0 -6
  306. package/dist/src/ui/commands/rewindCommand.test.js +0 -242
  307. package/dist/src/ui/commands/rewindCommand.test.js.map +0 -1
  308. package/dist/src/ui/commands/settingsCommand.test.d.ts +0 -6
  309. package/dist/src/ui/commands/settingsCommand.test.js +0 -30
  310. package/dist/src/ui/commands/settingsCommand.test.js.map +0 -1
  311. package/dist/src/ui/commands/setupGithubCommand.test.d.ts +0 -6
  312. package/dist/src/ui/commands/setupGithubCommand.test.js +0 -238
  313. package/dist/src/ui/commands/setupGithubCommand.test.js.map +0 -1
  314. package/dist/src/ui/commands/skillsCommand.test.d.ts +0 -6
  315. package/dist/src/ui/commands/skillsCommand.test.js +0 -426
  316. package/dist/src/ui/commands/skillsCommand.test.js.map +0 -1
  317. package/dist/src/ui/commands/statsCommand.test.d.ts +0 -6
  318. package/dist/src/ui/commands/statsCommand.test.js +0 -70
  319. package/dist/src/ui/commands/statsCommand.test.js.map +0 -1
  320. package/dist/src/ui/commands/terminalSetupCommand.test.d.ts +0 -6
  321. package/dist/src/ui/commands/terminalSetupCommand.test.js +0 -66
  322. package/dist/src/ui/commands/terminalSetupCommand.test.js.map +0 -1
  323. package/dist/src/ui/commands/themeCommand.test.d.ts +0 -6
  324. package/dist/src/ui/commands/themeCommand.test.js +0 -32
  325. package/dist/src/ui/commands/themeCommand.test.js.map +0 -1
  326. package/dist/src/ui/commands/toolsCommand.test.d.ts +0 -6
  327. package/dist/src/ui/commands/toolsCommand.test.js +0 -100
  328. package/dist/src/ui/commands/toolsCommand.test.js.map +0 -1
  329. package/dist/src/ui/components/AboutBox.test.d.ts +0 -6
  330. package/dist/src/ui/components/AboutBox.test.js +0 -59
  331. package/dist/src/ui/components/AboutBox.test.js.map +0 -1
  332. package/dist/src/ui/components/AdminSettingsChangedDialog.test.d.ts +0 -6
  333. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js +0 -43
  334. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js.map +0 -1
  335. package/dist/src/ui/components/AgentConfigDialog.test.d.ts +0 -6
  336. package/dist/src/ui/components/AgentConfigDialog.test.js +0 -241
  337. package/dist/src/ui/components/AgentConfigDialog.test.js.map +0 -1
  338. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.d.ts +0 -6
  339. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js +0 -190
  340. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js.map +0 -1
  341. package/dist/src/ui/components/AnsiOutput.test.d.ts +0 -6
  342. package/dist/src/ui/components/AnsiOutput.test.js +0 -92
  343. package/dist/src/ui/components/AnsiOutput.test.js.map +0 -1
  344. package/dist/src/ui/components/AppHeader.test.d.ts +0 -6
  345. package/dist/src/ui/components/AppHeader.test.js +0 -225
  346. package/dist/src/ui/components/AppHeader.test.js.map +0 -1
  347. package/dist/src/ui/components/ApprovalModeIndicator.test.d.ts +0 -6
  348. package/dist/src/ui/components/ApprovalModeIndicator.test.js +0 -37
  349. package/dist/src/ui/components/ApprovalModeIndicator.test.js.map +0 -1
  350. package/dist/src/ui/components/AskUserDialog.test.d.ts +0 -6
  351. package/dist/src/ui/components/AskUserDialog.test.js +0 -598
  352. package/dist/src/ui/components/AskUserDialog.test.js.map +0 -1
  353. package/dist/src/ui/components/Banner.test.d.ts +0 -6
  354. package/dist/src/ui/components/Banner.test.js +0 -24
  355. package/dist/src/ui/components/Banner.test.js.map +0 -1
  356. package/dist/src/ui/components/CliSpinner.test.d.ts +0 -6
  357. package/dist/src/ui/components/CliSpinner.test.js +0 -28
  358. package/dist/src/ui/components/CliSpinner.test.js.map +0 -1
  359. package/dist/src/ui/components/Composer.test.d.ts +0 -6
  360. package/dist/src/ui/components/Composer.test.js +0 -383
  361. package/dist/src/ui/components/Composer.test.js.map +0 -1
  362. package/dist/src/ui/components/ConfigInitDisplay.test.d.ts +0 -6
  363. package/dist/src/ui/components/ConfigInitDisplay.test.js +0 -117
  364. package/dist/src/ui/components/ConfigInitDisplay.test.js.map +0 -1
  365. package/dist/src/ui/components/ConsentPrompt.test.d.ts +0 -6
  366. package/dist/src/ui/components/ConsentPrompt.test.js +0 -77
  367. package/dist/src/ui/components/ConsentPrompt.test.js.map +0 -1
  368. package/dist/src/ui/components/ConsoleSummaryDisplay.test.d.ts +0 -6
  369. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js +0 -26
  370. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js.map +0 -1
  371. package/dist/src/ui/components/ContextSummaryDisplay.test.d.ts +0 -6
  372. package/dist/src/ui/components/ContextSummaryDisplay.test.js +0 -102
  373. package/dist/src/ui/components/ContextSummaryDisplay.test.js.map +0 -1
  374. package/dist/src/ui/components/ContextUsageDisplay.test.d.ts +0 -6
  375. package/dist/src/ui/components/ContextUsageDisplay.test.js +0 -43
  376. package/dist/src/ui/components/ContextUsageDisplay.test.js.map +0 -1
  377. package/dist/src/ui/components/CopyModeWarning.test.d.ts +0 -6
  378. package/dist/src/ui/components/CopyModeWarning.test.js +0 -33
  379. package/dist/src/ui/components/CopyModeWarning.test.js.map +0 -1
  380. package/dist/src/ui/components/DebugProfiler.test.d.ts +0 -6
  381. package/dist/src/ui/components/DebugProfiler.test.js +0 -229
  382. package/dist/src/ui/components/DebugProfiler.test.js.map +0 -1
  383. package/dist/src/ui/components/DetailedMessagesDisplay.test.d.ts +0 -6
  384. package/dist/src/ui/components/DetailedMessagesDisplay.test.js +0 -39
  385. package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +0 -1
  386. package/dist/src/ui/components/DialogManager.test.d.ts +0 -6
  387. package/dist/src/ui/components/DialogManager.test.js +0 -177
  388. package/dist/src/ui/components/DialogManager.test.js.map +0 -1
  389. package/dist/src/ui/components/EditorSettingsDialog.test.d.ts +0 -6
  390. package/dist/src/ui/components/EditorSettingsDialog.test.js +0 -119
  391. package/dist/src/ui/components/EditorSettingsDialog.test.js.map +0 -1
  392. package/dist/src/ui/components/ExitWarning.test.d.ts +0 -6
  393. package/dist/src/ui/components/ExitWarning.test.js +0 -54
  394. package/dist/src/ui/components/ExitWarning.test.js.map +0 -1
  395. package/dist/src/ui/components/FolderTrustDialog.test.d.ts +0 -6
  396. package/dist/src/ui/components/FolderTrustDialog.test.js +0 -102
  397. package/dist/src/ui/components/FolderTrustDialog.test.js.map +0 -1
  398. package/dist/src/ui/components/Footer.test.d.ts +0 -6
  399. package/dist/src/ui/components/Footer.test.js +0 -321
  400. package/dist/src/ui/components/Footer.test.js.map +0 -1
  401. package/dist/src/ui/components/GeminiRespondingSpinner.test.d.ts +0 -6
  402. package/dist/src/ui/components/GeminiRespondingSpinner.test.js +0 -61
  403. package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +0 -1
  404. package/dist/src/ui/components/GradientRegression.test.d.ts +0 -6
  405. package/dist/src/ui/components/GradientRegression.test.js +0 -105
  406. package/dist/src/ui/components/GradientRegression.test.js.map +0 -1
  407. package/dist/src/ui/components/Header.test.d.ts +0 -6
  408. package/dist/src/ui/components/Header.test.js +0 -147
  409. package/dist/src/ui/components/Header.test.js.map +0 -1
  410. package/dist/src/ui/components/Help.test.d.ts +0 -6
  411. package/dist/src/ui/components/Help.test.js +0 -67
  412. package/dist/src/ui/components/Help.test.js.map +0 -1
  413. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +0 -6
  414. package/dist/src/ui/components/HistoryItemDisplay.test.js +0 -207
  415. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +0 -1
  416. package/dist/src/ui/components/HookStatusDisplay.test.d.ts +0 -6
  417. package/dist/src/ui/components/HookStatusDisplay.test.js +0 -51
  418. package/dist/src/ui/components/HookStatusDisplay.test.js.map +0 -1
  419. package/dist/src/ui/components/IdeTrustChangeDialog.test.d.ts +0 -6
  420. package/dist/src/ui/components/IdeTrustChangeDialog.test.js +0 -58
  421. package/dist/src/ui/components/IdeTrustChangeDialog.test.js.map +0 -1
  422. package/dist/src/ui/components/InputPrompt.test.d.ts +0 -6
  423. package/dist/src/ui/components/InputPrompt.test.js +0 -2596
  424. package/dist/src/ui/components/InputPrompt.test.js.map +0 -1
  425. package/dist/src/ui/components/LoadingIndicator.test.d.ts +0 -6
  426. package/dist/src/ui/components/LoadingIndicator.test.js +0 -207
  427. package/dist/src/ui/components/LoadingIndicator.test.js.map +0 -1
  428. package/dist/src/ui/components/LogoutConfirmationDialog.test.d.ts +0 -6
  429. package/dist/src/ui/components/LogoutConfirmationDialog.test.js +0 -59
  430. package/dist/src/ui/components/LogoutConfirmationDialog.test.js.map +0 -1
  431. package/dist/src/ui/components/LoopDetectionConfirmation.test.d.ts +0 -6
  432. package/dist/src/ui/components/LoopDetectionConfirmation.test.js +0 -25
  433. package/dist/src/ui/components/LoopDetectionConfirmation.test.js.map +0 -1
  434. package/dist/src/ui/components/MainContent.test.d.ts +0 -6
  435. package/dist/src/ui/components/MainContent.test.js +0 -83
  436. package/dist/src/ui/components/MainContent.test.js.map +0 -1
  437. package/dist/src/ui/components/MemoryUsageDisplay.test.d.ts +0 -6
  438. package/dist/src/ui/components/MemoryUsageDisplay.test.js +0 -49
  439. package/dist/src/ui/components/MemoryUsageDisplay.test.js.map +0 -1
  440. package/dist/src/ui/components/ModelDialog.test.d.ts +0 -6
  441. package/dist/src/ui/components/ModelDialog.test.js +0 -197
  442. package/dist/src/ui/components/ModelDialog.test.js.map +0 -1
  443. package/dist/src/ui/components/ModelStatsDisplay.test.d.ts +0 -6
  444. package/dist/src/ui/components/ModelStatsDisplay.test.js +0 -343
  445. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +0 -1
  446. package/dist/src/ui/components/MultiFolderTrustDialog.test.d.ts +0 -6
  447. package/dist/src/ui/components/MultiFolderTrustDialog.test.js +0 -162
  448. package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +0 -1
  449. package/dist/src/ui/components/NewAgentsNotification.test.d.ts +0 -6
  450. package/dist/src/ui/components/NewAgentsNotification.test.js +0 -48
  451. package/dist/src/ui/components/NewAgentsNotification.test.js.map +0 -1
  452. package/dist/src/ui/components/Notifications.test.d.ts +0 -6
  453. package/dist/src/ui/components/Notifications.test.js +0 -164
  454. package/dist/src/ui/components/Notifications.test.js.map +0 -1
  455. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +0 -6
  456. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +0 -162
  457. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +0 -1
  458. package/dist/src/ui/components/ProQuotaDialog.test.d.ts +0 -6
  459. package/dist/src/ui/components/ProQuotaDialog.test.js +0 -191
  460. package/dist/src/ui/components/ProQuotaDialog.test.js.map +0 -1
  461. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +0 -6
  462. package/dist/src/ui/components/QueuedMessageDisplay.test.js +0 -65
  463. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +0 -1
  464. package/dist/src/ui/components/QuittingDisplay.test.d.ts +0 -6
  465. package/dist/src/ui/components/QuittingDisplay.test.js +0 -49
  466. package/dist/src/ui/components/QuittingDisplay.test.js.map +0 -1
  467. package/dist/src/ui/components/RawMarkdownIndicator.test.d.ts +0 -6
  468. package/dist/src/ui/components/RawMarkdownIndicator.test.js +0 -34
  469. package/dist/src/ui/components/RawMarkdownIndicator.test.js.map +0 -1
  470. package/dist/src/ui/components/RewindConfirmation.test.d.ts +0 -6
  471. package/dist/src/ui/components/RewindConfirmation.test.js +0 -53
  472. package/dist/src/ui/components/RewindConfirmation.test.js.map +0 -1
  473. package/dist/src/ui/components/RewindViewer.test.d.ts +0 -6
  474. package/dist/src/ui/components/RewindViewer.test.js +0 -241
  475. package/dist/src/ui/components/RewindViewer.test.js.map +0 -1
  476. package/dist/src/ui/components/SessionBrowser.test.d.ts +0 -6
  477. package/dist/src/ui/components/SessionBrowser.test.js +0 -256
  478. package/dist/src/ui/components/SessionBrowser.test.js.map +0 -1
  479. package/dist/src/ui/components/SessionSummaryDisplay.test.d.ts +0 -6
  480. package/dist/src/ui/components/SessionSummaryDisplay.test.js +0 -75
  481. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +0 -1
  482. package/dist/src/ui/components/SettingsDialog.test.d.ts +0 -6
  483. package/dist/src/ui/components/SettingsDialog.test.js +0 -1150
  484. package/dist/src/ui/components/SettingsDialog.test.js.map +0 -1
  485. package/dist/src/ui/components/ShellInputPrompt.test.d.ts +0 -6
  486. package/dist/src/ui/components/ShellInputPrompt.test.js +0 -91
  487. package/dist/src/ui/components/ShellInputPrompt.test.js.map +0 -1
  488. package/dist/src/ui/components/ShellModeIndicator.test.d.ts +0 -6
  489. package/dist/src/ui/components/ShellModeIndicator.test.js +0 -17
  490. package/dist/src/ui/components/ShellModeIndicator.test.js.map +0 -1
  491. package/dist/src/ui/components/ShowMoreLines.test.d.ts +0 -6
  492. package/dist/src/ui/components/ShowMoreLines.test.js +0 -40
  493. package/dist/src/ui/components/ShowMoreLines.test.js.map +0 -1
  494. package/dist/src/ui/components/StatsDisplay.test.d.ts +0 -6
  495. package/dist/src/ui/components/StatsDisplay.test.js +0 -438
  496. package/dist/src/ui/components/StatsDisplay.test.js.map +0 -1
  497. package/dist/src/ui/components/StatusDisplay.test.d.ts +0 -6
  498. package/dist/src/ui/components/StatusDisplay.test.js +0 -155
  499. package/dist/src/ui/components/StatusDisplay.test.js.map +0 -1
  500. package/dist/src/ui/components/StickyHeader.test.d.ts +0 -6
  501. package/dist/src/ui/components/StickyHeader.test.js +0 -17
  502. package/dist/src/ui/components/StickyHeader.test.js.map +0 -1
  503. package/dist/src/ui/components/SuggestionsDisplay.test.d.ts +0 -6
  504. package/dist/src/ui/components/SuggestionsDisplay.test.js +0 -56
  505. package/dist/src/ui/components/SuggestionsDisplay.test.js.map +0 -1
  506. package/dist/src/ui/components/Table.test.d.ts +0 -6
  507. package/dist/src/ui/components/Table.test.js +0 -53
  508. package/dist/src/ui/components/Table.test.js.map +0 -1
  509. package/dist/src/ui/components/ThemeDialog.test.d.ts +0 -6
  510. package/dist/src/ui/components/ThemeDialog.test.js +0 -167
  511. package/dist/src/ui/components/ThemeDialog.test.js.map +0 -1
  512. package/dist/src/ui/components/ThemedGradient.test.d.ts +0 -6
  513. package/dist/src/ui/components/ThemedGradient.test.js +0 -30
  514. package/dist/src/ui/components/ThemedGradient.test.js.map +0 -1
  515. package/dist/src/ui/components/Tips.test.d.ts +0 -6
  516. package/dist/src/ui/components/Tips.test.js +0 -23
  517. package/dist/src/ui/components/Tips.test.js.map +0 -1
  518. package/dist/src/ui/components/ToolConfirmationQueue.test.d.ts +0 -6
  519. package/dist/src/ui/components/ToolConfirmationQueue.test.js +0 -71
  520. package/dist/src/ui/components/ToolConfirmationQueue.test.js.map +0 -1
  521. package/dist/src/ui/components/ToolStatsDisplay.test.d.ts +0 -6
  522. package/dist/src/ui/components/ToolStatsDisplay.test.js +0 -227
  523. package/dist/src/ui/components/ToolStatsDisplay.test.js.map +0 -1
  524. package/dist/src/ui/components/UpdateNotification.test.d.ts +0 -6
  525. package/dist/src/ui/components/UpdateNotification.test.js +0 -16
  526. package/dist/src/ui/components/UpdateNotification.test.js.map +0 -1
  527. package/dist/src/ui/components/ValidationDialog.test.d.ts +0 -6
  528. package/dist/src/ui/components/ValidationDialog.test.js +0 -153
  529. package/dist/src/ui/components/ValidationDialog.test.js.map +0 -1
  530. package/dist/src/ui/components/messages/CompressionMessage.test.d.ts +0 -6
  531. package/dist/src/ui/components/messages/CompressionMessage.test.js +0 -191
  532. package/dist/src/ui/components/messages/CompressionMessage.test.js.map +0 -1
  533. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +0 -6
  534. package/dist/src/ui/components/messages/DiffRenderer.test.js +0 -240
  535. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +0 -1
  536. package/dist/src/ui/components/messages/ErrorMessage.test.d.ts +0 -6
  537. package/dist/src/ui/components/messages/ErrorMessage.test.js +0 -23
  538. package/dist/src/ui/components/messages/ErrorMessage.test.js.map +0 -1
  539. package/dist/src/ui/components/messages/GeminiMessage.test.d.ts +0 -6
  540. package/dist/src/ui/components/messages/GeminiMessage.test.js +0 -35
  541. package/dist/src/ui/components/messages/GeminiMessage.test.js.map +0 -1
  542. package/dist/src/ui/components/messages/InfoMessage.test.d.ts +0 -6
  543. package/dist/src/ui/components/messages/InfoMessage.test.js +0 -28
  544. package/dist/src/ui/components/messages/InfoMessage.test.js.map +0 -1
  545. package/dist/src/ui/components/messages/RedirectionConfirmation.test.d.ts +0 -6
  546. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js +0 -33
  547. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js.map +0 -1
  548. package/dist/src/ui/components/messages/ShellToolMessage.test.d.ts +0 -6
  549. package/dist/src/ui/components/messages/ShellToolMessage.test.js +0 -123
  550. package/dist/src/ui/components/messages/ShellToolMessage.test.js.map +0 -1
  551. package/dist/src/ui/components/messages/Todo.test.d.ts +0 -6
  552. package/dist/src/ui/components/messages/Todo.test.js +0 -114
  553. package/dist/src/ui/components/messages/Todo.test.js.map +0 -1
  554. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +0 -6
  555. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +0 -232
  556. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +0 -1
  557. package/dist/src/ui/components/messages/ToolGroupMessage.test.d.ts +0 -6
  558. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +0 -529
  559. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +0 -1
  560. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +0 -6
  561. package/dist/src/ui/components/messages/ToolMessage.test.js +0 -217
  562. package/dist/src/ui/components/messages/ToolMessage.test.js.map +0 -1
  563. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.d.ts +0 -6
  564. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js +0 -89
  565. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js.map +0 -1
  566. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.d.ts +0 -6
  567. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js +0 -62
  568. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js.map +0 -1
  569. package/dist/src/ui/components/messages/ToolResultDisplay.test.d.ts +0 -6
  570. package/dist/src/ui/components/messages/ToolResultDisplay.test.js +0 -114
  571. package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +0 -1
  572. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.d.ts +0 -6
  573. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js +0 -134
  574. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js.map +0 -1
  575. package/dist/src/ui/components/messages/UserMessage.test.d.ts +0 -6
  576. package/dist/src/ui/components/messages/UserMessage.test.js +0 -32
  577. package/dist/src/ui/components/messages/UserMessage.test.js.map +0 -1
  578. package/dist/src/ui/components/messages/WarningMessage.test.d.ts +0 -6
  579. package/dist/src/ui/components/messages/WarningMessage.test.js +0 -23
  580. package/dist/src/ui/components/messages/WarningMessage.test.js.map +0 -1
  581. package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +0 -6
  582. package/dist/src/ui/components/shared/BaseSelectionList.test.js +0 -386
  583. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +0 -1
  584. package/dist/src/ui/components/shared/BaseSettingsDialog.test.d.ts +0 -6
  585. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js +0 -434
  586. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js.map +0 -1
  587. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.d.ts +0 -6
  588. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +0 -79
  589. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +0 -1
  590. package/dist/src/ui/components/shared/EnumSelector.test.d.ts +0 -6
  591. package/dist/src/ui/components/shared/EnumSelector.test.js +0 -70
  592. package/dist/src/ui/components/shared/EnumSelector.test.js.map +0 -1
  593. package/dist/src/ui/components/shared/ExpandableText.test.d.ts +0 -6
  594. package/dist/src/ui/components/shared/ExpandableText.test.js +0 -88
  595. package/dist/src/ui/components/shared/ExpandableText.test.js.map +0 -1
  596. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.d.ts +0 -6
  597. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js +0 -34
  598. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js.map +0 -1
  599. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +0 -6
  600. package/dist/src/ui/components/shared/MaxSizedBox.test.js +0 -90
  601. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +0 -1
  602. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +0 -6
  603. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +0 -134
  604. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +0 -1
  605. package/dist/src/ui/components/shared/Scrollable.test.d.ts +0 -6
  606. package/dist/src/ui/components/shared/Scrollable.test.js +0 -74
  607. package/dist/src/ui/components/shared/Scrollable.test.js.map +0 -1
  608. package/dist/src/ui/components/shared/ScrollableList.test.d.ts +0 -6
  609. package/dist/src/ui/components/shared/ScrollableList.test.js +0 -241
  610. package/dist/src/ui/components/shared/ScrollableList.test.js.map +0 -1
  611. package/dist/src/ui/components/shared/TabHeader.test.d.ts +0 -6
  612. package/dist/src/ui/components/shared/TabHeader.test.js +0 -106
  613. package/dist/src/ui/components/shared/TabHeader.test.js.map +0 -1
  614. package/dist/src/ui/components/shared/TextInput.test.d.ts +0 -6
  615. package/dist/src/ui/components/shared/TextInput.test.js +0 -242
  616. package/dist/src/ui/components/shared/TextInput.test.js.map +0 -1
  617. package/dist/src/ui/components/shared/VirtualizedList.test.d.ts +0 -6
  618. package/dist/src/ui/components/shared/VirtualizedList.test.js +0 -171
  619. package/dist/src/ui/components/shared/VirtualizedList.test.js.map +0 -1
  620. package/dist/src/ui/components/shared/performance.test.d.ts +0 -1
  621. package/dist/src/ui/components/shared/performance.test.js +0 -67
  622. package/dist/src/ui/components/shared/performance.test.js.map +0 -1
  623. package/dist/src/ui/components/shared/text-buffer.test.d.ts +0 -6
  624. package/dist/src/ui/components/shared/text-buffer.test.js +0 -2490
  625. package/dist/src/ui/components/shared/text-buffer.test.js.map +0 -1
  626. package/dist/src/ui/components/shared/vim-buffer-actions.test.d.ts +0 -6
  627. package/dist/src/ui/components/shared/vim-buffer-actions.test.js +0 -964
  628. package/dist/src/ui/components/shared/vim-buffer-actions.test.js.map +0 -1
  629. package/dist/src/ui/components/views/ChatList.test.d.ts +0 -6
  630. package/dist/src/ui/components/views/ChatList.test.js +0 -45
  631. package/dist/src/ui/components/views/ChatList.test.js.map +0 -1
  632. package/dist/src/ui/components/views/ExtensionsList.test.d.ts +0 -6
  633. package/dist/src/ui/components/views/ExtensionsList.test.js +0 -148
  634. package/dist/src/ui/components/views/ExtensionsList.test.js.map +0 -1
  635. package/dist/src/ui/components/views/McpStatus.test.d.ts +0 -6
  636. package/dist/src/ui/components/views/McpStatus.test.js +0 -153
  637. package/dist/src/ui/components/views/McpStatus.test.js.map +0 -1
  638. package/dist/src/ui/components/views/SkillsList.test.d.ts +0 -6
  639. package/dist/src/ui/components/views/SkillsList.test.js +0 -97
  640. package/dist/src/ui/components/views/SkillsList.test.js.map +0 -1
  641. package/dist/src/ui/components/views/ToolsList.test.d.ts +0 -6
  642. package/dist/src/ui/components/views/ToolsList.test.js +0 -45
  643. package/dist/src/ui/components/views/ToolsList.test.js.map +0 -1
  644. package/dist/src/ui/contexts/KeypressContext.test.d.ts +0 -6
  645. package/dist/src/ui/contexts/KeypressContext.test.js +0 -957
  646. package/dist/src/ui/contexts/KeypressContext.test.js.map +0 -1
  647. package/dist/src/ui/contexts/MouseContext.test.d.ts +0 -6
  648. package/dist/src/ui/contexts/MouseContext.test.js +0 -198
  649. package/dist/src/ui/contexts/MouseContext.test.js.map +0 -1
  650. package/dist/src/ui/contexts/ScrollProvider.drag.test.d.ts +0 -6
  651. package/dist/src/ui/contexts/ScrollProvider.drag.test.js +0 -319
  652. package/dist/src/ui/contexts/ScrollProvider.drag.test.js.map +0 -1
  653. package/dist/src/ui/contexts/ScrollProvider.test.d.ts +0 -6
  654. package/dist/src/ui/contexts/ScrollProvider.test.js +0 -377
  655. package/dist/src/ui/contexts/ScrollProvider.test.js.map +0 -1
  656. package/dist/src/ui/contexts/SessionContext.test.d.ts +0 -6
  657. package/dist/src/ui/contexts/SessionContext.test.js +0 -198
  658. package/dist/src/ui/contexts/SessionContext.test.js.map +0 -1
  659. package/dist/src/ui/contexts/ToolActionsContext.test.d.ts +0 -6
  660. package/dist/src/ui/contexts/ToolActionsContext.test.js +0 -166
  661. package/dist/src/ui/contexts/ToolActionsContext.test.js.map +0 -1
  662. package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +0 -6
  663. package/dist/src/ui/hooks/atCommandProcessor.test.js +0 -1032
  664. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +0 -1
  665. package/dist/src/ui/hooks/atCommandProcessor_agents.test.d.ts +0 -6
  666. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js +0 -183
  667. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js.map +0 -1
  668. package/dist/src/ui/hooks/shellCommandProcessor.test.d.ts +0 -6
  669. package/dist/src/ui/hooks/shellCommandProcessor.test.js +0 -521
  670. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +0 -1
  671. package/dist/src/ui/hooks/slashCommandProcessor.test.d.ts +0 -6
  672. package/dist/src/ui/hooks/slashCommandProcessor.test.js +0 -796
  673. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +0 -1
  674. package/dist/src/ui/hooks/toolMapping.test.d.ts +0 -6
  675. package/dist/src/ui/hooks/toolMapping.test.js +0 -209
  676. package/dist/src/ui/hooks/toolMapping.test.js.map +0 -1
  677. package/dist/src/ui/hooks/useAnimatedScrollbar.test.d.ts +0 -6
  678. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js +0 -85
  679. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js.map +0 -1
  680. package/dist/src/ui/hooks/useApprovalModeIndicator.test.d.ts +0 -6
  681. package/dist/src/ui/hooks/useApprovalModeIndicator.test.js +0 -435
  682. package/dist/src/ui/hooks/useApprovalModeIndicator.test.js.map +0 -1
  683. package/dist/src/ui/hooks/useAtCompletion.test.d.ts +0 -6
  684. package/dist/src/ui/hooks/useAtCompletion.test.js +0 -417
  685. package/dist/src/ui/hooks/useAtCompletion.test.js.map +0 -1
  686. package/dist/src/ui/hooks/useAtCompletion_agents.test.d.ts +0 -6
  687. package/dist/src/ui/hooks/useAtCompletion_agents.test.js +0 -87
  688. package/dist/src/ui/hooks/useAtCompletion_agents.test.js.map +0 -1
  689. package/dist/src/ui/hooks/useBanner.test.d.ts +0 -6
  690. package/dist/src/ui/hooks/useBanner.test.js +0 -92
  691. package/dist/src/ui/hooks/useBanner.test.js.map +0 -1
  692. package/dist/src/ui/hooks/useBatchedScroll.test.d.ts +0 -6
  693. package/dist/src/ui/hooks/useBatchedScroll.test.js +0 -62
  694. package/dist/src/ui/hooks/useBatchedScroll.test.js.map +0 -1
  695. package/dist/src/ui/hooks/useCommandCompletion.test.d.ts +0 -6
  696. package/dist/src/ui/hooks/useCommandCompletion.test.js +0 -462
  697. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +0 -1
  698. package/dist/src/ui/hooks/useConsoleMessages.test.d.ts +0 -6
  699. package/dist/src/ui/hooks/useConsoleMessages.test.js +0 -159
  700. package/dist/src/ui/hooks/useConsoleMessages.test.js.map +0 -1
  701. package/dist/src/ui/hooks/useEditorSettings.test.d.ts +0 -6
  702. package/dist/src/ui/hooks/useEditorSettings.test.js +0 -179
  703. package/dist/src/ui/hooks/useEditorSettings.test.js.map +0 -1
  704. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +0 -6
  705. package/dist/src/ui/hooks/useExtensionUpdates.test.js +0 -279
  706. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +0 -1
  707. package/dist/src/ui/hooks/useFlickerDetector.test.d.ts +0 -6
  708. package/dist/src/ui/hooks/useFlickerDetector.test.js +0 -106
  709. package/dist/src/ui/hooks/useFlickerDetector.test.js.map +0 -1
  710. package/dist/src/ui/hooks/useFocus.test.d.ts +0 -6
  711. package/dist/src/ui/hooks/useFocus.test.js +0 -131
  712. package/dist/src/ui/hooks/useFocus.test.js.map +0 -1
  713. package/dist/src/ui/hooks/useFolderTrust.test.d.ts +0 -6
  714. package/dist/src/ui/hooks/useFolderTrust.test.js +0 -218
  715. package/dist/src/ui/hooks/useFolderTrust.test.js.map +0 -1
  716. package/dist/src/ui/hooks/useGeminiStream.test.d.ts +0 -6
  717. package/dist/src/ui/hooks/useGeminiStream.test.js +0 -2149
  718. package/dist/src/ui/hooks/useGeminiStream.test.js.map +0 -1
  719. package/dist/src/ui/hooks/useGitBranchName.test.d.ts +0 -6
  720. package/dist/src/ui/hooks/useGitBranchName.test.js +0 -183
  721. package/dist/src/ui/hooks/useGitBranchName.test.js.map +0 -1
  722. package/dist/src/ui/hooks/useHistoryManager.test.d.ts +0 -6
  723. package/dist/src/ui/hooks/useHistoryManager.test.js +0 -188
  724. package/dist/src/ui/hooks/useHistoryManager.test.js.map +0 -1
  725. package/dist/src/ui/hooks/useHookDisplayState.test.d.ts +0 -6
  726. package/dist/src/ui/hooks/useHookDisplayState.test.js +0 -180
  727. package/dist/src/ui/hooks/useHookDisplayState.test.js.map +0 -1
  728. package/dist/src/ui/hooks/useIdeTrustListener.test.d.ts +0 -6
  729. package/dist/src/ui/hooks/useIdeTrustListener.test.js +0 -214
  730. package/dist/src/ui/hooks/useIdeTrustListener.test.js.map +0 -1
  731. package/dist/src/ui/hooks/useIncludeDirsTrust.test.d.ts +0 -6
  732. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js +0 -172
  733. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js.map +0 -1
  734. package/dist/src/ui/hooks/useInputHistory.test.d.ts +0 -6
  735. package/dist/src/ui/hooks/useInputHistory.test.js +0 -208
  736. package/dist/src/ui/hooks/useInputHistory.test.js.map +0 -1
  737. package/dist/src/ui/hooks/useInputHistoryStore.test.d.ts +0 -6
  738. package/dist/src/ui/hooks/useInputHistoryStore.test.js +0 -238
  739. package/dist/src/ui/hooks/useInputHistoryStore.test.js.map +0 -1
  740. package/dist/src/ui/hooks/useKeypress.test.d.ts +0 -6
  741. package/dist/src/ui/hooks/useKeypress.test.js +0 -205
  742. package/dist/src/ui/hooks/useKeypress.test.js.map +0 -1
  743. package/dist/src/ui/hooks/useLoadingIndicator.test.d.ts +0 -6
  744. package/dist/src/ui/hooks/useLoadingIndicator.test.js +0 -145
  745. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +0 -1
  746. package/dist/src/ui/hooks/useMcpStatus.test.d.ts +0 -6
  747. package/dist/src/ui/hooks/useMcpStatus.test.js +0 -69
  748. package/dist/src/ui/hooks/useMcpStatus.test.js.map +0 -1
  749. package/dist/src/ui/hooks/useMemoryMonitor.test.d.ts +0 -6
  750. package/dist/src/ui/hooks/useMemoryMonitor.test.js +0 -62
  751. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +0 -1
  752. package/dist/src/ui/hooks/useMessageQueue.test.d.ts +0 -6
  753. package/dist/src/ui/hooks/useMessageQueue.test.js +0 -327
  754. package/dist/src/ui/hooks/useMessageQueue.test.js.map +0 -1
  755. package/dist/src/ui/hooks/useModelCommand.test.d.ts +0 -6
  756. package/dist/src/ui/hooks/useModelCommand.test.js +0 -45
  757. package/dist/src/ui/hooks/useModelCommand.test.js.map +0 -1
  758. package/dist/src/ui/hooks/useMouse.test.d.ts +0 -6
  759. package/dist/src/ui/hooks/useMouse.test.js +0 -57
  760. package/dist/src/ui/hooks/useMouse.test.js.map +0 -1
  761. package/dist/src/ui/hooks/useMouseClick.test.d.ts +0 -6
  762. package/dist/src/ui/hooks/useMouseClick.test.js +0 -59
  763. package/dist/src/ui/hooks/useMouseClick.test.js.map +0 -1
  764. package/dist/src/ui/hooks/useMouseDoubleClick.test.d.ts +0 -6
  765. package/dist/src/ui/hooks/useMouseDoubleClick.test.js +0 -125
  766. package/dist/src/ui/hooks/useMouseDoubleClick.test.js.map +0 -1
  767. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +0 -6
  768. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +0 -291
  769. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +0 -1
  770. package/dist/src/ui/hooks/usePhraseCycler.test.d.ts +0 -6
  771. package/dist/src/ui/hooks/usePhraseCycler.test.js +0 -208
  772. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +0 -1
  773. package/dist/src/ui/hooks/usePrivacySettings.test.d.ts +0 -6
  774. package/dist/src/ui/hooks/usePrivacySettings.test.js +0 -104
  775. package/dist/src/ui/hooks/usePrivacySettings.test.js.map +0 -1
  776. package/dist/src/ui/hooks/useQuotaAndFallback.test.d.ts +0 -6
  777. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +0 -477
  778. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +0 -1
  779. package/dist/src/ui/hooks/useReactToolScheduler.test.d.ts +0 -6
  780. package/dist/src/ui/hooks/useReactToolScheduler.test.js +0 -58
  781. package/dist/src/ui/hooks/useReactToolScheduler.test.js.map +0 -1
  782. package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +0 -6
  783. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +0 -169
  784. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +0 -1
  785. package/dist/src/ui/hooks/useRewind.test.d.ts +0 -6
  786. package/dist/src/ui/hooks/useRewind.test.js +0 -100
  787. package/dist/src/ui/hooks/useRewind.test.js.map +0 -1
  788. package/dist/src/ui/hooks/useSelectionList.test.d.ts +0 -6
  789. package/dist/src/ui/hooks/useSelectionList.test.js +0 -848
  790. package/dist/src/ui/hooks/useSelectionList.test.js.map +0 -1
  791. package/dist/src/ui/hooks/useSessionBrowser.test.d.ts +0 -6
  792. package/dist/src/ui/hooks/useSessionBrowser.test.js +0 -203
  793. package/dist/src/ui/hooks/useSessionBrowser.test.js.map +0 -1
  794. package/dist/src/ui/hooks/useSessionResume.test.d.ts +0 -6
  795. package/dist/src/ui/hooks/useSessionResume.test.js +0 -336
  796. package/dist/src/ui/hooks/useSessionResume.test.js.map +0 -1
  797. package/dist/src/ui/hooks/useShellHistory.test.d.ts +0 -6
  798. package/dist/src/ui/hooks/useShellHistory.test.js +0 -223
  799. package/dist/src/ui/hooks/useShellHistory.test.js.map +0 -1
  800. package/dist/src/ui/hooks/useShellInactivityStatus.test.d.ts +0 -6
  801. package/dist/src/ui/hooks/useShellInactivityStatus.test.js +0 -84
  802. package/dist/src/ui/hooks/useShellInactivityStatus.test.js.map +0 -1
  803. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +0 -9
  804. package/dist/src/ui/hooks/useSlashCompletion.test.js +0 -845
  805. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +0 -1
  806. package/dist/src/ui/hooks/useSnowfall.test.d.ts +0 -6
  807. package/dist/src/ui/hooks/useSnowfall.test.js +0 -88
  808. package/dist/src/ui/hooks/useSnowfall.test.js.map +0 -1
  809. package/dist/src/ui/hooks/useTabbedNavigation.test.d.ts +0 -6
  810. package/dist/src/ui/hooks/useTabbedNavigation.test.js +0 -187
  811. package/dist/src/ui/hooks/useTabbedNavigation.test.js.map +0 -1
  812. package/dist/src/ui/hooks/useTimer.test.d.ts +0 -6
  813. package/dist/src/ui/hooks/useTimer.test.js +0 -119
  814. package/dist/src/ui/hooks/useTimer.test.js.map +0 -1
  815. package/dist/src/ui/hooks/useTips.test.d.ts +0 -6
  816. package/dist/src/ui/hooks/useTips.test.js +0 -33
  817. package/dist/src/ui/hooks/useTips.test.js.map +0 -1
  818. package/dist/src/ui/hooks/useToolExecutionScheduler.test.d.ts +0 -6
  819. package/dist/src/ui/hooks/useToolExecutionScheduler.test.js +0 -376
  820. package/dist/src/ui/hooks/useToolExecutionScheduler.test.js.map +0 -1
  821. package/dist/src/ui/hooks/useToolScheduler.test.d.ts +0 -6
  822. package/dist/src/ui/hooks/useToolScheduler.test.js +0 -881
  823. package/dist/src/ui/hooks/useToolScheduler.test.js.map +0 -1
  824. package/dist/src/ui/hooks/useToolSchedulerFacade.test.d.ts +0 -6
  825. package/dist/src/ui/hooks/useToolSchedulerFacade.test.js +0 -45
  826. package/dist/src/ui/hooks/useToolSchedulerFacade.test.js.map +0 -1
  827. package/dist/src/ui/hooks/useTurnActivityMonitor.test.d.ts +0 -6
  828. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js +0 -97
  829. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js.map +0 -1
  830. package/dist/src/ui/hooks/vim.test.d.ts +0 -6
  831. package/dist/src/ui/hooks/vim.test.js +0 -1384
  832. package/dist/src/ui/hooks/vim.test.js.map +0 -1
  833. package/dist/src/ui/keyMatchers.test.d.ts +0 -6
  834. package/dist/src/ui/keyMatchers.test.js +0 -386
  835. package/dist/src/ui/keyMatchers.test.js.map +0 -1
  836. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.d.ts +0 -6
  837. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js +0 -121
  838. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js.map +0 -1
  839. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.d.ts +0 -6
  840. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js +0 -34
  841. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js.map +0 -1
  842. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.d.ts +0 -6
  843. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js +0 -34
  844. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js.map +0 -1
  845. package/dist/src/ui/privacy/PrivacyNotice.test.d.ts +0 -6
  846. package/dist/src/ui/privacy/PrivacyNotice.test.js +0 -62
  847. package/dist/src/ui/privacy/PrivacyNotice.test.js.map +0 -1
  848. package/dist/src/ui/state/extensions.test.d.ts +0 -6
  849. package/dist/src/ui/state/extensions.test.js +0 -219
  850. package/dist/src/ui/state/extensions.test.js.map +0 -1
  851. package/dist/src/ui/themes/color-utils.test.d.ts +0 -6
  852. package/dist/src/ui/themes/color-utils.test.js +0 -245
  853. package/dist/src/ui/themes/color-utils.test.js.map +0 -1
  854. package/dist/src/ui/themes/theme-manager.test.d.ts +0 -6
  855. package/dist/src/ui/themes/theme-manager.test.js +0 -150
  856. package/dist/src/ui/themes/theme-manager.test.js.map +0 -1
  857. package/dist/src/ui/themes/theme.test.d.ts +0 -6
  858. package/dist/src/ui/themes/theme.test.js +0 -174
  859. package/dist/src/ui/themes/theme.test.js.map +0 -1
  860. package/dist/src/ui/utils/CodeColorizer.test.d.ts +0 -6
  861. package/dist/src/ui/utils/CodeColorizer.test.js +0 -38
  862. package/dist/src/ui/utils/CodeColorizer.test.js.map +0 -1
  863. package/dist/src/ui/utils/InlineMarkdownRenderer.test.d.ts +0 -6
  864. package/dist/src/ui/utils/InlineMarkdownRenderer.test.js +0 -21
  865. package/dist/src/ui/utils/InlineMarkdownRenderer.test.js.map +0 -1
  866. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +0 -6
  867. package/dist/src/ui/utils/MarkdownDisplay.test.js +0 -159
  868. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +0 -1
  869. package/dist/src/ui/utils/clipboardUtils.test.d.ts +0 -6
  870. package/dist/src/ui/utils/clipboardUtils.test.js +0 -359
  871. package/dist/src/ui/utils/clipboardUtils.test.js.map +0 -1
  872. package/dist/src/ui/utils/clipboardUtils.windows.test.d.ts +0 -6
  873. package/dist/src/ui/utils/clipboardUtils.windows.test.js +0 -55
  874. package/dist/src/ui/utils/clipboardUtils.windows.test.js.map +0 -1
  875. package/dist/src/ui/utils/commandUtils.test.d.ts +0 -6
  876. package/dist/src/ui/utils/commandUtils.test.js +0 -479
  877. package/dist/src/ui/utils/commandUtils.test.js.map +0 -1
  878. package/dist/src/ui/utils/computeStats.test.d.ts +0 -6
  879. package/dist/src/ui/utils/computeStats.test.js +0 -271
  880. package/dist/src/ui/utils/computeStats.test.js.map +0 -1
  881. package/dist/src/ui/utils/directoryUtils.test.d.ts +0 -6
  882. package/dist/src/ui/utils/directoryUtils.test.js +0 -244
  883. package/dist/src/ui/utils/directoryUtils.test.js.map +0 -1
  884. package/dist/src/ui/utils/displayUtils.test.d.ts +0 -6
  885. package/dist/src/ui/utils/displayUtils.test.js +0 -61
  886. package/dist/src/ui/utils/displayUtils.test.js.map +0 -1
  887. package/dist/src/ui/utils/formatters.test.d.ts +0 -6
  888. package/dist/src/ui/utils/formatters.test.js +0 -124
  889. package/dist/src/ui/utils/formatters.test.js.map +0 -1
  890. package/dist/src/ui/utils/highlight.test.d.ts +0 -6
  891. package/dist/src/ui/utils/highlight.test.js +0 -198
  892. package/dist/src/ui/utils/highlight.test.js.map +0 -1
  893. package/dist/src/ui/utils/input.test.d.ts +0 -6
  894. package/dist/src/ui/utils/input.test.js +0 -44
  895. package/dist/src/ui/utils/input.test.js.map +0 -1
  896. package/dist/src/ui/utils/markdownUtilities.test.d.ts +0 -6
  897. package/dist/src/ui/utils/markdownUtilities.test.js +0 -42
  898. package/dist/src/ui/utils/markdownUtilities.test.js.map +0 -1
  899. package/dist/src/ui/utils/mouse.test.d.ts +0 -6
  900. package/dist/src/ui/utils/mouse.test.js +0 -136
  901. package/dist/src/ui/utils/mouse.test.js.map +0 -1
  902. package/dist/src/ui/utils/rewindFileOps.test.d.ts +0 -6
  903. package/dist/src/ui/utils/rewindFileOps.test.js +0 -375
  904. package/dist/src/ui/utils/rewindFileOps.test.js.map +0 -1
  905. package/dist/src/ui/utils/terminalCapabilityManager.test.d.ts +0 -6
  906. package/dist/src/ui/utils/terminalCapabilityManager.test.js +0 -220
  907. package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +0 -1
  908. package/dist/src/ui/utils/terminalSetup.test.d.ts +0 -6
  909. package/dist/src/ui/utils/terminalSetup.test.js +0 -147
  910. package/dist/src/ui/utils/terminalSetup.test.js.map +0 -1
  911. package/dist/src/ui/utils/terminalUtils.test.d.ts +0 -6
  912. package/dist/src/ui/utils/terminalUtils.test.js +0 -40
  913. package/dist/src/ui/utils/terminalUtils.test.js.map +0 -1
  914. package/dist/src/ui/utils/textOutput.test.d.ts +0 -6
  915. package/dist/src/ui/utils/textOutput.test.js +0 -79
  916. package/dist/src/ui/utils/textOutput.test.js.map +0 -1
  917. package/dist/src/ui/utils/textUtils.test.d.ts +0 -6
  918. package/dist/src/ui/utils/textUtils.test.js +0 -168
  919. package/dist/src/ui/utils/textUtils.test.js.map +0 -1
  920. package/dist/src/ui/utils/ui-sizing.test.d.ts +0 -6
  921. package/dist/src/ui/utils/ui-sizing.test.js +0 -38
  922. package/dist/src/ui/utils/ui-sizing.test.js.map +0 -1
  923. package/dist/src/ui/utils/updateCheck.test.d.ts +0 -6
  924. package/dist/src/ui/utils/updateCheck.test.js +0 -134
  925. package/dist/src/ui/utils/updateCheck.test.js.map +0 -1
  926. package/dist/src/utils/agentUtils.test.d.ts +0 -6
  927. package/dist/src/utils/agentUtils.test.js +0 -121
  928. package/dist/src/utils/agentUtils.test.js.map +0 -1
  929. package/dist/src/utils/checks.test.d.ts +0 -6
  930. package/dist/src/utils/checks.test.js +0 -29
  931. package/dist/src/utils/checks.test.js.map +0 -1
  932. package/dist/src/utils/cleanup.test.d.ts +0 -6
  933. package/dist/src/utils/cleanup.test.js +0 -92
  934. package/dist/src/utils/cleanup.test.js.map +0 -1
  935. package/dist/src/utils/commands.test.d.ts +0 -6
  936. package/dist/src/utils/commands.test.js +0 -115
  937. package/dist/src/utils/commands.test.js.map +0 -1
  938. package/dist/src/utils/commentJson.test.d.ts +0 -6
  939. package/dist/src/utils/commentJson.test.js +0 -308
  940. package/dist/src/utils/commentJson.test.js.map +0 -1
  941. package/dist/src/utils/deepMerge.test.d.ts +0 -6
  942. package/dist/src/utils/deepMerge.test.js +0 -201
  943. package/dist/src/utils/deepMerge.test.js.map +0 -1
  944. package/dist/src/utils/dialogScopeUtils.test.d.ts +0 -6
  945. package/dist/src/utils/dialogScopeUtils.test.js +0 -81
  946. package/dist/src/utils/dialogScopeUtils.test.js.map +0 -1
  947. package/dist/src/utils/envVarResolver.test.d.ts +0 -6
  948. package/dist/src/utils/envVarResolver.test.js +0 -221
  949. package/dist/src/utils/envVarResolver.test.js.map +0 -1
  950. package/dist/src/utils/errors.test.d.ts +0 -6
  951. package/dist/src/utils/errors.test.js +0 -435
  952. package/dist/src/utils/errors.test.js.map +0 -1
  953. package/dist/src/utils/events.test.d.ts +0 -6
  954. package/dist/src/utils/events.test.js +0 -24
  955. package/dist/src/utils/events.test.js.map +0 -1
  956. package/dist/src/utils/gitUtils.test.d.ts +0 -6
  957. package/dist/src/utils/gitUtils.test.js +0 -113
  958. package/dist/src/utils/gitUtils.test.js.map +0 -1
  959. package/dist/src/utils/handleAutoUpdate.test.d.ts +0 -6
  960. package/dist/src/utils/handleAutoUpdate.test.js +0 -310
  961. package/dist/src/utils/handleAutoUpdate.test.js.map +0 -1
  962. package/dist/src/utils/installationInfo.test.d.ts +0 -6
  963. package/dist/src/utils/installationInfo.test.js +0 -296
  964. package/dist/src/utils/installationInfo.test.js.map +0 -1
  965. package/dist/src/utils/jsonoutput.test.d.ts +0 -6
  966. package/dist/src/utils/jsonoutput.test.js +0 -74
  967. package/dist/src/utils/jsonoutput.test.js.map +0 -1
  968. package/dist/src/utils/math.test.d.ts +0 -6
  969. package/dist/src/utils/math.test.js +0 -23
  970. package/dist/src/utils/math.test.js.map +0 -1
  971. package/dist/src/utils/persistentState.test.d.ts +0 -6
  972. package/dist/src/utils/persistentState.test.js +0 -68
  973. package/dist/src/utils/persistentState.test.js.map +0 -1
  974. package/dist/src/utils/processUtils.test.d.ts +0 -6
  975. package/dist/src/utils/processUtils.test.js +0 -20
  976. package/dist/src/utils/processUtils.test.js.map +0 -1
  977. package/dist/src/utils/readStdin.test.d.ts +0 -6
  978. package/dist/src/utils/readStdin.test.js +0 -117
  979. package/dist/src/utils/readStdin.test.js.map +0 -1
  980. package/dist/src/utils/readStdin_safety.test.d.ts +0 -6
  981. package/dist/src/utils/readStdin_safety.test.js +0 -68
  982. package/dist/src/utils/readStdin_safety.test.js.map +0 -1
  983. package/dist/src/utils/relaunch.test.d.ts +0 -6
  984. package/dist/src/utils/relaunch.test.js +0 -279
  985. package/dist/src/utils/relaunch.test.js.map +0 -1
  986. package/dist/src/utils/resolvePath.test.d.ts +0 -6
  987. package/dist/src/utils/resolvePath.test.js +0 -34
  988. package/dist/src/utils/resolvePath.test.js.map +0 -1
  989. package/dist/src/utils/sandbox.test.d.ts +0 -6
  990. package/dist/src/utils/sandbox.test.js +0 -314
  991. package/dist/src/utils/sandbox.test.js.map +0 -1
  992. package/dist/src/utils/sandboxUtils.test.d.ts +0 -6
  993. package/dist/src/utils/sandboxUtils.test.js +0 -122
  994. package/dist/src/utils/sandboxUtils.test.js.map +0 -1
  995. package/dist/src/utils/sessionCleanup.integration.test.d.ts +0 -6
  996. package/dist/src/utils/sessionCleanup.integration.test.js +0 -182
  997. package/dist/src/utils/sessionCleanup.integration.test.js.map +0 -1
  998. package/dist/src/utils/sessionCleanup.test.d.ts +0 -6
  999. package/dist/src/utils/sessionCleanup.test.js +0 -1298
  1000. package/dist/src/utils/sessionCleanup.test.js.map +0 -1
  1001. package/dist/src/utils/sessionUtils.test.d.ts +0 -6
  1002. package/dist/src/utils/sessionUtils.test.js +0 -503
  1003. package/dist/src/utils/sessionUtils.test.js.map +0 -1
  1004. package/dist/src/utils/sessions.test.d.ts +0 -6
  1005. package/dist/src/utils/sessions.test.js +0 -581
  1006. package/dist/src/utils/sessions.test.js.map +0 -1
  1007. package/dist/src/utils/settingsUtils.test.d.ts +0 -6
  1008. package/dist/src/utils/settingsUtils.test.js +0 -808
  1009. package/dist/src/utils/settingsUtils.test.js.map +0 -1
  1010. package/dist/src/utils/skillUtils.test.d.ts +0 -6
  1011. package/dist/src/utils/skillUtils.test.js +0 -70
  1012. package/dist/src/utils/skillUtils.test.js.map +0 -1
  1013. package/dist/src/utils/startupWarnings.test.d.ts +0 -6
  1014. package/dist/src/utils/startupWarnings.test.js +0 -61
  1015. package/dist/src/utils/startupWarnings.test.js.map +0 -1
  1016. package/dist/src/utils/updateEventEmitter.test.d.ts +0 -6
  1017. package/dist/src/utils/updateEventEmitter.test.js +0 -18
  1018. package/dist/src/utils/updateEventEmitter.test.js.map +0 -1
  1019. package/dist/src/utils/userStartupWarnings.test.d.ts +0 -6
  1020. package/dist/src/utils/userStartupWarnings.test.js +0 -98
  1021. package/dist/src/utils/userStartupWarnings.test.js.map +0 -1
  1022. package/dist/src/utils/windowTitle.test.d.ts +0 -6
  1023. package/dist/src/utils/windowTitle.test.js +0 -216
  1024. package/dist/src/utils/windowTitle.test.js.map +0 -1
  1025. package/dist/src/validateNonInterActiveAuth.test.d.ts +0 -6
  1026. package/dist/src/validateNonInterActiveAuth.test.js +0 -319
  1027. package/dist/src/validateNonInterActiveAuth.test.js.map +0 -1
  1028. package/dist/src/zed-integration/fileSystemService.test.d.ts +0 -6
  1029. package/dist/src/zed-integration/fileSystemService.test.js +0 -88
  1030. package/dist/src/zed-integration/fileSystemService.test.js.map +0 -1
  1031. package/dist/src/zed-integration/zedIntegration.test.d.ts +0 -6
  1032. package/dist/src/zed-integration/zedIntegration.test.js +0 -625
  1033. package/dist/src/zed-integration/zedIntegration.test.js.map +0 -1
  1034. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,2072 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * @license
4
- * Copyright 2025 Google LLC
5
- * SPDX-License-Identifier: Apache-2.0
6
- */
7
- import { describe, it, expect, vi, beforeEach, afterEach, } from 'vitest';
8
- import { render } from '../test-utils/render.js';
9
- import { waitFor } from '../test-utils/async.js';
10
- import { cleanup } from 'ink-testing-library';
11
- import { act, useContext } from 'react';
12
- import { AppContainer } from './AppContainer.js';
13
- import { SettingsContext } from './contexts/SettingsContext.js';
14
- import {} from './hooks/useReactToolScheduler.js';
15
- import { makeFakeConfig, CoreEvent, AuthType, } from '@didim365/agent-cli-core';
16
- // Mock coreEvents
17
- const mockCoreEvents = vi.hoisted(() => ({
18
- on: vi.fn(),
19
- off: vi.fn(),
20
- drainBacklogs: vi.fn(),
21
- emit: vi.fn(),
22
- }));
23
- // Mock IdeClient
24
- const mockIdeClient = vi.hoisted(() => ({
25
- getInstance: vi.fn().mockReturnValue(new Promise(() => { })),
26
- }));
27
- // Mock stdout
28
- const mocks = vi.hoisted(() => ({
29
- mockStdout: { write: vi.fn() },
30
- }));
31
- vi.mock('@didim365/agent-cli-core', async (importOriginal) => {
32
- const actual = await importOriginal();
33
- return {
34
- ...actual,
35
- coreEvents: mockCoreEvents,
36
- IdeClient: mockIdeClient,
37
- writeToStdout: vi.fn((...args) => process.stdout.write(...args)),
38
- writeToStderr: vi.fn((...args) => process.stderr.write(...args)),
39
- patchStdio: vi.fn(() => () => { }),
40
- createWorkingStdio: vi.fn(() => ({
41
- stdout: process.stdout,
42
- stderr: process.stderr,
43
- })),
44
- enableMouseEvents: vi.fn(),
45
- disableMouseEvents: vi.fn(),
46
- FileDiscoveryService: vi.fn().mockImplementation(() => ({
47
- initialize: vi.fn(),
48
- })),
49
- startupProfiler: {
50
- flush: vi.fn(),
51
- start: vi.fn(),
52
- end: vi.fn(),
53
- },
54
- };
55
- });
56
- import ansiEscapes from 'ansi-escapes';
57
- import { mergeSettings } from '../config/settings.js';
58
- import { useQuotaAndFallback } from './hooks/useQuotaAndFallback.js';
59
- import { UIStateContext } from './contexts/UIStateContext.js';
60
- import { UIActionsContext, } from './contexts/UIActionsContext.js';
61
- // Mock useStdout to capture terminal title writes
62
- vi.mock('ink', async (importOriginal) => {
63
- const actual = await importOriginal();
64
- return {
65
- ...actual,
66
- useStdout: () => ({ stdout: mocks.mockStdout }),
67
- measureElement: vi.fn(),
68
- };
69
- });
70
- // Helper component will read the context values provided by AppContainer
71
- // so we can assert against them in our tests.
72
- let capturedUIState;
73
- let capturedUIActions;
74
- function TestContextConsumer() {
75
- capturedUIState = useContext(UIStateContext);
76
- capturedUIActions = useContext(UIActionsContext);
77
- return null;
78
- }
79
- vi.mock('./App.js', () => ({
80
- App: TestContextConsumer,
81
- }));
82
- vi.mock('./hooks/useQuotaAndFallback.js');
83
- vi.mock('./hooks/useHistoryManager.js');
84
- vi.mock('./hooks/useThemeCommand.js');
85
- vi.mock('./auth/useAuth.js');
86
- vi.mock('./hooks/useEditorSettings.js');
87
- vi.mock('./hooks/useSettingsCommand.js');
88
- vi.mock('./hooks/useModelCommand.js');
89
- vi.mock('./hooks/slashCommandProcessor.js');
90
- vi.mock('./hooks/useConsoleMessages.js');
91
- vi.mock('./hooks/useTerminalSize.js', () => ({
92
- useTerminalSize: vi.fn(() => ({ columns: 80, rows: 24 })),
93
- }));
94
- vi.mock('./hooks/useGeminiStream.js');
95
- vi.mock('./hooks/vim.js');
96
- vi.mock('./hooks/useFocus.js');
97
- vi.mock('./hooks/useBracketedPaste.js');
98
- vi.mock('./hooks/useKeypress.js');
99
- vi.mock('./hooks/useLoadingIndicator.js');
100
- vi.mock('./hooks/useFolderTrust.js');
101
- vi.mock('./hooks/useIdeTrustListener.js');
102
- vi.mock('./hooks/useMessageQueue.js');
103
- vi.mock('./hooks/useApprovalModeIndicator.js');
104
- vi.mock('./hooks/useGitBranchName.js');
105
- vi.mock('./contexts/VimModeContext.js');
106
- vi.mock('./contexts/SessionContext.js');
107
- vi.mock('./components/shared/text-buffer.js');
108
- vi.mock('./hooks/useLogger.js');
109
- vi.mock('./hooks/useInputHistoryStore.js');
110
- vi.mock('./hooks/useHookDisplayState.js');
111
- // Mock external utilities
112
- vi.mock('../utils/events.js');
113
- vi.mock('../utils/handleAutoUpdate.js');
114
- vi.mock('./utils/ConsolePatcher.js');
115
- vi.mock('../utils/cleanup.js');
116
- import { useHistory } from './hooks/useHistoryManager.js';
117
- import { useThemeCommand } from './hooks/useThemeCommand.js';
118
- import { useAuthCommand } from './auth/useAuth.js';
119
- import { useEditorSettings } from './hooks/useEditorSettings.js';
120
- import { useSettingsCommand } from './hooks/useSettingsCommand.js';
121
- import { useModelCommand } from './hooks/useModelCommand.js';
122
- import { useSlashCommandProcessor } from './hooks/slashCommandProcessor.js';
123
- import { useConsoleMessages } from './hooks/useConsoleMessages.js';
124
- import { useGeminiStream } from './hooks/useGeminiStream.js';
125
- import { useVim } from './hooks/vim.js';
126
- import { useFolderTrust } from './hooks/useFolderTrust.js';
127
- import { useIdeTrustListener } from './hooks/useIdeTrustListener.js';
128
- import { useMessageQueue } from './hooks/useMessageQueue.js';
129
- import { useApprovalModeIndicator } from './hooks/useApprovalModeIndicator.js';
130
- import { useGitBranchName } from './hooks/useGitBranchName.js';
131
- import { useVimMode } from './contexts/VimModeContext.js';
132
- import { useSessionStats } from './contexts/SessionContext.js';
133
- import { useTextBuffer } from './components/shared/text-buffer.js';
134
- import { useLogger } from './hooks/useLogger.js';
135
- import { useLoadingIndicator } from './hooks/useLoadingIndicator.js';
136
- import { useInputHistoryStore } from './hooks/useInputHistoryStore.js';
137
- import { useHookDisplayState } from './hooks/useHookDisplayState.js';
138
- import { useKeypress } from './hooks/useKeypress.js';
139
- import { measureElement } from 'ink';
140
- import { useTerminalSize } from './hooks/useTerminalSize.js';
141
- import { ShellExecutionService, writeToStdout, enableMouseEvents, disableMouseEvents, } from '@didim365/agent-cli-core';
142
- import {} from '../config/extension-manager.js';
143
- describe('AppContainer State Management', () => {
144
- let mockConfig;
145
- let mockSettings;
146
- let mockInitResult;
147
- let mockExtensionManager;
148
- // Helper to generate the AppContainer JSX for render and rerender
149
- const getAppContainer = ({ settings = mockSettings, config = mockConfig, version = '1.0.0', initResult = mockInitResult, startupWarnings, resumedSessionData, } = {}) => (_jsx(SettingsContext.Provider, { value: settings, children: _jsx(AppContainer, { config: config, version: version, initializationResult: initResult, startupWarnings: startupWarnings, resumedSessionData: resumedSessionData }) }));
150
- // Helper to render the AppContainer
151
- const renderAppContainer = (props) => render(getAppContainer(props));
152
- // Create typed mocks for all hooks
153
- const mockedUseQuotaAndFallback = useQuotaAndFallback;
154
- const mockedUseHistory = useHistory;
155
- const mockedUseThemeCommand = useThemeCommand;
156
- const mockedUseAuthCommand = useAuthCommand;
157
- const mockedUseEditorSettings = useEditorSettings;
158
- const mockedUseSettingsCommand = useSettingsCommand;
159
- const mockedUseModelCommand = useModelCommand;
160
- const mockedUseSlashCommandProcessor = useSlashCommandProcessor;
161
- const mockedUseConsoleMessages = useConsoleMessages;
162
- const mockedUseGeminiStream = useGeminiStream;
163
- const mockedUseVim = useVim;
164
- const mockedUseFolderTrust = useFolderTrust;
165
- const mockedUseIdeTrustListener = useIdeTrustListener;
166
- const mockedUseMessageQueue = useMessageQueue;
167
- const mockedUseApprovalModeIndicator = useApprovalModeIndicator;
168
- const mockedUseGitBranchName = useGitBranchName;
169
- const mockedUseVimMode = useVimMode;
170
- const mockedUseSessionStats = useSessionStats;
171
- const mockedUseTextBuffer = useTextBuffer;
172
- const mockedUseLogger = useLogger;
173
- const mockedUseLoadingIndicator = useLoadingIndicator;
174
- const mockedUseKeypress = useKeypress;
175
- const mockedUseInputHistoryStore = useInputHistoryStore;
176
- const mockedUseHookDisplayState = useHookDisplayState;
177
- beforeEach(() => {
178
- vi.clearAllMocks();
179
- mockIdeClient.getInstance.mockReturnValue(new Promise(() => { }));
180
- // Initialize mock stdout for terminal title tests
181
- mocks.mockStdout.write.mockClear();
182
- capturedUIState = null;
183
- // **Provide a default return value for EVERY mocked hook.**
184
- mockedUseQuotaAndFallback.mockReturnValue({
185
- proQuotaRequest: null,
186
- handleProQuotaChoice: vi.fn(),
187
- });
188
- mockedUseHistory.mockReturnValue({
189
- history: [],
190
- addItem: vi.fn(),
191
- updateItem: vi.fn(),
192
- clearItems: vi.fn(),
193
- loadHistory: vi.fn(),
194
- });
195
- mockedUseThemeCommand.mockReturnValue({
196
- isThemeDialogOpen: false,
197
- openThemeDialog: vi.fn(),
198
- handleThemeSelect: vi.fn(),
199
- handleThemeHighlight: vi.fn(),
200
- });
201
- mockedUseAuthCommand.mockReturnValue({
202
- authState: 'authenticated',
203
- setAuthState: vi.fn(),
204
- authError: null,
205
- onAuthError: vi.fn(),
206
- });
207
- mockedUseEditorSettings.mockReturnValue({
208
- isEditorDialogOpen: false,
209
- openEditorDialog: vi.fn(),
210
- handleEditorSelect: vi.fn(),
211
- exitEditorDialog: vi.fn(),
212
- });
213
- mockedUseSettingsCommand.mockReturnValue({
214
- isSettingsDialogOpen: false,
215
- openSettingsDialog: vi.fn(),
216
- closeSettingsDialog: vi.fn(),
217
- });
218
- mockedUseModelCommand.mockReturnValue({
219
- isModelDialogOpen: false,
220
- openModelDialog: vi.fn(),
221
- closeModelDialog: vi.fn(),
222
- });
223
- mockedUseSlashCommandProcessor.mockReturnValue({
224
- handleSlashCommand: vi.fn(),
225
- slashCommands: [],
226
- pendingHistoryItems: [],
227
- commandContext: {},
228
- shellConfirmationRequest: null,
229
- confirmationRequest: null,
230
- });
231
- mockedUseConsoleMessages.mockReturnValue({
232
- consoleMessages: [],
233
- handleNewMessage: vi.fn(),
234
- clearConsoleMessages: vi.fn(),
235
- });
236
- mockedUseGeminiStream.mockReturnValue({
237
- streamingState: 'idle',
238
- submitQuery: vi.fn(),
239
- initError: null,
240
- pendingHistoryItems: [],
241
- thought: null,
242
- cancelOngoingRequest: vi.fn(),
243
- });
244
- mockedUseVim.mockReturnValue({ handleInput: vi.fn() });
245
- mockedUseFolderTrust.mockReturnValue({
246
- isFolderTrustDialogOpen: false,
247
- handleFolderTrustSelect: vi.fn(),
248
- isRestarting: false,
249
- });
250
- mockedUseIdeTrustListener.mockReturnValue({
251
- needsRestart: false,
252
- restartReason: 'NONE',
253
- });
254
- mockedUseMessageQueue.mockReturnValue({
255
- messageQueue: [],
256
- addMessage: vi.fn(),
257
- clearQueue: vi.fn(),
258
- getQueuedMessagesText: vi.fn().mockReturnValue(''),
259
- });
260
- mockedUseApprovalModeIndicator.mockReturnValue(false);
261
- mockedUseGitBranchName.mockReturnValue('main');
262
- mockedUseVimMode.mockReturnValue({
263
- isVimEnabled: false,
264
- toggleVimEnabled: vi.fn(),
265
- });
266
- mockedUseSessionStats.mockReturnValue({ stats: {} });
267
- mockedUseTextBuffer.mockReturnValue({
268
- text: '',
269
- setText: vi.fn(),
270
- // Add other properties if AppContainer uses them
271
- });
272
- mockedUseLogger.mockReturnValue({
273
- getPreviousUserMessages: vi.fn().mockResolvedValue([]),
274
- });
275
- mockedUseInputHistoryStore.mockReturnValue({
276
- inputHistory: [],
277
- addInput: vi.fn(),
278
- initializeFromLogger: vi.fn(),
279
- });
280
- mockedUseLoadingIndicator.mockReturnValue({
281
- elapsedTime: '0.0s',
282
- currentLoadingPhrase: '',
283
- });
284
- mockedUseHookDisplayState.mockReturnValue([]);
285
- // Mock Config
286
- mockConfig = makeFakeConfig();
287
- // Mock config's getTargetDir to return consistent workspace directory
288
- vi.spyOn(mockConfig, 'getTargetDir').mockReturnValue('/test/workspace');
289
- vi.spyOn(mockConfig, 'initialize').mockResolvedValue(undefined);
290
- vi.spyOn(mockConfig, 'getDebugMode').mockReturnValue(false);
291
- mockExtensionManager = vi.mockObject({
292
- getExtensions: vi.fn().mockReturnValue([]),
293
- setRequestConsent: vi.fn(),
294
- setRequestSetting: vi.fn(),
295
- start: vi.fn(),
296
- });
297
- vi.spyOn(mockConfig, 'getExtensionLoader').mockReturnValue(mockExtensionManager);
298
- // Mock LoadedSettings
299
- const defaultMergedSettings = mergeSettings({}, {}, {}, {}, true);
300
- mockSettings = {
301
- merged: {
302
- ...defaultMergedSettings,
303
- hideBanner: false,
304
- hideFooter: false,
305
- hideTips: false,
306
- showMemoryUsage: false,
307
- theme: 'default',
308
- ui: {
309
- ...defaultMergedSettings.ui,
310
- showStatusInTitle: false,
311
- hideWindowTitle: false,
312
- },
313
- useAlternateBuffer: false,
314
- },
315
- };
316
- // Mock InitializationResult
317
- mockInitResult = {
318
- themeError: null,
319
- authError: null,
320
- shouldOpenAuthDialog: false,
321
- geminiMdFileCount: 0,
322
- };
323
- });
324
- afterEach(() => {
325
- cleanup();
326
- vi.restoreAllMocks();
327
- });
328
- describe('Basic Rendering', () => {
329
- it('renders without crashing with minimal props', async () => {
330
- let unmount;
331
- await act(async () => {
332
- const result = renderAppContainer();
333
- unmount = result.unmount;
334
- });
335
- await waitFor(() => expect(capturedUIState).toBeTruthy());
336
- unmount();
337
- });
338
- it('renders with startup warnings', async () => {
339
- const startupWarnings = ['Warning 1', 'Warning 2'];
340
- let unmount;
341
- await act(async () => {
342
- const result = renderAppContainer({ startupWarnings });
343
- unmount = result.unmount;
344
- });
345
- await waitFor(() => expect(capturedUIState).toBeTruthy());
346
- unmount();
347
- });
348
- });
349
- describe('State Initialization', () => {
350
- it('initializes with theme error from initialization result', async () => {
351
- const initResultWithError = {
352
- ...mockInitResult,
353
- themeError: 'Failed to load theme',
354
- };
355
- let unmount;
356
- await act(async () => {
357
- const result = renderAppContainer({
358
- initResult: initResultWithError,
359
- });
360
- unmount = result.unmount;
361
- });
362
- await waitFor(() => expect(capturedUIState).toBeTruthy());
363
- unmount();
364
- });
365
- it('handles debug mode state', () => {
366
- const debugConfig = makeFakeConfig();
367
- vi.spyOn(debugConfig, 'getDebugMode').mockReturnValue(true);
368
- expect(() => {
369
- renderAppContainer({ config: debugConfig });
370
- }).not.toThrow();
371
- });
372
- });
373
- describe('Context Providers', () => {
374
- it('provides AppContext with correct values', async () => {
375
- let unmount;
376
- await act(async () => {
377
- const result = renderAppContainer({ version: '2.0.0' });
378
- unmount = result.unmount;
379
- });
380
- await waitFor(() => expect(capturedUIState).toBeTruthy());
381
- // Should render and unmount cleanly
382
- expect(() => unmount()).not.toThrow();
383
- });
384
- it('provides UIStateContext with state management', async () => {
385
- let unmount;
386
- await act(async () => {
387
- const result = renderAppContainer();
388
- unmount = result.unmount;
389
- });
390
- await waitFor(() => expect(capturedUIState).toBeTruthy());
391
- unmount();
392
- });
393
- it('provides UIActionsContext with action handlers', async () => {
394
- let unmount;
395
- await act(async () => {
396
- const result = renderAppContainer();
397
- unmount = result.unmount;
398
- });
399
- await waitFor(() => expect(capturedUIState).toBeTruthy());
400
- unmount();
401
- });
402
- it('provides ConfigContext with config object', async () => {
403
- let unmount;
404
- await act(async () => {
405
- const result = renderAppContainer();
406
- unmount = result.unmount;
407
- });
408
- await waitFor(() => expect(capturedUIState).toBeTruthy());
409
- unmount();
410
- });
411
- });
412
- describe('Settings Integration', () => {
413
- it('handles settings with all display options disabled', async () => {
414
- const defaultMergedSettings = mergeSettings({}, {}, {}, {}, true);
415
- const settingsAllHidden = {
416
- merged: {
417
- ...defaultMergedSettings,
418
- hideBanner: true,
419
- hideFooter: true,
420
- hideTips: true,
421
- showMemoryUsage: false,
422
- },
423
- };
424
- let unmount;
425
- await act(async () => {
426
- const result = renderAppContainer({ settings: settingsAllHidden });
427
- unmount = result.unmount;
428
- });
429
- await waitFor(() => expect(capturedUIState).toBeTruthy());
430
- unmount();
431
- });
432
- it('handles settings with memory usage enabled', async () => {
433
- const defaultMergedSettings = mergeSettings({}, {}, {}, {}, true);
434
- const settingsWithMemory = {
435
- merged: {
436
- ...defaultMergedSettings,
437
- hideBanner: false,
438
- hideFooter: false,
439
- hideTips: false,
440
- showMemoryUsage: true,
441
- },
442
- };
443
- let unmount;
444
- await act(async () => {
445
- const result = renderAppContainer({ settings: settingsWithMemory });
446
- unmount = result.unmount;
447
- });
448
- await waitFor(() => expect(capturedUIState).toBeTruthy());
449
- unmount();
450
- });
451
- });
452
- describe('Version Handling', () => {
453
- it.each(['1.0.0', '2.1.3-beta', '3.0.0-nightly'])('handles version format: %s', async (version) => {
454
- let unmount;
455
- await act(async () => {
456
- const result = renderAppContainer({ version });
457
- unmount = result.unmount;
458
- });
459
- await waitFor(() => expect(capturedUIState).toBeTruthy());
460
- unmount();
461
- });
462
- });
463
- describe('Error Handling', () => {
464
- it('handles config methods that might throw', async () => {
465
- const errorConfig = makeFakeConfig();
466
- vi.spyOn(errorConfig, 'getModel').mockImplementation(() => {
467
- throw new Error('Config error');
468
- });
469
- // Should still render without crashing - errors should be handled internally
470
- const { unmount } = renderAppContainer({ config: errorConfig });
471
- unmount();
472
- });
473
- it('handles undefined settings gracefully', async () => {
474
- const undefinedSettings = {
475
- merged: mergeSettings({}, {}, {}, {}, true),
476
- };
477
- let unmount;
478
- await act(async () => {
479
- const result = renderAppContainer({ settings: undefinedSettings });
480
- unmount = result.unmount;
481
- });
482
- await waitFor(() => expect(capturedUIState).toBeTruthy());
483
- unmount();
484
- });
485
- });
486
- describe('Provider Hierarchy', () => {
487
- it('establishes correct provider nesting order', () => {
488
- // This tests that all the context providers are properly nested
489
- // and that the component tree can be built without circular dependencies
490
- const { unmount } = renderAppContainer();
491
- expect(() => unmount()).not.toThrow();
492
- });
493
- });
494
- describe('Session Resumption', () => {
495
- it('handles resumed session data correctly', async () => {
496
- const mockResumedSessionData = {
497
- conversation: {
498
- sessionId: 'test-session-123',
499
- projectHash: 'test-project-hash',
500
- startTime: '2024-01-01T00:00:00Z',
501
- lastUpdated: '2024-01-01T00:00:01Z',
502
- messages: [
503
- {
504
- id: 'msg-1',
505
- type: 'user',
506
- content: 'Hello',
507
- timestamp: '2024-01-01T00:00:00Z',
508
- },
509
- {
510
- id: 'msg-2',
511
- type: 'gemini',
512
- content: 'Hi there!',
513
- role: 'model',
514
- parts: [{ text: 'Hi there!' }],
515
- timestamp: '2024-01-01T00:00:01Z',
516
- },
517
- ],
518
- },
519
- filePath: '/tmp/test-session.json',
520
- };
521
- let unmount;
522
- await act(async () => {
523
- const result = renderAppContainer({
524
- config: mockConfig,
525
- settings: mockSettings,
526
- version: '1.0.0',
527
- initResult: mockInitResult,
528
- resumedSessionData: mockResumedSessionData,
529
- });
530
- unmount = result.unmount;
531
- });
532
- await act(async () => {
533
- unmount();
534
- });
535
- });
536
- it('renders without resumed session data', async () => {
537
- let unmount;
538
- await act(async () => {
539
- const result = renderAppContainer({
540
- config: mockConfig,
541
- settings: mockSettings,
542
- version: '1.0.0',
543
- initResult: mockInitResult,
544
- resumedSessionData: undefined,
545
- });
546
- unmount = result.unmount;
547
- });
548
- await act(async () => {
549
- unmount();
550
- });
551
- });
552
- it('initializes chat recording service when config has it', () => {
553
- const mockChatRecordingService = {
554
- initialize: vi.fn(),
555
- recordMessage: vi.fn(),
556
- recordMessageTokens: vi.fn(),
557
- recordToolCalls: vi.fn(),
558
- };
559
- const mockGeminiClient = {
560
- isInitialized: vi.fn(() => true),
561
- resumeChat: vi.fn(),
562
- getUserTier: vi.fn(),
563
- getChatRecordingService: vi.fn(() => mockChatRecordingService),
564
- };
565
- const configWithRecording = {
566
- ...mockConfig,
567
- getGeminiClient: vi.fn(() => mockGeminiClient),
568
- };
569
- expect(() => {
570
- renderAppContainer({
571
- config: configWithRecording,
572
- settings: mockSettings,
573
- version: '1.0.0',
574
- initResult: mockInitResult,
575
- });
576
- }).not.toThrow();
577
- });
578
- });
579
- describe('Session Recording Integration', () => {
580
- it('provides chat recording service configuration', () => {
581
- const mockChatRecordingService = {
582
- initialize: vi.fn(),
583
- recordMessage: vi.fn(),
584
- recordMessageTokens: vi.fn(),
585
- recordToolCalls: vi.fn(),
586
- getSessionId: vi.fn(() => 'test-session-123'),
587
- getCurrentConversation: vi.fn(),
588
- };
589
- const mockGeminiClient = {
590
- isInitialized: vi.fn(() => true),
591
- resumeChat: vi.fn(),
592
- getUserTier: vi.fn(),
593
- getChatRecordingService: vi.fn(() => mockChatRecordingService),
594
- setHistory: vi.fn(),
595
- };
596
- const configWithRecording = {
597
- ...mockConfig,
598
- getGeminiClient: vi.fn(() => mockGeminiClient),
599
- getSessionId: vi.fn(() => 'test-session-123'),
600
- };
601
- expect(() => {
602
- renderAppContainer({
603
- config: configWithRecording,
604
- settings: mockSettings,
605
- version: '1.0.0',
606
- initResult: mockInitResult,
607
- });
608
- }).not.toThrow();
609
- // Verify the recording service structure is correct
610
- expect(configWithRecording.getGeminiClient).toBeDefined();
611
- expect(mockGeminiClient.getChatRecordingService).toBeDefined();
612
- expect(mockChatRecordingService.initialize).toBeDefined();
613
- expect(mockChatRecordingService.recordMessage).toBeDefined();
614
- });
615
- it('handles session recording when messages are added', () => {
616
- const mockRecordMessage = vi.fn();
617
- const mockRecordMessageTokens = vi.fn();
618
- const mockChatRecordingService = {
619
- initialize: vi.fn(),
620
- recordMessage: mockRecordMessage,
621
- recordMessageTokens: mockRecordMessageTokens,
622
- recordToolCalls: vi.fn(),
623
- getSessionId: vi.fn(() => 'test-session-123'),
624
- };
625
- const mockGeminiClient = {
626
- isInitialized: vi.fn(() => true),
627
- getChatRecordingService: vi.fn(() => mockChatRecordingService),
628
- getUserTier: vi.fn(),
629
- };
630
- const configWithRecording = {
631
- ...mockConfig,
632
- getGeminiClient: vi.fn(() => mockGeminiClient),
633
- };
634
- renderAppContainer({
635
- config: configWithRecording,
636
- settings: mockSettings,
637
- version: '1.0.0',
638
- initResult: mockInitResult,
639
- });
640
- // The actual recording happens through the useHistory hook
641
- // which would be triggered by user interactions
642
- expect(mockChatRecordingService.initialize).toBeDefined();
643
- expect(mockChatRecordingService.recordMessage).toBeDefined();
644
- });
645
- });
646
- describe('Session Resume Flow', () => {
647
- it('accepts resumed session data', () => {
648
- const mockResumeChat = vi.fn();
649
- const mockGeminiClient = {
650
- isInitialized: vi.fn(() => true),
651
- resumeChat: mockResumeChat,
652
- getUserTier: vi.fn(),
653
- getChatRecordingService: vi.fn(() => ({
654
- initialize: vi.fn(),
655
- recordMessage: vi.fn(),
656
- recordMessageTokens: vi.fn(),
657
- recordToolCalls: vi.fn(),
658
- })),
659
- };
660
- const configWithClient = {
661
- ...mockConfig,
662
- getGeminiClient: vi.fn(() => mockGeminiClient),
663
- };
664
- const resumedData = {
665
- conversation: {
666
- sessionId: 'resumed-session-456',
667
- projectHash: 'project-hash',
668
- startTime: '2024-01-01T00:00:00Z',
669
- lastUpdated: '2024-01-01T00:01:00Z',
670
- messages: [
671
- {
672
- id: 'msg-1',
673
- type: 'user',
674
- content: 'Previous question',
675
- timestamp: '2024-01-01T00:00:00Z',
676
- },
677
- {
678
- id: 'msg-2',
679
- type: 'gemini',
680
- content: 'Previous answer',
681
- role: 'model',
682
- parts: [{ text: 'Previous answer' }],
683
- timestamp: '2024-01-01T00:00:30Z',
684
- tokenCount: { input: 10, output: 20 },
685
- },
686
- ],
687
- },
688
- filePath: '/tmp/resumed-session.json',
689
- };
690
- expect(() => {
691
- renderAppContainer({
692
- config: configWithClient,
693
- settings: mockSettings,
694
- version: '1.0.0',
695
- initResult: mockInitResult,
696
- resumedSessionData: resumedData,
697
- });
698
- }).not.toThrow();
699
- // Verify the resume functionality structure is in place
700
- expect(mockGeminiClient.resumeChat).toBeDefined();
701
- expect(resumedData.conversation.messages).toHaveLength(2);
702
- });
703
- it('does not attempt resume when client is not initialized', () => {
704
- const mockResumeChat = vi.fn();
705
- const mockGeminiClient = {
706
- isInitialized: vi.fn(() => false), // Not initialized
707
- resumeChat: mockResumeChat,
708
- getUserTier: vi.fn(),
709
- getChatRecordingService: vi.fn(),
710
- };
711
- const configWithClient = {
712
- ...mockConfig,
713
- getGeminiClient: vi.fn(() => mockGeminiClient),
714
- };
715
- const resumedData = {
716
- conversation: {
717
- sessionId: 'test-session',
718
- projectHash: 'project-hash',
719
- startTime: '2024-01-01T00:00:00Z',
720
- lastUpdated: '2024-01-01T00:01:00Z',
721
- messages: [],
722
- },
723
- filePath: '/tmp/session.json',
724
- };
725
- renderAppContainer({
726
- config: configWithClient,
727
- settings: mockSettings,
728
- version: '1.0.0',
729
- initResult: mockInitResult,
730
- resumedSessionData: resumedData,
731
- });
732
- // Should not call resumeChat when client is not initialized
733
- expect(mockResumeChat).not.toHaveBeenCalled();
734
- });
735
- });
736
- describe('Token Counting from Session Stats', () => {
737
- it('tracks token counts from session messages', () => {
738
- // Session stats are provided through the SessionStatsProvider context
739
- // in the real app, not through the config directly
740
- const mockChatRecordingService = {
741
- initialize: vi.fn(),
742
- recordMessage: vi.fn(),
743
- recordMessageTokens: vi.fn(),
744
- recordToolCalls: vi.fn(),
745
- getSessionId: vi.fn(() => 'test-session-123'),
746
- getCurrentConversation: vi.fn(() => ({
747
- sessionId: 'test-session-123',
748
- messages: [],
749
- totalInputTokens: 150,
750
- totalOutputTokens: 350,
751
- })),
752
- };
753
- const mockGeminiClient = {
754
- isInitialized: vi.fn(() => true),
755
- getChatRecordingService: vi.fn(() => mockChatRecordingService),
756
- getUserTier: vi.fn(),
757
- };
758
- const configWithRecording = {
759
- ...mockConfig,
760
- getGeminiClient: vi.fn(() => mockGeminiClient),
761
- };
762
- renderAppContainer({
763
- config: configWithRecording,
764
- settings: mockSettings,
765
- version: '1.0.0',
766
- initResult: mockInitResult,
767
- });
768
- // In the actual app, these stats would be displayed in components
769
- // and updated as messages are processed through the recording service
770
- expect(mockChatRecordingService.recordMessageTokens).toBeDefined();
771
- expect(mockChatRecordingService.getCurrentConversation).toBeDefined();
772
- });
773
- });
774
- describe('Quota and Fallback Integration', () => {
775
- it('passes a null proQuotaRequest to UIStateContext by default', async () => {
776
- // The default mock from beforeEach already sets proQuotaRequest to null
777
- let unmount;
778
- await act(async () => {
779
- const result = renderAppContainer();
780
- unmount = result.unmount;
781
- });
782
- await waitFor(() => {
783
- // Assert that the context value is as expected
784
- expect(capturedUIState.proQuotaRequest).toBeNull();
785
- });
786
- unmount();
787
- });
788
- it('passes a valid proQuotaRequest to UIStateContext when provided by the hook', async () => {
789
- // Arrange: Create a mock request object that a UI dialog would receive
790
- const mockRequest = {
791
- failedModel: 'gemini-pro',
792
- fallbackModel: 'gemini-flash',
793
- resolve: vi.fn(),
794
- };
795
- mockedUseQuotaAndFallback.mockReturnValue({
796
- proQuotaRequest: mockRequest,
797
- handleProQuotaChoice: vi.fn(),
798
- });
799
- // Act: Render the container
800
- let unmount;
801
- await act(async () => {
802
- const result = renderAppContainer();
803
- unmount = result.unmount;
804
- });
805
- await waitFor(() => {
806
- // Assert: The mock request is correctly passed through the context
807
- expect(capturedUIState.proQuotaRequest).toEqual(mockRequest);
808
- });
809
- unmount();
810
- });
811
- it('passes the handleProQuotaChoice function to UIActionsContext', async () => {
812
- // Arrange: Create a mock handler function
813
- const mockHandler = vi.fn();
814
- mockedUseQuotaAndFallback.mockReturnValue({
815
- proQuotaRequest: null,
816
- handleProQuotaChoice: mockHandler,
817
- });
818
- // Act: Render the container
819
- let unmount;
820
- await act(async () => {
821
- const result = renderAppContainer();
822
- unmount = result.unmount;
823
- });
824
- await waitFor(() => {
825
- // Assert: The action in the context is the mock handler we provided
826
- expect(capturedUIActions.handleProQuotaChoice).toBe(mockHandler);
827
- });
828
- // You can even verify that the plumbed function is callable
829
- act(() => {
830
- capturedUIActions.handleProQuotaChoice('retry_later');
831
- });
832
- expect(mockHandler).toHaveBeenCalledWith('retry_later');
833
- unmount();
834
- });
835
- });
836
- describe('Terminal Title Update Feature', () => {
837
- beforeEach(() => {
838
- // Reset mock stdout for each test
839
- mocks.mockStdout.write.mockClear();
840
- });
841
- it('verifies useStdout is mocked', async () => {
842
- const { useStdout } = await import('ink');
843
- const { stdout } = useStdout();
844
- expect(stdout).toBe(mocks.mockStdout);
845
- });
846
- it('should update terminal title with Working… when showStatusInTitle is false', () => {
847
- // Arrange: Set up mock settings with showStatusInTitle disabled
848
- const defaultMergedSettings = mergeSettings({}, {}, {}, {}, true);
849
- const mockSettingsWithShowStatusFalse = {
850
- ...mockSettings,
851
- merged: {
852
- ...defaultMergedSettings,
853
- ui: {
854
- ...defaultMergedSettings.ui,
855
- showStatusInTitle: false,
856
- hideWindowTitle: false,
857
- },
858
- },
859
- };
860
- // Mock the streaming state as Active
861
- mockedUseGeminiStream.mockReturnValue({
862
- streamingState: 'responding',
863
- submitQuery: vi.fn(),
864
- initError: null,
865
- pendingHistoryItems: [],
866
- thought: { subject: 'Some thought' },
867
- cancelOngoingRequest: vi.fn(),
868
- });
869
- // Act: Render the container
870
- const { unmount } = renderAppContainer({
871
- settings: mockSettingsWithShowStatusFalse,
872
- });
873
- // Assert: Check that title was updated with "Working…"
874
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
875
- expect(titleWrites).toHaveLength(1);
876
- expect(titleWrites[0][0]).toBe(`\x1b]0;${'✦ Working… (workspace)'.padEnd(80, ' ')}\x07`);
877
- unmount();
878
- });
879
- it('should use legacy terminal title when dynamicWindowTitle is false', () => {
880
- // Arrange: Set up mock settings with dynamicWindowTitle disabled
881
- const mockSettingsWithDynamicTitleFalse = {
882
- ...mockSettings,
883
- merged: {
884
- ...mockSettings.merged,
885
- ui: {
886
- ...mockSettings.merged.ui,
887
- dynamicWindowTitle: false,
888
- hideWindowTitle: false,
889
- },
890
- },
891
- };
892
- // Mock the streaming state
893
- mockedUseGeminiStream.mockReturnValue({
894
- streamingState: 'responding',
895
- submitQuery: vi.fn(),
896
- initError: null,
897
- pendingHistoryItems: [],
898
- thought: { subject: 'Some thought' },
899
- cancelOngoingRequest: vi.fn(),
900
- });
901
- // Act: Render the container
902
- const { unmount } = renderAppContainer({
903
- settings: mockSettingsWithDynamicTitleFalse,
904
- });
905
- // Assert: Check that legacy title was used
906
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
907
- expect(titleWrites).toHaveLength(1);
908
- expect(titleWrites[0][0]).toBe(`\x1b]0;${'Gemini CLI (workspace)'.padEnd(80, ' ')}\x07`);
909
- unmount();
910
- });
911
- it('should not update terminal title when hideWindowTitle is true', () => {
912
- // Arrange: Set up mock settings with hideWindowTitle enabled
913
- const defaultMergedSettings = mergeSettings({}, {}, {}, {}, true);
914
- const mockSettingsWithHideTitleTrue = {
915
- ...mockSettings,
916
- merged: {
917
- ...defaultMergedSettings,
918
- ui: {
919
- ...defaultMergedSettings.ui,
920
- showStatusInTitle: true,
921
- hideWindowTitle: true,
922
- },
923
- },
924
- };
925
- // Act: Render the container
926
- const { unmount } = renderAppContainer({
927
- settings: mockSettingsWithHideTitleTrue,
928
- });
929
- // Assert: Check that no title-related writes occurred
930
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
931
- expect(titleWrites).toHaveLength(0);
932
- unmount();
933
- });
934
- it('should update terminal title with thought subject when in active state', () => {
935
- // Arrange: Set up mock settings with showStatusInTitle enabled
936
- const defaultMergedSettings = mergeSettings({}, {}, {}, {}, true);
937
- const mockSettingsWithTitleEnabled = {
938
- ...mockSettings,
939
- merged: {
940
- ...defaultMergedSettings,
941
- ui: {
942
- ...defaultMergedSettings.ui,
943
- showStatusInTitle: true,
944
- hideWindowTitle: false,
945
- },
946
- },
947
- };
948
- // Mock the streaming state and thought
949
- const thoughtSubject = 'Processing request';
950
- mockedUseGeminiStream.mockReturnValue({
951
- streamingState: 'responding',
952
- submitQuery: vi.fn(),
953
- initError: null,
954
- pendingHistoryItems: [],
955
- thought: { subject: thoughtSubject },
956
- cancelOngoingRequest: vi.fn(),
957
- });
958
- // Act: Render the container
959
- const { unmount } = renderAppContainer({
960
- settings: mockSettingsWithTitleEnabled,
961
- });
962
- // Assert: Check that title was updated with thought subject and suffix
963
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
964
- expect(titleWrites).toHaveLength(1);
965
- expect(titleWrites[0][0]).toBe(`\x1b]0;${`✦ ${thoughtSubject} (workspace)`.padEnd(80, ' ')}\x07`);
966
- unmount();
967
- });
968
- it('should update terminal title with default text when in Idle state and no thought subject', () => {
969
- // Arrange: Set up mock settings with showStatusInTitle enabled
970
- const defaultMergedSettings = mergeSettings({}, {}, {}, {}, true);
971
- const mockSettingsWithTitleEnabled = {
972
- ...mockSettings,
973
- merged: {
974
- ...defaultMergedSettings,
975
- ui: {
976
- ...defaultMergedSettings.ui,
977
- showStatusInTitle: true,
978
- hideWindowTitle: false,
979
- },
980
- },
981
- };
982
- // Mock the streaming state as Idle with no thought
983
- mockedUseGeminiStream.mockReturnValue({
984
- streamingState: 'idle',
985
- submitQuery: vi.fn(),
986
- initError: null,
987
- pendingHistoryItems: [],
988
- thought: null,
989
- cancelOngoingRequest: vi.fn(),
990
- });
991
- // Act: Render the container
992
- const { unmount } = renderAppContainer({
993
- settings: mockSettingsWithTitleEnabled,
994
- });
995
- // Assert: Check that title was updated with default Idle text
996
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
997
- expect(titleWrites).toHaveLength(1);
998
- expect(titleWrites[0][0]).toBe(`\x1b]0;${'◇ Ready (workspace)'.padEnd(80, ' ')}\x07`);
999
- unmount();
1000
- });
1001
- it('should update terminal title when in WaitingForConfirmation state with thought subject', async () => {
1002
- // Arrange: Set up mock settings with showStatusInTitle enabled
1003
- const defaultMergedSettings = mergeSettings({}, {}, {}, {}, true);
1004
- const mockSettingsWithTitleEnabled = {
1005
- ...mockSettings,
1006
- merged: {
1007
- ...defaultMergedSettings,
1008
- ui: {
1009
- ...defaultMergedSettings.ui,
1010
- showStatusInTitle: true,
1011
- hideWindowTitle: false,
1012
- },
1013
- },
1014
- };
1015
- // Mock the streaming state and thought
1016
- const thoughtSubject = 'Confirm tool execution';
1017
- mockedUseGeminiStream.mockReturnValue({
1018
- streamingState: 'waiting_for_confirmation',
1019
- submitQuery: vi.fn(),
1020
- initError: null,
1021
- pendingHistoryItems: [],
1022
- thought: { subject: thoughtSubject },
1023
- cancelOngoingRequest: vi.fn(),
1024
- });
1025
- // Act: Render the container
1026
- let unmount;
1027
- await act(async () => {
1028
- const result = renderAppContainer({
1029
- settings: mockSettingsWithTitleEnabled,
1030
- });
1031
- unmount = result.unmount;
1032
- });
1033
- // Assert: Check that title was updated with confirmation text
1034
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1035
- expect(titleWrites).toHaveLength(1);
1036
- expect(titleWrites[0][0]).toBe(`\x1b]0;${'✋ Action Required (workspace)'.padEnd(80, ' ')}\x07`);
1037
- unmount();
1038
- });
1039
- describe('Shell Focus Action Required', () => {
1040
- beforeEach(() => {
1041
- vi.useFakeTimers();
1042
- });
1043
- afterEach(() => {
1044
- vi.useRealTimers();
1045
- });
1046
- it('should show Action Required in title after a delay when shell is awaiting focus', async () => {
1047
- const startTime = 1000000;
1048
- vi.setSystemTime(startTime);
1049
- // Arrange: Set up mock settings with showStatusInTitle enabled
1050
- const mockSettingsWithTitleEnabled = {
1051
- ...mockSettings,
1052
- merged: {
1053
- ...mockSettings.merged,
1054
- ui: {
1055
- ...mockSettings.merged.ui,
1056
- showStatusInTitle: true,
1057
- hideWindowTitle: false,
1058
- },
1059
- },
1060
- };
1061
- // Mock an active shell pty but not focused
1062
- mockedUseGeminiStream.mockReturnValue({
1063
- streamingState: 'responding',
1064
- submitQuery: vi.fn(),
1065
- initError: null,
1066
- pendingHistoryItems: [],
1067
- thought: { subject: 'Executing shell command' },
1068
- cancelOngoingRequest: vi.fn(),
1069
- pendingToolCalls: [],
1070
- handleApprovalModeChange: vi.fn(),
1071
- activePtyId: 'pty-1',
1072
- loopDetectionConfirmationRequest: null,
1073
- lastOutputTime: startTime + 100, // Trigger aggressive delay
1074
- retryStatus: null,
1075
- });
1076
- vi.spyOn(mockConfig, 'isInteractive').mockReturnValue(true);
1077
- vi.spyOn(mockConfig, 'isInteractiveShellEnabled').mockReturnValue(true);
1078
- // Act: Render the container (embeddedShellFocused is false by default in state)
1079
- const { unmount } = renderAppContainer({
1080
- settings: mockSettingsWithTitleEnabled,
1081
- });
1082
- // Initially it should show the working status
1083
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1084
- expect(titleWrites[titleWrites.length - 1][0]).toContain('✦ Executing shell command');
1085
- // Fast-forward time by 40 seconds
1086
- await act(async () => {
1087
- await vi.advanceTimersByTimeAsync(40000);
1088
- });
1089
- // Now it should show Action Required
1090
- const titleWritesDelayed = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1091
- const lastTitle = titleWritesDelayed[titleWritesDelayed.length - 1][0];
1092
- expect(lastTitle).toContain('✋ Action Required');
1093
- unmount();
1094
- });
1095
- it('should show Working… in title for redirected commands after 2 mins', async () => {
1096
- const startTime = 1000000;
1097
- vi.setSystemTime(startTime);
1098
- // Arrange: Set up mock settings with showStatusInTitle enabled
1099
- const mockSettingsWithTitleEnabled = {
1100
- ...mockSettings,
1101
- merged: {
1102
- ...mockSettings.merged,
1103
- ui: {
1104
- ...mockSettings.merged.ui,
1105
- showStatusInTitle: true,
1106
- hideWindowTitle: false,
1107
- },
1108
- },
1109
- };
1110
- // Mock an active shell pty with redirection active
1111
- mockedUseGeminiStream.mockReturnValue({
1112
- streamingState: 'responding',
1113
- submitQuery: vi.fn(),
1114
- initError: null,
1115
- pendingHistoryItems: [],
1116
- thought: { subject: 'Executing shell command' },
1117
- cancelOngoingRequest: vi.fn(),
1118
- pendingToolCalls: [
1119
- {
1120
- request: {
1121
- name: 'run_shell_command',
1122
- args: { command: 'ls > out' },
1123
- },
1124
- status: 'executing',
1125
- },
1126
- ],
1127
- handleApprovalModeChange: vi.fn(),
1128
- activePtyId: 'pty-1',
1129
- loopDetectionConfirmationRequest: null,
1130
- lastOutputTime: startTime,
1131
- retryStatus: null,
1132
- });
1133
- vi.spyOn(mockConfig, 'isInteractive').mockReturnValue(true);
1134
- vi.spyOn(mockConfig, 'isInteractiveShellEnabled').mockReturnValue(true);
1135
- const { unmount } = renderAppContainer({
1136
- settings: mockSettingsWithTitleEnabled,
1137
- });
1138
- // Fast-forward time by 65 seconds - should still NOT be Action Required
1139
- await act(async () => {
1140
- await vi.advanceTimersByTimeAsync(65000);
1141
- });
1142
- const titleWritesMid = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1143
- expect(titleWritesMid[titleWritesMid.length - 1][0]).not.toContain('✋ Action Required');
1144
- // Fast-forward to 2 minutes (120000ms)
1145
- await act(async () => {
1146
- await vi.advanceTimersByTimeAsync(60000);
1147
- });
1148
- const titleWritesEnd = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1149
- expect(titleWritesEnd[titleWritesEnd.length - 1][0]).toContain('⏲ Working…');
1150
- unmount();
1151
- });
1152
- it('should show Working… in title for silent non-redirected commands after 1 min', async () => {
1153
- const startTime = 1000000;
1154
- vi.setSystemTime(startTime);
1155
- // Arrange: Set up mock settings with showStatusInTitle enabled
1156
- const mockSettingsWithTitleEnabled = {
1157
- ...mockSettings,
1158
- merged: {
1159
- ...mockSettings.merged,
1160
- ui: {
1161
- ...mockSettings.merged.ui,
1162
- showStatusInTitle: true,
1163
- hideWindowTitle: false,
1164
- },
1165
- },
1166
- };
1167
- // Mock an active shell pty with NO output since operation started (silent)
1168
- mockedUseGeminiStream.mockReturnValue({
1169
- streamingState: 'responding',
1170
- submitQuery: vi.fn(),
1171
- initError: null,
1172
- pendingHistoryItems: [],
1173
- thought: { subject: 'Executing shell command' },
1174
- cancelOngoingRequest: vi.fn(),
1175
- pendingToolCalls: [],
1176
- handleApprovalModeChange: vi.fn(),
1177
- activePtyId: 'pty-1',
1178
- loopDetectionConfirmationRequest: null,
1179
- lastOutputTime: startTime, // lastOutputTime <= operationStartTime
1180
- retryStatus: null,
1181
- });
1182
- vi.spyOn(mockConfig, 'isInteractive').mockReturnValue(true);
1183
- vi.spyOn(mockConfig, 'isInteractiveShellEnabled').mockReturnValue(true);
1184
- const { unmount } = renderAppContainer({
1185
- settings: mockSettingsWithTitleEnabled,
1186
- });
1187
- // Fast-forward time by 65 seconds
1188
- await act(async () => {
1189
- await vi.advanceTimersByTimeAsync(65000);
1190
- });
1191
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1192
- const lastTitle = titleWrites[titleWrites.length - 1][0];
1193
- // Should show Working… (⏲) instead of Action Required (✋)
1194
- expect(lastTitle).toContain('⏲ Working…');
1195
- unmount();
1196
- });
1197
- it('should NOT show Action Required in title if shell is streaming output', async () => {
1198
- const startTime = 1000000;
1199
- vi.setSystemTime(startTime);
1200
- // Arrange: Set up mock settings with showStatusInTitle enabled
1201
- const mockSettingsWithTitleEnabled = {
1202
- ...mockSettings,
1203
- merged: {
1204
- ...mockSettings.merged,
1205
- ui: {
1206
- ...mockSettings.merged.ui,
1207
- showStatusInTitle: true,
1208
- hideWindowTitle: false,
1209
- },
1210
- },
1211
- };
1212
- // Mock an active shell pty but not focused
1213
- let lastOutputTime = startTime + 1000;
1214
- mockedUseGeminiStream.mockImplementation(() => ({
1215
- streamingState: 'responding',
1216
- submitQuery: vi.fn(),
1217
- initError: null,
1218
- pendingHistoryItems: [],
1219
- thought: { subject: 'Executing shell command' },
1220
- cancelOngoingRequest: vi.fn(),
1221
- activePtyId: 'pty-1',
1222
- lastOutputTime,
1223
- }));
1224
- vi.spyOn(mockConfig, 'isInteractive').mockReturnValue(true);
1225
- vi.spyOn(mockConfig, 'isInteractiveShellEnabled').mockReturnValue(true);
1226
- // Act: Render the container
1227
- const { unmount, rerender } = renderAppContainer({
1228
- settings: mockSettingsWithTitleEnabled,
1229
- });
1230
- // Fast-forward time by 20 seconds
1231
- await act(async () => {
1232
- await vi.advanceTimersByTimeAsync(20000);
1233
- });
1234
- // Update lastOutputTime to simulate new output
1235
- lastOutputTime = startTime + 21000;
1236
- mockedUseGeminiStream.mockImplementation(() => ({
1237
- streamingState: 'responding',
1238
- submitQuery: vi.fn(),
1239
- initError: null,
1240
- pendingHistoryItems: [],
1241
- thought: { subject: 'Executing shell command' },
1242
- cancelOngoingRequest: vi.fn(),
1243
- activePtyId: 'pty-1',
1244
- lastOutputTime,
1245
- }));
1246
- // Rerender to propagate the new lastOutputTime
1247
- await act(async () => {
1248
- rerender(getAppContainer({ settings: mockSettingsWithTitleEnabled }));
1249
- });
1250
- // Fast-forward time by another 20 seconds
1251
- // Total time elapsed: 40s.
1252
- // Time since last output: 20s.
1253
- // It should NOT show Action Required yet.
1254
- await act(async () => {
1255
- await vi.advanceTimersByTimeAsync(20000);
1256
- });
1257
- const titleWritesAfterOutput = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1258
- const lastTitle = titleWritesAfterOutput[titleWritesAfterOutput.length - 1][0];
1259
- expect(lastTitle).not.toContain('✋ Action Required');
1260
- expect(lastTitle).toContain('✦ Executing shell command');
1261
- // Fast-forward another 40 seconds (Total 60s since last output)
1262
- await act(async () => {
1263
- await vi.advanceTimersByTimeAsync(40000);
1264
- });
1265
- // Now it SHOULD show Action Required
1266
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1267
- const lastTitleFinal = titleWrites[titleWrites.length - 1][0];
1268
- expect(lastTitleFinal).toContain('✋ Action Required');
1269
- unmount();
1270
- });
1271
- });
1272
- it('should pad title to exactly 80 characters', () => {
1273
- // Arrange: Set up mock settings with showStatusInTitle enabled
1274
- const defaultMergedSettings = mergeSettings({}, {}, {}, {}, true);
1275
- const mockSettingsWithTitleEnabled = {
1276
- ...mockSettings,
1277
- merged: {
1278
- ...defaultMergedSettings,
1279
- ui: {
1280
- ...defaultMergedSettings.ui,
1281
- showStatusInTitle: true,
1282
- hideWindowTitle: false,
1283
- },
1284
- },
1285
- };
1286
- // Mock the streaming state and thought with a short subject
1287
- const shortTitle = 'Short';
1288
- mockedUseGeminiStream.mockReturnValue({
1289
- streamingState: 'responding',
1290
- submitQuery: vi.fn(),
1291
- initError: null,
1292
- pendingHistoryItems: [],
1293
- thought: { subject: shortTitle },
1294
- cancelOngoingRequest: vi.fn(),
1295
- });
1296
- // Act: Render the container
1297
- const { unmount } = renderAppContainer({
1298
- settings: mockSettingsWithTitleEnabled,
1299
- });
1300
- // Assert: Check that title is padded to exactly 80 characters
1301
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1302
- expect(titleWrites).toHaveLength(1);
1303
- const calledWith = titleWrites[0][0];
1304
- const expectedTitle = `✦ ${shortTitle} (workspace)`.padEnd(80, ' ');
1305
- const expectedEscapeSequence = `\x1b]0;${expectedTitle}\x07`;
1306
- expect(calledWith).toBe(expectedEscapeSequence);
1307
- unmount();
1308
- });
1309
- it('should use correct ANSI escape code format', () => {
1310
- // Arrange: Set up mock settings with showStatusInTitle enabled
1311
- const defaultMergedSettings = mergeSettings({}, {}, {}, {}, true);
1312
- const mockSettingsWithTitleEnabled = {
1313
- ...mockSettings,
1314
- merged: {
1315
- ...defaultMergedSettings,
1316
- ui: {
1317
- ...defaultMergedSettings.ui,
1318
- showStatusInTitle: true,
1319
- hideWindowTitle: false,
1320
- },
1321
- },
1322
- };
1323
- // Mock the streaming state and thought
1324
- const title = 'Test Title';
1325
- mockedUseGeminiStream.mockReturnValue({
1326
- streamingState: 'responding',
1327
- submitQuery: vi.fn(),
1328
- initError: null,
1329
- pendingHistoryItems: [],
1330
- thought: { subject: title },
1331
- cancelOngoingRequest: vi.fn(),
1332
- });
1333
- // Act: Render the container
1334
- const { unmount } = renderAppContainer({
1335
- settings: mockSettingsWithTitleEnabled,
1336
- });
1337
- // Assert: Check that the correct ANSI escape sequence is used
1338
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1339
- expect(titleWrites).toHaveLength(1);
1340
- const expectedEscapeSequence = `\x1b]0;${`✦ ${title} (workspace)`.padEnd(80, ' ')}\x07`;
1341
- expect(titleWrites[0][0]).toBe(expectedEscapeSequence);
1342
- unmount();
1343
- });
1344
- it('should use CLI_TITLE environment variable when set', () => {
1345
- // Arrange: Set up mock settings with showStatusInTitle disabled (so it shows suffix)
1346
- const mockSettingsWithTitleDisabled = {
1347
- ...mockSettings,
1348
- merged: {
1349
- ...mockSettings.merged,
1350
- ui: {
1351
- ...mockSettings.merged.ui,
1352
- showStatusInTitle: false,
1353
- hideWindowTitle: false,
1354
- },
1355
- },
1356
- };
1357
- // Mock CLI_TITLE environment variable
1358
- vi.stubEnv('CLI_TITLE', 'Custom Gemini Title');
1359
- // Mock the streaming state
1360
- mockedUseGeminiStream.mockReturnValue({
1361
- streamingState: 'responding',
1362
- submitQuery: vi.fn(),
1363
- initError: null,
1364
- pendingHistoryItems: [],
1365
- thought: null,
1366
- cancelOngoingRequest: vi.fn(),
1367
- });
1368
- // Act: Render the container
1369
- const { unmount } = renderAppContainer({
1370
- settings: mockSettingsWithTitleDisabled,
1371
- });
1372
- // Assert: Check that title was updated with CLI_TITLE value
1373
- const titleWrites = mocks.mockStdout.write.mock.calls.filter((call) => call[0].includes('\x1b]0;'));
1374
- expect(titleWrites).toHaveLength(1);
1375
- expect(titleWrites[0][0]).toBe(`\x1b]0;${'✦ Working… (Custom Gemini Title)'.padEnd(80, ' ')}\x07`);
1376
- unmount();
1377
- });
1378
- });
1379
- describe('Queue Error Message', () => {
1380
- beforeEach(() => {
1381
- vi.useFakeTimers();
1382
- });
1383
- afterEach(() => {
1384
- vi.useRealTimers();
1385
- vi.restoreAllMocks();
1386
- });
1387
- it('should set and clear the queue error message after a timeout', async () => {
1388
- const { rerender, unmount } = renderAppContainer();
1389
- await act(async () => {
1390
- vi.advanceTimersByTime(0);
1391
- });
1392
- expect(capturedUIState.queueErrorMessage).toBeNull();
1393
- act(() => {
1394
- capturedUIActions.setQueueErrorMessage('Test error');
1395
- });
1396
- rerender(getAppContainer());
1397
- expect(capturedUIState.queueErrorMessage).toBe('Test error');
1398
- act(() => {
1399
- vi.advanceTimersByTime(3000);
1400
- });
1401
- rerender(getAppContainer());
1402
- expect(capturedUIState.queueErrorMessage).toBeNull();
1403
- unmount();
1404
- });
1405
- it('should reset the timer if a new error message is set', async () => {
1406
- const { rerender, unmount } = renderAppContainer();
1407
- await act(async () => {
1408
- vi.advanceTimersByTime(0);
1409
- });
1410
- act(() => {
1411
- capturedUIActions.setQueueErrorMessage('First error');
1412
- });
1413
- rerender(getAppContainer());
1414
- expect(capturedUIState.queueErrorMessage).toBe('First error');
1415
- act(() => {
1416
- vi.advanceTimersByTime(1500);
1417
- });
1418
- act(() => {
1419
- capturedUIActions.setQueueErrorMessage('Second error');
1420
- });
1421
- rerender(getAppContainer());
1422
- expect(capturedUIState.queueErrorMessage).toBe('Second error');
1423
- act(() => {
1424
- vi.advanceTimersByTime(2000);
1425
- });
1426
- rerender(getAppContainer());
1427
- expect(capturedUIState.queueErrorMessage).toBe('Second error');
1428
- // 5. Advance time past the 3 second timeout from the second message
1429
- act(() => {
1430
- vi.advanceTimersByTime(1000);
1431
- });
1432
- rerender(getAppContainer());
1433
- expect(capturedUIState.queueErrorMessage).toBeNull();
1434
- unmount();
1435
- });
1436
- });
1437
- describe('Terminal Height Calculation', () => {
1438
- const mockedMeasureElement = measureElement;
1439
- const mockedUseTerminalSize = useTerminalSize;
1440
- it('should prevent terminal height from being less than 1', async () => {
1441
- const resizePtySpy = vi.spyOn(ShellExecutionService, 'resizePty');
1442
- // Arrange: Simulate a small terminal and a large footer
1443
- mockedUseTerminalSize.mockReturnValue({ columns: 80, rows: 5 });
1444
- mockedMeasureElement.mockReturnValue({ width: 80, height: 10 }); // Footer is taller than the screen
1445
- mockedUseGeminiStream.mockReturnValue({
1446
- streamingState: 'idle',
1447
- submitQuery: vi.fn(),
1448
- initError: null,
1449
- pendingHistoryItems: [],
1450
- thought: null,
1451
- cancelOngoingRequest: vi.fn(),
1452
- activePtyId: 'some-id',
1453
- });
1454
- let unmount;
1455
- await act(async () => {
1456
- const result = renderAppContainer();
1457
- unmount = result.unmount;
1458
- });
1459
- await waitFor(() => expect(resizePtySpy).toHaveBeenCalled());
1460
- const lastCall = resizePtySpy.mock.calls[resizePtySpy.mock.calls.length - 1];
1461
- // Check the height argument specifically
1462
- expect(lastCall[2]).toBe(1);
1463
- unmount();
1464
- });
1465
- });
1466
- describe('Keyboard Input Handling (CTRL+C / CTRL+D)', () => {
1467
- let handleGlobalKeypress;
1468
- let mockHandleSlashCommand;
1469
- let mockCancelOngoingRequest;
1470
- let rerender;
1471
- let unmount;
1472
- // Helper function to reduce boilerplate in tests
1473
- const setupKeypressTest = async () => {
1474
- const renderResult = renderAppContainer();
1475
- await act(async () => {
1476
- vi.advanceTimersByTime(0);
1477
- });
1478
- rerender = () => renderResult.rerender(getAppContainer());
1479
- unmount = renderResult.unmount;
1480
- };
1481
- const pressKey = (key, times = 1) => {
1482
- for (let i = 0; i < times; i++) {
1483
- act(() => {
1484
- handleGlobalKeypress({
1485
- name: 'c',
1486
- shift: false,
1487
- alt: false,
1488
- ctrl: false,
1489
- cmd: false,
1490
- ...key,
1491
- });
1492
- });
1493
- rerender();
1494
- }
1495
- };
1496
- beforeEach(() => {
1497
- // Capture the keypress handler from the AppContainer
1498
- mockedUseKeypress.mockImplementation((callback) => {
1499
- handleGlobalKeypress = callback;
1500
- });
1501
- // Mock slash command handler
1502
- mockHandleSlashCommand = vi.fn();
1503
- mockedUseSlashCommandProcessor.mockReturnValue({
1504
- handleSlashCommand: mockHandleSlashCommand,
1505
- slashCommands: [],
1506
- pendingHistoryItems: [],
1507
- commandContext: {},
1508
- shellConfirmationRequest: null,
1509
- confirmationRequest: null,
1510
- });
1511
- // Mock request cancellation
1512
- mockCancelOngoingRequest = vi.fn();
1513
- mockedUseGeminiStream.mockReturnValue({
1514
- streamingState: 'idle',
1515
- submitQuery: vi.fn(),
1516
- initError: null,
1517
- pendingHistoryItems: [],
1518
- thought: null,
1519
- cancelOngoingRequest: mockCancelOngoingRequest,
1520
- });
1521
- // Default empty text buffer
1522
- mockedUseTextBuffer.mockReturnValue({
1523
- text: '',
1524
- setText: vi.fn(),
1525
- });
1526
- vi.useFakeTimers();
1527
- });
1528
- afterEach(() => {
1529
- vi.useRealTimers();
1530
- vi.restoreAllMocks();
1531
- });
1532
- describe('CTRL+C', () => {
1533
- it('should cancel ongoing request on first press', async () => {
1534
- mockedUseGeminiStream.mockReturnValue({
1535
- streamingState: 'responding',
1536
- submitQuery: vi.fn(),
1537
- initError: null,
1538
- pendingHistoryItems: [],
1539
- thought: null,
1540
- cancelOngoingRequest: mockCancelOngoingRequest,
1541
- });
1542
- await setupKeypressTest();
1543
- pressKey({ name: 'c', ctrl: true });
1544
- expect(mockCancelOngoingRequest).toHaveBeenCalledTimes(1);
1545
- expect(mockHandleSlashCommand).not.toHaveBeenCalled();
1546
- unmount();
1547
- });
1548
- it('should quit on second press', async () => {
1549
- await setupKeypressTest();
1550
- pressKey({ name: 'c', ctrl: true }, 2);
1551
- expect(mockCancelOngoingRequest).toHaveBeenCalledTimes(2);
1552
- expect(mockHandleSlashCommand).toHaveBeenCalledWith('/quit', undefined, undefined, false);
1553
- unmount();
1554
- });
1555
- it('should reset press count after a timeout', async () => {
1556
- await setupKeypressTest();
1557
- pressKey({ name: 'c', ctrl: true });
1558
- expect(mockHandleSlashCommand).not.toHaveBeenCalled();
1559
- // Advance timer past the reset threshold
1560
- act(() => {
1561
- vi.advanceTimersByTime(1001);
1562
- });
1563
- pressKey({ name: 'c', ctrl: true });
1564
- expect(mockHandleSlashCommand).not.toHaveBeenCalled();
1565
- unmount();
1566
- });
1567
- });
1568
- describe('CTRL+D', () => {
1569
- it('should do nothing if text buffer is not empty', async () => {
1570
- mockedUseTextBuffer.mockReturnValue({
1571
- text: 'some text',
1572
- setText: vi.fn(),
1573
- });
1574
- await setupKeypressTest();
1575
- pressKey({ name: 'd', ctrl: true }, 2);
1576
- expect(mockHandleSlashCommand).not.toHaveBeenCalled();
1577
- unmount();
1578
- });
1579
- it('should quit on second press if buffer is empty', async () => {
1580
- await setupKeypressTest();
1581
- pressKey({ name: 'd', ctrl: true }, 2);
1582
- expect(mockHandleSlashCommand).toHaveBeenCalledWith('/quit', undefined, undefined, false);
1583
- unmount();
1584
- });
1585
- it('should reset press count after a timeout', async () => {
1586
- await setupKeypressTest();
1587
- pressKey({ name: 'd', ctrl: true });
1588
- expect(mockHandleSlashCommand).not.toHaveBeenCalled();
1589
- // Advance timer past the reset threshold
1590
- act(() => {
1591
- vi.advanceTimersByTime(1001);
1592
- });
1593
- pressKey({ name: 'd', ctrl: true });
1594
- expect(mockHandleSlashCommand).not.toHaveBeenCalled();
1595
- unmount();
1596
- });
1597
- });
1598
- });
1599
- describe('Copy Mode (CTRL+S)', () => {
1600
- let handleGlobalKeypress;
1601
- let rerender;
1602
- let unmount;
1603
- const setupCopyModeTest = async (isAlternateMode = false) => {
1604
- // Update settings for this test run
1605
- const defaultMergedSettings = mergeSettings({}, {}, {}, {}, true);
1606
- const testSettings = {
1607
- ...mockSettings,
1608
- merged: {
1609
- ...defaultMergedSettings,
1610
- ui: {
1611
- ...defaultMergedSettings.ui,
1612
- useAlternateBuffer: isAlternateMode,
1613
- },
1614
- },
1615
- };
1616
- const renderResult = renderAppContainer({ settings: testSettings });
1617
- await act(async () => {
1618
- vi.advanceTimersByTime(0);
1619
- });
1620
- rerender = () => renderResult.rerender(getAppContainer({ settings: testSettings }));
1621
- unmount = renderResult.unmount;
1622
- };
1623
- beforeEach(() => {
1624
- mocks.mockStdout.write.mockClear();
1625
- mockedUseKeypress.mockImplementation((callback) => {
1626
- handleGlobalKeypress = callback;
1627
- });
1628
- vi.useFakeTimers();
1629
- });
1630
- afterEach(() => {
1631
- vi.useRealTimers();
1632
- vi.restoreAllMocks();
1633
- });
1634
- describe.each([
1635
- {
1636
- isAlternateMode: false,
1637
- shouldEnable: false,
1638
- modeName: 'Normal Mode',
1639
- },
1640
- {
1641
- isAlternateMode: true,
1642
- shouldEnable: true,
1643
- modeName: 'Alternate Buffer Mode',
1644
- },
1645
- ])('$modeName', ({ isAlternateMode, shouldEnable }) => {
1646
- it(`should ${shouldEnable ? 'toggle' : 'NOT toggle'} mouse off when Ctrl+S is pressed`, async () => {
1647
- await setupCopyModeTest(isAlternateMode);
1648
- mocks.mockStdout.write.mockClear(); // Clear initial enable call
1649
- act(() => {
1650
- handleGlobalKeypress({
1651
- name: 's',
1652
- shift: false,
1653
- alt: false,
1654
- ctrl: true,
1655
- cmd: false,
1656
- insertable: false,
1657
- sequence: '\x13',
1658
- });
1659
- });
1660
- rerender();
1661
- if (shouldEnable) {
1662
- expect(disableMouseEvents).toHaveBeenCalled();
1663
- }
1664
- else {
1665
- expect(disableMouseEvents).not.toHaveBeenCalled();
1666
- }
1667
- unmount();
1668
- });
1669
- if (shouldEnable) {
1670
- it('should toggle mouse back on when Ctrl+S is pressed again', async () => {
1671
- await setupCopyModeTest(isAlternateMode);
1672
- writeToStdout.mockClear();
1673
- // Turn it on (disable mouse)
1674
- act(() => {
1675
- handleGlobalKeypress({
1676
- name: 's',
1677
- shift: false,
1678
- alt: false,
1679
- ctrl: true,
1680
- cmd: false,
1681
- insertable: false,
1682
- sequence: '\x13',
1683
- });
1684
- });
1685
- rerender();
1686
- expect(disableMouseEvents).toHaveBeenCalled();
1687
- // Turn it off (enable mouse)
1688
- act(() => {
1689
- handleGlobalKeypress({
1690
- name: 'any', // Any key should exit copy mode
1691
- shift: false,
1692
- alt: false,
1693
- ctrl: false,
1694
- cmd: false,
1695
- insertable: true,
1696
- sequence: 'a',
1697
- });
1698
- });
1699
- rerender();
1700
- expect(enableMouseEvents).toHaveBeenCalled();
1701
- unmount();
1702
- });
1703
- it('should exit copy mode on any key press', async () => {
1704
- await setupCopyModeTest(isAlternateMode);
1705
- // Enter copy mode
1706
- act(() => {
1707
- handleGlobalKeypress({
1708
- name: 's',
1709
- shift: false,
1710
- alt: false,
1711
- ctrl: true,
1712
- cmd: false,
1713
- insertable: false,
1714
- sequence: '\x13',
1715
- });
1716
- });
1717
- rerender();
1718
- writeToStdout.mockClear();
1719
- // Press any other key
1720
- act(() => {
1721
- handleGlobalKeypress({
1722
- name: 'a',
1723
- shift: false,
1724
- alt: false,
1725
- ctrl: false,
1726
- cmd: false,
1727
- insertable: true,
1728
- sequence: 'a',
1729
- });
1730
- });
1731
- rerender();
1732
- // Should have re-enabled mouse
1733
- expect(enableMouseEvents).toHaveBeenCalled();
1734
- unmount();
1735
- });
1736
- }
1737
- });
1738
- });
1739
- describe('Model Dialog Integration', () => {
1740
- it('should provide isModelDialogOpen in the UIStateContext', async () => {
1741
- mockedUseModelCommand.mockReturnValue({
1742
- isModelDialogOpen: true,
1743
- openModelDialog: vi.fn(),
1744
- closeModelDialog: vi.fn(),
1745
- });
1746
- let unmount;
1747
- await act(async () => {
1748
- const result = renderAppContainer();
1749
- unmount = result.unmount;
1750
- });
1751
- await waitFor(() => expect(capturedUIState).toBeTruthy());
1752
- expect(capturedUIState.isModelDialogOpen).toBe(true);
1753
- unmount();
1754
- });
1755
- it('should provide model dialog actions in the UIActionsContext', async () => {
1756
- const mockCloseModelDialog = vi.fn();
1757
- mockedUseModelCommand.mockReturnValue({
1758
- isModelDialogOpen: false,
1759
- openModelDialog: vi.fn(),
1760
- closeModelDialog: mockCloseModelDialog,
1761
- });
1762
- let unmount;
1763
- await act(async () => {
1764
- const result = renderAppContainer();
1765
- unmount = result.unmount;
1766
- });
1767
- await waitFor(() => expect(capturedUIState).toBeTruthy());
1768
- // Verify that the actions are correctly passed through context
1769
- act(() => {
1770
- capturedUIActions.closeModelDialog();
1771
- });
1772
- expect(mockCloseModelDialog).toHaveBeenCalled();
1773
- unmount();
1774
- });
1775
- });
1776
- describe('Agent Configuration Dialog Integration', () => {
1777
- it('should initialize with dialog closed and no agent selected', async () => {
1778
- let unmount;
1779
- await act(async () => {
1780
- const result = renderAppContainer();
1781
- unmount = result.unmount;
1782
- });
1783
- await waitFor(() => expect(capturedUIState).toBeTruthy());
1784
- expect(capturedUIState.isAgentConfigDialogOpen).toBe(false);
1785
- expect(capturedUIState.selectedAgentName).toBeUndefined();
1786
- expect(capturedUIState.selectedAgentDisplayName).toBeUndefined();
1787
- expect(capturedUIState.selectedAgentDefinition).toBeUndefined();
1788
- unmount();
1789
- });
1790
- it('should update state when openAgentConfigDialog is called', async () => {
1791
- let unmount;
1792
- await act(async () => {
1793
- const result = renderAppContainer();
1794
- unmount = result.unmount;
1795
- });
1796
- await waitFor(() => expect(capturedUIState).toBeTruthy());
1797
- const agentDefinition = { name: 'test-agent' };
1798
- act(() => {
1799
- capturedUIActions.openAgentConfigDialog('test-agent', 'Test Agent', agentDefinition);
1800
- });
1801
- expect(capturedUIState.isAgentConfigDialogOpen).toBe(true);
1802
- expect(capturedUIState.selectedAgentName).toBe('test-agent');
1803
- expect(capturedUIState.selectedAgentDisplayName).toBe('Test Agent');
1804
- expect(capturedUIState.selectedAgentDefinition).toEqual(agentDefinition);
1805
- unmount();
1806
- });
1807
- it('should clear state when closeAgentConfigDialog is called', async () => {
1808
- let unmount;
1809
- await act(async () => {
1810
- const result = renderAppContainer();
1811
- unmount = result.unmount;
1812
- });
1813
- await waitFor(() => expect(capturedUIState).toBeTruthy());
1814
- const agentDefinition = { name: 'test-agent' };
1815
- act(() => {
1816
- capturedUIActions.openAgentConfigDialog('test-agent', 'Test Agent', agentDefinition);
1817
- });
1818
- expect(capturedUIState.isAgentConfigDialogOpen).toBe(true);
1819
- act(() => {
1820
- capturedUIActions.closeAgentConfigDialog();
1821
- });
1822
- expect(capturedUIState.isAgentConfigDialogOpen).toBe(false);
1823
- expect(capturedUIState.selectedAgentName).toBeUndefined();
1824
- expect(capturedUIState.selectedAgentDisplayName).toBeUndefined();
1825
- expect(capturedUIState.selectedAgentDefinition).toBeUndefined();
1826
- unmount();
1827
- });
1828
- });
1829
- describe('CoreEvents Integration', () => {
1830
- it('subscribes to UserFeedback and drains backlog on mount', async () => {
1831
- let unmount;
1832
- await act(async () => {
1833
- const result = renderAppContainer();
1834
- unmount = result.unmount;
1835
- });
1836
- await waitFor(() => expect(capturedUIState).toBeTruthy());
1837
- expect(mockCoreEvents.on).toHaveBeenCalledWith(CoreEvent.UserFeedback, expect.any(Function));
1838
- expect(mockCoreEvents.drainBacklogs).toHaveBeenCalledTimes(1);
1839
- unmount();
1840
- });
1841
- it('unsubscribes from UserFeedback on unmount', async () => {
1842
- let unmount;
1843
- await act(async () => {
1844
- const result = renderAppContainer();
1845
- unmount = result.unmount;
1846
- });
1847
- await waitFor(() => expect(capturedUIState).toBeTruthy());
1848
- unmount();
1849
- expect(mockCoreEvents.off).toHaveBeenCalledWith(CoreEvent.UserFeedback, expect.any(Function));
1850
- });
1851
- it('adds history item when UserFeedback event is received', async () => {
1852
- let unmount;
1853
- await act(async () => {
1854
- const result = renderAppContainer();
1855
- unmount = result.unmount;
1856
- });
1857
- await waitFor(() => expect(capturedUIState).toBeTruthy());
1858
- // Get the registered handler
1859
- const handler = mockCoreEvents.on.mock.calls.find((call) => call[0] === CoreEvent.UserFeedback)?.[1];
1860
- expect(handler).toBeDefined();
1861
- // Simulate an event
1862
- const payload = {
1863
- severity: 'error',
1864
- message: 'Test error message',
1865
- };
1866
- act(() => {
1867
- handler(payload);
1868
- });
1869
- expect(mockedUseHistory().addItem).toHaveBeenCalledWith(expect.objectContaining({
1870
- type: 'error',
1871
- text: 'Test error message',
1872
- }), expect.any(Number));
1873
- unmount();
1874
- });
1875
- it('updates currentModel when ModelChanged event is received', async () => {
1876
- // Arrange: Mock initial model
1877
- vi.spyOn(mockConfig, 'getModel').mockReturnValue('initial-model');
1878
- let unmount;
1879
- await act(async () => {
1880
- const result = renderAppContainer();
1881
- unmount = result.unmount;
1882
- });
1883
- await waitFor(() => {
1884
- expect(capturedUIState?.currentModel).toBe('initial-model');
1885
- });
1886
- // Get the registered handler for ModelChanged
1887
- const handler = mockCoreEvents.on.mock.calls.find((call) => call[0] === CoreEvent.ModelChanged)?.[1];
1888
- expect(handler).toBeDefined();
1889
- // Act: Simulate ModelChanged event
1890
- // Update config mock to return new model since the handler reads from config
1891
- vi.spyOn(mockConfig, 'getModel').mockReturnValue('new-model');
1892
- act(() => {
1893
- handler({ model: 'new-model' });
1894
- });
1895
- // Assert: Verify model is updated
1896
- await waitFor(() => {
1897
- expect(capturedUIState.currentModel).toBe('new-model');
1898
- });
1899
- unmount();
1900
- });
1901
- it('provides activeHooks from useHookDisplayState', async () => {
1902
- const mockHooks = [{ name: 'hook1', eventName: 'event1' }];
1903
- mockedUseHookDisplayState.mockReturnValue(mockHooks);
1904
- let unmount;
1905
- await act(async () => {
1906
- const result = renderAppContainer();
1907
- unmount = result.unmount;
1908
- });
1909
- await waitFor(() => expect(capturedUIState).toBeTruthy());
1910
- expect(capturedUIState.activeHooks).toEqual(mockHooks);
1911
- unmount();
1912
- });
1913
- });
1914
- describe('Shell Interaction', () => {
1915
- it('should not crash if resizing the pty fails', async () => {
1916
- const resizePtySpy = vi
1917
- .spyOn(ShellExecutionService, 'resizePty')
1918
- .mockImplementation(() => {
1919
- throw new Error('Cannot resize a pty that has already exited');
1920
- });
1921
- mockedUseGeminiStream.mockReturnValue({
1922
- streamingState: 'idle',
1923
- submitQuery: vi.fn(),
1924
- initError: null,
1925
- pendingHistoryItems: [],
1926
- thought: null,
1927
- cancelOngoingRequest: vi.fn(),
1928
- activePtyId: 'some-pty-id', // Make sure activePtyId is set
1929
- });
1930
- // The main assertion is that the render does not throw.
1931
- let unmount;
1932
- await act(async () => {
1933
- const result = renderAppContainer();
1934
- unmount = result.unmount;
1935
- });
1936
- await waitFor(() => expect(resizePtySpy).toHaveBeenCalled());
1937
- unmount();
1938
- });
1939
- });
1940
- describe('Banner Text', () => {
1941
- it('should render placeholder banner text for USE_GEMINI auth type', async () => {
1942
- const config = makeFakeConfig();
1943
- vi.spyOn(config, 'getContentGeneratorConfig').mockReturnValue({
1944
- authType: AuthType.USE_GEMINI,
1945
- apiKey: 'fake-key',
1946
- });
1947
- let unmount;
1948
- await act(async () => {
1949
- const result = renderAppContainer();
1950
- unmount = result.unmount;
1951
- });
1952
- await waitFor(() => {
1953
- expect(capturedUIState.bannerData.defaultText).toBeDefined();
1954
- unmount();
1955
- });
1956
- });
1957
- });
1958
- describe('onCancelSubmit Behavior', () => {
1959
- let mockSetText;
1960
- // Helper to extract arguments from the useGeminiStream hook call
1961
- // This isolates the positional argument dependency to a single location
1962
- const extractUseGeminiStreamArgs = (args) => ({
1963
- onCancelSubmit: args[13],
1964
- });
1965
- beforeEach(() => {
1966
- mockSetText = vi.fn();
1967
- mockedUseTextBuffer.mockReturnValue({
1968
- text: '',
1969
- setText: mockSetText,
1970
- });
1971
- });
1972
- it('clears the prompt when onCancelSubmit is called with shouldRestorePrompt=false', async () => {
1973
- let unmount;
1974
- await act(async () => {
1975
- const result = renderAppContainer();
1976
- unmount = result.unmount;
1977
- });
1978
- await waitFor(() => expect(capturedUIState).toBeTruthy());
1979
- const { onCancelSubmit } = extractUseGeminiStreamArgs(mockedUseGeminiStream.mock.lastCall);
1980
- act(() => {
1981
- onCancelSubmit(false);
1982
- });
1983
- expect(mockSetText).toHaveBeenCalledWith('');
1984
- unmount();
1985
- });
1986
- it('restores the prompt when onCancelSubmit is called with shouldRestorePrompt=true (or undefined)', async () => {
1987
- // Mock useInputHistoryStore to provide input history
1988
- mockedUseInputHistoryStore.mockReturnValue({
1989
- inputHistory: ['previous message'],
1990
- addInput: vi.fn(),
1991
- initializeFromLogger: vi.fn(),
1992
- });
1993
- let unmount;
1994
- await act(async () => {
1995
- const result = renderAppContainer();
1996
- unmount = result.unmount;
1997
- });
1998
- await waitFor(() => expect(capturedUIState.userMessages).toContain('previous message'));
1999
- const { onCancelSubmit } = extractUseGeminiStreamArgs(mockedUseGeminiStream.mock.lastCall);
2000
- await act(async () => {
2001
- onCancelSubmit(true);
2002
- });
2003
- await waitFor(() => {
2004
- expect(mockSetText).toHaveBeenCalledWith('previous message');
2005
- });
2006
- unmount();
2007
- });
2008
- it('input history is independent from conversation history (survives /clear)', async () => {
2009
- // This test verifies that input history (used for up-arrow navigation) is maintained
2010
- // separately from conversation history and survives /clear operations.
2011
- const mockAddInput = vi.fn();
2012
- mockedUseInputHistoryStore.mockReturnValue({
2013
- inputHistory: ['first prompt', 'second prompt'],
2014
- addInput: mockAddInput,
2015
- initializeFromLogger: vi.fn(),
2016
- });
2017
- let rerender;
2018
- let unmount;
2019
- await act(async () => {
2020
- const result = renderAppContainer();
2021
- rerender = result.rerender;
2022
- unmount = result.unmount;
2023
- });
2024
- // Verify userMessages is populated from inputHistory
2025
- await waitFor(() => expect(capturedUIState.userMessages).toContain('first prompt'));
2026
- expect(capturedUIState.userMessages).toContain('second prompt');
2027
- // Clear the conversation history (simulating /clear command)
2028
- const mockClearItems = vi.fn();
2029
- mockedUseHistory.mockReturnValue({
2030
- history: [],
2031
- addItem: vi.fn(),
2032
- updateItem: vi.fn(),
2033
- clearItems: mockClearItems,
2034
- loadHistory: vi.fn(),
2035
- });
2036
- await act(async () => {
2037
- // Rerender to apply the new mock.
2038
- rerender(getAppContainer());
2039
- });
2040
- // Verify that userMessages still contains the input history
2041
- // (it should not be affected by clearing conversation history)
2042
- expect(capturedUIState.userMessages).toContain('first prompt');
2043
- expect(capturedUIState.userMessages).toContain('second prompt');
2044
- unmount();
2045
- });
2046
- });
2047
- describe('Regression Tests', () => {
2048
- it('does not refresh static on startup if banner text is empty', async () => {
2049
- // Mock banner text to be empty strings
2050
- vi.spyOn(mockConfig, 'getBannerTextNoCapacityIssues').mockResolvedValue('');
2051
- vi.spyOn(mockConfig, 'getBannerTextCapacityIssues').mockResolvedValue('');
2052
- // Clear previous calls
2053
- mocks.mockStdout.write.mockClear();
2054
- let compUnmount = () => { };
2055
- await act(async () => {
2056
- const { unmount } = renderAppContainer();
2057
- compUnmount = unmount;
2058
- });
2059
- // Allow async effects to run
2060
- await waitFor(() => expect(capturedUIState).toBeTruthy());
2061
- // Wait for fetchBannerTexts to complete
2062
- await act(async () => {
2063
- await new Promise((resolve) => setTimeout(resolve, 100));
2064
- });
2065
- // Check that clearTerminal was NOT written to stdout
2066
- const clearTerminalCalls = mocks.mockStdout.write.mock.calls.filter((call) => call[0] === ansiEscapes.clearTerminal);
2067
- expect(clearTerminalCalls).toHaveLength(0);
2068
- compUnmount();
2069
- });
2070
- });
2071
- });
2072
- //# sourceMappingURL=AppContainer.test.js.map