@quantum-ai/gemini-cli 0.45.4 → 0.45.5

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 (1440) hide show
  1. package/README.md +394 -0
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +12 -11
  5. package/dist/src/config/settingsSchema.d.ts +1 -1
  6. package/dist/src/index.d.ts +1 -0
  7. package/dist/src/index.js +1 -0
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/ui/App.d.ts +1 -1
  10. package/dist/src/ui/AppContainer.d.ts +1 -1
  11. package/dist/src/ui/IdeIntegrationNudge.d.ts +1 -1
  12. package/dist/src/ui/auth/LoginRestartDialog.d.ts +1 -1
  13. package/dist/src/ui/components/AdminSettingsChangedDialog.d.ts +1 -1
  14. package/dist/src/ui/components/AlternateBufferQuittingDisplay.d.ts +1 -1
  15. package/dist/src/ui/components/AppHeader.d.ts +1 -1
  16. package/dist/src/ui/components/BackgroundTaskDisplay.d.ts +1 -1
  17. package/dist/src/ui/components/Banner.d.ts +1 -1
  18. package/dist/src/ui/components/CliSpinner.d.ts +1 -1
  19. package/dist/src/ui/components/Composer.d.ts +1 -1
  20. package/dist/src/ui/components/ConfigInitDisplay.d.ts +1 -1
  21. package/dist/src/ui/components/ConsentPrompt.d.ts +1 -1
  22. package/dist/src/ui/components/ContextUsageDisplay.d.ts +1 -1
  23. package/dist/src/ui/components/DebugProfiler.d.ts +1 -1
  24. package/dist/src/ui/components/DialogManager.d.ts +1 -1
  25. package/dist/src/ui/components/IdeTrustChangeDialog.d.ts +1 -1
  26. package/dist/src/ui/components/LoopDetectionConfirmation.d.ts +1 -1
  27. package/dist/src/ui/components/MainContent.d.ts +1 -1
  28. package/dist/src/ui/components/ModelQuotaDisplay.d.ts +1 -1
  29. package/dist/src/ui/components/NewAgentsNotification.d.ts +1 -1
  30. package/dist/src/ui/components/Notifications.d.ts +1 -1
  31. package/dist/src/ui/components/QueuedMessageDisplay.d.ts +1 -1
  32. package/dist/src/ui/components/QuittingDisplay.d.ts +1 -1
  33. package/dist/src/ui/components/ShowMoreLines.d.ts +1 -1
  34. package/dist/src/ui/components/SuggestionsDisplay.d.ts +1 -1
  35. package/dist/src/ui/components/Table.d.ts +1 -1
  36. package/dist/src/ui/components/UpdateNotification.d.ts +1 -1
  37. package/dist/src/ui/components/shared/SlicingMaxSizedBox.d.ts +1 -1
  38. package/dist/src/ui/components/triage/TriageDuplicates.d.ts +1 -1
  39. package/dist/src/ui/components/triage/TriageIssues.d.ts +1 -1
  40. package/dist/src/ui/contexts/KeypressContext.d.ts +1 -1
  41. package/dist/src/ui/contexts/MouseContext.d.ts +1 -1
  42. package/dist/src/ui/contexts/TerminalContext.d.ts +1 -1
  43. package/dist/src/ui/contexts/VimModeContext.d.ts +1 -1
  44. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +2 -2
  45. package/dist/src/ui/hooks/useInlineEditBuffer.d.ts +1 -1
  46. package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
  47. package/dist/src/ui/privacy/CloudFreePrivacyNotice.d.ts +1 -1
  48. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.d.ts +1 -1
  49. package/dist/src/ui/privacy/GeminiPrivacyNotice.d.ts +1 -1
  50. package/dist/src/ui/privacy/PrivacyNotice.d.ts +1 -1
  51. package/dist/src/utils/devtoolsService.js +1 -1
  52. package/dist/src/utils/devtoolsService.js.map +1 -1
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/package.json +12 -11
  55. package/dist/src/acp/acpCommandHandler.test.d.ts +0 -6
  56. package/dist/src/acp/acpCommandHandler.test.js +0 -28
  57. package/dist/src/acp/acpCommandHandler.test.js.map +0 -1
  58. package/dist/src/acp/acpErrors.test.d.ts +0 -6
  59. package/dist/src/acp/acpErrors.test.js +0 -38
  60. package/dist/src/acp/acpErrors.test.js.map +0 -1
  61. package/dist/src/acp/acpFileSystemService.test.d.ts +0 -6
  62. package/dist/src/acp/acpFileSystemService.test.js +0 -162
  63. package/dist/src/acp/acpFileSystemService.test.js.map +0 -1
  64. package/dist/src/acp/acpResume.test.d.ts +0 -6
  65. package/dist/src/acp/acpResume.test.js +0 -260
  66. package/dist/src/acp/acpResume.test.js.map +0 -1
  67. package/dist/src/acp/acpRpcDispatcher.test.d.ts +0 -6
  68. package/dist/src/acp/acpRpcDispatcher.test.js +0 -238
  69. package/dist/src/acp/acpRpcDispatcher.test.js.map +0 -1
  70. package/dist/src/acp/acpSession.test.d.ts +0 -6
  71. package/dist/src/acp/acpSession.test.js +0 -742
  72. package/dist/src/acp/acpSession.test.js.map +0 -1
  73. package/dist/src/acp/acpSessionManager.test.d.ts +0 -6
  74. package/dist/src/acp/acpSessionManager.test.js +0 -283
  75. package/dist/src/acp/acpSessionManager.test.js.map +0 -1
  76. package/dist/src/acp/commands/extensions.test.d.ts +0 -6
  77. package/dist/src/acp/commands/extensions.test.js +0 -70
  78. package/dist/src/acp/commands/extensions.test.js.map +0 -1
  79. package/dist/src/acp/commands/help.test.d.ts +0 -6
  80. package/dist/src/acp/commands/help.test.js +0 -40
  81. package/dist/src/acp/commands/help.test.js.map +0 -1
  82. package/dist/src/acp/commands/restore.test.d.ts +0 -6
  83. package/dist/src/acp/commands/restore.test.js +0 -173
  84. package/dist/src/acp/commands/restore.test.js.map +0 -1
  85. package/dist/src/commands/extensions/configure.test.d.ts +0 -1
  86. package/dist/src/commands/extensions/configure.test.js +0 -195
  87. package/dist/src/commands/extensions/configure.test.js.map +0 -1
  88. package/dist/src/commands/extensions/disable.test.d.ts +0 -6
  89. package/dist/src/commands/extensions/disable.test.js +0 -169
  90. package/dist/src/commands/extensions/disable.test.js.map +0 -1
  91. package/dist/src/commands/extensions/enable.test.d.ts +0 -6
  92. package/dist/src/commands/extensions/enable.test.js +0 -199
  93. package/dist/src/commands/extensions/enable.test.js.map +0 -1
  94. package/dist/src/commands/extensions/install.test.d.ts +0 -6
  95. package/dist/src/commands/extensions/install.test.js +0 -311
  96. package/dist/src/commands/extensions/install.test.js.map +0 -1
  97. package/dist/src/commands/extensions/link.test.d.ts +0 -6
  98. package/dist/src/commands/extensions/link.test.js +0 -121
  99. package/dist/src/commands/extensions/link.test.js.map +0 -1
  100. package/dist/src/commands/extensions/list.test.d.ts +0 -6
  101. package/dist/src/commands/extensions/list.test.js +0 -132
  102. package/dist/src/commands/extensions/list.test.js.map +0 -1
  103. package/dist/src/commands/extensions/new.test.d.ts +0 -6
  104. package/dist/src/commands/extensions/new.test.js +0 -62
  105. package/dist/src/commands/extensions/new.test.js.map +0 -1
  106. package/dist/src/commands/extensions/uninstall.test.d.ts +0 -6
  107. package/dist/src/commands/extensions/uninstall.test.js +0 -240
  108. package/dist/src/commands/extensions/uninstall.test.js.map +0 -1
  109. package/dist/src/commands/extensions/update.test.d.ts +0 -6
  110. package/dist/src/commands/extensions/update.test.js +0 -196
  111. package/dist/src/commands/extensions/update.test.js.map +0 -1
  112. package/dist/src/commands/extensions/validate.test.d.ts +0 -6
  113. package/dist/src/commands/extensions/validate.test.js +0 -96
  114. package/dist/src/commands/extensions/validate.test.js.map +0 -1
  115. package/dist/src/commands/extensions.test.d.ts +0 -6
  116. package/dist/src/commands/extensions.test.js +0 -67
  117. package/dist/src/commands/extensions.test.js.map +0 -1
  118. package/dist/src/commands/gemma/logs.test.d.ts +0 -6
  119. package/dist/src/commands/gemma/logs.test.js +0 -122
  120. package/dist/src/commands/gemma/logs.test.js.map +0 -1
  121. package/dist/src/commands/gemma/platform.test.d.ts +0 -6
  122. package/dist/src/commands/gemma/platform.test.js +0 -108
  123. package/dist/src/commands/gemma/platform.test.js.map +0 -1
  124. package/dist/src/commands/gemma/setup.test.d.ts +0 -6
  125. package/dist/src/commands/gemma/setup.test.js +0 -36
  126. package/dist/src/commands/gemma/setup.test.js.map +0 -1
  127. package/dist/src/commands/gemma/stop.test.d.ts +0 -6
  128. package/dist/src/commands/gemma/stop.test.js +0 -89
  129. package/dist/src/commands/gemma/stop.test.js.map +0 -1
  130. package/dist/src/commands/hooks/migrate.test.d.ts +0 -6
  131. package/dist/src/commands/hooks/migrate.test.js +0 -388
  132. package/dist/src/commands/hooks/migrate.test.js.map +0 -1
  133. package/dist/src/commands/mcp/add.test.d.ts +0 -6
  134. package/dist/src/commands/mcp/add.test.js +0 -274
  135. package/dist/src/commands/mcp/add.test.js.map +0 -1
  136. package/dist/src/commands/mcp/list.test.d.ts +0 -6
  137. package/dist/src/commands/mcp/list.test.js +0 -477
  138. package/dist/src/commands/mcp/list.test.js.map +0 -1
  139. package/dist/src/commands/mcp/remove.test.d.ts +0 -6
  140. package/dist/src/commands/mcp/remove.test.js +0 -206
  141. package/dist/src/commands/mcp/remove.test.js.map +0 -1
  142. package/dist/src/commands/mcp.test.d.ts +0 -6
  143. package/dist/src/commands/mcp.test.js +0 -64
  144. package/dist/src/commands/mcp.test.js.map +0 -1
  145. package/dist/src/commands/skills/disable.test.d.ts +0 -6
  146. package/dist/src/commands/skills/disable.test.js +0 -93
  147. package/dist/src/commands/skills/disable.test.js.map +0 -1
  148. package/dist/src/commands/skills/enable.test.d.ts +0 -6
  149. package/dist/src/commands/skills/enable.test.js +0 -104
  150. package/dist/src/commands/skills/enable.test.js.map +0 -1
  151. package/dist/src/commands/skills/install.test.d.ts +0 -6
  152. package/dist/src/commands/skills/install.test.js +0 -99
  153. package/dist/src/commands/skills/install.test.js.map +0 -1
  154. package/dist/src/commands/skills/link.test.d.ts +0 -6
  155. package/dist/src/commands/skills/link.test.js +0 -53
  156. package/dist/src/commands/skills/link.test.js.map +0 -1
  157. package/dist/src/commands/skills/list.test.d.ts +0 -6
  158. package/dist/src/commands/skills/list.test.js +0 -127
  159. package/dist/src/commands/skills/list.test.js.map +0 -1
  160. package/dist/src/commands/skills/uninstall.test.d.ts +0 -6
  161. package/dist/src/commands/skills/uninstall.test.js +0 -65
  162. package/dist/src/commands/skills/uninstall.test.js.map +0 -1
  163. package/dist/src/commands/skills.test.d.ts +0 -6
  164. package/dist/src/commands/skills.test.js +0 -49
  165. package/dist/src/commands/skills.test.js.map +0 -1
  166. package/dist/src/commands/utils.test.d.ts +0 -6
  167. package/dist/src/commands/utils.test.js +0 -35
  168. package/dist/src/commands/utils.test.js.map +0 -1
  169. package/dist/src/config/auth.test.d.ts +0 -6
  170. package/dist/src/config/auth.test.js +0 -96
  171. package/dist/src/config/auth.test.js.map +0 -1
  172. package/dist/src/config/config.integration.test.d.ts +0 -6
  173. package/dist/src/config/config.integration.test.js +0 -205
  174. package/dist/src/config/config.integration.test.js.map +0 -1
  175. package/dist/src/config/config.test.d.ts +0 -6
  176. package/dist/src/config/config.test.js +0 -3124
  177. package/dist/src/config/config.test.js.map +0 -1
  178. package/dist/src/config/extension-manager-agents.test.d.ts +0 -6
  179. package/dist/src/config/extension-manager-agents.test.js +0 -116
  180. package/dist/src/config/extension-manager-agents.test.js.map +0 -1
  181. package/dist/src/config/extension-manager-hydration.test.d.ts +0 -6
  182. package/dist/src/config/extension-manager-hydration.test.js +0 -262
  183. package/dist/src/config/extension-manager-hydration.test.js.map +0 -1
  184. package/dist/src/config/extension-manager-permissions.test.d.ts +0 -6
  185. package/dist/src/config/extension-manager-permissions.test.js +0 -107
  186. package/dist/src/config/extension-manager-permissions.test.js.map +0 -1
  187. package/dist/src/config/extension-manager-scope.test.d.ts +0 -6
  188. package/dist/src/config/extension-manager-scope.test.js +0 -158
  189. package/dist/src/config/extension-manager-scope.test.js.map +0 -1
  190. package/dist/src/config/extension-manager-skills.test.d.ts +0 -6
  191. package/dist/src/config/extension-manager-skills.test.js +0 -157
  192. package/dist/src/config/extension-manager-skills.test.js.map +0 -1
  193. package/dist/src/config/extension-manager.test.d.ts +0 -6
  194. package/dist/src/config/extension-manager.test.js +0 -430
  195. package/dist/src/config/extension-manager.test.js.map +0 -1
  196. package/dist/src/config/extension.test.d.ts +0 -6
  197. package/dist/src/config/extension.test.js +0 -1800
  198. package/dist/src/config/extension.test.js.map +0 -1
  199. package/dist/src/config/extensionRegistryClient.test.d.ts +0 -6
  200. package/dist/src/config/extensionRegistryClient.test.js +0 -261
  201. package/dist/src/config/extensionRegistryClient.test.js.map +0 -1
  202. package/dist/src/config/extensions/consent.test.d.ts +0 -6
  203. package/dist/src/config/extensions/consent.test.js +0 -302
  204. package/dist/src/config/extensions/consent.test.js.map +0 -1
  205. package/dist/src/config/extensions/extensionEnablement.test.d.ts +0 -6
  206. package/dist/src/config/extensions/extensionEnablement.test.js +0 -404
  207. package/dist/src/config/extensions/extensionEnablement.test.js.map +0 -1
  208. package/dist/src/config/extensions/extensionSettings.test.d.ts +0 -6
  209. package/dist/src/config/extensions/extensionSettings.test.js +0 -575
  210. package/dist/src/config/extensions/extensionSettings.test.js.map +0 -1
  211. package/dist/src/config/extensions/extensionUpdates.test.d.ts +0 -6
  212. package/dist/src/config/extensions/extensionUpdates.test.js +0 -265
  213. package/dist/src/config/extensions/extensionUpdates.test.js.map +0 -1
  214. package/dist/src/config/extensions/github.test.d.ts +0 -6
  215. package/dist/src/config/extensions/github.test.js +0 -454
  216. package/dist/src/config/extensions/github.test.js.map +0 -1
  217. package/dist/src/config/extensions/github_fetch.test.d.ts +0 -6
  218. package/dist/src/config/extensions/github_fetch.test.js +0 -171
  219. package/dist/src/config/extensions/github_fetch.test.js.map +0 -1
  220. package/dist/src/config/extensions/storage.test.d.ts +0 -6
  221. package/dist/src/config/extensions/storage.test.js +0 -64
  222. package/dist/src/config/extensions/storage.test.js.map +0 -1
  223. package/dist/src/config/extensions/update.test.d.ts +0 -6
  224. package/dist/src/config/extensions/update.test.js +0 -296
  225. package/dist/src/config/extensions/update.test.js.map +0 -1
  226. package/dist/src/config/extensions/variables.test.d.ts +0 -6
  227. package/dist/src/config/extensions/variables.test.js +0 -119
  228. package/dist/src/config/extensions/variables.test.js.map +0 -1
  229. package/dist/src/config/footerItems.test.d.ts +0 -6
  230. package/dist/src/config/footerItems.test.js +0 -180
  231. package/dist/src/config/footerItems.test.js.map +0 -1
  232. package/dist/src/config/mcp/mcpServerEnablement.test.d.ts +0 -6
  233. package/dist/src/config/mcp/mcpServerEnablement.test.js +0 -148
  234. package/dist/src/config/mcp/mcpServerEnablement.test.js.map +0 -1
  235. package/dist/src/config/mutual-exclusivity.test.d.ts +0 -6
  236. package/dist/src/config/mutual-exclusivity.test.js +0 -33
  237. package/dist/src/config/mutual-exclusivity.test.js.map +0 -1
  238. package/dist/src/config/policy-engine.integration.test.d.ts +0 -6
  239. package/dist/src/config/policy-engine.integration.test.js +0 -394
  240. package/dist/src/config/policy-engine.integration.test.js.map +0 -1
  241. package/dist/src/config/policy.test.d.ts +0 -6
  242. package/dist/src/config/policy.test.js +0 -199
  243. package/dist/src/config/policy.test.js.map +0 -1
  244. package/dist/src/config/sandboxConfig.test.d.ts +0 -6
  245. package/dist/src/config/sandboxConfig.test.js +0 -401
  246. package/dist/src/config/sandboxConfig.test.js.map +0 -1
  247. package/dist/src/config/settingPaths.test.d.ts +0 -6
  248. package/dist/src/config/settingPaths.test.js +0 -22
  249. package/dist/src/config/settingPaths.test.js.map +0 -1
  250. package/dist/src/config/settings-env-isolation.test.d.ts +0 -6
  251. package/dist/src/config/settings-env-isolation.test.js +0 -188
  252. package/dist/src/config/settings-env-isolation.test.js.map +0 -1
  253. package/dist/src/config/settings-validation.test.d.ts +0 -6
  254. package/dist/src/config/settings-validation.test.js +0 -464
  255. package/dist/src/config/settings-validation.test.js.map +0 -1
  256. package/dist/src/config/settings.test.d.ts +0 -6
  257. package/dist/src/config/settings.test.js +0 -2660
  258. package/dist/src/config/settings.test.js.map +0 -1
  259. package/dist/src/config/settingsSchema.test.d.ts +0 -6
  260. package/dist/src/config/settingsSchema.test.js +0 -450
  261. package/dist/src/config/settingsSchema.test.js.map +0 -1
  262. package/dist/src/config/settings_repro.test.d.ts +0 -6
  263. package/dist/src/config/settings_repro.test.js +0 -163
  264. package/dist/src/config/settings_repro.test.js.map +0 -1
  265. package/dist/src/config/settings_validation_warning.test.d.ts +0 -6
  266. package/dist/src/config/settings_validation_warning.test.js +0 -124
  267. package/dist/src/config/settings_validation_warning.test.js.map +0 -1
  268. package/dist/src/config/skipExtensions.test.d.ts +0 -6
  269. package/dist/src/config/skipExtensions.test.js +0 -49
  270. package/dist/src/config/skipExtensions.test.js.map +0 -1
  271. package/dist/src/config/trustedFolders.test.d.ts +0 -6
  272. package/dist/src/config/trustedFolders.test.js +0 -411
  273. package/dist/src/config/trustedFolders.test.js.map +0 -1
  274. package/dist/src/config/workspace-policy-cli.test.d.ts +0 -6
  275. package/dist/src/config/workspace-policy-cli.test.js +0 -204
  276. package/dist/src/config/workspace-policy-cli.test.js.map +0 -1
  277. package/dist/src/core/auth.test.d.ts +0 -6
  278. package/dist/src/core/auth.test.js +0 -93
  279. package/dist/src/core/auth.test.js.map +0 -1
  280. package/dist/src/core/initializer.test.d.ts +0 -6
  281. package/dist/src/core/initializer.test.js +0 -111
  282. package/dist/src/core/initializer.test.js.map +0 -1
  283. package/dist/src/core/theme.test.d.ts +0 -6
  284. package/dist/src/core/theme.test.js +0 -46
  285. package/dist/src/core/theme.test.js.map +0 -1
  286. package/dist/src/deferred.test.d.ts +0 -6
  287. package/dist/src/deferred.test.js +0 -180
  288. package/dist/src/deferred.test.js.map +0 -1
  289. package/dist/src/gemini.test.d.ts +0 -6
  290. package/dist/src/gemini.test.js +0 -1432
  291. package/dist/src/gemini.test.js.map +0 -1
  292. package/dist/src/gemini_cleanup.test.d.ts +0 -6
  293. package/dist/src/gemini_cleanup.test.js +0 -391
  294. package/dist/src/gemini_cleanup.test.js.map +0 -1
  295. package/dist/src/integration-tests/modelSteering.test.d.ts +0 -6
  296. package/dist/src/integration-tests/modelSteering.test.js +0 -62
  297. package/dist/src/integration-tests/modelSteering.test.js.map +0 -1
  298. package/dist/src/nonInteractiveCli.test.d.ts +0 -6
  299. package/dist/src/nonInteractiveCli.test.js +0 -1921
  300. package/dist/src/nonInteractiveCli.test.js.map +0 -1
  301. package/dist/src/nonInteractiveCliAgentSession.test.d.ts +0 -6
  302. package/dist/src/nonInteractiveCliAgentSession.test.js +0 -2015
  303. package/dist/src/nonInteractiveCliAgentSession.test.js.map +0 -1
  304. package/dist/src/output-redirection.test.d.ts +0 -6
  305. package/dist/src/output-redirection.test.js +0 -77
  306. package/dist/src/output-redirection.test.js.map +0 -1
  307. package/dist/src/services/BuiltinCommandLoader.test.d.ts +0 -6
  308. package/dist/src/services/BuiltinCommandLoader.test.js +0 -369
  309. package/dist/src/services/BuiltinCommandLoader.test.js.map +0 -1
  310. package/dist/src/services/CommandService.test.d.ts +0 -6
  311. package/dist/src/services/CommandService.test.js +0 -74
  312. package/dist/src/services/CommandService.test.js.map +0 -1
  313. package/dist/src/services/FileCommandLoader.test.d.ts +0 -6
  314. package/dist/src/services/FileCommandLoader.test.js +0 -1128
  315. package/dist/src/services/FileCommandLoader.test.js.map +0 -1
  316. package/dist/src/services/McpPromptLoader.test.d.ts +0 -6
  317. package/dist/src/services/McpPromptLoader.test.js +0 -411
  318. package/dist/src/services/McpPromptLoader.test.js.map +0 -1
  319. package/dist/src/services/SkillCommandLoader.test.d.ts +0 -6
  320. package/dist/src/services/SkillCommandLoader.test.js +0 -113
  321. package/dist/src/services/SkillCommandLoader.test.js.map +0 -1
  322. package/dist/src/services/SlashCommandConflictHandler.test.d.ts +0 -6
  323. package/dist/src/services/SlashCommandConflictHandler.test.js +0 -144
  324. package/dist/src/services/SlashCommandConflictHandler.test.js.map +0 -1
  325. package/dist/src/services/SlashCommandResolver.test.d.ts +0 -6
  326. package/dist/src/services/SlashCommandResolver.test.js +0 -186
  327. package/dist/src/services/SlashCommandResolver.test.js.map +0 -1
  328. package/dist/src/services/liteRtServerManager.test.d.ts +0 -6
  329. package/dist/src/services/liteRtServerManager.test.js +0 -54
  330. package/dist/src/services/liteRtServerManager.test.js.map +0 -1
  331. package/dist/src/services/prompt-processors/argumentProcessor.test.d.ts +0 -6
  332. package/dist/src/services/prompt-processors/argumentProcessor.test.js +0 -40
  333. package/dist/src/services/prompt-processors/argumentProcessor.test.js.map +0 -1
  334. package/dist/src/services/prompt-processors/atFileProcessor.test.d.ts +0 -6
  335. package/dist/src/services/prompt-processors/atFileProcessor.test.js +0 -177
  336. package/dist/src/services/prompt-processors/atFileProcessor.test.js.map +0 -1
  337. package/dist/src/services/prompt-processors/injectionParser.test.d.ts +0 -6
  338. package/dist/src/services/prompt-processors/injectionParser.test.js +0 -189
  339. package/dist/src/services/prompt-processors/injectionParser.test.js.map +0 -1
  340. package/dist/src/services/prompt-processors/shellProcessor.test.d.ts +0 -6
  341. package/dist/src/services/prompt-processors/shellProcessor.test.js +0 -525
  342. package/dist/src/services/prompt-processors/shellProcessor.test.js.map +0 -1
  343. package/dist/src/test-utils/AppRig.test.d.ts +0 -6
  344. package/dist/src/test-utils/AppRig.test.js +0 -60
  345. package/dist/src/test-utils/AppRig.test.js.map +0 -1
  346. package/dist/src/test-utils/mockCommandContext.test.d.ts +0 -6
  347. package/dist/src/test-utils/mockCommandContext.test.js +0 -51
  348. package/dist/src/test-utils/mockCommandContext.test.js.map +0 -1
  349. package/dist/src/test-utils/render.test.d.ts +0 -6
  350. package/dist/src/test-utils/render.test.js +0 -84
  351. package/dist/src/test-utils/render.test.js.map +0 -1
  352. package/dist/src/ui/App.test.d.ts +0 -6
  353. package/dist/src/ui/App.test.js +0 -244
  354. package/dist/src/ui/App.test.js.map +0 -1
  355. package/dist/src/ui/AppContainer.test.d.ts +0 -6
  356. package/dist/src/ui/AppContainer.test.js +0 -2824
  357. package/dist/src/ui/AppContainer.test.js.map +0 -1
  358. package/dist/src/ui/IdeIntegrationNudge.test.d.ts +0 -6
  359. package/dist/src/ui/IdeIntegrationNudge.test.js +0 -149
  360. package/dist/src/ui/IdeIntegrationNudge.test.js.map +0 -1
  361. package/dist/src/ui/ToolConfirmationFullFrame.test.d.ts +0 -1
  362. package/dist/src/ui/ToolConfirmationFullFrame.test.js +0 -153
  363. package/dist/src/ui/ToolConfirmationFullFrame.test.js.map +0 -1
  364. package/dist/src/ui/auth/ApiAuthDialog.test.d.ts +0 -6
  365. package/dist/src/ui/auth/ApiAuthDialog.test.js +0 -127
  366. package/dist/src/ui/auth/ApiAuthDialog.test.js.map +0 -1
  367. package/dist/src/ui/auth/AuthDialog.test.d.ts +0 -6
  368. package/dist/src/ui/auth/AuthDialog.test.js +0 -350
  369. package/dist/src/ui/auth/AuthDialog.test.js.map +0 -1
  370. package/dist/src/ui/auth/AuthInProgress.test.d.ts +0 -6
  371. package/dist/src/ui/auth/AuthInProgress.test.js +0 -99
  372. package/dist/src/ui/auth/AuthInProgress.test.js.map +0 -1
  373. package/dist/src/ui/auth/BannedAccountDialog.test.d.ts +0 -6
  374. package/dist/src/ui/auth/BannedAccountDialog.test.js +0 -141
  375. package/dist/src/ui/auth/BannedAccountDialog.test.js.map +0 -1
  376. package/dist/src/ui/auth/LoginRestartDialog.test.d.ts +0 -6
  377. package/dist/src/ui/auth/LoginRestartDialog.test.js +0 -79
  378. package/dist/src/ui/auth/LoginRestartDialog.test.js.map +0 -1
  379. package/dist/src/ui/auth/useAuth.test.d.ts +0 -6
  380. package/dist/src/ui/auth/useAuth.test.js +0 -214
  381. package/dist/src/ui/auth/useAuth.test.js.map +0 -1
  382. package/dist/src/ui/commands/aboutCommand.test.d.ts +0 -6
  383. package/dist/src/ui/commands/aboutCommand.test.js +0 -145
  384. package/dist/src/ui/commands/aboutCommand.test.js.map +0 -1
  385. package/dist/src/ui/commands/agentsCommand.test.d.ts +0 -6
  386. package/dist/src/ui/commands/agentsCommand.test.js +0 -382
  387. package/dist/src/ui/commands/agentsCommand.test.js.map +0 -1
  388. package/dist/src/ui/commands/authCommand.test.d.ts +0 -6
  389. package/dist/src/ui/commands/authCommand.test.js +0 -103
  390. package/dist/src/ui/commands/authCommand.test.js.map +0 -1
  391. package/dist/src/ui/commands/bugCommand.test.d.ts +0 -6
  392. package/dist/src/ui/commands/bugCommand.test.js +0 -305
  393. package/dist/src/ui/commands/bugCommand.test.js.map +0 -1
  394. package/dist/src/ui/commands/bugMemoryCommand.test.d.ts +0 -6
  395. package/dist/src/ui/commands/bugMemoryCommand.test.js +0 -100
  396. package/dist/src/ui/commands/bugMemoryCommand.test.js.map +0 -1
  397. package/dist/src/ui/commands/chatCommand.test.d.ts +0 -6
  398. package/dist/src/ui/commands/chatCommand.test.js +0 -627
  399. package/dist/src/ui/commands/chatCommand.test.js.map +0 -1
  400. package/dist/src/ui/commands/clearCommand.test.d.ts +0 -6
  401. package/dist/src/ui/commands/clearCommand.test.js +0 -98
  402. package/dist/src/ui/commands/clearCommand.test.js.map +0 -1
  403. package/dist/src/ui/commands/commandsCommand.test.d.ts +0 -6
  404. package/dist/src/ui/commands/commandsCommand.test.js +0 -115
  405. package/dist/src/ui/commands/commandsCommand.test.js.map +0 -1
  406. package/dist/src/ui/commands/compressCommand.test.d.ts +0 -6
  407. package/dist/src/ui/commands/compressCommand.test.js +0 -110
  408. package/dist/src/ui/commands/compressCommand.test.js.map +0 -1
  409. package/dist/src/ui/commands/copyCommand.test.d.ts +0 -6
  410. package/dist/src/ui/commands/copyCommand.test.js +0 -244
  411. package/dist/src/ui/commands/copyCommand.test.js.map +0 -1
  412. package/dist/src/ui/commands/corgiCommand.test.d.ts +0 -6
  413. package/dist/src/ui/commands/corgiCommand.test.js +0 -28
  414. package/dist/src/ui/commands/corgiCommand.test.js.map +0 -1
  415. package/dist/src/ui/commands/directoryCommand.test.d.ts +0 -6
  416. package/dist/src/ui/commands/directoryCommand.test.js +0 -365
  417. package/dist/src/ui/commands/directoryCommand.test.js.map +0 -1
  418. package/dist/src/ui/commands/docsCommand.test.d.ts +0 -6
  419. package/dist/src/ui/commands/docsCommand.test.js +0 -72
  420. package/dist/src/ui/commands/docsCommand.test.js.map +0 -1
  421. package/dist/src/ui/commands/editorCommand.test.d.ts +0 -6
  422. package/dist/src/ui/commands/editorCommand.test.js +0 -27
  423. package/dist/src/ui/commands/editorCommand.test.js.map +0 -1
  424. package/dist/src/ui/commands/exportSessionCommand.test.d.ts +0 -6
  425. package/dist/src/ui/commands/exportSessionCommand.test.js +0 -100
  426. package/dist/src/ui/commands/exportSessionCommand.test.js.map +0 -1
  427. package/dist/src/ui/commands/extensionsCommand.test.d.ts +0 -6
  428. package/dist/src/ui/commands/extensionsCommand.test.js +0 -947
  429. package/dist/src/ui/commands/extensionsCommand.test.js.map +0 -1
  430. package/dist/src/ui/commands/helpCommand.test.d.ts +0 -6
  431. package/dist/src/ui/commands/helpCommand.test.js +0 -94
  432. package/dist/src/ui/commands/helpCommand.test.js.map +0 -1
  433. package/dist/src/ui/commands/hooksCommand.test.d.ts +0 -6
  434. package/dist/src/ui/commands/hooksCommand.test.js +0 -562
  435. package/dist/src/ui/commands/hooksCommand.test.js.map +0 -1
  436. package/dist/src/ui/commands/ideCommand.test.d.ts +0 -6
  437. package/dist/src/ui/commands/ideCommand.test.js +0 -205
  438. package/dist/src/ui/commands/ideCommand.test.js.map +0 -1
  439. package/dist/src/ui/commands/initCommand.test.d.ts +0 -6
  440. package/dist/src/ui/commands/initCommand.test.js +0 -86
  441. package/dist/src/ui/commands/initCommand.test.js.map +0 -1
  442. package/dist/src/ui/commands/mcpCommand.test.d.ts +0 -6
  443. package/dist/src/ui/commands/mcpCommand.test.js +0 -231
  444. package/dist/src/ui/commands/mcpCommand.test.js.map +0 -1
  445. package/dist/src/ui/commands/memoryCommand.test.d.ts +0 -6
  446. package/dist/src/ui/commands/memoryCommand.test.js +0 -361
  447. package/dist/src/ui/commands/memoryCommand.test.js.map +0 -1
  448. package/dist/src/ui/commands/modelCommand.test.d.ts +0 -6
  449. package/dist/src/ui/commands/modelCommand.test.js +0 -135
  450. package/dist/src/ui/commands/modelCommand.test.js.map +0 -1
  451. package/dist/src/ui/commands/permissionsCommand.test.d.ts +0 -6
  452. package/dist/src/ui/commands/permissionsCommand.test.js +0 -86
  453. package/dist/src/ui/commands/permissionsCommand.test.js.map +0 -1
  454. package/dist/src/ui/commands/planCommand.test.d.ts +0 -6
  455. package/dist/src/ui/commands/planCommand.test.js +0 -146
  456. package/dist/src/ui/commands/planCommand.test.js.map +0 -1
  457. package/dist/src/ui/commands/policiesCommand.test.d.ts +0 -6
  458. package/dist/src/ui/commands/policiesCommand.test.js +0 -133
  459. package/dist/src/ui/commands/policiesCommand.test.js.map +0 -1
  460. package/dist/src/ui/commands/privacyCommand.test.d.ts +0 -6
  461. package/dist/src/ui/commands/privacyCommand.test.js +0 -32
  462. package/dist/src/ui/commands/privacyCommand.test.js.map +0 -1
  463. package/dist/src/ui/commands/quitCommand.test.d.ts +0 -6
  464. package/dist/src/ui/commands/quitCommand.test.js +0 -95
  465. package/dist/src/ui/commands/quitCommand.test.js.map +0 -1
  466. package/dist/src/ui/commands/restoreCommand.test.d.ts +0 -6
  467. package/dist/src/ui/commands/restoreCommand.test.js +0 -193
  468. package/dist/src/ui/commands/restoreCommand.test.js.map +0 -1
  469. package/dist/src/ui/commands/resumeCommand.test.d.ts +0 -6
  470. package/dist/src/ui/commands/resumeCommand.test.js +0 -28
  471. package/dist/src/ui/commands/resumeCommand.test.js.map +0 -1
  472. package/dist/src/ui/commands/rewindCommand.test.d.ts +0 -6
  473. package/dist/src/ui/commands/rewindCommand.test.js +0 -256
  474. package/dist/src/ui/commands/rewindCommand.test.js.map +0 -1
  475. package/dist/src/ui/commands/settingsCommand.test.d.ts +0 -6
  476. package/dist/src/ui/commands/settingsCommand.test.js +0 -30
  477. package/dist/src/ui/commands/settingsCommand.test.js.map +0 -1
  478. package/dist/src/ui/commands/setupGithubCommand.test.d.ts +0 -6
  479. package/dist/src/ui/commands/setupGithubCommand.test.js +0 -238
  480. package/dist/src/ui/commands/setupGithubCommand.test.js.map +0 -1
  481. package/dist/src/ui/commands/skillsCommand.test.d.ts +0 -6
  482. package/dist/src/ui/commands/skillsCommand.test.js +0 -500
  483. package/dist/src/ui/commands/skillsCommand.test.js.map +0 -1
  484. package/dist/src/ui/commands/statsCommand.test.d.ts +0 -6
  485. package/dist/src/ui/commands/statsCommand.test.js +0 -122
  486. package/dist/src/ui/commands/statsCommand.test.js.map +0 -1
  487. package/dist/src/ui/commands/tasksCommand.test.d.ts +0 -6
  488. package/dist/src/ui/commands/tasksCommand.test.js +0 -30
  489. package/dist/src/ui/commands/tasksCommand.test.js.map +0 -1
  490. package/dist/src/ui/commands/terminalSetupCommand.test.d.ts +0 -6
  491. package/dist/src/ui/commands/terminalSetupCommand.test.js +0 -66
  492. package/dist/src/ui/commands/terminalSetupCommand.test.js.map +0 -1
  493. package/dist/src/ui/commands/themeCommand.test.d.ts +0 -6
  494. package/dist/src/ui/commands/themeCommand.test.js +0 -32
  495. package/dist/src/ui/commands/themeCommand.test.js.map +0 -1
  496. package/dist/src/ui/commands/toolsCommand.test.d.ts +0 -6
  497. package/dist/src/ui/commands/toolsCommand.test.js +0 -187
  498. package/dist/src/ui/commands/toolsCommand.test.js.map +0 -1
  499. package/dist/src/ui/commands/upgradeCommand.test.d.ts +0 -6
  500. package/dist/src/ui/commands/upgradeCommand.test.js +0 -102
  501. package/dist/src/ui/commands/upgradeCommand.test.js.map +0 -1
  502. package/dist/src/ui/components/AboutBox.test.d.ts +0 -6
  503. package/dist/src/ui/components/AboutBox.test.js +0 -63
  504. package/dist/src/ui/components/AboutBox.test.js.map +0 -1
  505. package/dist/src/ui/components/AdminSettingsChangedDialog.test.d.ts +0 -6
  506. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js +0 -43
  507. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js.map +0 -1
  508. package/dist/src/ui/components/AgentConfigDialog.test.d.ts +0 -6
  509. package/dist/src/ui/components/AgentConfigDialog.test.js +0 -267
  510. package/dist/src/ui/components/AgentConfigDialog.test.js.map +0 -1
  511. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.d.ts +0 -6
  512. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js +0 -196
  513. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js.map +0 -1
  514. package/dist/src/ui/components/AnsiOutput.test.d.ts +0 -6
  515. package/dist/src/ui/components/AnsiOutput.test.js +0 -142
  516. package/dist/src/ui/components/AnsiOutput.test.js.map +0 -1
  517. package/dist/src/ui/components/AppHeader.test.d.ts +0 -6
  518. package/dist/src/ui/components/AppHeader.test.js +0 -212
  519. package/dist/src/ui/components/AppHeader.test.js.map +0 -1
  520. package/dist/src/ui/components/AppHeaderIcon.test.d.ts +0 -6
  521. package/dist/src/ui/components/AppHeaderIcon.test.js +0 -39
  522. package/dist/src/ui/components/AppHeaderIcon.test.js.map +0 -1
  523. package/dist/src/ui/components/ApprovalModeIndicator.test.d.ts +0 -6
  524. package/dist/src/ui/components/ApprovalModeIndicator.test.js +0 -37
  525. package/dist/src/ui/components/ApprovalModeIndicator.test.js.map +0 -1
  526. package/dist/src/ui/components/AskUserDialog.test.d.ts +0 -6
  527. package/dist/src/ui/components/AskUserDialog.test.js +0 -1121
  528. package/dist/src/ui/components/AskUserDialog.test.js.map +0 -1
  529. package/dist/src/ui/components/BackgroundTaskDisplay.test.d.ts +0 -6
  530. package/dist/src/ui/components/BackgroundTaskDisplay.test.js +0 -209
  531. package/dist/src/ui/components/BackgroundTaskDisplay.test.js.map +0 -1
  532. package/dist/src/ui/components/Banner.test.d.ts +0 -6
  533. package/dist/src/ui/components/Banner.test.js +0 -29
  534. package/dist/src/ui/components/Banner.test.js.map +0 -1
  535. package/dist/src/ui/components/BubblingRegression.test.d.ts +0 -6
  536. package/dist/src/ui/components/BubblingRegression.test.js +0 -60
  537. package/dist/src/ui/components/BubblingRegression.test.js.map +0 -1
  538. package/dist/src/ui/components/Checklist.test.d.ts +0 -6
  539. package/dist/src/ui/components/Checklist.test.js +0 -46
  540. package/dist/src/ui/components/Checklist.test.js.map +0 -1
  541. package/dist/src/ui/components/ChecklistItem.test.d.ts +0 -6
  542. package/dist/src/ui/components/ChecklistItem.test.js +0 -40
  543. package/dist/src/ui/components/ChecklistItem.test.js.map +0 -1
  544. package/dist/src/ui/components/CliSpinner.test.d.ts +0 -6
  545. package/dist/src/ui/components/CliSpinner.test.js +0 -32
  546. package/dist/src/ui/components/CliSpinner.test.js.map +0 -1
  547. package/dist/src/ui/components/ColorsDisplay.test.d.ts +0 -6
  548. package/dist/src/ui/components/ColorsDisplay.test.js +0 -107
  549. package/dist/src/ui/components/ColorsDisplay.test.js.map +0 -1
  550. package/dist/src/ui/components/Composer.test.d.ts +0 -6
  551. package/dist/src/ui/components/Composer.test.js +0 -853
  552. package/dist/src/ui/components/Composer.test.js.map +0 -1
  553. package/dist/src/ui/components/ConfigInitDisplay.test.d.ts +0 -6
  554. package/dist/src/ui/components/ConfigInitDisplay.test.js +0 -118
  555. package/dist/src/ui/components/ConfigInitDisplay.test.js.map +0 -1
  556. package/dist/src/ui/components/ConsentPrompt.test.d.ts +0 -6
  557. package/dist/src/ui/components/ConsentPrompt.test.js +0 -80
  558. package/dist/src/ui/components/ConsentPrompt.test.js.map +0 -1
  559. package/dist/src/ui/components/ConsoleSummaryDisplay.test.d.ts +0 -6
  560. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js +0 -28
  561. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js.map +0 -1
  562. package/dist/src/ui/components/ContextSummaryDisplay.test.d.ts +0 -6
  563. package/dist/src/ui/components/ContextSummaryDisplay.test.js +0 -81
  564. package/dist/src/ui/components/ContextSummaryDisplay.test.js.map +0 -1
  565. package/dist/src/ui/components/ContextUsageDisplay.test.d.ts +0 -6
  566. package/dist/src/ui/components/ContextUsageDisplay.test.js +0 -50
  567. package/dist/src/ui/components/ContextUsageDisplay.test.js.map +0 -1
  568. package/dist/src/ui/components/CopyModeWarning.test.d.ts +0 -6
  569. package/dist/src/ui/components/CopyModeWarning.test.js +0 -35
  570. package/dist/src/ui/components/CopyModeWarning.test.js.map +0 -1
  571. package/dist/src/ui/components/DebugProfiler.test.d.ts +0 -6
  572. package/dist/src/ui/components/DebugProfiler.test.js +0 -228
  573. package/dist/src/ui/components/DebugProfiler.test.js.map +0 -1
  574. package/dist/src/ui/components/DetailedMessagesDisplay.test.d.ts +0 -6
  575. package/dist/src/ui/components/DetailedMessagesDisplay.test.js +0 -81
  576. package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +0 -1
  577. package/dist/src/ui/components/DialogManager.test.d.ts +0 -6
  578. package/dist/src/ui/components/DialogManager.test.js +0 -187
  579. package/dist/src/ui/components/DialogManager.test.js.map +0 -1
  580. package/dist/src/ui/components/EditorSettingsDialog.test.d.ts +0 -6
  581. package/dist/src/ui/components/EditorSettingsDialog.test.js +0 -145
  582. package/dist/src/ui/components/EditorSettingsDialog.test.js.map +0 -1
  583. package/dist/src/ui/components/EmptyWalletDialog.test.d.ts +0 -6
  584. package/dist/src/ui/components/EmptyWalletDialog.test.js +0 -116
  585. package/dist/src/ui/components/EmptyWalletDialog.test.js.map +0 -1
  586. package/dist/src/ui/components/ExitPlanModeDialog.test.d.ts +0 -6
  587. package/dist/src/ui/components/ExitPlanModeDialog.test.js +0 -443
  588. package/dist/src/ui/components/ExitPlanModeDialog.test.js.map +0 -1
  589. package/dist/src/ui/components/ExitWarning.test.d.ts +0 -6
  590. package/dist/src/ui/components/ExitWarning.test.js +0 -58
  591. package/dist/src/ui/components/ExitWarning.test.js.map +0 -1
  592. package/dist/src/ui/components/FolderTrustDialog.test.d.ts +0 -6
  593. package/dist/src/ui/components/FolderTrustDialog.test.js +0 -342
  594. package/dist/src/ui/components/FolderTrustDialog.test.js.map +0 -1
  595. package/dist/src/ui/components/Footer.test.d.ts +0 -6
  596. package/dist/src/ui/components/Footer.test.js +0 -806
  597. package/dist/src/ui/components/Footer.test.js.map +0 -1
  598. package/dist/src/ui/components/FooterConfigDialog.test.d.ts +0 -6
  599. package/dist/src/ui/components/FooterConfigDialog.test.js +0 -191
  600. package/dist/src/ui/components/FooterConfigDialog.test.js.map +0 -1
  601. package/dist/src/ui/components/GeminiRespondingSpinner.test.d.ts +0 -6
  602. package/dist/src/ui/components/GeminiRespondingSpinner.test.js +0 -63
  603. package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +0 -1
  604. package/dist/src/ui/components/GradientRegression.test.d.ts +0 -6
  605. package/dist/src/ui/components/GradientRegression.test.js +0 -116
  606. package/dist/src/ui/components/GradientRegression.test.js.map +0 -1
  607. package/dist/src/ui/components/Header.test.d.ts +0 -6
  608. package/dist/src/ui/components/Header.test.js +0 -131
  609. package/dist/src/ui/components/Header.test.js.map +0 -1
  610. package/dist/src/ui/components/Help.test.d.ts +0 -6
  611. package/dist/src/ui/components/Help.test.js +0 -67
  612. package/dist/src/ui/components/Help.test.js.map +0 -1
  613. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +0 -6
  614. package/dist/src/ui/components/HistoryItemDisplay.test.js +0 -302
  615. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +0 -1
  616. package/dist/src/ui/components/HookStatusDisplay.test.d.ts +0 -6
  617. package/dist/src/ui/components/HookStatusDisplay.test.js +0 -77
  618. package/dist/src/ui/components/HookStatusDisplay.test.js.map +0 -1
  619. package/dist/src/ui/components/HooksDialog.test.d.ts +0 -6
  620. package/dist/src/ui/components/HooksDialog.test.js +0 -175
  621. package/dist/src/ui/components/HooksDialog.test.js.map +0 -1
  622. package/dist/src/ui/components/IdeTrustChangeDialog.test.d.ts +0 -6
  623. package/dist/src/ui/components/IdeTrustChangeDialog.test.js +0 -78
  624. package/dist/src/ui/components/IdeTrustChangeDialog.test.js.map +0 -1
  625. package/dist/src/ui/components/InboxDialog.test.d.ts +0 -6
  626. package/dist/src/ui/components/InboxDialog.test.js +0 -804
  627. package/dist/src/ui/components/InboxDialog.test.js.map +0 -1
  628. package/dist/src/ui/components/InputPrompt.test.d.ts +0 -17
  629. package/dist/src/ui/components/InputPrompt.test.js +0 -4078
  630. package/dist/src/ui/components/InputPrompt.test.js.map +0 -1
  631. package/dist/src/ui/components/LoadingIndicator.test.d.ts +0 -6
  632. package/dist/src/ui/components/LoadingIndicator.test.js +0 -325
  633. package/dist/src/ui/components/LoadingIndicator.test.js.map +0 -1
  634. package/dist/src/ui/components/LogoutConfirmationDialog.test.d.ts +0 -6
  635. package/dist/src/ui/components/LogoutConfirmationDialog.test.js +0 -74
  636. package/dist/src/ui/components/LogoutConfirmationDialog.test.js.map +0 -1
  637. package/dist/src/ui/components/LoopDetectionConfirmation.test.d.ts +0 -6
  638. package/dist/src/ui/components/LoopDetectionConfirmation.test.js +0 -27
  639. package/dist/src/ui/components/LoopDetectionConfirmation.test.js.map +0 -1
  640. package/dist/src/ui/components/MainContent.test.d.ts +0 -6
  641. package/dist/src/ui/components/MainContent.test.js +0 -750
  642. package/dist/src/ui/components/MainContent.test.js.map +0 -1
  643. package/dist/src/ui/components/MemoryUsageDisplay.test.d.ts +0 -6
  644. package/dist/src/ui/components/MemoryUsageDisplay.test.js +0 -52
  645. package/dist/src/ui/components/MemoryUsageDisplay.test.js.map +0 -1
  646. package/dist/src/ui/components/ModelDialog.test.d.ts +0 -6
  647. package/dist/src/ui/components/ModelDialog.test.js +0 -356
  648. package/dist/src/ui/components/ModelDialog.test.js.map +0 -1
  649. package/dist/src/ui/components/ModelQuotaDisplay.test.d.ts +0 -6
  650. package/dist/src/ui/components/ModelQuotaDisplay.test.js +0 -62
  651. package/dist/src/ui/components/ModelQuotaDisplay.test.js.map +0 -1
  652. package/dist/src/ui/components/ModelStatsDisplay.test.d.ts +0 -6
  653. package/dist/src/ui/components/ModelStatsDisplay.test.js +0 -651
  654. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +0 -1
  655. package/dist/src/ui/components/MultiFolderTrustDialog.test.d.ts +0 -6
  656. package/dist/src/ui/components/MultiFolderTrustDialog.test.js +0 -177
  657. package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +0 -1
  658. package/dist/src/ui/components/NewAgentsNotification.test.d.ts +0 -6
  659. package/dist/src/ui/components/NewAgentsNotification.test.js +0 -83
  660. package/dist/src/ui/components/NewAgentsNotification.test.js.map +0 -1
  661. package/dist/src/ui/components/Notifications.test.d.ts +0 -6
  662. package/dist/src/ui/components/Notifications.test.js +0 -285
  663. package/dist/src/ui/components/Notifications.test.js.map +0 -1
  664. package/dist/src/ui/components/OverageMenuDialog.test.d.ts +0 -6
  665. package/dist/src/ui/components/OverageMenuDialog.test.js +0 -118
  666. package/dist/src/ui/components/OverageMenuDialog.test.js.map +0 -1
  667. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +0 -6
  668. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +0 -181
  669. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +0 -1
  670. package/dist/src/ui/components/PolicyUpdateDialog.test.d.ts +0 -6
  671. package/dist/src/ui/components/PolicyUpdateDialog.test.js +0 -92
  672. package/dist/src/ui/components/PolicyUpdateDialog.test.js.map +0 -1
  673. package/dist/src/ui/components/ProQuotaDialog.test.d.ts +0 -6
  674. package/dist/src/ui/components/ProQuotaDialog.test.js +0 -222
  675. package/dist/src/ui/components/ProQuotaDialog.test.js.map +0 -1
  676. package/dist/src/ui/components/ProgressBar.test.d.ts +0 -6
  677. package/dist/src/ui/components/ProgressBar.test.js +0 -28
  678. package/dist/src/ui/components/ProgressBar.test.js.map +0 -1
  679. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +0 -6
  680. package/dist/src/ui/components/QueuedMessageDisplay.test.js +0 -65
  681. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +0 -1
  682. package/dist/src/ui/components/QuittingDisplay.test.d.ts +0 -6
  683. package/dist/src/ui/components/QuittingDisplay.test.js +0 -60
  684. package/dist/src/ui/components/QuittingDisplay.test.js.map +0 -1
  685. package/dist/src/ui/components/QuotaDisplay.test.d.ts +0 -6
  686. package/dist/src/ui/components/QuotaDisplay.test.js +0 -68
  687. package/dist/src/ui/components/QuotaDisplay.test.js.map +0 -1
  688. package/dist/src/ui/components/RawMarkdownIndicator.test.d.ts +0 -6
  689. package/dist/src/ui/components/RawMarkdownIndicator.test.js +0 -38
  690. package/dist/src/ui/components/RawMarkdownIndicator.test.js.map +0 -1
  691. package/dist/src/ui/components/RewindConfirmation.test.d.ts +0 -6
  692. package/dist/src/ui/components/RewindConfirmation.test.js +0 -57
  693. package/dist/src/ui/components/RewindConfirmation.test.js.map +0 -1
  694. package/dist/src/ui/components/RewindViewer.test.d.ts +0 -6
  695. package/dist/src/ui/components/RewindViewer.test.js +0 -334
  696. package/dist/src/ui/components/RewindViewer.test.js.map +0 -1
  697. package/dist/src/ui/components/SessionBrowser/SessionBrowserSearchNav.test.d.ts +0 -6
  698. package/dist/src/ui/components/SessionBrowser/SessionBrowserSearchNav.test.js +0 -47
  699. package/dist/src/ui/components/SessionBrowser/SessionBrowserSearchNav.test.js.map +0 -1
  700. package/dist/src/ui/components/SessionBrowser/SessionBrowserStates.test.d.ts +0 -6
  701. package/dist/src/ui/components/SessionBrowser/SessionBrowserStates.test.js +0 -27
  702. package/dist/src/ui/components/SessionBrowser/SessionBrowserStates.test.js.map +0 -1
  703. package/dist/src/ui/components/SessionBrowser/utils.test.d.ts +0 -6
  704. package/dist/src/ui/components/SessionBrowser/utils.test.js +0 -108
  705. package/dist/src/ui/components/SessionBrowser/utils.test.js.map +0 -1
  706. package/dist/src/ui/components/SessionBrowser.test.d.ts +0 -6
  707. package/dist/src/ui/components/SessionBrowser.test.js +0 -266
  708. package/dist/src/ui/components/SessionBrowser.test.js.map +0 -1
  709. package/dist/src/ui/components/SessionSummaryDisplay.test.d.ts +0 -6
  710. package/dist/src/ui/components/SessionSummaryDisplay.test.js +0 -164
  711. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +0 -1
  712. package/dist/src/ui/components/SettingsDialog.test.d.ts +0 -6
  713. package/dist/src/ui/components/SettingsDialog.test.js +0 -1499
  714. package/dist/src/ui/components/SettingsDialog.test.js.map +0 -1
  715. package/dist/src/ui/components/ShellInputPrompt.test.d.ts +0 -6
  716. package/dist/src/ui/components/ShellInputPrompt.test.js +0 -201
  717. package/dist/src/ui/components/ShellInputPrompt.test.js.map +0 -1
  718. package/dist/src/ui/components/ShellModeIndicator.test.d.ts +0 -6
  719. package/dist/src/ui/components/ShellModeIndicator.test.js +0 -18
  720. package/dist/src/ui/components/ShellModeIndicator.test.js.map +0 -1
  721. package/dist/src/ui/components/ShortcutsHelp.test.d.ts +0 -6
  722. package/dist/src/ui/components/ShortcutsHelp.test.js +0 -45
  723. package/dist/src/ui/components/ShortcutsHelp.test.js.map +0 -1
  724. package/dist/src/ui/components/ShowMoreLines.test.d.ts +0 -6
  725. package/dist/src/ui/components/ShowMoreLines.test.js +0 -79
  726. package/dist/src/ui/components/ShowMoreLines.test.js.map +0 -1
  727. package/dist/src/ui/components/ShowMoreLinesLayout.test.d.ts +0 -1
  728. package/dist/src/ui/components/ShowMoreLinesLayout.test.js +0 -68
  729. package/dist/src/ui/components/ShowMoreLinesLayout.test.js.map +0 -1
  730. package/dist/src/ui/components/StatsDisplay.test.d.ts +0 -6
  731. package/dist/src/ui/components/StatsDisplay.test.js +0 -489
  732. package/dist/src/ui/components/StatsDisplay.test.js.map +0 -1
  733. package/dist/src/ui/components/StatusDisplay.test.d.ts +0 -6
  734. package/dist/src/ui/components/StatusDisplay.test.js +0 -117
  735. package/dist/src/ui/components/StatusDisplay.test.js.map +0 -1
  736. package/dist/src/ui/components/StatusRow.test.d.ts +0 -6
  737. package/dist/src/ui/components/StatusRow.test.js +0 -99
  738. package/dist/src/ui/components/StatusRow.test.js.map +0 -1
  739. package/dist/src/ui/components/StickyHeader.test.d.ts +0 -6
  740. package/dist/src/ui/components/StickyHeader.test.js +0 -19
  741. package/dist/src/ui/components/StickyHeader.test.js.map +0 -1
  742. package/dist/src/ui/components/SuggestionsDisplay.test.d.ts +0 -6
  743. package/dist/src/ui/components/SuggestionsDisplay.test.js +0 -82
  744. package/dist/src/ui/components/SuggestionsDisplay.test.js.map +0 -1
  745. package/dist/src/ui/components/Table.test.d.ts +0 -6
  746. package/dist/src/ui/components/Table.test.js +0 -72
  747. package/dist/src/ui/components/Table.test.js.map +0 -1
  748. package/dist/src/ui/components/ThemeDialog.test.d.ts +0 -6
  749. package/dist/src/ui/components/ThemeDialog.test.js +0 -162
  750. package/dist/src/ui/components/ThemeDialog.test.js.map +0 -1
  751. package/dist/src/ui/components/ThemedGradient.test.d.ts +0 -6
  752. package/dist/src/ui/components/ThemedGradient.test.js +0 -35
  753. package/dist/src/ui/components/ThemedGradient.test.js.map +0 -1
  754. package/dist/src/ui/components/Tips.test.d.ts +0 -6
  755. package/dist/src/ui/components/Tips.test.js +0 -23
  756. package/dist/src/ui/components/Tips.test.js.map +0 -1
  757. package/dist/src/ui/components/ToastDisplay.test.d.ts +0 -6
  758. package/dist/src/ui/components/ToastDisplay.test.js +0 -167
  759. package/dist/src/ui/components/ToastDisplay.test.js.map +0 -1
  760. package/dist/src/ui/components/ToolConfirmationQueue.test.d.ts +0 -6
  761. package/dist/src/ui/components/ToolConfirmationQueue.test.js +0 -444
  762. package/dist/src/ui/components/ToolConfirmationQueue.test.js.map +0 -1
  763. package/dist/src/ui/components/ToolStatsDisplay.test.d.ts +0 -6
  764. package/dist/src/ui/components/ToolStatsDisplay.test.js +0 -234
  765. package/dist/src/ui/components/ToolStatsDisplay.test.js.map +0 -1
  766. package/dist/src/ui/components/UpdateNotification.test.d.ts +0 -6
  767. package/dist/src/ui/components/UpdateNotification.test.js +0 -17
  768. package/dist/src/ui/components/UpdateNotification.test.js.map +0 -1
  769. package/dist/src/ui/components/UserIdentity.test.d.ts +0 -6
  770. package/dist/src/ui/components/UserIdentity.test.js +0 -138
  771. package/dist/src/ui/components/UserIdentity.test.js.map +0 -1
  772. package/dist/src/ui/components/ValidationDialog.test.d.ts +0 -6
  773. package/dist/src/ui/components/ValidationDialog.test.js +0 -162
  774. package/dist/src/ui/components/ValidationDialog.test.js.map +0 -1
  775. package/dist/src/ui/components/VoiceModelDialog.test.d.ts +0 -6
  776. package/dist/src/ui/components/VoiceModelDialog.test.js +0 -68
  777. package/dist/src/ui/components/VoiceModelDialog.test.js.map +0 -1
  778. package/dist/src/ui/components/messages/CompressionMessage.test.d.ts +0 -6
  779. package/dist/src/ui/components/messages/CompressionMessage.test.js +0 -180
  780. package/dist/src/ui/components/messages/CompressionMessage.test.js.map +0 -1
  781. package/dist/src/ui/components/messages/DenseToolMessage.test.d.ts +0 -6
  782. package/dist/src/ui/components/messages/DenseToolMessage.test.js +0 -406
  783. package/dist/src/ui/components/messages/DenseToolMessage.test.js.map +0 -1
  784. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +0 -6
  785. package/dist/src/ui/components/messages/DiffRenderer.test.js +0 -269
  786. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +0 -1
  787. package/dist/src/ui/components/messages/ErrorMessage.test.d.ts +0 -6
  788. package/dist/src/ui/components/messages/ErrorMessage.test.js +0 -25
  789. package/dist/src/ui/components/messages/ErrorMessage.test.js.map +0 -1
  790. package/dist/src/ui/components/messages/ExportSessionMessage.test.d.ts +0 -6
  791. package/dist/src/ui/components/messages/ExportSessionMessage.test.js +0 -32
  792. package/dist/src/ui/components/messages/ExportSessionMessage.test.js.map +0 -1
  793. package/dist/src/ui/components/messages/GeminiMessage.test.d.ts +0 -6
  794. package/dist/src/ui/components/messages/GeminiMessage.test.js +0 -46
  795. package/dist/src/ui/components/messages/GeminiMessage.test.js.map +0 -1
  796. package/dist/src/ui/components/messages/HintMessage.test.d.ts +0 -6
  797. package/dist/src/ui/components/messages/HintMessage.test.js +0 -42
  798. package/dist/src/ui/components/messages/HintMessage.test.js.map +0 -1
  799. package/dist/src/ui/components/messages/InfoMessage.test.d.ts +0 -6
  800. package/dist/src/ui/components/messages/InfoMessage.test.js +0 -31
  801. package/dist/src/ui/components/messages/InfoMessage.test.js.map +0 -1
  802. package/dist/src/ui/components/messages/RedirectionConfirmation.test.d.ts +0 -6
  803. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js +0 -35
  804. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js.map +0 -1
  805. package/dist/src/ui/components/messages/ShellToolMessage.test.d.ts +0 -6
  806. package/dist/src/ui/components/messages/ShellToolMessage.test.js +0 -290
  807. package/dist/src/ui/components/messages/ShellToolMessage.test.js.map +0 -1
  808. package/dist/src/ui/components/messages/SubagentGroupDisplay.test.d.ts +0 -1
  809. package/dist/src/ui/components/messages/SubagentGroupDisplay.test.js +0 -92
  810. package/dist/src/ui/components/messages/SubagentGroupDisplay.test.js.map +0 -1
  811. package/dist/src/ui/components/messages/SubagentHistoryMessage.test.d.ts +0 -6
  812. package/dist/src/ui/components/messages/SubagentHistoryMessage.test.js +0 -69
  813. package/dist/src/ui/components/messages/SubagentHistoryMessage.test.js.map +0 -1
  814. package/dist/src/ui/components/messages/SubagentProgressDisplay.test.d.ts +0 -6
  815. package/dist/src/ui/components/messages/SubagentProgressDisplay.test.js +0 -164
  816. package/dist/src/ui/components/messages/SubagentProgressDisplay.test.js.map +0 -1
  817. package/dist/src/ui/components/messages/ThinkingMessage.test.d.ts +0 -6
  818. package/dist/src/ui/components/messages/ThinkingMessage.test.js +0 -104
  819. package/dist/src/ui/components/messages/ThinkingMessage.test.js.map +0 -1
  820. package/dist/src/ui/components/messages/Todo.test.d.ts +0 -6
  821. package/dist/src/ui/components/messages/Todo.test.js +0 -129
  822. package/dist/src/ui/components/messages/Todo.test.js.map +0 -1
  823. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +0 -6
  824. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +0 -558
  825. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +0 -1
  826. package/dist/src/ui/components/messages/ToolGroupDisplay.test.d.ts +0 -6
  827. package/dist/src/ui/components/messages/ToolGroupDisplay.test.js +0 -210
  828. package/dist/src/ui/components/messages/ToolGroupDisplay.test.js.map +0 -1
  829. package/dist/src/ui/components/messages/ToolGroupMessage.compact.test.d.ts +0 -6
  830. package/dist/src/ui/components/messages/ToolGroupMessage.compact.test.js +0 -147
  831. package/dist/src/ui/components/messages/ToolGroupMessage.compact.test.js.map +0 -1
  832. package/dist/src/ui/components/messages/ToolGroupMessage.test.d.ts +0 -6
  833. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +0 -828
  834. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +0 -1
  835. package/dist/src/ui/components/messages/ToolGroupMessageRegression.test.d.ts +0 -6
  836. package/dist/src/ui/components/messages/ToolGroupMessageRegression.test.js +0 -101
  837. package/dist/src/ui/components/messages/ToolGroupMessageRegression.test.js.map +0 -1
  838. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +0 -6
  839. package/dist/src/ui/components/messages/ToolMessage.test.js +0 -292
  840. package/dist/src/ui/components/messages/ToolMessage.test.js.map +0 -1
  841. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.d.ts +0 -6
  842. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js +0 -96
  843. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js.map +0 -1
  844. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.d.ts +0 -6
  845. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js +0 -72
  846. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js.map +0 -1
  847. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.d.ts +0 -6
  848. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js +0 -88
  849. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js.map +0 -1
  850. package/dist/src/ui/components/messages/ToolResultDisplay.test.d.ts +0 -6
  851. package/dist/src/ui/components/messages/ToolResultDisplay.test.js +0 -333
  852. package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +0 -1
  853. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.d.ts +0 -6
  854. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js +0 -77
  855. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js.map +0 -1
  856. package/dist/src/ui/components/messages/ToolShared.test.d.ts +0 -6
  857. package/dist/src/ui/components/messages/ToolShared.test.js +0 -65
  858. package/dist/src/ui/components/messages/ToolShared.test.js.map +0 -1
  859. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.d.ts +0 -6
  860. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js +0 -142
  861. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js.map +0 -1
  862. package/dist/src/ui/components/messages/TopicMessage.test.d.ts +0 -6
  863. package/dist/src/ui/components/messages/TopicMessage.test.js +0 -77
  864. package/dist/src/ui/components/messages/TopicMessage.test.js.map +0 -1
  865. package/dist/src/ui/components/messages/UserMessage.test.d.ts +0 -6
  866. package/dist/src/ui/components/messages/UserMessage.test.js +0 -67
  867. package/dist/src/ui/components/messages/UserMessage.test.js.map +0 -1
  868. package/dist/src/ui/components/messages/UserShellMessage.test.d.ts +0 -6
  869. package/dist/src/ui/components/messages/UserShellMessage.test.js +0 -40
  870. package/dist/src/ui/components/messages/UserShellMessage.test.js.map +0 -1
  871. package/dist/src/ui/components/messages/WarningMessage.test.d.ts +0 -6
  872. package/dist/src/ui/components/messages/WarningMessage.test.js +0 -25
  873. package/dist/src/ui/components/messages/WarningMessage.test.js.map +0 -1
  874. package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +0 -6
  875. package/dist/src/ui/components/shared/BaseSelectionList.test.js +0 -441
  876. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +0 -1
  877. package/dist/src/ui/components/shared/BaseSettingsDialog.test.d.ts +0 -6
  878. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js +0 -710
  879. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js.map +0 -1
  880. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.d.ts +0 -6
  881. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +0 -89
  882. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +0 -1
  883. package/dist/src/ui/components/shared/EnumSelector.test.d.ts +0 -6
  884. package/dist/src/ui/components/shared/EnumSelector.test.js +0 -83
  885. package/dist/src/ui/components/shared/EnumSelector.test.js.map +0 -1
  886. package/dist/src/ui/components/shared/ExpandableText.test.d.ts +0 -6
  887. package/dist/src/ui/components/shared/ExpandableText.test.js +0 -95
  888. package/dist/src/ui/components/shared/ExpandableText.test.js.map +0 -1
  889. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.d.ts +0 -1
  890. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js +0 -47
  891. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js.map +0 -1
  892. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +0 -6
  893. package/dist/src/ui/components/shared/MaxSizedBox.test.js +0 -161
  894. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +0 -1
  895. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +0 -6
  896. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +0 -146
  897. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +0 -1
  898. package/dist/src/ui/components/shared/Scrollable.test.d.ts +0 -6
  899. package/dist/src/ui/components/shared/Scrollable.test.js +0 -143
  900. package/dist/src/ui/components/shared/Scrollable.test.js.map +0 -1
  901. package/dist/src/ui/components/shared/ScrollableList.test.d.ts +0 -6
  902. package/dist/src/ui/components/shared/ScrollableList.test.js +0 -438
  903. package/dist/src/ui/components/shared/ScrollableList.test.js.map +0 -1
  904. package/dist/src/ui/components/shared/SearchableList.test.d.ts +0 -6
  905. package/dist/src/ui/components/shared/SearchableList.test.js +0 -169
  906. package/dist/src/ui/components/shared/SearchableList.test.js.map +0 -1
  907. package/dist/src/ui/components/shared/SectionHeader.test.d.ts +0 -6
  908. package/dist/src/ui/components/shared/SectionHeader.test.js +0 -42
  909. package/dist/src/ui/components/shared/SectionHeader.test.js.map +0 -1
  910. package/dist/src/ui/components/shared/SlicingMaxSizedBox.test.d.ts +0 -6
  911. package/dist/src/ui/components/shared/SlicingMaxSizedBox.test.js +0 -54
  912. package/dist/src/ui/components/shared/SlicingMaxSizedBox.test.js.map +0 -1
  913. package/dist/src/ui/components/shared/TabHeader.test.d.ts +0 -6
  914. package/dist/src/ui/components/shared/TabHeader.test.js +0 -144
  915. package/dist/src/ui/components/shared/TabHeader.test.js.map +0 -1
  916. package/dist/src/ui/components/shared/TextInput.test.d.ts +0 -6
  917. package/dist/src/ui/components/shared/TextInput.test.js +0 -353
  918. package/dist/src/ui/components/shared/TextInput.test.js.map +0 -1
  919. package/dist/src/ui/components/shared/VirtualizedList.test.d.ts +0 -6
  920. package/dist/src/ui/components/shared/VirtualizedList.test.js +0 -174
  921. package/dist/src/ui/components/shared/VirtualizedList.test.js.map +0 -1
  922. package/dist/src/ui/components/shared/performance.test.d.ts +0 -1
  923. package/dist/src/ui/components/shared/performance.test.js +0 -74
  924. package/dist/src/ui/components/shared/performance.test.js.map +0 -1
  925. package/dist/src/ui/components/shared/text-buffer.test.d.ts +0 -6
  926. package/dist/src/ui/components/shared/text-buffer.test.js +0 -2965
  927. package/dist/src/ui/components/shared/text-buffer.test.js.map +0 -1
  928. package/dist/src/ui/components/shared/vim-buffer-actions.test.d.ts +0 -6
  929. package/dist/src/ui/components/shared/vim-buffer-actions.test.js +0 -2272
  930. package/dist/src/ui/components/shared/vim-buffer-actions.test.js.map +0 -1
  931. package/dist/src/ui/components/views/ChatList.test.d.ts +0 -6
  932. package/dist/src/ui/components/views/ChatList.test.js +0 -45
  933. package/dist/src/ui/components/views/ChatList.test.js.map +0 -1
  934. package/dist/src/ui/components/views/ExtensionDetails.test.d.ts +0 -6
  935. package/dist/src/ui/components/views/ExtensionDetails.test.js +0 -154
  936. package/dist/src/ui/components/views/ExtensionDetails.test.js.map +0 -1
  937. package/dist/src/ui/components/views/ExtensionRegistryView.test.d.ts +0 -6
  938. package/dist/src/ui/components/views/ExtensionRegistryView.test.js +0 -222
  939. package/dist/src/ui/components/views/ExtensionRegistryView.test.js.map +0 -1
  940. package/dist/src/ui/components/views/ExtensionsList.test.d.ts +0 -6
  941. package/dist/src/ui/components/views/ExtensionsList.test.js +0 -145
  942. package/dist/src/ui/components/views/ExtensionsList.test.js.map +0 -1
  943. package/dist/src/ui/components/views/McpStatus.test.d.ts +0 -6
  944. package/dist/src/ui/components/views/McpStatus.test.js +0 -174
  945. package/dist/src/ui/components/views/McpStatus.test.js.map +0 -1
  946. package/dist/src/ui/components/views/SkillsList.test.d.ts +0 -6
  947. package/dist/src/ui/components/views/SkillsList.test.js +0 -99
  948. package/dist/src/ui/components/views/SkillsList.test.js.map +0 -1
  949. package/dist/src/ui/components/views/ToolsList.test.d.ts +0 -6
  950. package/dist/src/ui/components/views/ToolsList.test.js +0 -45
  951. package/dist/src/ui/components/views/ToolsList.test.js.map +0 -1
  952. package/dist/src/ui/contexts/KeypressContext.test.d.ts +0 -6
  953. package/dist/src/ui/contexts/KeypressContext.test.js +0 -1133
  954. package/dist/src/ui/contexts/KeypressContext.test.js.map +0 -1
  955. package/dist/src/ui/contexts/MouseContext.test.d.ts +0 -6
  956. package/dist/src/ui/contexts/MouseContext.test.js +0 -269
  957. package/dist/src/ui/contexts/MouseContext.test.js.map +0 -1
  958. package/dist/src/ui/contexts/ScrollProvider.drag.test.d.ts +0 -6
  959. package/dist/src/ui/contexts/ScrollProvider.drag.test.js +0 -320
  960. package/dist/src/ui/contexts/ScrollProvider.drag.test.js.map +0 -1
  961. package/dist/src/ui/contexts/ScrollProvider.test.d.ts +0 -6
  962. package/dist/src/ui/contexts/ScrollProvider.test.js +0 -478
  963. package/dist/src/ui/contexts/ScrollProvider.test.js.map +0 -1
  964. package/dist/src/ui/contexts/SessionContext.test.d.ts +0 -6
  965. package/dist/src/ui/contexts/SessionContext.test.js +0 -213
  966. package/dist/src/ui/contexts/SessionContext.test.js.map +0 -1
  967. package/dist/src/ui/contexts/SettingsContext.test.d.ts +0 -6
  968. package/dist/src/ui/contexts/SettingsContext.test.js +0 -106
  969. package/dist/src/ui/contexts/SettingsContext.test.js.map +0 -1
  970. package/dist/src/ui/contexts/TerminalContext.test.d.ts +0 -6
  971. package/dist/src/ui/contexts/TerminalContext.test.js +0 -75
  972. package/dist/src/ui/contexts/TerminalContext.test.js.map +0 -1
  973. package/dist/src/ui/contexts/ToolActionsContext.test.d.ts +0 -6
  974. package/dist/src/ui/contexts/ToolActionsContext.test.js +0 -247
  975. package/dist/src/ui/contexts/ToolActionsContext.test.js.map +0 -1
  976. package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +0 -6
  977. package/dist/src/ui/hooks/atCommandProcessor.test.js +0 -1265
  978. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +0 -1
  979. package/dist/src/ui/hooks/atCommandProcessor_agents.test.d.ts +0 -6
  980. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js +0 -210
  981. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js.map +0 -1
  982. package/dist/src/ui/hooks/creditsFlowHandler.test.d.ts +0 -6
  983. package/dist/src/ui/hooks/creditsFlowHandler.test.js +0 -211
  984. package/dist/src/ui/hooks/creditsFlowHandler.test.js.map +0 -1
  985. package/dist/src/ui/hooks/shell-completions/gitProvider.test.d.ts +0 -6
  986. package/dist/src/ui/hooks/shell-completions/gitProvider.test.js +0 -73
  987. package/dist/src/ui/hooks/shell-completions/gitProvider.test.js.map +0 -1
  988. package/dist/src/ui/hooks/shell-completions/npmProvider.test.d.ts +0 -6
  989. package/dist/src/ui/hooks/shell-completions/npmProvider.test.js +0 -69
  990. package/dist/src/ui/hooks/shell-completions/npmProvider.test.js.map +0 -1
  991. package/dist/src/ui/hooks/shellReducer.test.d.ts +0 -6
  992. package/dist/src/ui/hooks/shellReducer.test.js +0 -341
  993. package/dist/src/ui/hooks/shellReducer.test.js.map +0 -1
  994. package/dist/src/ui/hooks/slashCommandProcessor.test.d.ts +0 -6
  995. package/dist/src/ui/hooks/slashCommandProcessor.test.js +0 -881
  996. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +0 -1
  997. package/dist/src/ui/hooks/toolMapping.test.d.ts +0 -6
  998. package/dist/src/ui/hooks/toolMapping.test.js +0 -292
  999. package/dist/src/ui/hooks/toolMapping.test.js.map +0 -1
  1000. package/dist/src/ui/hooks/useAgentStream.test.d.ts +0 -6
  1001. package/dist/src/ui/hooks/useAgentStream.test.js +0 -161
  1002. package/dist/src/ui/hooks/useAgentStream.test.js.map +0 -1
  1003. package/dist/src/ui/hooks/useAlternateBuffer.test.d.ts +0 -6
  1004. package/dist/src/ui/hooks/useAlternateBuffer.test.js +0 -62
  1005. package/dist/src/ui/hooks/useAlternateBuffer.test.js.map +0 -1
  1006. package/dist/src/ui/hooks/useAnimatedScrollbar.test.d.ts +0 -6
  1007. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js +0 -85
  1008. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js.map +0 -1
  1009. package/dist/src/ui/hooks/useApprovalModeIndicator.test.d.ts +0 -6
  1010. package/dist/src/ui/hooks/useApprovalModeIndicator.test.js +0 -477
  1011. package/dist/src/ui/hooks/useApprovalModeIndicator.test.js.map +0 -1
  1012. package/dist/src/ui/hooks/useAtCompletion.test.d.ts +0 -6
  1013. package/dist/src/ui/hooks/useAtCompletion.test.js +0 -567
  1014. package/dist/src/ui/hooks/useAtCompletion.test.js.map +0 -1
  1015. package/dist/src/ui/hooks/useAtCompletion_agents.test.d.ts +0 -6
  1016. package/dist/src/ui/hooks/useAtCompletion_agents.test.js +0 -87
  1017. package/dist/src/ui/hooks/useAtCompletion_agents.test.js.map +0 -1
  1018. package/dist/src/ui/hooks/useBackgroundTaskManager.test.d.ts +0 -6
  1019. package/dist/src/ui/hooks/useBackgroundTaskManager.test.js +0 -168
  1020. package/dist/src/ui/hooks/useBackgroundTaskManager.test.js.map +0 -1
  1021. package/dist/src/ui/hooks/useBanner.test.d.ts +0 -6
  1022. package/dist/src/ui/hooks/useBanner.test.js +0 -144
  1023. package/dist/src/ui/hooks/useBanner.test.js.map +0 -1
  1024. package/dist/src/ui/hooks/useBatchedScroll.test.d.ts +0 -6
  1025. package/dist/src/ui/hooks/useBatchedScroll.test.js +0 -62
  1026. package/dist/src/ui/hooks/useBatchedScroll.test.js.map +0 -1
  1027. package/dist/src/ui/hooks/useCommandCompletion.test.d.ts +0 -6
  1028. package/dist/src/ui/hooks/useCommandCompletion.test.js +0 -722
  1029. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +0 -1
  1030. package/dist/src/ui/hooks/useConsoleMessages.test.d.ts +0 -6
  1031. package/dist/src/ui/hooks/useConsoleMessages.test.js +0 -201
  1032. package/dist/src/ui/hooks/useConsoleMessages.test.js.map +0 -1
  1033. package/dist/src/ui/hooks/useEditorSettings.test.d.ts +0 -6
  1034. package/dist/src/ui/hooks/useEditorSettings.test.js +0 -179
  1035. package/dist/src/ui/hooks/useEditorSettings.test.js.map +0 -1
  1036. package/dist/src/ui/hooks/useExecutionLifecycle.test.d.ts +0 -6
  1037. package/dist/src/ui/hooks/useExecutionLifecycle.test.js +0 -903
  1038. package/dist/src/ui/hooks/useExecutionLifecycle.test.js.map +0 -1
  1039. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +0 -6
  1040. package/dist/src/ui/hooks/useExtensionUpdates.test.js +0 -280
  1041. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +0 -1
  1042. package/dist/src/ui/hooks/useFlickerDetector.test.d.ts +0 -6
  1043. package/dist/src/ui/hooks/useFlickerDetector.test.js +0 -106
  1044. package/dist/src/ui/hooks/useFlickerDetector.test.js.map +0 -1
  1045. package/dist/src/ui/hooks/useFocus.test.d.ts +0 -6
  1046. package/dist/src/ui/hooks/useFocus.test.js +0 -140
  1047. package/dist/src/ui/hooks/useFocus.test.js.map +0 -1
  1048. package/dist/src/ui/hooks/useFolderTrust.test.d.ts +0 -6
  1049. package/dist/src/ui/hooks/useFolderTrust.test.js +0 -268
  1050. package/dist/src/ui/hooks/useFolderTrust.test.js.map +0 -1
  1051. package/dist/src/ui/hooks/useGeminiStream.test.d.ts +0 -6
  1052. package/dist/src/ui/hooks/useGeminiStream.test.js +0 -2855
  1053. package/dist/src/ui/hooks/useGeminiStream.test.js.map +0 -1
  1054. package/dist/src/ui/hooks/useGitBranchName.test.d.ts +0 -6
  1055. package/dist/src/ui/hooks/useGitBranchName.test.js +0 -237
  1056. package/dist/src/ui/hooks/useGitBranchName.test.js.map +0 -1
  1057. package/dist/src/ui/hooks/useHistoryManager.test.d.ts +0 -6
  1058. package/dist/src/ui/hooks/useHistoryManager.test.js +0 -259
  1059. package/dist/src/ui/hooks/useHistoryManager.test.js.map +0 -1
  1060. package/dist/src/ui/hooks/useHookDisplayState.test.d.ts +0 -6
  1061. package/dist/src/ui/hooks/useHookDisplayState.test.js +0 -200
  1062. package/dist/src/ui/hooks/useHookDisplayState.test.js.map +0 -1
  1063. package/dist/src/ui/hooks/useIdeTrustListener.test.d.ts +0 -6
  1064. package/dist/src/ui/hooks/useIdeTrustListener.test.js +0 -225
  1065. package/dist/src/ui/hooks/useIdeTrustListener.test.js.map +0 -1
  1066. package/dist/src/ui/hooks/useIncludeDirsTrust.test.d.ts +0 -6
  1067. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js +0 -174
  1068. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js.map +0 -1
  1069. package/dist/src/ui/hooks/useInlineEditBuffer.test.d.ts +0 -6
  1070. package/dist/src/ui/hooks/useInlineEditBuffer.test.js +0 -112
  1071. package/dist/src/ui/hooks/useInlineEditBuffer.test.js.map +0 -1
  1072. package/dist/src/ui/hooks/useInputHistory.test.d.ts +0 -6
  1073. package/dist/src/ui/hooks/useInputHistory.test.js +0 -389
  1074. package/dist/src/ui/hooks/useInputHistory.test.js.map +0 -1
  1075. package/dist/src/ui/hooks/useInputHistoryStore.test.d.ts +0 -6
  1076. package/dist/src/ui/hooks/useInputHistoryStore.test.js +0 -238
  1077. package/dist/src/ui/hooks/useInputHistoryStore.test.js.map +0 -1
  1078. package/dist/src/ui/hooks/useKeypress.test.d.ts +0 -6
  1079. package/dist/src/ui/hooks/useKeypress.test.js +0 -198
  1080. package/dist/src/ui/hooks/useKeypress.test.js.map +0 -1
  1081. package/dist/src/ui/hooks/useLoadingIndicator.test.d.ts +0 -6
  1082. package/dist/src/ui/hooks/useLoadingIndicator.test.js +0 -177
  1083. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +0 -1
  1084. package/dist/src/ui/hooks/useLogger.test.d.ts +0 -6
  1085. package/dist/src/ui/hooks/useLogger.test.js +0 -44
  1086. package/dist/src/ui/hooks/useLogger.test.js.map +0 -1
  1087. package/dist/src/ui/hooks/useMcpStatus.test.d.ts +0 -6
  1088. package/dist/src/ui/hooks/useMcpStatus.test.js +0 -69
  1089. package/dist/src/ui/hooks/useMcpStatus.test.js.map +0 -1
  1090. package/dist/src/ui/hooks/useMemoryMonitor.test.d.ts +0 -6
  1091. package/dist/src/ui/hooks/useMemoryMonitor.test.js +0 -62
  1092. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +0 -1
  1093. package/dist/src/ui/hooks/useMessageQueue.test.d.ts +0 -6
  1094. package/dist/src/ui/hooks/useMessageQueue.test.js +0 -365
  1095. package/dist/src/ui/hooks/useMessageQueue.test.js.map +0 -1
  1096. package/dist/src/ui/hooks/useModelCommand.test.d.ts +0 -6
  1097. package/dist/src/ui/hooks/useModelCommand.test.js +0 -45
  1098. package/dist/src/ui/hooks/useModelCommand.test.js.map +0 -1
  1099. package/dist/src/ui/hooks/useMouse.test.d.ts +0 -6
  1100. package/dist/src/ui/hooks/useMouse.test.js +0 -52
  1101. package/dist/src/ui/hooks/useMouse.test.js.map +0 -1
  1102. package/dist/src/ui/hooks/useMouseClick.test.d.ts +0 -6
  1103. package/dist/src/ui/hooks/useMouseClick.test.js +0 -68
  1104. package/dist/src/ui/hooks/useMouseClick.test.js.map +0 -1
  1105. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +0 -6
  1106. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +0 -291
  1107. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +0 -1
  1108. package/dist/src/ui/hooks/usePhraseCycler.test.d.ts +0 -6
  1109. package/dist/src/ui/hooks/usePhraseCycler.test.js +0 -187
  1110. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +0 -1
  1111. package/dist/src/ui/hooks/usePrivacySettings.test.d.ts +0 -6
  1112. package/dist/src/ui/hooks/usePrivacySettings.test.js +0 -113
  1113. package/dist/src/ui/hooks/usePrivacySettings.test.js.map +0 -1
  1114. package/dist/src/ui/hooks/useQuotaAndFallback.test.d.ts +0 -6
  1115. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +0 -817
  1116. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +0 -1
  1117. package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +0 -6
  1118. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +0 -168
  1119. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +0 -1
  1120. package/dist/src/ui/hooks/useRewind.test.d.ts +0 -6
  1121. package/dist/src/ui/hooks/useRewind.test.js +0 -100
  1122. package/dist/src/ui/hooks/useRewind.test.js.map +0 -1
  1123. package/dist/src/ui/hooks/useSelectionList.test.d.ts +0 -6
  1124. package/dist/src/ui/hooks/useSelectionList.test.js +0 -960
  1125. package/dist/src/ui/hooks/useSelectionList.test.js.map +0 -1
  1126. package/dist/src/ui/hooks/useSessionBrowser.test.d.ts +0 -6
  1127. package/dist/src/ui/hooks/useSessionBrowser.test.js +0 -277
  1128. package/dist/src/ui/hooks/useSessionBrowser.test.js.map +0 -1
  1129. package/dist/src/ui/hooks/useSessionResume.test.d.ts +0 -6
  1130. package/dist/src/ui/hooks/useSessionResume.test.js +0 -402
  1131. package/dist/src/ui/hooks/useSessionResume.test.js.map +0 -1
  1132. package/dist/src/ui/hooks/useSettingsNavigation.test.d.ts +0 -6
  1133. package/dist/src/ui/hooks/useSettingsNavigation.test.js +0 -87
  1134. package/dist/src/ui/hooks/useSettingsNavigation.test.js.map +0 -1
  1135. package/dist/src/ui/hooks/useShellCompletion.test.d.ts +0 -6
  1136. package/dist/src/ui/hooks/useShellCompletion.test.js +0 -354
  1137. package/dist/src/ui/hooks/useShellCompletion.test.js.map +0 -1
  1138. package/dist/src/ui/hooks/useShellHistory.test.d.ts +0 -6
  1139. package/dist/src/ui/hooks/useShellHistory.test.js +0 -226
  1140. package/dist/src/ui/hooks/useShellHistory.test.js.map +0 -1
  1141. package/dist/src/ui/hooks/useShellInactivityStatus.test.d.ts +0 -6
  1142. package/dist/src/ui/hooks/useShellInactivityStatus.test.js +0 -84
  1143. package/dist/src/ui/hooks/useShellInactivityStatus.test.js.map +0 -1
  1144. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +0 -10
  1145. package/dist/src/ui/hooks/useSlashCompletion.test.js +0 -977
  1146. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +0 -1
  1147. package/dist/src/ui/hooks/useSnowfall.test.d.ts +0 -6
  1148. package/dist/src/ui/hooks/useSnowfall.test.js +0 -92
  1149. package/dist/src/ui/hooks/useSnowfall.test.js.map +0 -1
  1150. package/dist/src/ui/hooks/useSuspend.test.d.ts +0 -6
  1151. package/dist/src/ui/hooks/useSuspend.test.js +0 -136
  1152. package/dist/src/ui/hooks/useSuspend.test.js.map +0 -1
  1153. package/dist/src/ui/hooks/useTabbedNavigation.test.d.ts +0 -6
  1154. package/dist/src/ui/hooks/useTabbedNavigation.test.js +0 -243
  1155. package/dist/src/ui/hooks/useTabbedNavigation.test.js.map +0 -1
  1156. package/dist/src/ui/hooks/useTerminalTheme.test.d.ts +0 -6
  1157. package/dist/src/ui/hooks/useTerminalTheme.test.js +0 -169
  1158. package/dist/src/ui/hooks/useTerminalTheme.test.js.map +0 -1
  1159. package/dist/src/ui/hooks/useTimer.test.d.ts +0 -6
  1160. package/dist/src/ui/hooks/useTimer.test.js +0 -119
  1161. package/dist/src/ui/hooks/useTimer.test.js.map +0 -1
  1162. package/dist/src/ui/hooks/useTips.test.d.ts +0 -6
  1163. package/dist/src/ui/hooks/useTips.test.js +0 -33
  1164. package/dist/src/ui/hooks/useTips.test.js.map +0 -1
  1165. package/dist/src/ui/hooks/useToolScheduler.test.d.ts +0 -6
  1166. package/dist/src/ui/hooks/useToolScheduler.test.js +0 -534
  1167. package/dist/src/ui/hooks/useToolScheduler.test.js.map +0 -1
  1168. package/dist/src/ui/hooks/useTurnActivityMonitor.test.d.ts +0 -6
  1169. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js +0 -99
  1170. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js.map +0 -1
  1171. package/dist/src/ui/hooks/vim-passthrough.test.d.ts +0 -6
  1172. package/dist/src/ui/hooks/vim-passthrough.test.js +0 -84
  1173. package/dist/src/ui/hooks/vim-passthrough.test.js.map +0 -1
  1174. package/dist/src/ui/hooks/vim.test.d.ts +0 -6
  1175. package/dist/src/ui/hooks/vim.test.js +0 -2156
  1176. package/dist/src/ui/hooks/vim.test.js.map +0 -1
  1177. package/dist/src/ui/key/keyBindings.test.d.ts +0 -6
  1178. package/dist/src/ui/key/keyBindings.test.js +0 -225
  1179. package/dist/src/ui/key/keyBindings.test.js.map +0 -1
  1180. package/dist/src/ui/key/keyMatchers.test.d.ts +0 -6
  1181. package/dist/src/ui/key/keyMatchers.test.js +0 -524
  1182. package/dist/src/ui/key/keyMatchers.test.js.map +0 -1
  1183. package/dist/src/ui/key/keybindingUtils.test.d.ts +0 -6
  1184. package/dist/src/ui/key/keybindingUtils.test.js +0 -121
  1185. package/dist/src/ui/key/keybindingUtils.test.js.map +0 -1
  1186. package/dist/src/ui/layouts/DefaultAppLayout.test.d.ts +0 -6
  1187. package/dist/src/ui/layouts/DefaultAppLayout.test.js +0 -126
  1188. package/dist/src/ui/layouts/DefaultAppLayout.test.js.map +0 -1
  1189. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.d.ts +0 -6
  1190. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js +0 -134
  1191. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js.map +0 -1
  1192. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.d.ts +0 -6
  1193. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js +0 -43
  1194. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js.map +0 -1
  1195. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.d.ts +0 -6
  1196. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js +0 -43
  1197. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js.map +0 -1
  1198. package/dist/src/ui/privacy/PrivacyNotice.test.d.ts +0 -6
  1199. package/dist/src/ui/privacy/PrivacyNotice.test.js +0 -63
  1200. package/dist/src/ui/privacy/PrivacyNotice.test.js.map +0 -1
  1201. package/dist/src/ui/state/extensions.test.d.ts +0 -6
  1202. package/dist/src/ui/state/extensions.test.js +0 -219
  1203. package/dist/src/ui/state/extensions.test.js.map +0 -1
  1204. package/dist/src/ui/themes/color-utils.test.d.ts +0 -6
  1205. package/dist/src/ui/themes/color-utils.test.js +0 -326
  1206. package/dist/src/ui/themes/color-utils.test.js.map +0 -1
  1207. package/dist/src/ui/themes/theme-manager.test.d.ts +0 -6
  1208. package/dist/src/ui/themes/theme-manager.test.js +0 -274
  1209. package/dist/src/ui/themes/theme-manager.test.js.map +0 -1
  1210. package/dist/src/ui/themes/theme.test.d.ts +0 -6
  1211. package/dist/src/ui/themes/theme.test.js +0 -171
  1212. package/dist/src/ui/themes/theme.test.js.map +0 -1
  1213. package/dist/src/ui/utils/CodeColorizer.test.d.ts +0 -6
  1214. package/dist/src/ui/utils/CodeColorizer.test.js +0 -74
  1215. package/dist/src/ui/utils/CodeColorizer.test.js.map +0 -1
  1216. package/dist/src/ui/utils/ConsolePatcher.test.d.ts +0 -6
  1217. package/dist/src/ui/utils/ConsolePatcher.test.js +0 -199
  1218. package/dist/src/ui/utils/ConsolePatcher.test.js.map +0 -1
  1219. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +0 -6
  1220. package/dist/src/ui/utils/MarkdownDisplay.test.js +0 -175
  1221. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +0 -1
  1222. package/dist/src/ui/utils/TableRenderer.test.d.ts +0 -1
  1223. package/dist/src/ui/utils/TableRenderer.test.js +0 -396
  1224. package/dist/src/ui/utils/TableRenderer.test.js.map +0 -1
  1225. package/dist/src/ui/utils/antigravityUtils.test.d.ts +0 -6
  1226. package/dist/src/ui/utils/antigravityUtils.test.js +0 -54
  1227. package/dist/src/ui/utils/antigravityUtils.test.js.map +0 -1
  1228. package/dist/src/ui/utils/borderStyles.test.d.ts +0 -6
  1229. package/dist/src/ui/utils/borderStyles.test.js +0 -172
  1230. package/dist/src/ui/utils/borderStyles.test.js.map +0 -1
  1231. package/dist/src/ui/utils/clipboardUtils.test.d.ts +0 -6
  1232. package/dist/src/ui/utils/clipboardUtils.test.js +0 -442
  1233. package/dist/src/ui/utils/clipboardUtils.test.js.map +0 -1
  1234. package/dist/src/ui/utils/clipboardUtils.windows.test.d.ts +0 -6
  1235. package/dist/src/ui/utils/clipboardUtils.windows.test.js +0 -56
  1236. package/dist/src/ui/utils/clipboardUtils.windows.test.js.map +0 -1
  1237. package/dist/src/ui/utils/commandUtils.test.d.ts +0 -6
  1238. package/dist/src/ui/utils/commandUtils.test.js +0 -511
  1239. package/dist/src/ui/utils/commandUtils.test.js.map +0 -1
  1240. package/dist/src/ui/utils/computeStats.test.d.ts +0 -6
  1241. package/dist/src/ui/utils/computeStats.test.js +0 -279
  1242. package/dist/src/ui/utils/computeStats.test.js.map +0 -1
  1243. package/dist/src/ui/utils/directoryUtils.test.d.ts +0 -6
  1244. package/dist/src/ui/utils/directoryUtils.test.js +0 -239
  1245. package/dist/src/ui/utils/directoryUtils.test.js.map +0 -1
  1246. package/dist/src/ui/utils/displayUtils.test.d.ts +0 -6
  1247. package/dist/src/ui/utils/displayUtils.test.js +0 -61
  1248. package/dist/src/ui/utils/displayUtils.test.js.map +0 -1
  1249. package/dist/src/ui/utils/formatters.test.d.ts +0 -6
  1250. package/dist/src/ui/utils/formatters.test.js +0 -152
  1251. package/dist/src/ui/utils/formatters.test.js.map +0 -1
  1252. package/dist/src/ui/utils/highlight.test.d.ts +0 -6
  1253. package/dist/src/ui/utils/highlight.test.js +0 -205
  1254. package/dist/src/ui/utils/highlight.test.js.map +0 -1
  1255. package/dist/src/ui/utils/input.test.d.ts +0 -6
  1256. package/dist/src/ui/utils/input.test.js +0 -44
  1257. package/dist/src/ui/utils/input.test.js.map +0 -1
  1258. package/dist/src/ui/utils/latexToUnicode.test.d.ts +0 -6
  1259. package/dist/src/ui/utils/latexToUnicode.test.js +0 -222
  1260. package/dist/src/ui/utils/latexToUnicode.test.js.map +0 -1
  1261. package/dist/src/ui/utils/markdownParsingUtils.test.d.ts +0 -6
  1262. package/dist/src/ui/utils/markdownParsingUtils.test.js +0 -201
  1263. package/dist/src/ui/utils/markdownParsingUtils.test.js.map +0 -1
  1264. package/dist/src/ui/utils/markdownUtilities.test.d.ts +0 -6
  1265. package/dist/src/ui/utils/markdownUtilities.test.js +0 -42
  1266. package/dist/src/ui/utils/markdownUtilities.test.js.map +0 -1
  1267. package/dist/src/ui/utils/memorySnapshot.test.d.ts +0 -6
  1268. package/dist/src/ui/utils/memorySnapshot.test.js +0 -62
  1269. package/dist/src/ui/utils/memorySnapshot.test.js.map +0 -1
  1270. package/dist/src/ui/utils/mouse.test.d.ts +0 -6
  1271. package/dist/src/ui/utils/mouse.test.js +0 -136
  1272. package/dist/src/ui/utils/mouse.test.js.map +0 -1
  1273. package/dist/src/ui/utils/pendingAttentionNotification.test.d.ts +0 -6
  1274. package/dist/src/ui/utils/pendingAttentionNotification.test.js +0 -79
  1275. package/dist/src/ui/utils/pendingAttentionNotification.test.js.map +0 -1
  1276. package/dist/src/ui/utils/rewindFileOps.test.d.ts +0 -6
  1277. package/dist/src/ui/utils/rewindFileOps.test.js +0 -375
  1278. package/dist/src/ui/utils/rewindFileOps.test.js.map +0 -1
  1279. package/dist/src/ui/utils/terminalCapabilityManager.test.d.ts +0 -6
  1280. package/dist/src/ui/utils/terminalCapabilityManager.test.js +0 -400
  1281. package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +0 -1
  1282. package/dist/src/ui/utils/terminalSetup.test.d.ts +0 -6
  1283. package/dist/src/ui/utils/terminalSetup.test.js +0 -201
  1284. package/dist/src/ui/utils/terminalSetup.test.js.map +0 -1
  1285. package/dist/src/ui/utils/textOutput.test.d.ts +0 -6
  1286. package/dist/src/ui/utils/textOutput.test.js +0 -80
  1287. package/dist/src/ui/utils/textOutput.test.js.map +0 -1
  1288. package/dist/src/ui/utils/textUtils.test.d.ts +0 -6
  1289. package/dist/src/ui/utils/textUtils.test.js +0 -430
  1290. package/dist/src/ui/utils/textUtils.test.js.map +0 -1
  1291. package/dist/src/ui/utils/toolLayoutUtils.test.d.ts +0 -6
  1292. package/dist/src/ui/utils/toolLayoutUtils.test.js +0 -187
  1293. package/dist/src/ui/utils/toolLayoutUtils.test.js.map +0 -1
  1294. package/dist/src/ui/utils/ui-sizing.test.d.ts +0 -6
  1295. package/dist/src/ui/utils/ui-sizing.test.js +0 -25
  1296. package/dist/src/ui/utils/ui-sizing.test.js.map +0 -1
  1297. package/dist/src/ui/utils/updateCheck.test.d.ts +0 -6
  1298. package/dist/src/ui/utils/updateCheck.test.js +0 -207
  1299. package/dist/src/ui/utils/updateCheck.test.js.map +0 -1
  1300. package/dist/src/ui/utils/urlSecurityUtils.test.d.ts +0 -6
  1301. package/dist/src/ui/utils/urlSecurityUtils.test.js +0 -49
  1302. package/dist/src/ui/utils/urlSecurityUtils.test.js.map +0 -1
  1303. package/dist/src/utils/activityLogger.test.d.ts +0 -6
  1304. package/dist/src/utils/activityLogger.test.js +0 -196
  1305. package/dist/src/utils/activityLogger.test.js.map +0 -1
  1306. package/dist/src/utils/agentSettings.test.d.ts +0 -6
  1307. package/dist/src/utils/agentSettings.test.js +0 -111
  1308. package/dist/src/utils/agentSettings.test.js.map +0 -1
  1309. package/dist/src/utils/agentUtils.test.d.ts +0 -6
  1310. package/dist/src/utils/agentUtils.test.js +0 -121
  1311. package/dist/src/utils/agentUtils.test.js.map +0 -1
  1312. package/dist/src/utils/cleanup.test.d.ts +0 -6
  1313. package/dist/src/utils/cleanup.test.js +0 -256
  1314. package/dist/src/utils/cleanup.test.js.map +0 -1
  1315. package/dist/src/utils/commands.test.d.ts +0 -6
  1316. package/dist/src/utils/commands.test.js +0 -194
  1317. package/dist/src/utils/commands.test.js.map +0 -1
  1318. package/dist/src/utils/commentJson.test.d.ts +0 -6
  1319. package/dist/src/utils/commentJson.test.js +0 -308
  1320. package/dist/src/utils/commentJson.test.js.map +0 -1
  1321. package/dist/src/utils/deepMerge.test.d.ts +0 -6
  1322. package/dist/src/utils/deepMerge.test.js +0 -211
  1323. package/dist/src/utils/deepMerge.test.js.map +0 -1
  1324. package/dist/src/utils/devtoolsService.test.d.ts +0 -6
  1325. package/dist/src/utils/devtoolsService.test.js +0 -346
  1326. package/dist/src/utils/devtoolsService.test.js.map +0 -1
  1327. package/dist/src/utils/dialogScopeUtils.test.d.ts +0 -6
  1328. package/dist/src/utils/dialogScopeUtils.test.js +0 -81
  1329. package/dist/src/utils/dialogScopeUtils.test.js.map +0 -1
  1330. package/dist/src/utils/envVarResolver.test.d.ts +0 -6
  1331. package/dist/src/utils/envVarResolver.test.js +0 -238
  1332. package/dist/src/utils/envVarResolver.test.js.map +0 -1
  1333. package/dist/src/utils/errors.test.d.ts +0 -6
  1334. package/dist/src/utils/errors.test.js +0 -420
  1335. package/dist/src/utils/errors.test.js.map +0 -1
  1336. package/dist/src/utils/events.test.d.ts +0 -6
  1337. package/dist/src/utils/events.test.js +0 -24
  1338. package/dist/src/utils/events.test.js.map +0 -1
  1339. package/dist/src/utils/featureToggleUtils.test.d.ts +0 -6
  1340. package/dist/src/utils/featureToggleUtils.test.js +0 -126
  1341. package/dist/src/utils/featureToggleUtils.test.js.map +0 -1
  1342. package/dist/src/utils/gitUtils.test.d.ts +0 -6
  1343. package/dist/src/utils/gitUtils.test.js +0 -172
  1344. package/dist/src/utils/gitUtils.test.js.map +0 -1
  1345. package/dist/src/utils/handleAutoUpdate.test.d.ts +0 -6
  1346. package/dist/src/utils/handleAutoUpdate.test.js +0 -399
  1347. package/dist/src/utils/handleAutoUpdate.test.js.map +0 -1
  1348. package/dist/src/utils/hookSettings.test.d.ts +0 -6
  1349. package/dist/src/utils/hookSettings.test.js +0 -117
  1350. package/dist/src/utils/hookSettings.test.js.map +0 -1
  1351. package/dist/src/utils/hookUtils.test.d.ts +0 -6
  1352. package/dist/src/utils/hookUtils.test.js +0 -113
  1353. package/dist/src/utils/hookUtils.test.js.map +0 -1
  1354. package/dist/src/utils/installationInfo.test.d.ts +0 -6
  1355. package/dist/src/utils/installationInfo.test.js +0 -322
  1356. package/dist/src/utils/installationInfo.test.js.map +0 -1
  1357. package/dist/src/utils/jsonoutput.test.d.ts +0 -6
  1358. package/dist/src/utils/jsonoutput.test.js +0 -74
  1359. package/dist/src/utils/jsonoutput.test.js.map +0 -1
  1360. package/dist/src/utils/logCleanup.test.d.ts +0 -6
  1361. package/dist/src/utils/logCleanup.test.js +0 -87
  1362. package/dist/src/utils/logCleanup.test.js.map +0 -1
  1363. package/dist/src/utils/math.test.d.ts +0 -6
  1364. package/dist/src/utils/math.test.js +0 -23
  1365. package/dist/src/utils/math.test.js.map +0 -1
  1366. package/dist/src/utils/persistentState.test.d.ts +0 -6
  1367. package/dist/src/utils/persistentState.test.js +0 -68
  1368. package/dist/src/utils/persistentState.test.js.map +0 -1
  1369. package/dist/src/utils/processUtils.test.d.ts +0 -6
  1370. package/dist/src/utils/processUtils.test.js +0 -150
  1371. package/dist/src/utils/processUtils.test.js.map +0 -1
  1372. package/dist/src/utils/readStdin.test.d.ts +0 -6
  1373. package/dist/src/utils/readStdin.test.js +0 -149
  1374. package/dist/src/utils/readStdin.test.js.map +0 -1
  1375. package/dist/src/utils/readStdin_safety.test.d.ts +0 -6
  1376. package/dist/src/utils/readStdin_safety.test.js +0 -68
  1377. package/dist/src/utils/readStdin_safety.test.js.map +0 -1
  1378. package/dist/src/utils/relaunch.test.d.ts +0 -6
  1379. package/dist/src/utils/relaunch.test.js +0 -275
  1380. package/dist/src/utils/relaunch.test.js.map +0 -1
  1381. package/dist/src/utils/resolvePath.test.d.ts +0 -6
  1382. package/dist/src/utils/resolvePath.test.js +0 -34
  1383. package/dist/src/utils/resolvePath.test.js.map +0 -1
  1384. package/dist/src/utils/sandbox.test.d.ts +0 -6
  1385. package/dist/src/utils/sandbox.test.js +0 -725
  1386. package/dist/src/utils/sandbox.test.js.map +0 -1
  1387. package/dist/src/utils/sandboxUtils.test.d.ts +0 -6
  1388. package/dist/src/utils/sandboxUtils.test.js +0 -190
  1389. package/dist/src/utils/sandboxUtils.test.js.map +0 -1
  1390. package/dist/src/utils/sessionCleanup.integration.test.d.ts +0 -6
  1391. package/dist/src/utils/sessionCleanup.integration.test.js +0 -276
  1392. package/dist/src/utils/sessionCleanup.integration.test.js.map +0 -1
  1393. package/dist/src/utils/sessionCleanup.test.d.ts +0 -6
  1394. package/dist/src/utils/sessionCleanup.test.js +0 -829
  1395. package/dist/src/utils/sessionCleanup.test.js.map +0 -1
  1396. package/dist/src/utils/sessionUtils.test.d.ts +0 -6
  1397. package/dist/src/utils/sessionUtils.test.js +0 -815
  1398. package/dist/src/utils/sessionUtils.test.js.map +0 -1
  1399. package/dist/src/utils/sessions.test.d.ts +0 -6
  1400. package/dist/src/utils/sessions.test.js +0 -580
  1401. package/dist/src/utils/sessions.test.js.map +0 -1
  1402. package/dist/src/utils/settingsUtils.test.d.ts +0 -6
  1403. package/dist/src/utils/settingsUtils.test.js +0 -673
  1404. package/dist/src/utils/settingsUtils.test.js.map +0 -1
  1405. package/dist/src/utils/skillSettings.test.d.ts +0 -6
  1406. package/dist/src/utils/skillSettings.test.js +0 -142
  1407. package/dist/src/utils/skillSettings.test.js.map +0 -1
  1408. package/dist/src/utils/skillUtils.test.d.ts +0 -6
  1409. package/dist/src/utils/skillUtils.test.js +0 -248
  1410. package/dist/src/utils/skillUtils.test.js.map +0 -1
  1411. package/dist/src/utils/startupWarnings.test.d.ts +0 -6
  1412. package/dist/src/utils/startupWarnings.test.js +0 -61
  1413. package/dist/src/utils/startupWarnings.test.js.map +0 -1
  1414. package/dist/src/utils/terminalNotifications.test.d.ts +0 -6
  1415. package/dist/src/utils/terminalNotifications.test.js +0 -219
  1416. package/dist/src/utils/terminalNotifications.test.js.map +0 -1
  1417. package/dist/src/utils/terminalTheme.test.d.ts +0 -6
  1418. package/dist/src/utils/terminalTheme.test.js +0 -91
  1419. package/dist/src/utils/terminalTheme.test.js.map +0 -1
  1420. package/dist/src/utils/tierUtils.test.d.ts +0 -6
  1421. package/dist/src/utils/tierUtils.test.js +0 -25
  1422. package/dist/src/utils/tierUtils.test.js.map +0 -1
  1423. package/dist/src/utils/toolOutputCleanup.test.d.ts +0 -6
  1424. package/dist/src/utils/toolOutputCleanup.test.js +0 -280
  1425. package/dist/src/utils/toolOutputCleanup.test.js.map +0 -1
  1426. package/dist/src/utils/updateEventEmitter.test.d.ts +0 -6
  1427. package/dist/src/utils/updateEventEmitter.test.js +0 -18
  1428. package/dist/src/utils/updateEventEmitter.test.js.map +0 -1
  1429. package/dist/src/utils/userStartupWarnings.test.d.ts +0 -6
  1430. package/dist/src/utils/userStartupWarnings.test.js +0 -225
  1431. package/dist/src/utils/userStartupWarnings.test.js.map +0 -1
  1432. package/dist/src/utils/windowTitle.test.d.ts +0 -6
  1433. package/dist/src/utils/windowTitle.test.js +0 -216
  1434. package/dist/src/utils/windowTitle.test.js.map +0 -1
  1435. package/dist/src/utils/worktreeSetup.test.d.ts +0 -6
  1436. package/dist/src/utils/worktreeSetup.test.js +0 -89
  1437. package/dist/src/utils/worktreeSetup.test.js.map +0 -1
  1438. package/dist/src/validateNonInterActiveAuth.test.d.ts +0 -6
  1439. package/dist/src/validateNonInterActiveAuth.test.js +0 -319
  1440. package/dist/src/validateNonInterActiveAuth.test.js.map +0 -1
@@ -1,1800 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { vi, describe, it, expect, beforeEach, afterEach, afterAll, } from 'vitest';
7
- import * as fs from 'node:fs';
8
- import * as os from 'node:os';
9
- import * as path from 'node:path';
10
- import { ExtensionUninstallEvent, ExtensionDisableEvent, ExtensionEnableEvent, KeychainTokenStorage, loadAgentsFromDirectory, loadSkillsFromDir, getRealPath, normalizePath, } from '@google/gemini-cli-core';
11
- import { loadSettings, createTestMergedSettings, SettingScope, resetSettingsCacheForTesting, } from './settings.js';
12
- import { isWorkspaceTrusted, resetTrustedFoldersForTesting, } from './trustedFolders.js';
13
- import { createExtension } from '../test-utils/createExtension.js';
14
- import { ExtensionEnablementManager } from './extensions/extensionEnablement.js';
15
- import { join } from 'node:path';
16
- import { EXTENSIONS_CONFIG_FILENAME, EXTENSIONS_DIRECTORY_NAME, INSTALL_METADATA_FILENAME, } from './extensions/variables.js';
17
- import { hashValue, ExtensionManager } from './extension-manager.js';
18
- import { ExtensionStorage } from './extensions/storage.js';
19
- import { INSTALL_WARNING_MESSAGE } from './extensions/consent.js';
20
- const mockGit = {
21
- clone: vi.fn(),
22
- getRemotes: vi.fn(),
23
- fetch: vi.fn(),
24
- checkout: vi.fn(),
25
- listRemote: vi.fn(),
26
- revparse: vi.fn(),
27
- // Not a part of the actual API, but we need to use this to do the correct
28
- // file system interactions.
29
- path: vi.fn(),
30
- };
31
- const mockDownloadFromGithubRelease = vi.hoisted(() => vi.fn());
32
- vi.mock('./extensions/github.js', async (importOriginal) => {
33
- const original = await importOriginal();
34
- return {
35
- ...original,
36
- downloadFromGitHubRelease: mockDownloadFromGithubRelease,
37
- };
38
- });
39
- vi.mock('simple-git', () => ({
40
- simpleGit: vi.fn((path) => {
41
- mockGit.path.mockReturnValue(path);
42
- return mockGit;
43
- }),
44
- }));
45
- const mockHomedir = vi.hoisted(() => vi.fn(() => '/tmp/mock-home'));
46
- vi.mock('os', async (importOriginal) => {
47
- const mockedOs = await importOriginal();
48
- return {
49
- ...mockedOs,
50
- homedir: mockHomedir,
51
- };
52
- });
53
- vi.mock('./trustedFolders.js', async (importOriginal) => {
54
- const actual = await importOriginal();
55
- return {
56
- ...actual,
57
- isWorkspaceTrusted: vi.fn(),
58
- };
59
- });
60
- const mockLogExtensionEnable = vi.hoisted(() => vi.fn());
61
- const mockLogExtensionInstallEvent = vi.hoisted(() => vi.fn());
62
- const mockLogExtensionUninstall = vi.hoisted(() => vi.fn());
63
- const mockLogExtensionUpdateEvent = vi.hoisted(() => vi.fn());
64
- const mockLogExtensionDisable = vi.hoisted(() => vi.fn());
65
- const mockIntegrityManager = vi.hoisted(() => ({
66
- verify: vi.fn().mockResolvedValue('verified'),
67
- store: vi.fn().mockResolvedValue(undefined),
68
- }));
69
- vi.mock('@google/gemini-cli-core', async (importOriginal) => {
70
- const actual = await importOriginal();
71
- return {
72
- ...actual,
73
- logExtensionEnable: mockLogExtensionEnable,
74
- logExtensionInstallEvent: mockLogExtensionInstallEvent,
75
- logExtensionUninstall: mockLogExtensionUninstall,
76
- logExtensionUpdateEvent: mockLogExtensionUpdateEvent,
77
- logExtensionDisable: mockLogExtensionDisable,
78
- homedir: mockHomedir,
79
- ExtensionEnableEvent: vi.fn(),
80
- ExtensionInstallEvent: vi.fn(),
81
- ExtensionUninstallEvent: vi.fn(),
82
- ExtensionDisableEvent: vi.fn(),
83
- ExtensionIntegrityManager: vi
84
- .fn()
85
- .mockImplementation(() => mockIntegrityManager),
86
- KeychainTokenStorage: vi.fn().mockImplementation(() => ({
87
- getSecret: vi.fn(),
88
- setSecret: vi.fn(),
89
- deleteSecret: vi.fn(),
90
- listSecrets: vi.fn(),
91
- isAvailable: vi.fn().mockResolvedValue(true),
92
- })),
93
- loadAgentsFromDirectory: vi
94
- .fn()
95
- .mockImplementation(async () => ({ agents: [], errors: [] })),
96
- loadSkillsFromDir: vi.fn().mockImplementation(async () => []),
97
- };
98
- });
99
- vi.mock('child_process', async (importOriginal) => {
100
- const actual = await importOriginal();
101
- return {
102
- ...actual,
103
- execSync: vi.fn(),
104
- };
105
- });
106
- describe('extension tests', () => {
107
- let tempHomeDir;
108
- let tempWorkspaceDir;
109
- let userExtensionsDir;
110
- let extensionManager;
111
- let mockRequestConsent;
112
- let mockPromptForSettings;
113
- let mockKeychainStorage;
114
- let keychainData;
115
- beforeEach(() => {
116
- vi.clearAllMocks();
117
- resetSettingsCacheForTesting();
118
- keychainData = {};
119
- mockKeychainStorage = {
120
- getSecret: vi
121
- .fn()
122
- .mockImplementation(async (key) => keychainData[key] || null),
123
- setSecret: vi
124
- .fn()
125
- .mockImplementation(async (key, value) => {
126
- keychainData[key] = value;
127
- }),
128
- deleteSecret: vi.fn().mockImplementation(async (key) => {
129
- delete keychainData[key];
130
- }),
131
- listSecrets: vi
132
- .fn()
133
- .mockImplementation(async () => Object.keys(keychainData)),
134
- isAvailable: vi.fn().mockResolvedValue(true),
135
- };
136
- KeychainTokenStorage.mockImplementation(() => mockKeychainStorage);
137
- vi.mocked(loadAgentsFromDirectory).mockResolvedValue({
138
- agents: [],
139
- errors: [],
140
- });
141
- vi.mocked(loadSkillsFromDir).mockResolvedValue([]);
142
- tempHomeDir = getRealPath(fs.mkdtempSync(path.join(os.tmpdir(), 'gemini-cli-test-home-')));
143
- tempWorkspaceDir = getRealPath(fs.mkdtempSync(path.join(tempHomeDir, 'gemini-cli-test-workspace-')));
144
- userExtensionsDir = path.join(tempHomeDir, EXTENSIONS_DIRECTORY_NAME);
145
- mockRequestConsent = vi.fn();
146
- mockRequestConsent.mockResolvedValue(true);
147
- mockPromptForSettings = vi.fn();
148
- mockPromptForSettings.mockResolvedValue('');
149
- fs.mkdirSync(userExtensionsDir, { recursive: true });
150
- vi.mocked(os.homedir).mockReturnValue(tempHomeDir);
151
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
152
- isTrusted: true,
153
- source: undefined,
154
- });
155
- vi.spyOn(process, 'cwd').mockReturnValue(tempWorkspaceDir);
156
- const settings = loadSettings(tempWorkspaceDir).merged;
157
- settings.experimental.extensionConfig = true;
158
- extensionManager = new ExtensionManager({
159
- workspaceDir: tempWorkspaceDir,
160
- requestConsent: mockRequestConsent,
161
- requestSetting: mockPromptForSettings,
162
- settings,
163
- integrityManager: mockIntegrityManager,
164
- });
165
- resetTrustedFoldersForTesting();
166
- });
167
- afterEach(() => {
168
- fs.rmSync(tempHomeDir, { recursive: true, force: true });
169
- fs.rmSync(tempWorkspaceDir, { recursive: true, force: true });
170
- vi.restoreAllMocks();
171
- });
172
- describe('loadExtensions', () => {
173
- it('should include extension path in loaded extension', async () => {
174
- const extensionDir = path.join(userExtensionsDir, 'test-extension');
175
- fs.mkdirSync(extensionDir, { recursive: true });
176
- createExtension({
177
- extensionsDir: userExtensionsDir,
178
- name: 'test-extension',
179
- version: '1.0.0',
180
- });
181
- const extensions = await extensionManager.loadExtensions();
182
- expect(extensions).toHaveLength(1);
183
- expect(extensions[0].path).toBe(extensionDir);
184
- expect(extensions[0].name).toBe('test-extension');
185
- });
186
- it('should skip the extension if a context file path is outside the extension directory and log an error', async () => {
187
- const consoleSpy = vi
188
- .spyOn(console, 'error')
189
- .mockImplementation(() => { });
190
- createExtension({
191
- extensionsDir: userExtensionsDir,
192
- name: 'traversal-extension',
193
- version: '1.0.0',
194
- contextFileName: '../secret.txt',
195
- });
196
- const extensions = await extensionManager.loadExtensions();
197
- expect(extensions).toHaveLength(0);
198
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('traversal-extension: Invalid context file path: "../secret.txt"'));
199
- consoleSpy.mockRestore();
200
- });
201
- it('should load context file path when GEMINI.md is present', async () => {
202
- createExtension({
203
- extensionsDir: userExtensionsDir,
204
- name: 'ext1',
205
- version: '1.0.0',
206
- addContextFile: true,
207
- });
208
- createExtension({
209
- extensionsDir: userExtensionsDir,
210
- name: 'ext2',
211
- version: '2.0.0',
212
- });
213
- const extensions = await extensionManager.loadExtensions();
214
- expect(extensions).toHaveLength(2);
215
- const ext1 = extensions.find((e) => e.name === 'ext1');
216
- const ext2 = extensions.find((e) => e.name === 'ext2');
217
- expect(ext1?.contextFiles).toEqual([
218
- path.join(userExtensionsDir, 'ext1', 'GEMINI.md'),
219
- ]);
220
- expect(ext2?.contextFiles).toEqual([]);
221
- });
222
- it('should load context file path from the extension config', async () => {
223
- createExtension({
224
- extensionsDir: userExtensionsDir,
225
- name: 'ext1',
226
- version: '1.0.0',
227
- addContextFile: false,
228
- contextFileName: 'my-context-file.md',
229
- });
230
- const extensions = await extensionManager.loadExtensions();
231
- expect(extensions).toHaveLength(1);
232
- const ext1 = extensions.find((e) => e.name === 'ext1');
233
- expect(ext1?.contextFiles).toEqual([
234
- path.join(userExtensionsDir, 'ext1', 'my-context-file.md'),
235
- ]);
236
- });
237
- it('should annotate disabled extensions', async () => {
238
- createExtension({
239
- extensionsDir: userExtensionsDir,
240
- name: 'disabled-extension',
241
- version: '1.0.0',
242
- });
243
- createExtension({
244
- extensionsDir: userExtensionsDir,
245
- name: 'enabled-extension',
246
- version: '2.0.0',
247
- });
248
- await extensionManager.loadExtensions();
249
- await extensionManager.disableExtension('disabled-extension', SettingScope.User);
250
- const extensions = extensionManager.getExtensions();
251
- expect(extensions).toHaveLength(2);
252
- expect(extensions[0].name).toBe('disabled-extension');
253
- expect(extensions[0].isActive).toBe(false);
254
- expect(extensions[1].name).toBe('enabled-extension');
255
- expect(extensions[1].isActive).toBe(true);
256
- });
257
- it('should hydrate variables', async () => {
258
- createExtension({
259
- extensionsDir: userExtensionsDir,
260
- name: 'test-extension',
261
- version: '1.0.0',
262
- addContextFile: false,
263
- contextFileName: undefined,
264
- mcpServers: {
265
- 'test-server': {
266
- cwd: '${extensionPath}${/}server',
267
- },
268
- },
269
- });
270
- const extensions = await extensionManager.loadExtensions();
271
- expect(extensions).toHaveLength(1);
272
- const expectedCwd = path.join(userExtensionsDir, 'test-extension', 'server');
273
- expect(extensions[0].mcpServers?.['test-server'].cwd).toBe(expectedCwd);
274
- });
275
- it('should load a linked extension correctly', async () => {
276
- const sourceExtDir = getRealPath(createExtension({
277
- extensionsDir: tempWorkspaceDir,
278
- name: 'my-linked-extension',
279
- version: '1.0.0',
280
- contextFileName: 'context.md',
281
- }));
282
- fs.writeFileSync(path.join(sourceExtDir, 'context.md'), 'linked context');
283
- await extensionManager.loadExtensions();
284
- const extension = await extensionManager.installOrUpdateExtension({
285
- source: sourceExtDir,
286
- type: 'link',
287
- });
288
- expect(extension.name).toEqual('my-linked-extension');
289
- const extensions = extensionManager.getExtensions();
290
- expect(extensions).toHaveLength(1);
291
- const linkedExt = extensions[0];
292
- expect(linkedExt.name).toBe('my-linked-extension');
293
- expect(linkedExt.path).toBe(sourceExtDir);
294
- expect(linkedExt.installMetadata).toEqual({
295
- source: sourceExtDir,
296
- type: 'link',
297
- });
298
- expect(linkedExt.contextFiles).toEqual([
299
- path.join(sourceExtDir, 'context.md'),
300
- ]);
301
- });
302
- it('should load extension policies from the policies directory', async () => {
303
- const extDir = createExtension({
304
- extensionsDir: userExtensionsDir,
305
- name: 'policy-extension',
306
- version: '1.0.0',
307
- });
308
- const policiesDir = path.join(extDir, 'policies');
309
- fs.mkdirSync(policiesDir);
310
- const policiesContent = `
311
- [[rule]]
312
- toolName = "deny_tool"
313
- decision = "deny"
314
- priority = 500
315
-
316
- [[rule]]
317
- toolName = "ask_tool"
318
- decision = "ask_user"
319
- priority = 100
320
- `;
321
- fs.writeFileSync(path.join(policiesDir, 'policies.toml'), policiesContent);
322
- const extensions = await extensionManager.loadExtensions();
323
- expect(extensions).toHaveLength(1);
324
- const extension = extensions[0];
325
- expect(extension.rules).toBeDefined();
326
- expect(extension.rules).toHaveLength(2);
327
- expect(extension.rules.find((r) => r.toolName === 'deny_tool')?.decision).toBe('deny');
328
- expect(extension.rules.find((r) => r.toolName === 'ask_tool')?.decision).toBe('ask_user');
329
- // Verify source is prefixed
330
- expect(extension.rules[0].source).toContain('Extension (policy-extension):');
331
- });
332
- it('should ignore ALLOW rules and YOLO mode from extension policies for security', async () => {
333
- const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
334
- const extDir = createExtension({
335
- extensionsDir: userExtensionsDir,
336
- name: 'security-test-extension',
337
- version: '1.0.0',
338
- });
339
- const policiesDir = path.join(extDir, 'policies');
340
- fs.mkdirSync(policiesDir);
341
- const policiesContent = `
342
- [[rule]]
343
- toolName = "allow_tool"
344
- decision = "allow"
345
- priority = 100
346
-
347
- [[rule]]
348
- toolName = "yolo_tool"
349
- decision = "ask_user"
350
- priority = 100
351
- modes = ["yolo"]
352
-
353
- [[safety_checker]]
354
- toolName = "yolo_check"
355
- priority = 100
356
- modes = ["yolo"]
357
- [safety_checker.checker]
358
- type = "external"
359
- name = "yolo-checker"
360
- `;
361
- fs.writeFileSync(path.join(policiesDir, 'policies.toml'), policiesContent);
362
- const extensions = await extensionManager.loadExtensions();
363
- expect(extensions).toHaveLength(1);
364
- const extension = extensions[0];
365
- // ALLOW rules and YOLO rules/checkers should be filtered out
366
- expect(extension.rules).toBeDefined();
367
- expect(extension.rules).toHaveLength(0);
368
- expect(extension.checkers).toBeDefined();
369
- expect(extension.checkers).toHaveLength(0);
370
- // Should have logged warnings
371
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('attempted to contribute an ALLOW rule'));
372
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('attempted to contribute a rule for YOLO mode'));
373
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('attempted to contribute a safety checker for YOLO mode'));
374
- consoleSpy.mockRestore();
375
- });
376
- it('should hydrate ${extensionPath} correctly for linked extensions', async () => {
377
- const sourceExtDir = getRealPath(createExtension({
378
- extensionsDir: tempWorkspaceDir,
379
- name: 'my-linked-extension-with-path',
380
- version: '1.0.0',
381
- mcpServers: {
382
- 'test-server': {
383
- command: 'node',
384
- args: ['${extensionPath}${/}server${/}index.js'],
385
- cwd: '${extensionPath}${/}server',
386
- },
387
- },
388
- }));
389
- await extensionManager.loadExtensions();
390
- await extensionManager.installOrUpdateExtension({
391
- source: sourceExtDir,
392
- type: 'link',
393
- });
394
- const extensions = extensionManager.getExtensions();
395
- expect(extensions).toHaveLength(1);
396
- expect(extensions[0].mcpServers?.['test-server'].cwd).toBe(path.join(sourceExtDir, 'server'));
397
- expect(extensions[0].mcpServers?.['test-server'].args).toEqual([
398
- path.join(sourceExtDir, 'server', 'index.js'),
399
- ]);
400
- });
401
- it('should resolve environment variables in extension configuration', async () => {
402
- process.env['TEST_API_KEY'] = 'test-api-key-123';
403
- process.env['TEST_DB_URL'] = 'postgresql://localhost:5432/testdb';
404
- try {
405
- const userExtensionsDir = path.join(tempHomeDir, EXTENSIONS_DIRECTORY_NAME);
406
- fs.mkdirSync(userExtensionsDir, { recursive: true });
407
- const extDir = path.join(userExtensionsDir, 'test-extension');
408
- fs.mkdirSync(extDir);
409
- // Write config to a separate file for clarity and good practices
410
- const configPath = path.join(extDir, EXTENSIONS_CONFIG_FILENAME);
411
- const extensionConfig = {
412
- name: 'test-extension',
413
- version: '1.0.0',
414
- mcpServers: {
415
- 'test-server': {
416
- command: 'node',
417
- args: ['server.js'],
418
- env: {
419
- API_KEY: '$TEST_API_KEY',
420
- DATABASE_URL: '${TEST_DB_URL}',
421
- STATIC_VALUE: 'no-substitution',
422
- },
423
- },
424
- },
425
- };
426
- fs.writeFileSync(configPath, JSON.stringify(extensionConfig));
427
- const extensions = await extensionManager.loadExtensions();
428
- expect(extensions).toHaveLength(1);
429
- const extension = extensions[0];
430
- expect(extension.name).toBe('test-extension');
431
- expect(extension.mcpServers).toBeDefined();
432
- const serverConfig = extension.mcpServers?.['test-server'];
433
- expect(serverConfig).toBeDefined();
434
- expect(serverConfig?.env).toBeDefined();
435
- expect(serverConfig?.env?.['API_KEY']).toBe('test-api-key-123');
436
- expect(serverConfig?.env?.['DATABASE_URL']).toBe('postgresql://localhost:5432/testdb');
437
- expect(serverConfig?.env?.['STATIC_VALUE']).toBe('no-substitution');
438
- }
439
- finally {
440
- delete process.env['TEST_API_KEY'];
441
- delete process.env['TEST_DB_URL'];
442
- }
443
- });
444
- it('should resolve environment variables from an extension .env file', async () => {
445
- const extDir = createExtension({
446
- extensionsDir: userExtensionsDir,
447
- name: 'test-extension',
448
- version: '1.0.0',
449
- mcpServers: {
450
- 'test-server': {
451
- command: 'node',
452
- args: ['server.js'],
453
- env: {
454
- API_KEY: '$MY_API_KEY',
455
- STATIC_VALUE: 'no-substitution',
456
- },
457
- },
458
- },
459
- settings: [
460
- {
461
- name: 'My API Key',
462
- description: 'API key for testing.',
463
- envVar: 'MY_API_KEY',
464
- },
465
- ],
466
- });
467
- const envFilePath = path.join(extDir, '.env');
468
- fs.writeFileSync(envFilePath, 'MY_API_KEY=test-key-from-file\n');
469
- const extensions = await extensionManager.loadExtensions();
470
- expect(extensions).toHaveLength(1);
471
- const extension = extensions[0];
472
- const serverConfig = extension.mcpServers['test-server'];
473
- expect(serverConfig.env).toBeDefined();
474
- expect(serverConfig.env['API_KEY']).toBe('test-key-from-file');
475
- expect(serverConfig.env['STATIC_VALUE']).toBe('no-substitution');
476
- });
477
- it('should handle missing environment variables gracefully', async () => {
478
- const userExtensionsDir = path.join(tempHomeDir, EXTENSIONS_DIRECTORY_NAME);
479
- fs.mkdirSync(userExtensionsDir, { recursive: true });
480
- const extDir = path.join(userExtensionsDir, 'test-extension');
481
- fs.mkdirSync(extDir);
482
- const extensionConfig = {
483
- name: 'test-extension',
484
- version: '1.0.0',
485
- mcpServers: {
486
- 'test-server': {
487
- command: 'node',
488
- args: ['server.js'],
489
- env: {
490
- MISSING_VAR: '$UNDEFINED_ENV_VAR',
491
- MISSING_VAR_BRACES: '${ALSO_UNDEFINED}',
492
- },
493
- },
494
- },
495
- };
496
- fs.writeFileSync(path.join(extDir, EXTENSIONS_CONFIG_FILENAME), JSON.stringify(extensionConfig));
497
- const extensions = await extensionManager.loadExtensions();
498
- expect(extensions).toHaveLength(1);
499
- const extension = extensions[0];
500
- const serverConfig = extension.mcpServers['test-server'];
501
- expect(serverConfig.env).toBeDefined();
502
- expect(serverConfig.env['MISSING_VAR']).toBe('$UNDEFINED_ENV_VAR');
503
- expect(serverConfig.env['MISSING_VAR_BRACES']).toBe('${ALSO_UNDEFINED}');
504
- });
505
- it('should skip an extension with invalid JSON config and log an error', async () => {
506
- const consoleSpy = vi
507
- .spyOn(console, 'error')
508
- .mockImplementation(() => { });
509
- // Good extension
510
- createExtension({
511
- extensionsDir: userExtensionsDir,
512
- name: 'good-ext',
513
- version: '1.0.0',
514
- });
515
- // Bad extension
516
- const badExtDir = path.join(userExtensionsDir, 'bad-ext');
517
- fs.mkdirSync(badExtDir, { recursive: true });
518
- const badConfigPath = path.join(badExtDir, EXTENSIONS_CONFIG_FILENAME);
519
- fs.writeFileSync(badConfigPath, '{ "name": "bad-ext"'); // Malformed
520
- const extensions = await extensionManager.loadExtensions();
521
- expect(extensions).toHaveLength(1);
522
- expect(extensions[0].name).toBe('good-ext');
523
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining(`Warning: Skipping extension in ${badExtDir}: Failed to load extension config from ${badConfigPath}`));
524
- consoleSpy.mockRestore();
525
- });
526
- it('should skip an extension with missing "name" in config and log an error', async () => {
527
- const consoleSpy = vi
528
- .spyOn(console, 'error')
529
- .mockImplementation(() => { });
530
- // Good extension
531
- createExtension({
532
- extensionsDir: userExtensionsDir,
533
- name: 'good-ext',
534
- version: '1.0.0',
535
- });
536
- // Bad extension
537
- const badExtDir = path.join(userExtensionsDir, 'bad-ext-no-name');
538
- fs.mkdirSync(badExtDir, { recursive: true });
539
- const badConfigPath = path.join(badExtDir, EXTENSIONS_CONFIG_FILENAME);
540
- fs.writeFileSync(badConfigPath, JSON.stringify({ version: '1.0.0' }));
541
- const extensions = await extensionManager.loadExtensions();
542
- expect(extensions).toHaveLength(1);
543
- expect(extensions[0].name).toBe('good-ext');
544
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining(`Warning: Skipping extension in ${badExtDir}: Failed to load extension config from ${badConfigPath}: Invalid configuration in ${badConfigPath}: missing "name"`));
545
- consoleSpy.mockRestore();
546
- });
547
- it('should filter trust out of mcp servers', async () => {
548
- createExtension({
549
- extensionsDir: userExtensionsDir,
550
- name: 'test-extension',
551
- version: '1.0.0',
552
- mcpServers: {
553
- 'test-server': {
554
- command: 'node',
555
- args: ['server.js'],
556
- trust: true,
557
- },
558
- },
559
- });
560
- const extensions = await extensionManager.loadExtensions();
561
- expect(extensions).toHaveLength(1);
562
- expect(extensions[0].mcpServers?.['test-server'].trust).toBeUndefined();
563
- });
564
- it('should log an error for invalid extension names during loading', async () => {
565
- const consoleSpy = vi
566
- .spyOn(console, 'error')
567
- .mockImplementation(() => { });
568
- createExtension({
569
- extensionsDir: userExtensionsDir,
570
- name: 'bad_name',
571
- version: '1.0.0',
572
- });
573
- const extensions = await extensionManager.loadExtensions();
574
- const extension = extensions.find((e) => e.name === 'bad_name');
575
- expect(extension).toBeUndefined();
576
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Invalid extension name: "bad_name"'));
577
- consoleSpy.mockRestore();
578
- });
579
- it('should not load github extensions and log a warning if blockGitExtensions is set', async () => {
580
- const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
581
- createExtension({
582
- extensionsDir: userExtensionsDir,
583
- name: 'my-ext',
584
- version: '1.0.0',
585
- installMetadata: {
586
- type: 'git',
587
- source: 'http://somehost.com/foo/bar',
588
- },
589
- });
590
- const blockGitExtensionsSetting = createTestMergedSettings({
591
- security: { blockGitExtensions: true },
592
- });
593
- extensionManager = new ExtensionManager({
594
- workspaceDir: tempWorkspaceDir,
595
- requestConsent: mockRequestConsent,
596
- requestSetting: mockPromptForSettings,
597
- settings: blockGitExtensionsSetting,
598
- integrityManager: mockIntegrityManager,
599
- });
600
- const extensions = await extensionManager.loadExtensions();
601
- const extension = extensions.find((e) => e.name === 'my-ext');
602
- expect(extension).toBeUndefined();
603
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Extensions from remote sources is disallowed by your current settings.'));
604
- consoleSpy.mockRestore();
605
- });
606
- it('should load allowed extensions if the allowlist is set.', async () => {
607
- createExtension({
608
- extensionsDir: userExtensionsDir,
609
- name: 'my-ext',
610
- version: '1.0.0',
611
- installMetadata: {
612
- type: 'git',
613
- source: 'http://allowed.com/foo/bar',
614
- },
615
- });
616
- const extensionAllowlistSetting = createTestMergedSettings({
617
- security: {
618
- allowedExtensions: ['\\b(https?:\\/\\/)?(www\\.)?allowed\\.com\\S*'],
619
- },
620
- });
621
- extensionManager = new ExtensionManager({
622
- workspaceDir: tempWorkspaceDir,
623
- requestConsent: mockRequestConsent,
624
- requestSetting: mockPromptForSettings,
625
- settings: extensionAllowlistSetting,
626
- integrityManager: mockIntegrityManager,
627
- });
628
- const extensions = await extensionManager.loadExtensions();
629
- expect(extensions).toHaveLength(1);
630
- expect(extensions[0].name).toBe('my-ext');
631
- });
632
- it('should not load disallowed extensions and log a warning if the allowlist is set.', async () => {
633
- const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
634
- createExtension({
635
- extensionsDir: userExtensionsDir,
636
- name: 'my-ext',
637
- version: '1.0.0',
638
- installMetadata: {
639
- type: 'git',
640
- source: 'http://notallowed.com/foo/bar',
641
- },
642
- });
643
- const extensionAllowlistSetting = createTestMergedSettings({
644
- security: {
645
- allowedExtensions: ['\\b(https?:\\/\\/)?(www\\.)?allowed\\.com\\S*'],
646
- },
647
- });
648
- extensionManager = new ExtensionManager({
649
- workspaceDir: tempWorkspaceDir,
650
- requestConsent: mockRequestConsent,
651
- requestSetting: mockPromptForSettings,
652
- settings: extensionAllowlistSetting,
653
- integrityManager: mockIntegrityManager,
654
- });
655
- const extensions = await extensionManager.loadExtensions();
656
- const extension = extensions.find((e) => e.name === 'my-ext');
657
- expect(extension).toBeUndefined();
658
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('This extension is not allowed by the "allowedExtensions" security setting'));
659
- consoleSpy.mockRestore();
660
- });
661
- it('should not load any extensions if admin.extensions.enabled is false', async () => {
662
- createExtension({
663
- extensionsDir: userExtensionsDir,
664
- name: 'test-extension',
665
- version: '1.0.0',
666
- });
667
- const loadedSettings = loadSettings(tempWorkspaceDir).merged;
668
- loadedSettings.admin.extensions.enabled = false;
669
- extensionManager = new ExtensionManager({
670
- workspaceDir: tempWorkspaceDir,
671
- requestConsent: mockRequestConsent,
672
- requestSetting: mockPromptForSettings,
673
- settings: loadedSettings,
674
- integrityManager: mockIntegrityManager,
675
- });
676
- const extensions = await extensionManager.loadExtensions();
677
- expect(extensions).toEqual([]);
678
- });
679
- it('should not load mcpServers if admin.mcp.enabled is false', async () => {
680
- createExtension({
681
- extensionsDir: userExtensionsDir,
682
- name: 'test-extension',
683
- version: '1.0.0',
684
- mcpServers: {
685
- 'test-server': { command: 'echo', args: ['hello'] },
686
- },
687
- });
688
- const loadedSettings = loadSettings(tempWorkspaceDir).merged;
689
- loadedSettings.admin.mcp.enabled = false;
690
- extensionManager = new ExtensionManager({
691
- workspaceDir: tempWorkspaceDir,
692
- requestConsent: mockRequestConsent,
693
- requestSetting: mockPromptForSettings,
694
- settings: loadedSettings,
695
- integrityManager: mockIntegrityManager,
696
- });
697
- const extensions = await extensionManager.loadExtensions();
698
- expect(extensions).toHaveLength(1);
699
- expect(extensions[0].mcpServers).toBeUndefined();
700
- });
701
- it('should load mcpServers if admin.mcp.enabled is true', async () => {
702
- createExtension({
703
- extensionsDir: userExtensionsDir,
704
- name: 'test-extension',
705
- version: '1.0.0',
706
- mcpServers: {
707
- 'test-server': { command: 'echo', args: ['hello'] },
708
- },
709
- });
710
- const loadedSettings = loadSettings(tempWorkspaceDir).merged;
711
- loadedSettings.admin.mcp.enabled = true;
712
- extensionManager = new ExtensionManager({
713
- workspaceDir: tempWorkspaceDir,
714
- requestConsent: mockRequestConsent,
715
- requestSetting: mockPromptForSettings,
716
- settings: loadedSettings,
717
- integrityManager: mockIntegrityManager,
718
- });
719
- const extensions = await extensionManager.loadExtensions();
720
- expect(extensions).toHaveLength(1);
721
- expect(extensions[0].mcpServers).toEqual({
722
- 'test-server': { command: 'echo', args: ['hello'] },
723
- });
724
- });
725
- describe('id generation', () => {
726
- it.each([
727
- {
728
- description: 'should generate id from source for non-github git urls',
729
- installMetadata: {
730
- type: 'git',
731
- source: 'http://somehost.com/foo/bar',
732
- },
733
- expectedIdSource: 'http://somehost.com/foo/bar',
734
- },
735
- {
736
- description: 'should generate id from owner/repo for github http urls',
737
- installMetadata: {
738
- type: 'git',
739
- source: 'http://github.com/foo/bar',
740
- },
741
- expectedIdSource: 'https://github.com/foo/bar',
742
- },
743
- {
744
- description: 'should generate id from owner/repo for github ssh urls',
745
- installMetadata: {
746
- type: 'git',
747
- source: 'git@github.com:foo/bar',
748
- },
749
- expectedIdSource: 'https://github.com/foo/bar',
750
- },
751
- {
752
- description: 'should generate id from source for github-release extension',
753
- installMetadata: {
754
- type: 'github-release',
755
- source: 'https://github.com/foo/bar',
756
- },
757
- expectedIdSource: 'https://github.com/foo/bar',
758
- },
759
- {
760
- description: 'should generate id from the original source for local extension',
761
- installMetadata: {
762
- type: 'local',
763
- source: '/some/path',
764
- },
765
- expectedIdSource: '/some/path',
766
- },
767
- ])('$description', async ({ installMetadata, expectedIdSource }) => {
768
- createExtension({
769
- extensionsDir: userExtensionsDir,
770
- name: 'my-ext',
771
- version: '1.0.0',
772
- installMetadata,
773
- });
774
- const extensions = await extensionManager.loadExtensions();
775
- const extension = extensions.find((e) => e.name === 'my-ext');
776
- expect(extension?.id).toBe(hashValue(expectedIdSource));
777
- });
778
- it('should generate id from the original source for linked extensions', async () => {
779
- const extDevelopmentDir = path.join(tempHomeDir, 'local_extensions');
780
- const actualExtensionDir = getRealPath(createExtension({
781
- extensionsDir: extDevelopmentDir,
782
- name: 'link-ext-name',
783
- version: '1.0.0',
784
- }));
785
- await extensionManager.loadExtensions();
786
- await extensionManager.installOrUpdateExtension({
787
- type: 'link',
788
- source: actualExtensionDir,
789
- });
790
- const extension = extensionManager
791
- .getExtensions()
792
- .find((e) => e.name === 'link-ext-name');
793
- expect(extension?.id).toBe(hashValue(actualExtensionDir));
794
- });
795
- it('should generate id from name for extension with no install metadata', async () => {
796
- createExtension({
797
- extensionsDir: userExtensionsDir,
798
- name: 'no-meta-name',
799
- version: '1.0.0',
800
- });
801
- const extensions = await extensionManager.loadExtensions();
802
- const extension = extensions.find((e) => e.name === 'no-meta-name');
803
- expect(extension?.id).toBe(hashValue('no-meta-name'));
804
- });
805
- it('should load extension hooks and hydrate variables', async () => {
806
- const extDir = createExtension({
807
- extensionsDir: userExtensionsDir,
808
- name: 'hook-extension',
809
- version: '1.0.0',
810
- });
811
- const hooksDir = path.join(extDir, 'hooks');
812
- fs.mkdirSync(hooksDir);
813
- const hooksConfig = {
814
- enabled: false,
815
- hooks: {
816
- BeforeTool: [
817
- {
818
- matcher: '.*',
819
- hooks: [
820
- {
821
- type: 'command',
822
- command: 'echo ${extensionPath}',
823
- },
824
- ],
825
- },
826
- ],
827
- },
828
- };
829
- fs.writeFileSync(path.join(hooksDir, 'hooks.json'), JSON.stringify(hooksConfig));
830
- const settings = loadSettings(tempWorkspaceDir).merged;
831
- settings.hooksConfig.enabled = true;
832
- extensionManager = new ExtensionManager({
833
- workspaceDir: tempWorkspaceDir,
834
- requestConsent: mockRequestConsent,
835
- requestSetting: mockPromptForSettings,
836
- settings,
837
- integrityManager: mockIntegrityManager,
838
- });
839
- const extensions = await extensionManager.loadExtensions();
840
- expect(extensions).toHaveLength(1);
841
- const extension = extensions[0];
842
- expect(extension.hooks).toBeDefined();
843
- expect(extension.hooks?.BeforeTool).toHaveLength(1);
844
- expect(extension.hooks?.BeforeTool?.[0].hooks[0].command).toBe(`echo ${extDir}`);
845
- });
846
- it('should not load hooks if hooks.enabled is false', async () => {
847
- const extDir = createExtension({
848
- extensionsDir: userExtensionsDir,
849
- name: 'hook-extension-disabled',
850
- version: '1.0.0',
851
- });
852
- const hooksDir = path.join(extDir, 'hooks');
853
- fs.mkdirSync(hooksDir);
854
- fs.writeFileSync(path.join(hooksDir, 'hooks.json'), JSON.stringify({ hooks: { BeforeTool: [] }, enabled: false }));
855
- const settings = loadSettings(tempWorkspaceDir).merged;
856
- settings.hooksConfig.enabled = false;
857
- extensionManager = new ExtensionManager({
858
- workspaceDir: tempWorkspaceDir,
859
- requestConsent: mockRequestConsent,
860
- requestSetting: mockPromptForSettings,
861
- settings,
862
- integrityManager: mockIntegrityManager,
863
- });
864
- const extensions = await extensionManager.loadExtensions();
865
- expect(extensions).toHaveLength(1);
866
- expect(extensions[0].hooks).toBeUndefined();
867
- });
868
- it('should warn about hooks during installation', async () => {
869
- const requestConsentSpy = vi.fn().mockResolvedValue(true);
870
- extensionManager.setRequestConsent(requestConsentSpy);
871
- const sourceExtDir = path.join(tempWorkspaceDir, 'hook-extension-source');
872
- fs.mkdirSync(sourceExtDir, { recursive: true });
873
- const hooksDir = path.join(sourceExtDir, 'hooks');
874
- fs.mkdirSync(hooksDir);
875
- fs.writeFileSync(path.join(hooksDir, 'hooks.json'), JSON.stringify({ hooks: {} }));
876
- fs.writeFileSync(path.join(sourceExtDir, 'gemini-extension.json'), JSON.stringify({
877
- name: 'hook-extension-install',
878
- version: '1.0.0',
879
- }));
880
- await extensionManager.loadExtensions();
881
- await extensionManager.installOrUpdateExtension({
882
- source: sourceExtDir,
883
- type: 'local',
884
- });
885
- expect(requestConsentSpy).toHaveBeenCalledWith(expect.stringContaining('⚠️ This extension contains Hooks'));
886
- });
887
- });
888
- });
889
- describe('installExtension', () => {
890
- it('should install an extension from a local path', async () => {
891
- const sourceExtDir = getRealPath(createExtension({
892
- extensionsDir: tempHomeDir,
893
- name: 'my-local-extension',
894
- version: '1.0.0',
895
- }));
896
- const targetExtDir = path.join(userExtensionsDir, 'my-local-extension');
897
- const metadataPath = path.join(targetExtDir, INSTALL_METADATA_FILENAME);
898
- await extensionManager.loadExtensions();
899
- await extensionManager.installOrUpdateExtension({
900
- source: sourceExtDir,
901
- type: 'local',
902
- });
903
- expect(fs.existsSync(targetExtDir)).toBe(true);
904
- expect(fs.existsSync(metadataPath)).toBe(true);
905
- const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
906
- expect(metadata).toEqual({
907
- source: sourceExtDir,
908
- type: 'local',
909
- });
910
- fs.rmSync(targetExtDir, { recursive: true, force: true });
911
- });
912
- it('should throw an error if the extension already exists', async () => {
913
- const sourceExtDir = createExtension({
914
- extensionsDir: tempHomeDir,
915
- name: 'my-local-extension',
916
- version: '1.0.0',
917
- });
918
- await extensionManager.loadExtensions();
919
- await extensionManager.installOrUpdateExtension({
920
- source: sourceExtDir,
921
- type: 'local',
922
- });
923
- await expect(extensionManager.installOrUpdateExtension({
924
- source: sourceExtDir,
925
- type: 'local',
926
- })).rejects.toThrow('Extension "my-local-extension" is already installed. Please uninstall it first.');
927
- });
928
- it('should throw an error and cleanup if gemini-extension.json is missing', async () => {
929
- const sourceExtDir = getRealPath(path.join(tempHomeDir, 'bad-extension'));
930
- fs.mkdirSync(sourceExtDir, { recursive: true });
931
- const configPath = path.join(sourceExtDir, EXTENSIONS_CONFIG_FILENAME);
932
- await expect(extensionManager.installOrUpdateExtension({
933
- source: sourceExtDir,
934
- type: 'local',
935
- })).rejects.toThrow(`Configuration file not found at ${configPath}`);
936
- const targetExtDir = path.join(userExtensionsDir, 'bad-extension');
937
- expect(fs.existsSync(targetExtDir)).toBe(false);
938
- });
939
- it('should throw an error for invalid JSON in gemini-extension.json', async () => {
940
- const sourceExtDir = getRealPath(path.join(tempHomeDir, 'bad-json-ext'));
941
- fs.mkdirSync(sourceExtDir, { recursive: true });
942
- const configPath = path.join(sourceExtDir, EXTENSIONS_CONFIG_FILENAME);
943
- fs.writeFileSync(configPath, '{ "name": "bad-json", "version": "1.0.0"'); // Malformed JSON
944
- await expect(extensionManager.installOrUpdateExtension({
945
- source: sourceExtDir,
946
- type: 'local',
947
- })).rejects.toThrow(`Failed to load extension config from ${configPath}`);
948
- });
949
- it('should throw an error for missing name in gemini-extension.json', async () => {
950
- const sourceExtDir = getRealPath(createExtension({
951
- extensionsDir: tempHomeDir,
952
- name: 'missing-name-ext',
953
- version: '1.0.0',
954
- }));
955
- const configPath = path.join(sourceExtDir, EXTENSIONS_CONFIG_FILENAME);
956
- // Overwrite with invalid config
957
- fs.writeFileSync(configPath, JSON.stringify({ version: '1.0.0' }));
958
- await expect(extensionManager.installOrUpdateExtension({
959
- source: sourceExtDir,
960
- type: 'local',
961
- })).rejects.toThrow(`Invalid configuration in ${configPath}: missing "name"`);
962
- });
963
- it('should install an extension from a git URL', async () => {
964
- const gitUrl = 'https://somehost.com/somerepo.git';
965
- const extensionName = 'some-extension';
966
- const targetExtDir = path.join(userExtensionsDir, extensionName);
967
- const metadataPath = path.join(targetExtDir, INSTALL_METADATA_FILENAME);
968
- mockGit.clone.mockImplementation(async (_, destination) => {
969
- fs.mkdirSync(path.join(mockGit.path(), destination), {
970
- recursive: true,
971
- });
972
- fs.writeFileSync(path.join(mockGit.path(), destination, EXTENSIONS_CONFIG_FILENAME), JSON.stringify({ name: extensionName, version: '1.0.0' }));
973
- });
974
- mockGit.getRemotes.mockResolvedValue([{ name: 'origin' }]);
975
- mockDownloadFromGithubRelease.mockResolvedValue({
976
- success: false,
977
- failureReason: 'no release data',
978
- type: 'github-release',
979
- });
980
- await extensionManager.loadExtensions();
981
- await extensionManager.installOrUpdateExtension({
982
- source: gitUrl,
983
- type: 'git',
984
- });
985
- expect(fs.existsSync(targetExtDir)).toBe(true);
986
- expect(fs.existsSync(metadataPath)).toBe(true);
987
- const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
988
- expect(metadata).toEqual({
989
- source: gitUrl,
990
- type: 'git',
991
- });
992
- });
993
- it('should install a linked extension', async () => {
994
- const sourceExtDir = getRealPath(createExtension({
995
- extensionsDir: tempHomeDir,
996
- name: 'my-linked-extension',
997
- version: '1.0.0',
998
- }));
999
- const targetExtDir = path.join(userExtensionsDir, 'my-linked-extension');
1000
- const metadataPath = path.join(targetExtDir, INSTALL_METADATA_FILENAME);
1001
- const configPath = path.join(targetExtDir, EXTENSIONS_CONFIG_FILENAME);
1002
- await extensionManager.loadExtensions();
1003
- await extensionManager.installOrUpdateExtension({
1004
- source: sourceExtDir,
1005
- type: 'link',
1006
- });
1007
- expect(fs.existsSync(targetExtDir)).toBe(true);
1008
- expect(fs.existsSync(metadataPath)).toBe(true);
1009
- expect(fs.existsSync(configPath)).toBe(false);
1010
- const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
1011
- expect(metadata).toEqual({
1012
- source: sourceExtDir,
1013
- type: 'link',
1014
- });
1015
- fs.rmSync(targetExtDir, { recursive: true, force: true });
1016
- });
1017
- it('should not install a github extension if blockGitExtensions is set', async () => {
1018
- const gitUrl = 'https://somehost.com/somerepo.git';
1019
- const blockGitExtensionsSetting = createTestMergedSettings({
1020
- security: { blockGitExtensions: true },
1021
- });
1022
- extensionManager = new ExtensionManager({
1023
- workspaceDir: tempWorkspaceDir,
1024
- requestConsent: mockRequestConsent,
1025
- requestSetting: mockPromptForSettings,
1026
- settings: blockGitExtensionsSetting,
1027
- integrityManager: mockIntegrityManager,
1028
- });
1029
- await extensionManager.loadExtensions();
1030
- await expect(extensionManager.installOrUpdateExtension({
1031
- source: gitUrl,
1032
- type: 'git',
1033
- })).rejects.toThrow('Installing extensions from remote sources is disallowed by your current settings.');
1034
- });
1035
- it('should not install a disallowed extension if the allowlist is set', async () => {
1036
- const gitUrl = 'https://somehost.com/somerepo.git';
1037
- const allowedExtensionsSetting = createTestMergedSettings({
1038
- security: {
1039
- allowedExtensions: ['\\b(https?:\\/\\/)?(www\\.)?allowed\\.com\\S*'],
1040
- },
1041
- });
1042
- extensionManager = new ExtensionManager({
1043
- workspaceDir: tempWorkspaceDir,
1044
- requestConsent: mockRequestConsent,
1045
- requestSetting: mockPromptForSettings,
1046
- settings: allowedExtensionsSetting,
1047
- integrityManager: mockIntegrityManager,
1048
- });
1049
- await extensionManager.loadExtensions();
1050
- await expect(extensionManager.installOrUpdateExtension({
1051
- source: gitUrl,
1052
- type: 'git',
1053
- })).rejects.toThrow(`Installing extension from source "${gitUrl}" is not allowed by the "allowedExtensions" security setting.`);
1054
- });
1055
- it('should prompt for trust if workspace is not trusted', async () => {
1056
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
1057
- isTrusted: false,
1058
- source: undefined,
1059
- });
1060
- const sourceExtDir = createExtension({
1061
- extensionsDir: tempHomeDir,
1062
- name: 'my-local-extension',
1063
- version: '1.0.0',
1064
- });
1065
- await extensionManager.loadExtensions();
1066
- await extensionManager.installOrUpdateExtension({
1067
- source: sourceExtDir,
1068
- type: 'local',
1069
- });
1070
- expect(mockRequestConsent).toHaveBeenCalledWith(`The current workspace at "${tempWorkspaceDir}" is not trusted. Do you want to trust this workspace to install extensions?`);
1071
- });
1072
- it('should not install if user denies trust', async () => {
1073
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
1074
- isTrusted: false,
1075
- source: undefined,
1076
- });
1077
- mockRequestConsent.mockImplementation(async (message) => {
1078
- if (message.includes('is not trusted. Do you want to trust this workspace to install extensions?')) {
1079
- return false;
1080
- }
1081
- return true;
1082
- });
1083
- const sourceExtDir = createExtension({
1084
- extensionsDir: tempHomeDir,
1085
- name: 'my-local-extension',
1086
- version: '1.0.0',
1087
- });
1088
- await extensionManager.loadExtensions();
1089
- await expect(extensionManager.installOrUpdateExtension({
1090
- source: sourceExtDir,
1091
- type: 'local',
1092
- })).rejects.toThrow(`Could not install extension because the current workspace at ${tempWorkspaceDir} is not trusted.`);
1093
- });
1094
- it('should add the workspace to trusted folders if user consents', async () => {
1095
- const trustedFoldersPath = path.join(tempHomeDir, '.gemini', 'trustedFolders.json');
1096
- vi.stubEnv('GEMINI_CLI_TRUSTED_FOLDERS_PATH', trustedFoldersPath);
1097
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
1098
- isTrusted: false,
1099
- source: undefined,
1100
- });
1101
- const sourceExtDir = createExtension({
1102
- extensionsDir: tempHomeDir,
1103
- name: 'my-local-extension',
1104
- version: '1.0.0',
1105
- });
1106
- await extensionManager.loadExtensions();
1107
- await extensionManager.installOrUpdateExtension({
1108
- source: sourceExtDir,
1109
- type: 'local',
1110
- });
1111
- expect(fs.existsSync(trustedFoldersPath)).toBe(true);
1112
- const trustedFolders = JSON.parse(fs.readFileSync(trustedFoldersPath, 'utf-8'));
1113
- expect(trustedFolders[normalizePath(tempWorkspaceDir)]).toBe('TRUST_FOLDER');
1114
- });
1115
- describe.each([true, false])('with previous extension config: %s', (isUpdate) => {
1116
- let sourceExtDir;
1117
- beforeEach(async () => {
1118
- sourceExtDir = createExtension({
1119
- extensionsDir: tempHomeDir,
1120
- name: 'my-local-extension',
1121
- version: '1.1.0',
1122
- });
1123
- await extensionManager.loadExtensions();
1124
- if (isUpdate) {
1125
- await extensionManager.installOrUpdateExtension({
1126
- source: sourceExtDir,
1127
- type: 'local',
1128
- });
1129
- }
1130
- // Clears out any calls to mocks from the above function calls.
1131
- vi.clearAllMocks();
1132
- });
1133
- it(`should log an ${isUpdate ? 'update' : 'install'} event to clearcut on success`, async () => {
1134
- await extensionManager.installOrUpdateExtension({ source: sourceExtDir, type: 'local' }, isUpdate
1135
- ? {
1136
- name: 'my-local-extension',
1137
- version: '1.0.0',
1138
- }
1139
- : undefined);
1140
- if (isUpdate) {
1141
- expect(mockLogExtensionUpdateEvent).toHaveBeenCalled();
1142
- expect(mockLogExtensionInstallEvent).not.toHaveBeenCalled();
1143
- }
1144
- else {
1145
- expect(mockLogExtensionInstallEvent).toHaveBeenCalled();
1146
- expect(mockLogExtensionUpdateEvent).not.toHaveBeenCalled();
1147
- }
1148
- });
1149
- it(`should ${isUpdate ? 'not ' : ''} alter the extension enablement configuration`, async () => {
1150
- const enablementManager = new ExtensionEnablementManager();
1151
- enablementManager.enable('my-local-extension', true, '/some/scope');
1152
- await extensionManager.installOrUpdateExtension({ source: sourceExtDir, type: 'local' }, isUpdate
1153
- ? {
1154
- name: 'my-local-extension',
1155
- version: '1.0.0',
1156
- }
1157
- : undefined);
1158
- const config = enablementManager.readConfig()['my-local-extension'];
1159
- if (isUpdate) {
1160
- expect(config).not.toBeUndefined();
1161
- expect(config.overrides).toContain('/some/scope/*');
1162
- }
1163
- else {
1164
- expect(config).not.toContain('/some/scope/*');
1165
- }
1166
- });
1167
- });
1168
- it('should show users information on their ansi escaped mcp servers when installing', async () => {
1169
- const sourceExtDir = createExtension({
1170
- extensionsDir: tempHomeDir,
1171
- name: 'my-local-extension',
1172
- version: '1.0.0',
1173
- mcpServers: {
1174
- 'test-server': {
1175
- command: 'node dobadthing \u001b[12D\u001b[K',
1176
- args: ['server.js'],
1177
- description: 'a local mcp server',
1178
- },
1179
- 'test-server-2': {
1180
- description: 'a remote mcp server',
1181
- httpUrl: 'https://google.com',
1182
- },
1183
- },
1184
- });
1185
- await extensionManager.loadExtensions();
1186
- await expect(extensionManager.installOrUpdateExtension({
1187
- source: sourceExtDir,
1188
- type: 'local',
1189
- })).resolves.toMatchObject({
1190
- name: 'my-local-extension',
1191
- });
1192
- expect(mockRequestConsent).toHaveBeenCalledWith(`Installing extension "my-local-extension".
1193
- This extension will run the following MCP servers:
1194
- * test-server (local): node dobadthing \\u001b[12D\\u001b[K server.js
1195
- * test-server-2 (remote): https://google.com
1196
-
1197
- ${INSTALL_WARNING_MESSAGE}`);
1198
- });
1199
- it('should continue installation if user accepts prompt for local extension with mcp servers', async () => {
1200
- const sourceExtDir = createExtension({
1201
- extensionsDir: tempHomeDir,
1202
- name: 'my-local-extension',
1203
- version: '1.0.0',
1204
- mcpServers: {
1205
- 'test-server': {
1206
- command: 'node',
1207
- args: ['server.js'],
1208
- },
1209
- },
1210
- });
1211
- await extensionManager.loadExtensions();
1212
- await expect(extensionManager.installOrUpdateExtension({
1213
- source: sourceExtDir,
1214
- type: 'local',
1215
- })).resolves.toMatchObject({ name: 'my-local-extension' });
1216
- });
1217
- it('should cancel installation if user declines prompt for local extension with mcp servers', async () => {
1218
- const sourceExtDir = createExtension({
1219
- extensionsDir: tempHomeDir,
1220
- name: 'my-local-extension',
1221
- version: '1.0.0',
1222
- mcpServers: {
1223
- 'test-server': {
1224
- command: 'node',
1225
- args: ['server.js'],
1226
- },
1227
- },
1228
- });
1229
- mockRequestConsent.mockResolvedValue(false);
1230
- await extensionManager.loadExtensions();
1231
- await expect(extensionManager.installOrUpdateExtension({
1232
- source: sourceExtDir,
1233
- type: 'local',
1234
- })).rejects.toThrow('Installation cancelled for "my-local-extension".');
1235
- });
1236
- it('should save the autoUpdate flag to the install metadata', async () => {
1237
- const sourceExtDir = getRealPath(createExtension({
1238
- extensionsDir: tempHomeDir,
1239
- name: 'my-local-extension',
1240
- version: '1.0.0',
1241
- }));
1242
- const targetExtDir = path.join(userExtensionsDir, 'my-local-extension');
1243
- const metadataPath = path.join(targetExtDir, INSTALL_METADATA_FILENAME);
1244
- await extensionManager.loadExtensions();
1245
- await extensionManager.installOrUpdateExtension({
1246
- source: sourceExtDir,
1247
- type: 'local',
1248
- autoUpdate: true,
1249
- });
1250
- expect(fs.existsSync(targetExtDir)).toBe(true);
1251
- expect(fs.existsSync(metadataPath)).toBe(true);
1252
- const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
1253
- expect(metadata).toEqual({
1254
- source: sourceExtDir,
1255
- type: 'local',
1256
- autoUpdate: true,
1257
- });
1258
- fs.rmSync(targetExtDir, { recursive: true, force: true });
1259
- });
1260
- it('should ignore consent flow if not required', async () => {
1261
- const sourceExtDir = createExtension({
1262
- extensionsDir: tempHomeDir,
1263
- name: 'my-local-extension',
1264
- version: '1.0.0',
1265
- mcpServers: {
1266
- 'test-server': {
1267
- command: 'node',
1268
- args: ['server.js'],
1269
- },
1270
- },
1271
- });
1272
- await extensionManager.loadExtensions();
1273
- // Install it with hard coded consent first.
1274
- await extensionManager.installOrUpdateExtension({
1275
- source: sourceExtDir,
1276
- type: 'local',
1277
- });
1278
- expect(mockRequestConsent).toHaveBeenCalledOnce();
1279
- // Now update it without changing anything.
1280
- await expect(extensionManager.installOrUpdateExtension({ source: sourceExtDir, type: 'local' },
1281
- // Provide its own existing config as the previous config.
1282
- await extensionManager.loadExtensionConfig(sourceExtDir))).resolves.toMatchObject({ name: 'my-local-extension' });
1283
- // Still only called once
1284
- expect(mockRequestConsent).toHaveBeenCalledOnce();
1285
- });
1286
- it('should prompt for settings if promptForSettings', async () => {
1287
- const sourceExtDir = createExtension({
1288
- extensionsDir: tempHomeDir,
1289
- name: 'my-local-extension',
1290
- version: '1.0.0',
1291
- settings: [
1292
- {
1293
- name: 'API Key',
1294
- description: 'Your API key for the service.',
1295
- envVar: 'MY_API_KEY',
1296
- },
1297
- ],
1298
- });
1299
- await extensionManager.loadExtensions();
1300
- await extensionManager.installOrUpdateExtension({
1301
- source: sourceExtDir,
1302
- type: 'local',
1303
- });
1304
- expect(mockPromptForSettings).toHaveBeenCalled();
1305
- });
1306
- it('should not prompt for settings if promptForSettings is false', async () => {
1307
- const sourceExtDir = createExtension({
1308
- extensionsDir: tempHomeDir,
1309
- name: 'my-local-extension',
1310
- version: '1.0.0',
1311
- settings: [
1312
- {
1313
- name: 'API Key',
1314
- description: 'Your API key for the service.',
1315
- envVar: 'MY_API_KEY',
1316
- },
1317
- ],
1318
- });
1319
- extensionManager = new ExtensionManager({
1320
- workspaceDir: tempWorkspaceDir,
1321
- requestConsent: mockRequestConsent,
1322
- requestSetting: null,
1323
- settings: loadSettings(tempWorkspaceDir).merged,
1324
- integrityManager: mockIntegrityManager,
1325
- });
1326
- await extensionManager.loadExtensions();
1327
- await extensionManager.installOrUpdateExtension({
1328
- source: sourceExtDir,
1329
- type: 'local',
1330
- });
1331
- });
1332
- it('should only prompt for new settings on update, and preserve old settings', async () => {
1333
- // 1. Create and install the "old" version of the extension.
1334
- const oldSourceExtDir = createExtension({
1335
- extensionsDir: tempHomeDir, // Create it in a temp location first
1336
- name: 'my-local-extension',
1337
- version: '1.0.0',
1338
- settings: [
1339
- {
1340
- name: 'API Key',
1341
- description: 'Your API key for the service.',
1342
- envVar: 'MY_API_KEY',
1343
- },
1344
- ],
1345
- });
1346
- mockPromptForSettings.mockResolvedValueOnce('old-api-key');
1347
- await extensionManager.loadExtensions();
1348
- // Install it so it exists in the userExtensionsDir
1349
- await extensionManager.installOrUpdateExtension({
1350
- source: oldSourceExtDir,
1351
- type: 'local',
1352
- });
1353
- const envPath = new ExtensionStorage('my-local-extension').getEnvFilePath();
1354
- expect(fs.existsSync(envPath)).toBe(true);
1355
- let envContent = fs.readFileSync(envPath, 'utf-8');
1356
- expect(envContent).toContain('MY_API_KEY=old-api-key');
1357
- expect(mockPromptForSettings).toHaveBeenCalledTimes(1);
1358
- // 2. Create the "new" version of the extension in a new source directory.
1359
- const newSourceExtDir = createExtension({
1360
- extensionsDir: path.join(tempHomeDir, 'new-source'), // Another temp location
1361
- name: 'my-local-extension', // Same name
1362
- version: '1.1.0', // New version
1363
- settings: [
1364
- {
1365
- name: 'API Key',
1366
- description: 'Your API key for the service.',
1367
- envVar: 'MY_API_KEY',
1368
- },
1369
- {
1370
- name: 'New Setting',
1371
- description: 'A new setting.',
1372
- envVar: 'NEW_SETTING',
1373
- },
1374
- ],
1375
- });
1376
- const previousExtensionConfig = await extensionManager.loadExtensionConfig(path.join(userExtensionsDir, 'my-local-extension'));
1377
- mockPromptForSettings.mockResolvedValueOnce('new-setting-value');
1378
- // 3. Call installOrUpdateExtension to perform the update.
1379
- await extensionManager.installOrUpdateExtension({ source: newSourceExtDir, type: 'local' }, previousExtensionConfig);
1380
- expect(mockPromptForSettings).toHaveBeenCalledTimes(2);
1381
- expect(mockPromptForSettings).toHaveBeenCalledWith(expect.objectContaining({ name: 'New Setting' }));
1382
- expect(fs.existsSync(envPath)).toBe(true);
1383
- envContent = fs.readFileSync(envPath, 'utf-8');
1384
- expect(envContent).toContain('MY_API_KEY=old-api-key');
1385
- expect(envContent).toContain('NEW_SETTING=new-setting-value');
1386
- });
1387
- it('should auto-update if settings have changed', async () => {
1388
- // 1. Install initial version with autoUpdate: true
1389
- const oldSourceExtDir = createExtension({
1390
- extensionsDir: tempHomeDir,
1391
- name: 'my-auto-update-ext',
1392
- version: '1.0.0',
1393
- settings: [
1394
- {
1395
- name: 'OLD_SETTING',
1396
- envVar: 'OLD_SETTING',
1397
- description: 'An old setting',
1398
- },
1399
- ],
1400
- });
1401
- await extensionManager.loadExtensions();
1402
- await extensionManager.installOrUpdateExtension({
1403
- source: oldSourceExtDir,
1404
- type: 'local',
1405
- autoUpdate: true,
1406
- });
1407
- // 2. Create new version with different settings
1408
- const extensionDir = createExtension({
1409
- extensionsDir: tempHomeDir,
1410
- name: 'my-auto-update-ext',
1411
- version: '1.1.0',
1412
- settings: [
1413
- {
1414
- name: 'NEW_SETTING',
1415
- envVar: 'NEW_SETTING',
1416
- description: 'A new setting',
1417
- },
1418
- ],
1419
- });
1420
- const previousExtensionConfig = await extensionManager.loadExtensionConfig(path.join(userExtensionsDir, 'my-auto-update-ext'));
1421
- // 3. Attempt to update and assert it fails
1422
- const updatedExtension = await extensionManager.installOrUpdateExtension({
1423
- source: extensionDir,
1424
- type: 'local',
1425
- autoUpdate: true,
1426
- }, previousExtensionConfig);
1427
- expect(updatedExtension.version).toBe('1.1.0');
1428
- expect(extensionManager.getExtensions()[0].version).toBe('1.1.0');
1429
- });
1430
- it('should throw an error for invalid extension names', async () => {
1431
- const sourceExtDir = createExtension({
1432
- extensionsDir: tempHomeDir,
1433
- name: 'bad_name',
1434
- version: '1.0.0',
1435
- });
1436
- await expect(extensionManager.installOrUpdateExtension({
1437
- source: sourceExtDir,
1438
- type: 'local',
1439
- })).rejects.toThrow('Invalid extension name: "bad_name"');
1440
- });
1441
- describe('installing from github', () => {
1442
- const gitUrl = 'https://github.com/google/gemini-test-extension.git';
1443
- const extensionName = 'gemini-test-extension';
1444
- beforeEach(() => {
1445
- // Mock the git clone behavior for github installs that fallback to it.
1446
- mockGit.clone.mockImplementation(async (_, destination) => {
1447
- fs.mkdirSync(path.join(mockGit.path(), destination), {
1448
- recursive: true,
1449
- });
1450
- fs.writeFileSync(path.join(mockGit.path(), destination, EXTENSIONS_CONFIG_FILENAME), JSON.stringify({ name: extensionName, version: '1.0.0' }));
1451
- });
1452
- mockGit.getRemotes.mockResolvedValue([{ name: 'origin' }]);
1453
- });
1454
- afterEach(() => {
1455
- vi.restoreAllMocks();
1456
- });
1457
- it('should install from a github release successfully', async () => {
1458
- const targetExtDir = path.join(userExtensionsDir, extensionName);
1459
- mockDownloadFromGithubRelease.mockResolvedValue({
1460
- success: true,
1461
- tagName: 'v1.0.0',
1462
- type: 'github-release',
1463
- });
1464
- const tempDir = path.join(tempHomeDir, 'temp-ext');
1465
- fs.mkdirSync(tempDir, { recursive: true });
1466
- createExtension({
1467
- extensionsDir: tempDir,
1468
- name: extensionName,
1469
- version: '1.0.0',
1470
- });
1471
- vi.spyOn(ExtensionStorage, 'createTmpDir').mockResolvedValue(join(tempDir, extensionName));
1472
- await extensionManager.loadExtensions();
1473
- await extensionManager.installOrUpdateExtension({
1474
- source: gitUrl,
1475
- type: 'github-release',
1476
- });
1477
- expect(fs.existsSync(targetExtDir)).toBe(true);
1478
- const metadataPath = path.join(targetExtDir, INSTALL_METADATA_FILENAME);
1479
- expect(fs.existsSync(metadataPath)).toBe(true);
1480
- const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
1481
- expect(metadata).toEqual({
1482
- source: gitUrl,
1483
- type: 'github-release',
1484
- releaseTag: 'v1.0.0',
1485
- });
1486
- });
1487
- it('should fallback to git clone if github release download fails and user consents', async () => {
1488
- mockDownloadFromGithubRelease.mockResolvedValue({
1489
- success: false,
1490
- failureReason: 'failed to download asset',
1491
- errorMessage: 'download failed',
1492
- type: 'github-release',
1493
- });
1494
- await extensionManager.loadExtensions();
1495
- await extensionManager.installOrUpdateExtension({ source: gitUrl, type: 'github-release' });
1496
- // It gets called once to ask for a git clone, and once to consent to
1497
- // the actual extension features.
1498
- expect(mockRequestConsent).toHaveBeenCalledTimes(2);
1499
- expect(mockRequestConsent).toHaveBeenCalledWith(expect.stringContaining('Would you like to attempt to install via "git clone" instead?'));
1500
- expect(mockGit.clone).toHaveBeenCalled();
1501
- const metadataPath = path.join(userExtensionsDir, extensionName, INSTALL_METADATA_FILENAME);
1502
- const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
1503
- expect(metadata.type).toBe('git');
1504
- });
1505
- it('should throw an error if github release download fails and user denies consent', async () => {
1506
- mockDownloadFromGithubRelease.mockResolvedValue({
1507
- success: false,
1508
- errorMessage: 'download failed',
1509
- type: 'github-release',
1510
- });
1511
- mockRequestConsent.mockResolvedValue(false);
1512
- await extensionManager.loadExtensions();
1513
- await expect(extensionManager.installOrUpdateExtension({
1514
- source: gitUrl,
1515
- type: 'github-release',
1516
- })).rejects.toThrow(`Failed to install extension ${gitUrl}: download failed`);
1517
- expect(mockRequestConsent).toHaveBeenCalledExactlyOnceWith(expect.stringContaining('Would you like to attempt to install via "git clone" instead?'));
1518
- expect(mockGit.clone).not.toHaveBeenCalled();
1519
- });
1520
- it('should fallback to git clone without consent if no release data is found on first install', async () => {
1521
- mockDownloadFromGithubRelease.mockResolvedValue({
1522
- success: false,
1523
- failureReason: 'no release data',
1524
- type: 'github-release',
1525
- });
1526
- await extensionManager.loadExtensions();
1527
- await extensionManager.installOrUpdateExtension({
1528
- source: gitUrl,
1529
- type: 'git',
1530
- });
1531
- // We should not see the request to use git clone, this is a repo that
1532
- // has no github releases so it is the only install method.
1533
- expect(mockRequestConsent).toHaveBeenCalledExactlyOnceWith(expect.stringContaining('Installing extension "gemini-test-extension"'));
1534
- expect(mockGit.clone).toHaveBeenCalled();
1535
- const metadataPath = path.join(userExtensionsDir, extensionName, INSTALL_METADATA_FILENAME);
1536
- const metadata = JSON.parse(fs.readFileSync(metadataPath, 'utf-8'));
1537
- expect(metadata.type).toBe('git');
1538
- });
1539
- it('should ask for consent if no release data is found for an existing github-release extension', async () => {
1540
- mockDownloadFromGithubRelease.mockResolvedValue({
1541
- success: false,
1542
- failureReason: 'no release data',
1543
- errorMessage: 'No release data found',
1544
- type: 'github-release',
1545
- });
1546
- await extensionManager.loadExtensions();
1547
- await extensionManager.installOrUpdateExtension({ source: gitUrl, type: 'github-release' });
1548
- expect(mockRequestConsent).toHaveBeenCalledWith(expect.stringContaining('Would you like to attempt to install via "git clone" instead?'));
1549
- expect(mockGit.clone).toHaveBeenCalled();
1550
- });
1551
- });
1552
- });
1553
- describe('uninstallExtension', () => {
1554
- it('should uninstall an extension by name', async () => {
1555
- const sourceExtDir = createExtension({
1556
- extensionsDir: userExtensionsDir,
1557
- name: 'my-local-extension',
1558
- version: '1.0.0',
1559
- });
1560
- await extensionManager.loadExtensions();
1561
- await extensionManager.uninstallExtension('my-local-extension', false);
1562
- expect(fs.existsSync(sourceExtDir)).toBe(false);
1563
- });
1564
- it('should uninstall an extension by name and retain existing extensions', async () => {
1565
- const sourceExtDir = createExtension({
1566
- extensionsDir: userExtensionsDir,
1567
- name: 'my-local-extension',
1568
- version: '1.0.0',
1569
- });
1570
- const otherExtDir = createExtension({
1571
- extensionsDir: userExtensionsDir,
1572
- name: 'other-extension',
1573
- version: '1.0.0',
1574
- });
1575
- await extensionManager.loadExtensions();
1576
- await extensionManager.uninstallExtension('my-local-extension', false);
1577
- expect(fs.existsSync(sourceExtDir)).toBe(false);
1578
- expect(extensionManager.getExtensions()).toHaveLength(1);
1579
- expect(fs.existsSync(otherExtDir)).toBe(true);
1580
- });
1581
- it('should uninstall an extension on non-matching extension directory name', async () => {
1582
- // Create an extension with a name that differs from the directory name.
1583
- const sourceExtDir = createExtension({
1584
- extensionsDir: userExtensionsDir,
1585
- name: 'My-Local-Extension',
1586
- version: '1.0.0',
1587
- });
1588
- const newSourceExtDir = path.join(userExtensionsDir, 'my-local-extension');
1589
- fs.renameSync(sourceExtDir, newSourceExtDir);
1590
- const otherExtDir = createExtension({
1591
- extensionsDir: userExtensionsDir,
1592
- name: 'other-extension',
1593
- version: '1.0.0',
1594
- });
1595
- await extensionManager.loadExtensions();
1596
- await extensionManager.uninstallExtension('my-local-extension', false);
1597
- expect(fs.existsSync(sourceExtDir)).toBe(false);
1598
- expect(fs.existsSync(newSourceExtDir)).toBe(false);
1599
- expect(extensionManager.getExtensions()).toHaveLength(1);
1600
- expect(fs.existsSync(otherExtDir)).toBe(true);
1601
- });
1602
- it('should throw an error if the extension does not exist', async () => {
1603
- await extensionManager.loadExtensions();
1604
- await expect(extensionManager.uninstallExtension('nonexistent-extension', false)).rejects.toThrow('Extension not found.');
1605
- });
1606
- describe.each([true, false])('with isUpdate: %s', (isUpdate) => {
1607
- it(`should ${isUpdate ? 'not ' : ''}log uninstall event`, async () => {
1608
- createExtension({
1609
- extensionsDir: userExtensionsDir,
1610
- name: 'my-local-extension',
1611
- version: '1.0.0',
1612
- installMetadata: {
1613
- source: userExtensionsDir,
1614
- type: 'local',
1615
- },
1616
- });
1617
- await extensionManager.loadExtensions();
1618
- await extensionManager.uninstallExtension('my-local-extension', isUpdate);
1619
- if (isUpdate) {
1620
- expect(mockLogExtensionUninstall).not.toHaveBeenCalled();
1621
- expect(ExtensionUninstallEvent).not.toHaveBeenCalled();
1622
- }
1623
- else {
1624
- expect(mockLogExtensionUninstall).toHaveBeenCalled();
1625
- expect(ExtensionUninstallEvent).toHaveBeenCalledWith('my-local-extension', hashValue('my-local-extension'), hashValue(userExtensionsDir), 'success');
1626
- }
1627
- });
1628
- it(`should ${isUpdate ? 'not ' : ''} alter the extension enablement configuration`, async () => {
1629
- createExtension({
1630
- extensionsDir: userExtensionsDir,
1631
- name: 'test-extension',
1632
- version: '1.0.0',
1633
- });
1634
- const enablementManager = new ExtensionEnablementManager();
1635
- enablementManager.enable('test-extension', true, '/some/scope');
1636
- await extensionManager.loadExtensions();
1637
- await extensionManager.uninstallExtension('test-extension', isUpdate);
1638
- const config = enablementManager.readConfig()['test-extension'];
1639
- if (isUpdate) {
1640
- expect(config).not.toBeUndefined();
1641
- expect(config.overrides).toEqual(['/some/scope/*']);
1642
- }
1643
- else {
1644
- expect(config).toBeUndefined();
1645
- }
1646
- });
1647
- });
1648
- it('should uninstall an extension by its source URL', async () => {
1649
- const gitUrl = 'https://github.com/google/gemini-sql-extension.git';
1650
- const sourceExtDir = createExtension({
1651
- extensionsDir: userExtensionsDir,
1652
- name: 'gemini-sql-extension',
1653
- version: '1.0.0',
1654
- installMetadata: {
1655
- source: gitUrl,
1656
- type: 'git',
1657
- },
1658
- });
1659
- await extensionManager.loadExtensions();
1660
- await extensionManager.uninstallExtension(gitUrl, false);
1661
- expect(fs.existsSync(sourceExtDir)).toBe(false);
1662
- expect(mockLogExtensionUninstall).toHaveBeenCalled();
1663
- expect(ExtensionUninstallEvent).toHaveBeenCalledWith('gemini-sql-extension', hashValue('gemini-sql-extension'), hashValue('https://github.com/google/gemini-sql-extension'), 'success');
1664
- });
1665
- it('should fail to uninstall by URL if an extension has no install metadata', async () => {
1666
- createExtension({
1667
- extensionsDir: userExtensionsDir,
1668
- name: 'no-metadata-extension',
1669
- version: '1.0.0',
1670
- // No installMetadata provided
1671
- });
1672
- await extensionManager.loadExtensions();
1673
- await expect(extensionManager.uninstallExtension('https://github.com/google/no-metadata-extension', false)).rejects.toThrow('Extension not found.');
1674
- });
1675
- });
1676
- describe('disableExtension', () => {
1677
- it('should disable an extension at the user scope', async () => {
1678
- createExtension({
1679
- extensionsDir: userExtensionsDir,
1680
- name: 'my-extension',
1681
- version: '1.0.0',
1682
- });
1683
- await extensionManager.loadExtensions();
1684
- await extensionManager.disableExtension('my-extension', SettingScope.User);
1685
- expect(isEnabled({
1686
- name: 'my-extension',
1687
- enabledForPath: tempWorkspaceDir,
1688
- })).toBe(false);
1689
- });
1690
- it('should disable an extension at the workspace scope', async () => {
1691
- createExtension({
1692
- extensionsDir: userExtensionsDir,
1693
- name: 'my-extension',
1694
- version: '1.0.0',
1695
- });
1696
- await extensionManager.loadExtensions();
1697
- await extensionManager.disableExtension('my-extension', SettingScope.Workspace);
1698
- expect(isEnabled({
1699
- name: 'my-extension',
1700
- enabledForPath: tempHomeDir,
1701
- })).toBe(true);
1702
- expect(isEnabled({
1703
- name: 'my-extension',
1704
- enabledForPath: tempWorkspaceDir,
1705
- })).toBe(false);
1706
- });
1707
- it('should handle disabling the same extension twice', async () => {
1708
- createExtension({
1709
- extensionsDir: userExtensionsDir,
1710
- name: 'my-extension',
1711
- version: '1.0.0',
1712
- });
1713
- await extensionManager.loadExtensions();
1714
- await extensionManager.disableExtension('my-extension', SettingScope.User);
1715
- await extensionManager.disableExtension('my-extension', SettingScope.User);
1716
- expect(isEnabled({
1717
- name: 'my-extension',
1718
- enabledForPath: tempWorkspaceDir,
1719
- })).toBe(false);
1720
- });
1721
- it('should throw an error if you request system scope', async () => {
1722
- await expect(async () => extensionManager.disableExtension('my-extension', SettingScope.System)).rejects.toThrow('System and SystemDefaults scopes are not supported.');
1723
- });
1724
- it('should log a disable event', async () => {
1725
- createExtension({
1726
- extensionsDir: userExtensionsDir,
1727
- name: 'ext1',
1728
- version: '1.0.0',
1729
- installMetadata: {
1730
- source: userExtensionsDir,
1731
- type: 'local',
1732
- },
1733
- });
1734
- await extensionManager.loadExtensions();
1735
- await extensionManager.disableExtension('ext1', SettingScope.Workspace);
1736
- expect(mockLogExtensionDisable).toHaveBeenCalled();
1737
- expect(ExtensionDisableEvent).toHaveBeenCalledWith('ext1', hashValue('ext1'), hashValue(userExtensionsDir), SettingScope.Workspace);
1738
- });
1739
- });
1740
- describe('enableExtension', () => {
1741
- afterAll(() => {
1742
- vi.restoreAllMocks();
1743
- });
1744
- const getActiveExtensions = () => {
1745
- const extensions = extensionManager.getExtensions();
1746
- return extensions.filter((e) => e.isActive);
1747
- };
1748
- it('should enable an extension at the user scope', async () => {
1749
- createExtension({
1750
- extensionsDir: userExtensionsDir,
1751
- name: 'ext1',
1752
- version: '1.0.0',
1753
- });
1754
- await extensionManager.loadExtensions();
1755
- await extensionManager.disableExtension('ext1', SettingScope.User);
1756
- let activeExtensions = getActiveExtensions();
1757
- expect(activeExtensions).toHaveLength(0);
1758
- await extensionManager.enableExtension('ext1', SettingScope.User);
1759
- activeExtensions = getActiveExtensions();
1760
- expect(activeExtensions).toHaveLength(1);
1761
- expect(activeExtensions[0].name).toBe('ext1');
1762
- });
1763
- it('should enable an extension at the workspace scope', async () => {
1764
- createExtension({
1765
- extensionsDir: userExtensionsDir,
1766
- name: 'ext1',
1767
- version: '1.0.0',
1768
- });
1769
- await extensionManager.loadExtensions();
1770
- await extensionManager.disableExtension('ext1', SettingScope.Workspace);
1771
- let activeExtensions = getActiveExtensions();
1772
- expect(activeExtensions).toHaveLength(0);
1773
- await extensionManager.enableExtension('ext1', SettingScope.Workspace);
1774
- activeExtensions = getActiveExtensions();
1775
- expect(activeExtensions).toHaveLength(1);
1776
- expect(activeExtensions[0].name).toBe('ext1');
1777
- });
1778
- it('should log an enable event', async () => {
1779
- createExtension({
1780
- extensionsDir: userExtensionsDir,
1781
- name: 'ext1',
1782
- version: '1.0.0',
1783
- installMetadata: {
1784
- source: userExtensionsDir,
1785
- type: 'local',
1786
- },
1787
- });
1788
- await extensionManager.loadExtensions();
1789
- await extensionManager.disableExtension('ext1', SettingScope.Workspace);
1790
- await extensionManager.enableExtension('ext1', SettingScope.Workspace);
1791
- expect(mockLogExtensionEnable).toHaveBeenCalled();
1792
- expect(ExtensionEnableEvent).toHaveBeenCalledWith('ext1', hashValue('ext1'), hashValue(userExtensionsDir), SettingScope.Workspace);
1793
- });
1794
- });
1795
- });
1796
- function isEnabled(options) {
1797
- const manager = new ExtensionEnablementManager();
1798
- return manager.isEnabled(options.name, options.enabledForPath);
1799
- }
1800
- //# sourceMappingURL=extension.test.js.map