@quantum-ai/gemini-cli 0.45.4 → 0.45.6

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 (1961) hide show
  1. package/README.md +394 -0
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +17 -14
  5. package/dist/src/acp/acpCommandHandler.js.map +1 -1
  6. package/dist/src/acp/acpErrors.js.map +1 -1
  7. package/dist/src/acp/acpFileSystemService.js.map +1 -1
  8. package/dist/src/acp/acpRpcDispatcher.js.map +1 -1
  9. package/dist/src/acp/acpSession.js.map +1 -1
  10. package/dist/src/acp/acpSessionManager.js.map +1 -1
  11. package/dist/src/acp/acpUtils.js.map +1 -1
  12. package/dist/src/acp/commands/about.js.map +1 -1
  13. package/dist/src/acp/commands/commandRegistry.js.map +1 -1
  14. package/dist/src/acp/commands/extensions.js.map +1 -1
  15. package/dist/src/acp/commands/help.js.map +1 -1
  16. package/dist/src/acp/commands/init.js.map +1 -1
  17. package/dist/src/acp/commands/memory.js.map +1 -1
  18. package/dist/src/acp/commands/restore.js.map +1 -1
  19. package/dist/src/commands/extensions/configure.js.map +1 -1
  20. package/dist/src/commands/extensions/disable.js.map +1 -1
  21. package/dist/src/commands/extensions/enable.js.map +1 -1
  22. package/dist/src/commands/extensions/install.js.map +1 -1
  23. package/dist/src/commands/extensions/link.js.map +1 -1
  24. package/dist/src/commands/extensions/list.js.map +1 -1
  25. package/dist/src/commands/extensions/new.js.map +1 -1
  26. package/dist/src/commands/extensions/uninstall.js.map +1 -1
  27. package/dist/src/commands/extensions/update.js.map +1 -1
  28. package/dist/src/commands/extensions/utils.js.map +1 -1
  29. package/dist/src/commands/extensions/validate.js.map +1 -1
  30. package/dist/src/commands/gemma/logs.js.map +1 -1
  31. package/dist/src/commands/gemma/platform.js.map +1 -1
  32. package/dist/src/commands/gemma/setup.js.map +1 -1
  33. package/dist/src/commands/gemma/start.js.map +1 -1
  34. package/dist/src/commands/gemma/status.js.map +1 -1
  35. package/dist/src/commands/gemma/stop.js.map +1 -1
  36. package/dist/src/commands/hooks/migrate.js +1 -1
  37. package/dist/src/commands/hooks/migrate.js.map +1 -1
  38. package/dist/src/commands/mcp/add.js +1 -1
  39. package/dist/src/commands/mcp/add.js.map +1 -1
  40. package/dist/src/commands/mcp/enableDisable.js.map +1 -1
  41. package/dist/src/commands/mcp/list.js.map +1 -1
  42. package/dist/src/commands/mcp/remove.js.map +1 -1
  43. package/dist/src/commands/skills/install.js.map +1 -1
  44. package/dist/src/commands/skills/link.js.map +1 -1
  45. package/dist/src/commands/skills/list.js.map +1 -1
  46. package/dist/src/commands/skills/uninstall.js.map +1 -1
  47. package/dist/src/config/auth.js.map +1 -1
  48. package/dist/src/config/config.js.map +1 -1
  49. package/dist/src/config/extension-manager-themes.spec.js.map +1 -1
  50. package/dist/src/config/extension-manager.d.ts +1 -0
  51. package/dist/src/config/extension-manager.js.map +1 -1
  52. package/dist/src/config/extension.js.map +1 -1
  53. package/dist/src/config/extensionRegistryClient.js +2 -1
  54. package/dist/src/config/extensionRegistryClient.js.map +1 -1
  55. package/dist/src/config/extensions/consent.js.map +1 -1
  56. package/dist/src/config/extensions/extensionEnablement.js.map +1 -1
  57. package/dist/src/config/extensions/extensionSettings.js +1 -1
  58. package/dist/src/config/extensions/extensionSettings.js.map +1 -1
  59. package/dist/src/config/extensions/github.js.map +1 -1
  60. package/dist/src/config/extensions/github_fetch.js.map +1 -1
  61. package/dist/src/config/extensions/update.js.map +1 -1
  62. package/dist/src/config/extensions/variables.js.map +1 -1
  63. package/dist/src/config/footerItems.js.map +1 -1
  64. package/dist/src/config/mcp/mcpServerEnablement.js +2 -1
  65. package/dist/src/config/mcp/mcpServerEnablement.js.map +1 -1
  66. package/dist/src/config/policy.js.map +1 -1
  67. package/dist/src/config/sandboxConfig.js.map +1 -1
  68. package/dist/src/config/settings-validation.js.map +1 -1
  69. package/dist/src/config/settings.js +1 -1
  70. package/dist/src/config/settings.js.map +1 -1
  71. package/dist/src/config/settingsSchema.d.ts +38 -21
  72. package/dist/src/config/settingsSchema.js +7 -7
  73. package/dist/src/config/settingsSchema.js.map +1 -1
  74. package/dist/src/core/auth.js.map +1 -1
  75. package/dist/src/core/initializer.js.map +1 -1
  76. package/dist/src/core/theme.js.map +1 -1
  77. package/dist/src/deferred.js.map +1 -1
  78. package/dist/src/gemini.js.map +1 -1
  79. package/dist/src/index.d.ts +1 -0
  80. package/dist/src/index.js +1 -0
  81. package/dist/src/index.js.map +1 -1
  82. package/dist/src/interactiveCli.js.map +1 -1
  83. package/dist/src/nonInteractiveCli.js.map +1 -1
  84. package/dist/src/nonInteractiveCliAgentSession.js.map +1 -1
  85. package/dist/src/nonInteractiveCliCommands.js.map +1 -1
  86. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  87. package/dist/src/services/CommandService.js.map +1 -1
  88. package/dist/src/services/FileCommandLoader.js.map +1 -1
  89. package/dist/src/services/McpPromptLoader.js.map +1 -1
  90. package/dist/src/services/SkillCommandLoader.js.map +1 -1
  91. package/dist/src/services/SlashCommandConflictHandler.js.map +1 -1
  92. package/dist/src/services/SlashCommandResolver.js.map +1 -1
  93. package/dist/src/services/liteRtServerManager.js.map +1 -1
  94. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -1
  95. package/dist/src/services/prompt-processors/atFileProcessor.js.map +1 -1
  96. package/dist/src/services/prompt-processors/injectionParser.js.map +1 -1
  97. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -1
  98. package/dist/src/test-utils/AppRig.js.map +1 -1
  99. package/dist/src/test-utils/MockShellExecutionService.js +2 -1
  100. package/dist/src/test-utils/MockShellExecutionService.js.map +1 -1
  101. package/dist/src/test-utils/async.js.map +1 -1
  102. package/dist/src/test-utils/createExtension.js.map +1 -1
  103. package/dist/src/test-utils/customMatchers.js.map +1 -1
  104. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  105. package/dist/src/test-utils/mockDebugLogger.js.map +1 -1
  106. package/dist/src/test-utils/render.js.map +1 -1
  107. package/dist/src/test-utils/settings.js.map +1 -1
  108. package/dist/src/test-utils/svg.js.map +1 -1
  109. package/dist/src/ui/App.d.ts +1 -1
  110. package/dist/src/ui/App.js.map +1 -1
  111. package/dist/src/ui/AppContainer.d.ts +1 -1
  112. package/dist/src/ui/AppContainer.js.map +1 -1
  113. package/dist/src/ui/IdeIntegrationNudge.d.ts +1 -1
  114. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  115. package/dist/src/ui/auth/ApiAuthDialog.js.map +1 -1
  116. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  117. package/dist/src/ui/auth/AuthInProgress.js.map +1 -1
  118. package/dist/src/ui/auth/BannedAccountDialog.js.map +1 -1
  119. package/dist/src/ui/auth/LoginRestartDialog.d.ts +1 -1
  120. package/dist/src/ui/auth/LoginRestartDialog.js.map +1 -1
  121. package/dist/src/ui/auth/useAuth.d.ts +1 -0
  122. package/dist/src/ui/auth/useAuth.js.map +1 -1
  123. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  124. package/dist/src/ui/commands/agentsCommand.js.map +1 -1
  125. package/dist/src/ui/commands/bugCommand.js.map +1 -1
  126. package/dist/src/ui/commands/bugMemoryCommand.js.map +1 -1
  127. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  128. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  129. package/dist/src/ui/commands/commandsCommand.js.map +1 -1
  130. package/dist/src/ui/commands/compressCommand.js.map +1 -1
  131. package/dist/src/ui/commands/copyCommand.js.map +1 -1
  132. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  133. package/dist/src/ui/commands/docsCommand.js.map +1 -1
  134. package/dist/src/ui/commands/exportSessionCommand.js.map +1 -1
  135. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  136. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  137. package/dist/src/ui/commands/hooksCommand.js.map +1 -1
  138. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  139. package/dist/src/ui/commands/initCommand.js.map +1 -1
  140. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  141. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  142. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  143. package/dist/src/ui/commands/oncallCommand.js.map +1 -1
  144. package/dist/src/ui/commands/permissionsCommand.js.map +1 -1
  145. package/dist/src/ui/commands/planCommand.js.map +1 -1
  146. package/dist/src/ui/commands/policiesCommand.js.map +1 -1
  147. package/dist/src/ui/commands/quitCommand.js +1 -1
  148. package/dist/src/ui/commands/quitCommand.js.map +1 -1
  149. package/dist/src/ui/commands/restoreCommand.js.map +1 -1
  150. package/dist/src/ui/commands/rewindCommand.js.map +1 -1
  151. package/dist/src/ui/commands/setupGithubCommand.js +3 -3
  152. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  153. package/dist/src/ui/commands/skillsCommand.js.map +1 -1
  154. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  155. package/dist/src/ui/commands/terminalSetupCommand.js.map +1 -1
  156. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  157. package/dist/src/ui/commands/types.js +1 -1
  158. package/dist/src/ui/commands/types.js.map +1 -1
  159. package/dist/src/ui/commands/upgradeCommand.js.map +1 -1
  160. package/dist/src/ui/components/AdminSettingsChangedDialog.d.ts +1 -1
  161. package/dist/src/ui/components/AdminSettingsChangedDialog.js.map +1 -1
  162. package/dist/src/ui/components/AgentConfigDialog.js.map +1 -1
  163. package/dist/src/ui/components/AlternateBufferQuittingDisplay.d.ts +1 -1
  164. package/dist/src/ui/components/AppHeader.d.ts +1 -1
  165. package/dist/src/ui/components/AppHeader.js.map +1 -1
  166. package/dist/src/ui/components/ApprovalModeIndicator.js.map +1 -1
  167. package/dist/src/ui/components/AskUserDialog.js +12 -12
  168. package/dist/src/ui/components/AskUserDialog.js.map +1 -1
  169. package/dist/src/ui/components/BackgroundTaskDisplay.d.ts +1 -1
  170. package/dist/src/ui/components/BackgroundTaskDisplay.js.map +1 -1
  171. package/dist/src/ui/components/Banner.d.ts +1 -1
  172. package/dist/src/ui/components/Banner.js.map +1 -1
  173. package/dist/src/ui/components/Checklist.js.map +1 -1
  174. package/dist/src/ui/components/ChecklistItem.js.map +1 -1
  175. package/dist/src/ui/components/CliSpinner.d.ts +1 -1
  176. package/dist/src/ui/components/CliSpinner.js.map +1 -1
  177. package/dist/src/ui/components/ColorsDisplay.js.map +1 -1
  178. package/dist/src/ui/components/Composer.d.ts +2 -2
  179. package/dist/src/ui/components/Composer.js.map +1 -1
  180. package/dist/src/ui/components/ConfigExtensionDialog.js.map +1 -1
  181. package/dist/src/ui/components/ConfigInitDisplay.d.ts +1 -1
  182. package/dist/src/ui/components/ConfigInitDisplay.js.map +1 -1
  183. package/dist/src/ui/components/ConsentPrompt.d.ts +1 -1
  184. package/dist/src/ui/components/ConsoleSummaryDisplay.js.map +1 -1
  185. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  186. package/dist/src/ui/components/ContextUsageDisplay.d.ts +1 -1
  187. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  188. package/dist/src/ui/components/DebugProfiler.d.ts +1 -1
  189. package/dist/src/ui/components/DebugProfiler.js.map +1 -1
  190. package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
  191. package/dist/src/ui/components/DialogManager.d.ts +1 -1
  192. package/dist/src/ui/components/DialogManager.js.map +1 -1
  193. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  194. package/dist/src/ui/components/EmptyWalletDialog.js.map +1 -1
  195. package/dist/src/ui/components/ExitPlanModeDialog.js.map +1 -1
  196. package/dist/src/ui/components/FolderTrustDialog.js +1 -1
  197. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
  198. package/dist/src/ui/components/Footer.js.map +1 -1
  199. package/dist/src/ui/components/FooterConfigDialog.js.map +1 -1
  200. package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
  201. package/dist/src/ui/components/GeminiSpinner.js.map +1 -1
  202. package/dist/src/ui/components/Header.js.map +1 -1
  203. package/dist/src/ui/components/HookStatusDisplay.js.map +1 -1
  204. package/dist/src/ui/components/HooksDialog.js.map +1 -1
  205. package/dist/src/ui/components/IdeTrustChangeDialog.d.ts +1 -1
  206. package/dist/src/ui/components/IdeTrustChangeDialog.js.map +1 -1
  207. package/dist/src/ui/components/InboxDialog.js.map +1 -1
  208. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  209. package/dist/src/ui/components/ListeningIndicator.js.map +1 -1
  210. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  211. package/dist/src/ui/components/LogoutConfirmationDialog.js +1 -1
  212. package/dist/src/ui/components/LogoutConfirmationDialog.js.map +1 -1
  213. package/dist/src/ui/components/LoopDetectionConfirmation.d.ts +1 -1
  214. package/dist/src/ui/components/LoopDetectionConfirmation.js.map +1 -1
  215. package/dist/src/ui/components/MainContent.d.ts +1 -1
  216. package/dist/src/ui/components/MainContent.js.map +1 -1
  217. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  218. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  219. package/dist/src/ui/components/ModelQuotaDisplay.d.ts +1 -1
  220. package/dist/src/ui/components/ModelQuotaDisplay.js.map +1 -1
  221. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -1
  222. package/dist/src/ui/components/MultiFolderTrustDialog.js +1 -1
  223. package/dist/src/ui/components/MultiFolderTrustDialog.js.map +1 -1
  224. package/dist/src/ui/components/NewAgentsNotification.d.ts +1 -1
  225. package/dist/src/ui/components/NewAgentsNotification.js +1 -1
  226. package/dist/src/ui/components/NewAgentsNotification.js.map +1 -1
  227. package/dist/src/ui/components/Notifications.d.ts +1 -1
  228. package/dist/src/ui/components/Notifications.js.map +1 -1
  229. package/dist/src/ui/components/OverageMenuDialog.js.map +1 -1
  230. package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -1
  231. package/dist/src/ui/components/PolicyUpdateDialog.js +1 -1
  232. package/dist/src/ui/components/PolicyUpdateDialog.js.map +1 -1
  233. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
  234. package/dist/src/ui/components/ProgressBar.js.map +1 -1
  235. package/dist/src/ui/components/QueuedMessageDisplay.d.ts +1 -1
  236. package/dist/src/ui/components/QueuedMessageDisplay.js.map +1 -1
  237. package/dist/src/ui/components/QuittingDisplay.d.ts +1 -1
  238. package/dist/src/ui/components/QuittingDisplay.js.map +1 -1
  239. package/dist/src/ui/components/QuotaDisplay.js.map +1 -1
  240. package/dist/src/ui/components/QuotaStatsInfo.js.map +1 -1
  241. package/dist/src/ui/components/RewindConfirmation.js +1 -1
  242. package/dist/src/ui/components/RewindConfirmation.js.map +1 -1
  243. package/dist/src/ui/components/RewindViewer.js.map +1 -1
  244. package/dist/src/ui/components/SessionBrowser/utils.d.ts +2 -2
  245. package/dist/src/ui/components/SessionBrowser/utils.js.map +1 -1
  246. package/dist/src/ui/components/SessionBrowser.js.map +1 -1
  247. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
  248. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  249. package/dist/src/ui/components/ShellInputPrompt.js.map +1 -1
  250. package/dist/src/ui/components/ShowMoreLines.d.ts +1 -1
  251. package/dist/src/ui/components/ShowMoreLines.js.map +1 -1
  252. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  253. package/dist/src/ui/components/StatusDisplay.js.map +1 -1
  254. package/dist/src/ui/components/StatusRow.js.map +1 -1
  255. package/dist/src/ui/components/SuggestionsDisplay.d.ts +1 -1
  256. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  257. package/dist/src/ui/components/Table.d.ts +1 -1
  258. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  259. package/dist/src/ui/components/ThemedGradient.js.map +1 -1
  260. package/dist/src/ui/components/ToastDisplay.js.map +1 -1
  261. package/dist/src/ui/components/ToolConfirmationQueue.js.map +1 -1
  262. package/dist/src/ui/components/ToolStatsDisplay.js.map +1 -1
  263. package/dist/src/ui/components/UpdateNotification.d.ts +1 -1
  264. package/dist/src/ui/components/UserIdentity.js.map +1 -1
  265. package/dist/src/ui/components/ValidationDialog.js.map +1 -1
  266. package/dist/src/ui/components/VoiceModelDialog.js.map +1 -1
  267. package/dist/src/ui/components/messages/CompressionMessage.d.ts +1 -0
  268. package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -1
  269. package/dist/src/ui/components/messages/DenseToolMessage.js.map +1 -1
  270. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  271. package/dist/src/ui/components/messages/ShellToolMessage.js.map +1 -1
  272. package/dist/src/ui/components/messages/SubagentGroupDisplay.js.map +1 -1
  273. package/dist/src/ui/components/messages/SubagentProgressDisplay.js.map +1 -1
  274. package/dist/src/ui/components/messages/ThinkingMessage.js.map +1 -1
  275. package/dist/src/ui/components/messages/Todo.js.map +1 -1
  276. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  277. package/dist/src/ui/components/messages/ToolGroupDisplay.js.map +1 -1
  278. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  279. package/dist/src/ui/components/messages/ToolResultDisplay.js.map +1 -1
  280. package/dist/src/ui/components/messages/ToolShared.js.map +1 -1
  281. package/dist/src/ui/components/messages/TopicMessage.js.map +1 -1
  282. package/dist/src/ui/components/shared/BaseSelectionList.js.map +1 -1
  283. package/dist/src/ui/components/shared/BaseSettingsDialog.js.map +1 -1
  284. package/dist/src/ui/components/shared/DialogFooter.js.map +1 -1
  285. package/dist/src/ui/components/shared/EnumSelector.d.ts +1 -1
  286. package/dist/src/ui/components/shared/EnumSelector.js.map +1 -1
  287. package/dist/src/ui/components/shared/ExpandableText.js.map +1 -1
  288. package/dist/src/ui/components/shared/HalfLinePaddedBox.js.map +1 -1
  289. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  290. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  291. package/dist/src/ui/components/shared/Scrollable.js.map +1 -1
  292. package/dist/src/ui/components/shared/ScrollableList.d.ts +1 -1
  293. package/dist/src/ui/components/shared/ScrollableList.js.map +1 -1
  294. package/dist/src/ui/components/shared/SearchableList.js.map +1 -1
  295. package/dist/src/ui/components/shared/SlicingMaxSizedBox.d.ts +2 -1
  296. package/dist/src/ui/components/shared/SlicingMaxSizedBox.js.map +1 -1
  297. package/dist/src/ui/components/shared/TabHeader.js.map +1 -1
  298. package/dist/src/ui/components/shared/TextInput.js.map +1 -1
  299. package/dist/src/ui/components/shared/VirtualizedList.d.ts +1 -1
  300. package/dist/src/ui/components/shared/VirtualizedList.js.map +1 -1
  301. package/dist/src/ui/components/shared/text-buffer.d.ts +1 -0
  302. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  303. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -1
  304. package/dist/src/ui/components/triage/TriageDuplicates.d.ts +2 -2
  305. package/dist/src/ui/components/triage/TriageDuplicates.js +2 -2
  306. package/dist/src/ui/components/triage/TriageDuplicates.js.map +1 -1
  307. package/dist/src/ui/components/triage/TriageIssues.d.ts +3 -3
  308. package/dist/src/ui/components/triage/TriageIssues.js.map +1 -1
  309. package/dist/src/ui/components/views/AgentsStatus.js.map +1 -1
  310. package/dist/src/ui/components/views/ChatList.js.map +1 -1
  311. package/dist/src/ui/components/views/ExtensionDetails.js.map +1 -1
  312. package/dist/src/ui/components/views/ExtensionRegistryView.js.map +1 -1
  313. package/dist/src/ui/components/views/ExtensionsList.js.map +1 -1
  314. package/dist/src/ui/components/views/McpStatus.js.map +1 -1
  315. package/dist/src/ui/components/views/SkillsList.js.map +1 -1
  316. package/dist/src/ui/constants.js +2 -2
  317. package/dist/src/ui/constants.js.map +1 -1
  318. package/dist/src/ui/contexts/AppContext.d.ts +1 -0
  319. package/dist/src/ui/contexts/AppContext.js.map +1 -1
  320. package/dist/src/ui/contexts/AskUserActionsContext.js.map +1 -1
  321. package/dist/src/ui/contexts/ConfigContext.js.map +1 -1
  322. package/dist/src/ui/contexts/InputContext.d.ts +1 -0
  323. package/dist/src/ui/contexts/InputContext.js.map +1 -1
  324. package/dist/src/ui/contexts/KeypressContext.d.ts +1 -1
  325. package/dist/src/ui/contexts/KeypressContext.js +9 -9
  326. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  327. package/dist/src/ui/contexts/MouseContext.d.ts +1 -1
  328. package/dist/src/ui/contexts/MouseContext.js.map +1 -1
  329. package/dist/src/ui/contexts/OverflowContext.js.map +1 -1
  330. package/dist/src/ui/contexts/QuotaContext.d.ts +1 -0
  331. package/dist/src/ui/contexts/QuotaContext.js.map +1 -1
  332. package/dist/src/ui/contexts/ScrollProvider.d.ts +1 -1
  333. package/dist/src/ui/contexts/ScrollProvider.js.map +1 -1
  334. package/dist/src/ui/contexts/SessionContext.js +1 -1
  335. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  336. package/dist/src/ui/contexts/SettingsContext.js.map +1 -1
  337. package/dist/src/ui/contexts/ShellFocusContext.d.ts +1 -0
  338. package/dist/src/ui/contexts/StreamingContext.js.map +1 -1
  339. package/dist/src/ui/contexts/TerminalContext.d.ts +1 -1
  340. package/dist/src/ui/contexts/TerminalContext.js.map +1 -1
  341. package/dist/src/ui/contexts/ToolActionsContext.js.map +1 -1
  342. package/dist/src/ui/contexts/UIActionsContext.d.ts +1 -0
  343. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  344. package/dist/src/ui/contexts/UIStateContext.d.ts +1 -0
  345. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  346. package/dist/src/ui/contexts/VimModeContext.d.ts +1 -1
  347. package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
  348. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  349. package/dist/src/ui/hooks/creditsFlowHandler.d.ts +1 -0
  350. package/dist/src/ui/hooks/creditsFlowHandler.js.map +1 -1
  351. package/dist/src/ui/hooks/shell-completions/gitProvider.js.map +1 -1
  352. package/dist/src/ui/hooks/shell-completions/index.js.map +1 -1
  353. package/dist/src/ui/hooks/shell-completions/npmProvider.js.map +1 -1
  354. package/dist/src/ui/hooks/shellReducer.js.map +1 -1
  355. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +1 -1
  356. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  357. package/dist/src/ui/hooks/toolMapping.js.map +1 -1
  358. package/dist/src/ui/hooks/useAgentStream.js.map +1 -1
  359. package/dist/src/ui/hooks/useAnimatedScrollbar.js.map +1 -1
  360. package/dist/src/ui/hooks/useApprovalModeIndicator.js.map +1 -1
  361. package/dist/src/ui/hooks/useAtCompletion.js +1 -1
  362. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  363. package/dist/src/ui/hooks/useBackgroundTaskManager.d.ts +1 -0
  364. package/dist/src/ui/hooks/useBackgroundTaskManager.js.map +1 -1
  365. package/dist/src/ui/hooks/useBanner.js.map +1 -1
  366. package/dist/src/ui/hooks/useCommandCompletion.js +1 -1
  367. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  368. package/dist/src/ui/hooks/useCompletion.d.ts +1 -0
  369. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  370. package/dist/src/ui/hooks/useComposerStatus.js.map +1 -1
  371. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  372. package/dist/src/ui/hooks/useEditorSettings.d.ts +1 -1
  373. package/dist/src/ui/hooks/useEditorSettings.js.map +1 -1
  374. package/dist/src/ui/hooks/useExecutionLifecycle.d.ts +1 -1
  375. package/dist/src/ui/hooks/useExecutionLifecycle.js.map +1 -1
  376. package/dist/src/ui/hooks/useExtensionRegistry.js.map +1 -1
  377. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +4 -3
  378. package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -1
  379. package/dist/src/ui/hooks/useFlickerDetector.d.ts +1 -0
  380. package/dist/src/ui/hooks/useFlickerDetector.js.map +1 -1
  381. package/dist/src/ui/hooks/useFocus.js.map +1 -1
  382. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  383. package/dist/src/ui/hooks/useGeminiStream.d.ts +2 -2
  384. package/dist/src/ui/hooks/useGeminiStream.js +1 -1
  385. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  386. package/dist/src/ui/hooks/useGitBranchName.js.map +1 -1
  387. package/dist/src/ui/hooks/useHistoryManager.js.map +1 -1
  388. package/dist/src/ui/hooks/useHookDisplayState.js.map +1 -1
  389. package/dist/src/ui/hooks/useIdeTrustListener.js.map +1 -1
  390. package/dist/src/ui/hooks/useInactivityTimer.js.map +1 -1
  391. package/dist/src/ui/hooks/useIncludeDirsTrust.d.ts +1 -0
  392. package/dist/src/ui/hooks/useIncludeDirsTrust.js.map +1 -1
  393. package/dist/src/ui/hooks/useInlineEditBuffer.d.ts +2 -1
  394. package/dist/src/ui/hooks/useInlineEditBuffer.js.map +1 -1
  395. package/dist/src/ui/hooks/useInputHistory.js.map +1 -1
  396. package/dist/src/ui/hooks/useInputHistoryStore.js.map +1 -1
  397. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  398. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  399. package/dist/src/ui/hooks/useMcpStatus.js.map +1 -1
  400. package/dist/src/ui/hooks/useMemoryMonitor.js.map +1 -1
  401. package/dist/src/ui/hooks/useMessageQueue.js.map +1 -1
  402. package/dist/src/ui/hooks/useMouse.js.map +1 -1
  403. package/dist/src/ui/hooks/useMouseClick.d.ts +1 -1
  404. package/dist/src/ui/hooks/useMouseClick.js.map +1 -1
  405. package/dist/src/ui/hooks/usePermissionsModifyTrust.d.ts +1 -1
  406. package/dist/src/ui/hooks/usePermissionsModifyTrust.js.map +1 -1
  407. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  408. package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
  409. package/dist/src/ui/hooks/usePromptCompletion.js.map +1 -1
  410. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -1
  411. package/dist/src/ui/hooks/useRegistrySearch.js.map +1 -1
  412. package/dist/src/ui/hooks/useRepeatedKeyPress.js.map +1 -1
  413. package/dist/src/ui/hooks/useReverseSearchCompletion.js.map +1 -1
  414. package/dist/src/ui/hooks/useRewind.js.map +1 -1
  415. package/dist/src/ui/hooks/useRunEventNotifications.js +1 -1
  416. package/dist/src/ui/hooks/useRunEventNotifications.js.map +1 -1
  417. package/dist/src/ui/hooks/useSelectionList.js.map +1 -1
  418. package/dist/src/ui/hooks/useSessionBrowser.d.ts +1 -1
  419. package/dist/src/ui/hooks/useSessionBrowser.js.map +1 -1
  420. package/dist/src/ui/hooks/useSessionResume.d.ts +1 -1
  421. package/dist/src/ui/hooks/useSessionResume.js.map +1 -1
  422. package/dist/src/ui/hooks/useSettingsNavigation.js.map +1 -1
  423. package/dist/src/ui/hooks/useShellCompletion.js.map +1 -1
  424. package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
  425. package/dist/src/ui/hooks/useShellInactivityStatus.js.map +1 -1
  426. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  427. package/dist/src/ui/hooks/useSnowfall.js.map +1 -1
  428. package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
  429. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
  430. package/dist/src/ui/hooks/useSuspend.js.map +1 -1
  431. package/dist/src/ui/hooks/useTabbedNavigation.js.map +1 -1
  432. package/dist/src/ui/hooks/useTerminalTheme.js.map +1 -1
  433. package/dist/src/ui/hooks/useThemeCommand.d.ts +1 -1
  434. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  435. package/dist/src/ui/hooks/useTimedMessage.js.map +1 -1
  436. package/dist/src/ui/hooks/useTimer.js.map +1 -1
  437. package/dist/src/ui/hooks/useTips.js.map +1 -1
  438. package/dist/src/ui/hooks/useToolScheduler.d.ts +1 -0
  439. package/dist/src/ui/hooks/useToolScheduler.js.map +1 -1
  440. package/dist/src/ui/hooks/useTurnActivityMonitor.js.map +1 -1
  441. package/dist/src/ui/hooks/useVisibilityToggle.js.map +1 -1
  442. package/dist/src/ui/hooks/useVoiceMode.js.map +1 -1
  443. package/dist/src/ui/hooks/vim.js.map +1 -1
  444. package/dist/src/ui/key/keyBindings.js +5 -4
  445. package/dist/src/ui/key/keyBindings.js.map +1 -1
  446. package/dist/src/ui/key/keyMatchers.js.map +1 -1
  447. package/dist/src/ui/key/keyToAnsi.js.map +1 -1
  448. package/dist/src/ui/key/keybindingUtils.js.map +1 -1
  449. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -1
  450. package/dist/src/ui/privacy/CloudFreePrivacyNotice.d.ts +1 -1
  451. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
  452. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.d.ts +1 -1
  453. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js.map +1 -1
  454. package/dist/src/ui/privacy/GeminiPrivacyNotice.d.ts +1 -1
  455. package/dist/src/ui/privacy/GeminiPrivacyNotice.js.map +1 -1
  456. package/dist/src/ui/privacy/PrivacyNotice.d.ts +1 -1
  457. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  458. package/dist/src/ui/state/extensions.js +1 -1
  459. package/dist/src/ui/state/extensions.js.map +1 -1
  460. package/dist/src/ui/themes/builtin/dark/ansi-dark.js +1 -1
  461. package/dist/src/ui/themes/builtin/dark/ansi-dark.js.map +1 -1
  462. package/dist/src/ui/themes/builtin/dark/holiday-dark.js +1 -1
  463. package/dist/src/ui/themes/builtin/dark/holiday-dark.js.map +1 -1
  464. package/dist/src/ui/themes/builtin/dark/shades-of-purple-dark.js +17 -17
  465. package/dist/src/ui/themes/builtin/dark/shades-of-purple-dark.js.map +1 -1
  466. package/dist/src/ui/themes/builtin/light/github-light.js +1 -1
  467. package/dist/src/ui/themes/builtin/light/github-light.js.map +1 -1
  468. package/dist/src/ui/themes/builtin/light/xcode-light.js +1 -1
  469. package/dist/src/ui/themes/builtin/light/xcode-light.js.map +1 -1
  470. package/dist/src/ui/themes/color-utils.js.map +1 -1
  471. package/dist/src/ui/themes/theme-manager.d.ts +1 -0
  472. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  473. package/dist/src/ui/themes/theme.js.map +1 -1
  474. package/dist/src/ui/types.js +5 -5
  475. package/dist/src/ui/types.js.map +1 -1
  476. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  477. package/dist/src/ui/utils/ConsolePatcher.js.map +1 -1
  478. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  479. package/dist/src/ui/utils/TableRenderer.js.map +1 -1
  480. package/dist/src/ui/utils/antigravityUtils.js.map +1 -1
  481. package/dist/src/ui/utils/borderStyles.js.map +1 -1
  482. package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
  483. package/dist/src/ui/utils/commandUtils.js +2 -2
  484. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  485. package/dist/src/ui/utils/computeStats.js.map +1 -1
  486. package/dist/src/ui/utils/confirmingTool.js.map +1 -1
  487. package/dist/src/ui/utils/contextUsage.js.map +1 -1
  488. package/dist/src/ui/utils/directoryUtils.js.map +1 -1
  489. package/dist/src/ui/utils/displayUtils.js.map +1 -1
  490. package/dist/src/ui/utils/editorUtils.d.ts +1 -0
  491. package/dist/src/ui/utils/editorUtils.js.map +1 -1
  492. package/dist/src/ui/utils/formatters.d.ts +1 -1
  493. package/dist/src/ui/utils/formatters.js.map +1 -1
  494. package/dist/src/ui/utils/highlight.js.map +1 -1
  495. package/dist/src/ui/utils/historyExportUtils.js.map +1 -1
  496. package/dist/src/ui/utils/historyUtils.js +1 -1
  497. package/dist/src/ui/utils/historyUtils.js.map +1 -1
  498. package/dist/src/ui/utils/input.d.ts +2 -2
  499. package/dist/src/ui/utils/latexToUnicode.js.map +1 -1
  500. package/dist/src/ui/utils/markdownParsingUtils.js.map +1 -1
  501. package/dist/src/ui/utils/markdownUtilities.js.map +1 -1
  502. package/dist/src/ui/utils/mouse.js.map +1 -1
  503. package/dist/src/ui/utils/pendingAttentionNotification.js.map +1 -1
  504. package/dist/src/ui/utils/rewindFileOps.js.map +1 -1
  505. package/dist/src/ui/utils/terminalCapabilityManager.d.ts +1 -0
  506. package/dist/src/ui/utils/terminalCapabilityManager.js +2 -1
  507. package/dist/src/ui/utils/terminalCapabilityManager.js.map +1 -1
  508. package/dist/src/ui/utils/terminalSetup.js.map +1 -1
  509. package/dist/src/ui/utils/terminalUtils.js.map +1 -1
  510. package/dist/src/ui/utils/textOutput.d.ts +1 -0
  511. package/dist/src/ui/utils/textOutput.js.map +1 -1
  512. package/dist/src/ui/utils/textUtils.js.map +1 -1
  513. package/dist/src/ui/utils/toolLayoutUtils.js.map +1 -1
  514. package/dist/src/ui/utils/ui-sizing.js.map +1 -1
  515. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  516. package/dist/src/ui/utils/urlSecurityUtils.js.map +1 -1
  517. package/dist/src/utils/activityLogger.d.ts +1 -0
  518. package/dist/src/utils/activityLogger.js.map +1 -1
  519. package/dist/src/utils/agentUtils.js.map +1 -1
  520. package/dist/src/utils/autoMemory.js.map +1 -1
  521. package/dist/src/utils/cleanup.js.map +1 -1
  522. package/dist/src/utils/commands.js.map +1 -1
  523. package/dist/src/utils/commentJson.js.map +1 -1
  524. package/dist/src/utils/deepMerge.js.map +1 -1
  525. package/dist/src/utils/devtoolsService.js +1 -1
  526. package/dist/src/utils/devtoolsService.js.map +1 -1
  527. package/dist/src/utils/dialogScopeUtils.js.map +1 -1
  528. package/dist/src/utils/envVarResolver.js.map +1 -1
  529. package/dist/src/utils/errors.js.map +1 -1
  530. package/dist/src/utils/events.d.ts +1 -0
  531. package/dist/src/utils/events.js +2 -2
  532. package/dist/src/utils/events.js.map +1 -1
  533. package/dist/src/utils/featureToggleUtils.js.map +1 -1
  534. package/dist/src/utils/gitUtils.js +1 -1
  535. package/dist/src/utils/gitUtils.js.map +1 -1
  536. package/dist/src/utils/handleAutoUpdate.d.ts +1 -0
  537. package/dist/src/utils/handleAutoUpdate.js.map +1 -1
  538. package/dist/src/utils/hookSettings.js.map +1 -1
  539. package/dist/src/utils/hookUtils.js.map +1 -1
  540. package/dist/src/utils/installationInfo.js +2 -2
  541. package/dist/src/utils/installationInfo.js.map +1 -1
  542. package/dist/src/utils/jsonoutput.js.map +1 -1
  543. package/dist/src/utils/logCleanup.js.map +1 -1
  544. package/dist/src/utils/persistentState.js.map +1 -1
  545. package/dist/src/utils/processUtils.d.ts +1 -0
  546. package/dist/src/utils/processUtils.js.map +1 -1
  547. package/dist/src/utils/readStdin.js.map +1 -1
  548. package/dist/src/utils/relaunch.js.map +1 -1
  549. package/dist/src/utils/resize-observer-polyfill.d.ts +2 -0
  550. package/dist/src/utils/resize-observer-polyfill.js +7 -0
  551. package/dist/src/utils/resize-observer-polyfill.js.map +1 -0
  552. package/dist/src/utils/resolvePath.js.map +1 -1
  553. package/dist/src/utils/sandbox.js +1 -1
  554. package/dist/src/utils/sandbox.js.map +1 -1
  555. package/dist/src/utils/sandboxUtils.js.map +1 -1
  556. package/dist/src/utils/sessionCleanup.js +3 -3
  557. package/dist/src/utils/sessionCleanup.js.map +1 -1
  558. package/dist/src/utils/sessionUtils.d.ts +1 -1
  559. package/dist/src/utils/sessionUtils.js +1 -1
  560. package/dist/src/utils/sessionUtils.js.map +1 -1
  561. package/dist/src/utils/sessions.js.map +1 -1
  562. package/dist/src/utils/settingsUtils.js.map +1 -1
  563. package/dist/src/utils/skillUtils.js.map +1 -1
  564. package/dist/src/utils/spawnWrapper.d.ts +1 -0
  565. package/dist/src/utils/startupWarnings.js.map +1 -1
  566. package/dist/src/utils/terminalNotifications.js +1 -1
  567. package/dist/src/utils/terminalNotifications.js.map +1 -1
  568. package/dist/src/utils/terminalTheme.js.map +1 -1
  569. package/dist/src/utils/updateEventEmitter.d.ts +1 -0
  570. package/dist/src/utils/userStartupWarnings.js.map +1 -1
  571. package/dist/src/utils/windowTitle.js.map +1 -1
  572. package/dist/src/utils/worktreeSetup.js.map +1 -1
  573. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  574. package/dist/tsconfig.tsbuildinfo +1 -1
  575. package/package.json +17 -14
  576. package/dist/src/acp/acpCommandHandler.test.d.ts +0 -6
  577. package/dist/src/acp/acpCommandHandler.test.js +0 -28
  578. package/dist/src/acp/acpCommandHandler.test.js.map +0 -1
  579. package/dist/src/acp/acpErrors.test.d.ts +0 -6
  580. package/dist/src/acp/acpErrors.test.js +0 -38
  581. package/dist/src/acp/acpErrors.test.js.map +0 -1
  582. package/dist/src/acp/acpFileSystemService.test.d.ts +0 -6
  583. package/dist/src/acp/acpFileSystemService.test.js +0 -162
  584. package/dist/src/acp/acpFileSystemService.test.js.map +0 -1
  585. package/dist/src/acp/acpResume.test.d.ts +0 -6
  586. package/dist/src/acp/acpResume.test.js +0 -260
  587. package/dist/src/acp/acpResume.test.js.map +0 -1
  588. package/dist/src/acp/acpRpcDispatcher.test.d.ts +0 -6
  589. package/dist/src/acp/acpRpcDispatcher.test.js +0 -238
  590. package/dist/src/acp/acpRpcDispatcher.test.js.map +0 -1
  591. package/dist/src/acp/acpSession.test.d.ts +0 -6
  592. package/dist/src/acp/acpSession.test.js +0 -742
  593. package/dist/src/acp/acpSession.test.js.map +0 -1
  594. package/dist/src/acp/acpSessionManager.test.d.ts +0 -6
  595. package/dist/src/acp/acpSessionManager.test.js +0 -283
  596. package/dist/src/acp/acpSessionManager.test.js.map +0 -1
  597. package/dist/src/acp/commands/extensions.test.d.ts +0 -6
  598. package/dist/src/acp/commands/extensions.test.js +0 -70
  599. package/dist/src/acp/commands/extensions.test.js.map +0 -1
  600. package/dist/src/acp/commands/help.test.d.ts +0 -6
  601. package/dist/src/acp/commands/help.test.js +0 -40
  602. package/dist/src/acp/commands/help.test.js.map +0 -1
  603. package/dist/src/acp/commands/restore.test.d.ts +0 -6
  604. package/dist/src/acp/commands/restore.test.js +0 -173
  605. package/dist/src/acp/commands/restore.test.js.map +0 -1
  606. package/dist/src/commands/extensions/configure.test.d.ts +0 -1
  607. package/dist/src/commands/extensions/configure.test.js +0 -195
  608. package/dist/src/commands/extensions/configure.test.js.map +0 -1
  609. package/dist/src/commands/extensions/disable.test.d.ts +0 -6
  610. package/dist/src/commands/extensions/disable.test.js +0 -169
  611. package/dist/src/commands/extensions/disable.test.js.map +0 -1
  612. package/dist/src/commands/extensions/enable.test.d.ts +0 -6
  613. package/dist/src/commands/extensions/enable.test.js +0 -199
  614. package/dist/src/commands/extensions/enable.test.js.map +0 -1
  615. package/dist/src/commands/extensions/install.test.d.ts +0 -6
  616. package/dist/src/commands/extensions/install.test.js +0 -311
  617. package/dist/src/commands/extensions/install.test.js.map +0 -1
  618. package/dist/src/commands/extensions/link.test.d.ts +0 -6
  619. package/dist/src/commands/extensions/link.test.js +0 -121
  620. package/dist/src/commands/extensions/link.test.js.map +0 -1
  621. package/dist/src/commands/extensions/list.test.d.ts +0 -6
  622. package/dist/src/commands/extensions/list.test.js +0 -132
  623. package/dist/src/commands/extensions/list.test.js.map +0 -1
  624. package/dist/src/commands/extensions/new.test.d.ts +0 -6
  625. package/dist/src/commands/extensions/new.test.js +0 -62
  626. package/dist/src/commands/extensions/new.test.js.map +0 -1
  627. package/dist/src/commands/extensions/uninstall.test.d.ts +0 -6
  628. package/dist/src/commands/extensions/uninstall.test.js +0 -240
  629. package/dist/src/commands/extensions/uninstall.test.js.map +0 -1
  630. package/dist/src/commands/extensions/update.test.d.ts +0 -6
  631. package/dist/src/commands/extensions/update.test.js +0 -196
  632. package/dist/src/commands/extensions/update.test.js.map +0 -1
  633. package/dist/src/commands/extensions/validate.test.d.ts +0 -6
  634. package/dist/src/commands/extensions/validate.test.js +0 -96
  635. package/dist/src/commands/extensions/validate.test.js.map +0 -1
  636. package/dist/src/commands/extensions.test.d.ts +0 -6
  637. package/dist/src/commands/extensions.test.js +0 -67
  638. package/dist/src/commands/extensions.test.js.map +0 -1
  639. package/dist/src/commands/gemma/logs.test.d.ts +0 -6
  640. package/dist/src/commands/gemma/logs.test.js +0 -122
  641. package/dist/src/commands/gemma/logs.test.js.map +0 -1
  642. package/dist/src/commands/gemma/platform.test.d.ts +0 -6
  643. package/dist/src/commands/gemma/platform.test.js +0 -108
  644. package/dist/src/commands/gemma/platform.test.js.map +0 -1
  645. package/dist/src/commands/gemma/setup.test.d.ts +0 -6
  646. package/dist/src/commands/gemma/setup.test.js +0 -36
  647. package/dist/src/commands/gemma/setup.test.js.map +0 -1
  648. package/dist/src/commands/gemma/stop.test.d.ts +0 -6
  649. package/dist/src/commands/gemma/stop.test.js +0 -89
  650. package/dist/src/commands/gemma/stop.test.js.map +0 -1
  651. package/dist/src/commands/hooks/migrate.test.d.ts +0 -6
  652. package/dist/src/commands/hooks/migrate.test.js +0 -388
  653. package/dist/src/commands/hooks/migrate.test.js.map +0 -1
  654. package/dist/src/commands/mcp/add.test.d.ts +0 -6
  655. package/dist/src/commands/mcp/add.test.js +0 -274
  656. package/dist/src/commands/mcp/add.test.js.map +0 -1
  657. package/dist/src/commands/mcp/list.test.d.ts +0 -6
  658. package/dist/src/commands/mcp/list.test.js +0 -477
  659. package/dist/src/commands/mcp/list.test.js.map +0 -1
  660. package/dist/src/commands/mcp/remove.test.d.ts +0 -6
  661. package/dist/src/commands/mcp/remove.test.js +0 -206
  662. package/dist/src/commands/mcp/remove.test.js.map +0 -1
  663. package/dist/src/commands/mcp.test.d.ts +0 -6
  664. package/dist/src/commands/mcp.test.js +0 -64
  665. package/dist/src/commands/mcp.test.js.map +0 -1
  666. package/dist/src/commands/skills/disable.test.d.ts +0 -6
  667. package/dist/src/commands/skills/disable.test.js +0 -93
  668. package/dist/src/commands/skills/disable.test.js.map +0 -1
  669. package/dist/src/commands/skills/enable.test.d.ts +0 -6
  670. package/dist/src/commands/skills/enable.test.js +0 -104
  671. package/dist/src/commands/skills/enable.test.js.map +0 -1
  672. package/dist/src/commands/skills/install.test.d.ts +0 -6
  673. package/dist/src/commands/skills/install.test.js +0 -99
  674. package/dist/src/commands/skills/install.test.js.map +0 -1
  675. package/dist/src/commands/skills/link.test.d.ts +0 -6
  676. package/dist/src/commands/skills/link.test.js +0 -53
  677. package/dist/src/commands/skills/link.test.js.map +0 -1
  678. package/dist/src/commands/skills/list.test.d.ts +0 -6
  679. package/dist/src/commands/skills/list.test.js +0 -127
  680. package/dist/src/commands/skills/list.test.js.map +0 -1
  681. package/dist/src/commands/skills/uninstall.test.d.ts +0 -6
  682. package/dist/src/commands/skills/uninstall.test.js +0 -65
  683. package/dist/src/commands/skills/uninstall.test.js.map +0 -1
  684. package/dist/src/commands/skills.test.d.ts +0 -6
  685. package/dist/src/commands/skills.test.js +0 -49
  686. package/dist/src/commands/skills.test.js.map +0 -1
  687. package/dist/src/commands/utils.test.d.ts +0 -6
  688. package/dist/src/commands/utils.test.js +0 -35
  689. package/dist/src/commands/utils.test.js.map +0 -1
  690. package/dist/src/config/auth.test.d.ts +0 -6
  691. package/dist/src/config/auth.test.js +0 -96
  692. package/dist/src/config/auth.test.js.map +0 -1
  693. package/dist/src/config/config.integration.test.d.ts +0 -6
  694. package/dist/src/config/config.integration.test.js +0 -205
  695. package/dist/src/config/config.integration.test.js.map +0 -1
  696. package/dist/src/config/config.test.d.ts +0 -6
  697. package/dist/src/config/config.test.js +0 -3124
  698. package/dist/src/config/config.test.js.map +0 -1
  699. package/dist/src/config/extension-manager-agents.test.d.ts +0 -6
  700. package/dist/src/config/extension-manager-agents.test.js +0 -116
  701. package/dist/src/config/extension-manager-agents.test.js.map +0 -1
  702. package/dist/src/config/extension-manager-hydration.test.d.ts +0 -6
  703. package/dist/src/config/extension-manager-hydration.test.js +0 -262
  704. package/dist/src/config/extension-manager-hydration.test.js.map +0 -1
  705. package/dist/src/config/extension-manager-permissions.test.d.ts +0 -6
  706. package/dist/src/config/extension-manager-permissions.test.js +0 -107
  707. package/dist/src/config/extension-manager-permissions.test.js.map +0 -1
  708. package/dist/src/config/extension-manager-scope.test.d.ts +0 -6
  709. package/dist/src/config/extension-manager-scope.test.js +0 -158
  710. package/dist/src/config/extension-manager-scope.test.js.map +0 -1
  711. package/dist/src/config/extension-manager-skills.test.d.ts +0 -6
  712. package/dist/src/config/extension-manager-skills.test.js +0 -157
  713. package/dist/src/config/extension-manager-skills.test.js.map +0 -1
  714. package/dist/src/config/extension-manager.test.d.ts +0 -6
  715. package/dist/src/config/extension-manager.test.js +0 -430
  716. package/dist/src/config/extension-manager.test.js.map +0 -1
  717. package/dist/src/config/extension.test.d.ts +0 -6
  718. package/dist/src/config/extension.test.js +0 -1800
  719. package/dist/src/config/extension.test.js.map +0 -1
  720. package/dist/src/config/extensionRegistryClient.test.d.ts +0 -6
  721. package/dist/src/config/extensionRegistryClient.test.js +0 -261
  722. package/dist/src/config/extensionRegistryClient.test.js.map +0 -1
  723. package/dist/src/config/extensions/consent.test.d.ts +0 -6
  724. package/dist/src/config/extensions/consent.test.js +0 -302
  725. package/dist/src/config/extensions/consent.test.js.map +0 -1
  726. package/dist/src/config/extensions/extensionEnablement.test.d.ts +0 -6
  727. package/dist/src/config/extensions/extensionEnablement.test.js +0 -404
  728. package/dist/src/config/extensions/extensionEnablement.test.js.map +0 -1
  729. package/dist/src/config/extensions/extensionSettings.test.d.ts +0 -6
  730. package/dist/src/config/extensions/extensionSettings.test.js +0 -575
  731. package/dist/src/config/extensions/extensionSettings.test.js.map +0 -1
  732. package/dist/src/config/extensions/extensionUpdates.test.d.ts +0 -6
  733. package/dist/src/config/extensions/extensionUpdates.test.js +0 -265
  734. package/dist/src/config/extensions/extensionUpdates.test.js.map +0 -1
  735. package/dist/src/config/extensions/github.test.d.ts +0 -6
  736. package/dist/src/config/extensions/github.test.js +0 -454
  737. package/dist/src/config/extensions/github.test.js.map +0 -1
  738. package/dist/src/config/extensions/github_fetch.test.d.ts +0 -6
  739. package/dist/src/config/extensions/github_fetch.test.js +0 -171
  740. package/dist/src/config/extensions/github_fetch.test.js.map +0 -1
  741. package/dist/src/config/extensions/storage.test.d.ts +0 -6
  742. package/dist/src/config/extensions/storage.test.js +0 -64
  743. package/dist/src/config/extensions/storage.test.js.map +0 -1
  744. package/dist/src/config/extensions/update.test.d.ts +0 -6
  745. package/dist/src/config/extensions/update.test.js +0 -296
  746. package/dist/src/config/extensions/update.test.js.map +0 -1
  747. package/dist/src/config/extensions/variables.test.d.ts +0 -6
  748. package/dist/src/config/extensions/variables.test.js +0 -119
  749. package/dist/src/config/extensions/variables.test.js.map +0 -1
  750. package/dist/src/config/footerItems.test.d.ts +0 -6
  751. package/dist/src/config/footerItems.test.js +0 -180
  752. package/dist/src/config/footerItems.test.js.map +0 -1
  753. package/dist/src/config/mcp/mcpServerEnablement.test.d.ts +0 -6
  754. package/dist/src/config/mcp/mcpServerEnablement.test.js +0 -148
  755. package/dist/src/config/mcp/mcpServerEnablement.test.js.map +0 -1
  756. package/dist/src/config/mutual-exclusivity.test.d.ts +0 -6
  757. package/dist/src/config/mutual-exclusivity.test.js +0 -33
  758. package/dist/src/config/mutual-exclusivity.test.js.map +0 -1
  759. package/dist/src/config/policy-engine.integration.test.d.ts +0 -6
  760. package/dist/src/config/policy-engine.integration.test.js +0 -394
  761. package/dist/src/config/policy-engine.integration.test.js.map +0 -1
  762. package/dist/src/config/policy.test.d.ts +0 -6
  763. package/dist/src/config/policy.test.js +0 -199
  764. package/dist/src/config/policy.test.js.map +0 -1
  765. package/dist/src/config/sandboxConfig.test.d.ts +0 -6
  766. package/dist/src/config/sandboxConfig.test.js +0 -401
  767. package/dist/src/config/sandboxConfig.test.js.map +0 -1
  768. package/dist/src/config/settingPaths.test.d.ts +0 -6
  769. package/dist/src/config/settingPaths.test.js +0 -22
  770. package/dist/src/config/settingPaths.test.js.map +0 -1
  771. package/dist/src/config/settings-env-isolation.test.d.ts +0 -6
  772. package/dist/src/config/settings-env-isolation.test.js +0 -188
  773. package/dist/src/config/settings-env-isolation.test.js.map +0 -1
  774. package/dist/src/config/settings-validation.test.d.ts +0 -6
  775. package/dist/src/config/settings-validation.test.js +0 -464
  776. package/dist/src/config/settings-validation.test.js.map +0 -1
  777. package/dist/src/config/settings.test.d.ts +0 -6
  778. package/dist/src/config/settings.test.js +0 -2660
  779. package/dist/src/config/settings.test.js.map +0 -1
  780. package/dist/src/config/settingsSchema.test.d.ts +0 -6
  781. package/dist/src/config/settingsSchema.test.js +0 -450
  782. package/dist/src/config/settingsSchema.test.js.map +0 -1
  783. package/dist/src/config/settings_repro.test.d.ts +0 -6
  784. package/dist/src/config/settings_repro.test.js +0 -163
  785. package/dist/src/config/settings_repro.test.js.map +0 -1
  786. package/dist/src/config/settings_validation_warning.test.d.ts +0 -6
  787. package/dist/src/config/settings_validation_warning.test.js +0 -124
  788. package/dist/src/config/settings_validation_warning.test.js.map +0 -1
  789. package/dist/src/config/skipExtensions.test.d.ts +0 -6
  790. package/dist/src/config/skipExtensions.test.js +0 -49
  791. package/dist/src/config/skipExtensions.test.js.map +0 -1
  792. package/dist/src/config/trustedFolders.test.d.ts +0 -6
  793. package/dist/src/config/trustedFolders.test.js +0 -411
  794. package/dist/src/config/trustedFolders.test.js.map +0 -1
  795. package/dist/src/config/workspace-policy-cli.test.d.ts +0 -6
  796. package/dist/src/config/workspace-policy-cli.test.js +0 -204
  797. package/dist/src/config/workspace-policy-cli.test.js.map +0 -1
  798. package/dist/src/core/auth.test.d.ts +0 -6
  799. package/dist/src/core/auth.test.js +0 -93
  800. package/dist/src/core/auth.test.js.map +0 -1
  801. package/dist/src/core/initializer.test.d.ts +0 -6
  802. package/dist/src/core/initializer.test.js +0 -111
  803. package/dist/src/core/initializer.test.js.map +0 -1
  804. package/dist/src/core/theme.test.d.ts +0 -6
  805. package/dist/src/core/theme.test.js +0 -46
  806. package/dist/src/core/theme.test.js.map +0 -1
  807. package/dist/src/deferred.test.d.ts +0 -6
  808. package/dist/src/deferred.test.js +0 -180
  809. package/dist/src/deferred.test.js.map +0 -1
  810. package/dist/src/gemini.test.d.ts +0 -6
  811. package/dist/src/gemini.test.js +0 -1432
  812. package/dist/src/gemini.test.js.map +0 -1
  813. package/dist/src/gemini_cleanup.test.d.ts +0 -6
  814. package/dist/src/gemini_cleanup.test.js +0 -391
  815. package/dist/src/gemini_cleanup.test.js.map +0 -1
  816. package/dist/src/integration-tests/modelSteering.test.d.ts +0 -6
  817. package/dist/src/integration-tests/modelSteering.test.js +0 -62
  818. package/dist/src/integration-tests/modelSteering.test.js.map +0 -1
  819. package/dist/src/nonInteractiveCli.test.d.ts +0 -6
  820. package/dist/src/nonInteractiveCli.test.js +0 -1921
  821. package/dist/src/nonInteractiveCli.test.js.map +0 -1
  822. package/dist/src/nonInteractiveCliAgentSession.test.d.ts +0 -6
  823. package/dist/src/nonInteractiveCliAgentSession.test.js +0 -2015
  824. package/dist/src/nonInteractiveCliAgentSession.test.js.map +0 -1
  825. package/dist/src/output-redirection.test.d.ts +0 -6
  826. package/dist/src/output-redirection.test.js +0 -77
  827. package/dist/src/output-redirection.test.js.map +0 -1
  828. package/dist/src/services/BuiltinCommandLoader.test.d.ts +0 -6
  829. package/dist/src/services/BuiltinCommandLoader.test.js +0 -369
  830. package/dist/src/services/BuiltinCommandLoader.test.js.map +0 -1
  831. package/dist/src/services/CommandService.test.d.ts +0 -6
  832. package/dist/src/services/CommandService.test.js +0 -74
  833. package/dist/src/services/CommandService.test.js.map +0 -1
  834. package/dist/src/services/FileCommandLoader.test.d.ts +0 -6
  835. package/dist/src/services/FileCommandLoader.test.js +0 -1128
  836. package/dist/src/services/FileCommandLoader.test.js.map +0 -1
  837. package/dist/src/services/McpPromptLoader.test.d.ts +0 -6
  838. package/dist/src/services/McpPromptLoader.test.js +0 -411
  839. package/dist/src/services/McpPromptLoader.test.js.map +0 -1
  840. package/dist/src/services/SkillCommandLoader.test.d.ts +0 -6
  841. package/dist/src/services/SkillCommandLoader.test.js +0 -113
  842. package/dist/src/services/SkillCommandLoader.test.js.map +0 -1
  843. package/dist/src/services/SlashCommandConflictHandler.test.d.ts +0 -6
  844. package/dist/src/services/SlashCommandConflictHandler.test.js +0 -144
  845. package/dist/src/services/SlashCommandConflictHandler.test.js.map +0 -1
  846. package/dist/src/services/SlashCommandResolver.test.d.ts +0 -6
  847. package/dist/src/services/SlashCommandResolver.test.js +0 -186
  848. package/dist/src/services/SlashCommandResolver.test.js.map +0 -1
  849. package/dist/src/services/liteRtServerManager.test.d.ts +0 -6
  850. package/dist/src/services/liteRtServerManager.test.js +0 -54
  851. package/dist/src/services/liteRtServerManager.test.js.map +0 -1
  852. package/dist/src/services/prompt-processors/argumentProcessor.test.d.ts +0 -6
  853. package/dist/src/services/prompt-processors/argumentProcessor.test.js +0 -40
  854. package/dist/src/services/prompt-processors/argumentProcessor.test.js.map +0 -1
  855. package/dist/src/services/prompt-processors/atFileProcessor.test.d.ts +0 -6
  856. package/dist/src/services/prompt-processors/atFileProcessor.test.js +0 -177
  857. package/dist/src/services/prompt-processors/atFileProcessor.test.js.map +0 -1
  858. package/dist/src/services/prompt-processors/injectionParser.test.d.ts +0 -6
  859. package/dist/src/services/prompt-processors/injectionParser.test.js +0 -189
  860. package/dist/src/services/prompt-processors/injectionParser.test.js.map +0 -1
  861. package/dist/src/services/prompt-processors/shellProcessor.test.d.ts +0 -6
  862. package/dist/src/services/prompt-processors/shellProcessor.test.js +0 -525
  863. package/dist/src/services/prompt-processors/shellProcessor.test.js.map +0 -1
  864. package/dist/src/test-utils/AppRig.test.d.ts +0 -6
  865. package/dist/src/test-utils/AppRig.test.js +0 -60
  866. package/dist/src/test-utils/AppRig.test.js.map +0 -1
  867. package/dist/src/test-utils/mockCommandContext.test.d.ts +0 -6
  868. package/dist/src/test-utils/mockCommandContext.test.js +0 -51
  869. package/dist/src/test-utils/mockCommandContext.test.js.map +0 -1
  870. package/dist/src/test-utils/render.test.d.ts +0 -6
  871. package/dist/src/test-utils/render.test.js +0 -84
  872. package/dist/src/test-utils/render.test.js.map +0 -1
  873. package/dist/src/ui/App.test.d.ts +0 -6
  874. package/dist/src/ui/App.test.js +0 -244
  875. package/dist/src/ui/App.test.js.map +0 -1
  876. package/dist/src/ui/AppContainer.test.d.ts +0 -6
  877. package/dist/src/ui/AppContainer.test.js +0 -2824
  878. package/dist/src/ui/AppContainer.test.js.map +0 -1
  879. package/dist/src/ui/IdeIntegrationNudge.test.d.ts +0 -6
  880. package/dist/src/ui/IdeIntegrationNudge.test.js +0 -149
  881. package/dist/src/ui/IdeIntegrationNudge.test.js.map +0 -1
  882. package/dist/src/ui/ToolConfirmationFullFrame.test.d.ts +0 -1
  883. package/dist/src/ui/ToolConfirmationFullFrame.test.js +0 -153
  884. package/dist/src/ui/ToolConfirmationFullFrame.test.js.map +0 -1
  885. package/dist/src/ui/auth/ApiAuthDialog.test.d.ts +0 -6
  886. package/dist/src/ui/auth/ApiAuthDialog.test.js +0 -127
  887. package/dist/src/ui/auth/ApiAuthDialog.test.js.map +0 -1
  888. package/dist/src/ui/auth/AuthDialog.test.d.ts +0 -6
  889. package/dist/src/ui/auth/AuthDialog.test.js +0 -350
  890. package/dist/src/ui/auth/AuthDialog.test.js.map +0 -1
  891. package/dist/src/ui/auth/AuthInProgress.test.d.ts +0 -6
  892. package/dist/src/ui/auth/AuthInProgress.test.js +0 -99
  893. package/dist/src/ui/auth/AuthInProgress.test.js.map +0 -1
  894. package/dist/src/ui/auth/BannedAccountDialog.test.d.ts +0 -6
  895. package/dist/src/ui/auth/BannedAccountDialog.test.js +0 -141
  896. package/dist/src/ui/auth/BannedAccountDialog.test.js.map +0 -1
  897. package/dist/src/ui/auth/LoginRestartDialog.test.d.ts +0 -6
  898. package/dist/src/ui/auth/LoginRestartDialog.test.js +0 -79
  899. package/dist/src/ui/auth/LoginRestartDialog.test.js.map +0 -1
  900. package/dist/src/ui/auth/useAuth.test.d.ts +0 -6
  901. package/dist/src/ui/auth/useAuth.test.js +0 -214
  902. package/dist/src/ui/auth/useAuth.test.js.map +0 -1
  903. package/dist/src/ui/commands/aboutCommand.test.d.ts +0 -6
  904. package/dist/src/ui/commands/aboutCommand.test.js +0 -145
  905. package/dist/src/ui/commands/aboutCommand.test.js.map +0 -1
  906. package/dist/src/ui/commands/agentsCommand.test.d.ts +0 -6
  907. package/dist/src/ui/commands/agentsCommand.test.js +0 -382
  908. package/dist/src/ui/commands/agentsCommand.test.js.map +0 -1
  909. package/dist/src/ui/commands/authCommand.test.d.ts +0 -6
  910. package/dist/src/ui/commands/authCommand.test.js +0 -103
  911. package/dist/src/ui/commands/authCommand.test.js.map +0 -1
  912. package/dist/src/ui/commands/bugCommand.test.d.ts +0 -6
  913. package/dist/src/ui/commands/bugCommand.test.js +0 -305
  914. package/dist/src/ui/commands/bugCommand.test.js.map +0 -1
  915. package/dist/src/ui/commands/bugMemoryCommand.test.d.ts +0 -6
  916. package/dist/src/ui/commands/bugMemoryCommand.test.js +0 -100
  917. package/dist/src/ui/commands/bugMemoryCommand.test.js.map +0 -1
  918. package/dist/src/ui/commands/chatCommand.test.d.ts +0 -6
  919. package/dist/src/ui/commands/chatCommand.test.js +0 -627
  920. package/dist/src/ui/commands/chatCommand.test.js.map +0 -1
  921. package/dist/src/ui/commands/clearCommand.test.d.ts +0 -6
  922. package/dist/src/ui/commands/clearCommand.test.js +0 -98
  923. package/dist/src/ui/commands/clearCommand.test.js.map +0 -1
  924. package/dist/src/ui/commands/commandsCommand.test.d.ts +0 -6
  925. package/dist/src/ui/commands/commandsCommand.test.js +0 -115
  926. package/dist/src/ui/commands/commandsCommand.test.js.map +0 -1
  927. package/dist/src/ui/commands/compressCommand.test.d.ts +0 -6
  928. package/dist/src/ui/commands/compressCommand.test.js +0 -110
  929. package/dist/src/ui/commands/compressCommand.test.js.map +0 -1
  930. package/dist/src/ui/commands/copyCommand.test.d.ts +0 -6
  931. package/dist/src/ui/commands/copyCommand.test.js +0 -244
  932. package/dist/src/ui/commands/copyCommand.test.js.map +0 -1
  933. package/dist/src/ui/commands/corgiCommand.test.d.ts +0 -6
  934. package/dist/src/ui/commands/corgiCommand.test.js +0 -28
  935. package/dist/src/ui/commands/corgiCommand.test.js.map +0 -1
  936. package/dist/src/ui/commands/directoryCommand.test.d.ts +0 -6
  937. package/dist/src/ui/commands/directoryCommand.test.js +0 -365
  938. package/dist/src/ui/commands/directoryCommand.test.js.map +0 -1
  939. package/dist/src/ui/commands/docsCommand.test.d.ts +0 -6
  940. package/dist/src/ui/commands/docsCommand.test.js +0 -72
  941. package/dist/src/ui/commands/docsCommand.test.js.map +0 -1
  942. package/dist/src/ui/commands/editorCommand.test.d.ts +0 -6
  943. package/dist/src/ui/commands/editorCommand.test.js +0 -27
  944. package/dist/src/ui/commands/editorCommand.test.js.map +0 -1
  945. package/dist/src/ui/commands/exportSessionCommand.test.d.ts +0 -6
  946. package/dist/src/ui/commands/exportSessionCommand.test.js +0 -100
  947. package/dist/src/ui/commands/exportSessionCommand.test.js.map +0 -1
  948. package/dist/src/ui/commands/extensionsCommand.test.d.ts +0 -6
  949. package/dist/src/ui/commands/extensionsCommand.test.js +0 -947
  950. package/dist/src/ui/commands/extensionsCommand.test.js.map +0 -1
  951. package/dist/src/ui/commands/helpCommand.test.d.ts +0 -6
  952. package/dist/src/ui/commands/helpCommand.test.js +0 -94
  953. package/dist/src/ui/commands/helpCommand.test.js.map +0 -1
  954. package/dist/src/ui/commands/hooksCommand.test.d.ts +0 -6
  955. package/dist/src/ui/commands/hooksCommand.test.js +0 -562
  956. package/dist/src/ui/commands/hooksCommand.test.js.map +0 -1
  957. package/dist/src/ui/commands/ideCommand.test.d.ts +0 -6
  958. package/dist/src/ui/commands/ideCommand.test.js +0 -205
  959. package/dist/src/ui/commands/ideCommand.test.js.map +0 -1
  960. package/dist/src/ui/commands/initCommand.test.d.ts +0 -6
  961. package/dist/src/ui/commands/initCommand.test.js +0 -86
  962. package/dist/src/ui/commands/initCommand.test.js.map +0 -1
  963. package/dist/src/ui/commands/mcpCommand.test.d.ts +0 -6
  964. package/dist/src/ui/commands/mcpCommand.test.js +0 -231
  965. package/dist/src/ui/commands/mcpCommand.test.js.map +0 -1
  966. package/dist/src/ui/commands/memoryCommand.test.d.ts +0 -6
  967. package/dist/src/ui/commands/memoryCommand.test.js +0 -361
  968. package/dist/src/ui/commands/memoryCommand.test.js.map +0 -1
  969. package/dist/src/ui/commands/modelCommand.test.d.ts +0 -6
  970. package/dist/src/ui/commands/modelCommand.test.js +0 -135
  971. package/dist/src/ui/commands/modelCommand.test.js.map +0 -1
  972. package/dist/src/ui/commands/permissionsCommand.test.d.ts +0 -6
  973. package/dist/src/ui/commands/permissionsCommand.test.js +0 -86
  974. package/dist/src/ui/commands/permissionsCommand.test.js.map +0 -1
  975. package/dist/src/ui/commands/planCommand.test.d.ts +0 -6
  976. package/dist/src/ui/commands/planCommand.test.js +0 -146
  977. package/dist/src/ui/commands/planCommand.test.js.map +0 -1
  978. package/dist/src/ui/commands/policiesCommand.test.d.ts +0 -6
  979. package/dist/src/ui/commands/policiesCommand.test.js +0 -133
  980. package/dist/src/ui/commands/policiesCommand.test.js.map +0 -1
  981. package/dist/src/ui/commands/privacyCommand.test.d.ts +0 -6
  982. package/dist/src/ui/commands/privacyCommand.test.js +0 -32
  983. package/dist/src/ui/commands/privacyCommand.test.js.map +0 -1
  984. package/dist/src/ui/commands/quitCommand.test.d.ts +0 -6
  985. package/dist/src/ui/commands/quitCommand.test.js +0 -95
  986. package/dist/src/ui/commands/quitCommand.test.js.map +0 -1
  987. package/dist/src/ui/commands/restoreCommand.test.d.ts +0 -6
  988. package/dist/src/ui/commands/restoreCommand.test.js +0 -193
  989. package/dist/src/ui/commands/restoreCommand.test.js.map +0 -1
  990. package/dist/src/ui/commands/resumeCommand.test.d.ts +0 -6
  991. package/dist/src/ui/commands/resumeCommand.test.js +0 -28
  992. package/dist/src/ui/commands/resumeCommand.test.js.map +0 -1
  993. package/dist/src/ui/commands/rewindCommand.test.d.ts +0 -6
  994. package/dist/src/ui/commands/rewindCommand.test.js +0 -256
  995. package/dist/src/ui/commands/rewindCommand.test.js.map +0 -1
  996. package/dist/src/ui/commands/settingsCommand.test.d.ts +0 -6
  997. package/dist/src/ui/commands/settingsCommand.test.js +0 -30
  998. package/dist/src/ui/commands/settingsCommand.test.js.map +0 -1
  999. package/dist/src/ui/commands/setupGithubCommand.test.d.ts +0 -6
  1000. package/dist/src/ui/commands/setupGithubCommand.test.js +0 -238
  1001. package/dist/src/ui/commands/setupGithubCommand.test.js.map +0 -1
  1002. package/dist/src/ui/commands/skillsCommand.test.d.ts +0 -6
  1003. package/dist/src/ui/commands/skillsCommand.test.js +0 -500
  1004. package/dist/src/ui/commands/skillsCommand.test.js.map +0 -1
  1005. package/dist/src/ui/commands/statsCommand.test.d.ts +0 -6
  1006. package/dist/src/ui/commands/statsCommand.test.js +0 -122
  1007. package/dist/src/ui/commands/statsCommand.test.js.map +0 -1
  1008. package/dist/src/ui/commands/tasksCommand.test.d.ts +0 -6
  1009. package/dist/src/ui/commands/tasksCommand.test.js +0 -30
  1010. package/dist/src/ui/commands/tasksCommand.test.js.map +0 -1
  1011. package/dist/src/ui/commands/terminalSetupCommand.test.d.ts +0 -6
  1012. package/dist/src/ui/commands/terminalSetupCommand.test.js +0 -66
  1013. package/dist/src/ui/commands/terminalSetupCommand.test.js.map +0 -1
  1014. package/dist/src/ui/commands/themeCommand.test.d.ts +0 -6
  1015. package/dist/src/ui/commands/themeCommand.test.js +0 -32
  1016. package/dist/src/ui/commands/themeCommand.test.js.map +0 -1
  1017. package/dist/src/ui/commands/toolsCommand.test.d.ts +0 -6
  1018. package/dist/src/ui/commands/toolsCommand.test.js +0 -187
  1019. package/dist/src/ui/commands/toolsCommand.test.js.map +0 -1
  1020. package/dist/src/ui/commands/upgradeCommand.test.d.ts +0 -6
  1021. package/dist/src/ui/commands/upgradeCommand.test.js +0 -102
  1022. package/dist/src/ui/commands/upgradeCommand.test.js.map +0 -1
  1023. package/dist/src/ui/components/AboutBox.test.d.ts +0 -6
  1024. package/dist/src/ui/components/AboutBox.test.js +0 -63
  1025. package/dist/src/ui/components/AboutBox.test.js.map +0 -1
  1026. package/dist/src/ui/components/AdminSettingsChangedDialog.test.d.ts +0 -6
  1027. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js +0 -43
  1028. package/dist/src/ui/components/AdminSettingsChangedDialog.test.js.map +0 -1
  1029. package/dist/src/ui/components/AgentConfigDialog.test.d.ts +0 -6
  1030. package/dist/src/ui/components/AgentConfigDialog.test.js +0 -267
  1031. package/dist/src/ui/components/AgentConfigDialog.test.js.map +0 -1
  1032. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.d.ts +0 -6
  1033. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js +0 -196
  1034. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js.map +0 -1
  1035. package/dist/src/ui/components/AnsiOutput.test.d.ts +0 -6
  1036. package/dist/src/ui/components/AnsiOutput.test.js +0 -142
  1037. package/dist/src/ui/components/AnsiOutput.test.js.map +0 -1
  1038. package/dist/src/ui/components/AppHeader.test.d.ts +0 -6
  1039. package/dist/src/ui/components/AppHeader.test.js +0 -212
  1040. package/dist/src/ui/components/AppHeader.test.js.map +0 -1
  1041. package/dist/src/ui/components/AppHeaderIcon.test.d.ts +0 -6
  1042. package/dist/src/ui/components/AppHeaderIcon.test.js +0 -39
  1043. package/dist/src/ui/components/AppHeaderIcon.test.js.map +0 -1
  1044. package/dist/src/ui/components/ApprovalModeIndicator.test.d.ts +0 -6
  1045. package/dist/src/ui/components/ApprovalModeIndicator.test.js +0 -37
  1046. package/dist/src/ui/components/ApprovalModeIndicator.test.js.map +0 -1
  1047. package/dist/src/ui/components/AskUserDialog.test.d.ts +0 -6
  1048. package/dist/src/ui/components/AskUserDialog.test.js +0 -1121
  1049. package/dist/src/ui/components/AskUserDialog.test.js.map +0 -1
  1050. package/dist/src/ui/components/BackgroundTaskDisplay.test.d.ts +0 -6
  1051. package/dist/src/ui/components/BackgroundTaskDisplay.test.js +0 -209
  1052. package/dist/src/ui/components/BackgroundTaskDisplay.test.js.map +0 -1
  1053. package/dist/src/ui/components/Banner.test.d.ts +0 -6
  1054. package/dist/src/ui/components/Banner.test.js +0 -29
  1055. package/dist/src/ui/components/Banner.test.js.map +0 -1
  1056. package/dist/src/ui/components/BubblingRegression.test.d.ts +0 -6
  1057. package/dist/src/ui/components/BubblingRegression.test.js +0 -60
  1058. package/dist/src/ui/components/BubblingRegression.test.js.map +0 -1
  1059. package/dist/src/ui/components/Checklist.test.d.ts +0 -6
  1060. package/dist/src/ui/components/Checklist.test.js +0 -46
  1061. package/dist/src/ui/components/Checklist.test.js.map +0 -1
  1062. package/dist/src/ui/components/ChecklistItem.test.d.ts +0 -6
  1063. package/dist/src/ui/components/ChecklistItem.test.js +0 -40
  1064. package/dist/src/ui/components/ChecklistItem.test.js.map +0 -1
  1065. package/dist/src/ui/components/CliSpinner.test.d.ts +0 -6
  1066. package/dist/src/ui/components/CliSpinner.test.js +0 -32
  1067. package/dist/src/ui/components/CliSpinner.test.js.map +0 -1
  1068. package/dist/src/ui/components/ColorsDisplay.test.d.ts +0 -6
  1069. package/dist/src/ui/components/ColorsDisplay.test.js +0 -107
  1070. package/dist/src/ui/components/ColorsDisplay.test.js.map +0 -1
  1071. package/dist/src/ui/components/Composer.test.d.ts +0 -6
  1072. package/dist/src/ui/components/Composer.test.js +0 -853
  1073. package/dist/src/ui/components/Composer.test.js.map +0 -1
  1074. package/dist/src/ui/components/ConfigInitDisplay.test.d.ts +0 -6
  1075. package/dist/src/ui/components/ConfigInitDisplay.test.js +0 -118
  1076. package/dist/src/ui/components/ConfigInitDisplay.test.js.map +0 -1
  1077. package/dist/src/ui/components/ConsentPrompt.test.d.ts +0 -6
  1078. package/dist/src/ui/components/ConsentPrompt.test.js +0 -80
  1079. package/dist/src/ui/components/ConsentPrompt.test.js.map +0 -1
  1080. package/dist/src/ui/components/ConsoleSummaryDisplay.test.d.ts +0 -6
  1081. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js +0 -28
  1082. package/dist/src/ui/components/ConsoleSummaryDisplay.test.js.map +0 -1
  1083. package/dist/src/ui/components/ContextSummaryDisplay.test.d.ts +0 -6
  1084. package/dist/src/ui/components/ContextSummaryDisplay.test.js +0 -81
  1085. package/dist/src/ui/components/ContextSummaryDisplay.test.js.map +0 -1
  1086. package/dist/src/ui/components/ContextUsageDisplay.test.d.ts +0 -6
  1087. package/dist/src/ui/components/ContextUsageDisplay.test.js +0 -50
  1088. package/dist/src/ui/components/ContextUsageDisplay.test.js.map +0 -1
  1089. package/dist/src/ui/components/CopyModeWarning.test.d.ts +0 -6
  1090. package/dist/src/ui/components/CopyModeWarning.test.js +0 -35
  1091. package/dist/src/ui/components/CopyModeWarning.test.js.map +0 -1
  1092. package/dist/src/ui/components/DebugProfiler.test.d.ts +0 -6
  1093. package/dist/src/ui/components/DebugProfiler.test.js +0 -228
  1094. package/dist/src/ui/components/DebugProfiler.test.js.map +0 -1
  1095. package/dist/src/ui/components/DetailedMessagesDisplay.test.d.ts +0 -6
  1096. package/dist/src/ui/components/DetailedMessagesDisplay.test.js +0 -81
  1097. package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +0 -1
  1098. package/dist/src/ui/components/DialogManager.test.d.ts +0 -6
  1099. package/dist/src/ui/components/DialogManager.test.js +0 -187
  1100. package/dist/src/ui/components/DialogManager.test.js.map +0 -1
  1101. package/dist/src/ui/components/EditorSettingsDialog.test.d.ts +0 -6
  1102. package/dist/src/ui/components/EditorSettingsDialog.test.js +0 -145
  1103. package/dist/src/ui/components/EditorSettingsDialog.test.js.map +0 -1
  1104. package/dist/src/ui/components/EmptyWalletDialog.test.d.ts +0 -6
  1105. package/dist/src/ui/components/EmptyWalletDialog.test.js +0 -116
  1106. package/dist/src/ui/components/EmptyWalletDialog.test.js.map +0 -1
  1107. package/dist/src/ui/components/ExitPlanModeDialog.test.d.ts +0 -6
  1108. package/dist/src/ui/components/ExitPlanModeDialog.test.js +0 -443
  1109. package/dist/src/ui/components/ExitPlanModeDialog.test.js.map +0 -1
  1110. package/dist/src/ui/components/ExitWarning.test.d.ts +0 -6
  1111. package/dist/src/ui/components/ExitWarning.test.js +0 -58
  1112. package/dist/src/ui/components/ExitWarning.test.js.map +0 -1
  1113. package/dist/src/ui/components/FolderTrustDialog.test.d.ts +0 -6
  1114. package/dist/src/ui/components/FolderTrustDialog.test.js +0 -342
  1115. package/dist/src/ui/components/FolderTrustDialog.test.js.map +0 -1
  1116. package/dist/src/ui/components/Footer.test.d.ts +0 -6
  1117. package/dist/src/ui/components/Footer.test.js +0 -806
  1118. package/dist/src/ui/components/Footer.test.js.map +0 -1
  1119. package/dist/src/ui/components/FooterConfigDialog.test.d.ts +0 -6
  1120. package/dist/src/ui/components/FooterConfigDialog.test.js +0 -191
  1121. package/dist/src/ui/components/FooterConfigDialog.test.js.map +0 -1
  1122. package/dist/src/ui/components/GeminiRespondingSpinner.test.d.ts +0 -6
  1123. package/dist/src/ui/components/GeminiRespondingSpinner.test.js +0 -63
  1124. package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +0 -1
  1125. package/dist/src/ui/components/GradientRegression.test.d.ts +0 -6
  1126. package/dist/src/ui/components/GradientRegression.test.js +0 -116
  1127. package/dist/src/ui/components/GradientRegression.test.js.map +0 -1
  1128. package/dist/src/ui/components/Header.test.d.ts +0 -6
  1129. package/dist/src/ui/components/Header.test.js +0 -131
  1130. package/dist/src/ui/components/Header.test.js.map +0 -1
  1131. package/dist/src/ui/components/Help.test.d.ts +0 -6
  1132. package/dist/src/ui/components/Help.test.js +0 -67
  1133. package/dist/src/ui/components/Help.test.js.map +0 -1
  1134. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +0 -6
  1135. package/dist/src/ui/components/HistoryItemDisplay.test.js +0 -302
  1136. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +0 -1
  1137. package/dist/src/ui/components/HookStatusDisplay.test.d.ts +0 -6
  1138. package/dist/src/ui/components/HookStatusDisplay.test.js +0 -77
  1139. package/dist/src/ui/components/HookStatusDisplay.test.js.map +0 -1
  1140. package/dist/src/ui/components/HooksDialog.test.d.ts +0 -6
  1141. package/dist/src/ui/components/HooksDialog.test.js +0 -175
  1142. package/dist/src/ui/components/HooksDialog.test.js.map +0 -1
  1143. package/dist/src/ui/components/IdeTrustChangeDialog.test.d.ts +0 -6
  1144. package/dist/src/ui/components/IdeTrustChangeDialog.test.js +0 -78
  1145. package/dist/src/ui/components/IdeTrustChangeDialog.test.js.map +0 -1
  1146. package/dist/src/ui/components/InboxDialog.test.d.ts +0 -6
  1147. package/dist/src/ui/components/InboxDialog.test.js +0 -804
  1148. package/dist/src/ui/components/InboxDialog.test.js.map +0 -1
  1149. package/dist/src/ui/components/InputPrompt.test.d.ts +0 -17
  1150. package/dist/src/ui/components/InputPrompt.test.js +0 -4078
  1151. package/dist/src/ui/components/InputPrompt.test.js.map +0 -1
  1152. package/dist/src/ui/components/LoadingIndicator.test.d.ts +0 -6
  1153. package/dist/src/ui/components/LoadingIndicator.test.js +0 -325
  1154. package/dist/src/ui/components/LoadingIndicator.test.js.map +0 -1
  1155. package/dist/src/ui/components/LogoutConfirmationDialog.test.d.ts +0 -6
  1156. package/dist/src/ui/components/LogoutConfirmationDialog.test.js +0 -74
  1157. package/dist/src/ui/components/LogoutConfirmationDialog.test.js.map +0 -1
  1158. package/dist/src/ui/components/LoopDetectionConfirmation.test.d.ts +0 -6
  1159. package/dist/src/ui/components/LoopDetectionConfirmation.test.js +0 -27
  1160. package/dist/src/ui/components/LoopDetectionConfirmation.test.js.map +0 -1
  1161. package/dist/src/ui/components/MainContent.test.d.ts +0 -6
  1162. package/dist/src/ui/components/MainContent.test.js +0 -750
  1163. package/dist/src/ui/components/MainContent.test.js.map +0 -1
  1164. package/dist/src/ui/components/MemoryUsageDisplay.test.d.ts +0 -6
  1165. package/dist/src/ui/components/MemoryUsageDisplay.test.js +0 -52
  1166. package/dist/src/ui/components/MemoryUsageDisplay.test.js.map +0 -1
  1167. package/dist/src/ui/components/ModelDialog.test.d.ts +0 -6
  1168. package/dist/src/ui/components/ModelDialog.test.js +0 -356
  1169. package/dist/src/ui/components/ModelDialog.test.js.map +0 -1
  1170. package/dist/src/ui/components/ModelQuotaDisplay.test.d.ts +0 -6
  1171. package/dist/src/ui/components/ModelQuotaDisplay.test.js +0 -62
  1172. package/dist/src/ui/components/ModelQuotaDisplay.test.js.map +0 -1
  1173. package/dist/src/ui/components/ModelStatsDisplay.test.d.ts +0 -6
  1174. package/dist/src/ui/components/ModelStatsDisplay.test.js +0 -651
  1175. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +0 -1
  1176. package/dist/src/ui/components/MultiFolderTrustDialog.test.d.ts +0 -6
  1177. package/dist/src/ui/components/MultiFolderTrustDialog.test.js +0 -177
  1178. package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +0 -1
  1179. package/dist/src/ui/components/NewAgentsNotification.test.d.ts +0 -6
  1180. package/dist/src/ui/components/NewAgentsNotification.test.js +0 -83
  1181. package/dist/src/ui/components/NewAgentsNotification.test.js.map +0 -1
  1182. package/dist/src/ui/components/Notifications.test.d.ts +0 -6
  1183. package/dist/src/ui/components/Notifications.test.js +0 -285
  1184. package/dist/src/ui/components/Notifications.test.js.map +0 -1
  1185. package/dist/src/ui/components/OverageMenuDialog.test.d.ts +0 -6
  1186. package/dist/src/ui/components/OverageMenuDialog.test.js +0 -118
  1187. package/dist/src/ui/components/OverageMenuDialog.test.js.map +0 -1
  1188. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +0 -6
  1189. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +0 -181
  1190. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +0 -1
  1191. package/dist/src/ui/components/PolicyUpdateDialog.test.d.ts +0 -6
  1192. package/dist/src/ui/components/PolicyUpdateDialog.test.js +0 -92
  1193. package/dist/src/ui/components/PolicyUpdateDialog.test.js.map +0 -1
  1194. package/dist/src/ui/components/ProQuotaDialog.test.d.ts +0 -6
  1195. package/dist/src/ui/components/ProQuotaDialog.test.js +0 -222
  1196. package/dist/src/ui/components/ProQuotaDialog.test.js.map +0 -1
  1197. package/dist/src/ui/components/ProgressBar.test.d.ts +0 -6
  1198. package/dist/src/ui/components/ProgressBar.test.js +0 -28
  1199. package/dist/src/ui/components/ProgressBar.test.js.map +0 -1
  1200. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +0 -6
  1201. package/dist/src/ui/components/QueuedMessageDisplay.test.js +0 -65
  1202. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +0 -1
  1203. package/dist/src/ui/components/QuittingDisplay.test.d.ts +0 -6
  1204. package/dist/src/ui/components/QuittingDisplay.test.js +0 -60
  1205. package/dist/src/ui/components/QuittingDisplay.test.js.map +0 -1
  1206. package/dist/src/ui/components/QuotaDisplay.test.d.ts +0 -6
  1207. package/dist/src/ui/components/QuotaDisplay.test.js +0 -68
  1208. package/dist/src/ui/components/QuotaDisplay.test.js.map +0 -1
  1209. package/dist/src/ui/components/RawMarkdownIndicator.test.d.ts +0 -6
  1210. package/dist/src/ui/components/RawMarkdownIndicator.test.js +0 -38
  1211. package/dist/src/ui/components/RawMarkdownIndicator.test.js.map +0 -1
  1212. package/dist/src/ui/components/RewindConfirmation.test.d.ts +0 -6
  1213. package/dist/src/ui/components/RewindConfirmation.test.js +0 -57
  1214. package/dist/src/ui/components/RewindConfirmation.test.js.map +0 -1
  1215. package/dist/src/ui/components/RewindViewer.test.d.ts +0 -6
  1216. package/dist/src/ui/components/RewindViewer.test.js +0 -334
  1217. package/dist/src/ui/components/RewindViewer.test.js.map +0 -1
  1218. package/dist/src/ui/components/SessionBrowser/SessionBrowserSearchNav.test.d.ts +0 -6
  1219. package/dist/src/ui/components/SessionBrowser/SessionBrowserSearchNav.test.js +0 -47
  1220. package/dist/src/ui/components/SessionBrowser/SessionBrowserSearchNav.test.js.map +0 -1
  1221. package/dist/src/ui/components/SessionBrowser/SessionBrowserStates.test.d.ts +0 -6
  1222. package/dist/src/ui/components/SessionBrowser/SessionBrowserStates.test.js +0 -27
  1223. package/dist/src/ui/components/SessionBrowser/SessionBrowserStates.test.js.map +0 -1
  1224. package/dist/src/ui/components/SessionBrowser/utils.test.d.ts +0 -6
  1225. package/dist/src/ui/components/SessionBrowser/utils.test.js +0 -108
  1226. package/dist/src/ui/components/SessionBrowser/utils.test.js.map +0 -1
  1227. package/dist/src/ui/components/SessionBrowser.test.d.ts +0 -6
  1228. package/dist/src/ui/components/SessionBrowser.test.js +0 -266
  1229. package/dist/src/ui/components/SessionBrowser.test.js.map +0 -1
  1230. package/dist/src/ui/components/SessionSummaryDisplay.test.d.ts +0 -6
  1231. package/dist/src/ui/components/SessionSummaryDisplay.test.js +0 -164
  1232. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +0 -1
  1233. package/dist/src/ui/components/SettingsDialog.test.d.ts +0 -6
  1234. package/dist/src/ui/components/SettingsDialog.test.js +0 -1499
  1235. package/dist/src/ui/components/SettingsDialog.test.js.map +0 -1
  1236. package/dist/src/ui/components/ShellInputPrompt.test.d.ts +0 -6
  1237. package/dist/src/ui/components/ShellInputPrompt.test.js +0 -201
  1238. package/dist/src/ui/components/ShellInputPrompt.test.js.map +0 -1
  1239. package/dist/src/ui/components/ShellModeIndicator.test.d.ts +0 -6
  1240. package/dist/src/ui/components/ShellModeIndicator.test.js +0 -18
  1241. package/dist/src/ui/components/ShellModeIndicator.test.js.map +0 -1
  1242. package/dist/src/ui/components/ShortcutsHelp.test.d.ts +0 -6
  1243. package/dist/src/ui/components/ShortcutsHelp.test.js +0 -45
  1244. package/dist/src/ui/components/ShortcutsHelp.test.js.map +0 -1
  1245. package/dist/src/ui/components/ShowMoreLines.test.d.ts +0 -6
  1246. package/dist/src/ui/components/ShowMoreLines.test.js +0 -79
  1247. package/dist/src/ui/components/ShowMoreLines.test.js.map +0 -1
  1248. package/dist/src/ui/components/ShowMoreLinesLayout.test.d.ts +0 -1
  1249. package/dist/src/ui/components/ShowMoreLinesLayout.test.js +0 -68
  1250. package/dist/src/ui/components/ShowMoreLinesLayout.test.js.map +0 -1
  1251. package/dist/src/ui/components/StatsDisplay.test.d.ts +0 -6
  1252. package/dist/src/ui/components/StatsDisplay.test.js +0 -489
  1253. package/dist/src/ui/components/StatsDisplay.test.js.map +0 -1
  1254. package/dist/src/ui/components/StatusDisplay.test.d.ts +0 -6
  1255. package/dist/src/ui/components/StatusDisplay.test.js +0 -117
  1256. package/dist/src/ui/components/StatusDisplay.test.js.map +0 -1
  1257. package/dist/src/ui/components/StatusRow.test.d.ts +0 -6
  1258. package/dist/src/ui/components/StatusRow.test.js +0 -99
  1259. package/dist/src/ui/components/StatusRow.test.js.map +0 -1
  1260. package/dist/src/ui/components/StickyHeader.test.d.ts +0 -6
  1261. package/dist/src/ui/components/StickyHeader.test.js +0 -19
  1262. package/dist/src/ui/components/StickyHeader.test.js.map +0 -1
  1263. package/dist/src/ui/components/SuggestionsDisplay.test.d.ts +0 -6
  1264. package/dist/src/ui/components/SuggestionsDisplay.test.js +0 -82
  1265. package/dist/src/ui/components/SuggestionsDisplay.test.js.map +0 -1
  1266. package/dist/src/ui/components/Table.test.d.ts +0 -6
  1267. package/dist/src/ui/components/Table.test.js +0 -72
  1268. package/dist/src/ui/components/Table.test.js.map +0 -1
  1269. package/dist/src/ui/components/ThemeDialog.test.d.ts +0 -6
  1270. package/dist/src/ui/components/ThemeDialog.test.js +0 -162
  1271. package/dist/src/ui/components/ThemeDialog.test.js.map +0 -1
  1272. package/dist/src/ui/components/ThemedGradient.test.d.ts +0 -6
  1273. package/dist/src/ui/components/ThemedGradient.test.js +0 -35
  1274. package/dist/src/ui/components/ThemedGradient.test.js.map +0 -1
  1275. package/dist/src/ui/components/Tips.test.d.ts +0 -6
  1276. package/dist/src/ui/components/Tips.test.js +0 -23
  1277. package/dist/src/ui/components/Tips.test.js.map +0 -1
  1278. package/dist/src/ui/components/ToastDisplay.test.d.ts +0 -6
  1279. package/dist/src/ui/components/ToastDisplay.test.js +0 -167
  1280. package/dist/src/ui/components/ToastDisplay.test.js.map +0 -1
  1281. package/dist/src/ui/components/ToolConfirmationQueue.test.d.ts +0 -6
  1282. package/dist/src/ui/components/ToolConfirmationQueue.test.js +0 -444
  1283. package/dist/src/ui/components/ToolConfirmationQueue.test.js.map +0 -1
  1284. package/dist/src/ui/components/ToolStatsDisplay.test.d.ts +0 -6
  1285. package/dist/src/ui/components/ToolStatsDisplay.test.js +0 -234
  1286. package/dist/src/ui/components/ToolStatsDisplay.test.js.map +0 -1
  1287. package/dist/src/ui/components/UpdateNotification.test.d.ts +0 -6
  1288. package/dist/src/ui/components/UpdateNotification.test.js +0 -17
  1289. package/dist/src/ui/components/UpdateNotification.test.js.map +0 -1
  1290. package/dist/src/ui/components/UserIdentity.test.d.ts +0 -6
  1291. package/dist/src/ui/components/UserIdentity.test.js +0 -138
  1292. package/dist/src/ui/components/UserIdentity.test.js.map +0 -1
  1293. package/dist/src/ui/components/ValidationDialog.test.d.ts +0 -6
  1294. package/dist/src/ui/components/ValidationDialog.test.js +0 -162
  1295. package/dist/src/ui/components/ValidationDialog.test.js.map +0 -1
  1296. package/dist/src/ui/components/VoiceModelDialog.test.d.ts +0 -6
  1297. package/dist/src/ui/components/VoiceModelDialog.test.js +0 -68
  1298. package/dist/src/ui/components/VoiceModelDialog.test.js.map +0 -1
  1299. package/dist/src/ui/components/messages/CompressionMessage.test.d.ts +0 -6
  1300. package/dist/src/ui/components/messages/CompressionMessage.test.js +0 -180
  1301. package/dist/src/ui/components/messages/CompressionMessage.test.js.map +0 -1
  1302. package/dist/src/ui/components/messages/DenseToolMessage.test.d.ts +0 -6
  1303. package/dist/src/ui/components/messages/DenseToolMessage.test.js +0 -406
  1304. package/dist/src/ui/components/messages/DenseToolMessage.test.js.map +0 -1
  1305. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +0 -6
  1306. package/dist/src/ui/components/messages/DiffRenderer.test.js +0 -269
  1307. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +0 -1
  1308. package/dist/src/ui/components/messages/ErrorMessage.test.d.ts +0 -6
  1309. package/dist/src/ui/components/messages/ErrorMessage.test.js +0 -25
  1310. package/dist/src/ui/components/messages/ErrorMessage.test.js.map +0 -1
  1311. package/dist/src/ui/components/messages/ExportSessionMessage.test.d.ts +0 -6
  1312. package/dist/src/ui/components/messages/ExportSessionMessage.test.js +0 -32
  1313. package/dist/src/ui/components/messages/ExportSessionMessage.test.js.map +0 -1
  1314. package/dist/src/ui/components/messages/GeminiMessage.test.d.ts +0 -6
  1315. package/dist/src/ui/components/messages/GeminiMessage.test.js +0 -46
  1316. package/dist/src/ui/components/messages/GeminiMessage.test.js.map +0 -1
  1317. package/dist/src/ui/components/messages/HintMessage.test.d.ts +0 -6
  1318. package/dist/src/ui/components/messages/HintMessage.test.js +0 -42
  1319. package/dist/src/ui/components/messages/HintMessage.test.js.map +0 -1
  1320. package/dist/src/ui/components/messages/InfoMessage.test.d.ts +0 -6
  1321. package/dist/src/ui/components/messages/InfoMessage.test.js +0 -31
  1322. package/dist/src/ui/components/messages/InfoMessage.test.js.map +0 -1
  1323. package/dist/src/ui/components/messages/RedirectionConfirmation.test.d.ts +0 -6
  1324. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js +0 -35
  1325. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js.map +0 -1
  1326. package/dist/src/ui/components/messages/ShellToolMessage.test.d.ts +0 -6
  1327. package/dist/src/ui/components/messages/ShellToolMessage.test.js +0 -290
  1328. package/dist/src/ui/components/messages/ShellToolMessage.test.js.map +0 -1
  1329. package/dist/src/ui/components/messages/SubagentGroupDisplay.test.d.ts +0 -1
  1330. package/dist/src/ui/components/messages/SubagentGroupDisplay.test.js +0 -92
  1331. package/dist/src/ui/components/messages/SubagentGroupDisplay.test.js.map +0 -1
  1332. package/dist/src/ui/components/messages/SubagentHistoryMessage.test.d.ts +0 -6
  1333. package/dist/src/ui/components/messages/SubagentHistoryMessage.test.js +0 -69
  1334. package/dist/src/ui/components/messages/SubagentHistoryMessage.test.js.map +0 -1
  1335. package/dist/src/ui/components/messages/SubagentProgressDisplay.test.d.ts +0 -6
  1336. package/dist/src/ui/components/messages/SubagentProgressDisplay.test.js +0 -164
  1337. package/dist/src/ui/components/messages/SubagentProgressDisplay.test.js.map +0 -1
  1338. package/dist/src/ui/components/messages/ThinkingMessage.test.d.ts +0 -6
  1339. package/dist/src/ui/components/messages/ThinkingMessage.test.js +0 -104
  1340. package/dist/src/ui/components/messages/ThinkingMessage.test.js.map +0 -1
  1341. package/dist/src/ui/components/messages/Todo.test.d.ts +0 -6
  1342. package/dist/src/ui/components/messages/Todo.test.js +0 -129
  1343. package/dist/src/ui/components/messages/Todo.test.js.map +0 -1
  1344. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +0 -6
  1345. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +0 -558
  1346. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +0 -1
  1347. package/dist/src/ui/components/messages/ToolGroupDisplay.test.d.ts +0 -6
  1348. package/dist/src/ui/components/messages/ToolGroupDisplay.test.js +0 -210
  1349. package/dist/src/ui/components/messages/ToolGroupDisplay.test.js.map +0 -1
  1350. package/dist/src/ui/components/messages/ToolGroupMessage.compact.test.d.ts +0 -6
  1351. package/dist/src/ui/components/messages/ToolGroupMessage.compact.test.js +0 -147
  1352. package/dist/src/ui/components/messages/ToolGroupMessage.compact.test.js.map +0 -1
  1353. package/dist/src/ui/components/messages/ToolGroupMessage.test.d.ts +0 -6
  1354. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +0 -828
  1355. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +0 -1
  1356. package/dist/src/ui/components/messages/ToolGroupMessageRegression.test.d.ts +0 -6
  1357. package/dist/src/ui/components/messages/ToolGroupMessageRegression.test.js +0 -101
  1358. package/dist/src/ui/components/messages/ToolGroupMessageRegression.test.js.map +0 -1
  1359. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +0 -6
  1360. package/dist/src/ui/components/messages/ToolMessage.test.js +0 -292
  1361. package/dist/src/ui/components/messages/ToolMessage.test.js.map +0 -1
  1362. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.d.ts +0 -6
  1363. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js +0 -96
  1364. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js.map +0 -1
  1365. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.d.ts +0 -6
  1366. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js +0 -72
  1367. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js.map +0 -1
  1368. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.d.ts +0 -6
  1369. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js +0 -88
  1370. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js.map +0 -1
  1371. package/dist/src/ui/components/messages/ToolResultDisplay.test.d.ts +0 -6
  1372. package/dist/src/ui/components/messages/ToolResultDisplay.test.js +0 -333
  1373. package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +0 -1
  1374. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.d.ts +0 -6
  1375. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js +0 -77
  1376. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js.map +0 -1
  1377. package/dist/src/ui/components/messages/ToolShared.test.d.ts +0 -6
  1378. package/dist/src/ui/components/messages/ToolShared.test.js +0 -65
  1379. package/dist/src/ui/components/messages/ToolShared.test.js.map +0 -1
  1380. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.d.ts +0 -6
  1381. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js +0 -142
  1382. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js.map +0 -1
  1383. package/dist/src/ui/components/messages/TopicMessage.test.d.ts +0 -6
  1384. package/dist/src/ui/components/messages/TopicMessage.test.js +0 -77
  1385. package/dist/src/ui/components/messages/TopicMessage.test.js.map +0 -1
  1386. package/dist/src/ui/components/messages/UserMessage.test.d.ts +0 -6
  1387. package/dist/src/ui/components/messages/UserMessage.test.js +0 -67
  1388. package/dist/src/ui/components/messages/UserMessage.test.js.map +0 -1
  1389. package/dist/src/ui/components/messages/UserShellMessage.test.d.ts +0 -6
  1390. package/dist/src/ui/components/messages/UserShellMessage.test.js +0 -40
  1391. package/dist/src/ui/components/messages/UserShellMessage.test.js.map +0 -1
  1392. package/dist/src/ui/components/messages/WarningMessage.test.d.ts +0 -6
  1393. package/dist/src/ui/components/messages/WarningMessage.test.js +0 -25
  1394. package/dist/src/ui/components/messages/WarningMessage.test.js.map +0 -1
  1395. package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +0 -6
  1396. package/dist/src/ui/components/shared/BaseSelectionList.test.js +0 -441
  1397. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +0 -1
  1398. package/dist/src/ui/components/shared/BaseSettingsDialog.test.d.ts +0 -6
  1399. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js +0 -710
  1400. package/dist/src/ui/components/shared/BaseSettingsDialog.test.js.map +0 -1
  1401. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.d.ts +0 -6
  1402. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +0 -89
  1403. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +0 -1
  1404. package/dist/src/ui/components/shared/EnumSelector.test.d.ts +0 -6
  1405. package/dist/src/ui/components/shared/EnumSelector.test.js +0 -83
  1406. package/dist/src/ui/components/shared/EnumSelector.test.js.map +0 -1
  1407. package/dist/src/ui/components/shared/ExpandableText.test.d.ts +0 -6
  1408. package/dist/src/ui/components/shared/ExpandableText.test.js +0 -95
  1409. package/dist/src/ui/components/shared/ExpandableText.test.js.map +0 -1
  1410. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.d.ts +0 -1
  1411. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js +0 -47
  1412. package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js.map +0 -1
  1413. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +0 -6
  1414. package/dist/src/ui/components/shared/MaxSizedBox.test.js +0 -161
  1415. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +0 -1
  1416. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +0 -6
  1417. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +0 -146
  1418. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +0 -1
  1419. package/dist/src/ui/components/shared/Scrollable.test.d.ts +0 -6
  1420. package/dist/src/ui/components/shared/Scrollable.test.js +0 -143
  1421. package/dist/src/ui/components/shared/Scrollable.test.js.map +0 -1
  1422. package/dist/src/ui/components/shared/ScrollableList.test.d.ts +0 -6
  1423. package/dist/src/ui/components/shared/ScrollableList.test.js +0 -438
  1424. package/dist/src/ui/components/shared/ScrollableList.test.js.map +0 -1
  1425. package/dist/src/ui/components/shared/SearchableList.test.d.ts +0 -6
  1426. package/dist/src/ui/components/shared/SearchableList.test.js +0 -169
  1427. package/dist/src/ui/components/shared/SearchableList.test.js.map +0 -1
  1428. package/dist/src/ui/components/shared/SectionHeader.test.d.ts +0 -6
  1429. package/dist/src/ui/components/shared/SectionHeader.test.js +0 -42
  1430. package/dist/src/ui/components/shared/SectionHeader.test.js.map +0 -1
  1431. package/dist/src/ui/components/shared/SlicingMaxSizedBox.test.d.ts +0 -6
  1432. package/dist/src/ui/components/shared/SlicingMaxSizedBox.test.js +0 -54
  1433. package/dist/src/ui/components/shared/SlicingMaxSizedBox.test.js.map +0 -1
  1434. package/dist/src/ui/components/shared/TabHeader.test.d.ts +0 -6
  1435. package/dist/src/ui/components/shared/TabHeader.test.js +0 -144
  1436. package/dist/src/ui/components/shared/TabHeader.test.js.map +0 -1
  1437. package/dist/src/ui/components/shared/TextInput.test.d.ts +0 -6
  1438. package/dist/src/ui/components/shared/TextInput.test.js +0 -353
  1439. package/dist/src/ui/components/shared/TextInput.test.js.map +0 -1
  1440. package/dist/src/ui/components/shared/VirtualizedList.test.d.ts +0 -6
  1441. package/dist/src/ui/components/shared/VirtualizedList.test.js +0 -174
  1442. package/dist/src/ui/components/shared/VirtualizedList.test.js.map +0 -1
  1443. package/dist/src/ui/components/shared/performance.test.d.ts +0 -1
  1444. package/dist/src/ui/components/shared/performance.test.js +0 -74
  1445. package/dist/src/ui/components/shared/performance.test.js.map +0 -1
  1446. package/dist/src/ui/components/shared/text-buffer.test.d.ts +0 -6
  1447. package/dist/src/ui/components/shared/text-buffer.test.js +0 -2965
  1448. package/dist/src/ui/components/shared/text-buffer.test.js.map +0 -1
  1449. package/dist/src/ui/components/shared/vim-buffer-actions.test.d.ts +0 -6
  1450. package/dist/src/ui/components/shared/vim-buffer-actions.test.js +0 -2272
  1451. package/dist/src/ui/components/shared/vim-buffer-actions.test.js.map +0 -1
  1452. package/dist/src/ui/components/views/ChatList.test.d.ts +0 -6
  1453. package/dist/src/ui/components/views/ChatList.test.js +0 -45
  1454. package/dist/src/ui/components/views/ChatList.test.js.map +0 -1
  1455. package/dist/src/ui/components/views/ExtensionDetails.test.d.ts +0 -6
  1456. package/dist/src/ui/components/views/ExtensionDetails.test.js +0 -154
  1457. package/dist/src/ui/components/views/ExtensionDetails.test.js.map +0 -1
  1458. package/dist/src/ui/components/views/ExtensionRegistryView.test.d.ts +0 -6
  1459. package/dist/src/ui/components/views/ExtensionRegistryView.test.js +0 -222
  1460. package/dist/src/ui/components/views/ExtensionRegistryView.test.js.map +0 -1
  1461. package/dist/src/ui/components/views/ExtensionsList.test.d.ts +0 -6
  1462. package/dist/src/ui/components/views/ExtensionsList.test.js +0 -145
  1463. package/dist/src/ui/components/views/ExtensionsList.test.js.map +0 -1
  1464. package/dist/src/ui/components/views/McpStatus.test.d.ts +0 -6
  1465. package/dist/src/ui/components/views/McpStatus.test.js +0 -174
  1466. package/dist/src/ui/components/views/McpStatus.test.js.map +0 -1
  1467. package/dist/src/ui/components/views/SkillsList.test.d.ts +0 -6
  1468. package/dist/src/ui/components/views/SkillsList.test.js +0 -99
  1469. package/dist/src/ui/components/views/SkillsList.test.js.map +0 -1
  1470. package/dist/src/ui/components/views/ToolsList.test.d.ts +0 -6
  1471. package/dist/src/ui/components/views/ToolsList.test.js +0 -45
  1472. package/dist/src/ui/components/views/ToolsList.test.js.map +0 -1
  1473. package/dist/src/ui/contexts/KeypressContext.test.d.ts +0 -6
  1474. package/dist/src/ui/contexts/KeypressContext.test.js +0 -1133
  1475. package/dist/src/ui/contexts/KeypressContext.test.js.map +0 -1
  1476. package/dist/src/ui/contexts/MouseContext.test.d.ts +0 -6
  1477. package/dist/src/ui/contexts/MouseContext.test.js +0 -269
  1478. package/dist/src/ui/contexts/MouseContext.test.js.map +0 -1
  1479. package/dist/src/ui/contexts/ScrollProvider.drag.test.d.ts +0 -6
  1480. package/dist/src/ui/contexts/ScrollProvider.drag.test.js +0 -320
  1481. package/dist/src/ui/contexts/ScrollProvider.drag.test.js.map +0 -1
  1482. package/dist/src/ui/contexts/ScrollProvider.test.d.ts +0 -6
  1483. package/dist/src/ui/contexts/ScrollProvider.test.js +0 -478
  1484. package/dist/src/ui/contexts/ScrollProvider.test.js.map +0 -1
  1485. package/dist/src/ui/contexts/SessionContext.test.d.ts +0 -6
  1486. package/dist/src/ui/contexts/SessionContext.test.js +0 -213
  1487. package/dist/src/ui/contexts/SessionContext.test.js.map +0 -1
  1488. package/dist/src/ui/contexts/SettingsContext.test.d.ts +0 -6
  1489. package/dist/src/ui/contexts/SettingsContext.test.js +0 -106
  1490. package/dist/src/ui/contexts/SettingsContext.test.js.map +0 -1
  1491. package/dist/src/ui/contexts/TerminalContext.test.d.ts +0 -6
  1492. package/dist/src/ui/contexts/TerminalContext.test.js +0 -75
  1493. package/dist/src/ui/contexts/TerminalContext.test.js.map +0 -1
  1494. package/dist/src/ui/contexts/ToolActionsContext.test.d.ts +0 -6
  1495. package/dist/src/ui/contexts/ToolActionsContext.test.js +0 -247
  1496. package/dist/src/ui/contexts/ToolActionsContext.test.js.map +0 -1
  1497. package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +0 -6
  1498. package/dist/src/ui/hooks/atCommandProcessor.test.js +0 -1265
  1499. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +0 -1
  1500. package/dist/src/ui/hooks/atCommandProcessor_agents.test.d.ts +0 -6
  1501. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js +0 -210
  1502. package/dist/src/ui/hooks/atCommandProcessor_agents.test.js.map +0 -1
  1503. package/dist/src/ui/hooks/creditsFlowHandler.test.d.ts +0 -6
  1504. package/dist/src/ui/hooks/creditsFlowHandler.test.js +0 -211
  1505. package/dist/src/ui/hooks/creditsFlowHandler.test.js.map +0 -1
  1506. package/dist/src/ui/hooks/shell-completions/gitProvider.test.d.ts +0 -6
  1507. package/dist/src/ui/hooks/shell-completions/gitProvider.test.js +0 -73
  1508. package/dist/src/ui/hooks/shell-completions/gitProvider.test.js.map +0 -1
  1509. package/dist/src/ui/hooks/shell-completions/npmProvider.test.d.ts +0 -6
  1510. package/dist/src/ui/hooks/shell-completions/npmProvider.test.js +0 -69
  1511. package/dist/src/ui/hooks/shell-completions/npmProvider.test.js.map +0 -1
  1512. package/dist/src/ui/hooks/shellReducer.test.d.ts +0 -6
  1513. package/dist/src/ui/hooks/shellReducer.test.js +0 -341
  1514. package/dist/src/ui/hooks/shellReducer.test.js.map +0 -1
  1515. package/dist/src/ui/hooks/slashCommandProcessor.test.d.ts +0 -6
  1516. package/dist/src/ui/hooks/slashCommandProcessor.test.js +0 -881
  1517. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +0 -1
  1518. package/dist/src/ui/hooks/toolMapping.test.d.ts +0 -6
  1519. package/dist/src/ui/hooks/toolMapping.test.js +0 -292
  1520. package/dist/src/ui/hooks/toolMapping.test.js.map +0 -1
  1521. package/dist/src/ui/hooks/useAgentStream.test.d.ts +0 -6
  1522. package/dist/src/ui/hooks/useAgentStream.test.js +0 -161
  1523. package/dist/src/ui/hooks/useAgentStream.test.js.map +0 -1
  1524. package/dist/src/ui/hooks/useAlternateBuffer.test.d.ts +0 -6
  1525. package/dist/src/ui/hooks/useAlternateBuffer.test.js +0 -62
  1526. package/dist/src/ui/hooks/useAlternateBuffer.test.js.map +0 -1
  1527. package/dist/src/ui/hooks/useAnimatedScrollbar.test.d.ts +0 -6
  1528. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js +0 -85
  1529. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js.map +0 -1
  1530. package/dist/src/ui/hooks/useApprovalModeIndicator.test.d.ts +0 -6
  1531. package/dist/src/ui/hooks/useApprovalModeIndicator.test.js +0 -477
  1532. package/dist/src/ui/hooks/useApprovalModeIndicator.test.js.map +0 -1
  1533. package/dist/src/ui/hooks/useAtCompletion.test.d.ts +0 -6
  1534. package/dist/src/ui/hooks/useAtCompletion.test.js +0 -567
  1535. package/dist/src/ui/hooks/useAtCompletion.test.js.map +0 -1
  1536. package/dist/src/ui/hooks/useAtCompletion_agents.test.d.ts +0 -6
  1537. package/dist/src/ui/hooks/useAtCompletion_agents.test.js +0 -87
  1538. package/dist/src/ui/hooks/useAtCompletion_agents.test.js.map +0 -1
  1539. package/dist/src/ui/hooks/useBackgroundTaskManager.test.d.ts +0 -6
  1540. package/dist/src/ui/hooks/useBackgroundTaskManager.test.js +0 -168
  1541. package/dist/src/ui/hooks/useBackgroundTaskManager.test.js.map +0 -1
  1542. package/dist/src/ui/hooks/useBanner.test.d.ts +0 -6
  1543. package/dist/src/ui/hooks/useBanner.test.js +0 -144
  1544. package/dist/src/ui/hooks/useBanner.test.js.map +0 -1
  1545. package/dist/src/ui/hooks/useBatchedScroll.test.d.ts +0 -6
  1546. package/dist/src/ui/hooks/useBatchedScroll.test.js +0 -62
  1547. package/dist/src/ui/hooks/useBatchedScroll.test.js.map +0 -1
  1548. package/dist/src/ui/hooks/useCommandCompletion.test.d.ts +0 -6
  1549. package/dist/src/ui/hooks/useCommandCompletion.test.js +0 -722
  1550. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +0 -1
  1551. package/dist/src/ui/hooks/useConsoleMessages.test.d.ts +0 -6
  1552. package/dist/src/ui/hooks/useConsoleMessages.test.js +0 -201
  1553. package/dist/src/ui/hooks/useConsoleMessages.test.js.map +0 -1
  1554. package/dist/src/ui/hooks/useEditorSettings.test.d.ts +0 -6
  1555. package/dist/src/ui/hooks/useEditorSettings.test.js +0 -179
  1556. package/dist/src/ui/hooks/useEditorSettings.test.js.map +0 -1
  1557. package/dist/src/ui/hooks/useExecutionLifecycle.test.d.ts +0 -6
  1558. package/dist/src/ui/hooks/useExecutionLifecycle.test.js +0 -903
  1559. package/dist/src/ui/hooks/useExecutionLifecycle.test.js.map +0 -1
  1560. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +0 -6
  1561. package/dist/src/ui/hooks/useExtensionUpdates.test.js +0 -280
  1562. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +0 -1
  1563. package/dist/src/ui/hooks/useFlickerDetector.test.d.ts +0 -6
  1564. package/dist/src/ui/hooks/useFlickerDetector.test.js +0 -106
  1565. package/dist/src/ui/hooks/useFlickerDetector.test.js.map +0 -1
  1566. package/dist/src/ui/hooks/useFocus.test.d.ts +0 -6
  1567. package/dist/src/ui/hooks/useFocus.test.js +0 -140
  1568. package/dist/src/ui/hooks/useFocus.test.js.map +0 -1
  1569. package/dist/src/ui/hooks/useFolderTrust.test.d.ts +0 -6
  1570. package/dist/src/ui/hooks/useFolderTrust.test.js +0 -268
  1571. package/dist/src/ui/hooks/useFolderTrust.test.js.map +0 -1
  1572. package/dist/src/ui/hooks/useGeminiStream.test.d.ts +0 -6
  1573. package/dist/src/ui/hooks/useGeminiStream.test.js +0 -2855
  1574. package/dist/src/ui/hooks/useGeminiStream.test.js.map +0 -1
  1575. package/dist/src/ui/hooks/useGitBranchName.test.d.ts +0 -6
  1576. package/dist/src/ui/hooks/useGitBranchName.test.js +0 -237
  1577. package/dist/src/ui/hooks/useGitBranchName.test.js.map +0 -1
  1578. package/dist/src/ui/hooks/useHistoryManager.test.d.ts +0 -6
  1579. package/dist/src/ui/hooks/useHistoryManager.test.js +0 -259
  1580. package/dist/src/ui/hooks/useHistoryManager.test.js.map +0 -1
  1581. package/dist/src/ui/hooks/useHookDisplayState.test.d.ts +0 -6
  1582. package/dist/src/ui/hooks/useHookDisplayState.test.js +0 -200
  1583. package/dist/src/ui/hooks/useHookDisplayState.test.js.map +0 -1
  1584. package/dist/src/ui/hooks/useIdeTrustListener.test.d.ts +0 -6
  1585. package/dist/src/ui/hooks/useIdeTrustListener.test.js +0 -225
  1586. package/dist/src/ui/hooks/useIdeTrustListener.test.js.map +0 -1
  1587. package/dist/src/ui/hooks/useIncludeDirsTrust.test.d.ts +0 -6
  1588. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js +0 -174
  1589. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js.map +0 -1
  1590. package/dist/src/ui/hooks/useInlineEditBuffer.test.d.ts +0 -6
  1591. package/dist/src/ui/hooks/useInlineEditBuffer.test.js +0 -112
  1592. package/dist/src/ui/hooks/useInlineEditBuffer.test.js.map +0 -1
  1593. package/dist/src/ui/hooks/useInputHistory.test.d.ts +0 -6
  1594. package/dist/src/ui/hooks/useInputHistory.test.js +0 -389
  1595. package/dist/src/ui/hooks/useInputHistory.test.js.map +0 -1
  1596. package/dist/src/ui/hooks/useInputHistoryStore.test.d.ts +0 -6
  1597. package/dist/src/ui/hooks/useInputHistoryStore.test.js +0 -238
  1598. package/dist/src/ui/hooks/useInputHistoryStore.test.js.map +0 -1
  1599. package/dist/src/ui/hooks/useKeypress.test.d.ts +0 -6
  1600. package/dist/src/ui/hooks/useKeypress.test.js +0 -198
  1601. package/dist/src/ui/hooks/useKeypress.test.js.map +0 -1
  1602. package/dist/src/ui/hooks/useLoadingIndicator.test.d.ts +0 -6
  1603. package/dist/src/ui/hooks/useLoadingIndicator.test.js +0 -177
  1604. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +0 -1
  1605. package/dist/src/ui/hooks/useLogger.test.d.ts +0 -6
  1606. package/dist/src/ui/hooks/useLogger.test.js +0 -44
  1607. package/dist/src/ui/hooks/useLogger.test.js.map +0 -1
  1608. package/dist/src/ui/hooks/useMcpStatus.test.d.ts +0 -6
  1609. package/dist/src/ui/hooks/useMcpStatus.test.js +0 -69
  1610. package/dist/src/ui/hooks/useMcpStatus.test.js.map +0 -1
  1611. package/dist/src/ui/hooks/useMemoryMonitor.test.d.ts +0 -6
  1612. package/dist/src/ui/hooks/useMemoryMonitor.test.js +0 -62
  1613. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +0 -1
  1614. package/dist/src/ui/hooks/useMessageQueue.test.d.ts +0 -6
  1615. package/dist/src/ui/hooks/useMessageQueue.test.js +0 -365
  1616. package/dist/src/ui/hooks/useMessageQueue.test.js.map +0 -1
  1617. package/dist/src/ui/hooks/useModelCommand.test.d.ts +0 -6
  1618. package/dist/src/ui/hooks/useModelCommand.test.js +0 -45
  1619. package/dist/src/ui/hooks/useModelCommand.test.js.map +0 -1
  1620. package/dist/src/ui/hooks/useMouse.test.d.ts +0 -6
  1621. package/dist/src/ui/hooks/useMouse.test.js +0 -52
  1622. package/dist/src/ui/hooks/useMouse.test.js.map +0 -1
  1623. package/dist/src/ui/hooks/useMouseClick.test.d.ts +0 -6
  1624. package/dist/src/ui/hooks/useMouseClick.test.js +0 -68
  1625. package/dist/src/ui/hooks/useMouseClick.test.js.map +0 -1
  1626. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +0 -6
  1627. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +0 -291
  1628. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +0 -1
  1629. package/dist/src/ui/hooks/usePhraseCycler.test.d.ts +0 -6
  1630. package/dist/src/ui/hooks/usePhraseCycler.test.js +0 -187
  1631. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +0 -1
  1632. package/dist/src/ui/hooks/usePrivacySettings.test.d.ts +0 -6
  1633. package/dist/src/ui/hooks/usePrivacySettings.test.js +0 -113
  1634. package/dist/src/ui/hooks/usePrivacySettings.test.js.map +0 -1
  1635. package/dist/src/ui/hooks/useQuotaAndFallback.test.d.ts +0 -6
  1636. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +0 -817
  1637. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +0 -1
  1638. package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +0 -6
  1639. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +0 -168
  1640. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +0 -1
  1641. package/dist/src/ui/hooks/useRewind.test.d.ts +0 -6
  1642. package/dist/src/ui/hooks/useRewind.test.js +0 -100
  1643. package/dist/src/ui/hooks/useRewind.test.js.map +0 -1
  1644. package/dist/src/ui/hooks/useSelectionList.test.d.ts +0 -6
  1645. package/dist/src/ui/hooks/useSelectionList.test.js +0 -960
  1646. package/dist/src/ui/hooks/useSelectionList.test.js.map +0 -1
  1647. package/dist/src/ui/hooks/useSessionBrowser.test.d.ts +0 -6
  1648. package/dist/src/ui/hooks/useSessionBrowser.test.js +0 -277
  1649. package/dist/src/ui/hooks/useSessionBrowser.test.js.map +0 -1
  1650. package/dist/src/ui/hooks/useSessionResume.test.d.ts +0 -6
  1651. package/dist/src/ui/hooks/useSessionResume.test.js +0 -402
  1652. package/dist/src/ui/hooks/useSessionResume.test.js.map +0 -1
  1653. package/dist/src/ui/hooks/useSettingsNavigation.test.d.ts +0 -6
  1654. package/dist/src/ui/hooks/useSettingsNavigation.test.js +0 -87
  1655. package/dist/src/ui/hooks/useSettingsNavigation.test.js.map +0 -1
  1656. package/dist/src/ui/hooks/useShellCompletion.test.d.ts +0 -6
  1657. package/dist/src/ui/hooks/useShellCompletion.test.js +0 -354
  1658. package/dist/src/ui/hooks/useShellCompletion.test.js.map +0 -1
  1659. package/dist/src/ui/hooks/useShellHistory.test.d.ts +0 -6
  1660. package/dist/src/ui/hooks/useShellHistory.test.js +0 -226
  1661. package/dist/src/ui/hooks/useShellHistory.test.js.map +0 -1
  1662. package/dist/src/ui/hooks/useShellInactivityStatus.test.d.ts +0 -6
  1663. package/dist/src/ui/hooks/useShellInactivityStatus.test.js +0 -84
  1664. package/dist/src/ui/hooks/useShellInactivityStatus.test.js.map +0 -1
  1665. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +0 -10
  1666. package/dist/src/ui/hooks/useSlashCompletion.test.js +0 -977
  1667. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +0 -1
  1668. package/dist/src/ui/hooks/useSnowfall.test.d.ts +0 -6
  1669. package/dist/src/ui/hooks/useSnowfall.test.js +0 -92
  1670. package/dist/src/ui/hooks/useSnowfall.test.js.map +0 -1
  1671. package/dist/src/ui/hooks/useSuspend.test.d.ts +0 -6
  1672. package/dist/src/ui/hooks/useSuspend.test.js +0 -136
  1673. package/dist/src/ui/hooks/useSuspend.test.js.map +0 -1
  1674. package/dist/src/ui/hooks/useTabbedNavigation.test.d.ts +0 -6
  1675. package/dist/src/ui/hooks/useTabbedNavigation.test.js +0 -243
  1676. package/dist/src/ui/hooks/useTabbedNavigation.test.js.map +0 -1
  1677. package/dist/src/ui/hooks/useTerminalTheme.test.d.ts +0 -6
  1678. package/dist/src/ui/hooks/useTerminalTheme.test.js +0 -169
  1679. package/dist/src/ui/hooks/useTerminalTheme.test.js.map +0 -1
  1680. package/dist/src/ui/hooks/useTimer.test.d.ts +0 -6
  1681. package/dist/src/ui/hooks/useTimer.test.js +0 -119
  1682. package/dist/src/ui/hooks/useTimer.test.js.map +0 -1
  1683. package/dist/src/ui/hooks/useTips.test.d.ts +0 -6
  1684. package/dist/src/ui/hooks/useTips.test.js +0 -33
  1685. package/dist/src/ui/hooks/useTips.test.js.map +0 -1
  1686. package/dist/src/ui/hooks/useToolScheduler.test.d.ts +0 -6
  1687. package/dist/src/ui/hooks/useToolScheduler.test.js +0 -534
  1688. package/dist/src/ui/hooks/useToolScheduler.test.js.map +0 -1
  1689. package/dist/src/ui/hooks/useTurnActivityMonitor.test.d.ts +0 -6
  1690. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js +0 -99
  1691. package/dist/src/ui/hooks/useTurnActivityMonitor.test.js.map +0 -1
  1692. package/dist/src/ui/hooks/vim-passthrough.test.d.ts +0 -6
  1693. package/dist/src/ui/hooks/vim-passthrough.test.js +0 -84
  1694. package/dist/src/ui/hooks/vim-passthrough.test.js.map +0 -1
  1695. package/dist/src/ui/hooks/vim.test.d.ts +0 -6
  1696. package/dist/src/ui/hooks/vim.test.js +0 -2156
  1697. package/dist/src/ui/hooks/vim.test.js.map +0 -1
  1698. package/dist/src/ui/key/keyBindings.test.d.ts +0 -6
  1699. package/dist/src/ui/key/keyBindings.test.js +0 -225
  1700. package/dist/src/ui/key/keyBindings.test.js.map +0 -1
  1701. package/dist/src/ui/key/keyMatchers.test.d.ts +0 -6
  1702. package/dist/src/ui/key/keyMatchers.test.js +0 -524
  1703. package/dist/src/ui/key/keyMatchers.test.js.map +0 -1
  1704. package/dist/src/ui/key/keybindingUtils.test.d.ts +0 -6
  1705. package/dist/src/ui/key/keybindingUtils.test.js +0 -121
  1706. package/dist/src/ui/key/keybindingUtils.test.js.map +0 -1
  1707. package/dist/src/ui/layouts/DefaultAppLayout.test.d.ts +0 -6
  1708. package/dist/src/ui/layouts/DefaultAppLayout.test.js +0 -126
  1709. package/dist/src/ui/layouts/DefaultAppLayout.test.js.map +0 -1
  1710. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.d.ts +0 -6
  1711. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js +0 -134
  1712. package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js.map +0 -1
  1713. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.d.ts +0 -6
  1714. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js +0 -43
  1715. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js.map +0 -1
  1716. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.d.ts +0 -6
  1717. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js +0 -43
  1718. package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js.map +0 -1
  1719. package/dist/src/ui/privacy/PrivacyNotice.test.d.ts +0 -6
  1720. package/dist/src/ui/privacy/PrivacyNotice.test.js +0 -63
  1721. package/dist/src/ui/privacy/PrivacyNotice.test.js.map +0 -1
  1722. package/dist/src/ui/state/extensions.test.d.ts +0 -6
  1723. package/dist/src/ui/state/extensions.test.js +0 -219
  1724. package/dist/src/ui/state/extensions.test.js.map +0 -1
  1725. package/dist/src/ui/themes/color-utils.test.d.ts +0 -6
  1726. package/dist/src/ui/themes/color-utils.test.js +0 -326
  1727. package/dist/src/ui/themes/color-utils.test.js.map +0 -1
  1728. package/dist/src/ui/themes/theme-manager.test.d.ts +0 -6
  1729. package/dist/src/ui/themes/theme-manager.test.js +0 -274
  1730. package/dist/src/ui/themes/theme-manager.test.js.map +0 -1
  1731. package/dist/src/ui/themes/theme.test.d.ts +0 -6
  1732. package/dist/src/ui/themes/theme.test.js +0 -171
  1733. package/dist/src/ui/themes/theme.test.js.map +0 -1
  1734. package/dist/src/ui/utils/CodeColorizer.test.d.ts +0 -6
  1735. package/dist/src/ui/utils/CodeColorizer.test.js +0 -74
  1736. package/dist/src/ui/utils/CodeColorizer.test.js.map +0 -1
  1737. package/dist/src/ui/utils/ConsolePatcher.test.d.ts +0 -6
  1738. package/dist/src/ui/utils/ConsolePatcher.test.js +0 -199
  1739. package/dist/src/ui/utils/ConsolePatcher.test.js.map +0 -1
  1740. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +0 -6
  1741. package/dist/src/ui/utils/MarkdownDisplay.test.js +0 -175
  1742. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +0 -1
  1743. package/dist/src/ui/utils/TableRenderer.test.d.ts +0 -1
  1744. package/dist/src/ui/utils/TableRenderer.test.js +0 -396
  1745. package/dist/src/ui/utils/TableRenderer.test.js.map +0 -1
  1746. package/dist/src/ui/utils/antigravityUtils.test.d.ts +0 -6
  1747. package/dist/src/ui/utils/antigravityUtils.test.js +0 -54
  1748. package/dist/src/ui/utils/antigravityUtils.test.js.map +0 -1
  1749. package/dist/src/ui/utils/borderStyles.test.d.ts +0 -6
  1750. package/dist/src/ui/utils/borderStyles.test.js +0 -172
  1751. package/dist/src/ui/utils/borderStyles.test.js.map +0 -1
  1752. package/dist/src/ui/utils/clipboardUtils.test.d.ts +0 -6
  1753. package/dist/src/ui/utils/clipboardUtils.test.js +0 -442
  1754. package/dist/src/ui/utils/clipboardUtils.test.js.map +0 -1
  1755. package/dist/src/ui/utils/clipboardUtils.windows.test.d.ts +0 -6
  1756. package/dist/src/ui/utils/clipboardUtils.windows.test.js +0 -56
  1757. package/dist/src/ui/utils/clipboardUtils.windows.test.js.map +0 -1
  1758. package/dist/src/ui/utils/commandUtils.test.d.ts +0 -6
  1759. package/dist/src/ui/utils/commandUtils.test.js +0 -511
  1760. package/dist/src/ui/utils/commandUtils.test.js.map +0 -1
  1761. package/dist/src/ui/utils/computeStats.test.d.ts +0 -6
  1762. package/dist/src/ui/utils/computeStats.test.js +0 -279
  1763. package/dist/src/ui/utils/computeStats.test.js.map +0 -1
  1764. package/dist/src/ui/utils/directoryUtils.test.d.ts +0 -6
  1765. package/dist/src/ui/utils/directoryUtils.test.js +0 -239
  1766. package/dist/src/ui/utils/directoryUtils.test.js.map +0 -1
  1767. package/dist/src/ui/utils/displayUtils.test.d.ts +0 -6
  1768. package/dist/src/ui/utils/displayUtils.test.js +0 -61
  1769. package/dist/src/ui/utils/displayUtils.test.js.map +0 -1
  1770. package/dist/src/ui/utils/formatters.test.d.ts +0 -6
  1771. package/dist/src/ui/utils/formatters.test.js +0 -152
  1772. package/dist/src/ui/utils/formatters.test.js.map +0 -1
  1773. package/dist/src/ui/utils/highlight.test.d.ts +0 -6
  1774. package/dist/src/ui/utils/highlight.test.js +0 -205
  1775. package/dist/src/ui/utils/highlight.test.js.map +0 -1
  1776. package/dist/src/ui/utils/input.test.d.ts +0 -6
  1777. package/dist/src/ui/utils/input.test.js +0 -44
  1778. package/dist/src/ui/utils/input.test.js.map +0 -1
  1779. package/dist/src/ui/utils/latexToUnicode.test.d.ts +0 -6
  1780. package/dist/src/ui/utils/latexToUnicode.test.js +0 -222
  1781. package/dist/src/ui/utils/latexToUnicode.test.js.map +0 -1
  1782. package/dist/src/ui/utils/markdownParsingUtils.test.d.ts +0 -6
  1783. package/dist/src/ui/utils/markdownParsingUtils.test.js +0 -201
  1784. package/dist/src/ui/utils/markdownParsingUtils.test.js.map +0 -1
  1785. package/dist/src/ui/utils/markdownUtilities.test.d.ts +0 -6
  1786. package/dist/src/ui/utils/markdownUtilities.test.js +0 -42
  1787. package/dist/src/ui/utils/markdownUtilities.test.js.map +0 -1
  1788. package/dist/src/ui/utils/memorySnapshot.test.d.ts +0 -6
  1789. package/dist/src/ui/utils/memorySnapshot.test.js +0 -62
  1790. package/dist/src/ui/utils/memorySnapshot.test.js.map +0 -1
  1791. package/dist/src/ui/utils/mouse.test.d.ts +0 -6
  1792. package/dist/src/ui/utils/mouse.test.js +0 -136
  1793. package/dist/src/ui/utils/mouse.test.js.map +0 -1
  1794. package/dist/src/ui/utils/pendingAttentionNotification.test.d.ts +0 -6
  1795. package/dist/src/ui/utils/pendingAttentionNotification.test.js +0 -79
  1796. package/dist/src/ui/utils/pendingAttentionNotification.test.js.map +0 -1
  1797. package/dist/src/ui/utils/rewindFileOps.test.d.ts +0 -6
  1798. package/dist/src/ui/utils/rewindFileOps.test.js +0 -375
  1799. package/dist/src/ui/utils/rewindFileOps.test.js.map +0 -1
  1800. package/dist/src/ui/utils/terminalCapabilityManager.test.d.ts +0 -6
  1801. package/dist/src/ui/utils/terminalCapabilityManager.test.js +0 -400
  1802. package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +0 -1
  1803. package/dist/src/ui/utils/terminalSetup.test.d.ts +0 -6
  1804. package/dist/src/ui/utils/terminalSetup.test.js +0 -201
  1805. package/dist/src/ui/utils/terminalSetup.test.js.map +0 -1
  1806. package/dist/src/ui/utils/textOutput.test.d.ts +0 -6
  1807. package/dist/src/ui/utils/textOutput.test.js +0 -80
  1808. package/dist/src/ui/utils/textOutput.test.js.map +0 -1
  1809. package/dist/src/ui/utils/textUtils.test.d.ts +0 -6
  1810. package/dist/src/ui/utils/textUtils.test.js +0 -430
  1811. package/dist/src/ui/utils/textUtils.test.js.map +0 -1
  1812. package/dist/src/ui/utils/toolLayoutUtils.test.d.ts +0 -6
  1813. package/dist/src/ui/utils/toolLayoutUtils.test.js +0 -187
  1814. package/dist/src/ui/utils/toolLayoutUtils.test.js.map +0 -1
  1815. package/dist/src/ui/utils/ui-sizing.test.d.ts +0 -6
  1816. package/dist/src/ui/utils/ui-sizing.test.js +0 -25
  1817. package/dist/src/ui/utils/ui-sizing.test.js.map +0 -1
  1818. package/dist/src/ui/utils/updateCheck.test.d.ts +0 -6
  1819. package/dist/src/ui/utils/updateCheck.test.js +0 -207
  1820. package/dist/src/ui/utils/updateCheck.test.js.map +0 -1
  1821. package/dist/src/ui/utils/urlSecurityUtils.test.d.ts +0 -6
  1822. package/dist/src/ui/utils/urlSecurityUtils.test.js +0 -49
  1823. package/dist/src/ui/utils/urlSecurityUtils.test.js.map +0 -1
  1824. package/dist/src/utils/activityLogger.test.d.ts +0 -6
  1825. package/dist/src/utils/activityLogger.test.js +0 -196
  1826. package/dist/src/utils/activityLogger.test.js.map +0 -1
  1827. package/dist/src/utils/agentSettings.test.d.ts +0 -6
  1828. package/dist/src/utils/agentSettings.test.js +0 -111
  1829. package/dist/src/utils/agentSettings.test.js.map +0 -1
  1830. package/dist/src/utils/agentUtils.test.d.ts +0 -6
  1831. package/dist/src/utils/agentUtils.test.js +0 -121
  1832. package/dist/src/utils/agentUtils.test.js.map +0 -1
  1833. package/dist/src/utils/cleanup.test.d.ts +0 -6
  1834. package/dist/src/utils/cleanup.test.js +0 -256
  1835. package/dist/src/utils/cleanup.test.js.map +0 -1
  1836. package/dist/src/utils/commands.test.d.ts +0 -6
  1837. package/dist/src/utils/commands.test.js +0 -194
  1838. package/dist/src/utils/commands.test.js.map +0 -1
  1839. package/dist/src/utils/commentJson.test.d.ts +0 -6
  1840. package/dist/src/utils/commentJson.test.js +0 -308
  1841. package/dist/src/utils/commentJson.test.js.map +0 -1
  1842. package/dist/src/utils/deepMerge.test.d.ts +0 -6
  1843. package/dist/src/utils/deepMerge.test.js +0 -211
  1844. package/dist/src/utils/deepMerge.test.js.map +0 -1
  1845. package/dist/src/utils/devtoolsService.test.d.ts +0 -6
  1846. package/dist/src/utils/devtoolsService.test.js +0 -346
  1847. package/dist/src/utils/devtoolsService.test.js.map +0 -1
  1848. package/dist/src/utils/dialogScopeUtils.test.d.ts +0 -6
  1849. package/dist/src/utils/dialogScopeUtils.test.js +0 -81
  1850. package/dist/src/utils/dialogScopeUtils.test.js.map +0 -1
  1851. package/dist/src/utils/envVarResolver.test.d.ts +0 -6
  1852. package/dist/src/utils/envVarResolver.test.js +0 -238
  1853. package/dist/src/utils/envVarResolver.test.js.map +0 -1
  1854. package/dist/src/utils/errors.test.d.ts +0 -6
  1855. package/dist/src/utils/errors.test.js +0 -420
  1856. package/dist/src/utils/errors.test.js.map +0 -1
  1857. package/dist/src/utils/events.test.d.ts +0 -6
  1858. package/dist/src/utils/events.test.js +0 -24
  1859. package/dist/src/utils/events.test.js.map +0 -1
  1860. package/dist/src/utils/featureToggleUtils.test.d.ts +0 -6
  1861. package/dist/src/utils/featureToggleUtils.test.js +0 -126
  1862. package/dist/src/utils/featureToggleUtils.test.js.map +0 -1
  1863. package/dist/src/utils/gitUtils.test.d.ts +0 -6
  1864. package/dist/src/utils/gitUtils.test.js +0 -172
  1865. package/dist/src/utils/gitUtils.test.js.map +0 -1
  1866. package/dist/src/utils/handleAutoUpdate.test.d.ts +0 -6
  1867. package/dist/src/utils/handleAutoUpdate.test.js +0 -399
  1868. package/dist/src/utils/handleAutoUpdate.test.js.map +0 -1
  1869. package/dist/src/utils/hookSettings.test.d.ts +0 -6
  1870. package/dist/src/utils/hookSettings.test.js +0 -117
  1871. package/dist/src/utils/hookSettings.test.js.map +0 -1
  1872. package/dist/src/utils/hookUtils.test.d.ts +0 -6
  1873. package/dist/src/utils/hookUtils.test.js +0 -113
  1874. package/dist/src/utils/hookUtils.test.js.map +0 -1
  1875. package/dist/src/utils/installationInfo.test.d.ts +0 -6
  1876. package/dist/src/utils/installationInfo.test.js +0 -322
  1877. package/dist/src/utils/installationInfo.test.js.map +0 -1
  1878. package/dist/src/utils/jsonoutput.test.d.ts +0 -6
  1879. package/dist/src/utils/jsonoutput.test.js +0 -74
  1880. package/dist/src/utils/jsonoutput.test.js.map +0 -1
  1881. package/dist/src/utils/logCleanup.test.d.ts +0 -6
  1882. package/dist/src/utils/logCleanup.test.js +0 -87
  1883. package/dist/src/utils/logCleanup.test.js.map +0 -1
  1884. package/dist/src/utils/math.test.d.ts +0 -6
  1885. package/dist/src/utils/math.test.js +0 -23
  1886. package/dist/src/utils/math.test.js.map +0 -1
  1887. package/dist/src/utils/persistentState.test.d.ts +0 -6
  1888. package/dist/src/utils/persistentState.test.js +0 -68
  1889. package/dist/src/utils/persistentState.test.js.map +0 -1
  1890. package/dist/src/utils/processUtils.test.d.ts +0 -6
  1891. package/dist/src/utils/processUtils.test.js +0 -150
  1892. package/dist/src/utils/processUtils.test.js.map +0 -1
  1893. package/dist/src/utils/readStdin.test.d.ts +0 -6
  1894. package/dist/src/utils/readStdin.test.js +0 -149
  1895. package/dist/src/utils/readStdin.test.js.map +0 -1
  1896. package/dist/src/utils/readStdin_safety.test.d.ts +0 -6
  1897. package/dist/src/utils/readStdin_safety.test.js +0 -68
  1898. package/dist/src/utils/readStdin_safety.test.js.map +0 -1
  1899. package/dist/src/utils/relaunch.test.d.ts +0 -6
  1900. package/dist/src/utils/relaunch.test.js +0 -275
  1901. package/dist/src/utils/relaunch.test.js.map +0 -1
  1902. package/dist/src/utils/resolvePath.test.d.ts +0 -6
  1903. package/dist/src/utils/resolvePath.test.js +0 -34
  1904. package/dist/src/utils/resolvePath.test.js.map +0 -1
  1905. package/dist/src/utils/sandbox.test.d.ts +0 -6
  1906. package/dist/src/utils/sandbox.test.js +0 -725
  1907. package/dist/src/utils/sandbox.test.js.map +0 -1
  1908. package/dist/src/utils/sandboxUtils.test.d.ts +0 -6
  1909. package/dist/src/utils/sandboxUtils.test.js +0 -190
  1910. package/dist/src/utils/sandboxUtils.test.js.map +0 -1
  1911. package/dist/src/utils/sessionCleanup.integration.test.d.ts +0 -6
  1912. package/dist/src/utils/sessionCleanup.integration.test.js +0 -276
  1913. package/dist/src/utils/sessionCleanup.integration.test.js.map +0 -1
  1914. package/dist/src/utils/sessionCleanup.test.d.ts +0 -6
  1915. package/dist/src/utils/sessionCleanup.test.js +0 -829
  1916. package/dist/src/utils/sessionCleanup.test.js.map +0 -1
  1917. package/dist/src/utils/sessionUtils.test.d.ts +0 -6
  1918. package/dist/src/utils/sessionUtils.test.js +0 -815
  1919. package/dist/src/utils/sessionUtils.test.js.map +0 -1
  1920. package/dist/src/utils/sessions.test.d.ts +0 -6
  1921. package/dist/src/utils/sessions.test.js +0 -580
  1922. package/dist/src/utils/sessions.test.js.map +0 -1
  1923. package/dist/src/utils/settingsUtils.test.d.ts +0 -6
  1924. package/dist/src/utils/settingsUtils.test.js +0 -673
  1925. package/dist/src/utils/settingsUtils.test.js.map +0 -1
  1926. package/dist/src/utils/skillSettings.test.d.ts +0 -6
  1927. package/dist/src/utils/skillSettings.test.js +0 -142
  1928. package/dist/src/utils/skillSettings.test.js.map +0 -1
  1929. package/dist/src/utils/skillUtils.test.d.ts +0 -6
  1930. package/dist/src/utils/skillUtils.test.js +0 -248
  1931. package/dist/src/utils/skillUtils.test.js.map +0 -1
  1932. package/dist/src/utils/startupWarnings.test.d.ts +0 -6
  1933. package/dist/src/utils/startupWarnings.test.js +0 -61
  1934. package/dist/src/utils/startupWarnings.test.js.map +0 -1
  1935. package/dist/src/utils/terminalNotifications.test.d.ts +0 -6
  1936. package/dist/src/utils/terminalNotifications.test.js +0 -219
  1937. package/dist/src/utils/terminalNotifications.test.js.map +0 -1
  1938. package/dist/src/utils/terminalTheme.test.d.ts +0 -6
  1939. package/dist/src/utils/terminalTheme.test.js +0 -91
  1940. package/dist/src/utils/terminalTheme.test.js.map +0 -1
  1941. package/dist/src/utils/tierUtils.test.d.ts +0 -6
  1942. package/dist/src/utils/tierUtils.test.js +0 -25
  1943. package/dist/src/utils/tierUtils.test.js.map +0 -1
  1944. package/dist/src/utils/toolOutputCleanup.test.d.ts +0 -6
  1945. package/dist/src/utils/toolOutputCleanup.test.js +0 -280
  1946. package/dist/src/utils/toolOutputCleanup.test.js.map +0 -1
  1947. package/dist/src/utils/updateEventEmitter.test.d.ts +0 -6
  1948. package/dist/src/utils/updateEventEmitter.test.js +0 -18
  1949. package/dist/src/utils/updateEventEmitter.test.js.map +0 -1
  1950. package/dist/src/utils/userStartupWarnings.test.d.ts +0 -6
  1951. package/dist/src/utils/userStartupWarnings.test.js +0 -225
  1952. package/dist/src/utils/userStartupWarnings.test.js.map +0 -1
  1953. package/dist/src/utils/windowTitle.test.d.ts +0 -6
  1954. package/dist/src/utils/windowTitle.test.js +0 -216
  1955. package/dist/src/utils/windowTitle.test.js.map +0 -1
  1956. package/dist/src/utils/worktreeSetup.test.d.ts +0 -6
  1957. package/dist/src/utils/worktreeSetup.test.js +0 -89
  1958. package/dist/src/utils/worktreeSetup.test.js.map +0 -1
  1959. package/dist/src/validateNonInterActiveAuth.test.d.ts +0 -6
  1960. package/dist/src/validateNonInterActiveAuth.test.js +0 -319
  1961. package/dist/src/validateNonInterActiveAuth.test.js.map +0 -1
@@ -1,3124 +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, ASK_USER_TOOL_NAME, debugLogger, ApprovalMode, Storage, } from '@google/gemini-cli-core';
10
- import { loadCliConfig, parseArguments } from './config.js';
11
- import { createTestMergedSettings, } from './settings.js';
12
- import * as ServerConfig from '@google/gemini-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('@google/gemini-cli-core', async () => {
70
- const actualServer = await vi.importActual('@google/gemini-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
- DEFAULT_MEMORY_FILE_FILTERING_OPTIONS: {
82
- respectGitIgnore: false,
83
- respectGeminiIgnore: true,
84
- customIgnoreFilePaths: [],
85
- },
86
- DEFAULT_FILE_FILTERING_OPTIONS: {
87
- respectGitIgnore: true,
88
- respectGeminiIgnore: true,
89
- customIgnoreFilePaths: [],
90
- },
91
- createPolicyEngineConfig: vi.fn(async (_settings, approvalMode, _workspacePoliciesDir, interactive) => ({
92
- rules: [],
93
- checkers: [],
94
- defaultDecision: interactive
95
- ? ServerConfig.PolicyDecision.ASK_USER
96
- : ServerConfig.PolicyDecision.DENY,
97
- approvalMode: approvalMode ?? ServerConfig.ApprovalMode.DEFAULT,
98
- nonInteractive: !interactive,
99
- })),
100
- getAdminErrorMessage: vi.fn((_feature) => `YOLO mode is disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli`),
101
- isHeadlessMode: vi.fn((opts) => {
102
- if (process.env['VITEST'] === 'true') {
103
- return (!!opts?.prompt ||
104
- (!!process.stdin && !process.stdin.isTTY) ||
105
- (!!process.stdout && !process.stdout.isTTY));
106
- }
107
- return (!!opts?.prompt ||
108
- process.env['CI'] === 'true' ||
109
- process.env['GITHUB_ACTIONS'] === 'true' ||
110
- (!!process.stdin && !process.stdin.isTTY) ||
111
- (!!process.stdout && !process.stdout.isTTY));
112
- }),
113
- };
114
- });
115
- vi.mock('./extension-manager.js', () => {
116
- const ExtensionManager = vi.fn();
117
- ExtensionManager.prototype.loadExtensions = vi.fn();
118
- ExtensionManager.prototype.getExtensions = vi.fn().mockReturnValue([]);
119
- return { ExtensionManager };
120
- });
121
- // Global setup to ensure clean environment for all tests in this file
122
- const originalArgv = process.argv;
123
- const originalGeminiModel = process.env['GEMINI_MODEL'];
124
- const originalStdoutIsTTY = process.stdout.isTTY;
125
- const originalStdinIsTTY = process.stdin.isTTY;
126
- beforeEach(() => {
127
- delete process.env['GEMINI_MODEL'];
128
- // Restore ExtensionManager mocks by re-assigning them
129
- ExtensionManager.prototype.getExtensions = vi.fn().mockReturnValue([]);
130
- ExtensionManager.prototype.loadExtensions = vi
131
- .fn()
132
- .mockResolvedValue(undefined);
133
- // Default to interactive mode for tests unless otherwise specified
134
- Object.defineProperty(process.stdout, 'isTTY', {
135
- value: true,
136
- configurable: true,
137
- writable: true,
138
- });
139
- Object.defineProperty(process.stdin, 'isTTY', {
140
- value: true,
141
- configurable: true,
142
- writable: true,
143
- });
144
- });
145
- afterEach(() => {
146
- process.argv = originalArgv;
147
- if (originalGeminiModel !== undefined) {
148
- process.env['GEMINI_MODEL'] = originalGeminiModel;
149
- }
150
- else {
151
- delete process.env['GEMINI_MODEL'];
152
- }
153
- Object.defineProperty(process.stdout, 'isTTY', {
154
- value: originalStdoutIsTTY,
155
- configurable: true,
156
- writable: true,
157
- });
158
- Object.defineProperty(process.stdin, 'isTTY', {
159
- value: originalStdinIsTTY,
160
- configurable: true,
161
- writable: true,
162
- });
163
- });
164
- describe('parseArguments', () => {
165
- afterEach(() => {
166
- vi.restoreAllMocks();
167
- });
168
- it('should fail if multiple session flags are provided', async () => {
169
- process.argv = [
170
- 'node',
171
- 'script.js',
172
- '--resume',
173
- '--session-id',
174
- 'test-uuid-1234',
175
- ];
176
- const mockConsoleError = vi
177
- .spyOn(console, 'error')
178
- .mockImplementation(() => { });
179
- vi.spyOn(process, 'exit').mockImplementation(() => {
180
- throw new Error('process.exit called');
181
- });
182
- await expect(parseArguments(createTestMergedSettings())).rejects.toThrow('process.exit called');
183
- expect(mockConsoleError).toHaveBeenCalledWith(expect.stringContaining('The flags --resume, --session-id, and --session-file are mutually exclusive. Please provide only one.'));
184
- });
185
- it('should parse --session-id option correctly', async () => {
186
- process.argv = ['node', 'script.js', '--session-id', 'test-uuid-1234'];
187
- vi.spyOn(process, 'exit').mockImplementation(() => {
188
- throw new Error('process.exit called');
189
- });
190
- const parsedArgs = await parseArguments(createTestMergedSettings());
191
- expect(parsedArgs.sessionId).toBe('test-uuid-1234');
192
- });
193
- describe('worktree', () => {
194
- it('should parse --worktree flag when provided with a name', async () => {
195
- process.argv = ['node', 'script.js', '--worktree', 'my-feature'];
196
- const settings = createTestMergedSettings();
197
- settings.experimental.worktrees = true;
198
- const argv = await parseArguments(settings);
199
- expect(argv.worktree).toBe('my-feature');
200
- });
201
- it('should generate a random name when --worktree is provided without a name', async () => {
202
- process.argv = ['node', 'script.js', '--worktree'];
203
- const settings = createTestMergedSettings();
204
- settings.experimental.worktrees = true;
205
- const argv = await parseArguments(settings);
206
- expect(argv.worktree).toBeDefined();
207
- expect(argv.worktree).not.toBe('');
208
- expect(typeof argv.worktree).toBe('string');
209
- });
210
- it('should throw an error when --worktree is used but experimental.worktrees is not enabled', async () => {
211
- process.argv = ['node', 'script.js', '--worktree', 'feature'];
212
- const settings = createTestMergedSettings();
213
- settings.experimental.worktrees = false;
214
- vi.spyOn(process, 'exit').mockImplementation(() => {
215
- throw new Error('process.exit called');
216
- });
217
- const mockConsoleError = vi
218
- .spyOn(console, 'error')
219
- .mockImplementation(() => { });
220
- await expect(parseArguments(settings)).rejects.toThrow('process.exit called');
221
- expect(mockConsoleError).toHaveBeenCalledWith(expect.stringContaining('The --worktree flag is only available when experimental.worktrees is enabled in your settings.'));
222
- });
223
- });
224
- it.each([
225
- {
226
- description: 'long flags',
227
- argv: [
228
- 'node',
229
- 'script.js',
230
- '--prompt',
231
- 'test prompt',
232
- '--prompt-interactive',
233
- 'interactive prompt',
234
- ],
235
- },
236
- {
237
- description: 'short flags',
238
- argv: [
239
- 'node',
240
- 'script.js',
241
- '-p',
242
- 'test prompt',
243
- '-i',
244
- 'interactive prompt',
245
- ],
246
- },
247
- ])('should throw an error when using conflicting prompt flags ($description)', async ({ argv }) => {
248
- process.argv = argv;
249
- vi.spyOn(process, 'exit').mockImplementation(() => {
250
- throw new Error('process.exit called');
251
- });
252
- const mockConsoleError = vi
253
- .spyOn(console, 'error')
254
- .mockImplementation(() => { });
255
- await expect(parseArguments(createTestMergedSettings())).rejects.toThrow('process.exit called');
256
- expect(mockConsoleError).toHaveBeenCalledWith(expect.stringContaining('Cannot use both --prompt (-p) and --prompt-interactive (-i) together'));
257
- });
258
- describe('isCommand middleware', () => {
259
- it.each([
260
- { cmd: 'mcp list', expected: true },
261
- { cmd: 'extensions list', expected: true },
262
- { cmd: 'extension list', expected: true },
263
- { cmd: 'skills list', expected: true },
264
- { cmd: 'skill list', expected: true },
265
- { cmd: 'hooks migrate', expected: true },
266
- { cmd: 'hook migrate', expected: true },
267
- { cmd: 'gemma status', expected: true },
268
- { cmd: 'some query', expected: undefined },
269
- { cmd: 'hello world', expected: undefined },
270
- ])('should set isCommand to $expected for "$cmd"', async ({ cmd, expected }) => {
271
- process.argv = ['node', 'script.js', ...cmd.split(' ')];
272
- const settings = createTestMergedSettings({
273
- admin: {
274
- mcp: { enabled: true },
275
- },
276
- experimental: {
277
- extensionManagement: true,
278
- },
279
- skills: {
280
- enabled: true,
281
- },
282
- hooksConfig: {
283
- enabled: true,
284
- },
285
- });
286
- const parsedArgs = await parseArguments(settings);
287
- expect(parsedArgs.isCommand).toBe(expected);
288
- });
289
- });
290
- it.each([
291
- {
292
- description: 'should allow --prompt without --prompt-interactive',
293
- argv: ['node', 'script.js', '--prompt', 'test prompt'],
294
- expected: { prompt: 'test prompt', promptInteractive: undefined },
295
- },
296
- {
297
- description: 'should allow --prompt-interactive without --prompt',
298
- argv: ['node', 'script.js', '--prompt-interactive', 'interactive prompt'],
299
- expected: { prompt: undefined, promptInteractive: 'interactive prompt' },
300
- },
301
- {
302
- description: 'should allow -i flag as alias for --prompt-interactive',
303
- argv: ['node', 'script.js', '-i', 'interactive prompt'],
304
- expected: { prompt: undefined, promptInteractive: 'interactive prompt' },
305
- },
306
- ])('$description', async ({ argv, expected }) => {
307
- process.argv = argv;
308
- const parsedArgs = await parseArguments(createTestMergedSettings());
309
- expect(parsedArgs.prompt).toBe(expected.prompt);
310
- expect(parsedArgs.promptInteractive).toBe(expected.promptInteractive);
311
- });
312
- describe('positional arguments and @commands', () => {
313
- beforeEach(() => {
314
- // Default to headless mode for these tests as they mostly expect one-shot behavior
315
- process.stdin.isTTY = false;
316
- Object.defineProperty(process.stdout, 'isTTY', {
317
- value: false,
318
- configurable: true,
319
- writable: true,
320
- });
321
- });
322
- it.each([
323
- {
324
- description: 'should convert positional query argument to prompt by default',
325
- argv: ['node', 'script.js', 'Hi Gemini'],
326
- expectedQuery: 'Hi Gemini',
327
- expectedModel: undefined,
328
- debug: false,
329
- },
330
- {
331
- description: 'should map @path to prompt (one-shot) when it starts with @',
332
- argv: ['node', 'script.js', '@path ./file.md'],
333
- expectedQuery: '@path ./file.md',
334
- expectedModel: undefined,
335
- debug: false,
336
- },
337
- {
338
- description: 'should map @path to prompt even when config flags are present',
339
- argv: [
340
- 'node',
341
- 'script.js',
342
- '@path',
343
- './file.md',
344
- '--model',
345
- 'gemini-2.5-pro',
346
- ],
347
- expectedQuery: '@path ./file.md',
348
- expectedModel: 'gemini-2.5-pro',
349
- debug: false,
350
- },
351
- {
352
- description: 'maps unquoted positional @path + arg to prompt (one-shot)',
353
- argv: ['node', 'script.js', '@path', './file.md'],
354
- expectedQuery: '@path ./file.md',
355
- expectedModel: undefined,
356
- debug: false,
357
- },
358
- {
359
- description: 'should handle multiple @path arguments in a single command (one-shot)',
360
- argv: [
361
- 'node',
362
- 'script.js',
363
- '@path',
364
- './file1.md',
365
- '@path',
366
- './file2.md',
367
- ],
368
- expectedQuery: '@path ./file1.md @path ./file2.md',
369
- expectedModel: undefined,
370
- debug: false,
371
- },
372
- {
373
- description: 'should handle mixed quoted and unquoted @path arguments (one-shot)',
374
- argv: [
375
- 'node',
376
- 'script.js',
377
- '@path ./file1.md',
378
- '@path',
379
- './file2.md',
380
- 'additional text',
381
- ],
382
- expectedQuery: '@path ./file1.md @path ./file2.md additional text',
383
- expectedModel: undefined,
384
- debug: false,
385
- },
386
- {
387
- description: 'should map @path to prompt with ambient flags (debug)',
388
- argv: ['node', 'script.js', '@path', './file.md', '--debug'],
389
- expectedQuery: '@path ./file.md',
390
- expectedModel: undefined,
391
- debug: true,
392
- },
393
- {
394
- description: 'should map @include to prompt (one-shot)',
395
- argv: ['node', 'script.js', '@include src/'],
396
- expectedQuery: '@include src/',
397
- expectedModel: undefined,
398
- debug: false,
399
- },
400
- {
401
- description: 'should map @search to prompt (one-shot)',
402
- argv: ['node', 'script.js', '@search pattern'],
403
- expectedQuery: '@search pattern',
404
- expectedModel: undefined,
405
- debug: false,
406
- },
407
- {
408
- description: 'should map @web to prompt (one-shot)',
409
- argv: ['node', 'script.js', '@web query'],
410
- expectedQuery: '@web query',
411
- expectedModel: undefined,
412
- debug: false,
413
- },
414
- {
415
- description: 'should map @git to prompt (one-shot)',
416
- argv: ['node', 'script.js', '@git status'],
417
- expectedQuery: '@git status',
418
- expectedModel: undefined,
419
- debug: false,
420
- },
421
- {
422
- description: 'should handle @command with leading whitespace',
423
- argv: ['node', 'script.js', ' @path ./file.md'],
424
- expectedQuery: ' @path ./file.md',
425
- expectedModel: undefined,
426
- debug: false,
427
- },
428
- ])('$description', async ({ argv, expectedQuery, expectedModel, debug }) => {
429
- process.argv = argv;
430
- const parsedArgs = await parseArguments(createTestMergedSettings());
431
- expect(parsedArgs.query).toBe(expectedQuery);
432
- expect(parsedArgs.prompt).toBe(expectedQuery);
433
- expect(parsedArgs.promptInteractive).toBeUndefined();
434
- if (expectedModel) {
435
- expect(parsedArgs.model).toBe(expectedModel);
436
- }
437
- if (debug) {
438
- expect(parsedArgs.debug).toBe(true);
439
- }
440
- });
441
- it('should include a startup message when converting positional query to interactive prompt', async () => {
442
- process.stdin.isTTY = true;
443
- Object.defineProperty(process.stdout, 'isTTY', {
444
- value: true,
445
- configurable: true,
446
- writable: true,
447
- });
448
- process.argv = ['node', 'script.js', 'hello'];
449
- try {
450
- const argv = await parseArguments(createTestMergedSettings());
451
- expect(argv.startupMessages).toContain('Positional arguments now default to interactive mode. To run in non-interactive mode, use the --prompt (-p) flag.');
452
- }
453
- finally {
454
- // beforeEach handles resetting
455
- }
456
- });
457
- });
458
- it.each([
459
- {
460
- description: 'long flags',
461
- argv: ['node', 'script.js', '--yolo', '--approval-mode', 'default'],
462
- },
463
- {
464
- description: 'short flags',
465
- argv: ['node', 'script.js', '-y', '--approval-mode', 'yolo'],
466
- },
467
- ])('should throw an error when using conflicting yolo/approval-mode flags ($description)', async ({ argv }) => {
468
- process.argv = argv;
469
- vi.spyOn(process, 'exit').mockImplementation(() => {
470
- throw new Error('process.exit called');
471
- });
472
- const mockConsoleError = vi
473
- .spyOn(console, 'error')
474
- .mockImplementation(() => { });
475
- await expect(parseArguments(createTestMergedSettings())).rejects.toThrow('process.exit called');
476
- expect(mockConsoleError).toHaveBeenCalledWith(expect.stringContaining('Cannot use both --yolo (-y) and --approval-mode together. Use --approval-mode=yolo instead.'));
477
- });
478
- it.each([
479
- {
480
- description: 'should allow --approval-mode without --yolo',
481
- argv: ['node', 'script.js', '--approval-mode', 'auto_edit'],
482
- expected: { approvalMode: 'auto_edit', yolo: false },
483
- },
484
- {
485
- description: 'should allow --yolo without --approval-mode',
486
- argv: ['node', 'script.js', '--yolo'],
487
- expected: { approvalMode: undefined, yolo: true },
488
- },
489
- ])('$description', async ({ argv, expected }) => {
490
- process.argv = argv;
491
- const parsedArgs = await parseArguments(createTestMergedSettings());
492
- expect(parsedArgs.approvalMode).toBe(expected.approvalMode);
493
- expect(parsedArgs.yolo).toBe(expected.yolo);
494
- });
495
- it('should reject invalid --approval-mode values', async () => {
496
- process.argv = ['node', 'script.js', '--approval-mode', 'invalid'];
497
- vi.spyOn(process, 'exit').mockImplementation(() => {
498
- throw new Error('process.exit called');
499
- });
500
- const mockConsoleError = vi
501
- .spyOn(console, 'error')
502
- .mockImplementation(() => { });
503
- const debugErrorSpy = vi
504
- .spyOn(debugLogger, 'error')
505
- .mockImplementation(() => { });
506
- await expect(parseArguments(createTestMergedSettings())).rejects.toThrow('process.exit called');
507
- expect(debugErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Invalid values:'));
508
- expect(mockConsoleError).toHaveBeenCalled();
509
- });
510
- it('should allow resuming a session without prompt argument in non-interactive mode (expecting stdin)', async () => {
511
- const originalIsTTY = process.stdin.isTTY;
512
- process.stdin.isTTY = false;
513
- process.argv = ['node', 'script.js', '--resume', 'session-id'];
514
- try {
515
- const argv = await parseArguments(createTestMergedSettings());
516
- expect(argv.resume).toBe('session-id');
517
- }
518
- finally {
519
- process.stdin.isTTY = originalIsTTY;
520
- }
521
- });
522
- it('should return RESUME_LATEST constant when --resume is passed without a value', async () => {
523
- const originalIsTTY = process.stdin.isTTY;
524
- process.stdin.isTTY = true; // Make it interactive to avoid validation error
525
- process.argv = ['node', 'script.js', '--resume'];
526
- try {
527
- const argv = await parseArguments(createTestMergedSettings());
528
- expect(argv.resume).toBe(RESUME_LATEST);
529
- expect(argv.resume).toBe('latest');
530
- }
531
- finally {
532
- process.stdin.isTTY = originalIsTTY;
533
- }
534
- });
535
- it('should support comma-separated values for --allowed-tools', async () => {
536
- process.argv = [
537
- 'node',
538
- 'script.js',
539
- '--allowed-tools',
540
- 'read_file,ShellTool(git status)',
541
- ];
542
- const argv = await parseArguments(createTestMergedSettings());
543
- expect(argv.allowedTools).toEqual(['read_file', 'ShellTool(git status)']);
544
- });
545
- it('should support comma-separated values for --allowed-mcp-server-names', async () => {
546
- process.argv = [
547
- 'node',
548
- 'script.js',
549
- '--allowed-mcp-server-names',
550
- 'server1,server2',
551
- ];
552
- const argv = await parseArguments(createTestMergedSettings());
553
- expect(argv.allowedMcpServerNames).toEqual(['server1', 'server2']);
554
- });
555
- it('should support comma-separated values for --extensions', async () => {
556
- process.argv = ['node', 'script.js', '--extensions', 'ext1,ext2'];
557
- const argv = await parseArguments(createTestMergedSettings());
558
- expect(argv.extensions).toEqual(['ext1', 'ext2']);
559
- });
560
- it('should correctly parse positional arguments when flags with arguments are present', async () => {
561
- process.argv = [
562
- 'node',
563
- 'script.js',
564
- '--model',
565
- 'test-model-string',
566
- 'my-positional-arg',
567
- ];
568
- const argv = await parseArguments(createTestMergedSettings());
569
- expect(argv.model).toBe('test-model-string');
570
- expect(argv.query).toBe('my-positional-arg');
571
- });
572
- it('should handle long positional prompts with multiple flags', async () => {
573
- process.argv = [
574
- 'node',
575
- 'script.js',
576
- '-e',
577
- 'none',
578
- '--approval-mode=auto_edit',
579
- '--allowed-tools=ShellTool',
580
- '--allowed-tools=ShellTool(whoami)',
581
- '--allowed-tools=ShellTool(wc)',
582
- '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.',
583
- ];
584
- const argv = await parseArguments(createTestMergedSettings());
585
- expect(argv.extensions).toEqual(['none']);
586
- expect(argv.approvalMode).toBe('auto_edit');
587
- expect(argv.allowedTools).toEqual([
588
- 'ShellTool',
589
- 'ShellTool(whoami)',
590
- 'ShellTool(wc)',
591
- ]);
592
- 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.');
593
- });
594
- it('should set isCommand to true for mcp command', async () => {
595
- process.argv = ['node', 'script.js', 'mcp', 'list'];
596
- const argv = await parseArguments(createTestMergedSettings());
597
- expect(argv.isCommand).toBe(true);
598
- });
599
- it('should set isCommand to true for extensions command', async () => {
600
- process.argv = ['node', 'script.js', 'extensions', 'list'];
601
- // Extensions command uses experimental settings
602
- const settings = createTestMergedSettings({
603
- experimental: { extensionManagement: true },
604
- });
605
- const argv = await parseArguments(settings);
606
- expect(argv.isCommand).toBe(true);
607
- });
608
- it('should set isCommand to true for skills command', async () => {
609
- process.argv = ['node', 'script.js', 'skills', 'list'];
610
- // Skills command enabled by default or via experimental
611
- const settings = createTestMergedSettings({
612
- skills: { enabled: true },
613
- });
614
- const argv = await parseArguments(settings);
615
- expect(argv.isCommand).toBe(true);
616
- });
617
- it('should set isCommand to true for hooks command', async () => {
618
- process.argv = ['node', 'script.js', 'hooks', 'migrate'];
619
- // Hooks command enabled via hooksConfig settings
620
- const settings = createTestMergedSettings({
621
- hooksConfig: { enabled: true },
622
- });
623
- const argv = await parseArguments(settings);
624
- expect(argv.isCommand).toBe(true);
625
- });
626
- it('should set isCommand to true for gemma command', async () => {
627
- process.argv = ['node', 'script.js', 'gemma', 'status'];
628
- const argv = await parseArguments(createTestMergedSettings());
629
- expect(argv.isCommand).toBe(true);
630
- });
631
- });
632
- describe('loadCliConfig', () => {
633
- beforeEach(() => {
634
- vi.resetAllMocks();
635
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
636
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
637
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
638
- });
639
- afterEach(() => {
640
- vi.unstubAllEnvs();
641
- vi.restoreAllMocks();
642
- });
643
- describe('Model resolution', () => {
644
- it('should handle multiple --model flags by taking the last one', async () => {
645
- const argv = {
646
- query: undefined,
647
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
648
- model: ['gemini-1.5-pro', 'gemini-2.0-flash'],
649
- sandbox: undefined,
650
- debug: false,
651
- prompt: undefined,
652
- promptInteractive: undefined,
653
- yolo: undefined,
654
- approvalMode: undefined,
655
- policy: undefined,
656
- adminPolicy: undefined,
657
- allowedMcpServerNames: undefined,
658
- allowedTools: undefined,
659
- extensions: undefined,
660
- listExtensions: false,
661
- listSessions: false,
662
- deleteSession: undefined,
663
- screenReader: undefined,
664
- isCommand: false,
665
- rawOutput: false,
666
- acceptRawOutputRisk: false,
667
- startupMessages: [],
668
- resume: undefined,
669
- includeDirectories: [],
670
- useWriteTodos: false,
671
- outputFormat: undefined,
672
- fakeResponses: undefined,
673
- recordResponses: undefined,
674
- skipTrust: false,
675
- };
676
- const settings = createTestMergedSettings();
677
- const config = await loadCliConfig(settings, 'test-session', argv, {
678
- cwd: process.cwd(),
679
- });
680
- expect(config.getModel()).toBe('gemini-2.0-flash');
681
- });
682
- it('should handle non-string model flags by coercing to string', async () => {
683
- const argv = {
684
- query: undefined,
685
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
686
- model: true,
687
- sandbox: undefined,
688
- debug: false,
689
- prompt: undefined,
690
- promptInteractive: undefined,
691
- yolo: undefined,
692
- approvalMode: undefined,
693
- policy: undefined,
694
- adminPolicy: undefined,
695
- allowedMcpServerNames: undefined,
696
- allowedTools: undefined,
697
- extensions: undefined,
698
- listExtensions: false,
699
- listSessions: false,
700
- deleteSession: undefined,
701
- screenReader: undefined,
702
- isCommand: false,
703
- rawOutput: false,
704
- acceptRawOutputRisk: false,
705
- startupMessages: [],
706
- resume: undefined,
707
- includeDirectories: [],
708
- useWriteTodos: false,
709
- outputFormat: undefined,
710
- fakeResponses: undefined,
711
- recordResponses: undefined,
712
- skipTrust: false,
713
- };
714
- const settings = createTestMergedSettings();
715
- const config = await loadCliConfig(settings, 'test-session', argv, {
716
- cwd: process.cwd(),
717
- });
718
- expect(config.getModel()).toBe('true');
719
- });
720
- });
721
- describe('Proxy configuration', () => {
722
- const originalProxyEnv = {};
723
- const proxyEnvVars = [
724
- 'HTTP_PROXY',
725
- 'HTTPS_PROXY',
726
- 'http_proxy',
727
- 'https_proxy',
728
- ];
729
- beforeEach(() => {
730
- for (const key of proxyEnvVars) {
731
- originalProxyEnv[key] = process.env[key];
732
- delete process.env[key];
733
- }
734
- });
735
- afterEach(() => {
736
- for (const key of proxyEnvVars) {
737
- if (originalProxyEnv[key]) {
738
- process.env[key] = originalProxyEnv[key];
739
- }
740
- else {
741
- delete process.env[key];
742
- }
743
- }
744
- });
745
- it(`should leave proxy to empty by default`, async () => {
746
- process.argv = ['node', 'script.js'];
747
- const argv = await parseArguments(createTestMergedSettings());
748
- const settings = createTestMergedSettings();
749
- const config = await loadCliConfig(settings, 'test-session', argv);
750
- expect(config.getProxy()).toBeFalsy();
751
- });
752
- const proxy_url = 'http://localhost:7890';
753
- const testCases = [
754
- {
755
- input: {
756
- env_name: 'https_proxy',
757
- proxy_url,
758
- },
759
- expected: proxy_url,
760
- },
761
- {
762
- input: {
763
- env_name: 'http_proxy',
764
- proxy_url,
765
- },
766
- expected: proxy_url,
767
- },
768
- {
769
- input: {
770
- env_name: 'HTTPS_PROXY',
771
- proxy_url,
772
- },
773
- expected: proxy_url,
774
- },
775
- {
776
- input: {
777
- env_name: 'HTTP_PROXY',
778
- proxy_url,
779
- },
780
- expected: proxy_url,
781
- },
782
- ];
783
- testCases.forEach(({ input, expected }) => {
784
- it(`should set proxy to ${expected} according to environment variable [${input.env_name}]`, async () => {
785
- vi.stubEnv(input.env_name, input.proxy_url);
786
- process.argv = ['node', 'script.js'];
787
- const argv = await parseArguments(createTestMergedSettings());
788
- const settings = createTestMergedSettings();
789
- const config = await loadCliConfig(settings, 'test-session', argv);
790
- expect(config.getProxy()).toBe(expected);
791
- });
792
- });
793
- });
794
- it('should add IDE workspace folders from GEMINI_CLI_IDE_WORKSPACE_PATH to include directories', async () => {
795
- vi.stubEnv('GEMINI_CLI_IDE_WORKSPACE_PATH', ['/project/folderA', '/project/folderB'].join(path.delimiter));
796
- process.argv = ['node', 'script.js'];
797
- const argv = await parseArguments(createTestMergedSettings());
798
- const settings = createTestMergedSettings();
799
- const config = await loadCliConfig(settings, 'test-session', argv);
800
- const dirs = config.getPendingIncludeDirectories();
801
- expect(dirs).toContain('/project/folderA');
802
- expect(dirs).toContain('/project/folderB');
803
- });
804
- it('should skip inaccessible workspace folders from GEMINI_CLI_IDE_WORKSPACE_PATH', async () => {
805
- vi.spyOn(ServerConfig, 'resolveToRealPath').mockImplementation((p) => {
806
- if (p.toString().includes('restricted')) {
807
- const err = new Error('EACCES: permission denied');
808
- err.code = 'EACCES';
809
- throw err;
810
- }
811
- return p.toString();
812
- });
813
- vi.stubEnv('GEMINI_CLI_IDE_WORKSPACE_PATH', ['/project/folderA', '/nonexistent/restricted/folder'].join(path.delimiter));
814
- process.argv = ['node', 'script.js'];
815
- const argv = await parseArguments(createTestMergedSettings());
816
- const settings = createTestMergedSettings();
817
- const config = await loadCliConfig(settings, 'test-session', argv);
818
- const dirs = config.getPendingIncludeDirectories();
819
- expect(dirs).toContain('/project/folderA');
820
- expect(dirs).not.toContain('/nonexistent/restricted/folder');
821
- });
822
- it('should use default fileFilter options when unconfigured', async () => {
823
- process.argv = ['node', 'script.js'];
824
- const argv = await parseArguments(createTestMergedSettings());
825
- const settings = createTestMergedSettings();
826
- const config = await loadCliConfig(settings, 'test-session', argv);
827
- expect(config.getFileFilteringRespectGitIgnore()).toBe(DEFAULT_FILE_FILTERING_OPTIONS.respectGitIgnore);
828
- expect(config.getFileFilteringRespectGeminiIgnore()).toBe(DEFAULT_FILE_FILTERING_OPTIONS.respectGeminiIgnore);
829
- expect(config.getCustomIgnoreFilePaths()).toEqual(DEFAULT_FILE_FILTERING_OPTIONS.customIgnoreFilePaths);
830
- expect(config.getApprovalMode()).toBe(ApprovalMode.DEFAULT);
831
- });
832
- it('should be non-interactive when isCommand is set', async () => {
833
- process.argv = ['node', 'script.js', 'mcp', 'list'];
834
- const argv = await parseArguments(createTestMergedSettings());
835
- 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)
836
- // reset tty for this test
837
- process.stdin.isTTY = true;
838
- const settings = createTestMergedSettings();
839
- const config = await loadCliConfig(settings, 'test-session', argv);
840
- expect(config.isInteractive()).toBe(false);
841
- });
842
- describe('isAcpMode', () => {
843
- it('should force skipNextSpeakerCheck to true when in ACP mode', async () => {
844
- process.argv = ['node', 'script.js', '--acp'];
845
- const argv = await parseArguments(createTestMergedSettings());
846
- const settings = createTestMergedSettings({
847
- model: { skipNextSpeakerCheck: false },
848
- });
849
- const config = await loadCliConfig(settings, 'test-session', argv);
850
- expect(config.getSkipNextSpeakerCheck()).toBe(true);
851
- });
852
- it('should respect settings.model.skipNextSpeakerCheck when not in ACP mode', async () => {
853
- process.argv = ['node', 'script.js'];
854
- const argv = await parseArguments(createTestMergedSettings());
855
- const settings = createTestMergedSettings({
856
- model: { skipNextSpeakerCheck: false },
857
- });
858
- const config = await loadCliConfig(settings, 'test-session', argv);
859
- expect(config.getSkipNextSpeakerCheck()).toBe(false);
860
- });
861
- });
862
- });
863
- describe('mergeMcpServers', () => {
864
- it('should not modify the original settings object', async () => {
865
- const settings = createTestMergedSettings({
866
- mcpServers: {
867
- 'test-server': {
868
- url: 'http://localhost:8080',
869
- },
870
- },
871
- });
872
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
873
- {
874
- path: '/path/to/ext1',
875
- name: 'ext1',
876
- id: 'ext1-id',
877
- version: '1.0.0',
878
- mcpServers: {
879
- 'ext1-server': {
880
- url: 'http://localhost:8081',
881
- },
882
- },
883
- contextFiles: [],
884
- isActive: true,
885
- },
886
- ]);
887
- const originalSettings = JSON.parse(JSON.stringify(settings));
888
- process.argv = ['node', 'script.js'];
889
- const argv = await parseArguments(createTestMergedSettings());
890
- await loadCliConfig(settings, 'test-session', argv);
891
- expect(settings).toEqual(originalSettings);
892
- });
893
- });
894
- describe('mergeExcludeTools', () => {
895
- const originalIsTTY = process.stdin.isTTY;
896
- beforeEach(() => {
897
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
898
- process.stdin.isTTY = true;
899
- });
900
- afterEach(() => {
901
- process.stdin.isTTY = originalIsTTY;
902
- });
903
- it('should merge excludeTools from settings and extensions', async () => {
904
- const settings = createTestMergedSettings({
905
- tools: { exclude: ['tool1', 'tool2'] },
906
- });
907
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
908
- {
909
- path: '/path/to/ext1',
910
- name: 'ext1',
911
- id: 'ext1-id',
912
- version: '1.0.0',
913
- excludeTools: ['tool3', 'tool4'],
914
- contextFiles: [],
915
- isActive: true,
916
- },
917
- {
918
- path: '/path/to/ext2',
919
- name: 'ext2',
920
- id: 'ext2-id',
921
- version: '1.0.0',
922
- excludeTools: ['tool5'],
923
- contextFiles: [],
924
- isActive: true,
925
- },
926
- ]);
927
- process.argv = ['node', 'script.js'];
928
- const argv = await parseArguments(createTestMergedSettings());
929
- const config = await loadCliConfig(settings, 'test-session', argv);
930
- expect(config.getExcludeTools()).toEqual(new Set(['tool1', 'tool2', 'tool3', 'tool4', 'tool5']));
931
- expect(config.getExcludeTools()).toHaveLength(5);
932
- });
933
- it('should handle overlapping excludeTools between settings and extensions', async () => {
934
- const settings = createTestMergedSettings({
935
- tools: { exclude: ['tool1', 'tool2'] },
936
- });
937
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
938
- {
939
- path: '/path/to/ext1',
940
- name: 'ext1',
941
- id: 'ext1-id',
942
- version: '1.0.0',
943
- excludeTools: ['tool2', 'tool3'],
944
- contextFiles: [],
945
- isActive: true,
946
- },
947
- ]);
948
- process.argv = ['node', 'script.js'];
949
- const argv = await parseArguments(createTestMergedSettings());
950
- const config = await loadCliConfig(settings, 'test-session', argv);
951
- expect(config.getExcludeTools()).toEqual(new Set(['tool1', 'tool2', 'tool3']));
952
- expect(config.getExcludeTools()).toHaveLength(3);
953
- });
954
- it('should handle overlapping excludeTools between extensions', async () => {
955
- const settings = createTestMergedSettings({
956
- tools: { exclude: ['tool1'] },
957
- });
958
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
959
- {
960
- path: '/path/to/ext1',
961
- name: 'ext1',
962
- id: 'ext1-id',
963
- version: '1.0.0',
964
- excludeTools: ['tool2', 'tool3'],
965
- contextFiles: [],
966
- isActive: true,
967
- },
968
- {
969
- path: '/path/to/ext2',
970
- name: 'ext2',
971
- id: 'ext2-id',
972
- version: '1.0.0',
973
- excludeTools: ['tool3', 'tool4'],
974
- contextFiles: [],
975
- isActive: true,
976
- },
977
- ]);
978
- process.argv = ['node', 'script.js'];
979
- const argv = await parseArguments(createTestMergedSettings());
980
- const config = await loadCliConfig(settings, 'test-session', argv);
981
- expect(config.getExcludeTools()).toEqual(new Set(['tool1', 'tool2', 'tool3', 'tool4']));
982
- expect(config.getExcludeTools()).toHaveLength(4);
983
- });
984
- it('should return an empty array when no excludeTools are specified and it is interactive', async () => {
985
- process.stdin.isTTY = true;
986
- const settings = createTestMergedSettings();
987
- process.argv = ['node', 'script.js'];
988
- const argv = await parseArguments(createTestMergedSettings());
989
- const config = await loadCliConfig(settings, 'test-session', argv);
990
- expect(config.getExcludeTools()).toEqual(new Set([]));
991
- });
992
- it('should return default excludes when no excludeTools are specified and it is not interactive', async () => {
993
- process.stdin.isTTY = false;
994
- const settings = createTestMergedSettings();
995
- process.argv = ['node', 'script.js', '-p', 'test'];
996
- const argv = await parseArguments(createTestMergedSettings());
997
- const config = await loadCliConfig(settings, 'test-session', argv);
998
- expect(config.getExcludeTools()).toEqual(new Set([ASK_USER_TOOL_NAME]));
999
- });
1000
- it('should handle settings with excludeTools but no extensions', async () => {
1001
- process.argv = ['node', 'script.js'];
1002
- const argv = await parseArguments(createTestMergedSettings());
1003
- const settings = createTestMergedSettings({
1004
- tools: { exclude: ['tool1', 'tool2'] },
1005
- });
1006
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1007
- const config = await loadCliConfig(settings, 'test-session', argv);
1008
- expect(config.getExcludeTools()).toEqual(new Set(['tool1', 'tool2']));
1009
- expect(config.getExcludeTools()).toHaveLength(2);
1010
- });
1011
- it('should handle extensions with excludeTools but no settings', async () => {
1012
- const settings = createTestMergedSettings();
1013
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
1014
- {
1015
- path: '/path/to/ext',
1016
- name: 'ext1',
1017
- id: 'ext1-id',
1018
- version: '1.0.0',
1019
- excludeTools: ['tool1', 'tool2'],
1020
- contextFiles: [],
1021
- isActive: true,
1022
- },
1023
- ]);
1024
- process.argv = ['node', 'script.js'];
1025
- const argv = await parseArguments(createTestMergedSettings());
1026
- const config = await loadCliConfig(settings, 'test-session', argv);
1027
- expect(config.getExcludeTools()).toEqual(new Set(['tool1', 'tool2']));
1028
- expect(config.getExcludeTools()).toHaveLength(2);
1029
- });
1030
- it('should not modify the original settings object', async () => {
1031
- const settings = createTestMergedSettings({
1032
- tools: { exclude: ['tool1'] },
1033
- });
1034
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
1035
- {
1036
- path: '/path/to/ext',
1037
- name: 'ext1',
1038
- id: 'ext1-id',
1039
- version: '1.0.0',
1040
- excludeTools: ['tool2'],
1041
- contextFiles: [],
1042
- isActive: true,
1043
- },
1044
- ]);
1045
- const originalSettings = JSON.parse(JSON.stringify(settings));
1046
- process.argv = ['node', 'script.js'];
1047
- const argv = await parseArguments(createTestMergedSettings());
1048
- await loadCliConfig(settings, 'test-session', argv);
1049
- expect(settings).toEqual(originalSettings);
1050
- });
1051
- });
1052
- describe('Approval mode tool exclusion logic', () => {
1053
- const originalIsTTY = process.stdin.isTTY;
1054
- beforeEach(() => {
1055
- process.stdin.isTTY = false; // Ensure non-interactive mode
1056
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
1057
- isTrusted: true,
1058
- source: undefined,
1059
- });
1060
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1061
- });
1062
- afterEach(() => {
1063
- process.stdin.isTTY = originalIsTTY;
1064
- });
1065
- it('should exclude all interactive tools in non-interactive mode with default approval mode', async () => {
1066
- process.argv = ['node', 'script.js', '-p', 'test'];
1067
- const argv = await parseArguments(createTestMergedSettings());
1068
- const settings = createTestMergedSettings();
1069
- const config = await loadCliConfig(settings, 'test-session', argv);
1070
- const excludedTools = config.getExcludeTools();
1071
- expect(excludedTools).not.toContain(SHELL_TOOL_NAME);
1072
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME);
1073
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME);
1074
- expect(excludedTools).toContain(ASK_USER_TOOL_NAME);
1075
- });
1076
- it('should exclude all interactive tools in non-interactive mode with explicit default approval mode', async () => {
1077
- process.argv = [
1078
- 'node',
1079
- 'script.js',
1080
- '--approval-mode',
1081
- 'default',
1082
- '-p',
1083
- 'test',
1084
- ];
1085
- const argv = await parseArguments(createTestMergedSettings());
1086
- const settings = createTestMergedSettings();
1087
- const config = await loadCliConfig(settings, 'test-session', argv);
1088
- const excludedTools = config.getExcludeTools();
1089
- expect(excludedTools).not.toContain(SHELL_TOOL_NAME);
1090
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME);
1091
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME);
1092
- expect(excludedTools).toContain(ASK_USER_TOOL_NAME);
1093
- });
1094
- it('should exclude only shell tools in non-interactive mode with auto_edit approval mode', async () => {
1095
- process.argv = [
1096
- 'node',
1097
- 'script.js',
1098
- '--approval-mode',
1099
- 'auto_edit',
1100
- '-p',
1101
- 'test',
1102
- ];
1103
- const argv = await parseArguments(createTestMergedSettings());
1104
- const settings = createTestMergedSettings();
1105
- const config = await loadCliConfig(settings, 'test-session', argv);
1106
- const excludedTools = config.getExcludeTools();
1107
- expect(excludedTools).not.toContain(SHELL_TOOL_NAME);
1108
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME);
1109
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME);
1110
- expect(excludedTools).toContain(ASK_USER_TOOL_NAME);
1111
- });
1112
- it('should exclude only ask_user in non-interactive mode with yolo approval mode', async () => {
1113
- process.argv = [
1114
- 'node',
1115
- 'script.js',
1116
- '--approval-mode',
1117
- 'yolo',
1118
- '-p',
1119
- 'test',
1120
- ];
1121
- const argv = await parseArguments(createTestMergedSettings());
1122
- const settings = createTestMergedSettings();
1123
- const config = await loadCliConfig(settings, 'test-session', argv);
1124
- const excludedTools = config.getExcludeTools();
1125
- expect(excludedTools).not.toContain(SHELL_TOOL_NAME);
1126
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME);
1127
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME);
1128
- expect(excludedTools).toContain(ASK_USER_TOOL_NAME);
1129
- });
1130
- it('should exclude all interactive tools in non-interactive mode with plan approval mode', async () => {
1131
- process.argv = [
1132
- 'node',
1133
- 'script.js',
1134
- '--approval-mode',
1135
- 'plan',
1136
- '-p',
1137
- 'test',
1138
- ];
1139
- const settings = createTestMergedSettings({
1140
- general: {
1141
- plan: { enabled: true },
1142
- },
1143
- });
1144
- const argv = await parseArguments(createTestMergedSettings());
1145
- const config = await loadCliConfig(settings, 'test-session', argv);
1146
- const excludedTools = config.getExcludeTools();
1147
- expect(excludedTools).not.toContain(SHELL_TOOL_NAME);
1148
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME);
1149
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME);
1150
- expect(excludedTools).toContain(ASK_USER_TOOL_NAME);
1151
- });
1152
- it('should exclude only ask_user in non-interactive mode with legacy yolo flag', async () => {
1153
- process.argv = ['node', 'script.js', '--yolo', '-p', 'test'];
1154
- const argv = await parseArguments(createTestMergedSettings());
1155
- const settings = createTestMergedSettings();
1156
- const config = await loadCliConfig(settings, 'test-session', argv);
1157
- const excludedTools = config.getExcludeTools();
1158
- expect(excludedTools).not.toContain(SHELL_TOOL_NAME);
1159
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME);
1160
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME);
1161
- expect(excludedTools).toContain(ASK_USER_TOOL_NAME);
1162
- });
1163
- it('should not exclude interactive tools in interactive mode regardless of approval mode', async () => {
1164
- process.stdin.isTTY = true; // Interactive mode
1165
- const testCases = [
1166
- { args: ['node', 'script.js'] }, // default
1167
- { args: ['node', 'script.js', '--approval-mode', 'default'] },
1168
- { args: ['node', 'script.js', '--approval-mode', 'auto_edit'] },
1169
- { args: ['node', 'script.js', '--approval-mode', 'yolo'] },
1170
- { args: ['node', 'script.js', '--yolo'] },
1171
- ];
1172
- for (const testCase of testCases) {
1173
- process.argv = testCase.args;
1174
- const argv = await parseArguments(createTestMergedSettings());
1175
- const settings = createTestMergedSettings();
1176
- const config = await loadCliConfig(settings, 'test-session', argv);
1177
- const excludedTools = config.getExcludeTools();
1178
- expect(excludedTools).not.toContain(SHELL_TOOL_NAME);
1179
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME);
1180
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME);
1181
- expect(excludedTools).not.toContain(ASK_USER_TOOL_NAME);
1182
- }
1183
- });
1184
- it('should merge approval mode exclusions with settings exclusions in auto_edit mode', async () => {
1185
- process.argv = [
1186
- 'node',
1187
- 'script.js',
1188
- '--approval-mode',
1189
- 'auto_edit',
1190
- '-p',
1191
- 'test',
1192
- ];
1193
- const argv = await parseArguments(createTestMergedSettings());
1194
- const settings = createTestMergedSettings({
1195
- tools: { exclude: ['custom_tool'] },
1196
- });
1197
- const config = await loadCliConfig(settings, 'test-session', argv);
1198
- const excludedTools = config.getExcludeTools();
1199
- expect(excludedTools).toContain('custom_tool'); // From settings
1200
- expect(excludedTools).not.toContain(SHELL_TOOL_NAME); // No longer from approval mode
1201
- expect(excludedTools).not.toContain(EDIT_TOOL_NAME); // Should be allowed in auto_edit
1202
- expect(excludedTools).not.toContain(WRITE_FILE_TOOL_NAME); // Should be allowed in auto_edit
1203
- expect(excludedTools).toContain(ASK_USER_TOOL_NAME);
1204
- });
1205
- it('should throw an error if YOLO mode is attempted when disableYoloMode is true', async () => {
1206
- process.argv = ['node', 'script.js', '--yolo'];
1207
- const argv = await parseArguments(createTestMergedSettings());
1208
- const settings = createTestMergedSettings({
1209
- security: {
1210
- disableYoloMode: true,
1211
- },
1212
- });
1213
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow('YOLO mode is disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli');
1214
- });
1215
- it('should throw an error for invalid approval mode values in loadCliConfig', async () => {
1216
- // Create a mock argv with an invalid approval mode that bypasses argument parsing validation
1217
- const invalidArgv = {
1218
- approvalMode: 'invalid_mode',
1219
- promptInteractive: '',
1220
- prompt: '',
1221
- yolo: false,
1222
- };
1223
- const settings = createTestMergedSettings();
1224
- await expect(loadCliConfig(settings, 'test-session', invalidArgv)).rejects.toThrow('Invalid approval mode: invalid_mode. Valid values are: yolo, auto_edit, plan, default');
1225
- });
1226
- it('should fall back to default approval mode if plan mode is requested but not enabled', async () => {
1227
- process.argv = ['node', 'script.js'];
1228
- const settings = createTestMergedSettings({
1229
- general: {
1230
- defaultApprovalMode: 'plan',
1231
- plan: { enabled: false },
1232
- },
1233
- });
1234
- const argv = await parseArguments(settings);
1235
- const config = await loadCliConfig(settings, 'test-session', argv);
1236
- expect(config.getApprovalMode()).toBe(ApprovalMode.DEFAULT);
1237
- });
1238
- it('should allow plan approval mode if plan is enabled', async () => {
1239
- process.argv = ['node', 'script.js'];
1240
- const settings = createTestMergedSettings({
1241
- general: {
1242
- defaultApprovalMode: 'plan',
1243
- plan: { enabled: true },
1244
- },
1245
- });
1246
- const argv = await parseArguments(settings);
1247
- const config = await loadCliConfig(settings, 'test-session', argv);
1248
- expect(config.getApprovalMode()).toBe(ApprovalMode.PLAN);
1249
- });
1250
- });
1251
- describe('loadCliConfig with allowed-mcp-server-names', () => {
1252
- beforeEach(() => {
1253
- vi.resetAllMocks();
1254
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1255
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1256
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1257
- });
1258
- afterEach(() => {
1259
- vi.unstubAllEnvs();
1260
- vi.restoreAllMocks();
1261
- });
1262
- const baseSettings = createTestMergedSettings({
1263
- mcpServers: {
1264
- server1: { url: 'http://localhost:8080' },
1265
- server2: { url: 'http://localhost:8081' },
1266
- server3: { url: 'http://localhost:8082' },
1267
- },
1268
- });
1269
- it('should allow all MCP servers if the flag is not provided', async () => {
1270
- process.argv = ['node', 'script.js'];
1271
- const argv = await parseArguments(createTestMergedSettings());
1272
- const config = await loadCliConfig(baseSettings, 'test-session', argv);
1273
- expect(config.getMcpServers()).toEqual(baseSettings.mcpServers);
1274
- });
1275
- it('should allow only the specified MCP server', async () => {
1276
- process.argv = [
1277
- 'node',
1278
- 'script.js',
1279
- '--allowed-mcp-server-names',
1280
- 'server1',
1281
- ];
1282
- const argv = await parseArguments(createTestMergedSettings());
1283
- const config = await loadCliConfig(baseSettings, 'test-session', argv);
1284
- expect(config.getAllowedMcpServers()).toEqual(['server1']);
1285
- });
1286
- it('should allow multiple specified MCP servers', async () => {
1287
- process.argv = [
1288
- 'node',
1289
- 'script.js',
1290
- '--allowed-mcp-server-names',
1291
- 'server1',
1292
- '--allowed-mcp-server-names',
1293
- 'server3',
1294
- ];
1295
- const argv = await parseArguments(createTestMergedSettings());
1296
- const config = await loadCliConfig(baseSettings, 'test-session', argv);
1297
- expect(config.getAllowedMcpServers()).toEqual(['server1', 'server3']);
1298
- });
1299
- it('should handle server names that do not exist', async () => {
1300
- process.argv = [
1301
- 'node',
1302
- 'script.js',
1303
- '--allowed-mcp-server-names',
1304
- 'server1',
1305
- '--allowed-mcp-server-names',
1306
- 'server4',
1307
- ];
1308
- const argv = await parseArguments(createTestMergedSettings());
1309
- const config = await loadCliConfig(baseSettings, 'test-session', argv);
1310
- expect(config.getAllowedMcpServers()).toEqual(['server1', 'server4']);
1311
- });
1312
- it('should allow no MCP servers if the flag is provided but empty', async () => {
1313
- process.argv = ['node', 'script.js', '--allowed-mcp-server-names', ''];
1314
- const argv = await parseArguments(createTestMergedSettings());
1315
- const config = await loadCliConfig(baseSettings, 'test-session', argv);
1316
- expect(config.getAllowedMcpServers()).toEqual(['']);
1317
- });
1318
- it('should read allowMCPServers from settings', async () => {
1319
- process.argv = ['node', 'script.js'];
1320
- const argv = await parseArguments(createTestMergedSettings());
1321
- const settings = createTestMergedSettings({
1322
- ...baseSettings,
1323
- mcp: { allowed: ['server1', 'server2'] },
1324
- });
1325
- const config = await loadCliConfig(settings, 'test-session', argv);
1326
- expect(config.getAllowedMcpServers()).toEqual(['server1', 'server2']);
1327
- });
1328
- it('should read excludeMCPServers from settings', async () => {
1329
- process.argv = ['node', 'script.js'];
1330
- const argv = await parseArguments(createTestMergedSettings());
1331
- const settings = createTestMergedSettings({
1332
- ...baseSettings,
1333
- mcp: { excluded: ['server1', 'server2'] },
1334
- });
1335
- const config = await loadCliConfig(settings, 'test-session', argv);
1336
- expect(config.getBlockedMcpServers()).toEqual(['server1', 'server2']);
1337
- });
1338
- it('should override allowMCPServers with excludeMCPServers if overlapping', async () => {
1339
- process.argv = ['node', 'script.js'];
1340
- const argv = await parseArguments(createTestMergedSettings());
1341
- const settings = createTestMergedSettings({
1342
- ...baseSettings,
1343
- mcp: {
1344
- excluded: ['server1'],
1345
- allowed: ['server1', 'server2'],
1346
- },
1347
- });
1348
- const config = await loadCliConfig(settings, 'test-session', argv);
1349
- expect(config.getAllowedMcpServers()).toEqual(['server1', 'server2']);
1350
- expect(config.getBlockedMcpServers()).toEqual(['server1']);
1351
- });
1352
- it('should prioritize mcp server flag if set', async () => {
1353
- process.argv = [
1354
- 'node',
1355
- 'script.js',
1356
- '--allowed-mcp-server-names',
1357
- 'server1',
1358
- ];
1359
- const argv = await parseArguments(createTestMergedSettings());
1360
- const settings = createTestMergedSettings({
1361
- ...baseSettings,
1362
- mcp: {
1363
- excluded: ['server1'],
1364
- allowed: ['server2'],
1365
- },
1366
- });
1367
- const config = await loadCliConfig(settings, 'test-session', argv);
1368
- expect(config.getAllowedMcpServers()).toEqual(['server1']);
1369
- });
1370
- it('should prioritize CLI flag over both allowed and excluded settings', async () => {
1371
- process.argv = [
1372
- 'node',
1373
- 'script.js',
1374
- '--allowed-mcp-server-names',
1375
- 'server2',
1376
- '--allowed-mcp-server-names',
1377
- 'server3',
1378
- ];
1379
- const argv = await parseArguments(createTestMergedSettings());
1380
- const settings = createTestMergedSettings({
1381
- ...baseSettings,
1382
- mcp: {
1383
- allowed: ['server1', 'server2'], // Should be ignored
1384
- excluded: ['server3'], // Should be ignored
1385
- },
1386
- });
1387
- const config = await loadCliConfig(settings, 'test-session', argv);
1388
- expect(config.getAllowedMcpServers()).toEqual(['server2', 'server3']);
1389
- expect(config.getBlockedMcpServers()).toEqual([]);
1390
- });
1391
- });
1392
- describe('loadCliConfig with admin.mcp.config', () => {
1393
- beforeEach(() => {
1394
- vi.resetAllMocks();
1395
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1396
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1397
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1398
- });
1399
- afterEach(() => {
1400
- vi.unstubAllEnvs();
1401
- vi.restoreAllMocks();
1402
- });
1403
- const localMcpServers = {
1404
- serverA: {
1405
- command: 'npx',
1406
- args: ['-y', '@mcp/server-a'],
1407
- env: { KEY: 'VALUE' },
1408
- cwd: '/local/cwd',
1409
- trust: false,
1410
- },
1411
- serverB: {
1412
- command: 'npx',
1413
- args: ['-y', '@mcp/server-b'],
1414
- trust: false,
1415
- },
1416
- };
1417
- const baseSettings = createTestMergedSettings({
1418
- mcp: { serverCommand: 'npx -y @mcp/default-server' },
1419
- mcpServers: localMcpServers,
1420
- });
1421
- it('should use local configuration if admin allowlist is empty', async () => {
1422
- process.argv = ['node', 'script.js'];
1423
- const argv = await parseArguments(createTestMergedSettings());
1424
- const settings = createTestMergedSettings({
1425
- mcp: baseSettings.mcp,
1426
- mcpServers: localMcpServers,
1427
- admin: {
1428
- ...baseSettings.admin,
1429
- mcp: { enabled: true, config: {} },
1430
- },
1431
- });
1432
- const config = await loadCliConfig(settings, 'test-session', argv);
1433
- expect(config.getMcpServers()).toEqual(localMcpServers);
1434
- expect(config.getMcpServerCommand()).toBe('npx -y @mcp/default-server');
1435
- });
1436
- it('should ignore locally configured servers not present in the allowlist', async () => {
1437
- process.argv = ['node', 'script.js'];
1438
- const argv = await parseArguments(createTestMergedSettings());
1439
- const adminAllowlist = {
1440
- serverA: {
1441
- type: 'sse',
1442
- url: 'https://admin-server-a.com/sse',
1443
- trust: true,
1444
- },
1445
- };
1446
- const settings = createTestMergedSettings({
1447
- mcp: baseSettings.mcp,
1448
- mcpServers: localMcpServers,
1449
- admin: {
1450
- ...baseSettings.admin,
1451
- mcp: { enabled: true, config: adminAllowlist },
1452
- },
1453
- });
1454
- const config = await loadCliConfig(settings, 'test-session', argv);
1455
- const mergedServers = config.getMcpServers() ?? {};
1456
- expect(mergedServers).toHaveProperty('serverA');
1457
- expect(mergedServers).not.toHaveProperty('serverB');
1458
- });
1459
- it('should clear command, args, env, and cwd for present servers', async () => {
1460
- process.argv = ['node', 'script.js'];
1461
- const argv = await parseArguments(createTestMergedSettings());
1462
- const adminAllowlist = {
1463
- serverA: {
1464
- type: 'sse',
1465
- url: 'https://admin-server-a.com/sse',
1466
- trust: true,
1467
- },
1468
- };
1469
- const settings = createTestMergedSettings({
1470
- mcpServers: localMcpServers,
1471
- admin: {
1472
- ...baseSettings.admin,
1473
- mcp: { enabled: true, config: adminAllowlist },
1474
- },
1475
- });
1476
- const config = await loadCliConfig(settings, 'test-session', argv);
1477
- const serverA = config.getMcpServers()?.['serverA'];
1478
- expect(serverA).toEqual({
1479
- // eslint-disable-next-line @typescript-eslint/no-misused-spread
1480
- ...localMcpServers['serverA'],
1481
- type: 'sse',
1482
- url: 'https://admin-server-a.com/sse',
1483
- trust: true,
1484
- command: undefined,
1485
- args: undefined,
1486
- env: undefined,
1487
- cwd: undefined,
1488
- httpUrl: undefined,
1489
- tcp: undefined,
1490
- });
1491
- });
1492
- it('should not initialize a server if it is in allowlist but missing locally', async () => {
1493
- process.argv = ['node', 'script.js'];
1494
- const argv = await parseArguments(createTestMergedSettings());
1495
- const adminAllowlist = {
1496
- serverC: {
1497
- type: 'sse',
1498
- url: 'https://admin-server-c.com/sse',
1499
- trust: true,
1500
- },
1501
- };
1502
- const settings = createTestMergedSettings({
1503
- mcpServers: localMcpServers,
1504
- admin: {
1505
- ...baseSettings.admin,
1506
- mcp: { enabled: true, config: adminAllowlist },
1507
- },
1508
- });
1509
- const config = await loadCliConfig(settings, 'test-session', argv);
1510
- const mergedServers = config.getMcpServers() ?? {};
1511
- expect(mergedServers).not.toHaveProperty('serverC');
1512
- expect(Object.keys(mergedServers)).toHaveLength(0);
1513
- });
1514
- it('should merge local fields and prefer admin tool filters', async () => {
1515
- process.argv = ['node', 'script.js'];
1516
- const argv = await parseArguments(createTestMergedSettings());
1517
- const adminAllowlist = {
1518
- serverA: {
1519
- type: 'sse',
1520
- url: 'https://admin-server-a.com/sse',
1521
- trust: true,
1522
- includeTools: ['admin_tool'],
1523
- },
1524
- };
1525
- const localMcpServersWithTools = {
1526
- serverA: {
1527
- // eslint-disable-next-line @typescript-eslint/no-misused-spread
1528
- ...localMcpServers['serverA'],
1529
- includeTools: ['local_tool'],
1530
- timeout: 1234,
1531
- },
1532
- };
1533
- const settings = createTestMergedSettings({
1534
- mcpServers: localMcpServersWithTools,
1535
- admin: {
1536
- ...baseSettings.admin,
1537
- mcp: { enabled: true, config: adminAllowlist },
1538
- },
1539
- });
1540
- const config = await loadCliConfig(settings, 'test-session', argv);
1541
- const serverA = (config.getMcpServers() ?? {})['serverA'];
1542
- expect(serverA).toMatchObject({
1543
- timeout: 1234,
1544
- includeTools: ['admin_tool'],
1545
- type: 'sse',
1546
- url: 'https://admin-server-a.com/sse',
1547
- trust: true,
1548
- });
1549
- expect(serverA).not.toHaveProperty('command');
1550
- expect(serverA).not.toHaveProperty('args');
1551
- expect(serverA).not.toHaveProperty('env');
1552
- expect(serverA).not.toHaveProperty('cwd');
1553
- expect(serverA).not.toHaveProperty('httpUrl');
1554
- expect(serverA).not.toHaveProperty('tcp');
1555
- });
1556
- it('should use local tool filters when admin does not define them', async () => {
1557
- process.argv = ['node', 'script.js'];
1558
- const argv = await parseArguments(createTestMergedSettings());
1559
- const adminAllowlist = {
1560
- serverA: {
1561
- type: 'sse',
1562
- url: 'https://admin-server-a.com/sse',
1563
- trust: true,
1564
- },
1565
- };
1566
- const localMcpServersWithTools = {
1567
- serverA: {
1568
- // eslint-disable-next-line @typescript-eslint/no-misused-spread
1569
- ...localMcpServers['serverA'],
1570
- includeTools: ['local_tool'],
1571
- },
1572
- };
1573
- const settings = createTestMergedSettings({
1574
- mcpServers: localMcpServersWithTools,
1575
- admin: {
1576
- ...baseSettings.admin,
1577
- mcp: { enabled: true, config: adminAllowlist },
1578
- },
1579
- });
1580
- const config = await loadCliConfig(settings, 'test-session', argv);
1581
- const serverA = config.getMcpServers()?.['serverA'];
1582
- expect(serverA?.includeTools).toEqual(['local_tool']);
1583
- });
1584
- });
1585
- describe('loadCliConfig model selection', () => {
1586
- beforeEach(() => {
1587
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1588
- });
1589
- afterEach(() => {
1590
- vi.resetAllMocks();
1591
- });
1592
- it('selects a model from settings.json if provided', async () => {
1593
- process.argv = ['node', 'script.js'];
1594
- const argv = await parseArguments(createTestMergedSettings());
1595
- const config = await loadCliConfig(createTestMergedSettings({
1596
- model: {
1597
- name: 'gemini-2.5-pro',
1598
- },
1599
- }), 'test-session', argv);
1600
- expect(config.getModel()).toBe('gemini-2.5-pro');
1601
- });
1602
- it('uses the default gemini model if nothing is set', async () => {
1603
- process.argv = ['node', 'script.js']; // No model set.
1604
- const argv = await parseArguments(createTestMergedSettings());
1605
- const config = await loadCliConfig(createTestMergedSettings({
1606
- // No model set.
1607
- }), 'test-session', argv);
1608
- expect(config.getModel()).toBe('auto');
1609
- });
1610
- it('always prefers model from argv', async () => {
1611
- process.argv = ['node', 'script.js', '--model', 'gemini-2.5-flash-preview'];
1612
- const argv = await parseArguments(createTestMergedSettings());
1613
- const config = await loadCliConfig(createTestMergedSettings({
1614
- model: {
1615
- name: 'gemini-2.5-pro',
1616
- },
1617
- }), 'test-session', argv);
1618
- expect(config.getModel()).toBe('gemini-2.5-flash-preview');
1619
- });
1620
- it('selects the model from argv if provided', async () => {
1621
- process.argv = ['node', 'script.js', '--model', 'gemini-2.5-flash-preview'];
1622
- const argv = await parseArguments(createTestMergedSettings());
1623
- const config = await loadCliConfig(createTestMergedSettings({
1624
- // No model provided via settings.
1625
- }), 'test-session', argv);
1626
- expect(config.getModel()).toBe('gemini-2.5-flash-preview');
1627
- });
1628
- it('selects the default auto model if provided via auto alias', async () => {
1629
- process.argv = ['node', 'script.js', '--model', 'auto'];
1630
- const argv = await parseArguments(createTestMergedSettings());
1631
- const config = await loadCliConfig(createTestMergedSettings({
1632
- // No model provided via settings.
1633
- }), 'test-session', argv);
1634
- expect(config.getModel()).toBe('auto');
1635
- });
1636
- });
1637
- describe('loadCliConfig folderTrust', () => {
1638
- let originalVitest;
1639
- let originalIntegrationTest;
1640
- beforeEach(() => {
1641
- vi.resetAllMocks();
1642
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1643
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1644
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1645
- originalVitest = process.env['VITEST'];
1646
- originalIntegrationTest = process.env['GEMINI_CLI_INTEGRATION_TEST'];
1647
- delete process.env['VITEST'];
1648
- delete process.env['GEMINI_CLI_INTEGRATION_TEST'];
1649
- });
1650
- afterEach(() => {
1651
- if (originalVitest !== undefined) {
1652
- process.env['VITEST'] = originalVitest;
1653
- }
1654
- if (originalIntegrationTest !== undefined) {
1655
- process.env['GEMINI_CLI_INTEGRATION_TEST'] = originalIntegrationTest;
1656
- }
1657
- vi.unstubAllEnvs();
1658
- vi.restoreAllMocks();
1659
- });
1660
- it('should be false when folderTrust is false', async () => {
1661
- process.argv = ['node', 'script.js'];
1662
- const settings = createTestMergedSettings({
1663
- security: {
1664
- folderTrust: {
1665
- enabled: false,
1666
- },
1667
- },
1668
- });
1669
- const argv = await parseArguments(createTestMergedSettings());
1670
- const config = await loadCliConfig(settings, 'test-session', argv);
1671
- expect(config.getFolderTrust()).toBe(false);
1672
- });
1673
- it('should be true when folderTrust is true', async () => {
1674
- process.argv = ['node', 'script.js'];
1675
- const argv = await parseArguments(createTestMergedSettings());
1676
- const settings = createTestMergedSettings({
1677
- security: {
1678
- folderTrust: {
1679
- enabled: true,
1680
- },
1681
- },
1682
- });
1683
- const config = await loadCliConfig(settings, 'test-session', argv);
1684
- expect(config.getFolderTrust()).toBe(true);
1685
- });
1686
- it('should be true by default', async () => {
1687
- process.argv = ['node', 'script.js'];
1688
- const argv = await parseArguments(createTestMergedSettings());
1689
- const settings = createTestMergedSettings();
1690
- const config = await loadCliConfig(settings, 'test-session', argv);
1691
- expect(config.getFolderTrust()).toBe(true);
1692
- });
1693
- });
1694
- describe('loadCliConfig with includeDirectories', () => {
1695
- beforeEach(() => {
1696
- vi.resetAllMocks();
1697
- vi.mocked(os.homedir).mockReturnValue(path.resolve(path.sep, 'mock', 'home', 'user'));
1698
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1699
- vi.spyOn(process, 'cwd').mockReturnValue(path.resolve(path.sep, 'home', 'user', 'project'));
1700
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1701
- });
1702
- afterEach(() => {
1703
- vi.restoreAllMocks();
1704
- });
1705
- it.skip('should combine and resolve paths from settings and CLI arguments', async () => {
1706
- const mockCwd = path.resolve(path.sep, 'home', 'user', 'project');
1707
- process.argv = [
1708
- 'node',
1709
- 'script.js',
1710
- '--include-directories',
1711
- `${path.resolve(path.sep, 'cli', 'path1')},${path.join(mockCwd, 'cli', 'path2')}`,
1712
- ];
1713
- const argv = await parseArguments(createTestMergedSettings());
1714
- const settings = createTestMergedSettings({
1715
- context: {
1716
- includeDirectories: [
1717
- path.resolve(path.sep, 'settings', 'path1'),
1718
- path.join(os.homedir(), 'settings', 'path2'),
1719
- path.join(mockCwd, 'settings', 'path3'),
1720
- ],
1721
- },
1722
- });
1723
- const config = await loadCliConfig(settings, 'test-session', argv);
1724
- const expected = [
1725
- mockCwd,
1726
- path.resolve(path.sep, 'cli', 'path1'),
1727
- path.join(mockCwd, 'cli', 'path2'),
1728
- path.resolve(path.sep, 'settings', 'path1'),
1729
- path.join(os.homedir(), 'settings', 'path2'),
1730
- path.join(mockCwd, 'settings', 'path3'),
1731
- ];
1732
- const directories = config.getWorkspaceContext().getDirectories();
1733
- expect(directories).toEqual([mockCwd]);
1734
- expect(config.getPendingIncludeDirectories()).toEqual(expect.arrayContaining(expected.filter((dir) => dir !== mockCwd)));
1735
- expect(config.getPendingIncludeDirectories()).toHaveLength(expected.length - 1);
1736
- });
1737
- });
1738
- describe('loadCliConfig compressionThreshold', () => {
1739
- beforeEach(() => {
1740
- vi.resetAllMocks();
1741
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1742
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1743
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1744
- });
1745
- afterEach(() => {
1746
- vi.unstubAllEnvs();
1747
- vi.restoreAllMocks();
1748
- });
1749
- it('should pass settings to the core config', async () => {
1750
- process.argv = ['node', 'script.js'];
1751
- const argv = await parseArguments(createTestMergedSettings());
1752
- const settings = createTestMergedSettings({
1753
- model: {
1754
- compressionThreshold: 0.5,
1755
- },
1756
- });
1757
- const config = await loadCliConfig(settings, 'test-session', argv);
1758
- expect(await config.getCompressionThreshold()).toBe(0.5);
1759
- });
1760
- it('should have default compressionThreshold if not in settings', async () => {
1761
- process.argv = ['node', 'script.js'];
1762
- const argv = await parseArguments(createTestMergedSettings());
1763
- const settings = createTestMergedSettings();
1764
- const config = await loadCliConfig(settings, 'test-session', argv);
1765
- expect(await config.getCompressionThreshold()).toBe(0.5);
1766
- });
1767
- });
1768
- describe('loadCliConfig useRipgrep', () => {
1769
- beforeEach(() => {
1770
- vi.resetAllMocks();
1771
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1772
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1773
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1774
- });
1775
- afterEach(() => {
1776
- vi.unstubAllEnvs();
1777
- vi.restoreAllMocks();
1778
- });
1779
- it('should be true by default when useRipgrep is not set in settings', async () => {
1780
- process.argv = ['node', 'script.js'];
1781
- const argv = await parseArguments(createTestMergedSettings());
1782
- const settings = createTestMergedSettings();
1783
- const config = await loadCliConfig(settings, 'test-session', argv);
1784
- expect(config.getUseRipgrep()).toBe(true);
1785
- });
1786
- it('should be false when useRipgrep is set to false in settings', async () => {
1787
- process.argv = ['node', 'script.js'];
1788
- const argv = await parseArguments(createTestMergedSettings());
1789
- const settings = createTestMergedSettings({ tools: { useRipgrep: false } });
1790
- const config = await loadCliConfig(settings, 'test-session', argv);
1791
- expect(config.getUseRipgrep()).toBe(false);
1792
- });
1793
- it('should be true when useRipgrep is explicitly set to true in settings', async () => {
1794
- process.argv = ['node', 'script.js'];
1795
- const argv = await parseArguments(createTestMergedSettings());
1796
- const settings = createTestMergedSettings({ tools: { useRipgrep: true } });
1797
- const config = await loadCliConfig(settings, 'test-session', argv);
1798
- expect(config.getUseRipgrep()).toBe(true);
1799
- });
1800
- });
1801
- describe('loadCliConfig directWebFetch', () => {
1802
- beforeEach(() => {
1803
- vi.resetAllMocks();
1804
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1805
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1806
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1807
- });
1808
- afterEach(() => {
1809
- vi.unstubAllEnvs();
1810
- vi.restoreAllMocks();
1811
- });
1812
- it('should be false by default when directWebFetch is not set in settings', async () => {
1813
- process.argv = ['node', 'script.js'];
1814
- const argv = await parseArguments(createTestMergedSettings());
1815
- const settings = createTestMergedSettings();
1816
- const config = await loadCliConfig(settings, 'test-session', argv);
1817
- expect(config.getDirectWebFetch()).toBe(false);
1818
- });
1819
- it('should be true when directWebFetch is set to true in settings', async () => {
1820
- process.argv = ['node', 'script.js'];
1821
- const argv = await parseArguments(createTestMergedSettings());
1822
- const settings = createTestMergedSettings({
1823
- experimental: {
1824
- directWebFetch: true,
1825
- },
1826
- });
1827
- const config = await loadCliConfig(settings, 'test-session', argv);
1828
- expect(config.getDirectWebFetch()).toBe(true);
1829
- });
1830
- });
1831
- describe('loadCliConfig context management', () => {
1832
- beforeEach(() => {
1833
- vi.resetAllMocks();
1834
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1835
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1836
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1837
- });
1838
- afterEach(() => {
1839
- vi.unstubAllEnvs();
1840
- vi.restoreAllMocks();
1841
- });
1842
- it('should be false by default when generalistProfile / context management is not set in settings', async () => {
1843
- process.argv = ['node', 'script.js'];
1844
- const argv = await parseArguments(createTestMergedSettings());
1845
- const settings = createTestMergedSettings();
1846
- const config = await loadCliConfig(settings, 'test-session', argv);
1847
- expect(config.getContextManagementConfig()).haveOwnProperty('enabled', false);
1848
- expect(config.isContextManagementEnabled()).toBe(false);
1849
- });
1850
- it('should be true when generalistProfile is set to true in settings', async () => {
1851
- process.argv = ['node', 'script.js'];
1852
- const argv = await parseArguments(createTestMergedSettings());
1853
- const settings = createTestMergedSettings({
1854
- experimental: {
1855
- generalistProfile: true,
1856
- },
1857
- });
1858
- const config = await loadCliConfig(settings, 'test-session', argv);
1859
- expect(config.isContextManagementEnabled()).toBe(true);
1860
- });
1861
- });
1862
- describe('screenReader configuration', () => {
1863
- beforeEach(() => {
1864
- vi.resetAllMocks();
1865
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1866
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1867
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1868
- });
1869
- afterEach(() => {
1870
- vi.unstubAllEnvs();
1871
- vi.restoreAllMocks();
1872
- });
1873
- it('should use screenReader value from settings if CLI flag is not present (settings true)', async () => {
1874
- process.argv = ['node', 'script.js'];
1875
- const argv = await parseArguments(createTestMergedSettings());
1876
- const settings = createTestMergedSettings({
1877
- ui: { accessibility: { screenReader: true } },
1878
- });
1879
- const config = await loadCliConfig(settings, 'test-session', argv);
1880
- expect(config.getScreenReader()).toBe(true);
1881
- });
1882
- it('should use screenReader value from settings if CLI flag is not present (settings false)', async () => {
1883
- process.argv = ['node', 'script.js'];
1884
- const argv = await parseArguments(createTestMergedSettings());
1885
- const settings = createTestMergedSettings({
1886
- ui: { accessibility: { screenReader: false } },
1887
- });
1888
- const config = await loadCliConfig(settings, 'test-session', argv);
1889
- expect(config.getScreenReader()).toBe(false);
1890
- });
1891
- it('should prioritize --screen-reader CLI flag (true) over settings (false)', async () => {
1892
- process.argv = ['node', 'script.js', '--screen-reader'];
1893
- const argv = await parseArguments(createTestMergedSettings());
1894
- const settings = createTestMergedSettings({
1895
- ui: { accessibility: { screenReader: false } },
1896
- });
1897
- const config = await loadCliConfig(settings, 'test-session', argv);
1898
- expect(config.getScreenReader()).toBe(true);
1899
- });
1900
- it('should be false by default when no flag or setting is present', async () => {
1901
- process.argv = ['node', 'script.js'];
1902
- const argv = await parseArguments(createTestMergedSettings());
1903
- const settings = createTestMergedSettings();
1904
- const config = await loadCliConfig(settings, 'test-session', argv);
1905
- expect(config.getScreenReader()).toBe(false);
1906
- });
1907
- });
1908
- describe('loadCliConfig tool exclusions', () => {
1909
- const originalIsTTY = process.stdin.isTTY;
1910
- beforeEach(() => {
1911
- vi.resetAllMocks();
1912
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
1913
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
1914
- process.stdin.isTTY = true;
1915
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
1916
- isTrusted: true,
1917
- source: undefined,
1918
- });
1919
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
1920
- });
1921
- afterEach(() => {
1922
- process.stdin.isTTY = originalIsTTY;
1923
- vi.unstubAllEnvs();
1924
- vi.restoreAllMocks();
1925
- });
1926
- it('should not exclude interactive tools in interactive mode without YOLO', async () => {
1927
- process.stdin.isTTY = true;
1928
- process.argv = ['node', 'script.js'];
1929
- const argv = await parseArguments(createTestMergedSettings());
1930
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1931
- expect(config.getExcludeTools()).not.toContain('run_shell_command');
1932
- expect(config.getExcludeTools()).not.toContain('replace');
1933
- expect(config.getExcludeTools()).not.toContain('write_file');
1934
- expect(config.getExcludeTools()).not.toContain('ask_user');
1935
- });
1936
- it('should not exclude interactive tools in interactive mode with YOLO', async () => {
1937
- process.stdin.isTTY = true;
1938
- process.argv = ['node', 'script.js', '--yolo'];
1939
- const argv = await parseArguments(createTestMergedSettings());
1940
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1941
- expect(config.getExcludeTools()).not.toContain('run_shell_command');
1942
- expect(config.getExcludeTools()).not.toContain('replace');
1943
- expect(config.getExcludeTools()).not.toContain('write_file');
1944
- expect(config.getExcludeTools()).not.toContain('ask_user');
1945
- });
1946
- it('should exclude interactive tools in non-interactive mode without YOLO', async () => {
1947
- process.stdin.isTTY = false;
1948
- process.argv = ['node', 'script.js', '-p', 'test'];
1949
- const argv = await parseArguments(createTestMergedSettings());
1950
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1951
- expect(config.getExcludeTools()).not.toContain('run_shell_command');
1952
- expect(config.getExcludeTools()).not.toContain('replace');
1953
- expect(config.getExcludeTools()).not.toContain('write_file');
1954
- expect(config.getExcludeTools()).toContain('ask_user');
1955
- });
1956
- it('should exclude only ask_user in non-interactive mode with YOLO', async () => {
1957
- process.stdin.isTTY = false;
1958
- process.argv = ['node', 'script.js', '-p', 'test', '--yolo'];
1959
- const argv = await parseArguments(createTestMergedSettings());
1960
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1961
- expect(config.getExcludeTools()).not.toContain('run_shell_command');
1962
- expect(config.getExcludeTools()).not.toContain('replace');
1963
- expect(config.getExcludeTools()).not.toContain('write_file');
1964
- expect(config.getExcludeTools()).toContain('ask_user');
1965
- });
1966
- it('should exclude ask_user in interactive mode when --acp is provided', async () => {
1967
- process.stdin.isTTY = true;
1968
- process.argv = ['node', 'script.js', '--acp'];
1969
- const argv = await parseArguments(createTestMergedSettings());
1970
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1971
- expect(config.getExcludeTools()).toContain('ask_user');
1972
- });
1973
- it('should exclude ask_user in interactive mode when --experimental-acp is provided', async () => {
1974
- process.stdin.isTTY = true;
1975
- process.argv = ['node', 'script.js', '--experimental-acp'];
1976
- const argv = await parseArguments(createTestMergedSettings());
1977
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1978
- expect(config.getExcludeTools()).toContain('ask_user');
1979
- });
1980
- it('should not exclude shell tool in non-interactive mode when --allowed-tools="ShellTool" is set', async () => {
1981
- process.stdin.isTTY = false;
1982
- process.argv = [
1983
- 'node',
1984
- 'script.js',
1985
- '-p',
1986
- 'test',
1987
- '--allowed-tools',
1988
- 'ShellTool',
1989
- ];
1990
- const argv = await parseArguments(createTestMergedSettings());
1991
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1992
- expect(config.getExcludeTools()).not.toContain(SHELL_TOOL_NAME);
1993
- });
1994
- it('should not exclude web-fetch in non-interactive mode at config level', async () => {
1995
- process.stdin.isTTY = false;
1996
- process.argv = ['node', 'script.js', '-p', 'test'];
1997
- const argv = await parseArguments(createTestMergedSettings());
1998
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
1999
- expect(config.getExcludeTools()).not.toContain(WEB_FETCH_TOOL_NAME);
2000
- });
2001
- it('should not exclude web-fetch in non-interactive mode when allowed', async () => {
2002
- process.stdin.isTTY = false;
2003
- process.argv = [
2004
- 'node',
2005
- 'script.js',
2006
- '-p',
2007
- 'test',
2008
- '--allowed-tools',
2009
- WEB_FETCH_TOOL_NAME,
2010
- ];
2011
- const argv = await parseArguments(createTestMergedSettings());
2012
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2013
- expect(config.getExcludeTools()).not.toContain(WEB_FETCH_TOOL_NAME);
2014
- });
2015
- it('should not exclude shell tool in non-interactive mode when --allowed-tools="run_shell_command" is set', async () => {
2016
- process.stdin.isTTY = false;
2017
- process.argv = [
2018
- 'node',
2019
- 'script.js',
2020
- '-p',
2021
- 'test',
2022
- '--allowed-tools',
2023
- 'run_shell_command',
2024
- ];
2025
- const argv = await parseArguments(createTestMergedSettings());
2026
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2027
- expect(config.getExcludeTools()).not.toContain(SHELL_TOOL_NAME);
2028
- });
2029
- it('should not exclude shell tool in non-interactive mode when --allowed-tools="ShellTool(wc)" is set', async () => {
2030
- process.stdin.isTTY = false;
2031
- process.argv = [
2032
- 'node',
2033
- 'script.js',
2034
- '-p',
2035
- 'test',
2036
- '--allowed-tools',
2037
- 'ShellTool(wc)',
2038
- ];
2039
- const argv = await parseArguments(createTestMergedSettings());
2040
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2041
- expect(config.getExcludeTools()).not.toContain(SHELL_TOOL_NAME);
2042
- });
2043
- });
2044
- describe('loadCliConfig interactive', () => {
2045
- const originalIsTTY = process.stdin.isTTY;
2046
- beforeEach(() => {
2047
- vi.resetAllMocks();
2048
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2049
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2050
- process.stdin.isTTY = true;
2051
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2052
- });
2053
- afterEach(() => {
2054
- process.stdin.isTTY = originalIsTTY;
2055
- vi.unstubAllEnvs();
2056
- vi.restoreAllMocks();
2057
- });
2058
- it('should be interactive if isTTY and no prompt', async () => {
2059
- process.stdin.isTTY = true;
2060
- process.argv = ['node', 'script.js'];
2061
- const argv = await parseArguments(createTestMergedSettings());
2062
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2063
- expect(config.isInteractive()).toBe(true);
2064
- });
2065
- it('should be interactive if prompt-interactive is set', async () => {
2066
- process.stdin.isTTY = false;
2067
- process.argv = ['node', 'script.js', '--prompt-interactive', 'test'];
2068
- const argv = await parseArguments(createTestMergedSettings());
2069
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2070
- expect(config.isInteractive()).toBe(true);
2071
- });
2072
- it('should not be interactive if not isTTY and no prompt', async () => {
2073
- process.stdin.isTTY = false;
2074
- process.argv = ['node', 'script.js'];
2075
- const argv = await parseArguments(createTestMergedSettings());
2076
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2077
- expect(config.isInteractive()).toBe(false);
2078
- });
2079
- it('should not be interactive if prompt is set', async () => {
2080
- process.stdin.isTTY = true;
2081
- process.argv = ['node', 'script.js', '--prompt', 'test'];
2082
- const argv = await parseArguments(createTestMergedSettings());
2083
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2084
- expect(config.isInteractive()).toBe(false);
2085
- });
2086
- it('should be interactive if positional prompt words are provided with other flags', async () => {
2087
- process.stdin.isTTY = true;
2088
- process.argv = ['node', 'script.js', '--model', 'gemini-2.5-pro', 'Hello'];
2089
- const argv = await parseArguments(createTestMergedSettings());
2090
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2091
- expect(config.isInteractive()).toBe(true);
2092
- });
2093
- it('should be interactive if positional prompt words are provided with multiple flags', async () => {
2094
- process.stdin.isTTY = true;
2095
- process.argv = [
2096
- 'node',
2097
- 'script.js',
2098
- '--model',
2099
- 'gemini-2.5-pro',
2100
- '--yolo',
2101
- 'Hello world',
2102
- ];
2103
- const argv = await parseArguments(createTestMergedSettings());
2104
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2105
- expect(config.isInteractive()).toBe(true);
2106
- // Verify the question is preserved for one-shot execution
2107
- expect(argv.prompt).toBeUndefined();
2108
- expect(argv.promptInteractive).toBe('Hello world');
2109
- });
2110
- it('should be interactive if positional prompt words are provided with extensions flag', async () => {
2111
- process.stdin.isTTY = true;
2112
- process.argv = ['node', 'script.js', '-e', 'none', 'hello'];
2113
- const argv = await parseArguments(createTestMergedSettings());
2114
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2115
- expect(config.isInteractive()).toBe(true);
2116
- expect(argv.query).toBe('hello');
2117
- expect(argv.promptInteractive).toBe('hello');
2118
- expect(argv.extensions).toEqual(['none']);
2119
- });
2120
- it('should handle multiple positional words correctly', async () => {
2121
- process.stdin.isTTY = true;
2122
- process.argv = ['node', 'script.js', 'hello world how are you'];
2123
- const argv = await parseArguments(createTestMergedSettings());
2124
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2125
- expect(config.isInteractive()).toBe(true);
2126
- expect(argv.query).toBe('hello world how are you');
2127
- expect(argv.promptInteractive).toBe('hello world how are you');
2128
- });
2129
- it('should handle multiple positional words with flags', async () => {
2130
- process.stdin.isTTY = true;
2131
- process.argv = [
2132
- 'node',
2133
- 'script.js',
2134
- '--model',
2135
- 'gemini-2.5-pro',
2136
- 'write',
2137
- 'a',
2138
- 'function',
2139
- 'to',
2140
- 'sort',
2141
- 'array',
2142
- ];
2143
- const argv = await parseArguments(createTestMergedSettings());
2144
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2145
- expect(config.isInteractive()).toBe(true);
2146
- expect(argv.query).toBe('write a function to sort array');
2147
- expect(argv.promptInteractive).toBe('write a function to sort array');
2148
- expect(argv.model).toBe('gemini-2.5-pro');
2149
- });
2150
- it('should handle empty positional arguments', async () => {
2151
- process.stdin.isTTY = true;
2152
- process.argv = ['node', 'script.js', ''];
2153
- const argv = await parseArguments(createTestMergedSettings());
2154
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2155
- expect(config.isInteractive()).toBe(true);
2156
- expect(argv.query).toBeUndefined();
2157
- });
2158
- it('should handle extensions flag with positional arguments correctly', async () => {
2159
- process.stdin.isTTY = true;
2160
- process.argv = [
2161
- 'node',
2162
- 'script.js',
2163
- '-e',
2164
- 'none',
2165
- 'hello',
2166
- 'world',
2167
- 'how',
2168
- 'are',
2169
- 'you',
2170
- ];
2171
- const argv = await parseArguments(createTestMergedSettings());
2172
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2173
- expect(config.isInteractive()).toBe(true);
2174
- expect(argv.query).toBe('hello world how are you');
2175
- expect(argv.promptInteractive).toBe('hello world how are you');
2176
- expect(argv.extensions).toEqual(['none']);
2177
- });
2178
- it('should be interactive if no positional prompt words are provided with flags', async () => {
2179
- process.stdin.isTTY = true;
2180
- process.argv = ['node', 'script.js', '--model', 'gemini-2.5-pro'];
2181
- const argv = await parseArguments(createTestMergedSettings());
2182
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2183
- expect(config.isInteractive()).toBe(true);
2184
- });
2185
- });
2186
- describe('loadCliConfig approval mode', () => {
2187
- const originalArgv = process.argv;
2188
- beforeEach(() => {
2189
- vi.resetAllMocks();
2190
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2191
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2192
- process.argv = ['node', 'script.js']; // Reset argv for each test
2193
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
2194
- isTrusted: true,
2195
- source: undefined,
2196
- });
2197
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2198
- });
2199
- afterEach(() => {
2200
- process.argv = originalArgv;
2201
- vi.unstubAllEnvs();
2202
- vi.restoreAllMocks();
2203
- });
2204
- it('should default to DEFAULT approval mode when no flags are set', async () => {
2205
- process.argv = ['node', 'script.js'];
2206
- const argv = await parseArguments(createTestMergedSettings());
2207
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2208
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
2209
- });
2210
- it('should set YOLO approval mode when --yolo flag is used', async () => {
2211
- process.argv = ['node', 'script.js', '--yolo'];
2212
- const argv = await parseArguments(createTestMergedSettings());
2213
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2214
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.YOLO);
2215
- });
2216
- it('should set YOLO approval mode when -y flag is used', async () => {
2217
- process.argv = ['node', 'script.js', '-y'];
2218
- const argv = await parseArguments(createTestMergedSettings());
2219
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2220
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.YOLO);
2221
- });
2222
- it('should set DEFAULT approval mode when --approval-mode=default', async () => {
2223
- process.argv = ['node', 'script.js', '--approval-mode', 'default'];
2224
- const argv = await parseArguments(createTestMergedSettings());
2225
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2226
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
2227
- });
2228
- it('should set AUTO_EDIT approval mode when --approval-mode=auto_edit', async () => {
2229
- process.argv = ['node', 'script.js', '--approval-mode', 'auto_edit'];
2230
- const argv = await parseArguments(createTestMergedSettings());
2231
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2232
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.AUTO_EDIT);
2233
- });
2234
- it('should set YOLO approval mode when --approval-mode=yolo', async () => {
2235
- process.argv = ['node', 'script.js', '--approval-mode', 'yolo'];
2236
- const argv = await parseArguments(createTestMergedSettings());
2237
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2238
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.YOLO);
2239
- });
2240
- it('should prioritize --approval-mode over --yolo when both would be valid (but validation prevents this)', async () => {
2241
- // Note: This test documents the intended behavior, but in practice the validation
2242
- // prevents both flags from being used together
2243
- process.argv = ['node', 'script.js', '--approval-mode', 'default'];
2244
- const argv = await parseArguments(createTestMergedSettings());
2245
- // Manually set yolo to true to simulate what would happen if validation didn't prevent it
2246
- argv.yolo = true;
2247
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2248
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
2249
- });
2250
- it('should fall back to --yolo behavior when --approval-mode is not set', async () => {
2251
- process.argv = ['node', 'script.js', '--yolo'];
2252
- const argv = await parseArguments(createTestMergedSettings());
2253
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2254
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.YOLO);
2255
- });
2256
- it('should set Plan approval mode when --approval-mode=plan is used and plan is enabled', async () => {
2257
- process.argv = ['node', 'script.js', '--approval-mode', 'plan'];
2258
- const argv = await parseArguments(createTestMergedSettings());
2259
- const settings = createTestMergedSettings({
2260
- general: {
2261
- plan: { enabled: true },
2262
- },
2263
- });
2264
- const config = await loadCliConfig(settings, 'test-session', argv);
2265
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.PLAN);
2266
- });
2267
- it('should ignore "yolo" in settings.tools.approvalMode and fall back to DEFAULT', async () => {
2268
- process.argv = ['node', 'script.js'];
2269
- const settings = createTestMergedSettings({
2270
- tools: {
2271
- // @ts-expect-error: testing invalid value
2272
- approvalMode: 'yolo',
2273
- },
2274
- });
2275
- const argv = await parseArguments(settings);
2276
- const config = await loadCliConfig(settings, 'test-session', argv);
2277
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
2278
- });
2279
- it('should throw error when --approval-mode=plan is used but plan is disabled', async () => {
2280
- process.argv = ['node', 'script.js', '--approval-mode', 'plan'];
2281
- const argv = await parseArguments(createTestMergedSettings());
2282
- const settings = createTestMergedSettings({
2283
- general: {
2284
- plan: { enabled: false },
2285
- },
2286
- });
2287
- const config = await loadCliConfig(settings, 'test-session', argv);
2288
- expect(config.getApprovalMode()).toBe(ApprovalMode.DEFAULT);
2289
- });
2290
- it('should allow plan approval mode by default when --approval-mode=plan is used', async () => {
2291
- process.argv = ['node', 'script.js', '--approval-mode', 'plan'];
2292
- const argv = await parseArguments(createTestMergedSettings());
2293
- const settings = createTestMergedSettings({});
2294
- const config = await loadCliConfig(settings, 'test-session', argv);
2295
- expect(config.getApprovalMode()).toBe(ApprovalMode.PLAN);
2296
- });
2297
- it('should pass planSettings.directory from settings to config', async () => {
2298
- process.argv = ['node', 'script.js'];
2299
- const settings = createTestMergedSettings({
2300
- general: {
2301
- plan: {
2302
- directory: '.custom-plans',
2303
- },
2304
- },
2305
- });
2306
- const argv = await parseArguments(settings);
2307
- const config = await loadCliConfig(settings, 'test-session', argv);
2308
- const plansDir = config.storage.getPlansDir();
2309
- expect(plansDir).toContain('.custom-plans');
2310
- });
2311
- // --- Untrusted Folder Scenarios ---
2312
- describe('when folder is NOT trusted', () => {
2313
- beforeEach(() => {
2314
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
2315
- isTrusted: false,
2316
- source: 'file',
2317
- });
2318
- });
2319
- it('should override --approval-mode=yolo to DEFAULT', async () => {
2320
- process.argv = ['node', 'script.js', '--approval-mode', 'yolo'];
2321
- const argv = await parseArguments(createTestMergedSettings());
2322
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2323
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
2324
- });
2325
- it('should override --approval-mode=auto_edit to DEFAULT', async () => {
2326
- process.argv = ['node', 'script.js', '--approval-mode', 'auto_edit'];
2327
- const argv = await parseArguments(createTestMergedSettings());
2328
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2329
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
2330
- });
2331
- it('should override --yolo flag to DEFAULT', async () => {
2332
- process.argv = ['node', 'script.js', '--yolo'];
2333
- const argv = await parseArguments(createTestMergedSettings());
2334
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2335
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
2336
- });
2337
- it('should remain DEFAULT when --approval-mode=default', async () => {
2338
- process.argv = ['node', 'script.js', '--approval-mode', 'default'];
2339
- const argv = await parseArguments(createTestMergedSettings());
2340
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2341
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.DEFAULT);
2342
- });
2343
- });
2344
- describe('Persistent approvalMode setting', () => {
2345
- it('should use approvalMode from settings when no CLI flags are set', async () => {
2346
- process.argv = ['node', 'script.js'];
2347
- const settings = createTestMergedSettings({
2348
- general: { defaultApprovalMode: 'auto_edit' },
2349
- });
2350
- const argv = await parseArguments(settings);
2351
- const config = await loadCliConfig(settings, 'test-session', argv);
2352
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.AUTO_EDIT);
2353
- });
2354
- it('should prioritize --approval-mode flag over settings', async () => {
2355
- process.argv = ['node', 'script.js', '--approval-mode', 'auto_edit'];
2356
- const settings = createTestMergedSettings({
2357
- general: { defaultApprovalMode: 'default' },
2358
- });
2359
- const argv = await parseArguments(settings);
2360
- const config = await loadCliConfig(settings, 'test-session', argv);
2361
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.AUTO_EDIT);
2362
- });
2363
- it('should prioritize --yolo flag over settings', async () => {
2364
- process.argv = ['node', 'script.js', '--yolo'];
2365
- const settings = createTestMergedSettings({
2366
- general: { defaultApprovalMode: 'auto_edit' },
2367
- });
2368
- const argv = await parseArguments(settings);
2369
- const config = await loadCliConfig(settings, 'test-session', argv);
2370
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.YOLO);
2371
- });
2372
- it('should respect plan mode from settings when plan is enabled', async () => {
2373
- process.argv = ['node', 'script.js'];
2374
- const settings = createTestMergedSettings({
2375
- general: {
2376
- defaultApprovalMode: 'plan',
2377
- plan: { enabled: true },
2378
- },
2379
- });
2380
- const argv = await parseArguments(settings);
2381
- const config = await loadCliConfig(settings, 'test-session', argv);
2382
- expect(config.getApprovalMode()).toBe(ServerConfig.ApprovalMode.PLAN);
2383
- });
2384
- it('should fall back to default if plan mode is in settings but disabled', async () => {
2385
- process.argv = ['node', 'script.js'];
2386
- const settings = createTestMergedSettings({
2387
- general: {
2388
- defaultApprovalMode: 'plan',
2389
- plan: { enabled: false },
2390
- },
2391
- });
2392
- const argv = await parseArguments(settings);
2393
- const config = await loadCliConfig(settings, 'test-session', argv);
2394
- expect(config.getApprovalMode()).toBe(ApprovalMode.DEFAULT);
2395
- });
2396
- });
2397
- });
2398
- describe('loadCliConfig gemmaModelRouter', () => {
2399
- beforeEach(() => {
2400
- vi.resetAllMocks();
2401
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2402
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2403
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2404
- });
2405
- afterEach(() => {
2406
- vi.unstubAllEnvs();
2407
- vi.restoreAllMocks();
2408
- });
2409
- it('should have gemmaModelRouter disabled by default', async () => {
2410
- process.argv = ['node', 'script.js'];
2411
- const argv = await parseArguments(createTestMergedSettings());
2412
- const settings = createTestMergedSettings();
2413
- const config = await loadCliConfig(settings, 'test-session', argv);
2414
- expect(config.getGemmaModelRouterEnabled()).toBe(false);
2415
- });
2416
- it('should load gemmaModelRouter settings from merged settings', async () => {
2417
- process.argv = ['node', 'script.js'];
2418
- const argv = await parseArguments(createTestMergedSettings());
2419
- const settings = createTestMergedSettings({
2420
- experimental: {
2421
- gemmaModelRouter: {
2422
- enabled: true,
2423
- autoStartServer: false,
2424
- binaryPath: '/custom/lit',
2425
- classifier: {
2426
- host: 'http://custom:1234',
2427
- model: 'custom-gemma',
2428
- },
2429
- },
2430
- },
2431
- });
2432
- const config = await loadCliConfig(settings, 'test-session', argv);
2433
- expect(config.getGemmaModelRouterEnabled()).toBe(true);
2434
- const gemmaSettings = config.getGemmaModelRouterSettings();
2435
- expect(gemmaSettings.autoStartServer).toBe(false);
2436
- expect(gemmaSettings.binaryPath).toBe('/custom/lit');
2437
- expect(gemmaSettings.classifier?.host).toBe('http://custom:1234');
2438
- expect(gemmaSettings.classifier?.model).toBe('custom-gemma');
2439
- });
2440
- it('should load experimental.gemma setting from merged settings', async () => {
2441
- process.argv = ['node', 'script.js'];
2442
- const argv = await parseArguments(createTestMergedSettings());
2443
- const settings = createTestMergedSettings({
2444
- experimental: {
2445
- gemma: true,
2446
- },
2447
- });
2448
- const config = await loadCliConfig(settings, 'test-session', argv);
2449
- expect(config.getExperimentalGemma()).toBe(true);
2450
- });
2451
- it('should handle partial gemmaModelRouter settings', async () => {
2452
- process.argv = ['node', 'script.js'];
2453
- const argv = await parseArguments(createTestMergedSettings());
2454
- const settings = createTestMergedSettings({
2455
- experimental: {
2456
- gemmaModelRouter: {
2457
- enabled: true,
2458
- },
2459
- },
2460
- });
2461
- const config = await loadCliConfig(settings, 'test-session', argv);
2462
- expect(config.getGemmaModelRouterEnabled()).toBe(true);
2463
- const gemmaSettings = config.getGemmaModelRouterSettings();
2464
- expect(gemmaSettings.autoStartServer).toBe(false);
2465
- expect(gemmaSettings.binaryPath).toBe('');
2466
- expect(gemmaSettings.classifier?.host).toBe('http://localhost:9379');
2467
- expect(gemmaSettings.classifier?.model).toBe('gemma3-1b-gpu-custom');
2468
- });
2469
- });
2470
- describe('loadCliConfig fileFiltering', () => {
2471
- const originalArgv = process.argv;
2472
- beforeEach(() => {
2473
- vi.resetAllMocks();
2474
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2475
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2476
- process.argv = ['node', 'script.js']; // Reset argv for each test
2477
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2478
- });
2479
- afterEach(() => {
2480
- process.argv = originalArgv;
2481
- vi.unstubAllEnvs();
2482
- vi.restoreAllMocks();
2483
- });
2484
- const testCases = [
2485
- {
2486
- property: 'enableFuzzySearch',
2487
- getter: (c) => c.getFileFilteringEnableFuzzySearch(),
2488
- value: true,
2489
- },
2490
- {
2491
- property: 'enableFuzzySearch',
2492
- getter: (c) => c.getFileFilteringEnableFuzzySearch(),
2493
- value: false,
2494
- },
2495
- {
2496
- property: 'respectGitIgnore',
2497
- getter: (c) => c.getFileFilteringRespectGitIgnore(),
2498
- value: true,
2499
- },
2500
- {
2501
- property: 'respectGitIgnore',
2502
- getter: (c) => c.getFileFilteringRespectGitIgnore(),
2503
- value: false,
2504
- },
2505
- {
2506
- property: 'respectGeminiIgnore',
2507
- getter: (c) => c.getFileFilteringRespectGeminiIgnore(),
2508
- value: true,
2509
- },
2510
- {
2511
- property: 'respectGeminiIgnore',
2512
- getter: (c) => c.getFileFilteringRespectGeminiIgnore(),
2513
- value: false,
2514
- },
2515
- {
2516
- property: 'enableRecursiveFileSearch',
2517
- getter: (c) => c.getEnableRecursiveFileSearch(),
2518
- value: true,
2519
- },
2520
- {
2521
- property: 'enableRecursiveFileSearch',
2522
- getter: (c) => c.getEnableRecursiveFileSearch(),
2523
- value: false,
2524
- },
2525
- ];
2526
- it.each(testCases)('should pass $property from settings to config when $value', async ({ property, getter, value }) => {
2527
- const settings = createTestMergedSettings({
2528
- context: {
2529
- fileFiltering: { [property]: value },
2530
- },
2531
- });
2532
- const argv = await parseArguments(settings);
2533
- const config = await loadCliConfig(settings, 'test-session', argv);
2534
- expect(getter(config)).toBe(value);
2535
- });
2536
- });
2537
- describe('Output format', () => {
2538
- beforeEach(() => {
2539
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2540
- });
2541
- afterEach(() => {
2542
- vi.resetAllMocks();
2543
- });
2544
- it('should default to TEXT', async () => {
2545
- process.argv = ['node', 'script.js'];
2546
- const argv = await parseArguments(createTestMergedSettings());
2547
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2548
- expect(config.getOutputFormat()).toBe(OutputFormat.TEXT);
2549
- });
2550
- it('should use the format from settings', async () => {
2551
- process.argv = ['node', 'script.js'];
2552
- const argv = await parseArguments(createTestMergedSettings());
2553
- const config = await loadCliConfig(createTestMergedSettings({ output: { format: OutputFormat.JSON } }), 'test-session', argv);
2554
- expect(config.getOutputFormat()).toBe(OutputFormat.JSON);
2555
- });
2556
- it('should prioritize the format from argv', async () => {
2557
- process.argv = ['node', 'script.js', '--output-format', 'json'];
2558
- const argv = await parseArguments(createTestMergedSettings());
2559
- const config = await loadCliConfig(createTestMergedSettings({ output: { format: OutputFormat.JSON } }), 'test-session', argv);
2560
- expect(config.getOutputFormat()).toBe(OutputFormat.JSON);
2561
- });
2562
- it('should accept stream-json as a valid output format', async () => {
2563
- process.argv = ['node', 'script.js', '--output-format', 'stream-json'];
2564
- const argv = await parseArguments(createTestMergedSettings());
2565
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2566
- expect(config.getOutputFormat()).toBe(OutputFormat.STREAM_JSON);
2567
- });
2568
- it('should error on invalid --output-format argument', async () => {
2569
- process.argv = ['node', 'script.js', '--output-format', 'invalid'];
2570
- vi.spyOn(process, 'exit').mockImplementation(() => {
2571
- throw new Error('process.exit called');
2572
- });
2573
- const mockConsoleError = vi
2574
- .spyOn(console, 'error')
2575
- .mockImplementation(() => { });
2576
- const debugErrorSpy = vi
2577
- .spyOn(debugLogger, 'error')
2578
- .mockImplementation(() => { });
2579
- await expect(parseArguments(createTestMergedSettings())).rejects.toThrow('process.exit called');
2580
- expect(debugErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Invalid values:'));
2581
- expect(mockConsoleError).toHaveBeenCalled();
2582
- });
2583
- });
2584
- describe('parseArguments with positional prompt', () => {
2585
- const originalArgv = process.argv;
2586
- beforeEach(() => {
2587
- // Default to headless mode for these tests as they mostly expect one-shot behavior
2588
- process.stdin.isTTY = false;
2589
- Object.defineProperty(process.stdout, 'isTTY', {
2590
- value: false,
2591
- configurable: true,
2592
- writable: true,
2593
- });
2594
- });
2595
- afterEach(() => {
2596
- process.argv = originalArgv;
2597
- });
2598
- it('should throw an error when both a positional prompt and the --prompt flag are used', async () => {
2599
- process.argv = [
2600
- 'node',
2601
- 'script.js',
2602
- 'positional',
2603
- 'prompt',
2604
- '--prompt',
2605
- 'test prompt',
2606
- ];
2607
- vi.spyOn(process, 'exit').mockImplementation(() => {
2608
- throw new Error('process.exit called');
2609
- });
2610
- vi.spyOn(console, 'error').mockImplementation(() => { });
2611
- const debugErrorSpy = vi
2612
- .spyOn(debugLogger, 'error')
2613
- .mockImplementation(() => { });
2614
- await expect(parseArguments(createTestMergedSettings())).rejects.toThrow('process.exit called');
2615
- expect(debugErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Cannot use both a positional prompt and the --prompt (-p) flag together'));
2616
- });
2617
- it('should correctly parse a positional prompt to query field', async () => {
2618
- process.argv = ['node', 'script.js', 'positional', 'prompt'];
2619
- const argv = await parseArguments(createTestMergedSettings());
2620
- expect(argv.query).toBe('positional prompt');
2621
- // Since no explicit prompt flags are set and query doesn't start with @, should map to prompt (one-shot)
2622
- expect(argv.prompt).toBe('positional prompt');
2623
- expect(argv.promptInteractive).toBeUndefined();
2624
- });
2625
- it('should have correct positional argument description', async () => {
2626
- // Test that the positional argument has the expected description
2627
- const yargsInstance = await import('./config.js');
2628
- // This test verifies that the positional 'query' argument is properly configured
2629
- // with the description: "Positional prompt. Defaults to one-shot; use -i/--prompt-interactive for interactive."
2630
- process.argv = ['node', 'script.js', 'test', 'query'];
2631
- const argv = await yargsInstance.parseArguments(createTestMergedSettings());
2632
- expect(argv.query).toBe('test query');
2633
- });
2634
- it('should correctly parse a prompt from the --prompt flag', async () => {
2635
- process.argv = ['node', 'script.js', '--prompt', 'test prompt'];
2636
- const argv = await parseArguments(createTestMergedSettings());
2637
- expect(argv.prompt).toBe('test prompt');
2638
- });
2639
- });
2640
- describe('Telemetry configuration via environment variables', () => {
2641
- beforeEach(() => {
2642
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2643
- });
2644
- afterEach(() => {
2645
- vi.resetAllMocks();
2646
- });
2647
- it('should prioritize GEMINI_TELEMETRY_ENABLED over settings', async () => {
2648
- vi.stubEnv('GEMINI_TELEMETRY_ENABLED', 'true');
2649
- process.argv = ['node', 'script.js'];
2650
- const argv = await parseArguments(createTestMergedSettings());
2651
- const settings = createTestMergedSettings({
2652
- telemetry: { enabled: false },
2653
- });
2654
- const config = await loadCliConfig(settings, 'test-session', argv);
2655
- expect(config.getTelemetryEnabled()).toBe(true);
2656
- });
2657
- it('should prioritize GEMINI_TELEMETRY_TARGET over settings', async () => {
2658
- vi.stubEnv('GEMINI_TELEMETRY_TARGET', 'gcp');
2659
- process.argv = ['node', 'script.js'];
2660
- const argv = await parseArguments(createTestMergedSettings());
2661
- const settings = createTestMergedSettings({
2662
- telemetry: { target: ServerConfig.TelemetryTarget.LOCAL },
2663
- });
2664
- const config = await loadCliConfig(settings, 'test-session', argv);
2665
- expect(config.getTelemetryTarget()).toBe('gcp');
2666
- });
2667
- it('should throw when GEMINI_TELEMETRY_TARGET is invalid', async () => {
2668
- vi.stubEnv('GEMINI_TELEMETRY_TARGET', 'bogus');
2669
- process.argv = ['node', 'script.js'];
2670
- const argv = await parseArguments(createTestMergedSettings());
2671
- const settings = createTestMergedSettings({
2672
- telemetry: { target: ServerConfig.TelemetryTarget.GCP },
2673
- });
2674
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow(/Invalid telemetry configuration: .*Invalid telemetry target/i);
2675
- vi.unstubAllEnvs();
2676
- });
2677
- it('should prioritize GEMINI_TELEMETRY_OTLP_ENDPOINT over settings and default env var', async () => {
2678
- vi.stubEnv('OTEL_EXPORTER_OTLP_ENDPOINT', 'http://default.env.com');
2679
- vi.stubEnv('GEMINI_TELEMETRY_OTLP_ENDPOINT', 'http://gemini.env.com');
2680
- process.argv = ['node', 'script.js'];
2681
- const argv = await parseArguments(createTestMergedSettings());
2682
- const settings = createTestMergedSettings({
2683
- telemetry: { otlpEndpoint: 'http://settings.com' },
2684
- });
2685
- const config = await loadCliConfig(settings, 'test-session', argv);
2686
- expect(config.getTelemetryOtlpEndpoint()).toBe('http://gemini.env.com');
2687
- });
2688
- it('should prioritize GEMINI_TELEMETRY_OTLP_PROTOCOL over settings', async () => {
2689
- vi.stubEnv('GEMINI_TELEMETRY_OTLP_PROTOCOL', 'http');
2690
- process.argv = ['node', 'script.js'];
2691
- const argv = await parseArguments(createTestMergedSettings());
2692
- const settings = createTestMergedSettings({
2693
- telemetry: { otlpProtocol: 'grpc' },
2694
- });
2695
- const config = await loadCliConfig(settings, 'test-session', argv);
2696
- expect(config.getTelemetryOtlpProtocol()).toBe('http');
2697
- });
2698
- it('should prioritize GEMINI_TELEMETRY_LOG_PROMPTS over settings', async () => {
2699
- vi.stubEnv('GEMINI_TELEMETRY_LOG_PROMPTS', 'false');
2700
- process.argv = ['node', 'script.js'];
2701
- const argv = await parseArguments(createTestMergedSettings());
2702
- const settings = createTestMergedSettings({
2703
- telemetry: { logPrompts: true },
2704
- });
2705
- const config = await loadCliConfig(settings, 'test-session', argv);
2706
- expect(config.getTelemetryLogPromptsEnabled()).toBe(false);
2707
- });
2708
- it('should prioritize GEMINI_TELEMETRY_OUTFILE over settings', async () => {
2709
- vi.stubEnv('GEMINI_TELEMETRY_OUTFILE', '/gemini/env/telemetry.log');
2710
- process.argv = ['node', 'script.js'];
2711
- const argv = await parseArguments(createTestMergedSettings());
2712
- const settings = createTestMergedSettings({
2713
- telemetry: { outfile: '/settings/telemetry.log' },
2714
- });
2715
- const config = await loadCliConfig(settings, 'test-session', argv);
2716
- expect(config.getTelemetryOutfile()).toBe('/gemini/env/telemetry.log');
2717
- });
2718
- it('should prioritize GEMINI_TELEMETRY_USE_COLLECTOR over settings', async () => {
2719
- vi.stubEnv('GEMINI_TELEMETRY_USE_COLLECTOR', 'true');
2720
- process.argv = ['node', 'script.js'];
2721
- const argv = await parseArguments(createTestMergedSettings());
2722
- const settings = createTestMergedSettings({
2723
- telemetry: { useCollector: false },
2724
- });
2725
- const config = await loadCliConfig(settings, 'test-session', argv);
2726
- expect(config.getTelemetryUseCollector()).toBe(true);
2727
- });
2728
- it('should use settings value when GEMINI_TELEMETRY_ENABLED is not set', async () => {
2729
- vi.stubEnv('GEMINI_TELEMETRY_ENABLED', undefined);
2730
- process.argv = ['node', 'script.js'];
2731
- const argv = await parseArguments(createTestMergedSettings());
2732
- const settings = createTestMergedSettings({ telemetry: { enabled: true } });
2733
- const config = await loadCliConfig(settings, 'test-session', argv);
2734
- expect(config.getTelemetryEnabled()).toBe(true);
2735
- });
2736
- it('should use settings value when GEMINI_TELEMETRY_TARGET is not set', async () => {
2737
- vi.stubEnv('GEMINI_TELEMETRY_TARGET', undefined);
2738
- process.argv = ['node', 'script.js'];
2739
- const argv = await parseArguments(createTestMergedSettings());
2740
- const settings = createTestMergedSettings({
2741
- telemetry: { target: ServerConfig.TelemetryTarget.LOCAL },
2742
- });
2743
- const config = await loadCliConfig(settings, 'test-session', argv);
2744
- expect(config.getTelemetryTarget()).toBe('local');
2745
- });
2746
- it("should treat GEMINI_TELEMETRY_ENABLED='1' as true", async () => {
2747
- vi.stubEnv('GEMINI_TELEMETRY_ENABLED', '1');
2748
- process.argv = ['node', 'script.js'];
2749
- const argv = await parseArguments(createTestMergedSettings());
2750
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2751
- expect(config.getTelemetryEnabled()).toBe(true);
2752
- });
2753
- it("should treat GEMINI_TELEMETRY_ENABLED='0' as false", async () => {
2754
- vi.stubEnv('GEMINI_TELEMETRY_ENABLED', '0');
2755
- process.argv = ['node', 'script.js'];
2756
- const argv = await parseArguments(createTestMergedSettings());
2757
- const config = await loadCliConfig(createTestMergedSettings({ telemetry: { enabled: true } }), 'test-session', argv);
2758
- expect(config.getTelemetryEnabled()).toBe(false);
2759
- });
2760
- it("should treat GEMINI_TELEMETRY_LOG_PROMPTS='1' as true", async () => {
2761
- vi.stubEnv('GEMINI_TELEMETRY_LOG_PROMPTS', '1');
2762
- process.argv = ['node', 'script.js'];
2763
- const argv = await parseArguments(createTestMergedSettings());
2764
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2765
- expect(config.getTelemetryLogPromptsEnabled()).toBe(true);
2766
- });
2767
- it("should treat GEMINI_TELEMETRY_LOG_PROMPTS='false' as false", async () => {
2768
- vi.stubEnv('GEMINI_TELEMETRY_LOG_PROMPTS', 'false');
2769
- process.argv = ['node', 'script.js'];
2770
- const argv = await parseArguments(createTestMergedSettings());
2771
- const config = await loadCliConfig(createTestMergedSettings({ telemetry: { logPrompts: true } }), 'test-session', argv);
2772
- expect(config.getTelemetryLogPromptsEnabled()).toBe(false);
2773
- });
2774
- });
2775
- describe('PolicyEngine nonInteractive wiring', () => {
2776
- const originalIsTTY = process.stdin.isTTY;
2777
- beforeEach(() => {
2778
- vi.resetAllMocks();
2779
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2780
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2781
- });
2782
- afterEach(() => {
2783
- process.stdin.isTTY = originalIsTTY;
2784
- vi.restoreAllMocks();
2785
- });
2786
- it('should set nonInteractive to true when -p flag is used', async () => {
2787
- process.stdin.isTTY = true;
2788
- process.argv = ['node', 'script.js', '-p', 'echo hello'];
2789
- const argv = await parseArguments(createTestMergedSettings());
2790
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2791
- expect(config.isInteractive()).toBe(false);
2792
- expect(config.getPolicyEngine()
2793
- .nonInteractive).toBe(true);
2794
- });
2795
- it('should set nonInteractive to false in interactive mode', async () => {
2796
- process.stdin.isTTY = true;
2797
- process.argv = ['node', 'script.js'];
2798
- const argv = await parseArguments(createTestMergedSettings());
2799
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
2800
- expect(config.isInteractive()).toBe(true);
2801
- expect(config.getPolicyEngine()
2802
- .nonInteractive).toBe(false);
2803
- });
2804
- });
2805
- describe('Policy Engine Integration in loadCliConfig', () => {
2806
- beforeEach(() => {
2807
- vi.resetAllMocks();
2808
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2809
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2810
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2811
- });
2812
- afterEach(() => {
2813
- vi.unstubAllEnvs();
2814
- vi.restoreAllMocks();
2815
- });
2816
- it('should pass merged allowed tools from CLI and settings to createPolicyEngineConfig', async () => {
2817
- process.argv = ['node', 'script.js', '--allowed-tools', 'cli-tool'];
2818
- const settings = createTestMergedSettings({
2819
- tools: { allowed: ['settings-tool'] },
2820
- });
2821
- const argv = await parseArguments(createTestMergedSettings());
2822
- await loadCliConfig(settings, 'test-session', argv);
2823
- expect(ServerConfig.createPolicyEngineConfig).toHaveBeenCalledWith(expect.objectContaining({
2824
- tools: expect.objectContaining({
2825
- allowed: expect.arrayContaining(['cli-tool']),
2826
- }),
2827
- }), expect.anything(), undefined, expect.anything());
2828
- });
2829
- it('should pass merged exclude tools from CLI logic and settings to createPolicyEngineConfig', async () => {
2830
- process.stdin.isTTY = false; // Non-interactive to trigger default excludes
2831
- process.argv = ['node', 'script.js', '-p', 'test'];
2832
- const settings = createTestMergedSettings({
2833
- tools: { exclude: ['settings-exclude'] },
2834
- });
2835
- const argv = await parseArguments(createTestMergedSettings());
2836
- await loadCliConfig(settings, 'test-session', argv);
2837
- // In non-interactive mode, only ask_user is excluded by default
2838
- expect(ServerConfig.createPolicyEngineConfig).toHaveBeenCalledWith(expect.objectContaining({
2839
- tools: expect.objectContaining({
2840
- exclude: expect.arrayContaining([ASK_USER_TOOL_NAME]),
2841
- }),
2842
- }), expect.anything(), undefined, expect.anything());
2843
- });
2844
- it('should pass user-provided policy paths from --policy flag to createPolicyEngineConfig', async () => {
2845
- process.argv = [
2846
- 'node',
2847
- 'script.js',
2848
- '--policy',
2849
- '/path/to/policy1.toml,/path/to/policy2.toml',
2850
- ];
2851
- const settings = createTestMergedSettings();
2852
- const argv = await parseArguments(settings);
2853
- await loadCliConfig(settings, 'test-session', argv);
2854
- expect(ServerConfig.createPolicyEngineConfig).toHaveBeenCalledWith(expect.objectContaining({
2855
- policyPaths: [
2856
- path.normalize('/path/to/policy1.toml'),
2857
- path.normalize('/path/to/policy2.toml'),
2858
- ],
2859
- }), expect.anything(), undefined, expect.anything());
2860
- });
2861
- });
2862
- describe('loadCliConfig disableYoloMode', () => {
2863
- beforeEach(() => {
2864
- vi.resetAllMocks();
2865
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2866
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2867
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2868
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
2869
- isTrusted: true,
2870
- source: undefined,
2871
- });
2872
- });
2873
- afterEach(() => {
2874
- vi.unstubAllEnvs();
2875
- vi.restoreAllMocks();
2876
- });
2877
- it('should allow auto_edit mode even if yolo mode is disabled', async () => {
2878
- process.argv = ['node', 'script.js', '--approval-mode=auto_edit'];
2879
- const argv = await parseArguments(createTestMergedSettings());
2880
- const settings = createTestMergedSettings({
2881
- security: { disableYoloMode: true },
2882
- });
2883
- const config = await loadCliConfig(settings, 'test-session', argv);
2884
- expect(config.getApprovalMode()).toBe(ApprovalMode.AUTO_EDIT);
2885
- });
2886
- it('should throw if YOLO mode is attempted when disableYoloMode is true', async () => {
2887
- process.argv = ['node', 'script.js', '--yolo'];
2888
- const argv = await parseArguments(createTestMergedSettings());
2889
- const settings = createTestMergedSettings({
2890
- security: { disableYoloMode: true },
2891
- });
2892
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow('YOLO mode is disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli');
2893
- });
2894
- });
2895
- describe('loadCliConfig secureModeEnabled', () => {
2896
- beforeEach(() => {
2897
- vi.resetAllMocks();
2898
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2899
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2900
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2901
- vi.mocked(isWorkspaceTrusted).mockReturnValue({
2902
- isTrusted: true,
2903
- source: undefined,
2904
- });
2905
- });
2906
- afterEach(() => {
2907
- vi.unstubAllEnvs();
2908
- vi.restoreAllMocks();
2909
- });
2910
- it('should throw an error if YOLO mode is attempted when secureModeEnabled is true', async () => {
2911
- process.argv = ['node', 'script.js', '--yolo'];
2912
- const argv = await parseArguments(createTestMergedSettings());
2913
- const settings = createTestMergedSettings({
2914
- admin: {
2915
- secureModeEnabled: true,
2916
- },
2917
- });
2918
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow('YOLO mode is disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli');
2919
- });
2920
- it('should throw an error if approval-mode=yolo is attempted when secureModeEnabled is true', async () => {
2921
- process.argv = ['node', 'script.js', '--approval-mode=yolo'];
2922
- const argv = await parseArguments(createTestMergedSettings());
2923
- const settings = createTestMergedSettings({
2924
- admin: {
2925
- secureModeEnabled: true,
2926
- },
2927
- });
2928
- await expect(loadCliConfig(settings, 'test-session', argv)).rejects.toThrow('YOLO mode is disabled by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-cli');
2929
- });
2930
- it('should set disableYoloMode to true when secureModeEnabled is true', async () => {
2931
- process.argv = ['node', 'script.js'];
2932
- const argv = await parseArguments(createTestMergedSettings());
2933
- const settings = createTestMergedSettings({
2934
- admin: {
2935
- secureModeEnabled: true,
2936
- },
2937
- });
2938
- const config = await loadCliConfig(settings, 'test-session', argv);
2939
- expect(config.isYoloModeDisabled()).toBe(true);
2940
- });
2941
- });
2942
- describe('loadCliConfig mcpEnabled', () => {
2943
- beforeEach(() => {
2944
- vi.resetAllMocks();
2945
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
2946
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
2947
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
2948
- });
2949
- afterEach(() => {
2950
- vi.unstubAllEnvs();
2951
- vi.restoreAllMocks();
2952
- });
2953
- const mcpSettings = {
2954
- mcp: {
2955
- serverCommand: 'mcp-server',
2956
- allowed: ['serverA'],
2957
- excluded: ['serverB'],
2958
- },
2959
- mcpServers: { serverA: { url: 'http://a' } },
2960
- };
2961
- it('should enable MCP by default', async () => {
2962
- process.argv = ['node', 'script.js'];
2963
- const argv = await parseArguments(createTestMergedSettings());
2964
- const settings = createTestMergedSettings({ ...mcpSettings });
2965
- const config = await loadCliConfig(settings, 'test-session', argv);
2966
- expect(config.getMcpEnabled()).toBe(true);
2967
- expect(config.getMcpServerCommand()).toBe('mcp-server');
2968
- expect(config.getMcpServers()).toEqual({ serverA: { url: 'http://a' } });
2969
- expect(config.getAllowedMcpServers()).toEqual(['serverA']);
2970
- expect(config.getBlockedMcpServers()).toEqual(['serverB']);
2971
- });
2972
- it('should disable MCP when mcpEnabled is false', async () => {
2973
- process.argv = ['node', 'script.js'];
2974
- const argv = await parseArguments(createTestMergedSettings());
2975
- const settings = createTestMergedSettings({
2976
- ...mcpSettings,
2977
- admin: {
2978
- mcp: {
2979
- enabled: false,
2980
- },
2981
- },
2982
- });
2983
- const config = await loadCliConfig(settings, 'test-session', argv);
2984
- expect(config.getMcpEnabled()).toBe(false);
2985
- expect(config.getMcpServerCommand()).toBeUndefined();
2986
- expect(config.getMcpServers()).toEqual({});
2987
- expect(config.getAllowedMcpServers()).toEqual([]);
2988
- expect(config.getBlockedMcpServers()).toEqual([]);
2989
- });
2990
- it('should enable MCP when mcpEnabled is true', async () => {
2991
- process.argv = ['node', 'script.js'];
2992
- const argv = await parseArguments(createTestMergedSettings());
2993
- const settings = createTestMergedSettings({
2994
- ...mcpSettings,
2995
- admin: {
2996
- mcp: {
2997
- enabled: true,
2998
- },
2999
- },
3000
- });
3001
- const config = await loadCliConfig(settings, 'test-session', argv);
3002
- expect(config.getMcpEnabled()).toBe(true);
3003
- expect(config.getMcpServerCommand()).toBe('mcp-server');
3004
- expect(config.getMcpServers()).toEqual({ serverA: { url: 'http://a' } });
3005
- expect(config.getAllowedMcpServers()).toEqual(['serverA']);
3006
- expect(config.getBlockedMcpServers()).toEqual(['serverB']);
3007
- });
3008
- describe('extension plan settings', () => {
3009
- beforeEach(() => {
3010
- vi.spyOn(Storage.prototype, 'getProjectTempDir').mockReturnValue('/mock/home/user/.gemini/tmp/test-project');
3011
- });
3012
- it('should use plan directory from active extension when user has not specified one', async () => {
3013
- process.argv = ['node', 'script.js'];
3014
- const settings = createTestMergedSettings({
3015
- general: {
3016
- plan: { enabled: true },
3017
- },
3018
- });
3019
- const argv = await parseArguments(settings);
3020
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
3021
- {
3022
- name: 'ext-plan',
3023
- isActive: true,
3024
- plan: { directory: 'ext-plans-dir' },
3025
- },
3026
- ]);
3027
- const config = await loadCliConfig(settings, 'test-session', argv);
3028
- expect(config.storage.getPlansDir()).toContain('ext-plans-dir');
3029
- });
3030
- it('should NOT use plan directory from active extension when user has specified one', async () => {
3031
- process.argv = ['node', 'script.js'];
3032
- const settings = createTestMergedSettings({
3033
- general: {
3034
- plan: {
3035
- enabled: true,
3036
- directory: 'user-plans-dir',
3037
- },
3038
- },
3039
- });
3040
- const argv = await parseArguments(settings);
3041
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
3042
- {
3043
- name: 'ext-plan',
3044
- isActive: true,
3045
- plan: { directory: 'ext-plans-dir' },
3046
- },
3047
- ]);
3048
- const config = await loadCliConfig(settings, 'test-session', argv);
3049
- expect(config.storage.getPlansDir()).toContain('user-plans-dir');
3050
- expect(config.storage.getPlansDir()).not.toContain('ext-plans-dir');
3051
- });
3052
- it('should NOT use plan directory from inactive extension', async () => {
3053
- process.argv = ['node', 'script.js'];
3054
- const settings = createTestMergedSettings({
3055
- general: {
3056
- plan: { enabled: true },
3057
- },
3058
- });
3059
- const argv = await parseArguments(settings);
3060
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([
3061
- {
3062
- name: 'ext-plan',
3063
- isActive: false,
3064
- plan: { directory: 'ext-plans-dir-inactive' },
3065
- },
3066
- ]);
3067
- const config = await loadCliConfig(settings, 'test-session', argv);
3068
- expect(config.storage.getPlansDir()).not.toContain('ext-plans-dir-inactive');
3069
- });
3070
- it('should use default path if neither user nor extension settings provide a plan directory', async () => {
3071
- process.argv = ['node', 'script.js'];
3072
- const settings = createTestMergedSettings({
3073
- general: {
3074
- plan: { enabled: true },
3075
- },
3076
- });
3077
- const argv = await parseArguments(settings);
3078
- // No extensions providing plan directory
3079
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
3080
- const config = await loadCliConfig(settings, 'test-session', argv);
3081
- // Should return the default managed temp directory path
3082
- expect(config.storage.getPlansDir()).toBe(path.join('/mock', 'home', 'user', '.gemini', 'tmp', 'test-project', 'test-session', 'plans'));
3083
- });
3084
- });
3085
- });
3086
- describe('loadCliConfig acpMode and clientName', () => {
3087
- beforeEach(() => {
3088
- vi.resetAllMocks();
3089
- vi.mocked(os.homedir).mockReturnValue('/mock/home/user');
3090
- vi.stubEnv('GEMINI_API_KEY', 'test-api-key');
3091
- vi.spyOn(ExtensionManager.prototype, 'getExtensions').mockReturnValue([]);
3092
- });
3093
- afterEach(() => {
3094
- vi.unstubAllEnvs();
3095
- });
3096
- it('should set acpMode to true and detect clientName when --acp flag is used', async () => {
3097
- process.argv = ['node', 'script.js', '--acp'];
3098
- vi.stubEnv('TERM_PROGRAM', 'vscode');
3099
- vi.stubEnv('VSCODE_GIT_ASKPASS_MAIN', '');
3100
- vi.stubEnv('ANTIGRAVITY_CLI_ALIAS', '');
3101
- const argv = await parseArguments(createTestMergedSettings());
3102
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
3103
- expect(config.getAcpMode()).toBe(true);
3104
- expect(config.getClientName()).toBe('acp-vscode');
3105
- });
3106
- it('should set acpMode to true and set clientName to acp for generic terminals', async () => {
3107
- process.argv = ['node', 'script.js', '--acp'];
3108
- vi.stubEnv('TERM_PROGRAM', 'iTerm.app'); // Generic terminal
3109
- vi.stubEnv('VSCODE_GIT_ASKPASS_MAIN', '');
3110
- vi.stubEnv('ANTIGRAVITY_CLI_ALIAS', '');
3111
- const argv = await parseArguments(createTestMergedSettings());
3112
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
3113
- expect(config.getAcpMode()).toBe(true);
3114
- expect(config.getClientName()).toBe('acp');
3115
- });
3116
- it('should set acpMode to false and clientName to tui by default', async () => {
3117
- process.argv = ['node', 'script.js'];
3118
- const argv = await parseArguments(createTestMergedSettings());
3119
- const config = await loadCliConfig(createTestMergedSettings(), 'test-session', argv);
3120
- expect(config.getAcpMode()).toBe(false);
3121
- expect(config.getClientName()).toBe('tui');
3122
- });
3123
- });
3124
- //# sourceMappingURL=config.test.js.map