@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,2413 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
- import * as os from 'node:os';
8
- import * as path from 'node:path';
9
- import { DEFAULT_FILE_FILTERING_OPTIONS, OutputFormat, SHELL_TOOL_NAME, WRITE_FILE_TOOL_NAME, EDIT_TOOL_NAME, WEB_FETCH_TOOL_NAME, debugLogger, ApprovalMode, } from '@didim365/agent-cli-core';
10
- import { loadCliConfig, parseArguments } from './config.js';
11
- import { createTestMergedSettings } from './settings.js';
12
- import * as ServerConfig from '@didim365/agent-cli-core';
13
- import { isWorkspaceTrusted } from './trustedFolders.js';
14
- import { ExtensionManager } from './extension-manager.js';
15
- import { RESUME_LATEST } from '../utils/sessionUtils.js';
16
- vi.mock('./trustedFolders.js', () => ({
17
- isWorkspaceTrusted: vi.fn(() => ({ isTrusted: true, source: 'file' })), // Default to trusted
18
- }));
19
- vi.mock('./sandboxConfig.js', () => ({
20
- loadSandboxConfig: vi.fn(async () => undefined),
21
- }));
22
- vi.mock('../commands/utils.js', () => ({
23
- exitCli: vi.fn(),
24
- }));
25
- vi.mock('fs', async (importOriginal) => {
26
- const actualFs = await importOriginal();
27
- const pathMod = await import('node:path');
28
- const mockHome = pathMod.resolve(pathMod.sep, 'mock', 'home', 'user');
29
- const MOCK_CWD1 = process.cwd();
30
- const MOCK_CWD2 = pathMod.resolve(pathMod.sep, 'home', 'user', 'project');
31
- const mockPaths = new Set([
32
- MOCK_CWD1,
33
- MOCK_CWD2,
34
- pathMod.resolve(pathMod.sep, 'cli', 'path1'),
35
- pathMod.resolve(pathMod.sep, 'settings', 'path1'),
36
- pathMod.join(mockHome, 'settings', 'path2'),
37
- pathMod.join(MOCK_CWD2, 'cli', 'path2'),
38
- pathMod.join(MOCK_CWD2, 'settings', 'path3'),
39
- ]);
40
- return {
41
- ...actualFs,
42
- mkdirSync: vi.fn((p) => {
43
- mockPaths.add(p.toString());
44
- }),
45
- writeFileSync: vi.fn(),
46
- existsSync: vi.fn((p) => mockPaths.has(p.toString())),
47
- statSync: vi.fn((p) => {
48
- if (mockPaths.has(p.toString())) {
49
- return { isDirectory: () => true };
50
- }
51
- return actualFs.statSync(p);
52
- }),
53
- realpathSync: vi.fn((p) => p),
54
- };
55
- });
56
- vi.mock('os', async (importOriginal) => {
57
- const actualOs = await importOriginal();
58
- return {
59
- ...actualOs,
60
- homedir: vi.fn(() => path.resolve(path.sep, 'mock', 'home', 'user')),
61
- };
62
- });
63
- vi.mock('open', () => ({
64
- default: vi.fn(),
65
- }));
66
- vi.mock('read-package-up', () => ({
67
- readPackageUp: vi.fn(() => Promise.resolve({ packageJson: { version: 'test-version' } })),
68
- }));
69
- vi.mock('@didim365/agent-cli-core', async () => {
70
- const actualServer = await vi.importActual('@didim365/agent-cli-core');
71
- return {
72
- ...actualServer,
73
- IdeClient: {
74
- getInstance: vi.fn().mockResolvedValue({
75
- getConnectionStatus: vi.fn(),
76
- initialize: vi.fn(),
77
- shutdown: vi.fn(),
78
- }),
79
- },
80
- loadEnvironment: vi.fn(),
81
- loadServerHierarchicalMemory: vi.fn((cwd, dirs, debug, fileService, extensionLoader, _maxDirs) => {
82
- const extensionPaths = extensionLoader
83
- .getExtensions()
84
- .flatMap((e) => e.contextFiles);
85
- return Promise.resolve({
86
- memoryContent: extensionPaths.join(',') || '',
87
- fileCount: extensionPaths?.length || 0,
88
- filePaths: extensionPaths,
89
- });
90
- }),
91
- DEFAULT_MEMORY_FILE_FILTERING_OPTIONS: {
92
- respectGitIgnore: false,
93
- respectGeminiIgnore: true,
94
- },
95
- DEFAULT_FILE_FILTERING_OPTIONS: {
96
- respectGitIgnore: true,
97
- respectGeminiIgnore: true,
98
- },
99
- createPolicyEngineConfig: vi.fn(async () => ({
100
- rules: [],
101
- checkers: [],
102
- defaultDecision: ServerConfig.PolicyDecision.ASK_USER,
103
- approvalMode: ServerConfig.ApprovalMode.DEFAULT,
104
- })),
105
- };
106
- });
107
- vi.mock('./extension-manager.js', () => {
108
- const ExtensionManager = vi.fn();
109
- ExtensionManager.prototype.loadExtensions = vi.fn();
110
- ExtensionManager.prototype.getExtensions = vi.fn().mockReturnValue([]);
111
- return { ExtensionManager };
112
- });
113
- // Global setup to ensure clean environment for all tests in this file
114
- const originalArgv = process.argv;
115
- const originalGeminiModel = process.env['GEMINI_MODEL'];
116
- beforeEach(() => {
117
- delete process.env['GEMINI_MODEL'];
118
- // Restore ExtensionManager mocks by re-assigning them
119
- ExtensionManager.prototype.getExtensions = vi.fn().mockReturnValue([]);
120
- ExtensionManager.prototype.loadExtensions = vi
121
- .fn()
122
- .mockResolvedValue(undefined);
123
- });
124
- afterEach(() => {
125
- process.argv = originalArgv;
126
- if (originalGeminiModel !== undefined) {
127
- process.env['GEMINI_MODEL'] = originalGeminiModel;
128
- }
129
- else {
130
- delete process.env['GEMINI_MODEL'];
131
- }
132
- });
133
- describe('parseArguments', () => {
134
- it.each([
135
- {
136
- description: 'long flags',
137
- argv: [
138
- 'node',
139
- 'script.js',
140
- '--prompt',
141
- 'test prompt',
142
- '--prompt-interactive',
143
- 'interactive prompt',
144
- ],
145
- },
146
- {
147
- description: 'short flags',
148
- argv: [
149
- 'node',
150
- 'script.js',
151
- '-p',
152
- 'test prompt',
153
- '-i',
154
- 'interactive prompt',
155
- ],
156
- },
157
- ])('should throw an error when using conflicting prompt flags ($description)', async ({ argv }) => {
158
- process.argv = argv;
159
- const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
160
- throw new Error('process.exit called');
161
- });
162
- const mockConsoleError = vi
163
- .spyOn(console, 'error')
164
- .mockImplementation(() => { });
165
- await expect(parseArguments(createTestMergedSettings())).rejects.toThrow('process.exit called');
166
- expect(mockConsoleError).toHaveBeenCalledWith(expect.stringContaining('Cannot use both --prompt (-p) and --prompt-interactive (-i) together'));
167
- mockExit.mockRestore();
168
- mockConsoleError.mockRestore();
169
- });
170
- it.each([
171
- {
172
- description: 'should allow --prompt without --prompt-interactive',
173
- argv: ['node', 'script.js', '--prompt', 'test prompt'],
174
- expected: { prompt: 'test prompt', promptInteractive: undefined },
175
- },
176
- {
177
- description: 'should allow --prompt-interactive without --prompt',
178
- argv: ['node', 'script.js', '--prompt-interactive', 'interactive prompt'],
179
- expected: { prompt: undefined, promptInteractive: 'interactive prompt' },
180
- },
181
- {
182
- description: 'should allow -i flag as alias for --prompt-interactive',
183
- argv: ['node', 'script.js', '-i', 'interactive prompt'],
184
- expected: { prompt: undefined, promptInteractive: 'interactive prompt' },
185
- },
186
- ])('$description', async ({ argv, expected }) => {
187
- process.argv = argv;
188
- const parsedArgs = await parseArguments(createTestMergedSettings());
189
- expect(parsedArgs.prompt).toBe(expected.prompt);
190
- expect(parsedArgs.promptInteractive).toBe(expected.promptInteractive);
191
- });
192
- describe('positional arguments and @commands', () => {
193
- it.each([
194
- {
195
- description: 'should convert positional query argument to prompt by default',
196
- argv: ['node', 'script.js', 'Hi Gemini'],
197
- expectedQuery: 'Hi Gemini',
198
- expectedModel: undefined,
199
- debug: false,
200
- },
201
- {
202
- description: 'should map @path to prompt (one-shot) when it starts with @',
203
- argv: ['node', 'script.js', '@path ./file.md'],
204
- expectedQuery: '@path ./file.md',
205
- expectedModel: undefined,
206
- debug: false,
207
- },
208
- {
209
- description: 'should map @path to prompt even when config flags are present',
210
- argv: [
211
- 'node',
212
- 'script.js',
213
- '@path',
214
- './file.md',
215
- '--model',
216
- 'gemini-2.5-pro',
217
- ],
218
- expectedQuery: '@path ./file.md',
219
- expectedModel: 'gemini-2.5-pro',
220
- debug: false,
221
- },
222
- {
223
- description: 'maps unquoted positional @path + arg to prompt (one-shot)',
224
- argv: ['node', 'script.js', '@path', './file.md'],
225
- expectedQuery: '@path ./file.md',
226
- expectedModel: undefined,
227
- debug: false,
228
- },
229
- {
230
- description: 'should handle multiple @path arguments in a single command (one-shot)',
231
- argv: [
232
- 'node',
233
- 'script.js',
234
- '@path',
235
- './file1.md',
236
- '@path',
237
- './file2.md',
238
- ],
239
- expectedQuery: '@path ./file1.md @path ./file2.md',
240
- expectedModel: undefined,
241
- debug: false,
242
- },
243
- {
244
- description: 'should handle mixed quoted and unquoted @path arguments (one-shot)',
245
- argv: [
246
- 'node',
247
- 'script.js',
248
- '@path ./file1.md',
249
- '@path',
250
- './file2.md',
251
- 'additional text',
252
- ],
253
- expectedQuery: '@path ./file1.md @path ./file2.md additional text',
254
- expectedModel: undefined,
255
- debug: false,
256
- },
257
- {
258
- description: 'should map @path to prompt with ambient flags (debug)',
259
- argv: ['node', 'script.js', '@path', './file.md', '--debug'],
260
- expectedQuery: '@path ./file.md',
261
- expectedModel: undefined,
262
- debug: true,
263
- },
264
- {
265
- description: 'should map @include to prompt (one-shot)',
266
- argv: ['node', 'script.js', '@include src/'],
267
- expectedQuery: '@include src/',
268
- expectedModel: undefined,
269
- debug: false,
270
- },
271
- {
272
- description: 'should map @search to prompt (one-shot)',
273
- argv: ['node', 'script.js', '@search pattern'],
274
- expectedQuery: '@search pattern',
275
- expectedModel: undefined,
276
- debug: false,
277
- },
278
- {
279
- description: 'should map @web to prompt (one-shot)',
280
- argv: ['node', 'script.js', '@web query'],
281
- expectedQuery: '@web query',
282
- expectedModel: undefined,
283
- debug: false,
284
- },
285
- {
286
- description: 'should map @git to prompt (one-shot)',
287
- argv: ['node', 'script.js', '@git status'],
288
- expectedQuery: '@git status',
289
- expectedModel: undefined,
290
- debug: false,
291
- },
292
- {
293
- description: 'should handle @command with leading whitespace',
294
- argv: ['node', 'script.js', ' @path ./file.md'],
295
- expectedQuery: ' @path ./file.md',
296
- expectedModel: undefined,
297
- debug: false,
298
- },
299
- ])('$description', async ({ argv, expectedQuery, expectedModel, debug }) => {
300
- process.argv = argv;
301
- const parsedArgs = await parseArguments(createTestMergedSettings());
302
- expect(parsedArgs.query).toBe(expectedQuery);
303
- expect(parsedArgs.prompt).toBe(expectedQuery);
304
- expect(parsedArgs.promptInteractive).toBeUndefined();
305
- if (expectedModel) {
306
- expect(parsedArgs.model).toBe(expectedModel);
307
- }
308
- if (debug) {
309
- expect(parsedArgs.debug).toBe(true);
310
- }
311
- });
312
- it('should include a startup message when converting positional query to interactive prompt', async () => {
313
- const originalIsTTY = process.stdin.isTTY;
314
- process.stdin.isTTY = true;
315
- process.argv = ['node', 'script.js', 'hello'];
316
- try {
317
- const argv = await parseArguments(createTestMergedSettings());
318
- expect(argv.startupMessages).toContain('Positional arguments now default to interactive mode. To run in non-interactive mode, use the --prompt (-p) flag.');
319
- }
320
- finally {
321
- process.stdin.isTTY = originalIsTTY;
322
- }
323
- });
324
- });
325
- it.each([
326
- {
327
- description: 'long flags',
328
- argv: ['node', 'script.js', '--yolo', '--approval-mode', 'default'],
329
- },
330
- {
331
- description: 'short flags',
332
- argv: ['node', 'script.js', '-y', '--approval-mode', 'yolo'],
333
- },
334
- ])('should throw an error when using conflicting yolo/approval-mode flags ($description)', async ({ argv }) => {
335
- process.argv = argv;
336
- const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
337
- throw new Error('process.exit called');
338
- });
339
- const mockConsoleError = vi
340
- .spyOn(console, 'error')
341
- .mockImplementation(() => { });
342
- await expect(parseArguments(createTestMergedSettings())).rejects.toThrow('process.exit called');
343
- expect(mockConsoleError).toHaveBeenCalledWith(expect.stringContaining('Cannot use both --yolo (-y) and --approval-mode together. Use --approval-mode=yolo instead.'));
344
- mockExit.mockRestore();
345
- mockConsoleError.mockRestore();
346
- });
347
- it.each([
348
- {
349
- description: 'should allow --approval-mode without --yolo',
350
- argv: ['node', 'script.js', '--approval-mode', 'auto_edit'],
351
- expected: { approvalMode: 'auto_edit', yolo: false },
352
- },
353
- {
354
- description: 'should allow --yolo without --approval-mode',
355
- argv: ['node', 'script.js', '--yolo'],
356
- expected: { approvalMode: undefined, yolo: true },
357
- },
358
- ])('$description', async ({ argv, expected }) => {
359
- process.argv = argv;
360
- const parsedArgs = await parseArguments(createTestMergedSettings());
361
- expect(parsedArgs.approvalMode).toBe(expected.approvalMode);
362
- expect(parsedArgs.yolo).toBe(expected.yolo);
363
- });
364
- it('should reject invalid --approval-mode values', async () => {
365
- process.argv = ['node', 'script.js', '--approval-mode', 'invalid'];
366
- const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
367
- throw new Error('process.exit called');
368
- });
369
- const mockConsoleError = vi
370
- .spyOn(console, 'error')
371
- .mockImplementation(() => { });
372
- const debugErrorSpy = vi
373
- .spyOn(debugLogger, 'error')
374
- .mockImplementation(() => { });
375
- await expect(parseArguments(createTestMergedSettings())).rejects.toThrow('process.exit called');
376
- expect(debugErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Invalid values:'));
377
- expect(mockConsoleError).toHaveBeenCalled();
378
- mockExit.mockRestore();
379
- mockConsoleError.mockRestore();
380
- debugErrorSpy.mockRestore();
381
- });
382
- it('should allow resuming a session without prompt argument in non-interactive mode (expecting stdin)', async () => {
383
- const originalIsTTY = process.stdin.isTTY;
384
- process.stdin.isTTY = false;
385
- process.argv = ['node', 'script.js', '--resume', 'session-id'];
386
- try {
387
- const argv = await parseArguments(createTestMergedSettings());
388
- expect(argv.resume).toBe('session-id');
389
- }
390
- finally {
391
- process.stdin.isTTY = originalIsTTY;
392
- }
393
- });
394
- it('should return RESUME_LATEST constant when --resume is passed without a value', async () => {
395
- const originalIsTTY = process.stdin.isTTY;
396
- process.stdin.isTTY = true; // Make it interactive to avoid validation error
397
- process.argv = ['node', 'script.js', '--resume'];
398
- try {
399
- const argv = await parseArguments(createTestMergedSettings());
400
- expect(argv.resume).toBe(RESUME_LATEST);
401
- expect(argv.resume).toBe('latest');
402
- }
403
- finally {
404
- process.stdin.isTTY = originalIsTTY;
405
- }
406
- });
407
- it('should support comma-separated values for --allowed-tools', async () => {
408
- process.argv = [
409
- 'node',
410
- 'script.js',
411
- '--allowed-tools',
412
- 'read_file,ShellTool(git status)',
413
- ];
414
- const argv = await parseArguments(createTestMergedSettings());
415
- expect(argv.allowedTools).toEqual(['read_file', 'ShellTool(git status)']);
416
- });
417
- it('should support comma-separated values for --allowed-mcp-server-names', async () => {
418
- process.argv = [
419
- 'node',
420
- 'script.js',
421
- '--allowed-mcp-server-names',
422
- 'server1,server2',
423
- ];
424
- const argv = await parseArguments(createTestMergedSettings());
425
- expect(argv.allowedMcpServerNames).toEqual(['server1', 'server2']);
426
- });
427
- it('should support comma-separated values for --extensions', async () => {
428
- process.argv = ['node', 'script.js', '--extensions', 'ext1,ext2'];
429
- const argv = await parseArguments(createTestMergedSettings());
430
- expect(argv.extensions).toEqual(['ext1', 'ext2']);
431
- });
432
- it('should correctly parse positional arguments when flags with arguments are present', async () => {
433
- process.argv = [
434
- 'node',
435
- 'script.js',
436
- '--model',
437
- 'test-model-string',
438
- 'my-positional-arg',
439
- ];
440
- const argv = await parseArguments(createTestMergedSettings());
441
- expect(argv.model).toBe('test-model-string');
442
- expect(argv.query).toBe('my-positional-arg');
443
- });
444
- it('should handle long positional prompts with multiple flags', async () => {
445
- process.argv = [
446
- 'node',
447
- 'script.js',
448
- '-e',
449
- 'none',
450
- '--approval-mode=auto_edit',
451
- '--allowed-tools=ShellTool',
452
- '--allowed-tools=ShellTool(whoami)',
453
- '--allowed-tools=ShellTool(wc)',
454
- 'Use whoami to write a poem in file poem.md about my username in pig latin and use wc to tell me how many lines are in the poem you wrote.',
455
- ];
456
- const argv = await parseArguments(createTestMergedSettings());
457
- expect(argv.extensions).toEqual(['none']);
458
- expect(argv.approvalMode).toBe('auto_edit');
459
- expect(argv.allowedTools).toEqual([
460
- 'ShellTool',
461
- 'ShellTool(whoami)',
462
- 'ShellTool(wc)',
463
- ]);
464
- expect(argv.query).toBe('Use whoami to write a poem in file poem.md about my username in pig latin and use wc to tell me how many lines are in the poem you wrote.');
465
- });
466
- it('should set isCommand to true for mcp command', async () => {
467
- process.argv = ['node', 'script.js', 'mcp', 'list'];
468
- const argv = await parseArguments(createTestMergedSettings());
469
- expect(argv.isCommand).toBe(true);
470
- });
471
- it('should set isCommand to true for extensions command', async () => {
472
- process.argv = ['node', 'script.js', 'extensions', 'list'];
473
- // Extensions command uses experimental settings
474
- const settings = createTestMergedSettings({
475
- experimental: { extensionManagement: true },
476
- });
477
- const argv = await parseArguments(settings);
478
- expect(argv.isCommand).toBe(true);
479
- });
480
- it('should set isCommand to true for skills command', async () => {
481
- process.argv = ['node', 'script.js', 'skills', 'list'];
482
- // Skills command enabled by default or via experimental
483
- const settings = createTestMergedSettings({
484
- experimental: { skills: true },
485
- });
486
- const argv = await parseArguments(settings);
487
- expect(argv.isCommand).toBe(true);
488
- });
489
- it('should set isCommand to true for hooks command', async () => {
490
- process.argv = ['node', 'script.js', 'hooks', 'migrate'];
491
- // Hooks command enabled via tools settings
492
- const settings = createTestMergedSettings({
493
- tools: { enableHooks: true },
494
- });
495
- const argv = await parseArguments(settings);
496
- expect(argv.isCommand).toBe(true);
497
- });
498
- });
499
- describe('loadCliConfig', () => {
500
- beforeEach(() => {
501
- vi.resetAllMocks();
502
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
503
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
504
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
505
- });
506
- afterEach(() => {
507
- vi.unstubAllEnvs();
508
- vi.restoreAllMocks();
509
- });
510
- describe('Proxy configuration', () => {
511
- const originalProxyEnv = {};
512
- const proxyEnvVars = [
513
- 'HTTP_PROXY',
514
- 'HTTPS_PROXY',
515
- 'http_proxy',
516
- 'https_proxy',
517
- ];
518
- beforeEach(() => {
519
- for (const key of proxyEnvVars) {
520
- originalProxyEnv[key] = process.env[key];
521
- delete process.env[key];
522
- }
523
- });
524
- afterEach(() => {
525
- for (const key of proxyEnvVars) {
526
- if (originalProxyEnv[key]) {
527
- process.env[key] = originalProxyEnv[key];
528
- }
529
- else {
530
- delete process.env[key];
531
- }
532
- }
533
- });
534
- it(`should leave proxy to empty by default`, async () => {
535
- process.argv = ['node', 'script.js'];
536
- const argv = await parseArguments(createTestMergedSettings());
537
- const settings = createTestMergedSettings();
538
- const config = await loadCliConfig(settings, 'test-session', argv);
539
- expect(config.getProxy()).toBeFalsy();
540
- });
541
- const proxy_url = 'http://localhost:7890';
542
- const testCases = [
543
- {
544
- input: {
545
- env_name: 'https_proxy',
546
- proxy_url,
547
- },
548
- expected: proxy_url,
549
- },
550
- {
551
- input: {
552
- env_name: 'http_proxy',
553
- proxy_url,
554
- },
555
- expected: proxy_url,
556
- },
557
- {
558
- input: {
559
- env_name: 'HTTPS_PROXY',
560
- proxy_url,
561
- },
562
- expected: proxy_url,
563
- },
564
- {
565
- input: {
566
- env_name: 'HTTP_PROXY',
567
- proxy_url,
568
- },
569
- expected: proxy_url,
570
- },
571
- ];
572
- testCases.forEach(({ input, expected }) => {
573
- it(`should set proxy to ${expected} according to environment variable [${input.env_name}]`, async () => {
574
- vi.stubEnv(input.env_name, input.proxy_url);
575
- process.argv = ['node', 'script.js'];
576
- const argv = await parseArguments(createTestMergedSettings());
577
- const settings = createTestMergedSettings();
578
- const config = await loadCliConfig(settings, 'test-session', argv);
579
- expect(config.getProxy()).toBe(expected);
580
- });
581
- });
582
- });
583
- it('should use default fileFilter options when unconfigured', async () => {
584
- process.argv = ['node', 'script.js'];
585
- const argv = await parseArguments(createTestMergedSettings());
586
- const settings = createTestMergedSettings();
587
- const config = await loadCliConfig(settings, 'test-session', argv);
588
- expect(config.getFileFilteringRespectGitIgnore()).toBe(DEFAULT_FILE_FILTERING_OPTIONS.respectGitIgnore);
589
- expect(config.getFileFilteringRespectGeminiIgnore()).toBe(DEFAULT_FILE_FILTERING_OPTIONS.respectGeminiIgnore);
590
- expect(config.getApprovalMode()).toBe(ApprovalMode.DEFAULT);
591
- });
592
- it('should be non-interactive when isCommand is set', async () => {
593
- process.argv = ['node', 'script.js', 'mcp', 'list'];
594
- const argv = await parseArguments(createTestMergedSettings());
595
- argv.isCommand = true; // explicitly set it as if middleware ran (it does in parseArguments but we want to be sure for this isolated test if we were mocking argv)
596
- // reset tty for this test
597
- process.stdin.isTTY = true;
598
- const settings = createTestMergedSettings();
599
- const config = await loadCliConfig(settings, 'test-session', argv);
600
- expect(config.isInteractive()).toBe(false);
601
- });
602
- });
603
- describe('Hierarchical Memory Loading (config.ts) - Placeholder Suite', () => {
604
- beforeEach(() => {
605
- vi.resetAllMocks();
606
- // Restore ExtensionManager mocks that were reset
607
- ExtensionManager.prototype.getExtensions = vi.fn().mockReturnValue([]);
608
- ExtensionManager.prototype.loadExtensions = vi
609
- .fn()
610
- .mockResolvedValue(undefined);
611
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
612
- // Other common mocks would be reset here.
613
- });
614
- afterEach(() => {
615
- vi.restoreAllMocks();
616
- });
617
- it('should pass extension context file paths to loadServerHierarchicalMemory', async () => {
618
- process.argv = ['node', 'script.js'];
619
- const settings = createTestMergedSettings();
620
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
621
- {
622
- path: '/path/to/ext1',
623
- name: 'ext1',
624
- id: 'ext1-id',
625
- version: '1.0.0',
626
- contextFiles: ['/path/to/ext1/GEMINI.md'],
627
- isActive: true,
628
- },
629
- {
630
- path: '/path/to/ext2',
631
- name: 'ext2',
632
- id: 'ext2-id',
633
- version: '1.0.0',
634
- contextFiles: [],
635
- isActive: true,
636
- },
637
- {
638
- path: '/path/to/ext3',
639
- name: 'ext3',
640
- id: 'ext3-id',
641
- version: '1.0.0',
642
- contextFiles: [
643
- '/path/to/ext3/context1.md',
644
- '/path/to/ext3/context2.md',
645
- ],
646
- isActive: true,
647
- },
648
- ]);
649
- const argv = await parseArguments(createTestMergedSettings());
650
- await loadCliConfig(settings, 'session-id', argv);
651
- expect(ServerConfig.loadServerHierarchicalMemory).toHaveBeenCalledWith(expect.any(String), [], false, expect.any(Object), expect.any(ExtensionManager), true, 'tree', expect.objectContaining({
652
- respectGitIgnore: true,
653
- respectGeminiIgnore: true,
654
- }), 200);
655
- });
656
- it('should pass includeDirectories to loadServerHierarchicalMemory when loadMemoryFromIncludeDirectories is true', async () => {
657
- process.argv = ['node', 'script.js'];
658
- const includeDir = path.resolve(path.sep, 'path', 'to', 'include');
659
- const settings = createTestMergedSettings({
660
- context: {
661
- includeDirectories: [includeDir],
662
- loadMemoryFromIncludeDirectories: true,
663
- },
664
- });
665
- const argv = await parseArguments(settings);
666
- await loadCliConfig(settings, 'session-id', argv);
667
- expect(ServerConfig.loadServerHierarchicalMemory).toHaveBeenCalledWith(expect.any(String), [includeDir], false, expect.any(Object), expect.any(ExtensionManager), true, 'tree', expect.objectContaining({
668
- respectGitIgnore: true,
669
- respectGeminiIgnore: true,
670
- }), 200);
671
- });
672
- it('should NOT pass includeDirectories to loadServerHierarchicalMemory when loadMemoryFromIncludeDirectories is false', async () => {
673
- process.argv = ['node', 'script.js'];
674
- const settings = createTestMergedSettings({
675
- context: {
676
- includeDirectories: ['/path/to/include'],
677
- loadMemoryFromIncludeDirectories: false,
678
- },
679
- });
680
- const argv = await parseArguments(settings);
681
- await loadCliConfig(settings, 'session-id', argv);
682
- expect(ServerConfig.loadServerHierarchicalMemory).toHaveBeenCalledWith(expect.any(String), [], false, expect.any(Object), expect.any(ExtensionManager), true, 'tree', expect.objectContaining({
683
- respectGitIgnore: true,
684
- respectGeminiIgnore: true,
685
- }), 200);
686
- });
687
- });
688
- describe('mergeMcpServers', () => {
689
- it('should not modify the original settings object', async () => {
690
- const settings = createTestMergedSettings({
691
- mcpServers: {
692
- 'test-server': {
693
- url: 'http://localhost:8080',
694
- },
695
- },
696
- });
697
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
698
- {
699
- path: '/path/to/ext1',
700
- name: 'ext1',
701
- id: 'ext1-id',
702
- version: '1.0.0',
703
- mcpServers: {
704
- 'ext1-server': {
705
- url: 'http://localhost:8081',
706
- },
707
- },
708
- contextFiles: [],
709
- isActive: true,
710
- },
711
- ]);
712
- const originalSettings = JSON.parse(JSON.stringify(settings));
713
- process.argv = ['node', 'script.js'];
714
- const argv = await parseArguments(createTestMergedSettings());
715
- await loadCliConfig(settings, 'test-session', argv);
716
- expect(settings).toEqual(originalSettings);
717
- });
718
- });
719
- describe('mergeExcludeTools', () => {
720
- const defaultExcludes = new Set([
721
- SHELL_TOOL_NAME,
722
- EDIT_TOOL_NAME,
723
- WRITE_FILE_TOOL_NAME,
724
- WEB_FETCH_TOOL_NAME,
725
- ]);
726
- const originalIsTTY = process.stdin.isTTY;
727
- beforeEach(() => {
728
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
729
- process.stdin.isTTY = true;
730
- });
731
- afterEach(() => {
732
- process.stdin.isTTY = originalIsTTY;
733
- });
734
- it('should merge excludeTools from settings and extensions', async () => {
735
- const settings = createTestMergedSettings({
736
- tools: { exclude: ['tool1', 'tool2'] },
737
- });
738
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
739
- {
740
- path: '/path/to/ext1',
741
- name: 'ext1',
742
- id: 'ext1-id',
743
- version: '1.0.0',
744
- excludeTools: ['tool3', 'tool4'],
745
- contextFiles: [],
746
- isActive: true,
747
- },
748
- {
749
- path: '/path/to/ext2',
750
- name: 'ext2',
751
- id: 'ext2-id',
752
- version: '1.0.0',
753
- excludeTools: ['tool5'],
754
- contextFiles: [],
755
- isActive: true,
756
- },
757
- ]);
758
- process.argv = ['node', 'script.js'];
759
- const argv = await parseArguments(createTestMergedSettings());
760
- const config = await loadCliConfig(settings, 'test-session', argv);
761
- expect(config.getExcludeTools()).toEqual(new Set(['tool1', 'tool2', 'tool3', 'tool4', 'tool5']));
762
- expect(config.getExcludeTools()).toHaveLength(5);
763
- });
764
- it('should handle overlapping excludeTools between settings and extensions', async () => {
765
- const settings = createTestMergedSettings({
766
- tools: { exclude: ['tool1', 'tool2'] },
767
- });
768
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
769
- {
770
- path: '/path/to/ext1',
771
- name: 'ext1',
772
- id: 'ext1-id',
773
- version: '1.0.0',
774
- excludeTools: ['tool2', 'tool3'],
775
- contextFiles: [],
776
- isActive: true,
777
- },
778
- ]);
779
- process.argv = ['node', 'script.js'];
780
- const argv = await parseArguments(createTestMergedSettings());
781
- const config = await loadCliConfig(settings, 'test-session', argv);
782
- expect(config.getExcludeTools()).toEqual(new Set(['tool1', 'tool2', 'tool3']));
783
- expect(config.getExcludeTools()).toHaveLength(3);
784
- });
785
- it('should handle overlapping excludeTools between extensions', async () => {
786
- const settings = createTestMergedSettings({
787
- tools: { exclude: ['tool1'] },
788
- });
789
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
790
- {
791
- path: '/path/to/ext1',
792
- name: 'ext1',
793
- id: 'ext1-id',
794
- version: '1.0.0',
795
- excludeTools: ['tool2', 'tool3'],
796
- contextFiles: [],
797
- isActive: true,
798
- },
799
- {
800
- path: '/path/to/ext2',
801
- name: 'ext2',
802
- id: 'ext2-id',
803
- version: '1.0.0',
804
- excludeTools: ['tool3', 'tool4'],
805
- contextFiles: [],
806
- isActive: true,
807
- },
808
- ]);
809
- process.argv = ['node', 'script.js'];
810
- const argv = await parseArguments(createTestMergedSettings());
811
- const config = await loadCliConfig(settings, 'test-session', argv);
812
- expect(config.getExcludeTools()).toEqual(new Set(['tool1', 'tool2', 'tool3', 'tool4']));
813
- expect(config.getExcludeTools()).toHaveLength(4);
814
- });
815
- it('should return an empty array when no excludeTools are specified and it is interactive', async () => {
816
- process.stdin.isTTY = true;
817
- const settings = createTestMergedSettings();
818
- process.argv = ['node', 'script.js'];
819
- const argv = await parseArguments(createTestMergedSettings());
820
- const config = await loadCliConfig(settings, 'test-session', argv);
821
- expect(config.getExcludeTools()).toEqual(new Set([]));
822
- });
823
- it('should return default excludes when no excludeTools are specified and it is not interactive', async () => {
824
- process.stdin.isTTY = false;
825
- const settings = createTestMergedSettings();
826
- process.argv = ['node', 'script.js', '-p', 'test'];
827
- const argv = await parseArguments(createTestMergedSettings());
828
- const config = await loadCliConfig(settings, 'test-session', argv);
829
- expect(config.getExcludeTools()).toEqual(defaultExcludes);
830
- });
831
- it('should handle settings with excludeTools but no extensions', async () => {
832
- process.argv = ['node', 'script.js'];
833
- const argv = await parseArguments(createTestMergedSettings());
834
- const settings = createTestMergedSettings({
835
- tools: { exclude: ['tool1', 'tool2'] },
836
- });
837
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
838
- const config = await loadCliConfig(settings, 'test-session', argv);
839
- expect(config.getExcludeTools()).toEqual(new Set(['tool1', 'tool2']));
840
- expect(config.getExcludeTools()).toHaveLength(2);
841
- });
842
- it('should handle extensions with excludeTools but no settings', async () => {
843
- const settings = createTestMergedSettings();
844
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
845
- {
846
- path: '/path/to/ext',
847
- name: 'ext1',
848
- id: 'ext1-id',
849
- version: '1.0.0',
850
- excludeTools: ['tool1', 'tool2'],
851
- contextFiles: [],
852
- isActive: true,
853
- },
854
- ]);
855
- process.argv = ['node', 'script.js'];
856
- const argv = await parseArguments(createTestMergedSettings());
857
- const config = await loadCliConfig(settings, 'test-session', argv);
858
- expect(config.getExcludeTools()).toEqual(new Set(['tool1', 'tool2']));
859
- expect(config.getExcludeTools()).toHaveLength(2);
860
- });
861
- it('should not modify the original settings object', async () => {
862
- const settings = createTestMergedSettings({
863
- tools: { exclude: ['tool1'] },
864
- });
865
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
866
- {
867
- path: '/path/to/ext',
868
- name: 'ext1',
869
- id: 'ext1-id',
870
- version: '1.0.0',
871
- excludeTools: ['tool2'],
872
- contextFiles: [],
873
- isActive: true,
874
- },
875
- ]);
876
- const originalSettings = JSON.parse(JSON.stringify(settings));
877
- process.argv = ['node', 'script.js'];
878
- const argv = await parseArguments(createTestMergedSettings());
879
- await loadCliConfig(settings, 'test-session', argv);
880
- expect(settings).toEqual(originalSettings);
881
- });
882
- });
883
- describe('Approval mode tool exclusion logic', () => {
884
- const originalIsTTY = process.stdin.isTTY;
885
- beforeEach(() => {
886
- process.stdin.isTTY = false; // Ensure non-interactive mode
887
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
888
- isTrusted: true,
889
- source: undefined,
890
- });
891
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
892
- });
893
- afterEach(() => {
894
- process.stdin.isTTY = originalIsTTY;
895
- });
896
- it('should exclude all interactive tools in non-interactive mode with default approval mode', async () => {
897
- process.argv = ['node', 'script.js', '-p', 'test'];
898
- const argv = await parseArguments(createTestMergedSettings());
899
- const settings = createTestMergedSettings();
900
- const config = await loadCliConfig(settings, 'test-session', argv);
901
- const excludedTools = config.getExcludeTools();
902
- expect(excludedTools).toContain(SHELL_TOOL_NAME);
903
- expect(excludedTools).toContain(EDIT_TOOL_NAME);
904
- expect(excludedTools).toContain(WRITE_FILE_TOOL_NAME);
905
- });
906
- it('should exclude all interactive tools in non-interactive mode with explicit default approval mode', async () => {
907
- process.argv = [
908
- 'node',
909
- 'script.js',
910
- '--approval-mode',
911
- 'default',
912
- '-p',
913
- 'test',
914
- ];
915
- const argv = await parseArguments(createTestMergedSettings());
916
- const settings = createTestMergedSettings();
917
- const config = await loadCliConfig(settings, 'test-session', argv);
918
- const excludedTools = config.getExcludeTools();
919
- expect(excludedTools).toContain(SHELL_TOOL_NAME);
920
- expect(excludedTools).toContain(EDIT_TOOL_NAME);
921
- expect(excludedTools).toContain(WRITE_FILE_TOOL_NAME);
922
- });
923
- it('should exclude only shell tools in non-interactive mode with auto_edit approval mode', async () => {
924
- process.argv = [
925
- 'node',
926
- 'script.js',
927
- '--approval-mode',
928
- 'auto_edit',
929
- '-p',
930
- 'test',
931
- ];
932
- const argv = await parseArguments(createTestMergedSettings());
933
- const settings = createTestMergedSettings();
934
- const config = await loadCliConfig(settings, 'test-session', argv);
935
- const excludedTools = config.getExcludeTools();
936
- expect(excludedTools).toContain(SHELL_TOOL_NAME);
937
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME);
938
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME);
939
- });
940
- it('should exclude no interactive tools in non-interactive mode with yolo approval mode', async () => {
941
- process.argv = [
942
- 'node',
943
- 'script.js',
944
- '--approval-mode',
945
- 'yolo',
946
- '-p',
947
- 'test',
948
- ];
949
- const argv = await parseArguments(createTestMergedSettings());
950
- const settings = createTestMergedSettings();
951
- const config = await loadCliConfig(settings, 'test-session', argv);
952
- const excludedTools = config.getExcludeTools();
953
- expect(excludedTools).not.toContain(SHELL_TOOL_NAME);
954
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME);
955
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME);
956
- });
957
- it('should exclude all interactive tools in non-interactive mode with plan approval mode', async () => {
958
- process.argv = [
959
- 'node',
960
- 'script.js',
961
- '--approval-mode',
962
- 'plan',
963
- '-p',
964
- 'test',
965
- ];
966
- const settings = createTestMergedSettings({
967
- experimental: {
968
- plan: true,
969
- },
970
- });
971
- const argv = await parseArguments(createTestMergedSettings());
972
- const config = await loadCliConfig(settings, 'test-session', argv);
973
- const excludedTools = config.getExcludeTools();
974
- expect(excludedTools).toContain(SHELL_TOOL_NAME);
975
- expect(excludedTools).toContain(EDIT_TOOL_NAME);
976
- expect(excludedTools).toContain(WRITE_FILE_TOOL_NAME);
977
- });
978
- it('should exclude no interactive tools in non-interactive mode with legacy yolo flag', async () => {
979
- process.argv = ['node', 'script.js', '--yolo', '-p', 'test'];
980
- const argv = await parseArguments(createTestMergedSettings());
981
- const settings = createTestMergedSettings();
982
- const config = await loadCliConfig(settings, 'test-session', argv);
983
- const excludedTools = config.getExcludeTools();
984
- expect(excludedTools).not.toContain(SHELL_TOOL_NAME);
985
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME);
986
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME);
987
- });
988
- it('should not exclude interactive tools in interactive mode regardless of approval mode', async () => {
989
- process.stdin.isTTY = true; // Interactive mode
990
- const testCases = [
991
- { args: ['node', 'script.js'] }, // default
992
- { args: ['node', 'script.js', '--approval-mode', 'default'] },
993
- { args: ['node', 'script.js', '--approval-mode', 'auto_edit'] },
994
- { args: ['node', 'script.js', '--approval-mode', 'yolo'] },
995
- { args: ['node', 'script.js', '--yolo'] },
996
- ];
997
- for (const testCase of testCases) {
998
- process.argv = testCase.args;
999
- const argv = await parseArguments(createTestMergedSettings());
1000
- const settings = createTestMergedSettings();
1001
- const config = await loadCliConfig(settings, 'test-session', argv);
1002
- const excludedTools = config.getExcludeTools();
1003
- expect(excludedTools).not.toContain(SHELL_TOOL_NAME);
1004
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME);
1005
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME);
1006
- }
1007
- });
1008
- it('should merge approval mode exclusions with settings exclusions in auto_edit mode', async () => {
1009
- process.argv = [
1010
- 'node',
1011
- 'script.js',
1012
- '--approval-mode',
1013
- 'auto_edit',
1014
- '-p',
1015
- 'test',
1016
- ];
1017
- const argv = await parseArguments(createTestMergedSettings());
1018
- const settings = createTestMergedSettings({
1019
- tools: { exclude: ['custom_tool'] },
1020
- });
1021
- const config = await loadCliConfig(settings, 'test-session', argv);
1022
- const excludedTools = config.getExcludeTools();
1023
- expect(excludedTools).toContain('custom_tool'); // From settings
1024
- expect(excludedTools).toContain(SHELL_TOOL_NAME); // From approval mode
1025
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME); // Should be allowed in auto_edit
1026
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME); // Should be allowed in auto_edit
1027
- });
1028
- it('should throw an error if YOLO mode is attempted when disableYoloMode is true', async () => {
1029
- process.argv = ['node', 'script.js', '--yolo'];
1030
- const argv = await parseArguments(createTestMergedSettings());
1031
- const settings = createTestMergedSettings({
1032
- security: {
1033
- disableYoloMode: true,
1034
- },
1035
- });
1036
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow('Cannot start in YOLO mode since it is disabled by your admin');
1037
- });
1038
- it('should throw an error for invalid approval mode values in loadCliConfig', async () => {
1039
- // Create a mock argv with an invalid approval mode that bypasses argument parsing validation
1040
- const invalidArgv = {
1041
- approvalMode: 'invalid_mode',
1042
- promptInteractive: '',
1043
- prompt: '',
1044
- yolo: false,
1045
- };
1046
- const settings = createTestMergedSettings();
1047
- await expect(loadCliConfig(settings, 'test-session', invalidArgv)).rejects.toThrow('Invalid approval mode: invalid_mode. Valid values are: yolo, auto_edit, plan, default');
1048
- });
1049
- });
1050
- describe('loadCliConfig with allowed-mcp-server-names', () => {
1051
- beforeEach(() => {
1052
- vi.resetAllMocks();
1053
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1054
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1055
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1056
- });
1057
- afterEach(() => {
1058
- vi.unstubAllEnvs();
1059
- vi.restoreAllMocks();
1060
- });
1061
- const baseSettings = createTestMergedSettings({
1062
- mcpServers: {
1063
- server1: { url: 'http://localhost:8080' },
1064
- server2: { url: 'http://localhost:8081' },
1065
- server3: { url: 'http://localhost:8082' },
1066
- },
1067
- });
1068
- it('should allow all MCP servers if the flag is not provided', async () => {
1069
- process.argv = ['node', 'script.js'];
1070
- const argv = await parseArguments(createTestMergedSettings());
1071
- const config = await loadCliConfig(baseSettings, 'test-session', argv);
1072
- expect(config.getMcpServers()).toEqual(baseSettings.mcpServers);
1073
- });
1074
- it('should allow only the specified MCP server', async () => {
1075
- process.argv = [
1076
- 'node',
1077
- 'script.js',
1078
- '--allowed-mcp-server-names',
1079
- 'server1',
1080
- ];
1081
- const argv = await parseArguments(createTestMergedSettings());
1082
- const config = await loadCliConfig(baseSettings, 'test-session', argv);
1083
- expect(config.getAllowedMcpServers()).toEqual(['server1']);
1084
- });
1085
- it('should allow multiple specified MCP servers', async () => {
1086
- process.argv = [
1087
- 'node',
1088
- 'script.js',
1089
- '--allowed-mcp-server-names',
1090
- 'server1',
1091
- '--allowed-mcp-server-names',
1092
- 'server3',
1093
- ];
1094
- const argv = await parseArguments(createTestMergedSettings());
1095
- const config = await loadCliConfig(baseSettings, 'test-session', argv);
1096
- expect(config.getAllowedMcpServers()).toEqual(['server1', 'server3']);
1097
- });
1098
- it('should handle server names that do not exist', async () => {
1099
- process.argv = [
1100
- 'node',
1101
- 'script.js',
1102
- '--allowed-mcp-server-names',
1103
- 'server1',
1104
- '--allowed-mcp-server-names',
1105
- 'server4',
1106
- ];
1107
- const argv = await parseArguments(createTestMergedSettings());
1108
- const config = await loadCliConfig(baseSettings, 'test-session', argv);
1109
- expect(config.getAllowedMcpServers()).toEqual(['server1', 'server4']);
1110
- });
1111
- it('should allow no MCP servers if the flag is provided but empty', async () => {
1112
- process.argv = ['node', 'script.js', '--allowed-mcp-server-names', ''];
1113
- const argv = await parseArguments(createTestMergedSettings());
1114
- const config = await loadCliConfig(baseSettings, 'test-session', argv);
1115
- expect(config.getAllowedMcpServers()).toEqual(['']);
1116
- });
1117
- it('should read allowMCPServers from settings', async () => {
1118
- process.argv = ['node', 'script.js'];
1119
- const argv = await parseArguments(createTestMergedSettings());
1120
- const settings = createTestMergedSettings({
1121
- ...baseSettings,
1122
- mcp: { allowed: ['server1', 'server2'] },
1123
- });
1124
- const config = await loadCliConfig(settings, 'test-session', argv);
1125
- expect(config.getAllowedMcpServers()).toEqual(['server1', 'server2']);
1126
- });
1127
- it('should read excludeMCPServers from settings', async () => {
1128
- process.argv = ['node', 'script.js'];
1129
- const argv = await parseArguments(createTestMergedSettings());
1130
- const settings = createTestMergedSettings({
1131
- ...baseSettings,
1132
- mcp: { excluded: ['server1', 'server2'] },
1133
- });
1134
- const config = await loadCliConfig(settings, 'test-session', argv);
1135
- expect(config.getBlockedMcpServers()).toEqual(['server1', 'server2']);
1136
- });
1137
- it('should override allowMCPServers with excludeMCPServers if overlapping', async () => {
1138
- process.argv = ['node', 'script.js'];
1139
- const argv = await parseArguments(createTestMergedSettings());
1140
- const settings = createTestMergedSettings({
1141
- ...baseSettings,
1142
- mcp: {
1143
- excluded: ['server1'],
1144
- allowed: ['server1', 'server2'],
1145
- },
1146
- });
1147
- const config = await loadCliConfig(settings, 'test-session', argv);
1148
- expect(config.getAllowedMcpServers()).toEqual(['server1', 'server2']);
1149
- expect(config.getBlockedMcpServers()).toEqual(['server1']);
1150
- });
1151
- it('should prioritize mcp server flag if set', async () => {
1152
- process.argv = [
1153
- 'node',
1154
- 'script.js',
1155
- '--allowed-mcp-server-names',
1156
- 'server1',
1157
- ];
1158
- const argv = await parseArguments(createTestMergedSettings());
1159
- const settings = createTestMergedSettings({
1160
- ...baseSettings,
1161
- mcp: {
1162
- excluded: ['server1'],
1163
- allowed: ['server2'],
1164
- },
1165
- });
1166
- const config = await loadCliConfig(settings, 'test-session', argv);
1167
- expect(config.getAllowedMcpServers()).toEqual(['server1']);
1168
- });
1169
- it('should prioritize CLI flag over both allowed and excluded settings', async () => {
1170
- process.argv = [
1171
- 'node',
1172
- 'script.js',
1173
- '--allowed-mcp-server-names',
1174
- 'server2',
1175
- '--allowed-mcp-server-names',
1176
- 'server3',
1177
- ];
1178
- const argv = await parseArguments(createTestMergedSettings());
1179
- const settings = createTestMergedSettings({
1180
- ...baseSettings,
1181
- mcp: {
1182
- allowed: ['server1', 'server2'], // Should be ignored
1183
- excluded: ['server3'], // Should be ignored
1184
- },
1185
- });
1186
- const config = await loadCliConfig(settings, 'test-session', argv);
1187
- expect(config.getAllowedMcpServers()).toEqual(['server2', 'server3']);
1188
- expect(config.getBlockedMcpServers()).toEqual([]);
1189
- });
1190
- });
1191
- describe('loadCliConfig model selection', () => {
1192
- beforeEach(() => {
1193
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1194
- });
1195
- afterEach(() => {
1196
- vi.resetAllMocks();
1197
- });
1198
- it('selects a model from settings.json if provided', async () => {
1199
- process.argv = ['node', 'script.js'];
1200
- const argv = await parseArguments(createTestMergedSettings());
1201
- const config = await loadCliConfig(createTestMergedSettings({
1202
- model: {
1203
- name: 'gemini-2.5-pro',
1204
- },
1205
- }), 'test-session', argv);
1206
- expect(config.getModel()).toBe('gemini-2.5-pro');
1207
- });
1208
- it('uses the default gemini model if nothing is set', async () => {
1209
- process.argv = ['node', 'script.js']; // No model set.
1210
- const argv = await parseArguments(createTestMergedSettings());
1211
- const config = await loadCliConfig(createTestMergedSettings({
1212
- // No model set.
1213
- }), 'test-session', argv);
1214
- expect(config.getModel()).toBe('auto-gemini-2.5');
1215
- });
1216
- it('always prefers model from argv', async () => {
1217
- process.argv = ['node', 'script.js', '--model', 'gemini-2.5-flash-preview'];
1218
- const argv = await parseArguments(createTestMergedSettings());
1219
- const config = await loadCliConfig(createTestMergedSettings({
1220
- model: {
1221
- name: 'gemini-2.5-pro',
1222
- },
1223
- }), 'test-session', argv);
1224
- expect(config.getModel()).toBe('gemini-2.5-flash-preview');
1225
- });
1226
- it('selects the model from argv if provided', async () => {
1227
- process.argv = ['node', 'script.js', '--model', 'gemini-2.5-flash-preview'];
1228
- const argv = await parseArguments(createTestMergedSettings());
1229
- const config = await loadCliConfig(createTestMergedSettings({
1230
- // No model provided via settings.
1231
- }), 'test-session', argv);
1232
- expect(config.getModel()).toBe('gemini-2.5-flash-preview');
1233
- });
1234
- it('selects the default auto model if provided via auto alias', async () => {
1235
- process.argv = ['node', 'script.js', '--model', 'auto'];
1236
- const argv = await parseArguments(createTestMergedSettings());
1237
- const config = await loadCliConfig(createTestMergedSettings({
1238
- // No model provided via settings.
1239
- }), 'test-session', argv);
1240
- expect(config.getModel()).toBe('auto-gemini-2.5');
1241
- });
1242
- });
1243
- describe('loadCliConfig folderTrust', () => {
1244
- beforeEach(() => {
1245
- vi.resetAllMocks();
1246
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1247
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1248
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1249
- });
1250
- afterEach(() => {
1251
- vi.unstubAllEnvs();
1252
- vi.restoreAllMocks();
1253
- });
1254
- it('should be false when folderTrust is false', async () => {
1255
- process.argv = ['node', 'script.js'];
1256
- const settings = createTestMergedSettings({
1257
- security: {
1258
- folderTrust: {
1259
- enabled: false,
1260
- },
1261
- },
1262
- });
1263
- const argv = await parseArguments(createTestMergedSettings());
1264
- const config = await loadCliConfig(settings, 'test-session', argv);
1265
- expect(config.getFolderTrust()).toBe(false);
1266
- });
1267
- it('should be true when folderTrust is true', async () => {
1268
- process.argv = ['node', 'script.js'];
1269
- const argv = await parseArguments(createTestMergedSettings());
1270
- const settings = createTestMergedSettings({
1271
- security: {
1272
- folderTrust: {
1273
- enabled: true,
1274
- },
1275
- },
1276
- });
1277
- const config = await loadCliConfig(settings, 'test-session', argv);
1278
- expect(config.getFolderTrust()).toBe(true);
1279
- });
1280
- it('should be false by default', async () => {
1281
- process.argv = ['node', 'script.js'];
1282
- const argv = await parseArguments(createTestMergedSettings());
1283
- const settings = createTestMergedSettings();
1284
- const config = await loadCliConfig(settings, 'test-session', argv);
1285
- expect(config.getFolderTrust()).toBe(false);
1286
- });
1287
- });
1288
- describe('loadCliConfig with includeDirectories', () => {
1289
- beforeEach(() => {
1290
- vi.resetAllMocks();
1291
- vi.mocked(os.homedir).mockReturnValue(path.resolve(path.sep, 'mock', 'home', 'user'));
1292
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1293
- vi.spyOn(process, 'cwd').mockReturnValue(path.resolve(path.sep, 'home', 'user', 'project'));
1294
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1295
- });
1296
- afterEach(() => {
1297
- vi.restoreAllMocks();
1298
- });
1299
- it('should combine and resolve paths from settings and CLI arguments', async () => {
1300
- const mockCwd = path.resolve(path.sep, 'home', 'user', 'project');
1301
- process.argv = [
1302
- 'node',
1303
- 'script.js',
1304
- '--include-directories',
1305
- `${path.resolve(path.sep, 'cli', 'path1')},${path.join(mockCwd, 'cli', 'path2')}`,
1306
- ];
1307
- const argv = await parseArguments(createTestMergedSettings());
1308
- const settings = createTestMergedSettings({
1309
- context: {
1310
- includeDirectories: [
1311
- path.resolve(path.sep, 'settings', 'path1'),
1312
- path.join(os.homedir(), 'settings', 'path2'),
1313
- path.join(mockCwd, 'settings', 'path3'),
1314
- ],
1315
- },
1316
- });
1317
- const config = await loadCliConfig(settings, 'test-session', argv);
1318
- const expected = [
1319
- mockCwd,
1320
- path.resolve(path.sep, 'cli', 'path1'),
1321
- path.join(mockCwd, 'cli', 'path2'),
1322
- path.resolve(path.sep, 'settings', 'path1'),
1323
- path.join(os.homedir(), 'settings', 'path2'),
1324
- path.join(mockCwd, 'settings', 'path3'),
1325
- ];
1326
- const directories = config.getWorkspaceContext().getDirectories();
1327
- expect(directories).toEqual([mockCwd]);
1328
- expect(config.getPendingIncludeDirectories()).toEqual(expect.arrayContaining(expected.filter((dir) => dir !== mockCwd)));
1329
- expect(config.getPendingIncludeDirectories()).toHaveLength(expected.length - 1);
1330
- });
1331
- });
1332
- describe('loadCliConfig compressionThreshold', () => {
1333
- beforeEach(() => {
1334
- vi.resetAllMocks();
1335
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1336
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1337
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1338
- });
1339
- afterEach(() => {
1340
- vi.unstubAllEnvs();
1341
- vi.restoreAllMocks();
1342
- });
1343
- it('should pass settings to the core config', async () => {
1344
- process.argv = ['node', 'script.js'];
1345
- const argv = await parseArguments(createTestMergedSettings());
1346
- const settings = createTestMergedSettings({
1347
- model: {
1348
- compressionThreshold: 0.5,
1349
- },
1350
- });
1351
- const config = await loadCliConfig(settings, 'test-session', argv);
1352
- expect(await config.getCompressionThreshold()).toBe(0.5);
1353
- });
1354
- it('should have default compressionThreshold if not in settings', async () => {
1355
- process.argv = ['node', 'script.js'];
1356
- const argv = await parseArguments(createTestMergedSettings());
1357
- const settings = createTestMergedSettings();
1358
- const config = await loadCliConfig(settings, 'test-session', argv);
1359
- expect(await config.getCompressionThreshold()).toBe(0.5);
1360
- });
1361
- });
1362
- describe('loadCliConfig useRipgrep', () => {
1363
- beforeEach(() => {
1364
- vi.resetAllMocks();
1365
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1366
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1367
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1368
- });
1369
- afterEach(() => {
1370
- vi.unstubAllEnvs();
1371
- vi.restoreAllMocks();
1372
- });
1373
- it('should be true by default when useRipgrep is not set in settings', async () => {
1374
- process.argv = ['node', 'script.js'];
1375
- const argv = await parseArguments(createTestMergedSettings());
1376
- const settings = createTestMergedSettings();
1377
- const config = await loadCliConfig(settings, 'test-session', argv);
1378
- expect(config.getUseRipgrep()).toBe(true);
1379
- });
1380
- it('should be false when useRipgrep is set to false in settings', async () => {
1381
- process.argv = ['node', 'script.js'];
1382
- const argv = await parseArguments(createTestMergedSettings());
1383
- const settings = createTestMergedSettings({ tools: { useRipgrep: false } });
1384
- const config = await loadCliConfig(settings, 'test-session', argv);
1385
- expect(config.getUseRipgrep()).toBe(false);
1386
- });
1387
- it('should be true when useRipgrep is explicitly set to true in settings', async () => {
1388
- process.argv = ['node', 'script.js'];
1389
- const argv = await parseArguments(createTestMergedSettings());
1390
- const settings = createTestMergedSettings({ tools: { useRipgrep: true } });
1391
- const config = await loadCliConfig(settings, 'test-session', argv);
1392
- expect(config.getUseRipgrep()).toBe(true);
1393
- });
1394
- });
1395
- describe('screenReader configuration', () => {
1396
- beforeEach(() => {
1397
- vi.resetAllMocks();
1398
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1399
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1400
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1401
- });
1402
- afterEach(() => {
1403
- vi.unstubAllEnvs();
1404
- vi.restoreAllMocks();
1405
- });
1406
- it('should use screenReader value from settings if CLI flag is not present (settings true)', async () => {
1407
- process.argv = ['node', 'script.js'];
1408
- const argv = await parseArguments(createTestMergedSettings());
1409
- const settings = createTestMergedSettings({
1410
- ui: { accessibility: { screenReader: true } },
1411
- });
1412
- const config = await loadCliConfig(settings, 'test-session', argv);
1413
- expect(config.getScreenReader()).toBe(true);
1414
- });
1415
- it('should use screenReader value from settings if CLI flag is not present (settings false)', async () => {
1416
- process.argv = ['node', 'script.js'];
1417
- const argv = await parseArguments(createTestMergedSettings());
1418
- const settings = createTestMergedSettings({
1419
- ui: { accessibility: { screenReader: false } },
1420
- });
1421
- const config = await loadCliConfig(settings, 'test-session', argv);
1422
- expect(config.getScreenReader()).toBe(false);
1423
- });
1424
- it('should prioritize --screen-reader CLI flag (true) over settings (false)', async () => {
1425
- process.argv = ['node', 'script.js', '--screen-reader'];
1426
- const argv = await parseArguments(createTestMergedSettings());
1427
- const settings = createTestMergedSettings({
1428
- ui: { accessibility: { screenReader: false } },
1429
- });
1430
- const config = await loadCliConfig(settings, 'test-session', argv);
1431
- expect(config.getScreenReader()).toBe(true);
1432
- });
1433
- it('should be false by default when no flag or setting is present', async () => {
1434
- process.argv = ['node', 'script.js'];
1435
- const argv = await parseArguments(createTestMergedSettings());
1436
- const settings = createTestMergedSettings();
1437
- const config = await loadCliConfig(settings, 'test-session', argv);
1438
- expect(config.getScreenReader()).toBe(false);
1439
- });
1440
- });
1441
- describe('loadCliConfig tool exclusions', () => {
1442
- const originalIsTTY = process.stdin.isTTY;
1443
- beforeEach(() => {
1444
- vi.resetAllMocks();
1445
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1446
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1447
- process.stdin.isTTY = true;
1448
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
1449
- isTrusted: true,
1450
- source: undefined,
1451
- });
1452
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1453
- });
1454
- afterEach(() => {
1455
- process.stdin.isTTY = originalIsTTY;
1456
- vi.unstubAllEnvs();
1457
- vi.restoreAllMocks();
1458
- });
1459
- it('should not exclude interactive tools in interactive mode without YOLO', async () => {
1460
- process.stdin.isTTY = true;
1461
- process.argv = ['node', 'script.js'];
1462
- const argv = await parseArguments(createTestMergedSettings());
1463
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1464
- expect(config.getExcludeTools()).not.toContain('run_shell_command');
1465
- expect(config.getExcludeTools()).not.toContain('replace');
1466
- expect(config.getExcludeTools()).not.toContain('write_file');
1467
- });
1468
- it('should not exclude interactive tools in interactive mode with YOLO', async () => {
1469
- process.stdin.isTTY = true;
1470
- process.argv = ['node', 'script.js', '--yolo'];
1471
- const argv = await parseArguments(createTestMergedSettings());
1472
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1473
- expect(config.getExcludeTools()).not.toContain('run_shell_command');
1474
- expect(config.getExcludeTools()).not.toContain('replace');
1475
- expect(config.getExcludeTools()).not.toContain('write_file');
1476
- });
1477
- it('should exclude interactive tools in non-interactive mode without YOLO', async () => {
1478
- process.stdin.isTTY = false;
1479
- process.argv = ['node', 'script.js', '-p', 'test'];
1480
- const argv = await parseArguments(createTestMergedSettings());
1481
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1482
- expect(config.getExcludeTools()).toContain('run_shell_command');
1483
- expect(config.getExcludeTools()).toContain('replace');
1484
- expect(config.getExcludeTools()).toContain('write_file');
1485
- });
1486
- it('should not exclude interactive tools in non-interactive mode with YOLO', async () => {
1487
- process.stdin.isTTY = false;
1488
- process.argv = ['node', 'script.js', '-p', 'test', '--yolo'];
1489
- const argv = await parseArguments(createTestMergedSettings());
1490
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1491
- expect(config.getExcludeTools()).not.toContain('run_shell_command');
1492
- expect(config.getExcludeTools()).not.toContain('replace');
1493
- expect(config.getExcludeTools()).not.toContain('write_file');
1494
- });
1495
- it('should not exclude shell tool in non-interactive mode when --allowed-tools="ShellTool" is set', async () => {
1496
- process.stdin.isTTY = false;
1497
- process.argv = [
1498
- 'node',
1499
- 'script.js',
1500
- '-p',
1501
- 'test',
1502
- '--allowed-tools',
1503
- 'ShellTool',
1504
- ];
1505
- const argv = await parseArguments(createTestMergedSettings());
1506
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1507
- expect(config.getExcludeTools()).not.toContain(SHELL_TOOL_NAME);
1508
- });
1509
- it('should exclude web-fetch in non-interactive mode when not allowed', async () => {
1510
- process.stdin.isTTY = false;
1511
- process.argv = ['node', 'script.js', '-p', 'test'];
1512
- const argv = await parseArguments(createTestMergedSettings());
1513
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1514
- expect(config.getExcludeTools()).toContain(WEB_FETCH_TOOL_NAME);
1515
- });
1516
- it('should not exclude web-fetch in non-interactive mode when allowed', async () => {
1517
- process.stdin.isTTY = false;
1518
- process.argv = [
1519
- 'node',
1520
- 'script.js',
1521
- '-p',
1522
- 'test',
1523
- '--allowed-tools',
1524
- WEB_FETCH_TOOL_NAME,
1525
- ];
1526
- const argv = await parseArguments(createTestMergedSettings());
1527
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1528
- expect(config.getExcludeTools()).not.toContain(WEB_FETCH_TOOL_NAME);
1529
- });
1530
- it('should not exclude shell tool in non-interactive mode when --allowed-tools="run_shell_command" is set', async () => {
1531
- process.stdin.isTTY = false;
1532
- process.argv = [
1533
- 'node',
1534
- 'script.js',
1535
- '-p',
1536
- 'test',
1537
- '--allowed-tools',
1538
- 'run_shell_command',
1539
- ];
1540
- const argv = await parseArguments(createTestMergedSettings());
1541
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1542
- expect(config.getExcludeTools()).not.toContain(SHELL_TOOL_NAME);
1543
- });
1544
- it('should not exclude shell tool in non-interactive mode when --allowed-tools="ShellTool(wc)" is set', async () => {
1545
- process.stdin.isTTY = false;
1546
- process.argv = [
1547
- 'node',
1548
- 'script.js',
1549
- '-p',
1550
- 'test',
1551
- '--allowed-tools',
1552
- 'ShellTool(wc)',
1553
- ];
1554
- const argv = await parseArguments(createTestMergedSettings());
1555
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1556
- expect(config.getExcludeTools()).not.toContain(SHELL_TOOL_NAME);
1557
- });
1558
- });
1559
- describe('loadCliConfig interactive', () => {
1560
- const originalIsTTY = process.stdin.isTTY;
1561
- beforeEach(() => {
1562
- vi.resetAllMocks();
1563
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1564
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1565
- process.stdin.isTTY = true;
1566
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1567
- });
1568
- afterEach(() => {
1569
- process.stdin.isTTY = originalIsTTY;
1570
- vi.unstubAllEnvs();
1571
- vi.restoreAllMocks();
1572
- });
1573
- it('should be interactive if isTTY and no prompt', async () => {
1574
- process.stdin.isTTY = true;
1575
- process.argv = ['node', 'script.js'];
1576
- const argv = await parseArguments(createTestMergedSettings());
1577
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1578
- expect(config.isInteractive()).toBe(true);
1579
- });
1580
- it('should be interactive if prompt-interactive is set', async () => {
1581
- process.stdin.isTTY = false;
1582
- process.argv = ['node', 'script.js', '--prompt-interactive', 'test'];
1583
- const argv = await parseArguments(createTestMergedSettings());
1584
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1585
- expect(config.isInteractive()).toBe(true);
1586
- });
1587
- it('should not be interactive if not isTTY and no prompt', async () => {
1588
- process.stdin.isTTY = false;
1589
- process.argv = ['node', 'script.js'];
1590
- const argv = await parseArguments(createTestMergedSettings());
1591
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1592
- expect(config.isInteractive()).toBe(false);
1593
- });
1594
- it('should not be interactive if prompt is set', async () => {
1595
- process.stdin.isTTY = true;
1596
- process.argv = ['node', 'script.js', '--prompt', 'test'];
1597
- const argv = await parseArguments(createTestMergedSettings());
1598
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1599
- expect(config.isInteractive()).toBe(false);
1600
- });
1601
- it('should be interactive if positional prompt words are provided with other flags', async () => {
1602
- process.stdin.isTTY = true;
1603
- process.argv = ['node', 'script.js', '--model', 'gemini-2.5-pro', 'Hello'];
1604
- const argv = await parseArguments(createTestMergedSettings());
1605
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1606
- expect(config.isInteractive()).toBe(true);
1607
- });
1608
- it('should be interactive if positional prompt words are provided with multiple flags', async () => {
1609
- process.stdin.isTTY = true;
1610
- process.argv = [
1611
- 'node',
1612
- 'script.js',
1613
- '--model',
1614
- 'gemini-2.5-pro',
1615
- '--yolo',
1616
- 'Hello world',
1617
- ];
1618
- const argv = await parseArguments(createTestMergedSettings());
1619
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1620
- expect(config.isInteractive()).toBe(true);
1621
- // Verify the question is preserved for one-shot execution
1622
- expect(argv.prompt).toBeUndefined();
1623
- expect(argv.promptInteractive).toBe('Hello world');
1624
- });
1625
- it('should be interactive if positional prompt words are provided with extensions flag', async () => {
1626
- process.stdin.isTTY = true;
1627
- process.argv = ['node', 'script.js', '-e', 'none', 'hello'];
1628
- const argv = await parseArguments(createTestMergedSettings());
1629
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1630
- expect(config.isInteractive()).toBe(true);
1631
- expect(argv.query).toBe('hello');
1632
- expect(argv.promptInteractive).toBe('hello');
1633
- expect(argv.extensions).toEqual(['none']);
1634
- });
1635
- it('should handle multiple positional words correctly', async () => {
1636
- process.stdin.isTTY = true;
1637
- process.argv = ['node', 'script.js', 'hello world how are you'];
1638
- const argv = await parseArguments(createTestMergedSettings());
1639
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1640
- expect(config.isInteractive()).toBe(true);
1641
- expect(argv.query).toBe('hello world how are you');
1642
- expect(argv.promptInteractive).toBe('hello world how are you');
1643
- });
1644
- it('should handle multiple positional words with flags', async () => {
1645
- process.stdin.isTTY = true;
1646
- process.argv = [
1647
- 'node',
1648
- 'script.js',
1649
- '--model',
1650
- 'gemini-2.5-pro',
1651
- 'write',
1652
- 'a',
1653
- 'function',
1654
- 'to',
1655
- 'sort',
1656
- 'array',
1657
- ];
1658
- const argv = await parseArguments(createTestMergedSettings());
1659
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1660
- expect(config.isInteractive()).toBe(true);
1661
- expect(argv.query).toBe('write a function to sort array');
1662
- expect(argv.promptInteractive).toBe('write a function to sort array');
1663
- expect(argv.model).toBe('gemini-2.5-pro');
1664
- });
1665
- it('should handle empty positional arguments', async () => {
1666
- process.stdin.isTTY = true;
1667
- process.argv = ['node', 'script.js', ''];
1668
- const argv = await parseArguments(createTestMergedSettings());
1669
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1670
- expect(config.isInteractive()).toBe(true);
1671
- expect(argv.query).toBeUndefined();
1672
- });
1673
- it('should handle extensions flag with positional arguments correctly', async () => {
1674
- process.stdin.isTTY = true;
1675
- process.argv = [
1676
- 'node',
1677
- 'script.js',
1678
- '-e',
1679
- 'none',
1680
- 'hello',
1681
- 'world',
1682
- 'how',
1683
- 'are',
1684
- 'you',
1685
- ];
1686
- const argv = await parseArguments(createTestMergedSettings());
1687
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1688
- expect(config.isInteractive()).toBe(true);
1689
- expect(argv.query).toBe('hello world how are you');
1690
- expect(argv.promptInteractive).toBe('hello world how are you');
1691
- expect(argv.extensions).toEqual(['none']);
1692
- });
1693
- it('should be interactive if no positional prompt words are provided with flags', async () => {
1694
- process.stdin.isTTY = true;
1695
- process.argv = ['node', 'script.js', '--model', 'gemini-2.5-pro'];
1696
- const argv = await parseArguments(createTestMergedSettings());
1697
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1698
- expect(config.isInteractive()).toBe(true);
1699
- });
1700
- });
1701
- describe('loadCliConfig approval mode', () => {
1702
- const originalArgv = process.argv;
1703
- beforeEach(() => {
1704
- vi.resetAllMocks();
1705
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1706
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1707
- process.argv = ['node', 'script.js']; // Reset argv for each test
1708
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
1709
- isTrusted: true,
1710
- source: undefined,
1711
- });
1712
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1713
- });
1714
- afterEach(() => {
1715
- process.argv = originalArgv;
1716
- vi.unstubAllEnvs();
1717
- vi.restoreAllMocks();
1718
- });
1719
- it('should default to DEFAULT approval mode when no flags are set', async () => {
1720
- process.argv = ['node', 'script.js'];
1721
- const argv = await parseArguments(createTestMergedSettings());
1722
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1723
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
1724
- });
1725
- it('should set YOLO approval mode when --yolo flag is used', async () => {
1726
- process.argv = ['node', 'script.js', '--yolo'];
1727
- const argv = await parseArguments(createTestMergedSettings());
1728
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1729
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.YOLO);
1730
- });
1731
- it('should set YOLO approval mode when -y flag is used', async () => {
1732
- process.argv = ['node', 'script.js', '-y'];
1733
- const argv = await parseArguments(createTestMergedSettings());
1734
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1735
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.YOLO);
1736
- });
1737
- it('should set DEFAULT approval mode when --approval-mode=default', async () => {
1738
- process.argv = ['node', 'script.js', '--approval-mode', 'default'];
1739
- const argv = await parseArguments(createTestMergedSettings());
1740
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1741
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
1742
- });
1743
- it('should set AUTO_EDIT approval mode when --approval-mode=auto_edit', async () => {
1744
- process.argv = ['node', 'script.js', '--approval-mode', 'auto_edit'];
1745
- const argv = await parseArguments(createTestMergedSettings());
1746
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1747
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.AUTO_EDIT);
1748
- });
1749
- it('should set YOLO approval mode when --approval-mode=yolo', async () => {
1750
- process.argv = ['node', 'script.js', '--approval-mode', 'yolo'];
1751
- const argv = await parseArguments(createTestMergedSettings());
1752
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1753
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.YOLO);
1754
- });
1755
- it('should prioritize --approval-mode over --yolo when both would be valid (but validation prevents this)', async () => {
1756
- // Note: This test documents the intended behavior, but in practice the validation
1757
- // prevents both flags from being used together
1758
- process.argv = ['node', 'script.js', '--approval-mode', 'default'];
1759
- const argv = await parseArguments(createTestMergedSettings());
1760
- // Manually set yolo to true to simulate what would happen if validation didn't prevent it
1761
- argv.yolo = true;
1762
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1763
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
1764
- });
1765
- it('should fall back to --yolo behavior when --approval-mode is not set', async () => {
1766
- process.argv = ['node', 'script.js', '--yolo'];
1767
- const argv = await parseArguments(createTestMergedSettings());
1768
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1769
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.YOLO);
1770
- });
1771
- it('should set Plan approval mode when --approval-mode=plan is used and experimental.plan is enabled', async () => {
1772
- process.argv = ['node', 'script.js', '--approval-mode', 'plan'];
1773
- const argv = await parseArguments(createTestMergedSettings());
1774
- const settings = createTestMergedSettings({
1775
- experimental: {
1776
- plan: true,
1777
- },
1778
- });
1779
- const config = await loadCliConfig(settings, 'test-session', argv);
1780
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.PLAN);
1781
- });
1782
- it('should ignore "yolo" in settings.tools.approvalMode and fall back to DEFAULT', async () => {
1783
- process.argv = ['node', 'script.js'];
1784
- const settings = createTestMergedSettings({
1785
- tools: {
1786
- // @ts-expect-error: testing invalid value
1787
- approvalMode: 'yolo',
1788
- },
1789
- });
1790
- const argv = await parseArguments(settings);
1791
- const config = await loadCliConfig(settings, 'test-session', argv);
1792
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
1793
- });
1794
- it('should throw error when --approval-mode=plan is used but experimental.plan is disabled', async () => {
1795
- process.argv = ['node', 'script.js', '--approval-mode', 'plan'];
1796
- const argv = await parseArguments(createTestMergedSettings());
1797
- const settings = createTestMergedSettings({
1798
- experimental: {
1799
- plan: false,
1800
- },
1801
- });
1802
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow('Approval mode "plan" is only available when experimental.plan is enabled.');
1803
- });
1804
- it('should throw error when --approval-mode=plan is used but experimental.plan setting is missing', async () => {
1805
- process.argv = ['node', 'script.js', '--approval-mode', 'plan'];
1806
- const argv = await parseArguments(createTestMergedSettings());
1807
- const settings = createTestMergedSettings({});
1808
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow('Approval mode "plan" is only available when experimental.plan is enabled.');
1809
- });
1810
- // --- Untrusted Folder Scenarios ---
1811
- describe('when folder is NOT trusted', () => {
1812
- beforeEach(() => {
1813
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
1814
- isTrusted: false,
1815
- source: 'file',
1816
- });
1817
- });
1818
- it('should override --approval-mode=yolo to DEFAULT', async () => {
1819
- process.argv = ['node', 'script.js', '--approval-mode', 'yolo'];
1820
- const argv = await parseArguments(createTestMergedSettings());
1821
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1822
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
1823
- });
1824
- it('should override --approval-mode=auto_edit to DEFAULT', async () => {
1825
- process.argv = ['node', 'script.js', '--approval-mode', 'auto_edit'];
1826
- const argv = await parseArguments(createTestMergedSettings());
1827
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1828
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
1829
- });
1830
- it('should override --yolo flag to DEFAULT', async () => {
1831
- process.argv = ['node', 'script.js', '--yolo'];
1832
- const argv = await parseArguments(createTestMergedSettings());
1833
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1834
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
1835
- });
1836
- it('should remain DEFAULT when --approval-mode=default', async () => {
1837
- process.argv = ['node', 'script.js', '--approval-mode', 'default'];
1838
- const argv = await parseArguments(createTestMergedSettings());
1839
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1840
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
1841
- });
1842
- });
1843
- describe('Persistent approvalMode setting', () => {
1844
- it('should use approvalMode from settings when no CLI flags are set', async () => {
1845
- process.argv = ['node', 'script.js'];
1846
- const settings = createTestMergedSettings({
1847
- tools: { approvalMode: 'auto_edit' },
1848
- });
1849
- const argv = await parseArguments(settings);
1850
- const config = await loadCliConfig(settings, 'test-session', argv);
1851
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.AUTO_EDIT);
1852
- });
1853
- it('should prioritize --approval-mode flag over settings', async () => {
1854
- process.argv = ['node', 'script.js', '--approval-mode', 'auto_edit'];
1855
- const settings = createTestMergedSettings({
1856
- tools: { approvalMode: 'default' },
1857
- });
1858
- const argv = await parseArguments(settings);
1859
- const config = await loadCliConfig(settings, 'test-session', argv);
1860
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.AUTO_EDIT);
1861
- });
1862
- it('should prioritize --yolo flag over settings', async () => {
1863
- process.argv = ['node', 'script.js', '--yolo'];
1864
- const settings = createTestMergedSettings({
1865
- tools: { approvalMode: 'auto_edit' },
1866
- });
1867
- const argv = await parseArguments(settings);
1868
- const config = await loadCliConfig(settings, 'test-session', argv);
1869
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.YOLO);
1870
- });
1871
- it('should respect plan mode from settings when experimental.plan is enabled', async () => {
1872
- process.argv = ['node', 'script.js'];
1873
- const settings = createTestMergedSettings({
1874
- tools: { approvalMode: 'plan' },
1875
- experimental: { plan: true },
1876
- });
1877
- const argv = await parseArguments(settings);
1878
- const config = await loadCliConfig(settings, 'test-session', argv);
1879
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.PLAN);
1880
- });
1881
- it('should throw error if plan mode is in settings but experimental.plan is disabled', async () => {
1882
- process.argv = ['node', 'script.js'];
1883
- const settings = createTestMergedSettings({
1884
- tools: { approvalMode: 'plan' },
1885
- experimental: { plan: false },
1886
- });
1887
- const argv = await parseArguments(settings);
1888
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow('Approval mode "plan" is only available when experimental.plan is enabled.');
1889
- });
1890
- });
1891
- });
1892
- describe('loadCliConfig fileFiltering', () => {
1893
- const originalArgv = process.argv;
1894
- beforeEach(() => {
1895
- vi.resetAllMocks();
1896
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1897
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1898
- process.argv = ['node', 'script.js']; // Reset argv for each test
1899
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1900
- });
1901
- afterEach(() => {
1902
- process.argv = originalArgv;
1903
- vi.unstubAllEnvs();
1904
- vi.restoreAllMocks();
1905
- });
1906
- const testCases = [
1907
- {
1908
- property: 'enableFuzzySearch',
1909
- getter: (c) => c.getFileFilteringEnableFuzzySearch(),
1910
- value: true,
1911
- },
1912
- {
1913
- property: 'enableFuzzySearch',
1914
- getter: (c) => c.getFileFilteringEnableFuzzySearch(),
1915
- value: false,
1916
- },
1917
- {
1918
- property: 'respectGitIgnore',
1919
- getter: (c) => c.getFileFilteringRespectGitIgnore(),
1920
- value: true,
1921
- },
1922
- {
1923
- property: 'respectGitIgnore',
1924
- getter: (c) => c.getFileFilteringRespectGitIgnore(),
1925
- value: false,
1926
- },
1927
- {
1928
- property: 'respectGeminiIgnore',
1929
- getter: (c) => c.getFileFilteringRespectGeminiIgnore(),
1930
- value: true,
1931
- },
1932
- {
1933
- property: 'respectGeminiIgnore',
1934
- getter: (c) => c.getFileFilteringRespectGeminiIgnore(),
1935
- value: false,
1936
- },
1937
- {
1938
- property: 'enableRecursiveFileSearch',
1939
- getter: (c) => c.getEnableRecursiveFileSearch(),
1940
- value: true,
1941
- },
1942
- {
1943
- property: 'enableRecursiveFileSearch',
1944
- getter: (c) => c.getEnableRecursiveFileSearch(),
1945
- value: false,
1946
- },
1947
- ];
1948
- it.each(testCases)('should pass $property from settings to config when $value', async ({ property, getter, value }) => {
1949
- const settings = createTestMergedSettings({
1950
- context: {
1951
- fileFiltering: { [property]: value },
1952
- },
1953
- });
1954
- const argv = await parseArguments(settings);
1955
- const config = await loadCliConfig(settings, 'test-session', argv);
1956
- expect(getter(config)).toBe(value);
1957
- });
1958
- });
1959
- describe('Output format', () => {
1960
- beforeEach(() => {
1961
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1962
- });
1963
- afterEach(() => {
1964
- vi.resetAllMocks();
1965
- });
1966
- it('should default to TEXT', async () => {
1967
- process.argv = ['node', 'script.js'];
1968
- const argv = await parseArguments(createTestMergedSettings());
1969
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1970
- expect(config.getOutputFormat()).toBe(OutputFormat.TEXT);
1971
- });
1972
- it('should use the format from settings', async () => {
1973
- process.argv = ['node', 'script.js'];
1974
- const argv = await parseArguments(createTestMergedSettings());
1975
- const config = await loadCliConfig(createTestMergedSettings({ output: { format: OutputFormat.JSON } }), 'test-session', argv);
1976
- expect(config.getOutputFormat()).toBe(OutputFormat.JSON);
1977
- });
1978
- it('should prioritize the format from argv', async () => {
1979
- process.argv = ['node', 'script.js', '--output-format', 'json'];
1980
- const argv = await parseArguments(createTestMergedSettings());
1981
- const config = await loadCliConfig(createTestMergedSettings({ output: { format: OutputFormat.JSON } }), 'test-session', argv);
1982
- expect(config.getOutputFormat()).toBe(OutputFormat.JSON);
1983
- });
1984
- it('should accept stream-json as a valid output format', async () => {
1985
- process.argv = ['node', 'script.js', '--output-format', 'stream-json'];
1986
- const argv = await parseArguments(createTestMergedSettings());
1987
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1988
- expect(config.getOutputFormat()).toBe(OutputFormat.STREAM_JSON);
1989
- });
1990
- it('should error on invalid --output-format argument', async () => {
1991
- process.argv = ['node', 'script.js', '--output-format', 'invalid'];
1992
- const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
1993
- throw new Error('process.exit called');
1994
- });
1995
- const mockConsoleError = vi
1996
- .spyOn(console, 'error')
1997
- .mockImplementation(() => { });
1998
- const debugErrorSpy = vi
1999
- .spyOn(debugLogger, 'error')
2000
- .mockImplementation(() => { });
2001
- await expect(parseArguments(createTestMergedSettings())).rejects.toThrow('process.exit called');
2002
- expect(debugErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Invalid values:'));
2003
- expect(mockConsoleError).toHaveBeenCalled();
2004
- mockExit.mockRestore();
2005
- mockConsoleError.mockRestore();
2006
- debugErrorSpy.mockRestore();
2007
- });
2008
- });
2009
- describe('parseArguments with positional prompt', () => {
2010
- const originalArgv = process.argv;
2011
- afterEach(() => {
2012
- process.argv = originalArgv;
2013
- });
2014
- it('should throw an error when both a positional prompt and the --prompt flag are used', async () => {
2015
- process.argv = [
2016
- 'node',
2017
- 'script.js',
2018
- 'positional',
2019
- 'prompt',
2020
- '--prompt',
2021
- 'test prompt',
2022
- ];
2023
- const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
2024
- throw new Error('process.exit called');
2025
- });
2026
- const mockConsoleError = vi
2027
- .spyOn(console, 'error')
2028
- .mockImplementation(() => { });
2029
- const debugErrorSpy = vi
2030
- .spyOn(debugLogger, 'error')
2031
- .mockImplementation(() => { });
2032
- await expect(parseArguments(createTestMergedSettings())).rejects.toThrow('process.exit called');
2033
- expect(debugErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Cannot use both a positional prompt and the --prompt (-p) flag together'));
2034
- mockExit.mockRestore();
2035
- mockConsoleError.mockRestore();
2036
- debugErrorSpy.mockRestore();
2037
- });
2038
- it('should correctly parse a positional prompt to query field', async () => {
2039
- process.argv = ['node', 'script.js', 'positional', 'prompt'];
2040
- const argv = await parseArguments(createTestMergedSettings());
2041
- expect(argv.query).toBe('positional prompt');
2042
- // Since no explicit prompt flags are set and query doesn't start with @, should map to prompt (one-shot)
2043
- expect(argv.prompt).toBe('positional prompt');
2044
- expect(argv.promptInteractive).toBeUndefined();
2045
- });
2046
- it('should have correct positional argument description', async () => {
2047
- // Test that the positional argument has the expected description
2048
- const yargsInstance = await import('./config.js');
2049
- // This test verifies that the positional 'query' argument is properly configured
2050
- // with the description: "Positional prompt. Defaults to one-shot; use -i/--prompt-interactive for interactive."
2051
- process.argv = ['node', 'script.js', 'test', 'query'];
2052
- const argv = await yargsInstance.parseArguments(createTestMergedSettings());
2053
- expect(argv.query).toBe('test query');
2054
- });
2055
- it('should correctly parse a prompt from the --prompt flag', async () => {
2056
- process.argv = ['node', 'script.js', '--prompt', 'test prompt'];
2057
- const argv = await parseArguments(createTestMergedSettings());
2058
- expect(argv.prompt).toBe('test prompt');
2059
- });
2060
- });
2061
- describe('Telemetry configuration via environment variables', () => {
2062
- beforeEach(() => {
2063
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2064
- });
2065
- afterEach(() => {
2066
- vi.resetAllMocks();
2067
- });
2068
- it('should prioritize GEMINI_TELEMETRY_ENABLED over settings', async () => {
2069
- vi.stubEnv('GEMINI_TELEMETRY_ENABLED', 'true');
2070
- process.argv = ['node', 'script.js'];
2071
- const argv = await parseArguments(createTestMergedSettings());
2072
- const settings = createTestMergedSettings({
2073
- telemetry: { enabled: false },
2074
- });
2075
- const config = await loadCliConfig(settings, 'test-session', argv);
2076
- expect(config.getTelemetryEnabled()).toBe(true);
2077
- });
2078
- it('should prioritize GEMINI_TELEMETRY_TARGET over settings', async () => {
2079
- vi.stubEnv('GEMINI_TELEMETRY_TARGET', 'gcp');
2080
- process.argv = ['node', 'script.js'];
2081
- const argv = await parseArguments(createTestMergedSettings());
2082
- const settings = createTestMergedSettings({
2083
- telemetry: { target: ServerConfig.TelemetryTarget.LOCAL },
2084
- });
2085
- const config = await loadCliConfig(settings, 'test-session', argv);
2086
- expect(config.getTelemetryTarget()).toBe('gcp');
2087
- });
2088
- it('should throw when GEMINI_TELEMETRY_TARGET is invalid', async () => {
2089
- vi.stubEnv('GEMINI_TELEMETRY_TARGET', 'bogus');
2090
- process.argv = ['node', 'script.js'];
2091
- const argv = await parseArguments(createTestMergedSettings());
2092
- const settings = createTestMergedSettings({
2093
- telemetry: { target: ServerConfig.TelemetryTarget.GCP },
2094
- });
2095
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow(/Invalid telemetry configuration: .*Invalid telemetry target/i);
2096
- vi.unstubAllEnvs();
2097
- });
2098
- it('should prioritize GEMINI_TELEMETRY_OTLP_ENDPOINT over settings and default env var', async () => {
2099
- vi.stubEnv('OTEL_EXPORTER_OTLP_ENDPOINT', 'http://default.env.com');
2100
- vi.stubEnv('GEMINI_TELEMETRY_OTLP_ENDPOINT', 'http://gemini.env.com');
2101
- process.argv = ['node', 'script.js'];
2102
- const argv = await parseArguments(createTestMergedSettings());
2103
- const settings = createTestMergedSettings({
2104
- telemetry: { otlpEndpoint: 'http://settings.com' },
2105
- });
2106
- const config = await loadCliConfig(settings, 'test-session', argv);
2107
- expect(config.getTelemetryOtlpEndpoint()).toBe('http://gemini.env.com');
2108
- });
2109
- it('should prioritize GEMINI_TELEMETRY_OTLP_PROTOCOL over settings', async () => {
2110
- vi.stubEnv('GEMINI_TELEMETRY_OTLP_PROTOCOL', 'http');
2111
- process.argv = ['node', 'script.js'];
2112
- const argv = await parseArguments(createTestMergedSettings());
2113
- const settings = createTestMergedSettings({
2114
- telemetry: { otlpProtocol: 'grpc' },
2115
- });
2116
- const config = await loadCliConfig(settings, 'test-session', argv);
2117
- expect(config.getTelemetryOtlpProtocol()).toBe('http');
2118
- });
2119
- it('should prioritize GEMINI_TELEMETRY_LOG_PROMPTS over settings', async () => {
2120
- vi.stubEnv('GEMINI_TELEMETRY_LOG_PROMPTS', 'false');
2121
- process.argv = ['node', 'script.js'];
2122
- const argv = await parseArguments(createTestMergedSettings());
2123
- const settings = createTestMergedSettings({
2124
- telemetry: { logPrompts: true },
2125
- });
2126
- const config = await loadCliConfig(settings, 'test-session', argv);
2127
- expect(config.getTelemetryLogPromptsEnabled()).toBe(false);
2128
- });
2129
- it('should prioritize GEMINI_TELEMETRY_OUTFILE over settings', async () => {
2130
- vi.stubEnv('GEMINI_TELEMETRY_OUTFILE', '/gemini/env/telemetry.log');
2131
- process.argv = ['node', 'script.js'];
2132
- const argv = await parseArguments(createTestMergedSettings());
2133
- const settings = createTestMergedSettings({
2134
- telemetry: { outfile: '/settings/telemetry.log' },
2135
- });
2136
- const config = await loadCliConfig(settings, 'test-session', argv);
2137
- expect(config.getTelemetryOutfile()).toBe('/gemini/env/telemetry.log');
2138
- });
2139
- it('should prioritize GEMINI_TELEMETRY_USE_COLLECTOR over settings', async () => {
2140
- vi.stubEnv('GEMINI_TELEMETRY_USE_COLLECTOR', 'true');
2141
- process.argv = ['node', 'script.js'];
2142
- const argv = await parseArguments(createTestMergedSettings());
2143
- const settings = createTestMergedSettings({
2144
- telemetry: { useCollector: false },
2145
- });
2146
- const config = await loadCliConfig(settings, 'test-session', argv);
2147
- expect(config.getTelemetryUseCollector()).toBe(true);
2148
- });
2149
- it('should use settings value when GEMINI_TELEMETRY_ENABLED is not set', async () => {
2150
- vi.stubEnv('GEMINI_TELEMETRY_ENABLED', undefined);
2151
- process.argv = ['node', 'script.js'];
2152
- const argv = await parseArguments(createTestMergedSettings());
2153
- const settings = createTestMergedSettings({ telemetry: { enabled: true } });
2154
- const config = await loadCliConfig(settings, 'test-session', argv);
2155
- expect(config.getTelemetryEnabled()).toBe(true);
2156
- });
2157
- it('should use settings value when GEMINI_TELEMETRY_TARGET is not set', async () => {
2158
- vi.stubEnv('GEMINI_TELEMETRY_TARGET', undefined);
2159
- process.argv = ['node', 'script.js'];
2160
- const argv = await parseArguments(createTestMergedSettings());
2161
- const settings = createTestMergedSettings({
2162
- telemetry: { target: ServerConfig.TelemetryTarget.LOCAL },
2163
- });
2164
- const config = await loadCliConfig(settings, 'test-session', argv);
2165
- expect(config.getTelemetryTarget()).toBe('local');
2166
- });
2167
- it("should treat GEMINI_TELEMETRY_ENABLED='1' as true", async () => {
2168
- vi.stubEnv('GEMINI_TELEMETRY_ENABLED', '1');
2169
- process.argv = ['node', 'script.js'];
2170
- const argv = await parseArguments(createTestMergedSettings());
2171
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2172
- expect(config.getTelemetryEnabled()).toBe(true);
2173
- });
2174
- it("should treat GEMINI_TELEMETRY_ENABLED='0' as false", async () => {
2175
- vi.stubEnv('GEMINI_TELEMETRY_ENABLED', '0');
2176
- process.argv = ['node', 'script.js'];
2177
- const argv = await parseArguments(createTestMergedSettings());
2178
- const config = await loadCliConfig(createTestMergedSettings({ telemetry: { enabled: true } }), 'test-session', argv);
2179
- expect(config.getTelemetryEnabled()).toBe(false);
2180
- });
2181
- it("should treat GEMINI_TELEMETRY_LOG_PROMPTS='1' as true", async () => {
2182
- vi.stubEnv('GEMINI_TELEMETRY_LOG_PROMPTS', '1');
2183
- process.argv = ['node', 'script.js'];
2184
- const argv = await parseArguments(createTestMergedSettings());
2185
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2186
- expect(config.getTelemetryLogPromptsEnabled()).toBe(true);
2187
- });
2188
- it("should treat GEMINI_TELEMETRY_LOG_PROMPTS='false' as false", async () => {
2189
- vi.stubEnv('GEMINI_TELEMETRY_LOG_PROMPTS', 'false');
2190
- process.argv = ['node', 'script.js'];
2191
- const argv = await parseArguments(createTestMergedSettings());
2192
- const config = await loadCliConfig(createTestMergedSettings({ telemetry: { logPrompts: true } }), 'test-session', argv);
2193
- expect(config.getTelemetryLogPromptsEnabled()).toBe(false);
2194
- });
2195
- });
2196
- describe('PolicyEngine nonInteractive wiring', () => {
2197
- const originalIsTTY = process.stdin.isTTY;
2198
- beforeEach(() => {
2199
- vi.resetAllMocks();
2200
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2201
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2202
- });
2203
- afterEach(() => {
2204
- process.stdin.isTTY = originalIsTTY;
2205
- vi.restoreAllMocks();
2206
- });
2207
- it('should set nonInteractive to true when -p flag is used', async () => {
2208
- process.stdin.isTTY = true;
2209
- process.argv = ['node', 'script.js', '-p', 'echo hello'];
2210
- const argv = await parseArguments(createTestMergedSettings());
2211
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2212
- expect(config.isInteractive()).toBe(false);
2213
- expect(config.getPolicyEngine()
2214
- .nonInteractive).toBe(true);
2215
- });
2216
- it('should set nonInteractive to false in interactive mode', async () => {
2217
- process.stdin.isTTY = true;
2218
- process.argv = ['node', 'script.js'];
2219
- const argv = await parseArguments(createTestMergedSettings());
2220
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2221
- expect(config.isInteractive()).toBe(true);
2222
- expect(config.getPolicyEngine()
2223
- .nonInteractive).toBe(false);
2224
- });
2225
- });
2226
- describe('Policy Engine Integration in loadCliConfig', () => {
2227
- beforeEach(() => {
2228
- vi.resetAllMocks();
2229
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2230
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2231
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2232
- });
2233
- afterEach(() => {
2234
- vi.unstubAllEnvs();
2235
- vi.restoreAllMocks();
2236
- });
2237
- it('should pass merged allowed tools from CLI and settings to createPolicyEngineConfig', async () => {
2238
- process.argv = ['node', 'script.js', '--allowed-tools', 'cli-tool'];
2239
- const settings = createTestMergedSettings({
2240
- tools: { allowed: ['settings-tool'] },
2241
- });
2242
- const argv = await parseArguments(createTestMergedSettings());
2243
- await loadCliConfig(settings, 'test-session', argv);
2244
- expect(ServerConfig.createPolicyEngineConfig).toHaveBeenCalledWith(expect.objectContaining({
2245
- tools: expect.objectContaining({
2246
- allowed: expect.arrayContaining(['cli-tool']),
2247
- }),
2248
- }), expect.anything());
2249
- });
2250
- it('should pass merged exclude tools from CLI logic and settings to createPolicyEngineConfig', async () => {
2251
- process.stdin.isTTY = false; // Non-interactive to trigger default excludes
2252
- process.argv = ['node', 'script.js', '-p', 'test'];
2253
- const settings = createTestMergedSettings({
2254
- tools: { exclude: ['settings-exclude'] },
2255
- });
2256
- const argv = await parseArguments(createTestMergedSettings());
2257
- await loadCliConfig(settings, 'test-session', argv);
2258
- // In non-interactive mode, ShellTool, etc. are excluded
2259
- expect(ServerConfig.createPolicyEngineConfig).toHaveBeenCalledWith(expect.objectContaining({
2260
- tools: expect.objectContaining({
2261
- exclude: expect.arrayContaining([SHELL_TOOL_NAME]),
2262
- }),
2263
- }), expect.anything());
2264
- });
2265
- });
2266
- describe('loadCliConfig disableYoloMode', () => {
2267
- beforeEach(() => {
2268
- vi.resetAllMocks();
2269
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2270
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2271
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2272
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
2273
- isTrusted: true,
2274
- source: undefined,
2275
- });
2276
- });
2277
- afterEach(() => {
2278
- vi.unstubAllEnvs();
2279
- vi.restoreAllMocks();
2280
- });
2281
- it('should allow auto_edit mode even if yolo mode is disabled', async () => {
2282
- process.argv = ['node', 'script.js', '--approval-mode=auto_edit'];
2283
- const argv = await parseArguments(createTestMergedSettings());
2284
- const settings = createTestMergedSettings({
2285
- security: { disableYoloMode: true },
2286
- });
2287
- const config = await loadCliConfig(settings, 'test-session', argv);
2288
- expect(config.getApprovalMode()).toBe(ApprovalMode.AUTO_EDIT);
2289
- });
2290
- it('should throw if YOLO mode is attempted when disableYoloMode is true', async () => {
2291
- process.argv = ['node', 'script.js', '--yolo'];
2292
- const argv = await parseArguments(createTestMergedSettings());
2293
- const settings = createTestMergedSettings({
2294
- security: { disableYoloMode: true },
2295
- });
2296
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow('Cannot start in YOLO mode since it is disabled by your admin');
2297
- });
2298
- });
2299
- describe('loadCliConfig secureModeEnabled', () => {
2300
- beforeEach(() => {
2301
- vi.resetAllMocks();
2302
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2303
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2304
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2305
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
2306
- isTrusted: true,
2307
- source: undefined,
2308
- });
2309
- });
2310
- afterEach(() => {
2311
- vi.unstubAllEnvs();
2312
- vi.restoreAllMocks();
2313
- });
2314
- it('should throw an error if YOLO mode is attempted when secureModeEnabled is true', async () => {
2315
- process.argv = ['node', 'script.js', '--yolo'];
2316
- const argv = await parseArguments(createTestMergedSettings());
2317
- const settings = createTestMergedSettings({
2318
- admin: {
2319
- secureModeEnabled: true,
2320
- },
2321
- });
2322
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow('Cannot start in YOLO mode since it is disabled by your admin');
2323
- });
2324
- it('should throw an error if approval-mode=yolo is attempted when secureModeEnabled is true', async () => {
2325
- process.argv = ['node', 'script.js', '--approval-mode=yolo'];
2326
- const argv = await parseArguments(createTestMergedSettings());
2327
- const settings = createTestMergedSettings({
2328
- admin: {
2329
- secureModeEnabled: true,
2330
- },
2331
- });
2332
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow('Cannot start in YOLO mode since it is disabled by your admin');
2333
- });
2334
- it('should set disableYoloMode to true when secureModeEnabled is true', async () => {
2335
- process.argv = ['node', 'script.js'];
2336
- const argv = await parseArguments(createTestMergedSettings());
2337
- const settings = createTestMergedSettings({
2338
- admin: {
2339
- secureModeEnabled: true,
2340
- },
2341
- });
2342
- const config = await loadCliConfig(settings, 'test-session', argv);
2343
- expect(config.isYoloModeDisabled()).toBe(true);
2344
- });
2345
- });
2346
- describe('loadCliConfig mcpEnabled', () => {
2347
- beforeEach(() => {
2348
- vi.resetAllMocks();
2349
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2350
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2351
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2352
- });
2353
- afterEach(() => {
2354
- vi.unstubAllEnvs();
2355
- vi.restoreAllMocks();
2356
- });
2357
- const mcpSettings = {
2358
- mcp: {
2359
- serverCommand: 'mcp-server',
2360
- allowed: ['serverA'],
2361
- excluded: ['serverB'],
2362
- },
2363
- mcpServers: { serverA: { url: 'http://a' } },
2364
- };
2365
- it('should enable MCP by default', async () => {
2366
- process.argv = ['node', 'script.js'];
2367
- const argv = await parseArguments(createTestMergedSettings());
2368
- const settings = createTestMergedSettings({ ...mcpSettings });
2369
- const config = await loadCliConfig(settings, 'test-session', argv);
2370
- expect(config.getMcpEnabled()).toBe(true);
2371
- expect(config.getMcpServerCommand()).toBe('mcp-server');
2372
- expect(config.getMcpServers()).toEqual({ serverA: { url: 'http://a' } });
2373
- expect(config.getAllowedMcpServers()).toEqual(['serverA']);
2374
- expect(config.getBlockedMcpServers()).toEqual(['serverB']);
2375
- });
2376
- it('should disable MCP when mcpEnabled is false', async () => {
2377
- process.argv = ['node', 'script.js'];
2378
- const argv = await parseArguments(createTestMergedSettings());
2379
- const settings = createTestMergedSettings({
2380
- ...mcpSettings,
2381
- admin: {
2382
- mcp: {
2383
- enabled: false,
2384
- },
2385
- },
2386
- });
2387
- const config = await loadCliConfig(settings, 'test-session', argv);
2388
- expect(config.getMcpEnabled()).toBe(false);
2389
- expect(config.getMcpServerCommand()).toBeUndefined();
2390
- expect(config.getMcpServers()).toEqual({});
2391
- expect(config.getAllowedMcpServers()).toEqual([]);
2392
- expect(config.getBlockedMcpServers()).toEqual([]);
2393
- });
2394
- it('should enable MCP when mcpEnabled is true', async () => {
2395
- process.argv = ['node', 'script.js'];
2396
- const argv = await parseArguments(createTestMergedSettings());
2397
- const settings = createTestMergedSettings({
2398
- ...mcpSettings,
2399
- admin: {
2400
- mcp: {
2401
- enabled: true,
2402
- },
2403
- },
2404
- });
2405
- const config = await loadCliConfig(settings, 'test-session', argv);
2406
- expect(config.getMcpEnabled()).toBe(true);
2407
- expect(config.getMcpServerCommand()).toBe('mcp-server');
2408
- expect(config.getMcpServers()).toEqual({ serverA: { url: 'http://a' } });
2409
- expect(config.getAllowedMcpServers()).toEqual(['serverA']);
2410
- expect(config.getBlockedMcpServers()).toEqual(['serverB']);
2411
- });
2412
- });
2413
- //# sourceMappingURL=config.test.js.map