@didim365/agent-cli 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1034) hide show
  1. package/package.json +6 -3
  2. package/dist/src/commands/extensions/configure.test.d.ts +0 -1
  3. package/dist/src/commands/extensions/configure.test.js +0 -197
  4. package/dist/src/commands/extensions/configure.test.js.map +0 -1
  5. package/dist/src/commands/extensions/disable.test.d.ts +0 -6
  6. package/dist/src/commands/extensions/disable.test.js +0 -169
  7. package/dist/src/commands/extensions/disable.test.js.map +0 -1
  8. package/dist/src/commands/extensions/enable.test.d.ts +0 -6
  9. package/dist/src/commands/extensions/enable.test.js +0 -199
  10. package/dist/src/commands/extensions/enable.test.js.map +0 -1
  11. package/dist/src/commands/extensions/install.test.d.ts +0 -6
  12. package/dist/src/commands/extensions/install.test.js +0 -140
  13. package/dist/src/commands/extensions/install.test.js.map +0 -1
  14. package/dist/src/commands/extensions/link.test.d.ts +0 -6
  15. package/dist/src/commands/extensions/link.test.js +0 -137
  16. package/dist/src/commands/extensions/link.test.js.map +0 -1
  17. package/dist/src/commands/extensions/list.test.d.ts +0 -6
  18. package/dist/src/commands/extensions/list.test.js +0 -148
  19. package/dist/src/commands/extensions/list.test.js.map +0 -1
  20. package/dist/src/commands/extensions/new.test.d.ts +0 -6
  21. package/dist/src/commands/extensions/new.test.js +0 -62
  22. package/dist/src/commands/extensions/new.test.js.map +0 -1
  23. package/dist/src/commands/extensions/uninstall.test.d.ts +0 -6
  24. package/dist/src/commands/extensions/uninstall.test.js +0 -199
  25. package/dist/src/commands/extensions/uninstall.test.js.map +0 -1
  26. package/dist/src/commands/extensions/update.test.d.ts +0 -6
  27. package/dist/src/commands/extensions/update.test.js +0 -170
  28. package/dist/src/commands/extensions/update.test.js.map +0 -1
  29. package/dist/src/commands/extensions/validate.test.d.ts +0 -6
  30. package/dist/src/commands/extensions/validate.test.js +0 -96
  31. package/dist/src/commands/extensions/validate.test.js.map +0 -1
  32. package/dist/src/commands/extensions.test.d.ts +0 -6
  33. package/dist/src/commands/extensions.test.js +0 -67
  34. package/dist/src/commands/extensions.test.js.map +0 -1
  35. package/dist/src/commands/hooks/migrate.test.d.ts +0 -6
  36. package/dist/src/commands/hooks/migrate.test.js +0 -388
  37. package/dist/src/commands/hooks/migrate.test.js.map +0 -1
  38. package/dist/src/commands/mcp/add.test.d.ts +0 -6
  39. package/dist/src/commands/mcp/add.test.js +0 -274
  40. package/dist/src/commands/mcp/add.test.js.map +0 -1
  41. package/dist/src/commands/mcp/list.test.d.ts +0 -6
  42. package/dist/src/commands/mcp/list.test.js +0 -150
  43. package/dist/src/commands/mcp/list.test.js.map +0 -1
  44. package/dist/src/commands/mcp/remove.test.d.ts +0 -6
  45. package/dist/src/commands/mcp/remove.test.js +0 -189
  46. package/dist/src/commands/mcp/remove.test.js.map +0 -1
  47. package/dist/src/commands/mcp.test.d.ts +0 -6
  48. package/dist/src/commands/mcp.test.js +0 -65
  49. package/dist/src/commands/mcp.test.js.map +0 -1
  50. package/dist/src/commands/skills/disable.test.d.ts +0 -6
  51. package/dist/src/commands/skills/disable.test.js +0 -96
  52. package/dist/src/commands/skills/disable.test.js.map +0 -1
  53. package/dist/src/commands/skills/enable.test.d.ts +0 -6
  54. package/dist/src/commands/skills/enable.test.js +0 -107
  55. package/dist/src/commands/skills/enable.test.js.map +0 -1
  56. package/dist/src/commands/skills/install.test.d.ts +0 -6
  57. package/dist/src/commands/skills/install.test.js +0 -95
  58. package/dist/src/commands/skills/install.test.js.map +0 -1
  59. package/dist/src/commands/skills/list.test.d.ts +0 -6
  60. package/dist/src/commands/skills/list.test.js +0 -136
  61. package/dist/src/commands/skills/list.test.js.map +0 -1
  62. package/dist/src/commands/skills/uninstall.test.d.ts +0 -6
  63. package/dist/src/commands/skills/uninstall.test.js +0 -61
  64. package/dist/src/commands/skills/uninstall.test.js.map +0 -1
  65. package/dist/src/commands/skills.test.d.ts +0 -6
  66. package/dist/src/commands/skills.test.js +0 -49
  67. package/dist/src/commands/skills.test.js.map +0 -1
  68. package/dist/src/commands/utils.test.d.ts +0 -6
  69. package/dist/src/commands/utils.test.js +0 -35
  70. package/dist/src/commands/utils.test.js.map +0 -1
  71. package/dist/src/config/auth.test.d.ts +0 -6
  72. package/dist/src/config/auth.test.js +0 -89
  73. package/dist/src/config/auth.test.js.map +0 -1
  74. package/dist/src/config/config.integration.test.d.ts +0 -6
  75. package/dist/src/config/config.integration.test.js +0 -205
  76. package/dist/src/config/config.integration.test.js.map +0 -1
  77. package/dist/src/config/config.test.d.ts +0 -6
  78. package/dist/src/config/config.test.js +0 -2413
  79. package/dist/src/config/config.test.js.map +0 -1
  80. package/dist/src/config/extension-manager-agents.test.d.ts +0 -6
  81. package/dist/src/config/extension-manager-agents.test.js +0 -114
  82. package/dist/src/config/extension-manager-agents.test.js.map +0 -1
  83. package/dist/src/config/extension-manager-scope.test.d.ts +0 -6
  84. package/dist/src/config/extension-manager-scope.test.js +0 -153
  85. package/dist/src/config/extension-manager-scope.test.js.map +0 -1
  86. package/dist/src/config/extension-manager-skills.test.d.ts +0 -6
  87. package/dist/src/config/extension-manager-skills.test.js +0 -148
  88. package/dist/src/config/extension-manager-skills.test.js.map +0 -1
  89. package/dist/src/config/extension.test.d.ts +0 -6
  90. package/dist/src/config/extension.test.js +0 -1671
  91. package/dist/src/config/extension.test.js.map +0 -1
  92. package/dist/src/config/extensions/consent.test.d.ts +0 -6
  93. package/dist/src/config/extensions/consent.test.js +0 -280
  94. package/dist/src/config/extensions/consent.test.js.map +0 -1
  95. package/dist/src/config/extensions/extensionEnablement.test.d.ts +0 -6
  96. package/dist/src/config/extensions/extensionEnablement.test.js +0 -404
  97. package/dist/src/config/extensions/extensionEnablement.test.js.map +0 -1
  98. package/dist/src/config/extensions/extensionSettings.test.d.ts +0 -6
  99. package/dist/src/config/extensions/extensionSettings.test.js +0 -493
  100. package/dist/src/config/extensions/extensionSettings.test.js.map +0 -1
  101. package/dist/src/config/extensions/extensionUpdates.test.d.ts +0 -6
  102. package/dist/src/config/extensions/extensionUpdates.test.js +0 -230
  103. package/dist/src/config/extensions/extensionUpdates.test.js.map +0 -1
  104. package/dist/src/config/extensions/github.test.d.ts +0 -6
  105. package/dist/src/config/extensions/github.test.js +0 -441
  106. package/dist/src/config/extensions/github.test.js.map +0 -1
  107. package/dist/src/config/extensions/github_fetch.test.d.ts +0 -6
  108. package/dist/src/config/extensions/github_fetch.test.js +0 -169
  109. package/dist/src/config/extensions/github_fetch.test.js.map +0 -1
  110. package/dist/src/config/extensions/storage.test.d.ts +0 -6
  111. package/dist/src/config/extensions/storage.test.js +0 -64
  112. package/dist/src/config/extensions/storage.test.js.map +0 -1
  113. package/dist/src/config/extensions/update.test.d.ts +0 -6
  114. package/dist/src/config/extensions/update.test.js +0 -231
  115. package/dist/src/config/extensions/update.test.js.map +0 -1
  116. package/dist/src/config/extensions/variables.test.d.ts +0 -6
  117. package/dist/src/config/extensions/variables.test.js +0 -103
  118. package/dist/src/config/extensions/variables.test.js.map +0 -1
  119. package/dist/src/config/keyBindings.test.d.ts +0 -6
  120. package/dist/src/config/keyBindings.test.js +0 -108
  121. package/dist/src/config/keyBindings.test.js.map +0 -1
  122. package/dist/src/config/mcp/mcpServerEnablement.test.d.ts +0 -6
  123. package/dist/src/config/mcp/mcpServerEnablement.test.js +0 -147
  124. package/dist/src/config/mcp/mcpServerEnablement.test.js.map +0 -1
  125. package/dist/src/config/policy-engine.integration.test.d.ts +0 -6
  126. package/dist/src/config/policy-engine.integration.test.js +0 -353
  127. package/dist/src/config/policy-engine.integration.test.js.map +0 -1
  128. package/dist/src/config/sandboxConfig.test.d.ts +0 -6
  129. package/dist/src/config/sandboxConfig.test.js +0 -184
  130. package/dist/src/config/sandboxConfig.test.js.map +0 -1
  131. package/dist/src/config/settingPaths.test.d.ts +0 -6
  132. package/dist/src/config/settingPaths.test.js +0 -22
  133. package/dist/src/config/settingPaths.test.js.map +0 -1
  134. package/dist/src/config/settings-validation.test.d.ts +0 -6
  135. package/dist/src/config/settings-validation.test.js +0 -370
  136. package/dist/src/config/settings-validation.test.js.map +0 -1
  137. package/dist/src/config/settings.test.d.ts +0 -6
  138. package/dist/src/config/settings.test.js +0 -1822
  139. package/dist/src/config/settings.test.js.map +0 -1
  140. package/dist/src/config/settingsSchema.test.d.ts +0 -6
  141. package/dist/src/config/settingsSchema.test.js +0 -309
  142. package/dist/src/config/settingsSchema.test.js.map +0 -1
  143. package/dist/src/config/settings_repro.test.d.ts +0 -6
  144. package/dist/src/config/settings_repro.test.js +0 -166
  145. package/dist/src/config/settings_repro.test.js.map +0 -1
  146. package/dist/src/config/settings_validation_warning.test.d.ts +0 -6
  147. package/dist/src/config/settings_validation_warning.test.js +0 -123
  148. package/dist/src/config/settings_validation_warning.test.js.map +0 -1
  149. package/dist/src/config/skills-backward-compatibility.test.d.ts +0 -6
  150. package/dist/src/config/skills-backward-compatibility.test.js +0 -99
  151. package/dist/src/config/skills-backward-compatibility.test.js.map +0 -1
  152. package/dist/src/config/trustedFolders.test.d.ts +0 -6
  153. package/dist/src/config/trustedFolders.test.js +0 -385
  154. package/dist/src/config/trustedFolders.test.js.map +0 -1
  155. package/dist/src/core/auth.test.d.ts +0 -6
  156. package/dist/src/core/auth.test.js +0 -47
  157. package/dist/src/core/auth.test.js.map +0 -1
  158. package/dist/src/core/initializer.test.d.ts +0 -6
  159. package/dist/src/core/initializer.test.js +0 -101
  160. package/dist/src/core/initializer.test.js.map +0 -1
  161. package/dist/src/core/theme.test.d.ts +0 -6
  162. package/dist/src/core/theme.test.js +0 -46
  163. package/dist/src/core/theme.test.js.map +0 -1
  164. package/dist/src/deferred.test.d.ts +0 -6
  165. package/dist/src/deferred.test.js +0 -164
  166. package/dist/src/deferred.test.js.map +0 -1
  167. package/dist/src/gemini.test.d.ts +0 -6
  168. package/dist/src/gemini.test.js +0 -1334
  169. package/dist/src/gemini.test.js.map +0 -1
  170. package/dist/src/gemini_cleanup.test.d.ts +0 -6
  171. package/dist/src/gemini_cleanup.test.js +0 -208
  172. package/dist/src/gemini_cleanup.test.js.map +0 -1
  173. package/dist/src/nonInteractiveCli.test.d.ts +0 -6
  174. package/dist/src/nonInteractiveCli.test.js +0 -1687
  175. package/dist/src/nonInteractiveCli.test.js.map +0 -1
  176. package/dist/src/services/BuiltinCommandLoader.test.d.ts +0 -6
  177. package/dist/src/services/BuiltinCommandLoader.test.js +0 -254
  178. package/dist/src/services/BuiltinCommandLoader.test.js.map +0 -1
  179. package/dist/src/services/CommandService.test.d.ts +0 -6
  180. package/dist/src/services/CommandService.test.js +0 -234
  181. package/dist/src/services/CommandService.test.js.map +0 -1
  182. package/dist/src/services/FileCommandLoader.test.d.ts +0 -6
  183. package/dist/src/services/FileCommandLoader.test.js +0 -1102
  184. package/dist/src/services/FileCommandLoader.test.js.map +0 -1
  185. package/dist/src/services/McpPromptLoader.test.d.ts +0 -6
  186. package/dist/src/services/McpPromptLoader.test.js +0 -411
  187. package/dist/src/services/McpPromptLoader.test.js.map +0 -1
  188. package/dist/src/services/prompt-processors/argumentProcessor.test.d.ts +0 -6
  189. package/dist/src/services/prompt-processors/argumentProcessor.test.js +0 -40
  190. package/dist/src/services/prompt-processors/argumentProcessor.test.js.map +0 -1
  191. package/dist/src/services/prompt-processors/atFileProcessor.test.d.ts +0 -6
  192. package/dist/src/services/prompt-processors/atFileProcessor.test.js +0 -174
  193. package/dist/src/services/prompt-processors/atFileProcessor.test.js.map +0 -1
  194. package/dist/src/services/prompt-processors/injectionParser.test.d.ts +0 -6
  195. package/dist/src/services/prompt-processors/injectionParser.test.js +0 -189
  196. package/dist/src/services/prompt-processors/injectionParser.test.js.map +0 -1
  197. package/dist/src/services/prompt-processors/shellProcessor.test.d.ts +0 -6
  198. package/dist/src/services/prompt-processors/shellProcessor.test.js +0 -514
  199. package/dist/src/services/prompt-processors/shellProcessor.test.js.map +0 -1
  200. package/dist/src/test-utils/mockCommandContext.test.d.ts +0 -6
  201. package/dist/src/test-utils/mockCommandContext.test.js +0 -51
  202. package/dist/src/test-utils/mockCommandContext.test.js.map +0 -1
  203. package/dist/src/test-utils/render.test.d.ts +0 -6
  204. package/dist/src/test-utils/render.test.js +0 -79
  205. package/dist/src/test-utils/render.test.js.map +0 -1
  206. package/dist/src/ui/App.test.d.ts +0 -6
  207. package/dist/src/ui/App.test.js +0 -218
  208. package/dist/src/ui/App.test.js.map +0 -1
  209. package/dist/src/ui/AppContainer.test.d.ts +0 -6
  210. package/dist/src/ui/AppContainer.test.js +0 -2072
  211. package/dist/src/ui/AppContainer.test.js.map +0 -1
  212. package/dist/src/ui/IdeIntegrationNudge.test.d.ts +0 -6
  213. package/dist/src/ui/IdeIntegrationNudge.test.js +0 -158
  214. package/dist/src/ui/IdeIntegrationNudge.test.js.map +0 -1
  215. package/dist/src/ui/auth/ApiAuthDialog.test.d.ts +0 -6
  216. package/dist/src/ui/auth/ApiAuthDialog.test.js +0 -109
  217. package/dist/src/ui/auth/ApiAuthDialog.test.js.map +0 -1
  218. package/dist/src/ui/auth/AuthDialog.test.d.ts +0 -6
  219. package/dist/src/ui/auth/AuthDialog.test.js +0 -309
  220. package/dist/src/ui/auth/AuthDialog.test.js.map +0 -1
  221. package/dist/src/ui/auth/AuthInProgress.test.d.ts +0 -6
  222. package/dist/src/ui/auth/AuthInProgress.test.js +0 -81
  223. package/dist/src/ui/auth/AuthInProgress.test.js.map +0 -1
  224. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.d.ts +0 -6
  225. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js +0 -66
  226. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js.map +0 -1
  227. package/dist/src/ui/auth/useAuth.test.d.ts +0 -6
  228. package/dist/src/ui/auth/useAuth.test.js +0 -189
  229. package/dist/src/ui/auth/useAuth.test.js.map +0 -1
  230. package/dist/src/ui/commands/aboutCommand.test.d.ts +0 -6
  231. package/dist/src/ui/commands/aboutCommand.test.js +0 -143
  232. package/dist/src/ui/commands/aboutCommand.test.js.map +0 -1
  233. package/dist/src/ui/commands/agentsCommand.test.d.ts +0 -6
  234. package/dist/src/ui/commands/agentsCommand.test.js +0 -344
  235. package/dist/src/ui/commands/agentsCommand.test.js.map +0 -1
  236. package/dist/src/ui/commands/authCommand.test.d.ts +0 -6
  237. package/dist/src/ui/commands/authCommand.test.js +0 -98
  238. package/dist/src/ui/commands/authCommand.test.js.map +0 -1
  239. package/dist/src/ui/commands/bugCommand.test.d.ts +0 -6
  240. package/dist/src/ui/commands/bugCommand.test.js +0 -186
  241. package/dist/src/ui/commands/bugCommand.test.js.map +0 -1
  242. package/dist/src/ui/commands/chatCommand.test.d.ts +0 -6
  243. package/dist/src/ui/commands/chatCommand.test.js +0 -620
  244. package/dist/src/ui/commands/chatCommand.test.js.map +0 -1
  245. package/dist/src/ui/commands/clearCommand.test.d.ts +0 -6
  246. package/dist/src/ui/commands/clearCommand.test.js +0 -87
  247. package/dist/src/ui/commands/clearCommand.test.js.map +0 -1
  248. package/dist/src/ui/commands/compressCommand.test.d.ts +0 -6
  249. package/dist/src/ui/commands/compressCommand.test.js +0 -98
  250. package/dist/src/ui/commands/compressCommand.test.js.map +0 -1
  251. package/dist/src/ui/commands/copyCommand.test.d.ts +0 -6
  252. package/dist/src/ui/commands/copyCommand.test.js +0 -242
  253. package/dist/src/ui/commands/copyCommand.test.js.map +0 -1
  254. package/dist/src/ui/commands/corgiCommand.test.d.ts +0 -6
  255. package/dist/src/ui/commands/corgiCommand.test.js +0 -28
  256. package/dist/src/ui/commands/corgiCommand.test.js.map +0 -1
  257. package/dist/src/ui/commands/directoryCommand.test.d.ts +0 -6
  258. package/dist/src/ui/commands/directoryCommand.test.js +0 -353
  259. package/dist/src/ui/commands/directoryCommand.test.js.map +0 -1
  260. package/dist/src/ui/commands/docsCommand.test.d.ts +0 -6
  261. package/dist/src/ui/commands/docsCommand.test.js +0 -72
  262. package/dist/src/ui/commands/docsCommand.test.js.map +0 -1
  263. package/dist/src/ui/commands/editorCommand.test.d.ts +0 -6
  264. package/dist/src/ui/commands/editorCommand.test.js +0 -27
  265. package/dist/src/ui/commands/editorCommand.test.js.map +0 -1
  266. package/dist/src/ui/commands/extensionsCommand.test.d.ts +0 -6
  267. package/dist/src/ui/commands/extensionsCommand.test.js +0 -778
  268. package/dist/src/ui/commands/extensionsCommand.test.js.map +0 -1
  269. package/dist/src/ui/commands/helpCommand.test.d.ts +0 -6
  270. package/dist/src/ui/commands/helpCommand.test.js +0 -42
  271. package/dist/src/ui/commands/helpCommand.test.js.map +0 -1
  272. package/dist/src/ui/commands/hooksCommand.test.d.ts +0 -6
  273. package/dist/src/ui/commands/hooksCommand.test.js +0 -572
  274. package/dist/src/ui/commands/hooksCommand.test.js.map +0 -1
  275. package/dist/src/ui/commands/ideCommand.test.d.ts +0 -6
  276. package/dist/src/ui/commands/ideCommand.test.js +0 -203
  277. package/dist/src/ui/commands/ideCommand.test.js.map +0 -1
  278. package/dist/src/ui/commands/initCommand.test.d.ts +0 -6
  279. package/dist/src/ui/commands/initCommand.test.js +0 -84
  280. package/dist/src/ui/commands/initCommand.test.js.map +0 -1
  281. package/dist/src/ui/commands/mcpCommand.test.d.ts +0 -6
  282. package/dist/src/ui/commands/mcpCommand.test.js +0 -189
  283. package/dist/src/ui/commands/mcpCommand.test.js.map +0 -1
  284. package/dist/src/ui/commands/memoryCommand.test.d.ts +0 -6
  285. package/dist/src/ui/commands/memoryCommand.test.js +0 -350
  286. package/dist/src/ui/commands/memoryCommand.test.js.map +0 -1
  287. package/dist/src/ui/commands/modelCommand.test.d.ts +0 -6
  288. package/dist/src/ui/commands/modelCommand.test.js +0 -41
  289. package/dist/src/ui/commands/modelCommand.test.js.map +0 -1
  290. package/dist/src/ui/commands/permissionsCommand.test.d.ts +0 -6
  291. package/dist/src/ui/commands/permissionsCommand.test.js +0 -86
  292. package/dist/src/ui/commands/permissionsCommand.test.js.map +0 -1
  293. package/dist/src/ui/commands/policiesCommand.test.d.ts +0 -6
  294. package/dist/src/ui/commands/policiesCommand.test.js +0 -87
  295. package/dist/src/ui/commands/policiesCommand.test.js.map +0 -1
  296. package/dist/src/ui/commands/privacyCommand.test.d.ts +0 -6
  297. package/dist/src/ui/commands/privacyCommand.test.js +0 -32
  298. package/dist/src/ui/commands/privacyCommand.test.js.map +0 -1
  299. package/dist/src/ui/commands/quitCommand.test.d.ts +0 -6
  300. package/dist/src/ui/commands/quitCommand.test.js +0 -50
  301. package/dist/src/ui/commands/quitCommand.test.js.map +0 -1
  302. package/dist/src/ui/commands/restoreCommand.test.d.ts +0 -6
  303. package/dist/src/ui/commands/restoreCommand.test.js +0 -190
  304. package/dist/src/ui/commands/restoreCommand.test.js.map +0 -1
  305. package/dist/src/ui/commands/rewindCommand.test.d.ts +0 -6
  306. package/dist/src/ui/commands/rewindCommand.test.js +0 -242
  307. package/dist/src/ui/commands/rewindCommand.test.js.map +0 -1
  308. package/dist/src/ui/commands/settingsCommand.test.d.ts +0 -6
  309. package/dist/src/ui/commands/settingsCommand.test.js +0 -30
  310. package/dist/src/ui/commands/settingsCommand.test.js.map +0 -1
  311. package/dist/src/ui/commands/setupGithubCommand.test.d.ts +0 -6
  312. package/dist/src/ui/commands/setupGithubCommand.test.js +0 -238
  313. package/dist/src/ui/commands/setupGithubCommand.test.js.map +0 -1
  314. package/dist/src/ui/commands/skillsCommand.test.d.ts +0 -6
  315. package/dist/src/ui/commands/skillsCommand.test.js +0 -426
  316. package/dist/src/ui/commands/skillsCommand.test.js.map +0 -1
  317. package/dist/src/ui/commands/statsCommand.test.d.ts +0 -6
  318. package/dist/src/ui/commands/statsCommand.test.js +0 -70
  319. package/dist/src/ui/commands/statsCommand.test.js.map +0 -1
  320. package/dist/src/ui/commands/terminalSetupCommand.test.d.ts +0 -6
  321. package/dist/src/ui/commands/terminalSetupCommand.test.js +0 -66
  322. package/dist/src/ui/commands/terminalSetupCommand.test.js.map +0 -1
  323. package/dist/src/ui/commands/themeCommand.test.d.ts +0 -6
  324. package/dist/src/ui/commands/themeCommand.test.js +0 -32
  325. package/dist/src/ui/commands/themeCommand.test.js.map +0 -1
  326. package/dist/src/ui/commands/toolsCommand.test.d.ts +0 -6
  327. package/dist/src/ui/commands/toolsCommand.test.js +0 -100
  328. package/dist/src/ui/commands/toolsCommand.test.js.map +0 -1
  329. package/dist/src/ui/components/AboutBox.test.d.ts +0 -6
  330. package/dist/src/ui/components/AboutBox.test.js +0 -59
  331. package/dist/src/ui/components/AboutBox.test.js.map +0 -1
  332. package/dist/src/ui/components/AdminSettingsChangedDialog.test.d.ts +0 -6
  333. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js +0 -43
  334. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js.map +0 -1
  335. package/dist/src/ui/components/AgentConfigDialog.test.d.ts +0 -6
  336. package/dist/src/ui/components/AgentConfigDialog.test.js +0 -241
  337. package/dist/src/ui/components/AgentConfigDialog.test.js.map +0 -1
  338. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.d.ts +0 -6
  339. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js +0 -190
  340. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js.map +0 -1
  341. package/dist/src/ui/components/AnsiOutput.test.d.ts +0 -6
  342. package/dist/src/ui/components/AnsiOutput.test.js +0 -92
  343. package/dist/src/ui/components/AnsiOutput.test.js.map +0 -1
  344. package/dist/src/ui/components/AppHeader.test.d.ts +0 -6
  345. package/dist/src/ui/components/AppHeader.test.js +0 -225
  346. package/dist/src/ui/components/AppHeader.test.js.map +0 -1
  347. package/dist/src/ui/components/ApprovalModeIndicator.test.d.ts +0 -6
  348. package/dist/src/ui/components/ApprovalModeIndicator.test.js +0 -37
  349. package/dist/src/ui/components/ApprovalModeIndicator.test.js.map +0 -1
  350. package/dist/src/ui/components/AskUserDialog.test.d.ts +0 -6
  351. package/dist/src/ui/components/AskUserDialog.test.js +0 -598
  352. package/dist/src/ui/components/AskUserDialog.test.js.map +0 -1
  353. package/dist/src/ui/components/Banner.test.d.ts +0 -6
  354. package/dist/src/ui/components/Banner.test.js +0 -24
  355. package/dist/src/ui/components/Banner.test.js.map +0 -1
  356. package/dist/src/ui/components/CliSpinner.test.d.ts +0 -6
  357. package/dist/src/ui/components/CliSpinner.test.js +0 -28
  358. package/dist/src/ui/components/CliSpinner.test.js.map +0 -1
  359. package/dist/src/ui/components/Composer.test.d.ts +0 -6
  360. package/dist/src/ui/components/Composer.test.js +0 -383
  361. package/dist/src/ui/components/Composer.test.js.map +0 -1
  362. package/dist/src/ui/components/ConfigInitDisplay.test.d.ts +0 -6
  363. package/dist/src/ui/components/ConfigInitDisplay.test.js +0 -117
  364. package/dist/src/ui/components/ConfigInitDisplay.test.js.map +0 -1
  365. package/dist/src/ui/components/ConsentPrompt.test.d.ts +0 -6
  366. package/dist/src/ui/components/ConsentPrompt.test.js +0 -77
  367. package/dist/src/ui/components/ConsentPrompt.test.js.map +0 -1
  368. package/dist/src/ui/components/ConsoleSummaryDisplay.test.d.ts +0 -6
  369. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js +0 -26
  370. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js.map +0 -1
  371. package/dist/src/ui/components/ContextSummaryDisplay.test.d.ts +0 -6
  372. package/dist/src/ui/components/ContextSummaryDisplay.test.js +0 -102
  373. package/dist/src/ui/components/ContextSummaryDisplay.test.js.map +0 -1
  374. package/dist/src/ui/components/ContextUsageDisplay.test.d.ts +0 -6
  375. package/dist/src/ui/components/ContextUsageDisplay.test.js +0 -43
  376. package/dist/src/ui/components/ContextUsageDisplay.test.js.map +0 -1
  377. package/dist/src/ui/components/CopyModeWarning.test.d.ts +0 -6
  378. package/dist/src/ui/components/CopyModeWarning.test.js +0 -33
  379. package/dist/src/ui/components/CopyModeWarning.test.js.map +0 -1
  380. package/dist/src/ui/components/DebugProfiler.test.d.ts +0 -6
  381. package/dist/src/ui/components/DebugProfiler.test.js +0 -229
  382. package/dist/src/ui/components/DebugProfiler.test.js.map +0 -1
  383. package/dist/src/ui/components/DetailedMessagesDisplay.test.d.ts +0 -6
  384. package/dist/src/ui/components/DetailedMessagesDisplay.test.js +0 -39
  385. package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +0 -1
  386. package/dist/src/ui/components/DialogManager.test.d.ts +0 -6
  387. package/dist/src/ui/components/DialogManager.test.js +0 -177
  388. package/dist/src/ui/components/DialogManager.test.js.map +0 -1
  389. package/dist/src/ui/components/EditorSettingsDialog.test.d.ts +0 -6
  390. package/dist/src/ui/components/EditorSettingsDialog.test.js +0 -119
  391. package/dist/src/ui/components/EditorSettingsDialog.test.js.map +0 -1
  392. package/dist/src/ui/components/ExitWarning.test.d.ts +0 -6
  393. package/dist/src/ui/components/ExitWarning.test.js +0 -54
  394. package/dist/src/ui/components/ExitWarning.test.js.map +0 -1
  395. package/dist/src/ui/components/FolderTrustDialog.test.d.ts +0 -6
  396. package/dist/src/ui/components/FolderTrustDialog.test.js +0 -102
  397. package/dist/src/ui/components/FolderTrustDialog.test.js.map +0 -1
  398. package/dist/src/ui/components/Footer.test.d.ts +0 -6
  399. package/dist/src/ui/components/Footer.test.js +0 -321
  400. package/dist/src/ui/components/Footer.test.js.map +0 -1
  401. package/dist/src/ui/components/GeminiRespondingSpinner.test.d.ts +0 -6
  402. package/dist/src/ui/components/GeminiRespondingSpinner.test.js +0 -61
  403. package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +0 -1
  404. package/dist/src/ui/components/GradientRegression.test.d.ts +0 -6
  405. package/dist/src/ui/components/GradientRegression.test.js +0 -105
  406. package/dist/src/ui/components/GradientRegression.test.js.map +0 -1
  407. package/dist/src/ui/components/Header.test.d.ts +0 -6
  408. package/dist/src/ui/components/Header.test.js +0 -147
  409. package/dist/src/ui/components/Header.test.js.map +0 -1
  410. package/dist/src/ui/components/Help.test.d.ts +0 -6
  411. package/dist/src/ui/components/Help.test.js +0 -67
  412. package/dist/src/ui/components/Help.test.js.map +0 -1
  413. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +0 -6
  414. package/dist/src/ui/components/HistoryItemDisplay.test.js +0 -207
  415. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +0 -1
  416. package/dist/src/ui/components/HookStatusDisplay.test.d.ts +0 -6
  417. package/dist/src/ui/components/HookStatusDisplay.test.js +0 -51
  418. package/dist/src/ui/components/HookStatusDisplay.test.js.map +0 -1
  419. package/dist/src/ui/components/IdeTrustChangeDialog.test.d.ts +0 -6
  420. package/dist/src/ui/components/IdeTrustChangeDialog.test.js +0 -58
  421. package/dist/src/ui/components/IdeTrustChangeDialog.test.js.map +0 -1
  422. package/dist/src/ui/components/InputPrompt.test.d.ts +0 -6
  423. package/dist/src/ui/components/InputPrompt.test.js +0 -2596
  424. package/dist/src/ui/components/InputPrompt.test.js.map +0 -1
  425. package/dist/src/ui/components/LoadingIndicator.test.d.ts +0 -6
  426. package/dist/src/ui/components/LoadingIndicator.test.js +0 -207
  427. package/dist/src/ui/components/LoadingIndicator.test.js.map +0 -1
  428. package/dist/src/ui/components/LogoutConfirmationDialog.test.d.ts +0 -6
  429. package/dist/src/ui/components/LogoutConfirmationDialog.test.js +0 -59
  430. package/dist/src/ui/components/LogoutConfirmationDialog.test.js.map +0 -1
  431. package/dist/src/ui/components/LoopDetectionConfirmation.test.d.ts +0 -6
  432. package/dist/src/ui/components/LoopDetectionConfirmation.test.js +0 -25
  433. package/dist/src/ui/components/LoopDetectionConfirmation.test.js.map +0 -1
  434. package/dist/src/ui/components/MainContent.test.d.ts +0 -6
  435. package/dist/src/ui/components/MainContent.test.js +0 -83
  436. package/dist/src/ui/components/MainContent.test.js.map +0 -1
  437. package/dist/src/ui/components/MemoryUsageDisplay.test.d.ts +0 -6
  438. package/dist/src/ui/components/MemoryUsageDisplay.test.js +0 -49
  439. package/dist/src/ui/components/MemoryUsageDisplay.test.js.map +0 -1
  440. package/dist/src/ui/components/ModelDialog.test.d.ts +0 -6
  441. package/dist/src/ui/components/ModelDialog.test.js +0 -197
  442. package/dist/src/ui/components/ModelDialog.test.js.map +0 -1
  443. package/dist/src/ui/components/ModelStatsDisplay.test.d.ts +0 -6
  444. package/dist/src/ui/components/ModelStatsDisplay.test.js +0 -343
  445. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +0 -1
  446. package/dist/src/ui/components/MultiFolderTrustDialog.test.d.ts +0 -6
  447. package/dist/src/ui/components/MultiFolderTrustDialog.test.js +0 -162
  448. package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +0 -1
  449. package/dist/src/ui/components/NewAgentsNotification.test.d.ts +0 -6
  450. package/dist/src/ui/components/NewAgentsNotification.test.js +0 -48
  451. package/dist/src/ui/components/NewAgentsNotification.test.js.map +0 -1
  452. package/dist/src/ui/components/Notifications.test.d.ts +0 -6
  453. package/dist/src/ui/components/Notifications.test.js +0 -164
  454. package/dist/src/ui/components/Notifications.test.js.map +0 -1
  455. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +0 -6
  456. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +0 -162
  457. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +0 -1
  458. package/dist/src/ui/components/ProQuotaDialog.test.d.ts +0 -6
  459. package/dist/src/ui/components/ProQuotaDialog.test.js +0 -191
  460. package/dist/src/ui/components/ProQuotaDialog.test.js.map +0 -1
  461. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +0 -6
  462. package/dist/src/ui/components/QueuedMessageDisplay.test.js +0 -65
  463. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +0 -1
  464. package/dist/src/ui/components/QuittingDisplay.test.d.ts +0 -6
  465. package/dist/src/ui/components/QuittingDisplay.test.js +0 -49
  466. package/dist/src/ui/components/QuittingDisplay.test.js.map +0 -1
  467. package/dist/src/ui/components/RawMarkdownIndicator.test.d.ts +0 -6
  468. package/dist/src/ui/components/RawMarkdownIndicator.test.js +0 -34
  469. package/dist/src/ui/components/RawMarkdownIndicator.test.js.map +0 -1
  470. package/dist/src/ui/components/RewindConfirmation.test.d.ts +0 -6
  471. package/dist/src/ui/components/RewindConfirmation.test.js +0 -53
  472. package/dist/src/ui/components/RewindConfirmation.test.js.map +0 -1
  473. package/dist/src/ui/components/RewindViewer.test.d.ts +0 -6
  474. package/dist/src/ui/components/RewindViewer.test.js +0 -241
  475. package/dist/src/ui/components/RewindViewer.test.js.map +0 -1
  476. package/dist/src/ui/components/SessionBrowser.test.d.ts +0 -6
  477. package/dist/src/ui/components/SessionBrowser.test.js +0 -256
  478. package/dist/src/ui/components/SessionBrowser.test.js.map +0 -1
  479. package/dist/src/ui/components/SessionSummaryDisplay.test.d.ts +0 -6
  480. package/dist/src/ui/components/SessionSummaryDisplay.test.js +0 -75
  481. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +0 -1
  482. package/dist/src/ui/components/SettingsDialog.test.d.ts +0 -6
  483. package/dist/src/ui/components/SettingsDialog.test.js +0 -1150
  484. package/dist/src/ui/components/SettingsDialog.test.js.map +0 -1
  485. package/dist/src/ui/components/ShellInputPrompt.test.d.ts +0 -6
  486. package/dist/src/ui/components/ShellInputPrompt.test.js +0 -91
  487. package/dist/src/ui/components/ShellInputPrompt.test.js.map +0 -1
  488. package/dist/src/ui/components/ShellModeIndicator.test.d.ts +0 -6
  489. package/dist/src/ui/components/ShellModeIndicator.test.js +0 -17
  490. package/dist/src/ui/components/ShellModeIndicator.test.js.map +0 -1
  491. package/dist/src/ui/components/ShowMoreLines.test.d.ts +0 -6
  492. package/dist/src/ui/components/ShowMoreLines.test.js +0 -40
  493. package/dist/src/ui/components/ShowMoreLines.test.js.map +0 -1
  494. package/dist/src/ui/components/StatsDisplay.test.d.ts +0 -6
  495. package/dist/src/ui/components/StatsDisplay.test.js +0 -438
  496. package/dist/src/ui/components/StatsDisplay.test.js.map +0 -1
  497. package/dist/src/ui/components/StatusDisplay.test.d.ts +0 -6
  498. package/dist/src/ui/components/StatusDisplay.test.js +0 -155
  499. package/dist/src/ui/components/StatusDisplay.test.js.map +0 -1
  500. package/dist/src/ui/components/StickyHeader.test.d.ts +0 -6
  501. package/dist/src/ui/components/StickyHeader.test.js +0 -17
  502. package/dist/src/ui/components/StickyHeader.test.js.map +0 -1
  503. package/dist/src/ui/components/SuggestionsDisplay.test.d.ts +0 -6
  504. package/dist/src/ui/components/SuggestionsDisplay.test.js +0 -56
  505. package/dist/src/ui/components/SuggestionsDisplay.test.js.map +0 -1
  506. package/dist/src/ui/components/Table.test.d.ts +0 -6
  507. package/dist/src/ui/components/Table.test.js +0 -53
  508. package/dist/src/ui/components/Table.test.js.map +0 -1
  509. package/dist/src/ui/components/ThemeDialog.test.d.ts +0 -6
  510. package/dist/src/ui/components/ThemeDialog.test.js +0 -167
  511. package/dist/src/ui/components/ThemeDialog.test.js.map +0 -1
  512. package/dist/src/ui/components/ThemedGradient.test.d.ts +0 -6
  513. package/dist/src/ui/components/ThemedGradient.test.js +0 -30
  514. package/dist/src/ui/components/ThemedGradient.test.js.map +0 -1
  515. package/dist/src/ui/components/Tips.test.d.ts +0 -6
  516. package/dist/src/ui/components/Tips.test.js +0 -23
  517. package/dist/src/ui/components/Tips.test.js.map +0 -1
  518. package/dist/src/ui/components/ToolConfirmationQueue.test.d.ts +0 -6
  519. package/dist/src/ui/components/ToolConfirmationQueue.test.js +0 -71
  520. package/dist/src/ui/components/ToolConfirmationQueue.test.js.map +0 -1
  521. package/dist/src/ui/components/ToolStatsDisplay.test.d.ts +0 -6
  522. package/dist/src/ui/components/ToolStatsDisplay.test.js +0 -227
  523. package/dist/src/ui/components/ToolStatsDisplay.test.js.map +0 -1
  524. package/dist/src/ui/components/UpdateNotification.test.d.ts +0 -6
  525. package/dist/src/ui/components/UpdateNotification.test.js +0 -16
  526. package/dist/src/ui/components/UpdateNotification.test.js.map +0 -1
  527. package/dist/src/ui/components/ValidationDialog.test.d.ts +0 -6
  528. package/dist/src/ui/components/ValidationDialog.test.js +0 -153
  529. package/dist/src/ui/components/ValidationDialog.test.js.map +0 -1
  530. package/dist/src/ui/components/messages/CompressionMessage.test.d.ts +0 -6
  531. package/dist/src/ui/components/messages/CompressionMessage.test.js +0 -191
  532. package/dist/src/ui/components/messages/CompressionMessage.test.js.map +0 -1
  533. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +0 -6
  534. package/dist/src/ui/components/messages/DiffRenderer.test.js +0 -240
  535. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +0 -1
  536. package/dist/src/ui/components/messages/ErrorMessage.test.d.ts +0 -6
  537. package/dist/src/ui/components/messages/ErrorMessage.test.js +0 -23
  538. package/dist/src/ui/components/messages/ErrorMessage.test.js.map +0 -1
  539. package/dist/src/ui/components/messages/GeminiMessage.test.d.ts +0 -6
  540. package/dist/src/ui/components/messages/GeminiMessage.test.js +0 -35
  541. package/dist/src/ui/components/messages/GeminiMessage.test.js.map +0 -1
  542. package/dist/src/ui/components/messages/InfoMessage.test.d.ts +0 -6
  543. package/dist/src/ui/components/messages/InfoMessage.test.js +0 -28
  544. package/dist/src/ui/components/messages/InfoMessage.test.js.map +0 -1
  545. package/dist/src/ui/components/messages/RedirectionConfirmation.test.d.ts +0 -6
  546. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js +0 -33
  547. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js.map +0 -1
  548. package/dist/src/ui/components/messages/ShellToolMessage.test.d.ts +0 -6
  549. package/dist/src/ui/components/messages/ShellToolMessage.test.js +0 -123
  550. package/dist/src/ui/components/messages/ShellToolMessage.test.js.map +0 -1
  551. package/dist/src/ui/components/messages/Todo.test.d.ts +0 -6
  552. package/dist/src/ui/components/messages/Todo.test.js +0 -114
  553. package/dist/src/ui/components/messages/Todo.test.js.map +0 -1
  554. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +0 -6
  555. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +0 -232
  556. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +0 -1
  557. package/dist/src/ui/components/messages/ToolGroupMessage.test.d.ts +0 -6
  558. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +0 -529
  559. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +0 -1
  560. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +0 -6
  561. package/dist/src/ui/components/messages/ToolMessage.test.js +0 -217
  562. package/dist/src/ui/components/messages/ToolMessage.test.js.map +0 -1
  563. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.d.ts +0 -6
  564. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js +0 -89
  565. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js.map +0 -1
  566. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.d.ts +0 -6
  567. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js +0 -62
  568. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js.map +0 -1
  569. package/dist/src/ui/components/messages/ToolResultDisplay.test.d.ts +0 -6
  570. package/dist/src/ui/components/messages/ToolResultDisplay.test.js +0 -114
  571. package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +0 -1
  572. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.d.ts +0 -6
  573. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js +0 -134
  574. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js.map +0 -1
  575. package/dist/src/ui/components/messages/UserMessage.test.d.ts +0 -6
  576. package/dist/src/ui/components/messages/UserMessage.test.js +0 -32
  577. package/dist/src/ui/components/messages/UserMessage.test.js.map +0 -1
  578. package/dist/src/ui/components/messages/WarningMessage.test.d.ts +0 -6
  579. package/dist/src/ui/components/messages/WarningMessage.test.js +0 -23
  580. package/dist/src/ui/components/messages/WarningMessage.test.js.map +0 -1
  581. package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +0 -6
  582. package/dist/src/ui/components/shared/BaseSelectionList.test.js +0 -386
  583. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +0 -1
  584. package/dist/src/ui/components/shared/BaseSettingsDialog.test.d.ts +0 -6
  585. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js +0 -434
  586. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js.map +0 -1
  587. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.d.ts +0 -6
  588. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +0 -79
  589. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +0 -1
  590. package/dist/src/ui/components/shared/EnumSelector.test.d.ts +0 -6
  591. package/dist/src/ui/components/shared/EnumSelector.test.js +0 -70
  592. package/dist/src/ui/components/shared/EnumSelector.test.js.map +0 -1
  593. package/dist/src/ui/components/shared/ExpandableText.test.d.ts +0 -6
  594. package/dist/src/ui/components/shared/ExpandableText.test.js +0 -88
  595. package/dist/src/ui/components/shared/ExpandableText.test.js.map +0 -1
  596. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.d.ts +0 -6
  597. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js +0 -34
  598. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js.map +0 -1
  599. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +0 -6
  600. package/dist/src/ui/components/shared/MaxSizedBox.test.js +0 -90
  601. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +0 -1
  602. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +0 -6
  603. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +0 -134
  604. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +0 -1
  605. package/dist/src/ui/components/shared/Scrollable.test.d.ts +0 -6
  606. package/dist/src/ui/components/shared/Scrollable.test.js +0 -74
  607. package/dist/src/ui/components/shared/Scrollable.test.js.map +0 -1
  608. package/dist/src/ui/components/shared/ScrollableList.test.d.ts +0 -6
  609. package/dist/src/ui/components/shared/ScrollableList.test.js +0 -241
  610. package/dist/src/ui/components/shared/ScrollableList.test.js.map +0 -1
  611. package/dist/src/ui/components/shared/TabHeader.test.d.ts +0 -6
  612. package/dist/src/ui/components/shared/TabHeader.test.js +0 -106
  613. package/dist/src/ui/components/shared/TabHeader.test.js.map +0 -1
  614. package/dist/src/ui/components/shared/TextInput.test.d.ts +0 -6
  615. package/dist/src/ui/components/shared/TextInput.test.js +0 -242
  616. package/dist/src/ui/components/shared/TextInput.test.js.map +0 -1
  617. package/dist/src/ui/components/shared/VirtualizedList.test.d.ts +0 -6
  618. package/dist/src/ui/components/shared/VirtualizedList.test.js +0 -171
  619. package/dist/src/ui/components/shared/VirtualizedList.test.js.map +0 -1
  620. package/dist/src/ui/components/shared/performance.test.d.ts +0 -1
  621. package/dist/src/ui/components/shared/performance.test.js +0 -67
  622. package/dist/src/ui/components/shared/performance.test.js.map +0 -1
  623. package/dist/src/ui/components/shared/text-buffer.test.d.ts +0 -6
  624. package/dist/src/ui/components/shared/text-buffer.test.js +0 -2490
  625. package/dist/src/ui/components/shared/text-buffer.test.js.map +0 -1
  626. package/dist/src/ui/components/shared/vim-buffer-actions.test.d.ts +0 -6
  627. package/dist/src/ui/components/shared/vim-buffer-actions.test.js +0 -964
  628. package/dist/src/ui/components/shared/vim-buffer-actions.test.js.map +0 -1
  629. package/dist/src/ui/components/views/ChatList.test.d.ts +0 -6
  630. package/dist/src/ui/components/views/ChatList.test.js +0 -45
  631. package/dist/src/ui/components/views/ChatList.test.js.map +0 -1
  632. package/dist/src/ui/components/views/ExtensionsList.test.d.ts +0 -6
  633. package/dist/src/ui/components/views/ExtensionsList.test.js +0 -148
  634. package/dist/src/ui/components/views/ExtensionsList.test.js.map +0 -1
  635. package/dist/src/ui/components/views/McpStatus.test.d.ts +0 -6
  636. package/dist/src/ui/components/views/McpStatus.test.js +0 -153
  637. package/dist/src/ui/components/views/McpStatus.test.js.map +0 -1
  638. package/dist/src/ui/components/views/SkillsList.test.d.ts +0 -6
  639. package/dist/src/ui/components/views/SkillsList.test.js +0 -97
  640. package/dist/src/ui/components/views/SkillsList.test.js.map +0 -1
  641. package/dist/src/ui/components/views/ToolsList.test.d.ts +0 -6
  642. package/dist/src/ui/components/views/ToolsList.test.js +0 -45
  643. package/dist/src/ui/components/views/ToolsList.test.js.map +0 -1
  644. package/dist/src/ui/contexts/KeypressContext.test.d.ts +0 -6
  645. package/dist/src/ui/contexts/KeypressContext.test.js +0 -957
  646. package/dist/src/ui/contexts/KeypressContext.test.js.map +0 -1
  647. package/dist/src/ui/contexts/MouseContext.test.d.ts +0 -6
  648. package/dist/src/ui/contexts/MouseContext.test.js +0 -198
  649. package/dist/src/ui/contexts/MouseContext.test.js.map +0 -1
  650. package/dist/src/ui/contexts/ScrollProvider.drag.test.d.ts +0 -6
  651. package/dist/src/ui/contexts/ScrollProvider.drag.test.js +0 -319
  652. package/dist/src/ui/contexts/ScrollProvider.drag.test.js.map +0 -1
  653. package/dist/src/ui/contexts/ScrollProvider.test.d.ts +0 -6
  654. package/dist/src/ui/contexts/ScrollProvider.test.js +0 -377
  655. package/dist/src/ui/contexts/ScrollProvider.test.js.map +0 -1
  656. package/dist/src/ui/contexts/SessionContext.test.d.ts +0 -6
  657. package/dist/src/ui/contexts/SessionContext.test.js +0 -198
  658. package/dist/src/ui/contexts/SessionContext.test.js.map +0 -1
  659. package/dist/src/ui/contexts/ToolActionsContext.test.d.ts +0 -6
  660. package/dist/src/ui/contexts/ToolActionsContext.test.js +0 -166
  661. package/dist/src/ui/contexts/ToolActionsContext.test.js.map +0 -1
  662. package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +0 -6
  663. package/dist/src/ui/hooks/atCommandProcessor.test.js +0 -1032
  664. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +0 -1
  665. package/dist/src/ui/hooks/atCommandProcessor_agents.test.d.ts +0 -6
  666. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js +0 -183
  667. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js.map +0 -1
  668. package/dist/src/ui/hooks/shellCommandProcessor.test.d.ts +0 -6
  669. package/dist/src/ui/hooks/shellCommandProcessor.test.js +0 -521
  670. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +0 -1
  671. package/dist/src/ui/hooks/slashCommandProcessor.test.d.ts +0 -6
  672. package/dist/src/ui/hooks/slashCommandProcessor.test.js +0 -796
  673. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +0 -1
  674. package/dist/src/ui/hooks/toolMapping.test.d.ts +0 -6
  675. package/dist/src/ui/hooks/toolMapping.test.js +0 -209
  676. package/dist/src/ui/hooks/toolMapping.test.js.map +0 -1
  677. package/dist/src/ui/hooks/useAnimatedScrollbar.test.d.ts +0 -6
  678. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js +0 -85
  679. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js.map +0 -1
  680. package/dist/src/ui/hooks/useApprovalModeIndicator.test.d.ts +0 -6
  681. package/dist/src/ui/hooks/useApprovalModeIndicator.test.js +0 -435
  682. package/dist/src/ui/hooks/useApprovalModeIndicator.test.js.map +0 -1
  683. package/dist/src/ui/hooks/useAtCompletion.test.d.ts +0 -6
  684. package/dist/src/ui/hooks/useAtCompletion.test.js +0 -417
  685. package/dist/src/ui/hooks/useAtCompletion.test.js.map +0 -1
  686. package/dist/src/ui/hooks/useAtCompletion_agents.test.d.ts +0 -6
  687. package/dist/src/ui/hooks/useAtCompletion_agents.test.js +0 -87
  688. package/dist/src/ui/hooks/useAtCompletion_agents.test.js.map +0 -1
  689. package/dist/src/ui/hooks/useBanner.test.d.ts +0 -6
  690. package/dist/src/ui/hooks/useBanner.test.js +0 -92
  691. package/dist/src/ui/hooks/useBanner.test.js.map +0 -1
  692. package/dist/src/ui/hooks/useBatchedScroll.test.d.ts +0 -6
  693. package/dist/src/ui/hooks/useBatchedScroll.test.js +0 -62
  694. package/dist/src/ui/hooks/useBatchedScroll.test.js.map +0 -1
  695. package/dist/src/ui/hooks/useCommandCompletion.test.d.ts +0 -6
  696. package/dist/src/ui/hooks/useCommandCompletion.test.js +0 -462
  697. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +0 -1
  698. package/dist/src/ui/hooks/useConsoleMessages.test.d.ts +0 -6
  699. package/dist/src/ui/hooks/useConsoleMessages.test.js +0 -159
  700. package/dist/src/ui/hooks/useConsoleMessages.test.js.map +0 -1
  701. package/dist/src/ui/hooks/useEditorSettings.test.d.ts +0 -6
  702. package/dist/src/ui/hooks/useEditorSettings.test.js +0 -179
  703. package/dist/src/ui/hooks/useEditorSettings.test.js.map +0 -1
  704. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +0 -6
  705. package/dist/src/ui/hooks/useExtensionUpdates.test.js +0 -279
  706. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +0 -1
  707. package/dist/src/ui/hooks/useFlickerDetector.test.d.ts +0 -6
  708. package/dist/src/ui/hooks/useFlickerDetector.test.js +0 -106
  709. package/dist/src/ui/hooks/useFlickerDetector.test.js.map +0 -1
  710. package/dist/src/ui/hooks/useFocus.test.d.ts +0 -6
  711. package/dist/src/ui/hooks/useFocus.test.js +0 -131
  712. package/dist/src/ui/hooks/useFocus.test.js.map +0 -1
  713. package/dist/src/ui/hooks/useFolderTrust.test.d.ts +0 -6
  714. package/dist/src/ui/hooks/useFolderTrust.test.js +0 -218
  715. package/dist/src/ui/hooks/useFolderTrust.test.js.map +0 -1
  716. package/dist/src/ui/hooks/useGeminiStream.test.d.ts +0 -6
  717. package/dist/src/ui/hooks/useGeminiStream.test.js +0 -2149
  718. package/dist/src/ui/hooks/useGeminiStream.test.js.map +0 -1
  719. package/dist/src/ui/hooks/useGitBranchName.test.d.ts +0 -6
  720. package/dist/src/ui/hooks/useGitBranchName.test.js +0 -183
  721. package/dist/src/ui/hooks/useGitBranchName.test.js.map +0 -1
  722. package/dist/src/ui/hooks/useHistoryManager.test.d.ts +0 -6
  723. package/dist/src/ui/hooks/useHistoryManager.test.js +0 -188
  724. package/dist/src/ui/hooks/useHistoryManager.test.js.map +0 -1
  725. package/dist/src/ui/hooks/useHookDisplayState.test.d.ts +0 -6
  726. package/dist/src/ui/hooks/useHookDisplayState.test.js +0 -180
  727. package/dist/src/ui/hooks/useHookDisplayState.test.js.map +0 -1
  728. package/dist/src/ui/hooks/useIdeTrustListener.test.d.ts +0 -6
  729. package/dist/src/ui/hooks/useIdeTrustListener.test.js +0 -214
  730. package/dist/src/ui/hooks/useIdeTrustListener.test.js.map +0 -1
  731. package/dist/src/ui/hooks/useIncludeDirsTrust.test.d.ts +0 -6
  732. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js +0 -172
  733. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js.map +0 -1
  734. package/dist/src/ui/hooks/useInputHistory.test.d.ts +0 -6
  735. package/dist/src/ui/hooks/useInputHistory.test.js +0 -208
  736. package/dist/src/ui/hooks/useInputHistory.test.js.map +0 -1
  737. package/dist/src/ui/hooks/useInputHistoryStore.test.d.ts +0 -6
  738. package/dist/src/ui/hooks/useInputHistoryStore.test.js +0 -238
  739. package/dist/src/ui/hooks/useInputHistoryStore.test.js.map +0 -1
  740. package/dist/src/ui/hooks/useKeypress.test.d.ts +0 -6
  741. package/dist/src/ui/hooks/useKeypress.test.js +0 -205
  742. package/dist/src/ui/hooks/useKeypress.test.js.map +0 -1
  743. package/dist/src/ui/hooks/useLoadingIndicator.test.d.ts +0 -6
  744. package/dist/src/ui/hooks/useLoadingIndicator.test.js +0 -145
  745. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +0 -1
  746. package/dist/src/ui/hooks/useMcpStatus.test.d.ts +0 -6
  747. package/dist/src/ui/hooks/useMcpStatus.test.js +0 -69
  748. package/dist/src/ui/hooks/useMcpStatus.test.js.map +0 -1
  749. package/dist/src/ui/hooks/useMemoryMonitor.test.d.ts +0 -6
  750. package/dist/src/ui/hooks/useMemoryMonitor.test.js +0 -62
  751. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +0 -1
  752. package/dist/src/ui/hooks/useMessageQueue.test.d.ts +0 -6
  753. package/dist/src/ui/hooks/useMessageQueue.test.js +0 -327
  754. package/dist/src/ui/hooks/useMessageQueue.test.js.map +0 -1
  755. package/dist/src/ui/hooks/useModelCommand.test.d.ts +0 -6
  756. package/dist/src/ui/hooks/useModelCommand.test.js +0 -45
  757. package/dist/src/ui/hooks/useModelCommand.test.js.map +0 -1
  758. package/dist/src/ui/hooks/useMouse.test.d.ts +0 -6
  759. package/dist/src/ui/hooks/useMouse.test.js +0 -57
  760. package/dist/src/ui/hooks/useMouse.test.js.map +0 -1
  761. package/dist/src/ui/hooks/useMouseClick.test.d.ts +0 -6
  762. package/dist/src/ui/hooks/useMouseClick.test.js +0 -59
  763. package/dist/src/ui/hooks/useMouseClick.test.js.map +0 -1
  764. package/dist/src/ui/hooks/useMouseDoubleClick.test.d.ts +0 -6
  765. package/dist/src/ui/hooks/useMouseDoubleClick.test.js +0 -125
  766. package/dist/src/ui/hooks/useMouseDoubleClick.test.js.map +0 -1
  767. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +0 -6
  768. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +0 -291
  769. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +0 -1
  770. package/dist/src/ui/hooks/usePhraseCycler.test.d.ts +0 -6
  771. package/dist/src/ui/hooks/usePhraseCycler.test.js +0 -208
  772. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +0 -1
  773. package/dist/src/ui/hooks/usePrivacySettings.test.d.ts +0 -6
  774. package/dist/src/ui/hooks/usePrivacySettings.test.js +0 -104
  775. package/dist/src/ui/hooks/usePrivacySettings.test.js.map +0 -1
  776. package/dist/src/ui/hooks/useQuotaAndFallback.test.d.ts +0 -6
  777. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +0 -477
  778. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +0 -1
  779. package/dist/src/ui/hooks/useReactToolScheduler.test.d.ts +0 -6
  780. package/dist/src/ui/hooks/useReactToolScheduler.test.js +0 -58
  781. package/dist/src/ui/hooks/useReactToolScheduler.test.js.map +0 -1
  782. package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +0 -6
  783. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +0 -169
  784. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +0 -1
  785. package/dist/src/ui/hooks/useRewind.test.d.ts +0 -6
  786. package/dist/src/ui/hooks/useRewind.test.js +0 -100
  787. package/dist/src/ui/hooks/useRewind.test.js.map +0 -1
  788. package/dist/src/ui/hooks/useSelectionList.test.d.ts +0 -6
  789. package/dist/src/ui/hooks/useSelectionList.test.js +0 -848
  790. package/dist/src/ui/hooks/useSelectionList.test.js.map +0 -1
  791. package/dist/src/ui/hooks/useSessionBrowser.test.d.ts +0 -6
  792. package/dist/src/ui/hooks/useSessionBrowser.test.js +0 -203
  793. package/dist/src/ui/hooks/useSessionBrowser.test.js.map +0 -1
  794. package/dist/src/ui/hooks/useSessionResume.test.d.ts +0 -6
  795. package/dist/src/ui/hooks/useSessionResume.test.js +0 -336
  796. package/dist/src/ui/hooks/useSessionResume.test.js.map +0 -1
  797. package/dist/src/ui/hooks/useShellHistory.test.d.ts +0 -6
  798. package/dist/src/ui/hooks/useShellHistory.test.js +0 -223
  799. package/dist/src/ui/hooks/useShellHistory.test.js.map +0 -1
  800. package/dist/src/ui/hooks/useShellInactivityStatus.test.d.ts +0 -6
  801. package/dist/src/ui/hooks/useShellInactivityStatus.test.js +0 -84
  802. package/dist/src/ui/hooks/useShellInactivityStatus.test.js.map +0 -1
  803. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +0 -9
  804. package/dist/src/ui/hooks/useSlashCompletion.test.js +0 -845
  805. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +0 -1
  806. package/dist/src/ui/hooks/useSnowfall.test.d.ts +0 -6
  807. package/dist/src/ui/hooks/useSnowfall.test.js +0 -88
  808. package/dist/src/ui/hooks/useSnowfall.test.js.map +0 -1
  809. package/dist/src/ui/hooks/useTabbedNavigation.test.d.ts +0 -6
  810. package/dist/src/ui/hooks/useTabbedNavigation.test.js +0 -187
  811. package/dist/src/ui/hooks/useTabbedNavigation.test.js.map +0 -1
  812. package/dist/src/ui/hooks/useTimer.test.d.ts +0 -6
  813. package/dist/src/ui/hooks/useTimer.test.js +0 -119
  814. package/dist/src/ui/hooks/useTimer.test.js.map +0 -1
  815. package/dist/src/ui/hooks/useTips.test.d.ts +0 -6
  816. package/dist/src/ui/hooks/useTips.test.js +0 -33
  817. package/dist/src/ui/hooks/useTips.test.js.map +0 -1
  818. package/dist/src/ui/hooks/useToolExecutionScheduler.test.d.ts +0 -6
  819. package/dist/src/ui/hooks/useToolExecutionScheduler.test.js +0 -376
  820. package/dist/src/ui/hooks/useToolExecutionScheduler.test.js.map +0 -1
  821. package/dist/src/ui/hooks/useToolScheduler.test.d.ts +0 -6
  822. package/dist/src/ui/hooks/useToolScheduler.test.js +0 -881
  823. package/dist/src/ui/hooks/useToolScheduler.test.js.map +0 -1
  824. package/dist/src/ui/hooks/useToolSchedulerFacade.test.d.ts +0 -6
  825. package/dist/src/ui/hooks/useToolSchedulerFacade.test.js +0 -45
  826. package/dist/src/ui/hooks/useToolSchedulerFacade.test.js.map +0 -1
  827. package/dist/src/ui/hooks/useTurnActivityMonitor.test.d.ts +0 -6
  828. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js +0 -97
  829. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js.map +0 -1
  830. package/dist/src/ui/hooks/vim.test.d.ts +0 -6
  831. package/dist/src/ui/hooks/vim.test.js +0 -1384
  832. package/dist/src/ui/hooks/vim.test.js.map +0 -1
  833. package/dist/src/ui/keyMatchers.test.d.ts +0 -6
  834. package/dist/src/ui/keyMatchers.test.js +0 -386
  835. package/dist/src/ui/keyMatchers.test.js.map +0 -1
  836. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.d.ts +0 -6
  837. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js +0 -121
  838. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js.map +0 -1
  839. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.d.ts +0 -6
  840. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js +0 -34
  841. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js.map +0 -1
  842. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.d.ts +0 -6
  843. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js +0 -34
  844. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js.map +0 -1
  845. package/dist/src/ui/privacy/PrivacyNotice.test.d.ts +0 -6
  846. package/dist/src/ui/privacy/PrivacyNotice.test.js +0 -62
  847. package/dist/src/ui/privacy/PrivacyNotice.test.js.map +0 -1
  848. package/dist/src/ui/state/extensions.test.d.ts +0 -6
  849. package/dist/src/ui/state/extensions.test.js +0 -219
  850. package/dist/src/ui/state/extensions.test.js.map +0 -1
  851. package/dist/src/ui/themes/color-utils.test.d.ts +0 -6
  852. package/dist/src/ui/themes/color-utils.test.js +0 -245
  853. package/dist/src/ui/themes/color-utils.test.js.map +0 -1
  854. package/dist/src/ui/themes/theme-manager.test.d.ts +0 -6
  855. package/dist/src/ui/themes/theme-manager.test.js +0 -150
  856. package/dist/src/ui/themes/theme-manager.test.js.map +0 -1
  857. package/dist/src/ui/themes/theme.test.d.ts +0 -6
  858. package/dist/src/ui/themes/theme.test.js +0 -174
  859. package/dist/src/ui/themes/theme.test.js.map +0 -1
  860. package/dist/src/ui/utils/CodeColorizer.test.d.ts +0 -6
  861. package/dist/src/ui/utils/CodeColorizer.test.js +0 -38
  862. package/dist/src/ui/utils/CodeColorizer.test.js.map +0 -1
  863. package/dist/src/ui/utils/InlineMarkdownRenderer.test.d.ts +0 -6
  864. package/dist/src/ui/utils/InlineMarkdownRenderer.test.js +0 -21
  865. package/dist/src/ui/utils/InlineMarkdownRenderer.test.js.map +0 -1
  866. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +0 -6
  867. package/dist/src/ui/utils/MarkdownDisplay.test.js +0 -159
  868. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +0 -1
  869. package/dist/src/ui/utils/clipboardUtils.test.d.ts +0 -6
  870. package/dist/src/ui/utils/clipboardUtils.test.js +0 -359
  871. package/dist/src/ui/utils/clipboardUtils.test.js.map +0 -1
  872. package/dist/src/ui/utils/clipboardUtils.windows.test.d.ts +0 -6
  873. package/dist/src/ui/utils/clipboardUtils.windows.test.js +0 -55
  874. package/dist/src/ui/utils/clipboardUtils.windows.test.js.map +0 -1
  875. package/dist/src/ui/utils/commandUtils.test.d.ts +0 -6
  876. package/dist/src/ui/utils/commandUtils.test.js +0 -479
  877. package/dist/src/ui/utils/commandUtils.test.js.map +0 -1
  878. package/dist/src/ui/utils/computeStats.test.d.ts +0 -6
  879. package/dist/src/ui/utils/computeStats.test.js +0 -271
  880. package/dist/src/ui/utils/computeStats.test.js.map +0 -1
  881. package/dist/src/ui/utils/directoryUtils.test.d.ts +0 -6
  882. package/dist/src/ui/utils/directoryUtils.test.js +0 -244
  883. package/dist/src/ui/utils/directoryUtils.test.js.map +0 -1
  884. package/dist/src/ui/utils/displayUtils.test.d.ts +0 -6
  885. package/dist/src/ui/utils/displayUtils.test.js +0 -61
  886. package/dist/src/ui/utils/displayUtils.test.js.map +0 -1
  887. package/dist/src/ui/utils/formatters.test.d.ts +0 -6
  888. package/dist/src/ui/utils/formatters.test.js +0 -124
  889. package/dist/src/ui/utils/formatters.test.js.map +0 -1
  890. package/dist/src/ui/utils/highlight.test.d.ts +0 -6
  891. package/dist/src/ui/utils/highlight.test.js +0 -198
  892. package/dist/src/ui/utils/highlight.test.js.map +0 -1
  893. package/dist/src/ui/utils/input.test.d.ts +0 -6
  894. package/dist/src/ui/utils/input.test.js +0 -44
  895. package/dist/src/ui/utils/input.test.js.map +0 -1
  896. package/dist/src/ui/utils/markdownUtilities.test.d.ts +0 -6
  897. package/dist/src/ui/utils/markdownUtilities.test.js +0 -42
  898. package/dist/src/ui/utils/markdownUtilities.test.js.map +0 -1
  899. package/dist/src/ui/utils/mouse.test.d.ts +0 -6
  900. package/dist/src/ui/utils/mouse.test.js +0 -136
  901. package/dist/src/ui/utils/mouse.test.js.map +0 -1
  902. package/dist/src/ui/utils/rewindFileOps.test.d.ts +0 -6
  903. package/dist/src/ui/utils/rewindFileOps.test.js +0 -375
  904. package/dist/src/ui/utils/rewindFileOps.test.js.map +0 -1
  905. package/dist/src/ui/utils/terminalCapabilityManager.test.d.ts +0 -6
  906. package/dist/src/ui/utils/terminalCapabilityManager.test.js +0 -220
  907. package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +0 -1
  908. package/dist/src/ui/utils/terminalSetup.test.d.ts +0 -6
  909. package/dist/src/ui/utils/terminalSetup.test.js +0 -147
  910. package/dist/src/ui/utils/terminalSetup.test.js.map +0 -1
  911. package/dist/src/ui/utils/terminalUtils.test.d.ts +0 -6
  912. package/dist/src/ui/utils/terminalUtils.test.js +0 -40
  913. package/dist/src/ui/utils/terminalUtils.test.js.map +0 -1
  914. package/dist/src/ui/utils/textOutput.test.d.ts +0 -6
  915. package/dist/src/ui/utils/textOutput.test.js +0 -79
  916. package/dist/src/ui/utils/textOutput.test.js.map +0 -1
  917. package/dist/src/ui/utils/textUtils.test.d.ts +0 -6
  918. package/dist/src/ui/utils/textUtils.test.js +0 -168
  919. package/dist/src/ui/utils/textUtils.test.js.map +0 -1
  920. package/dist/src/ui/utils/ui-sizing.test.d.ts +0 -6
  921. package/dist/src/ui/utils/ui-sizing.test.js +0 -38
  922. package/dist/src/ui/utils/ui-sizing.test.js.map +0 -1
  923. package/dist/src/ui/utils/updateCheck.test.d.ts +0 -6
  924. package/dist/src/ui/utils/updateCheck.test.js +0 -134
  925. package/dist/src/ui/utils/updateCheck.test.js.map +0 -1
  926. package/dist/src/utils/agentUtils.test.d.ts +0 -6
  927. package/dist/src/utils/agentUtils.test.js +0 -121
  928. package/dist/src/utils/agentUtils.test.js.map +0 -1
  929. package/dist/src/utils/checks.test.d.ts +0 -6
  930. package/dist/src/utils/checks.test.js +0 -29
  931. package/dist/src/utils/checks.test.js.map +0 -1
  932. package/dist/src/utils/cleanup.test.d.ts +0 -6
  933. package/dist/src/utils/cleanup.test.js +0 -92
  934. package/dist/src/utils/cleanup.test.js.map +0 -1
  935. package/dist/src/utils/commands.test.d.ts +0 -6
  936. package/dist/src/utils/commands.test.js +0 -115
  937. package/dist/src/utils/commands.test.js.map +0 -1
  938. package/dist/src/utils/commentJson.test.d.ts +0 -6
  939. package/dist/src/utils/commentJson.test.js +0 -308
  940. package/dist/src/utils/commentJson.test.js.map +0 -1
  941. package/dist/src/utils/deepMerge.test.d.ts +0 -6
  942. package/dist/src/utils/deepMerge.test.js +0 -201
  943. package/dist/src/utils/deepMerge.test.js.map +0 -1
  944. package/dist/src/utils/dialogScopeUtils.test.d.ts +0 -6
  945. package/dist/src/utils/dialogScopeUtils.test.js +0 -81
  946. package/dist/src/utils/dialogScopeUtils.test.js.map +0 -1
  947. package/dist/src/utils/envVarResolver.test.d.ts +0 -6
  948. package/dist/src/utils/envVarResolver.test.js +0 -221
  949. package/dist/src/utils/envVarResolver.test.js.map +0 -1
  950. package/dist/src/utils/errors.test.d.ts +0 -6
  951. package/dist/src/utils/errors.test.js +0 -435
  952. package/dist/src/utils/errors.test.js.map +0 -1
  953. package/dist/src/utils/events.test.d.ts +0 -6
  954. package/dist/src/utils/events.test.js +0 -24
  955. package/dist/src/utils/events.test.js.map +0 -1
  956. package/dist/src/utils/gitUtils.test.d.ts +0 -6
  957. package/dist/src/utils/gitUtils.test.js +0 -113
  958. package/dist/src/utils/gitUtils.test.js.map +0 -1
  959. package/dist/src/utils/handleAutoUpdate.test.d.ts +0 -6
  960. package/dist/src/utils/handleAutoUpdate.test.js +0 -310
  961. package/dist/src/utils/handleAutoUpdate.test.js.map +0 -1
  962. package/dist/src/utils/installationInfo.test.d.ts +0 -6
  963. package/dist/src/utils/installationInfo.test.js +0 -296
  964. package/dist/src/utils/installationInfo.test.js.map +0 -1
  965. package/dist/src/utils/jsonoutput.test.d.ts +0 -6
  966. package/dist/src/utils/jsonoutput.test.js +0 -74
  967. package/dist/src/utils/jsonoutput.test.js.map +0 -1
  968. package/dist/src/utils/math.test.d.ts +0 -6
  969. package/dist/src/utils/math.test.js +0 -23
  970. package/dist/src/utils/math.test.js.map +0 -1
  971. package/dist/src/utils/persistentState.test.d.ts +0 -6
  972. package/dist/src/utils/persistentState.test.js +0 -68
  973. package/dist/src/utils/persistentState.test.js.map +0 -1
  974. package/dist/src/utils/processUtils.test.d.ts +0 -6
  975. package/dist/src/utils/processUtils.test.js +0 -20
  976. package/dist/src/utils/processUtils.test.js.map +0 -1
  977. package/dist/src/utils/readStdin.test.d.ts +0 -6
  978. package/dist/src/utils/readStdin.test.js +0 -117
  979. package/dist/src/utils/readStdin.test.js.map +0 -1
  980. package/dist/src/utils/readStdin_safety.test.d.ts +0 -6
  981. package/dist/src/utils/readStdin_safety.test.js +0 -68
  982. package/dist/src/utils/readStdin_safety.test.js.map +0 -1
  983. package/dist/src/utils/relaunch.test.d.ts +0 -6
  984. package/dist/src/utils/relaunch.test.js +0 -279
  985. package/dist/src/utils/relaunch.test.js.map +0 -1
  986. package/dist/src/utils/resolvePath.test.d.ts +0 -6
  987. package/dist/src/utils/resolvePath.test.js +0 -34
  988. package/dist/src/utils/resolvePath.test.js.map +0 -1
  989. package/dist/src/utils/sandbox.test.d.ts +0 -6
  990. package/dist/src/utils/sandbox.test.js +0 -314
  991. package/dist/src/utils/sandbox.test.js.map +0 -1
  992. package/dist/src/utils/sandboxUtils.test.d.ts +0 -6
  993. package/dist/src/utils/sandboxUtils.test.js +0 -122
  994. package/dist/src/utils/sandboxUtils.test.js.map +0 -1
  995. package/dist/src/utils/sessionCleanup.integration.test.d.ts +0 -6
  996. package/dist/src/utils/sessionCleanup.integration.test.js +0 -182
  997. package/dist/src/utils/sessionCleanup.integration.test.js.map +0 -1
  998. package/dist/src/utils/sessionCleanup.test.d.ts +0 -6
  999. package/dist/src/utils/sessionCleanup.test.js +0 -1298
  1000. package/dist/src/utils/sessionCleanup.test.js.map +0 -1
  1001. package/dist/src/utils/sessionUtils.test.d.ts +0 -6
  1002. package/dist/src/utils/sessionUtils.test.js +0 -503
  1003. package/dist/src/utils/sessionUtils.test.js.map +0 -1
  1004. package/dist/src/utils/sessions.test.d.ts +0 -6
  1005. package/dist/src/utils/sessions.test.js +0 -581
  1006. package/dist/src/utils/sessions.test.js.map +0 -1
  1007. package/dist/src/utils/settingsUtils.test.d.ts +0 -6
  1008. package/dist/src/utils/settingsUtils.test.js +0 -808
  1009. package/dist/src/utils/settingsUtils.test.js.map +0 -1
  1010. package/dist/src/utils/skillUtils.test.d.ts +0 -6
  1011. package/dist/src/utils/skillUtils.test.js +0 -70
  1012. package/dist/src/utils/skillUtils.test.js.map +0 -1
  1013. package/dist/src/utils/startupWarnings.test.d.ts +0 -6
  1014. package/dist/src/utils/startupWarnings.test.js +0 -61
  1015. package/dist/src/utils/startupWarnings.test.js.map +0 -1
  1016. package/dist/src/utils/updateEventEmitter.test.d.ts +0 -6
  1017. package/dist/src/utils/updateEventEmitter.test.js +0 -18
  1018. package/dist/src/utils/updateEventEmitter.test.js.map +0 -1
  1019. package/dist/src/utils/userStartupWarnings.test.d.ts +0 -6
  1020. package/dist/src/utils/userStartupWarnings.test.js +0 -98
  1021. package/dist/src/utils/userStartupWarnings.test.js.map +0 -1
  1022. package/dist/src/utils/windowTitle.test.d.ts +0 -6
  1023. package/dist/src/utils/windowTitle.test.js +0 -216
  1024. package/dist/src/utils/windowTitle.test.js.map +0 -1
  1025. package/dist/src/validateNonInterActiveAuth.test.d.ts +0 -6
  1026. package/dist/src/validateNonInterActiveAuth.test.js +0 -319
  1027. package/dist/src/validateNonInterActiveAuth.test.js.map +0 -1
  1028. package/dist/src/zed-integration/fileSystemService.test.d.ts +0 -6
  1029. package/dist/src/zed-integration/fileSystemService.test.js +0 -88
  1030. package/dist/src/zed-integration/fileSystemService.test.js.map +0 -1
  1031. package/dist/src/zed-integration/zedIntegration.test.d.ts +0 -6
  1032. package/dist/src/zed-integration/zedIntegration.test.js +0 -625
  1033. package/dist/src/zed-integration/zedIntegration.test.js.map +0 -1
  1034. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,1822 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- /// <reference types="vitest/globals" />
7
- // Mock 'os' first.
8
- import * as osActual from 'node:os'; // Import for type info for the mock factory
9
- vi.mock('os', async (importOriginal) => {
10
- const actualOs = await importOriginal();
11
- return {
12
- ...actualOs,
13
- homedir: vi.fn(() => '/mock/home/user'),
14
- platform: vi.fn(() => 'linux'),
15
- };
16
- });
17
- // Mock './settings.js' to ensure it uses the mocked 'os.homedir()' for its internal constants.
18
- vi.mock('./settings.js', async (importActual) => {
19
- const originalModule = await importActual();
20
- return {
21
- __esModule: true, // Ensure correct module shape
22
- ...originalModule, // Re-export all original members
23
- // We are relying on originalModule's USER_SETTINGS_PATH being constructed with mocked os.homedir()
24
- };
25
- });
26
- // Mock trustedFolders
27
- vi.mock('./trustedFolders.js', () => ({
28
- isWorkspaceTrusted: vi
29
- .fn()
30
- .mockReturnValue({ isTrusted: true, source: 'file' }),
31
- }));
32
- vi.mock('./settingsSchema.js', async (importOriginal) => {
33
- const actual = await importOriginal();
34
- return {
35
- ...actual,
36
- getSettingsSchema: vi.fn(actual.getSettingsSchema),
37
- };
38
- });
39
- // NOW import everything else, including the (now effectively re-exported) settings.js
40
- import * as path from 'node:path'; // Restored for MOCK_WORKSPACE_SETTINGS_PATH
41
- import { describe, it, expect, vi, beforeEach, afterEach, } from 'vitest';
42
- import * as fs from 'node:fs'; // fs will be mocked separately
43
- import stripJsonComments from 'strip-json-comments'; // Will be mocked separately
44
- import { isWorkspaceTrusted } from './trustedFolders.js';
45
- // These imports will get the versions from the vi.mock('./settings.js', ...) factory.
46
- import { loadSettings, USER_SETTINGS_PATH, // This IS the mocked path.
47
- getSystemSettingsPath, getSystemDefaultsPath, saveSettings, getDefaultsFromSchema, loadEnvironment, migrateDeprecatedSettings, SettingScope, LoadedSettings, } from './settings.js';
48
- import { FatalConfigError, GEMINI_DIR } from '@didim365/agent-cli-core';
49
- import { updateSettingsFilePreservingFormat } from '../utils/commentJson.js';
50
- import { getSettingsSchema, MergeStrategy, } from './settingsSchema.js';
51
- const MOCK_WORKSPACE_DIR = '/mock/workspace';
52
- // Use the (mocked) GEMINI_DIR for consistency
53
- const MOCK_WORKSPACE_SETTINGS_PATH = path.join(MOCK_WORKSPACE_DIR, GEMINI_DIR, 'settings.json');
54
- vi.mock('fs', async (importOriginal) => {
55
- // Get all the functions from the real 'fs' module
56
- const actualFs = await importOriginal();
57
- return {
58
- ...actualFs, // Keep all the real functions
59
- // Now, just override the ones we need for the test
60
- existsSync: vi.fn(),
61
- readFileSync: vi.fn(),
62
- writeFileSync: vi.fn(),
63
- mkdirSync: vi.fn(),
64
- realpathSync: (p) => p,
65
- };
66
- });
67
- vi.mock('./extension.js');
68
- const mockCoreEvents = vi.hoisted(() => ({
69
- emitFeedback: vi.fn(),
70
- emitSettingsChanged: vi.fn(),
71
- }));
72
- vi.mock('@didim365/agent-cli-core', async (importOriginal) => {
73
- const actual = await importOriginal();
74
- return {
75
- ...actual,
76
- coreEvents: mockCoreEvents,
77
- };
78
- });
79
- vi.mock('../utils/commentJson.js', () => ({
80
- updateSettingsFilePreservingFormat: vi.fn(),
81
- }));
82
- vi.mock('strip-json-comments', () => ({
83
- default: vi.fn((content) => content),
84
- }));
85
- describe('Settings Loading and Merging', () => {
86
- let mockFsExistsSync;
87
- let mockStripJsonComments;
88
- let mockFsMkdirSync;
89
- beforeEach(() => {
90
- vi.resetAllMocks();
91
- mockFsExistsSync = vi.mocked(fs.existsSync);
92
- mockFsMkdirSync = vi.mocked(fs.mkdirSync);
93
- mockStripJsonComments = vi.mocked(stripJsonComments);
94
- vi.mocked(osActual.homedir).mockReturnValue('/mock/home/user');
95
- mockStripJsonComments.mockImplementation((jsonString) => jsonString);
96
- mockFsExistsSync.mockReturnValue(false);
97
- fs.readFileSync.mockReturnValue('{}'); // Return valid empty JSON
98
- mockFsMkdirSync.mockImplementation(() => undefined);
99
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
100
- isTrusted: true,
101
- source: 'file',
102
- });
103
- });
104
- afterEach(() => {
105
- vi.restoreAllMocks();
106
- });
107
- describe('loadSettings', () => {
108
- it.each([
109
- {
110
- scope: 'system',
111
- path: getSystemSettingsPath(),
112
- content: {
113
- ui: { theme: 'system-default' },
114
- tools: { sandbox: false },
115
- },
116
- },
117
- {
118
- scope: 'user',
119
- path: USER_SETTINGS_PATH,
120
- content: {
121
- ui: { theme: 'dark' },
122
- context: { fileName: 'USER_CONTEXT.md' },
123
- },
124
- },
125
- {
126
- scope: 'workspace',
127
- path: MOCK_WORKSPACE_SETTINGS_PATH,
128
- content: {
129
- tools: { sandbox: true },
130
- context: { fileName: 'WORKSPACE_CONTEXT.md' },
131
- },
132
- },
133
- ])('should load $scope settings if only $scope file exists', ({ scope, path, content }) => {
134
- mockFsExistsSync.mockImplementation((p) => p === path);
135
- fs.readFileSync.mockImplementation((p) => {
136
- if (p === path)
137
- return JSON.stringify(content);
138
- return '{}';
139
- });
140
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
141
- expect(fs.readFileSync).toHaveBeenCalledWith(path, 'utf-8');
142
- expect(settings[scope].settings).toEqual(content);
143
- expect(settings.merged).toMatchObject(content);
144
- });
145
- it('should merge system, user and workspace settings, with system taking precedence over workspace, and workspace over user', () => {
146
- mockFsExistsSync.mockImplementation((p) => p === getSystemSettingsPath() ||
147
- p === USER_SETTINGS_PATH ||
148
- p === MOCK_WORKSPACE_SETTINGS_PATH);
149
- const systemSettingsContent = {
150
- ui: {
151
- theme: 'system-theme',
152
- },
153
- tools: {
154
- sandbox: false,
155
- },
156
- mcp: {
157
- allowed: ['server1', 'server2'],
158
- },
159
- telemetry: { enabled: false },
160
- };
161
- const userSettingsContent = {
162
- ui: {
163
- theme: 'dark',
164
- },
165
- tools: {
166
- sandbox: true,
167
- },
168
- context: {
169
- fileName: 'USER_CONTEXT.md',
170
- },
171
- };
172
- const workspaceSettingsContent = {
173
- tools: {
174
- sandbox: false,
175
- core: ['tool1'],
176
- },
177
- context: {
178
- fileName: 'WORKSPACE_CONTEXT.md',
179
- },
180
- mcp: {
181
- allowed: ['server1', 'server2', 'server3'],
182
- },
183
- };
184
- fs.readFileSync.mockImplementation((p) => {
185
- if (p === getSystemSettingsPath())
186
- return JSON.stringify(systemSettingsContent);
187
- if (p === USER_SETTINGS_PATH)
188
- return JSON.stringify(userSettingsContent);
189
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
190
- return JSON.stringify(workspaceSettingsContent);
191
- return '';
192
- });
193
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
194
- expect(settings.system.settings).toEqual(systemSettingsContent);
195
- expect(settings.user.settings).toEqual(userSettingsContent);
196
- expect(settings.workspace.settings).toEqual(workspaceSettingsContent);
197
- expect(settings.merged).toMatchObject({
198
- ui: {
199
- theme: 'system-theme',
200
- },
201
- tools: {
202
- sandbox: false,
203
- core: ['tool1'],
204
- },
205
- telemetry: { enabled: false },
206
- context: {
207
- fileName: 'WORKSPACE_CONTEXT.md',
208
- },
209
- mcp: {
210
- allowed: ['server1', 'server2'],
211
- },
212
- });
213
- });
214
- it('should merge all settings files with the correct precedence', () => {
215
- // Mock schema to test defaults application
216
- const mockSchema = {
217
- ui: { type: 'object', default: {}, properties: {} },
218
- tools: { type: 'object', default: {}, properties: {} },
219
- context: {
220
- type: 'object',
221
- default: {},
222
- properties: {
223
- discoveryMaxDirs: { type: 'number', default: 200 },
224
- includeDirectories: {
225
- type: 'array',
226
- default: [],
227
- mergeStrategy: MergeStrategy.CONCAT,
228
- },
229
- },
230
- },
231
- mcpServers: { type: 'object', default: {} },
232
- };
233
- getSettingsSchema.mockReturnValue(mockSchema);
234
- mockFsExistsSync.mockReturnValue(true);
235
- const systemDefaultsContent = {
236
- ui: {
237
- theme: 'default-theme',
238
- },
239
- tools: {
240
- sandbox: true,
241
- },
242
- telemetry: true,
243
- context: {
244
- includeDirectories: ['/system/defaults/dir'],
245
- },
246
- };
247
- const userSettingsContent = {
248
- ui: {
249
- theme: 'user-theme',
250
- },
251
- context: {
252
- fileName: 'USER_CONTEXT.md',
253
- includeDirectories: ['/user/dir1', '/user/dir2'],
254
- },
255
- };
256
- const workspaceSettingsContent = {
257
- tools: {
258
- sandbox: false,
259
- },
260
- context: {
261
- fileName: 'WORKSPACE_CONTEXT.md',
262
- includeDirectories: ['/workspace/dir'],
263
- },
264
- };
265
- const systemSettingsContent = {
266
- ui: {
267
- theme: 'system-theme',
268
- },
269
- telemetry: false,
270
- context: {
271
- includeDirectories: ['/system/dir'],
272
- },
273
- };
274
- fs.readFileSync.mockImplementation((p) => {
275
- if (p === getSystemDefaultsPath())
276
- return JSON.stringify(systemDefaultsContent);
277
- if (p === getSystemSettingsPath())
278
- return JSON.stringify(systemSettingsContent);
279
- if (p === USER_SETTINGS_PATH)
280
- return JSON.stringify(userSettingsContent);
281
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
282
- return JSON.stringify(workspaceSettingsContent);
283
- return '';
284
- });
285
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
286
- expect(settings.systemDefaults.settings).toEqual(systemDefaultsContent);
287
- expect(settings.system.settings).toEqual(systemSettingsContent);
288
- expect(settings.user.settings).toEqual(userSettingsContent);
289
- expect(settings.workspace.settings).toEqual(workspaceSettingsContent);
290
- expect(settings.merged).toEqual({
291
- context: {
292
- discoveryMaxDirs: 200,
293
- includeDirectories: [
294
- '/system/defaults/dir',
295
- '/user/dir1',
296
- '/user/dir2',
297
- '/workspace/dir',
298
- '/system/dir',
299
- ],
300
- fileName: 'WORKSPACE_CONTEXT.md',
301
- },
302
- mcpServers: {},
303
- ui: { theme: 'system-theme' },
304
- tools: { sandbox: false },
305
- telemetry: false,
306
- });
307
- });
308
- it('should use folderTrust from workspace settings when trusted', () => {
309
- mockFsExistsSync.mockReturnValue(true);
310
- const userSettingsContent = {
311
- security: {
312
- folderTrust: {
313
- enabled: true,
314
- },
315
- },
316
- };
317
- const workspaceSettingsContent = {
318
- security: {
319
- folderTrust: {
320
- enabled: false, // This should be used
321
- },
322
- },
323
- };
324
- const systemSettingsContent = {
325
- // No folderTrust here
326
- };
327
- fs.readFileSync.mockImplementation((p) => {
328
- if (p === getSystemSettingsPath())
329
- return JSON.stringify(systemSettingsContent);
330
- if (p === USER_SETTINGS_PATH)
331
- return JSON.stringify(userSettingsContent);
332
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
333
- return JSON.stringify(workspaceSettingsContent);
334
- return '{}';
335
- });
336
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
337
- expect(settings.merged.security?.folderTrust?.enabled).toBe(false); // Workspace setting should be used
338
- });
339
- it('should use system folderTrust over user setting', () => {
340
- mockFsExistsSync.mockReturnValue(true);
341
- const userSettingsContent = {
342
- security: {
343
- folderTrust: {
344
- enabled: false,
345
- },
346
- },
347
- };
348
- const workspaceSettingsContent = {
349
- security: {
350
- folderTrust: {
351
- enabled: true, // This should be ignored
352
- },
353
- },
354
- };
355
- const systemSettingsContent = {
356
- security: {
357
- folderTrust: {
358
- enabled: true,
359
- },
360
- },
361
- };
362
- fs.readFileSync.mockImplementation((p) => {
363
- if (p === getSystemSettingsPath())
364
- return JSON.stringify(systemSettingsContent);
365
- if (p === USER_SETTINGS_PATH)
366
- return JSON.stringify(userSettingsContent);
367
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
368
- return JSON.stringify(workspaceSettingsContent);
369
- return '{}';
370
- });
371
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
372
- expect(settings.merged.security?.folderTrust?.enabled).toBe(true); // System setting should be used
373
- });
374
- it('should not allow user or workspace to override system disableYoloMode', () => {
375
- mockFsExistsSync.mockReturnValue(true);
376
- const userSettingsContent = {
377
- security: {
378
- disableYoloMode: false,
379
- },
380
- };
381
- const workspaceSettingsContent = {
382
- security: {
383
- disableYoloMode: false, // This should be ignored
384
- },
385
- };
386
- const systemSettingsContent = {
387
- security: {
388
- disableYoloMode: true,
389
- },
390
- };
391
- fs.readFileSync.mockImplementation((p) => {
392
- if (p === getSystemSettingsPath())
393
- return JSON.stringify(systemSettingsContent);
394
- if (p === USER_SETTINGS_PATH)
395
- return JSON.stringify(userSettingsContent);
396
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
397
- return JSON.stringify(workspaceSettingsContent);
398
- return '{}';
399
- });
400
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
401
- expect(settings.merged.security?.disableYoloMode).toBe(true); // System setting should be used
402
- });
403
- it.each([
404
- {
405
- description: 'contextFileName in user settings',
406
- path: USER_SETTINGS_PATH,
407
- content: { context: { fileName: 'CUSTOM.md' } },
408
- expected: { key: 'context.fileName', value: 'CUSTOM.md' },
409
- },
410
- {
411
- description: 'contextFileName in workspace settings',
412
- path: MOCK_WORKSPACE_SETTINGS_PATH,
413
- content: { context: { fileName: 'PROJECT_SPECIFIC.md' } },
414
- expected: { key: 'context.fileName', value: 'PROJECT_SPECIFIC.md' },
415
- },
416
- {
417
- description: 'excludedProjectEnvVars in user settings',
418
- path: USER_SETTINGS_PATH,
419
- content: {
420
- advanced: { excludedEnvVars: ['DEBUG', 'NODE_ENV', 'CUSTOM_VAR'] },
421
- },
422
- expected: {
423
- key: 'advanced.excludedEnvVars',
424
- value: ['DEBUG', 'DEBUG_MODE', 'NODE_ENV', 'CUSTOM_VAR'],
425
- },
426
- },
427
- {
428
- description: 'excludedProjectEnvVars in workspace settings',
429
- path: MOCK_WORKSPACE_SETTINGS_PATH,
430
- content: {
431
- advanced: { excludedEnvVars: ['WORKSPACE_DEBUG', 'WORKSPACE_VAR'] },
432
- },
433
- expected: {
434
- key: 'advanced.excludedEnvVars',
435
- value: ['DEBUG', 'DEBUG_MODE', 'WORKSPACE_DEBUG', 'WORKSPACE_VAR'],
436
- },
437
- },
438
- ])('should handle $description correctly', ({ path, content, expected }) => {
439
- mockFsExistsSync.mockImplementation((p) => p === path);
440
- fs.readFileSync.mockImplementation((p) => {
441
- if (p === path)
442
- return JSON.stringify(content);
443
- return '{}';
444
- });
445
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
446
- const keys = expected.key.split('.');
447
- let result = settings.merged;
448
- for (const key of keys) {
449
- result = result[key];
450
- }
451
- expect(result).toEqual(expected.value);
452
- });
453
- it('should merge excludedProjectEnvVars with workspace taking precedence over user', () => {
454
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH || p === MOCK_WORKSPACE_SETTINGS_PATH);
455
- const userSettingsContent = {
456
- general: {},
457
- advanced: { excludedEnvVars: ['DEBUG', 'NODE_ENV', 'USER_VAR'] },
458
- };
459
- const workspaceSettingsContent = {
460
- general: {},
461
- advanced: { excludedEnvVars: ['WORKSPACE_DEBUG', 'WORKSPACE_VAR'] },
462
- };
463
- fs.readFileSync.mockImplementation((p) => {
464
- if (p === USER_SETTINGS_PATH)
465
- return JSON.stringify(userSettingsContent);
466
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
467
- return JSON.stringify(workspaceSettingsContent);
468
- return '';
469
- });
470
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
471
- expect(settings.user.settings.advanced?.excludedEnvVars).toEqual([
472
- 'DEBUG',
473
- 'NODE_ENV',
474
- 'USER_VAR',
475
- ]);
476
- expect(settings.workspace.settings.advanced?.excludedEnvVars).toEqual([
477
- 'WORKSPACE_DEBUG',
478
- 'WORKSPACE_VAR',
479
- ]);
480
- expect(settings.merged.advanced?.excludedEnvVars).toEqual([
481
- 'DEBUG',
482
- 'DEBUG_MODE',
483
- 'NODE_ENV',
484
- 'USER_VAR',
485
- 'WORKSPACE_DEBUG',
486
- 'WORKSPACE_VAR',
487
- ]);
488
- });
489
- it('should default contextFileName to undefined if not in any settings file', () => {
490
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH || p === MOCK_WORKSPACE_SETTINGS_PATH);
491
- const userSettingsContent = { ui: { theme: 'dark' } };
492
- const workspaceSettingsContent = { tools: { sandbox: true } };
493
- fs.readFileSync.mockImplementation((p) => {
494
- if (p === USER_SETTINGS_PATH)
495
- return JSON.stringify(userSettingsContent);
496
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
497
- return JSON.stringify(workspaceSettingsContent);
498
- return '';
499
- });
500
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
501
- expect(settings.merged.context?.fileName).toBeUndefined();
502
- });
503
- it.each([
504
- {
505
- scope: 'user',
506
- path: USER_SETTINGS_PATH,
507
- content: { telemetry: { enabled: true } },
508
- expected: true,
509
- },
510
- {
511
- scope: 'workspace',
512
- path: MOCK_WORKSPACE_SETTINGS_PATH,
513
- content: { telemetry: { enabled: false } },
514
- expected: false,
515
- },
516
- ])('should load telemetry setting from $scope settings', ({ path, content, expected }) => {
517
- mockFsExistsSync.mockImplementation((p) => p === path);
518
- fs.readFileSync.mockImplementation((p) => {
519
- if (p === path)
520
- return JSON.stringify(content);
521
- return '{}';
522
- });
523
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
524
- expect(settings.merged.telemetry?.enabled).toBe(expected);
525
- });
526
- it('should prioritize workspace telemetry setting over user setting', () => {
527
- mockFsExistsSync.mockReturnValue(true);
528
- const userSettingsContent = { telemetry: { enabled: true } };
529
- const workspaceSettingsContent = { telemetry: { enabled: false } };
530
- fs.readFileSync.mockImplementation((p) => {
531
- if (p === USER_SETTINGS_PATH)
532
- return JSON.stringify(userSettingsContent);
533
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
534
- return JSON.stringify(workspaceSettingsContent);
535
- return '{}';
536
- });
537
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
538
- expect(settings.merged.telemetry?.enabled).toBe(false);
539
- });
540
- it('should have telemetry as undefined if not in any settings file', () => {
541
- mockFsExistsSync.mockReturnValue(false); // No settings files exist
542
- fs.readFileSync.mockReturnValue('{}');
543
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
544
- expect(settings.merged.telemetry).toBeUndefined();
545
- expect(settings.merged.ui).toBeDefined();
546
- expect(settings.merged.mcpServers).toEqual({});
547
- });
548
- it('should merge MCP servers correctly, with workspace taking precedence', () => {
549
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH || p === MOCK_WORKSPACE_SETTINGS_PATH);
550
- const userSettingsContent = {
551
- mcpServers: {
552
- 'user-server': {
553
- command: 'user-command',
554
- args: ['--user-arg'],
555
- description: 'User MCP server',
556
- },
557
- 'shared-server': {
558
- command: 'user-shared-command',
559
- description: 'User shared server config',
560
- },
561
- },
562
- };
563
- const workspaceSettingsContent = {
564
- mcpServers: {
565
- 'workspace-server': {
566
- command: 'workspace-command',
567
- args: ['--workspace-arg'],
568
- description: 'Workspace MCP server',
569
- },
570
- 'shared-server': {
571
- command: 'workspace-shared-command',
572
- description: 'Workspace shared server config',
573
- },
574
- },
575
- };
576
- fs.readFileSync.mockImplementation((p) => {
577
- if (p === USER_SETTINGS_PATH)
578
- return JSON.stringify(userSettingsContent);
579
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
580
- return JSON.stringify(workspaceSettingsContent);
581
- return '';
582
- });
583
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
584
- expect(settings.user.settings).toEqual(userSettingsContent);
585
- expect(settings.workspace.settings).toEqual(workspaceSettingsContent);
586
- expect(settings.merged.mcpServers).toEqual({
587
- 'user-server': {
588
- command: 'user-command',
589
- args: ['--user-arg'],
590
- description: 'User MCP server',
591
- },
592
- 'workspace-server': {
593
- command: 'workspace-command',
594
- args: ['--workspace-arg'],
595
- description: 'Workspace MCP server',
596
- },
597
- 'shared-server': {
598
- command: 'workspace-shared-command',
599
- description: 'Workspace shared server config',
600
- },
601
- });
602
- });
603
- it.each([
604
- {
605
- scope: 'user',
606
- path: USER_SETTINGS_PATH,
607
- content: {
608
- mcpServers: {
609
- 'user-only-server': {
610
- command: 'user-only-command',
611
- description: 'User only server',
612
- },
613
- },
614
- },
615
- expected: {
616
- 'user-only-server': {
617
- command: 'user-only-command',
618
- description: 'User only server',
619
- },
620
- },
621
- },
622
- {
623
- scope: 'workspace',
624
- path: MOCK_WORKSPACE_SETTINGS_PATH,
625
- content: {
626
- mcpServers: {
627
- 'workspace-only-server': {
628
- command: 'workspace-only-command',
629
- description: 'Workspace only server',
630
- },
631
- },
632
- },
633
- expected: {
634
- 'workspace-only-server': {
635
- command: 'workspace-only-command',
636
- description: 'Workspace only server',
637
- },
638
- },
639
- },
640
- ])('should handle MCP servers when only in $scope settings', ({ path, content, expected }) => {
641
- mockFsExistsSync.mockImplementation((p) => p === path);
642
- fs.readFileSync.mockImplementation((p) => {
643
- if (p === path)
644
- return JSON.stringify(content);
645
- return '{}';
646
- });
647
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
648
- expect(settings.merged.mcpServers).toEqual(expected);
649
- });
650
- it('should have mcpServers as undefined if not in any settings file', () => {
651
- mockFsExistsSync.mockReturnValue(false); // No settings files exist
652
- fs.readFileSync.mockReturnValue('{}');
653
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
654
- expect(settings.merged.mcpServers).toEqual({});
655
- });
656
- it('should merge MCP servers from system, user, and workspace with system taking precedence', () => {
657
- mockFsExistsSync.mockReturnValue(true);
658
- const systemSettingsContent = {
659
- mcpServers: {
660
- 'shared-server': {
661
- command: 'system-command',
662
- args: ['--system-arg'],
663
- },
664
- 'system-only-server': {
665
- command: 'system-only-command',
666
- },
667
- },
668
- };
669
- const userSettingsContent = {
670
- mcpServers: {
671
- 'user-server': {
672
- command: 'user-command',
673
- },
674
- 'shared-server': {
675
- command: 'user-command',
676
- description: 'from user',
677
- },
678
- },
679
- };
680
- const workspaceSettingsContent = {
681
- mcpServers: {
682
- 'workspace-server': {
683
- command: 'workspace-command',
684
- },
685
- 'shared-server': {
686
- command: 'workspace-command',
687
- args: ['--workspace-arg'],
688
- },
689
- },
690
- };
691
- fs.readFileSync.mockImplementation((p) => {
692
- if (p === getSystemSettingsPath())
693
- return JSON.stringify(systemSettingsContent);
694
- if (p === USER_SETTINGS_PATH)
695
- return JSON.stringify(userSettingsContent);
696
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
697
- return JSON.stringify(workspaceSettingsContent);
698
- return '{}';
699
- });
700
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
701
- expect(settings.merged.mcpServers).toEqual({
702
- 'user-server': {
703
- command: 'user-command',
704
- },
705
- 'workspace-server': {
706
- command: 'workspace-command',
707
- },
708
- 'system-only-server': {
709
- command: 'system-only-command',
710
- },
711
- 'shared-server': {
712
- command: 'system-command',
713
- args: ['--system-arg'],
714
- },
715
- });
716
- });
717
- it('should merge mcp allowed/excluded lists with system taking precedence over workspace', () => {
718
- mockFsExistsSync.mockReturnValue(true);
719
- const systemSettingsContent = {
720
- mcp: {
721
- allowed: ['system-allowed'],
722
- },
723
- };
724
- const userSettingsContent = {
725
- mcp: {
726
- allowed: ['user-allowed'],
727
- excluded: ['user-excluded'],
728
- },
729
- };
730
- const workspaceSettingsContent = {
731
- mcp: {
732
- allowed: ['workspace-allowed'],
733
- excluded: ['workspace-excluded'],
734
- },
735
- };
736
- fs.readFileSync.mockImplementation((p) => {
737
- if (p === getSystemSettingsPath())
738
- return JSON.stringify(systemSettingsContent);
739
- if (p === USER_SETTINGS_PATH)
740
- return JSON.stringify(userSettingsContent);
741
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
742
- return JSON.stringify(workspaceSettingsContent);
743
- return '{}';
744
- });
745
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
746
- expect(settings.merged.mcp).toEqual({
747
- allowed: ['system-allowed'],
748
- excluded: ['workspace-excluded'],
749
- });
750
- });
751
- describe('compressionThreshold settings', () => {
752
- it.each([
753
- {
754
- description: 'should be taken from user settings if only present there',
755
- userContent: { model: { compressionThreshold: 0.5 } },
756
- workspaceContent: {},
757
- expected: 0.5,
758
- },
759
- {
760
- description: 'should be taken from workspace settings if only present there',
761
- userContent: {},
762
- workspaceContent: { model: { compressionThreshold: 0.8 } },
763
- expected: 0.8,
764
- },
765
- {
766
- description: 'should prioritize workspace settings over user settings',
767
- userContent: { model: { compressionThreshold: 0.5 } },
768
- workspaceContent: { model: { compressionThreshold: 0.8 } },
769
- expected: 0.8,
770
- },
771
- {
772
- description: 'should be default if not in any settings file',
773
- userContent: {},
774
- workspaceContent: {},
775
- expected: 0.5,
776
- },
777
- ])('$description', ({ userContent, workspaceContent, expected }) => {
778
- mockFsExistsSync.mockReturnValue(true);
779
- fs.readFileSync.mockImplementation((p) => {
780
- if (p === USER_SETTINGS_PATH)
781
- return JSON.stringify(userContent);
782
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
783
- return JSON.stringify(workspaceContent);
784
- return '{}';
785
- });
786
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
787
- expect(settings.merged.model?.compressionThreshold).toEqual(expected);
788
- });
789
- });
790
- it('should use user compressionThreshold if workspace does not define it', () => {
791
- mockFsExistsSync.mockReturnValue(true);
792
- const userSettingsContent = {
793
- general: {},
794
- model: { compressionThreshold: 0.5 },
795
- };
796
- const workspaceSettingsContent = {
797
- general: {},
798
- model: {},
799
- };
800
- fs.readFileSync.mockImplementation((p) => {
801
- if (p === USER_SETTINGS_PATH)
802
- return JSON.stringify(userSettingsContent);
803
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
804
- return JSON.stringify(workspaceSettingsContent);
805
- return '{}';
806
- });
807
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
808
- expect(settings.merged.model?.compressionThreshold).toEqual(0.5);
809
- });
810
- it('should merge includeDirectories from all scopes', () => {
811
- mockFsExistsSync.mockReturnValue(true);
812
- const systemSettingsContent = {
813
- context: { includeDirectories: ['/system/dir'] },
814
- };
815
- const systemDefaultsContent = {
816
- context: { includeDirectories: ['/system/defaults/dir'] },
817
- };
818
- const userSettingsContent = {
819
- context: { includeDirectories: ['/user/dir1', '/user/dir2'] },
820
- };
821
- const workspaceSettingsContent = {
822
- context: { includeDirectories: ['/workspace/dir'] },
823
- };
824
- fs.readFileSync.mockImplementation((p) => {
825
- if (p === getSystemSettingsPath())
826
- return JSON.stringify(systemSettingsContent);
827
- if (p === getSystemDefaultsPath())
828
- return JSON.stringify(systemDefaultsContent);
829
- if (p === USER_SETTINGS_PATH)
830
- return JSON.stringify(userSettingsContent);
831
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
832
- return JSON.stringify(workspaceSettingsContent);
833
- return '{}';
834
- });
835
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
836
- expect(settings.merged.context?.includeDirectories).toEqual([
837
- '/system/defaults/dir',
838
- '/user/dir1',
839
- '/user/dir2',
840
- '/workspace/dir',
841
- '/system/dir',
842
- ]);
843
- });
844
- it('should handle JSON parsing errors gracefully', () => {
845
- mockFsExistsSync.mockReturnValue(true); // Both files "exist"
846
- const invalidJsonContent = 'invalid json';
847
- const userReadError = new SyntaxError("Expected ',' or '}' after property value in JSON at position 10");
848
- const workspaceReadError = new SyntaxError('Unexpected token i in JSON at position 0');
849
- fs.readFileSync.mockImplementation((p) => {
850
- if (p === USER_SETTINGS_PATH) {
851
- // Simulate JSON.parse throwing for user settings
852
- vi.spyOn(JSON, 'parse').mockImplementationOnce(() => {
853
- throw userReadError;
854
- });
855
- return invalidJsonContent; // Content that would cause JSON.parse to throw
856
- }
857
- if (p === MOCK_WORKSPACE_SETTINGS_PATH) {
858
- // Simulate JSON.parse throwing for workspace settings
859
- vi.spyOn(JSON, 'parse').mockImplementationOnce(() => {
860
- throw workspaceReadError;
861
- });
862
- return invalidJsonContent;
863
- }
864
- return '{}'; // Default for other reads
865
- });
866
- try {
867
- loadSettings(MOCK_WORKSPACE_DIR);
868
- throw new Error('loadSettings should have thrown a FatalConfigError');
869
- }
870
- catch (e) {
871
- expect(e).toBeInstanceOf(FatalConfigError);
872
- const error = e;
873
- expect(error.message).toContain(`Error in ${USER_SETTINGS_PATH}: ${userReadError.message}`);
874
- expect(error.message).toContain(`Error in ${MOCK_WORKSPACE_SETTINGS_PATH}: ${workspaceReadError.message}`);
875
- expect(error.message).toContain('Please fix the configuration file(s) and try again.');
876
- }
877
- // Restore JSON.parse mock if it was spied on specifically for this test
878
- vi.restoreAllMocks(); // Or more targeted restore if needed
879
- });
880
- it('should resolve environment variables in user settings', () => {
881
- process.env['TEST_API_KEY'] = 'user_api_key_from_env';
882
- const userSettingsContent = {
883
- apiKey: '$TEST_API_KEY',
884
- someUrl: 'https://test.com/${TEST_API_KEY}',
885
- };
886
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
887
- fs.readFileSync.mockImplementation((p) => {
888
- if (p === USER_SETTINGS_PATH)
889
- return JSON.stringify(userSettingsContent);
890
- return '{}';
891
- });
892
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
893
- expect(settings.user.settings['apiKey']).toBe('user_api_key_from_env');
894
- expect(settings.user.settings['someUrl']).toBe('https://test.com/user_api_key_from_env');
895
- expect(settings.merged['apiKey']).toBe('user_api_key_from_env');
896
- delete process.env['TEST_API_KEY'];
897
- });
898
- it('should resolve environment variables in workspace settings', () => {
899
- process.env['WORKSPACE_ENDPOINT'] = 'workspace_endpoint_from_env';
900
- const workspaceSettingsContent = {
901
- endpoint: '${WORKSPACE_ENDPOINT}/api',
902
- nested: { value: '$WORKSPACE_ENDPOINT' },
903
- };
904
- mockFsExistsSync.mockImplementation((p) => p === MOCK_WORKSPACE_SETTINGS_PATH);
905
- fs.readFileSync.mockImplementation((p) => {
906
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
907
- return JSON.stringify(workspaceSettingsContent);
908
- return '{}';
909
- });
910
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
911
- expect(settings.workspace.settings['endpoint']).toBe('workspace_endpoint_from_env/api');
912
- const nested = settings.workspace.settings['nested'];
913
- expect(nested['value']).toBe('workspace_endpoint_from_env');
914
- expect(settings.merged['endpoint']).toBe('workspace_endpoint_from_env/api');
915
- delete process.env['WORKSPACE_ENDPOINT'];
916
- });
917
- it('should correctly resolve and merge env variables from different scopes', () => {
918
- process.env['SYSTEM_VAR'] = 'system_value';
919
- process.env['USER_VAR'] = 'user_value';
920
- process.env['WORKSPACE_VAR'] = 'workspace_value';
921
- process.env['SHARED_VAR'] = 'final_value';
922
- const systemSettingsContent = {
923
- configValue: '$SHARED_VAR',
924
- systemOnly: '$SYSTEM_VAR',
925
- };
926
- const userSettingsContent = {
927
- configValue: '$SHARED_VAR',
928
- userOnly: '$USER_VAR',
929
- ui: {
930
- theme: 'dark',
931
- },
932
- };
933
- const workspaceSettingsContent = {
934
- configValue: '$SHARED_VAR',
935
- workspaceOnly: '$WORKSPACE_VAR',
936
- ui: {
937
- theme: 'light',
938
- },
939
- };
940
- mockFsExistsSync.mockReturnValue(true);
941
- fs.readFileSync.mockImplementation((p) => {
942
- if (p === getSystemSettingsPath()) {
943
- return JSON.stringify(systemSettingsContent);
944
- }
945
- if (p === USER_SETTINGS_PATH) {
946
- return JSON.stringify(userSettingsContent);
947
- }
948
- if (p === MOCK_WORKSPACE_SETTINGS_PATH) {
949
- return JSON.stringify(workspaceSettingsContent);
950
- }
951
- return '{}';
952
- });
953
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
954
- // Check resolved values in individual scopes
955
- expect(settings.system.settings['configValue']).toBe('final_value');
956
- expect(settings.system.settings['systemOnly']).toBe('system_value');
957
- expect(settings.user.settings['configValue']).toBe('final_value');
958
- expect(settings.user.settings['userOnly']).toBe('user_value');
959
- expect(settings.workspace.settings['configValue']).toBe('final_value');
960
- expect(settings.workspace.settings['workspaceOnly']).toBe('workspace_value');
961
- // Check merged values (system > workspace > user)
962
- expect(settings.merged['configValue']).toBe('final_value');
963
- expect(settings.merged['systemOnly']).toBe('system_value');
964
- expect(settings.merged['userOnly']).toBe('user_value');
965
- expect(settings.merged['workspaceOnly']).toBe('workspace_value');
966
- expect(settings.merged.ui?.theme).toBe('light'); // workspace overrides user
967
- delete process.env['SYSTEM_VAR'];
968
- delete process.env['USER_VAR'];
969
- delete process.env['WORKSPACE_VAR'];
970
- delete process.env['SHARED_VAR'];
971
- });
972
- it('should correctly merge dnsResolutionOrder with workspace taking precedence', () => {
973
- mockFsExistsSync.mockReturnValue(true);
974
- const userSettingsContent = {
975
- advanced: { dnsResolutionOrder: 'ipv4first' },
976
- };
977
- const workspaceSettingsContent = {
978
- advanced: { dnsResolutionOrder: 'verbatim' },
979
- };
980
- fs.readFileSync.mockImplementation((p) => {
981
- if (p === USER_SETTINGS_PATH)
982
- return JSON.stringify(userSettingsContent);
983
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
984
- return JSON.stringify(workspaceSettingsContent);
985
- return '{}';
986
- });
987
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
988
- expect(settings.merged.advanced?.dnsResolutionOrder).toBe('verbatim');
989
- });
990
- it('should use user dnsResolutionOrder if workspace is not defined', () => {
991
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
992
- const userSettingsContent = {
993
- advanced: { dnsResolutionOrder: 'verbatim' },
994
- };
995
- fs.readFileSync.mockImplementation((p) => {
996
- if (p === USER_SETTINGS_PATH)
997
- return JSON.stringify(userSettingsContent);
998
- return '{}';
999
- });
1000
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1001
- expect(settings.merged.advanced?.dnsResolutionOrder).toBe('verbatim');
1002
- });
1003
- it('should leave unresolved environment variables as is', () => {
1004
- const userSettingsContent = { apiKey: '$UNDEFINED_VAR' };
1005
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
1006
- fs.readFileSync.mockImplementation((p) => {
1007
- if (p === USER_SETTINGS_PATH)
1008
- return JSON.stringify(userSettingsContent);
1009
- return '{}';
1010
- });
1011
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1012
- expect(settings.user.settings['apiKey']).toBe('$UNDEFINED_VAR');
1013
- expect(settings.merged['apiKey']).toBe('$UNDEFINED_VAR');
1014
- });
1015
- it('should resolve multiple environment variables in a single string', () => {
1016
- process.env['VAR_A'] = 'valueA';
1017
- process.env['VAR_B'] = 'valueB';
1018
- const userSettingsContent = {
1019
- path: '/path/$VAR_A/${VAR_B}/end',
1020
- };
1021
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
1022
- fs.readFileSync.mockImplementation((p) => {
1023
- if (p === USER_SETTINGS_PATH)
1024
- return JSON.stringify(userSettingsContent);
1025
- return '{}';
1026
- });
1027
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1028
- expect(settings.user.settings['path']).toBe('/path/valueA/valueB/end');
1029
- delete process.env['VAR_A'];
1030
- delete process.env['VAR_B'];
1031
- });
1032
- it('should resolve environment variables in arrays', () => {
1033
- process.env['ITEM_1'] = 'item1_env';
1034
- process.env['ITEM_2'] = 'item2_env';
1035
- const userSettingsContent = {
1036
- list: ['$ITEM_1', '${ITEM_2}', 'literal'],
1037
- };
1038
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
1039
- fs.readFileSync.mockImplementation((p) => {
1040
- if (p === USER_SETTINGS_PATH)
1041
- return JSON.stringify(userSettingsContent);
1042
- return '{}';
1043
- });
1044
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1045
- expect(settings.user.settings['list']).toEqual([
1046
- 'item1_env',
1047
- 'item2_env',
1048
- 'literal',
1049
- ]);
1050
- delete process.env['ITEM_1'];
1051
- delete process.env['ITEM_2'];
1052
- });
1053
- it('should correctly pass through null, boolean, and number types, and handle undefined properties', () => {
1054
- process.env['MY_ENV_STRING'] = 'env_string_value';
1055
- process.env['MY_ENV_STRING_NESTED'] = 'env_string_nested_value';
1056
- const userSettingsContent = {
1057
- nullVal: null,
1058
- trueVal: true,
1059
- falseVal: false,
1060
- numberVal: 123.45,
1061
- stringVal: '$MY_ENV_STRING',
1062
- nestedObj: {
1063
- nestedNull: null,
1064
- nestedBool: true,
1065
- nestedNum: 0,
1066
- nestedString: 'literal',
1067
- anotherEnv: '${MY_ENV_STRING_NESTED}',
1068
- },
1069
- };
1070
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
1071
- fs.readFileSync.mockImplementation((p) => {
1072
- if (p === USER_SETTINGS_PATH)
1073
- return JSON.stringify(userSettingsContent);
1074
- return '{}';
1075
- });
1076
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1077
- expect(settings.user.settings['nullVal']).toBeNull();
1078
- expect(settings.user.settings['trueVal']).toBe(true);
1079
- expect(settings.user.settings['falseVal']).toBe(false);
1080
- expect(settings.user.settings['numberVal']).toBe(123.45);
1081
- expect(settings.user.settings['stringVal']).toBe('env_string_value');
1082
- expect(settings.user.settings['undefinedVal']).toBeUndefined();
1083
- const nestedObj = settings.user.settings['nestedObj'];
1084
- expect(nestedObj['nestedNull']).toBeNull();
1085
- expect(nestedObj['nestedBool']).toBe(true);
1086
- expect(nestedObj['nestedNum']).toBe(0);
1087
- expect(nestedObj['nestedString']).toBe('literal');
1088
- expect(nestedObj['anotherEnv']).toBe('env_string_nested_value');
1089
- delete process.env['MY_ENV_STRING'];
1090
- delete process.env['MY_ENV_STRING_NESTED'];
1091
- });
1092
- it('should resolve multiple concatenated environment variables in a single string value', () => {
1093
- process.env['TEST_HOST'] = 'myhost';
1094
- process.env['TEST_PORT'] = '9090';
1095
- const userSettingsContent = {
1096
- serverAddress: '${TEST_HOST}:${TEST_PORT}/api',
1097
- };
1098
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
1099
- fs.readFileSync.mockImplementation((p) => {
1100
- if (p === USER_SETTINGS_PATH)
1101
- return JSON.stringify(userSettingsContent);
1102
- return '{}';
1103
- });
1104
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1105
- expect(settings.user.settings['serverAddress']).toBe('myhost:9090/api');
1106
- delete process.env['TEST_HOST'];
1107
- delete process.env['TEST_PORT'];
1108
- });
1109
- describe('when GEMINI_CLI_SYSTEM_SETTINGS_PATH is set', () => {
1110
- const MOCK_ENV_SYSTEM_SETTINGS_PATH = '/mock/env/system/settings.json';
1111
- beforeEach(() => {
1112
- process.env['GEMINI_CLI_SYSTEM_SETTINGS_PATH'] =
1113
- MOCK_ENV_SYSTEM_SETTINGS_PATH;
1114
- });
1115
- afterEach(() => {
1116
- delete process.env['GEMINI_CLI_SYSTEM_SETTINGS_PATH'];
1117
- });
1118
- it('should load system settings from the path specified in the environment variable', () => {
1119
- mockFsExistsSync.mockImplementation((p) => p === MOCK_ENV_SYSTEM_SETTINGS_PATH);
1120
- const systemSettingsContent = {
1121
- ui: { theme: 'env-var-theme' },
1122
- tools: { sandbox: true },
1123
- };
1124
- fs.readFileSync.mockImplementation((p) => {
1125
- if (p === MOCK_ENV_SYSTEM_SETTINGS_PATH)
1126
- return JSON.stringify(systemSettingsContent);
1127
- return '{}';
1128
- });
1129
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1130
- expect(fs.readFileSync).toHaveBeenCalledWith(MOCK_ENV_SYSTEM_SETTINGS_PATH, 'utf-8');
1131
- expect(settings.system.path).toBe(MOCK_ENV_SYSTEM_SETTINGS_PATH);
1132
- expect(settings.system.settings).toEqual(systemSettingsContent);
1133
- expect(settings.merged).toMatchObject({
1134
- ...systemSettingsContent,
1135
- });
1136
- });
1137
- });
1138
- });
1139
- describe('excludedProjectEnvVars integration', () => {
1140
- const originalEnv = { ...process.env };
1141
- beforeEach(() => {
1142
- process.env = { ...originalEnv };
1143
- });
1144
- afterEach(() => {
1145
- process.env = originalEnv;
1146
- });
1147
- it('should exclude DEBUG and DEBUG_MODE from project .env files by default', () => {
1148
- // Create a workspace settings file with excludedProjectEnvVars
1149
- const workspaceSettingsContent = {
1150
- general: {},
1151
- advanced: { excludedEnvVars: ['DEBUG', 'DEBUG_MODE'] },
1152
- };
1153
- mockFsExistsSync.mockImplementation((p) => p === MOCK_WORKSPACE_SETTINGS_PATH);
1154
- fs.readFileSync.mockImplementation((p) => {
1155
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
1156
- return JSON.stringify(workspaceSettingsContent);
1157
- return '{}';
1158
- });
1159
- // Mock findEnvFile to return a project .env file
1160
- const originalFindEnvFile = loadSettings.findEnvFile;
1161
- loadSettings.findEnvFile =
1162
- () => '/mock/project/.env';
1163
- // Mock fs.readFileSync for .env file content
1164
- const originalReadFileSync = fs.readFileSync;
1165
- fs.readFileSync.mockImplementation((p) => {
1166
- if (p === '/mock/project/.env') {
1167
- return 'DEBUG=true\nDEBUG_MODE=1\nGEMINI_API_KEY=test-key';
1168
- }
1169
- if (p === MOCK_WORKSPACE_SETTINGS_PATH) {
1170
- return JSON.stringify(workspaceSettingsContent);
1171
- }
1172
- return '{}';
1173
- });
1174
- try {
1175
- // This will call loadEnvironment internally with the merged settings
1176
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1177
- // Verify the settings were loaded correctly
1178
- expect(settings.merged.advanced?.excludedEnvVars).toEqual([
1179
- 'DEBUG',
1180
- 'DEBUG_MODE',
1181
- ]);
1182
- // Note: We can't directly test process.env changes here because the mocking
1183
- // prevents the actual file system operations, but we can verify the settings
1184
- // are correctly merged and passed to loadEnvironment
1185
- }
1186
- finally {
1187
- loadSettings.findEnvFile =
1188
- originalFindEnvFile;
1189
- fs.readFileSync.mockImplementation(originalReadFileSync);
1190
- }
1191
- });
1192
- it('should respect custom excludedProjectEnvVars from user settings', () => {
1193
- const userSettingsContent = {
1194
- general: {},
1195
- advanced: { excludedEnvVars: ['NODE_ENV', 'DEBUG'] },
1196
- };
1197
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
1198
- fs.readFileSync.mockImplementation((p) => {
1199
- if (p === USER_SETTINGS_PATH)
1200
- return JSON.stringify(userSettingsContent);
1201
- return '{}';
1202
- });
1203
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1204
- expect(settings.user.settings.advanced?.excludedEnvVars).toEqual([
1205
- 'NODE_ENV',
1206
- 'DEBUG',
1207
- ]);
1208
- expect(settings.merged.advanced?.excludedEnvVars).toEqual([
1209
- 'DEBUG',
1210
- 'DEBUG_MODE',
1211
- 'NODE_ENV',
1212
- ]);
1213
- });
1214
- it('should merge excludedProjectEnvVars with workspace taking precedence', () => {
1215
- const userSettingsContent = {
1216
- general: {},
1217
- advanced: { excludedEnvVars: ['DEBUG', 'NODE_ENV', 'USER_VAR'] },
1218
- };
1219
- const workspaceSettingsContent = {
1220
- general: {},
1221
- advanced: { excludedEnvVars: ['WORKSPACE_DEBUG', 'WORKSPACE_VAR'] },
1222
- };
1223
- mockFsExistsSync.mockReturnValue(true);
1224
- fs.readFileSync.mockImplementation((p) => {
1225
- if (p === USER_SETTINGS_PATH)
1226
- return JSON.stringify(userSettingsContent);
1227
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
1228
- return JSON.stringify(workspaceSettingsContent);
1229
- return '{}';
1230
- });
1231
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1232
- expect(settings.user.settings.advanced?.excludedEnvVars).toEqual([
1233
- 'DEBUG',
1234
- 'NODE_ENV',
1235
- 'USER_VAR',
1236
- ]);
1237
- expect(settings.workspace.settings.advanced?.excludedEnvVars).toEqual([
1238
- 'WORKSPACE_DEBUG',
1239
- 'WORKSPACE_VAR',
1240
- ]);
1241
- expect(settings.merged.advanced?.excludedEnvVars).toEqual([
1242
- 'DEBUG',
1243
- 'DEBUG_MODE',
1244
- 'NODE_ENV',
1245
- 'USER_VAR',
1246
- 'WORKSPACE_DEBUG',
1247
- 'WORKSPACE_VAR',
1248
- ]);
1249
- });
1250
- });
1251
- describe('with workspace trust', () => {
1252
- it('should merge workspace settings when workspace is trusted', () => {
1253
- mockFsExistsSync.mockReturnValue(true);
1254
- const userSettingsContent = {
1255
- ui: { theme: 'dark' },
1256
- tools: { sandbox: false },
1257
- };
1258
- const workspaceSettingsContent = {
1259
- tools: { sandbox: true },
1260
- context: { fileName: 'WORKSPACE.md' },
1261
- };
1262
- fs.readFileSync.mockImplementation((p) => {
1263
- if (p === USER_SETTINGS_PATH)
1264
- return JSON.stringify(userSettingsContent);
1265
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
1266
- return JSON.stringify(workspaceSettingsContent);
1267
- return '{}';
1268
- });
1269
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1270
- expect(settings.merged.tools?.sandbox).toBe(true);
1271
- expect(settings.merged.context?.fileName).toBe('WORKSPACE.md');
1272
- expect(settings.merged.ui?.theme).toBe('dark');
1273
- });
1274
- it('should NOT merge workspace settings when workspace is not trusted', () => {
1275
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
1276
- isTrusted: false,
1277
- source: 'file',
1278
- });
1279
- mockFsExistsSync.mockReturnValue(true);
1280
- const userSettingsContent = {
1281
- ui: { theme: 'dark' },
1282
- tools: { sandbox: false },
1283
- context: { fileName: 'USER.md' },
1284
- };
1285
- const workspaceSettingsContent = {
1286
- tools: { sandbox: true },
1287
- context: { fileName: 'WORKSPACE.md' },
1288
- };
1289
- fs.readFileSync.mockImplementation((p) => {
1290
- if (p === USER_SETTINGS_PATH)
1291
- return JSON.stringify(userSettingsContent);
1292
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
1293
- return JSON.stringify(workspaceSettingsContent);
1294
- return '{}';
1295
- });
1296
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1297
- expect(settings.merged.tools?.sandbox).toBe(false); // User setting
1298
- expect(settings.merged.context?.fileName).toBe('USER.md'); // User setting
1299
- expect(settings.merged.ui?.theme).toBe('dark'); // User setting
1300
- });
1301
- });
1302
- describe('loadEnvironment', () => {
1303
- function setup({ isFolderTrustEnabled = true, isWorkspaceTrustedValue = true, }) {
1304
- delete process.env['TESTTEST']; // reset
1305
- const geminiEnvPath = path.resolve(path.join(GEMINI_DIR, '.env'));
1306
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
1307
- isTrusted: isWorkspaceTrustedValue,
1308
- source: 'file',
1309
- });
1310
- mockFsExistsSync.mockImplementation((p) => [USER_SETTINGS_PATH, geminiEnvPath].includes(p.toString()));
1311
- const userSettingsContent = {
1312
- ui: {
1313
- theme: 'dark',
1314
- },
1315
- security: {
1316
- folderTrust: {
1317
- enabled: isFolderTrustEnabled,
1318
- },
1319
- },
1320
- context: {
1321
- fileName: 'USER_CONTEXT.md',
1322
- },
1323
- };
1324
- fs.readFileSync.mockImplementation((p) => {
1325
- if (p === USER_SETTINGS_PATH)
1326
- return JSON.stringify(userSettingsContent);
1327
- if (p === geminiEnvPath)
1328
- return 'TESTTEST=1234';
1329
- return '{}';
1330
- });
1331
- }
1332
- it('sets environment variables from .env files', () => {
1333
- setup({ isFolderTrustEnabled: false, isWorkspaceTrustedValue: true });
1334
- loadEnvironment(loadSettings(MOCK_WORKSPACE_DIR).merged);
1335
- expect(process.env['TESTTEST']).toEqual('1234');
1336
- });
1337
- it('does not load env files from untrusted spaces', () => {
1338
- setup({ isFolderTrustEnabled: true, isWorkspaceTrustedValue: false });
1339
- loadEnvironment(loadSettings(MOCK_WORKSPACE_DIR).merged);
1340
- expect(process.env['TESTTEST']).not.toEqual('1234');
1341
- });
1342
- });
1343
- describe('migrateDeprecatedSettings', () => {
1344
- let mockFsExistsSync;
1345
- let mockFsReadFileSync;
1346
- beforeEach(() => {
1347
- vi.resetAllMocks();
1348
- mockFsExistsSync = vi.mocked(fs.existsSync);
1349
- mockFsExistsSync.mockReturnValue(true);
1350
- mockFsReadFileSync = vi.mocked(fs.readFileSync);
1351
- mockFsReadFileSync.mockReturnValue('{}');
1352
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
1353
- isTrusted: true,
1354
- source: undefined,
1355
- });
1356
- });
1357
- afterEach(() => {
1358
- vi.restoreAllMocks();
1359
- });
1360
- it('should not do anything if there are no deprecated settings', () => {
1361
- const userSettingsContent = {
1362
- extensions: {
1363
- enabled: ['user-ext-1'],
1364
- },
1365
- };
1366
- const workspaceSettingsContent = {
1367
- someOtherSetting: 'value',
1368
- };
1369
- fs.readFileSync.mockImplementation((p) => {
1370
- if (p === USER_SETTINGS_PATH)
1371
- return JSON.stringify(userSettingsContent);
1372
- if (p === MOCK_WORKSPACE_SETTINGS_PATH)
1373
- return JSON.stringify(workspaceSettingsContent);
1374
- return '{}';
1375
- });
1376
- const setValueSpy = vi.spyOn(LoadedSettings.prototype, 'setValue');
1377
- const loadedSettings = loadSettings(MOCK_WORKSPACE_DIR);
1378
- setValueSpy.mockClear();
1379
- migrateDeprecatedSettings(loadedSettings, true);
1380
- expect(setValueSpy).not.toHaveBeenCalled();
1381
- });
1382
- it('should migrate general.disableAutoUpdate to general.enableAutoUpdate with inverted value', () => {
1383
- const userSettingsContent = {
1384
- general: {
1385
- disableAutoUpdate: true,
1386
- },
1387
- };
1388
- fs.readFileSync.mockImplementation((p) => {
1389
- if (p === USER_SETTINGS_PATH)
1390
- return JSON.stringify(userSettingsContent);
1391
- return '{}';
1392
- });
1393
- const setValueSpy = vi.spyOn(LoadedSettings.prototype, 'setValue');
1394
- const loadedSettings = loadSettings(MOCK_WORKSPACE_DIR);
1395
- migrateDeprecatedSettings(loadedSettings, true);
1396
- // Should set new value to false (inverted from true)
1397
- expect(setValueSpy).toHaveBeenCalledWith(SettingScope.User, 'general', expect.objectContaining({ enableAutoUpdate: false }));
1398
- });
1399
- it('should migrate all 4 inverted boolean settings', () => {
1400
- const userSettingsContent = {
1401
- general: {
1402
- disableAutoUpdate: false,
1403
- disableUpdateNag: true,
1404
- },
1405
- context: {
1406
- fileFiltering: {
1407
- disableFuzzySearch: false,
1408
- },
1409
- },
1410
- ui: {
1411
- accessibility: {
1412
- disableLoadingPhrases: true,
1413
- },
1414
- },
1415
- };
1416
- fs.readFileSync.mockImplementation((p) => {
1417
- if (p === USER_SETTINGS_PATH)
1418
- return JSON.stringify(userSettingsContent);
1419
- return '{}';
1420
- });
1421
- const setValueSpy = vi.spyOn(LoadedSettings.prototype, 'setValue');
1422
- const loadedSettings = loadSettings(MOCK_WORKSPACE_DIR);
1423
- migrateDeprecatedSettings(loadedSettings, true);
1424
- // Check that general settings were migrated with inverted values
1425
- expect(setValueSpy).toHaveBeenCalledWith(SettingScope.User, 'general', expect.objectContaining({ enableAutoUpdate: true }));
1426
- expect(setValueSpy).toHaveBeenCalledWith(SettingScope.User, 'general', expect.objectContaining({ enableAutoUpdateNotification: false }));
1427
- // Check context.fileFiltering was migrated
1428
- expect(setValueSpy).toHaveBeenCalledWith(SettingScope.User, 'context', expect.objectContaining({
1429
- fileFiltering: expect.objectContaining({ enableFuzzySearch: true }),
1430
- }));
1431
- // Check ui.accessibility was migrated
1432
- expect(setValueSpy).toHaveBeenCalledWith(SettingScope.User, 'ui', expect.objectContaining({
1433
- accessibility: expect.objectContaining({
1434
- enableLoadingPhrases: false,
1435
- }),
1436
- }));
1437
- });
1438
- it('should prioritize new settings over deprecated ones and respect removeDeprecated flag', () => {
1439
- const userSettingsContent = {
1440
- general: {
1441
- disableAutoUpdate: true,
1442
- enableAutoUpdate: true, // Trust this (true) over disableAutoUpdate (true -> false)
1443
- },
1444
- context: {
1445
- fileFiltering: {
1446
- disableFuzzySearch: false,
1447
- enableFuzzySearch: false, // Trust this (false) over disableFuzzySearch (false -> true)
1448
- },
1449
- },
1450
- };
1451
- const loadedSettings = new LoadedSettings({
1452
- path: getSystemSettingsPath(),
1453
- settings: {},
1454
- originalSettings: {},
1455
- }, {
1456
- path: getSystemDefaultsPath(),
1457
- settings: {},
1458
- originalSettings: {},
1459
- }, {
1460
- path: USER_SETTINGS_PATH,
1461
- settings: userSettingsContent,
1462
- originalSettings: userSettingsContent,
1463
- }, {
1464
- path: MOCK_WORKSPACE_SETTINGS_PATH,
1465
- settings: {},
1466
- originalSettings: {},
1467
- }, true);
1468
- const setValueSpy = vi.spyOn(loadedSettings, 'setValue');
1469
- // 1. removeDeprecated = false (default)
1470
- migrateDeprecatedSettings(loadedSettings);
1471
- // Should still have old settings
1472
- expect(loadedSettings.forScope(SettingScope.User).settings.general).toHaveProperty('disableAutoUpdate');
1473
- expect(loadedSettings.forScope(SettingScope.User).settings.context.fileFiltering).toHaveProperty('disableFuzzySearch');
1474
- // 2. removeDeprecated = true
1475
- migrateDeprecatedSettings(loadedSettings, true);
1476
- // Should remove disableAutoUpdate and trust enableAutoUpdate: true
1477
- expect(setValueSpy).toHaveBeenCalledWith(SettingScope.User, 'general', {
1478
- enableAutoUpdate: true,
1479
- });
1480
- // Should remove disableFuzzySearch and trust enableFuzzySearch: false
1481
- expect(setValueSpy).toHaveBeenCalledWith(SettingScope.User, 'context', {
1482
- fileFiltering: { enableFuzzySearch: false },
1483
- });
1484
- });
1485
- it('should trigger migration automatically during loadSettings', () => {
1486
- mockFsExistsSync.mockImplementation((p) => p === USER_SETTINGS_PATH);
1487
- const userSettingsContent = {
1488
- general: {
1489
- disableAutoUpdate: true,
1490
- },
1491
- };
1492
- fs.readFileSync.mockImplementation((p) => {
1493
- if (p === USER_SETTINGS_PATH)
1494
- return JSON.stringify(userSettingsContent);
1495
- return '{}';
1496
- });
1497
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1498
- // Verify it was migrated in the merged settings
1499
- expect(settings.merged.general?.enableAutoUpdate).toBe(false);
1500
- // Verify it was saved back to disk (via setValue calling updateSettingsFilePreservingFormat)
1501
- expect(updateSettingsFilePreservingFormat).toHaveBeenCalledWith(USER_SETTINGS_PATH, expect.objectContaining({
1502
- general: expect.objectContaining({ enableAutoUpdate: false }),
1503
- }));
1504
- });
1505
- it('should migrate disableUpdateNag to enableAutoUpdateNotification in system and system defaults settings', () => {
1506
- const systemSettingsContent = {
1507
- general: {
1508
- disableUpdateNag: true,
1509
- },
1510
- };
1511
- const systemDefaultsContent = {
1512
- general: {
1513
- disableUpdateNag: false,
1514
- },
1515
- };
1516
- vi.mocked(fs.existsSync).mockReturnValue(true);
1517
- fs.readFileSync.mockImplementation((p) => {
1518
- if (p === getSystemSettingsPath()) {
1519
- return JSON.stringify(systemSettingsContent);
1520
- }
1521
- if (p === getSystemDefaultsPath()) {
1522
- return JSON.stringify(systemDefaultsContent);
1523
- }
1524
- return '{}';
1525
- });
1526
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1527
- // Verify system settings were migrated
1528
- expect(settings.system.settings.general).toHaveProperty('enableAutoUpdateNotification');
1529
- expect(settings.system.settings.general['enableAutoUpdateNotification']).toBe(false);
1530
- // Verify system defaults settings were migrated
1531
- expect(settings.systemDefaults.settings.general).toHaveProperty('enableAutoUpdateNotification');
1532
- expect(settings.systemDefaults.settings.general['enableAutoUpdateNotification']).toBe(true);
1533
- // Merged should also reflect it (system overrides defaults, but both are migrated)
1534
- expect(settings.merged.general?.enableAutoUpdateNotification).toBe(false);
1535
- });
1536
- it('should migrate experimental agent settings to agents overrides', () => {
1537
- const userSettingsContent = {
1538
- experimental: {
1539
- codebaseInvestigatorSettings: {
1540
- enabled: true,
1541
- maxNumTurns: 15,
1542
- maxTimeMinutes: 5,
1543
- thinkingBudget: 16384,
1544
- model: 'gemini-1.5-pro',
1545
- },
1546
- cliHelpAgentSettings: {
1547
- enabled: false,
1548
- },
1549
- },
1550
- };
1551
- vi.mocked(fs.existsSync).mockReturnValue(true);
1552
- fs.readFileSync.mockImplementation((p) => {
1553
- if (p === USER_SETTINGS_PATH)
1554
- return JSON.stringify(userSettingsContent);
1555
- return '{}';
1556
- });
1557
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
1558
- // Verify migration to agents.overrides
1559
- expect(settings.user.settings.agents?.overrides).toMatchObject({
1560
- codebase_investigator: {
1561
- enabled: true,
1562
- runConfig: {
1563
- maxTurns: 15,
1564
- maxTimeMinutes: 5,
1565
- },
1566
- modelConfig: {
1567
- model: 'gemini-1.5-pro',
1568
- generateContentConfig: {
1569
- thinkingConfig: {
1570
- thinkingBudget: 16384,
1571
- },
1572
- },
1573
- },
1574
- },
1575
- cli_help: {
1576
- enabled: false,
1577
- },
1578
- });
1579
- });
1580
- });
1581
- describe('saveSettings', () => {
1582
- it('should save settings using updateSettingsFilePreservingFormat', () => {
1583
- const mockUpdateSettings = vi.mocked(updateSettingsFilePreservingFormat);
1584
- const settingsFile = {
1585
- path: '/mock/settings.json',
1586
- settings: { ui: { theme: 'dark' } },
1587
- originalSettings: { ui: { theme: 'dark' } },
1588
- };
1589
- saveSettings(settingsFile);
1590
- expect(mockUpdateSettings).toHaveBeenCalledWith('/mock/settings.json', {
1591
- ui: { theme: 'dark' },
1592
- });
1593
- });
1594
- it('should create directory if it does not exist', () => {
1595
- const mockFsExistsSync = vi.mocked(fs.existsSync);
1596
- const mockFsMkdirSync = vi.mocked(fs.mkdirSync);
1597
- mockFsExistsSync.mockReturnValue(false);
1598
- const settingsFile = {
1599
- path: '/mock/new/dir/settings.json',
1600
- settings: {},
1601
- originalSettings: {},
1602
- };
1603
- saveSettings(settingsFile);
1604
- expect(mockFsExistsSync).toHaveBeenCalledWith('/mock/new/dir');
1605
- expect(mockFsMkdirSync).toHaveBeenCalledWith('/mock/new/dir', {
1606
- recursive: true,
1607
- });
1608
- });
1609
- it('should emit error feedback if saving fails', () => {
1610
- const mockUpdateSettings = vi.mocked(updateSettingsFilePreservingFormat);
1611
- const error = new Error('Write failed');
1612
- mockUpdateSettings.mockImplementation(() => {
1613
- throw error;
1614
- });
1615
- const settingsFile = {
1616
- path: '/mock/settings.json',
1617
- settings: {},
1618
- originalSettings: {},
1619
- };
1620
- saveSettings(settingsFile);
1621
- expect(mockCoreEvents.emitFeedback).toHaveBeenCalledWith('error', 'There was an error saving your latest settings changes.', error);
1622
- });
1623
- });
1624
- describe('LoadedSettings and remote admin settings', () => {
1625
- it('should prioritize remote admin settings over file-based admin settings', () => {
1626
- mockFsExistsSync.mockReturnValue(true);
1627
- const systemSettingsContent = {
1628
- admin: {
1629
- // These should be ignored
1630
- secureModeEnabled: true,
1631
- mcp: { enabled: false },
1632
- extensions: { enabled: false },
1633
- },
1634
- // A non-admin setting to ensure it's still processed
1635
- ui: { theme: 'system-theme' },
1636
- };
1637
- fs.readFileSync.mockImplementation((p) => {
1638
- if (p === getSystemSettingsPath()) {
1639
- return JSON.stringify(systemSettingsContent);
1640
- }
1641
- return '{}';
1642
- });
1643
- const loadedSettings = loadSettings(MOCK_WORKSPACE_DIR);
1644
- // 1. Verify that on initial load, file-based admin settings are ignored
1645
- // and schema defaults are used instead.
1646
- expect(loadedSettings.merged.admin?.secureModeEnabled).toBe(false); // default: false
1647
- expect(loadedSettings.merged.admin?.mcp?.enabled).toBe(true); // default: true
1648
- expect(loadedSettings.merged.admin?.extensions?.enabled).toBe(true); // default: true
1649
- expect(loadedSettings.merged.ui?.theme).toBe('system-theme'); // non-admin setting should be loaded
1650
- // 2. Now, set remote admin settings.
1651
- loadedSettings.setRemoteAdminSettings({
1652
- secureModeEnabled: true,
1653
- mcpSetting: { mcpEnabled: false },
1654
- cliFeatureSetting: { extensionsSetting: { extensionsEnabled: false } },
1655
- });
1656
- // 3. Verify that remote admin settings take precedence.
1657
- expect(loadedSettings.merged.admin?.secureModeEnabled).toBe(true);
1658
- expect(loadedSettings.merged.admin?.mcp?.enabled).toBe(false);
1659
- expect(loadedSettings.merged.admin?.extensions?.enabled).toBe(false);
1660
- // non-admin setting should remain unchanged
1661
- expect(loadedSettings.merged.ui?.theme).toBe('system-theme');
1662
- });
1663
- it('should set remote admin settings and recompute merged settings', () => {
1664
- mockFsExistsSync.mockReturnValue(true);
1665
- const systemSettingsContent = {
1666
- admin: {
1667
- secureModeEnabled: false,
1668
- mcp: { enabled: false },
1669
- extensions: { enabled: false },
1670
- },
1671
- ui: { theme: 'initial-theme' },
1672
- };
1673
- fs.readFileSync.mockImplementation((p) => {
1674
- if (p === getSystemSettingsPath()) {
1675
- return JSON.stringify(systemSettingsContent);
1676
- }
1677
- return '{}';
1678
- });
1679
- const loadedSettings = loadSettings(MOCK_WORKSPACE_DIR);
1680
- // Ensure initial state from defaults (as file-based admin settings are ignored)
1681
- expect(loadedSettings.merged.admin?.secureModeEnabled).toBe(false);
1682
- expect(loadedSettings.merged.admin?.mcp?.enabled).toBe(true);
1683
- expect(loadedSettings.merged.admin?.extensions?.enabled).toBe(true);
1684
- expect(loadedSettings.merged.ui?.theme).toBe('initial-theme');
1685
- const newRemoteSettings = {
1686
- secureModeEnabled: true,
1687
- mcpSetting: { mcpEnabled: false },
1688
- cliFeatureSetting: { extensionsSetting: { extensionsEnabled: false } },
1689
- };
1690
- loadedSettings.setRemoteAdminSettings(newRemoteSettings);
1691
- // Verify that remote admin settings are applied
1692
- expect(loadedSettings.merged.admin?.secureModeEnabled).toBe(true);
1693
- expect(loadedSettings.merged.admin?.mcp?.enabled).toBe(false);
1694
- expect(loadedSettings.merged.admin?.extensions?.enabled).toBe(false);
1695
- // Non-admin settings should remain untouched
1696
- expect(loadedSettings.merged.ui?.theme).toBe('initial-theme');
1697
- // Verify that calling setRemoteAdminSettings with partial data overwrites previous remote settings
1698
- // and missing properties revert to schema defaults.
1699
- loadedSettings.setRemoteAdminSettings({ secureModeEnabled: false });
1700
- expect(loadedSettings.merged.admin?.secureModeEnabled).toBe(false);
1701
- expect(loadedSettings.merged.admin?.mcp?.enabled).toBe(true); // Reverts to default: true
1702
- expect(loadedSettings.merged.admin?.extensions?.enabled).toBe(true); // Reverts to default: true
1703
- });
1704
- it('should correctly handle undefined remote admin settings', () => {
1705
- mockFsExistsSync.mockReturnValue(true);
1706
- const systemSettingsContent = {
1707
- ui: { theme: 'initial-theme' },
1708
- };
1709
- fs.readFileSync.mockImplementation((p) => {
1710
- if (p === getSystemSettingsPath()) {
1711
- return JSON.stringify(systemSettingsContent);
1712
- }
1713
- return '{}';
1714
- });
1715
- const loadedSettings = loadSettings(MOCK_WORKSPACE_DIR);
1716
- // Should have default admin settings
1717
- expect(loadedSettings.merged.admin?.secureModeEnabled).toBe(false);
1718
- expect(loadedSettings.merged.admin?.mcp?.enabled).toBe(true);
1719
- expect(loadedSettings.merged.admin?.extensions?.enabled).toBe(true);
1720
- loadedSettings.setRemoteAdminSettings({}); // Set empty remote settings
1721
- // Admin settings should revert to defaults because there are no remote overrides
1722
- expect(loadedSettings.merged.admin?.secureModeEnabled).toBe(false);
1723
- expect(loadedSettings.merged.admin?.mcp?.enabled).toBe(true);
1724
- expect(loadedSettings.merged.admin?.extensions?.enabled).toBe(true);
1725
- });
1726
- it('should correctly handle missing properties in remote admin settings', () => {
1727
- mockFsExistsSync.mockReturnValue(true);
1728
- const systemSettingsContent = {
1729
- admin: {
1730
- secureModeEnabled: true,
1731
- },
1732
- };
1733
- fs.readFileSync.mockImplementation((p) => {
1734
- if (p === getSystemSettingsPath()) {
1735
- return JSON.stringify(systemSettingsContent);
1736
- }
1737
- return '{}';
1738
- });
1739
- const loadedSettings = loadSettings(MOCK_WORKSPACE_DIR);
1740
- // Ensure initial state from defaults (as file-based admin settings are ignored)
1741
- expect(loadedSettings.merged.admin?.secureModeEnabled).toBe(false);
1742
- expect(loadedSettings.merged.admin?.mcp?.enabled).toBe(true);
1743
- expect(loadedSettings.merged.admin?.extensions?.enabled).toBe(true);
1744
- // Set remote settings with only secureModeEnabled
1745
- loadedSettings.setRemoteAdminSettings({
1746
- secureModeEnabled: true,
1747
- });
1748
- // Verify secureModeEnabled is updated, others remain defaults
1749
- expect(loadedSettings.merged.admin?.secureModeEnabled).toBe(true);
1750
- expect(loadedSettings.merged.admin?.mcp?.enabled).toBe(true);
1751
- expect(loadedSettings.merged.admin?.extensions?.enabled).toBe(true);
1752
- // Set remote settings with only mcpSetting.mcpEnabled
1753
- loadedSettings.setRemoteAdminSettings({
1754
- mcpSetting: { mcpEnabled: false },
1755
- });
1756
- // Verify mcpEnabled is updated, others remain defaults (secureModeEnabled reverts to default:false)
1757
- expect(loadedSettings.merged.admin?.secureModeEnabled).toBe(false);
1758
- expect(loadedSettings.merged.admin?.mcp?.enabled).toBe(false);
1759
- expect(loadedSettings.merged.admin?.extensions?.enabled).toBe(true);
1760
- // Set remote settings with only cliFeatureSetting.extensionsSetting.extensionsEnabled
1761
- loadedSettings.setRemoteAdminSettings({
1762
- cliFeatureSetting: { extensionsSetting: { extensionsEnabled: false } },
1763
- });
1764
- // Verify extensionsEnabled is updated, others remain defaults
1765
- expect(loadedSettings.merged.admin?.secureModeEnabled).toBe(false);
1766
- expect(loadedSettings.merged.admin?.mcp?.enabled).toBe(true);
1767
- expect(loadedSettings.merged.admin?.extensions?.enabled).toBe(false);
1768
- });
1769
- it('should set skills based on advancedFeaturesEnabled', () => {
1770
- const loadedSettings = loadSettings();
1771
- loadedSettings.setRemoteAdminSettings({
1772
- cliFeatureSetting: {
1773
- advancedFeaturesEnabled: true,
1774
- },
1775
- });
1776
- expect(loadedSettings.merged.admin.skills?.enabled).toBe(true);
1777
- loadedSettings.setRemoteAdminSettings({
1778
- cliFeatureSetting: {
1779
- advancedFeaturesEnabled: false,
1780
- },
1781
- });
1782
- expect(loadedSettings.merged.admin.skills?.enabled).toBe(false);
1783
- });
1784
- });
1785
- describe('getDefaultsFromSchema', () => {
1786
- it('should extract defaults from a schema', () => {
1787
- const mockSchema = {
1788
- prop1: {
1789
- type: 'string',
1790
- default: 'default1',
1791
- label: 'Prop 1',
1792
- category: 'General',
1793
- requiresRestart: false,
1794
- },
1795
- nested: {
1796
- type: 'object',
1797
- label: 'Nested',
1798
- category: 'General',
1799
- requiresRestart: false,
1800
- default: {},
1801
- properties: {
1802
- prop2: {
1803
- type: 'number',
1804
- default: 42,
1805
- label: 'Prop 2',
1806
- category: 'General',
1807
- requiresRestart: false,
1808
- },
1809
- },
1810
- },
1811
- };
1812
- const defaults = getDefaultsFromSchema(mockSchema);
1813
- expect(defaults).toEqual({
1814
- prop1: 'default1',
1815
- nested: {
1816
- prop2: 42,
1817
- },
1818
- });
1819
- });
1820
- });
1821
- });
1822
- //# sourceMappingURL=settings.test.js.map