@google/gemini-cli-core 0.30.0-preview.6 → 0.31.0-preview.0

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 (687) hide show
  1. package/README.md +1 -1
  2. package/dist/docs/CONTRIBUTING.md +6 -7
  3. package/dist/docs/changelogs/index.md +22 -2
  4. package/dist/docs/changelogs/latest.md +359 -293
  5. package/dist/docs/changelogs/preview.md +300 -349
  6. package/dist/docs/cli/cli-reference.md +23 -23
  7. package/dist/docs/cli/enterprise.md +7 -7
  8. package/dist/docs/cli/gemini-md.md +1 -1
  9. package/dist/docs/cli/model.md +1 -1
  10. package/dist/docs/cli/plan-mode.md +180 -80
  11. package/dist/docs/cli/sandbox.md +3 -3
  12. package/dist/docs/cli/settings.md +59 -51
  13. package/dist/docs/cli/telemetry.md +4 -1
  14. package/dist/docs/cli/themes.md +3 -3
  15. package/dist/docs/cli/trusted-folders.md +31 -0
  16. package/dist/docs/cli/tutorials/memory-management.md +2 -2
  17. package/dist/docs/cli/tutorials/session-management.md +1 -1
  18. package/dist/docs/core/index.md +7 -7
  19. package/dist/docs/core/subagents.md +155 -39
  20. package/dist/docs/extensions/reference.md +38 -14
  21. package/dist/docs/get-started/authentication.md +4 -4
  22. package/dist/docs/get-started/examples.md +2 -2
  23. package/dist/docs/get-started/gemini-3.md +17 -3
  24. package/dist/docs/get-started/index.md +11 -2
  25. package/dist/docs/hooks/best-practices.md +1 -1
  26. package/dist/docs/hooks/reference.md +8 -0
  27. package/dist/docs/ide-integration/index.md +14 -0
  28. package/dist/docs/index.md +62 -67
  29. package/dist/docs/redirects.json +19 -0
  30. package/dist/docs/{cli → reference}/commands.md +67 -11
  31. package/dist/docs/{get-started → reference}/configuration.md +93 -24
  32. package/dist/docs/{cli → reference}/keyboard-shortcuts.md +3 -3
  33. package/dist/docs/{core → reference}/policy-engine.md +63 -27
  34. package/dist/docs/{faq.md → resources/faq.md} +1 -1
  35. package/dist/docs/{quota-and-pricing.md → resources/quota-and-pricing.md} +12 -5
  36. package/dist/docs/{tos-privacy.md → resources/tos-privacy.md} +2 -2
  37. package/dist/docs/{troubleshooting.md → resources/troubleshooting.md} +1 -1
  38. package/dist/docs/sidebar.json +203 -166
  39. package/dist/docs/tools/file-system.md +7 -4
  40. package/dist/docs/tools/index.md +5 -2
  41. package/dist/docs/tools/internal-docs.md +5 -5
  42. package/dist/docs/tools/mcp-server.md +62 -2
  43. package/dist/docs/tools/planning.md +2 -0
  44. package/dist/docs/tools/shell.md +3 -3
  45. package/dist/src/agents/a2a-client-manager.test.js +1 -2
  46. package/dist/src/agents/a2a-client-manager.test.js.map +1 -1
  47. package/dist/src/agents/a2aUtils.d.ts +1 -5
  48. package/dist/src/agents/a2aUtils.js +1 -1
  49. package/dist/src/agents/a2aUtils.js.map +1 -1
  50. package/dist/src/agents/acknowledgedAgents.js +1 -0
  51. package/dist/src/agents/acknowledgedAgents.js.map +1 -1
  52. package/dist/src/agents/agent-scheduler.js +1 -0
  53. package/dist/src/agents/agent-scheduler.js.map +1 -1
  54. package/dist/src/agents/agentLoader.d.ts +0 -1
  55. package/dist/src/agents/agentLoader.js +22 -21
  56. package/dist/src/agents/agentLoader.js.map +1 -1
  57. package/dist/src/agents/agentLoader.test.js +1 -5
  58. package/dist/src/agents/agentLoader.test.js.map +1 -1
  59. package/dist/src/agents/auth-provider/api-key-provider.d.ts +30 -0
  60. package/dist/src/agents/auth-provider/api-key-provider.js +66 -0
  61. package/dist/src/agents/auth-provider/api-key-provider.js.map +1 -0
  62. package/dist/src/agents/auth-provider/api-key-provider.test.d.ts +6 -0
  63. package/dist/src/agents/auth-provider/api-key-provider.test.js +130 -0
  64. package/dist/src/agents/auth-provider/api-key-provider.test.js.map +1 -0
  65. package/dist/src/agents/auth-provider/base-provider.d.ts +2 -2
  66. package/dist/src/agents/auth-provider/base-provider.js.map +1 -1
  67. package/dist/src/agents/auth-provider/factory.js +6 -3
  68. package/dist/src/agents/auth-provider/factory.js.map +1 -1
  69. package/dist/src/agents/auth-provider/factory.test.js +12 -0
  70. package/dist/src/agents/auth-provider/factory.test.js.map +1 -1
  71. package/dist/src/agents/auth-provider/types.d.ts +2 -4
  72. package/dist/src/agents/browser/analyzeScreenshot.d.ts +35 -0
  73. package/dist/src/agents/browser/analyzeScreenshot.js +183 -0
  74. package/dist/src/agents/browser/analyzeScreenshot.js.map +1 -0
  75. package/dist/src/agents/browser/analyzeScreenshot.test.d.ts +6 -0
  76. package/dist/src/agents/browser/analyzeScreenshot.test.js +161 -0
  77. package/dist/src/agents/browser/analyzeScreenshot.test.js.map +1 -0
  78. package/dist/src/agents/browser/browserAgentDefinition.d.ts +50 -0
  79. package/dist/src/agents/browser/browserAgentDefinition.js +141 -0
  80. package/dist/src/agents/browser/browserAgentDefinition.js.map +1 -0
  81. package/dist/src/agents/browser/browserAgentFactory.d.ts +42 -0
  82. package/dist/src/agents/browser/browserAgentFactory.js +107 -0
  83. package/dist/src/agents/browser/browserAgentFactory.js.map +1 -0
  84. package/dist/src/agents/browser/browserAgentFactory.test.d.ts +6 -0
  85. package/dist/src/agents/browser/browserAgentFactory.test.js +186 -0
  86. package/dist/src/agents/browser/browserAgentFactory.test.js.map +1 -0
  87. package/dist/src/agents/browser/browserAgentInvocation.d.ts +44 -0
  88. package/dist/src/agents/browser/browserAgentInvocation.js +109 -0
  89. package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -0
  90. package/dist/src/agents/browser/browserAgentInvocation.test.d.ts +6 -0
  91. package/dist/src/agents/browser/browserAgentInvocation.test.js +87 -0
  92. package/dist/src/agents/browser/browserAgentInvocation.test.js.map +1 -0
  93. package/dist/src/agents/browser/browserManager.d.ts +110 -0
  94. package/dist/src/agents/browser/browserManager.js +323 -0
  95. package/dist/src/agents/browser/browserManager.js.map +1 -0
  96. package/dist/src/agents/browser/browserManager.test.d.ts +6 -0
  97. package/dist/src/agents/browser/browserManager.test.js +314 -0
  98. package/dist/src/agents/browser/browserManager.test.js.map +1 -0
  99. package/dist/src/agents/browser/mcpToolWrapper.d.ts +45 -0
  100. package/dist/src/agents/browser/mcpToolWrapper.js +356 -0
  101. package/dist/src/agents/browser/mcpToolWrapper.js.map +1 -0
  102. package/dist/src/agents/browser/mcpToolWrapper.test.d.ts +6 -0
  103. package/dist/src/agents/browser/mcpToolWrapper.test.js +126 -0
  104. package/dist/src/agents/browser/mcpToolWrapper.test.js.map +1 -0
  105. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.d.ts +6 -0
  106. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.js +57 -0
  107. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.js.map +1 -0
  108. package/dist/src/agents/browser/modelAvailability.d.ts +23 -0
  109. package/dist/src/agents/browser/modelAvailability.js +23 -0
  110. package/dist/src/agents/browser/modelAvailability.js.map +1 -0
  111. package/dist/src/agents/local-executor.js +73 -31
  112. package/dist/src/agents/local-executor.js.map +1 -1
  113. package/dist/src/agents/local-executor.test.js +157 -4
  114. package/dist/src/agents/local-executor.test.js.map +1 -1
  115. package/dist/src/agents/local-invocation.test.js.map +1 -1
  116. package/dist/src/agents/registry.js +8 -0
  117. package/dist/src/agents/registry.js.map +1 -1
  118. package/dist/src/agents/registry.test.js.map +1 -1
  119. package/dist/src/agents/remote-invocation.d.ts +2 -1
  120. package/dist/src/agents/remote-invocation.js +3 -3
  121. package/dist/src/agents/remote-invocation.js.map +1 -1
  122. package/dist/src/agents/subagent-tool-wrapper.js +6 -0
  123. package/dist/src/agents/subagent-tool-wrapper.js.map +1 -1
  124. package/dist/src/agents/subagent-tool.d.ts +3 -0
  125. package/dist/src/agents/subagent-tool.js +62 -3
  126. package/dist/src/agents/subagent-tool.js.map +1 -1
  127. package/dist/src/agents/subagent-tool.test.js +143 -0
  128. package/dist/src/agents/subagent-tool.test.js.map +1 -1
  129. package/dist/src/availability/fallbackIntegration.test.js +4 -1
  130. package/dist/src/availability/fallbackIntegration.test.js.map +1 -1
  131. package/dist/src/availability/policyHelpers.js +3 -1
  132. package/dist/src/availability/policyHelpers.js.map +1 -1
  133. package/dist/src/availability/policyHelpers.test.js +51 -5
  134. package/dist/src/availability/policyHelpers.test.js.map +1 -1
  135. package/dist/src/code_assist/admin/admin_controls.js +1 -0
  136. package/dist/src/code_assist/admin/admin_controls.js.map +1 -1
  137. package/dist/src/code_assist/converter.js +8 -2
  138. package/dist/src/code_assist/converter.js.map +1 -1
  139. package/dist/src/code_assist/converter.test.js.map +1 -1
  140. package/dist/src/code_assist/experiments/experiments.js +1 -1
  141. package/dist/src/code_assist/experiments/experiments.js.map +1 -1
  142. package/dist/src/code_assist/oauth-credential-storage.js +1 -1
  143. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
  144. package/dist/src/code_assist/oauth-credential-storage.test.js +5 -0
  145. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
  146. package/dist/src/code_assist/oauth2.js +11 -8
  147. package/dist/src/code_assist/oauth2.js.map +1 -1
  148. package/dist/src/code_assist/oauth2.test.js +55 -0
  149. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  150. package/dist/src/code_assist/server.js +22 -13
  151. package/dist/src/code_assist/server.js.map +1 -1
  152. package/dist/src/code_assist/server.test.js +26 -0
  153. package/dist/src/code_assist/server.test.js.map +1 -1
  154. package/dist/src/code_assist/telemetry.js +16 -3
  155. package/dist/src/code_assist/telemetry.js.map +1 -1
  156. package/dist/src/code_assist/telemetry.test.js +10 -0
  157. package/dist/src/code_assist/telemetry.test.js.map +1 -1
  158. package/dist/src/code_assist/types.d.ts +13 -12
  159. package/dist/src/code_assist/types.js.map +1 -1
  160. package/dist/src/config/config.d.ts +83 -8
  161. package/dist/src/config/config.js +127 -23
  162. package/dist/src/config/config.js.map +1 -1
  163. package/dist/src/config/config.test.js +285 -10
  164. package/dist/src/config/config.test.js.map +1 -1
  165. package/dist/src/config/projectRegistry.js +1 -0
  166. package/dist/src/config/projectRegistry.js.map +1 -1
  167. package/dist/src/config/storage.d.ts +17 -1
  168. package/dist/src/config/storage.js +82 -2
  169. package/dist/src/config/storage.js.map +1 -1
  170. package/dist/src/config/storage.test.js +149 -2
  171. package/dist/src/config/storage.test.js.map +1 -1
  172. package/dist/src/config/userHintService.d.ts +46 -0
  173. package/dist/src/config/userHintService.js +81 -0
  174. package/dist/src/config/userHintService.js.map +1 -0
  175. package/dist/src/config/userHintService.test.d.ts +6 -0
  176. package/dist/src/config/userHintService.test.js +62 -0
  177. package/dist/src/config/userHintService.test.js.map +1 -0
  178. package/dist/src/confirmation-bus/message-bus.js +15 -3
  179. package/dist/src/confirmation-bus/message-bus.js.map +1 -1
  180. package/dist/src/confirmation-bus/message-bus.test.js +15 -0
  181. package/dist/src/confirmation-bus/message-bus.test.js.map +1 -1
  182. package/dist/src/confirmation-bus/types.d.ts +7 -0
  183. package/dist/src/confirmation-bus/types.js.map +1 -1
  184. package/dist/src/core/baseLlmClient.d.ts +2 -3
  185. package/dist/src/core/baseLlmClient.js +7 -5
  186. package/dist/src/core/baseLlmClient.js.map +1 -1
  187. package/dist/src/core/baseLlmClient.test.js +45 -20
  188. package/dist/src/core/baseLlmClient.test.js.map +1 -1
  189. package/dist/src/core/client.js +18 -7
  190. package/dist/src/core/client.js.map +1 -1
  191. package/dist/src/core/coreToolHookTriggers.d.ts +2 -3
  192. package/dist/src/core/coreToolHookTriggers.js +8 -3
  193. package/dist/src/core/coreToolHookTriggers.js.map +1 -1
  194. package/dist/src/core/coreToolScheduler.js +2 -1
  195. package/dist/src/core/coreToolScheduler.js.map +1 -1
  196. package/dist/src/core/coreToolScheduler.test.js +10 -3
  197. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  198. package/dist/src/core/fakeContentGenerator.js +2 -0
  199. package/dist/src/core/fakeContentGenerator.js.map +1 -1
  200. package/dist/src/core/geminiChat.d.ts +1 -1
  201. package/dist/src/core/geminiChat.js +5 -5
  202. package/dist/src/core/geminiChat.js.map +1 -1
  203. package/dist/src/core/geminiChat.test.js +1 -0
  204. package/dist/src/core/geminiChat.test.js.map +1 -1
  205. package/dist/src/core/geminiChat_network_retry.test.js +1 -0
  206. package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
  207. package/dist/src/core/logger.js +2 -0
  208. package/dist/src/core/logger.js.map +1 -1
  209. package/dist/src/core/loggingContentGenerator.d.ts +14 -2
  210. package/dist/src/core/loggingContentGenerator.js +98 -4
  211. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  212. package/dist/src/core/loggingContentGenerator.test.js +275 -1
  213. package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
  214. package/dist/src/core/prompts.test.js +55 -27
  215. package/dist/src/core/prompts.test.js.map +1 -1
  216. package/dist/src/core/recordingContentGenerator.test.js +5 -0
  217. package/dist/src/core/recordingContentGenerator.test.js.map +1 -1
  218. package/dist/src/core/turn.d.ts +4 -2
  219. package/dist/src/core/turn.js +2 -0
  220. package/dist/src/core/turn.js.map +1 -1
  221. package/dist/src/core/turn.test.js +4 -1
  222. package/dist/src/core/turn.test.js.map +1 -1
  223. package/dist/src/generated/git-commit.d.ts +2 -2
  224. package/dist/src/generated/git-commit.js +2 -2
  225. package/dist/src/hooks/hookAggregator.d.ts +1 -2
  226. package/dist/src/hooks/hookAggregator.js +1 -2
  227. package/dist/src/hooks/hookAggregator.js.map +1 -1
  228. package/dist/src/hooks/hookEventHandler.d.ts +2 -2
  229. package/dist/src/hooks/hookEventHandler.js +13 -4
  230. package/dist/src/hooks/hookEventHandler.js.map +1 -1
  231. package/dist/src/hooks/hookEventHandler.test.js +1 -2
  232. package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
  233. package/dist/src/hooks/hookPlanner.d.ts +1 -2
  234. package/dist/src/hooks/hookPlanner.js.map +1 -1
  235. package/dist/src/hooks/hookRegistry.d.ts +8 -0
  236. package/dist/src/hooks/hookRegistry.js +31 -3
  237. package/dist/src/hooks/hookRegistry.js.map +1 -1
  238. package/dist/src/hooks/hookRegistry.test.js.map +1 -1
  239. package/dist/src/hooks/hookRunner.d.ts +5 -2
  240. package/dist/src/hooks/hookRunner.js +52 -2
  241. package/dist/src/hooks/hookRunner.js.map +1 -1
  242. package/dist/src/hooks/hookRunner.test.js.map +1 -1
  243. package/dist/src/hooks/hookSystem.d.ts +11 -3
  244. package/dist/src/hooks/hookSystem.js +10 -4
  245. package/dist/src/hooks/hookSystem.js.map +1 -1
  246. package/dist/src/hooks/hookSystem.test.js +1 -0
  247. package/dist/src/hooks/hookSystem.test.js.map +1 -1
  248. package/dist/src/hooks/runtimeHooks.test.d.ts +6 -0
  249. package/dist/src/hooks/runtimeHooks.test.js +100 -0
  250. package/dist/src/hooks/runtimeHooks.test.js.map +1 -0
  251. package/dist/src/hooks/trustedHooks.js +6 -1
  252. package/dist/src/hooks/trustedHooks.js.map +1 -1
  253. package/dist/src/hooks/trustedHooks.test.js +17 -9
  254. package/dist/src/hooks/trustedHooks.test.js.map +1 -1
  255. package/dist/src/hooks/types.d.ts +49 -8
  256. package/dist/src/hooks/types.js +20 -1
  257. package/dist/src/hooks/types.js.map +1 -1
  258. package/dist/src/ide/detect-ide.d.ts +0 -1
  259. package/dist/src/ide/detect-ide.js +1 -1
  260. package/dist/src/ide/detect-ide.js.map +1 -1
  261. package/dist/src/ide/ide-client.js +3 -2
  262. package/dist/src/ide/ide-client.js.map +1 -1
  263. package/dist/src/ide/ide-connection-utils.js +90 -14
  264. package/dist/src/ide/ide-connection-utils.js.map +1 -1
  265. package/dist/src/ide/ide-connection-utils.test.js +78 -0
  266. package/dist/src/ide/ide-connection-utils.test.js.map +1 -1
  267. package/dist/src/ide/ide-installer.test.js +1 -2
  268. package/dist/src/ide/ide-installer.test.js.map +1 -1
  269. package/dist/src/ide/process-utils.d.ts +7 -0
  270. package/dist/src/ide/process-utils.js +20 -0
  271. package/dist/src/ide/process-utils.js.map +1 -1
  272. package/dist/src/ide/process-utils.test.js +30 -0
  273. package/dist/src/ide/process-utils.test.js.map +1 -1
  274. package/dist/src/index.d.ts +6 -1
  275. package/dist/src/index.js +6 -1
  276. package/dist/src/index.js.map +1 -1
  277. package/dist/src/mcp/oauth-provider.d.ts +1 -1
  278. package/dist/src/mcp/oauth-provider.js +8 -7
  279. package/dist/src/mcp/oauth-provider.js.map +1 -1
  280. package/dist/src/mcp/oauth-provider.test.js +34 -2
  281. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  282. package/dist/src/mcp/oauth-utils.js +2 -0
  283. package/dist/src/mcp/oauth-utils.js.map +1 -1
  284. package/dist/src/mcp/oauth-utils.test.js +12 -0
  285. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  286. package/dist/src/mcp/token-storage/file-token-storage.js +4 -1
  287. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
  288. package/dist/src/mcp/token-storage/file-token-storage.test.js +40 -2
  289. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
  290. package/dist/src/mcp/token-storage/keychain-token-storage.js +2 -0
  291. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
  292. package/dist/src/policy/config.d.ts +18 -9
  293. package/dist/src/policy/config.js +75 -54
  294. package/dist/src/policy/config.js.map +1 -1
  295. package/dist/src/policy/config.test.js +26 -26
  296. package/dist/src/policy/integrity.d.ts +45 -0
  297. package/dist/src/policy/integrity.js +121 -0
  298. package/dist/src/policy/integrity.js.map +1 -0
  299. package/dist/src/policy/integrity.test.d.ts +6 -0
  300. package/dist/src/policy/integrity.test.js +132 -0
  301. package/dist/src/policy/integrity.test.js.map +1 -0
  302. package/dist/src/policy/persistence.test.js +29 -19
  303. package/dist/src/policy/persistence.test.js.map +1 -1
  304. package/dist/src/policy/policies/conseca.toml +6 -0
  305. package/dist/src/policy/policies/plan.toml +28 -12
  306. package/dist/src/policy/policies/read-only.toml +11 -10
  307. package/dist/src/policy/policies/write.toml +11 -10
  308. package/dist/src/policy/policies/yolo.toml +11 -10
  309. package/dist/src/policy/policy-engine.d.ts +16 -3
  310. package/dist/src/policy/policy-engine.js +154 -29
  311. package/dist/src/policy/policy-engine.js.map +1 -1
  312. package/dist/src/policy/policy-engine.test.js +480 -9
  313. package/dist/src/policy/policy-engine.test.js.map +1 -1
  314. package/dist/src/policy/policy-updater.test.js +11 -6
  315. package/dist/src/policy/policy-updater.test.js.map +1 -1
  316. package/dist/src/policy/toml-loader.d.ts +13 -2
  317. package/dist/src/policy/toml-loader.js +55 -34
  318. package/dist/src/policy/toml-loader.js.map +1 -1
  319. package/dist/src/policy/toml-loader.test.js +115 -7
  320. package/dist/src/policy/toml-loader.test.js.map +1 -1
  321. package/dist/src/policy/types.d.ts +18 -1
  322. package/dist/src/policy/types.js +1 -0
  323. package/dist/src/policy/types.js.map +1 -1
  324. package/dist/src/policy/workspace-policy.test.d.ts +6 -0
  325. package/dist/src/policy/workspace-policy.test.js +231 -0
  326. package/dist/src/policy/workspace-policy.test.js.map +1 -0
  327. package/dist/src/prompts/promptProvider.js +11 -13
  328. package/dist/src/prompts/promptProvider.js.map +1 -1
  329. package/dist/src/prompts/promptProvider.test.js +64 -3
  330. package/dist/src/prompts/promptProvider.test.js.map +1 -1
  331. package/dist/src/prompts/snippets.js +41 -10
  332. package/dist/src/prompts/snippets.js.map +1 -1
  333. package/dist/src/prompts/snippets.legacy.js +1 -0
  334. package/dist/src/prompts/snippets.legacy.js.map +1 -1
  335. package/dist/src/routing/modelRouterService.js +3 -1
  336. package/dist/src/routing/modelRouterService.js.map +1 -1
  337. package/dist/src/routing/modelRouterService.test.js +12 -6
  338. package/dist/src/routing/modelRouterService.test.js.map +1 -1
  339. package/dist/src/routing/strategies/approvalModeStrategy.d.ts +18 -0
  340. package/dist/src/routing/strategies/approvalModeStrategy.js +58 -0
  341. package/dist/src/routing/strategies/approvalModeStrategy.js.map +1 -0
  342. package/dist/src/routing/strategies/approvalModeStrategy.test.d.ts +6 -0
  343. package/dist/src/routing/strategies/approvalModeStrategy.test.js +110 -0
  344. package/dist/src/routing/strategies/approvalModeStrategy.test.js.map +1 -0
  345. package/dist/src/safety/checker-runner.js +1 -0
  346. package/dist/src/safety/checker-runner.js.map +1 -1
  347. package/dist/src/safety/conseca/conseca.d.ts +31 -0
  348. package/dist/src/safety/conseca/conseca.js +105 -0
  349. package/dist/src/safety/conseca/conseca.js.map +1 -0
  350. package/dist/src/safety/conseca/conseca.test.d.ts +6 -0
  351. package/dist/src/safety/conseca/conseca.test.js +226 -0
  352. package/dist/src/safety/conseca/conseca.test.js.map +1 -0
  353. package/dist/src/safety/conseca/integration.test.d.ts +6 -0
  354. package/dist/src/safety/conseca/integration.test.js +19 -0
  355. package/dist/src/safety/conseca/integration.test.js.map +1 -0
  356. package/dist/src/safety/conseca/policy-enforcer.d.ts +13 -0
  357. package/dist/src/safety/conseca/policy-enforcer.js +135 -0
  358. package/dist/src/safety/conseca/policy-enforcer.js.map +1 -0
  359. package/dist/src/safety/conseca/policy-enforcer.test.d.ts +6 -0
  360. package/dist/src/safety/conseca/policy-enforcer.test.js +141 -0
  361. package/dist/src/safety/conseca/policy-enforcer.test.js.map +1 -0
  362. package/dist/src/safety/conseca/policy-generator.d.ts +15 -0
  363. package/dist/src/safety/conseca/policy-generator.js +144 -0
  364. package/dist/src/safety/conseca/policy-generator.js.map +1 -0
  365. package/dist/src/safety/conseca/policy-generator.test.d.ts +6 -0
  366. package/dist/src/safety/conseca/policy-generator.test.js +84 -0
  367. package/dist/src/safety/conseca/policy-generator.test.js.map +1 -0
  368. package/dist/src/safety/conseca/types.d.ts +15 -0
  369. package/dist/src/safety/conseca/types.js +7 -0
  370. package/dist/src/safety/conseca/types.js.map +1 -0
  371. package/dist/src/safety/context-builder.d.ts +3 -3
  372. package/dist/src/safety/context-builder.js +60 -4
  373. package/dist/src/safety/context-builder.js.map +1 -1
  374. package/dist/src/safety/context-builder.test.js +98 -18
  375. package/dist/src/safety/context-builder.test.js.map +1 -1
  376. package/dist/src/safety/protocol.d.ts +4 -0
  377. package/dist/src/safety/registry.d.ts +2 -1
  378. package/dist/src/safety/registry.js +14 -4
  379. package/dist/src/safety/registry.js.map +1 -1
  380. package/dist/src/safety/registry.test.js +5 -2
  381. package/dist/src/safety/registry.test.js.map +1 -1
  382. package/dist/src/scheduler/confirmation.d.ts +0 -13
  383. package/dist/src/scheduler/confirmation.js +1 -1
  384. package/dist/src/scheduler/confirmation.js.map +1 -1
  385. package/dist/src/scheduler/policy.js +6 -2
  386. package/dist/src/scheduler/policy.js.map +1 -1
  387. package/dist/src/scheduler/policy.test.js +4 -3
  388. package/dist/src/scheduler/policy.test.js.map +1 -1
  389. package/dist/src/scheduler/scheduler.d.ts +3 -1
  390. package/dist/src/scheduler/scheduler.js +148 -28
  391. package/dist/src/scheduler/scheduler.js.map +1 -1
  392. package/dist/src/scheduler/scheduler.test.js +341 -242
  393. package/dist/src/scheduler/scheduler.test.js.map +1 -1
  394. package/dist/src/scheduler/scheduler_parallel.test.d.ts +6 -0
  395. package/dist/src/scheduler/scheduler_parallel.test.js +309 -0
  396. package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -0
  397. package/dist/src/scheduler/state-manager.d.ts +8 -0
  398. package/dist/src/scheduler/state-manager.js +30 -2
  399. package/dist/src/scheduler/state-manager.js.map +1 -1
  400. package/dist/src/scheduler/state-manager.test.js +61 -0
  401. package/dist/src/scheduler/state-manager.test.js.map +1 -1
  402. package/dist/src/scheduler/tool-executor.js +15 -7
  403. package/dist/src/scheduler/tool-executor.js.map +1 -1
  404. package/dist/src/scheduler/tool-executor.test.js +1 -1
  405. package/dist/src/scheduler/tool-executor.test.js.map +1 -1
  406. package/dist/src/scheduler/types.d.ts +23 -0
  407. package/dist/src/services/FolderTrustDiscoveryService.d.ts +32 -0
  408. package/dist/src/services/FolderTrustDiscoveryService.js +167 -0
  409. package/dist/src/services/FolderTrustDiscoveryService.js.map +1 -0
  410. package/dist/src/services/FolderTrustDiscoveryService.test.d.ts +6 -0
  411. package/dist/src/services/FolderTrustDiscoveryService.test.js +118 -0
  412. package/dist/src/services/FolderTrustDiscoveryService.test.js.map +1 -0
  413. package/dist/src/services/chatCompressionService.d.ts +0 -14
  414. package/dist/src/services/chatCompressionService.js +29 -7
  415. package/dist/src/services/chatCompressionService.js.map +1 -1
  416. package/dist/src/services/chatCompressionService.test.js +3 -1
  417. package/dist/src/services/chatCompressionService.test.js.map +1 -1
  418. package/dist/src/services/chatRecordingService.d.ts +7 -1
  419. package/dist/src/services/chatRecordingService.js +12 -1
  420. package/dist/src/services/chatRecordingService.js.map +1 -1
  421. package/dist/src/services/chatRecordingService.test.js +34 -0
  422. package/dist/src/services/chatRecordingService.test.js.map +1 -1
  423. package/dist/src/services/loopDetectionService.js +1 -2
  424. package/dist/src/services/loopDetectionService.js.map +1 -1
  425. package/dist/src/services/sessionSummaryUtils.js +3 -0
  426. package/dist/src/services/sessionSummaryUtils.js.map +1 -1
  427. package/dist/src/services/shellExecutionService.js +6 -0
  428. package/dist/src/services/shellExecutionService.js.map +1 -1
  429. package/dist/src/skills/skillLoader.js +2 -2
  430. package/dist/src/skills/skillLoader.js.map +1 -1
  431. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -1
  432. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +35 -4
  433. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  434. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +0 -1
  435. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +19 -5
  436. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  437. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +14 -1
  438. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +29 -1
  439. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  440. package/dist/src/telemetry/conseca-logger.d.ts +9 -0
  441. package/dist/src/telemetry/conseca-logger.js +91 -0
  442. package/dist/src/telemetry/conseca-logger.js.map +1 -0
  443. package/dist/src/telemetry/conseca-logger.test.d.ts +6 -0
  444. package/dist/src/telemetry/conseca-logger.test.js +89 -0
  445. package/dist/src/telemetry/conseca-logger.test.js.map +1 -0
  446. package/dist/src/telemetry/gcp-exporters.js +1 -2
  447. package/dist/src/telemetry/gcp-exporters.js.map +1 -1
  448. package/dist/src/telemetry/index.d.ts +2 -1
  449. package/dist/src/telemetry/index.js +2 -1
  450. package/dist/src/telemetry/index.js.map +1 -1
  451. package/dist/src/telemetry/integration.test.circular.js +3 -0
  452. package/dist/src/telemetry/integration.test.circular.js.map +1 -1
  453. package/dist/src/telemetry/loggers.d.ts +1 -2
  454. package/dist/src/telemetry/loggers.js +3 -13
  455. package/dist/src/telemetry/loggers.js.map +1 -1
  456. package/dist/src/telemetry/loggers.test.circular.js +3 -0
  457. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  458. package/dist/src/telemetry/loggers.test.js +6 -5
  459. package/dist/src/telemetry/loggers.test.js.map +1 -1
  460. package/dist/src/telemetry/metrics.d.ts +1 -3
  461. package/dist/src/telemetry/metrics.js +3 -2
  462. package/dist/src/telemetry/metrics.js.map +1 -1
  463. package/dist/src/telemetry/metrics.test.js +7 -3
  464. package/dist/src/telemetry/metrics.test.js.map +1 -1
  465. package/dist/src/telemetry/sanitize.test.js +19 -18
  466. package/dist/src/telemetry/sanitize.test.js.map +1 -1
  467. package/dist/src/telemetry/semantic.d.ts +7 -9
  468. package/dist/src/telemetry/semantic.js +8 -8
  469. package/dist/src/telemetry/semantic.js.map +1 -1
  470. package/dist/src/telemetry/types.d.ts +42 -4
  471. package/dist/src/telemetry/types.js +87 -2
  472. package/dist/src/telemetry/types.js.map +1 -1
  473. package/dist/src/telemetry/uiTelemetry.d.ts +1 -2
  474. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  475. package/dist/src/telemetry/uiTelemetry.test.js +1 -2
  476. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  477. package/dist/src/tools/ask-user.test.js +1 -19
  478. package/dist/src/tools/ask-user.test.js.map +1 -1
  479. package/dist/src/tools/confirmation-policy.test.js +14 -17
  480. package/dist/src/tools/confirmation-policy.test.js.map +1 -1
  481. package/dist/src/tools/definitions/dynamic-declaration-helpers.js +1 -1
  482. package/dist/src/tools/definitions/dynamic-declaration-helpers.js.map +1 -1
  483. package/dist/src/tools/definitions/model-family-sets/default-legacy.js +14 -16
  484. package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
  485. package/dist/src/tools/definitions/model-family-sets/gemini-3.js +24 -59
  486. package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
  487. package/dist/src/tools/diff-utils.d.ts +9 -0
  488. package/dist/src/tools/diff-utils.js +66 -0
  489. package/dist/src/tools/diff-utils.js.map +1 -0
  490. package/dist/src/tools/diff-utils.test.d.ts +6 -0
  491. package/dist/src/tools/diff-utils.test.js +53 -0
  492. package/dist/src/tools/diff-utils.test.js.map +1 -0
  493. package/dist/src/tools/edit.d.ts +9 -4
  494. package/dist/src/tools/edit.js +203 -34
  495. package/dist/src/tools/edit.js.map +1 -1
  496. package/dist/src/tools/edit.test.js +225 -10
  497. package/dist/src/tools/edit.test.js.map +1 -1
  498. package/dist/src/tools/enter-plan-mode.js +1 -1
  499. package/dist/src/tools/enter-plan-mode.js.map +1 -1
  500. package/dist/src/tools/enter-plan-mode.test.js +1 -1
  501. package/dist/src/tools/enter-plan-mode.test.js.map +1 -1
  502. package/dist/src/tools/exit-plan-mode.js +10 -24
  503. package/dist/src/tools/exit-plan-mode.js.map +1 -1
  504. package/dist/src/tools/exit-plan-mode.test.js +1 -1
  505. package/dist/src/tools/exit-plan-mode.test.js.map +1 -1
  506. package/dist/src/tools/grep-utils.d.ts +49 -0
  507. package/dist/src/tools/grep-utils.js +139 -0
  508. package/dist/src/tools/grep-utils.js.map +1 -0
  509. package/dist/src/tools/grep.js +4 -44
  510. package/dist/src/tools/grep.js.map +1 -1
  511. package/dist/src/tools/grep.test.js +21 -2
  512. package/dist/src/tools/grep.test.js.map +1 -1
  513. package/dist/src/tools/ls.js +6 -1
  514. package/dist/src/tools/ls.js.map +1 -1
  515. package/dist/src/tools/ls.test.js +2 -2
  516. package/dist/src/tools/ls.test.js.map +1 -1
  517. package/dist/src/tools/mcp-client-manager.js +16 -18
  518. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  519. package/dist/src/tools/mcp-client-manager.test.js +51 -0
  520. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  521. package/dist/src/tools/mcp-client.d.ts +22 -1
  522. package/dist/src/tools/mcp-client.js +95 -36
  523. package/dist/src/tools/mcp-client.js.map +1 -1
  524. package/dist/src/tools/mcp-client.test.js +148 -20
  525. package/dist/src/tools/mcp-client.test.js.map +1 -1
  526. package/dist/src/tools/mcp-tool.d.ts +15 -5
  527. package/dist/src/tools/mcp-tool.js +36 -8
  528. package/dist/src/tools/mcp-tool.js.map +1 -1
  529. package/dist/src/tools/memoryTool.js +1 -1
  530. package/dist/src/tools/memoryTool.js.map +1 -1
  531. package/dist/src/tools/memoryTool.test.js +5 -0
  532. package/dist/src/tools/memoryTool.test.js.map +1 -1
  533. package/dist/src/tools/omissionPlaceholderDetector.d.ts +15 -0
  534. package/dist/src/tools/omissionPlaceholderDetector.js +90 -0
  535. package/dist/src/tools/omissionPlaceholderDetector.js.map +1 -0
  536. package/dist/src/tools/omissionPlaceholderDetector.test.d.ts +6 -0
  537. package/dist/src/tools/omissionPlaceholderDetector.test.js +49 -0
  538. package/dist/src/tools/omissionPlaceholderDetector.test.js.map +1 -0
  539. package/dist/src/tools/read-file.d.ts +4 -4
  540. package/dist/src/tools/read-file.js +17 -10
  541. package/dist/src/tools/read-file.js.map +1 -1
  542. package/dist/src/tools/read-file.test.js +20 -10
  543. package/dist/src/tools/read-file.test.js.map +1 -1
  544. package/dist/src/tools/ripGrep.js +49 -46
  545. package/dist/src/tools/ripGrep.js.map +1 -1
  546. package/dist/src/tools/ripGrep.test.js +52 -37
  547. package/dist/src/tools/ripGrep.test.js.map +1 -1
  548. package/dist/src/tools/shell.d.ts +2 -2
  549. package/dist/src/tools/shell.js +2 -2
  550. package/dist/src/tools/shell.js.map +1 -1
  551. package/dist/src/tools/shell.test.js +1 -2
  552. package/dist/src/tools/shell.test.js.map +1 -1
  553. package/dist/src/tools/tool-names.d.ts +0 -6
  554. package/dist/src/tools/tool-names.js +0 -15
  555. package/dist/src/tools/tool-names.js.map +1 -1
  556. package/dist/src/tools/tool-registry.d.ts +1 -0
  557. package/dist/src/tools/tool-registry.js +33 -6
  558. package/dist/src/tools/tool-registry.js.map +1 -1
  559. package/dist/src/tools/tool-registry.test.js +47 -0
  560. package/dist/src/tools/tool-registry.test.js.map +1 -1
  561. package/dist/src/tools/tools.d.ts +21 -1
  562. package/dist/src/tools/tools.js +19 -3
  563. package/dist/src/tools/tools.js.map +1 -1
  564. package/dist/src/tools/tools.test.js +24 -0
  565. package/dist/src/tools/tools.test.js.map +1 -1
  566. package/dist/src/tools/web-fetch.d.ts +9 -1
  567. package/dist/src/tools/web-fetch.js +273 -34
  568. package/dist/src/tools/web-fetch.js.map +1 -1
  569. package/dist/src/tools/web-fetch.test.js +303 -30
  570. package/dist/src/tools/web-fetch.test.js.map +1 -1
  571. package/dist/src/tools/write-file.js +14 -10
  572. package/dist/src/tools/write-file.js.map +1 -1
  573. package/dist/src/tools/write-file.test.js +75 -0
  574. package/dist/src/tools/write-file.test.js.map +1 -1
  575. package/dist/src/tools/write-todos.d.ts +2 -2
  576. package/dist/src/tools/write-todos.js +1 -1
  577. package/dist/src/tools/write-todos.js.map +1 -1
  578. package/dist/src/tools/xcode-mcp-fix-transport.js +4 -1
  579. package/dist/src/tools/xcode-mcp-fix-transport.js.map +1 -1
  580. package/dist/src/utils/approvalModeUtils.d.ts +14 -0
  581. package/dist/src/utils/approvalModeUtils.js +35 -0
  582. package/dist/src/utils/approvalModeUtils.js.map +1 -0
  583. package/dist/src/utils/approvalModeUtils.test.d.ts +6 -0
  584. package/dist/src/utils/approvalModeUtils.test.js +36 -0
  585. package/dist/src/utils/approvalModeUtils.test.js.map +1 -0
  586. package/dist/src/utils/authConsent.d.ts +1 -1
  587. package/dist/src/utils/authConsent.js +10 -8
  588. package/dist/src/utils/authConsent.js.map +1 -1
  589. package/dist/src/utils/authConsent.test.js +89 -44
  590. package/dist/src/utils/authConsent.test.js.map +1 -1
  591. package/dist/src/utils/compatibility.d.ts +41 -0
  592. package/dist/src/utils/compatibility.js +112 -0
  593. package/dist/src/utils/compatibility.js.map +1 -0
  594. package/dist/src/utils/compatibility.test.d.ts +6 -0
  595. package/dist/src/utils/compatibility.test.js +233 -0
  596. package/dist/src/utils/compatibility.test.js.map +1 -0
  597. package/dist/src/utils/editCorrector.js +22 -29
  598. package/dist/src/utils/editCorrector.js.map +1 -1
  599. package/dist/src/utils/editCorrector.test.js.map +1 -1
  600. package/dist/src/utils/envExpansion.d.ts +18 -0
  601. package/dist/src/utils/envExpansion.js +46 -0
  602. package/dist/src/utils/envExpansion.js.map +1 -0
  603. package/dist/src/utils/envExpansion.test.d.ts +6 -0
  604. package/dist/src/utils/envExpansion.test.js +110 -0
  605. package/dist/src/utils/envExpansion.test.js.map +1 -0
  606. package/dist/src/utils/errors.d.ts +1 -0
  607. package/dist/src/utils/errors.js +55 -10
  608. package/dist/src/utils/errors.js.map +1 -1
  609. package/dist/src/utils/errors.test.js +27 -1
  610. package/dist/src/utils/errors.test.js.map +1 -1
  611. package/dist/src/utils/events.d.ts +17 -0
  612. package/dist/src/utils/events.js +12 -0
  613. package/dist/src/utils/events.js.map +1 -1
  614. package/dist/src/utils/events.test.d.ts +1 -1
  615. package/dist/src/utils/events.test.js +50 -3
  616. package/dist/src/utils/events.test.js.map +1 -1
  617. package/dist/src/utils/fastAckHelper.js +2 -1
  618. package/dist/src/utils/fastAckHelper.js.map +1 -1
  619. package/dist/src/utils/fetch.d.ts +1 -1
  620. package/dist/src/utils/fetch.js +15 -2
  621. package/dist/src/utils/fetch.js.map +1 -1
  622. package/dist/src/utils/fileDiffUtils.d.ts +2 -2
  623. package/dist/src/utils/fileDiffUtils.js +1 -2
  624. package/dist/src/utils/fileDiffUtils.js.map +1 -1
  625. package/dist/src/utils/fileUtils.d.ts +5 -3
  626. package/dist/src/utils/fileUtils.js +25 -16
  627. package/dist/src/utils/fileUtils.js.map +1 -1
  628. package/dist/src/utils/fileUtils.test.js +14 -13
  629. package/dist/src/utils/fileUtils.test.js.map +1 -1
  630. package/dist/src/utils/filesearch/fileSearch.js +4 -1
  631. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  632. package/dist/src/utils/getFolderStructure.test.js +4 -5
  633. package/dist/src/utils/getFolderStructure.test.js.map +1 -1
  634. package/dist/src/utils/getPty.js +4 -0
  635. package/dist/src/utils/getPty.js.map +1 -1
  636. package/dist/src/utils/googleErrors.js +29 -5
  637. package/dist/src/utils/googleErrors.js.map +1 -1
  638. package/dist/src/utils/googleQuotaErrors.js +10 -0
  639. package/dist/src/utils/googleQuotaErrors.js.map +1 -1
  640. package/dist/src/utils/googleQuotaErrors.test.js +16 -1
  641. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
  642. package/dist/src/utils/memoryDiscovery.js +2 -0
  643. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  644. package/dist/src/utils/memoryDiscovery.test.js +1 -2
  645. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  646. package/dist/src/utils/retry.d.ts +1 -1
  647. package/dist/src/utils/retry.js +9 -4
  648. package/dist/src/utils/retry.js.map +1 -1
  649. package/dist/src/utils/retry.test.js +15 -12
  650. package/dist/src/utils/retry.test.js.map +1 -1
  651. package/dist/src/utils/safeJsonStringify.js +3 -0
  652. package/dist/src/utils/safeJsonStringify.js.map +1 -1
  653. package/dist/src/utils/schemaValidator.js +5 -3
  654. package/dist/src/utils/schemaValidator.js.map +1 -1
  655. package/dist/src/utils/session.d.ts +1 -0
  656. package/dist/src/utils/session.js +3 -0
  657. package/dist/src/utils/session.js.map +1 -1
  658. package/dist/src/utils/sessionUtils.d.ts +14 -0
  659. package/dist/src/utils/sessionUtils.js +113 -0
  660. package/dist/src/utils/sessionUtils.js.map +1 -0
  661. package/dist/src/utils/sessionUtils.test.d.ts +1 -0
  662. package/dist/src/utils/sessionUtils.test.js +137 -0
  663. package/dist/src/utils/sessionUtils.test.js.map +1 -0
  664. package/dist/src/utils/shell-utils.js +1 -0
  665. package/dist/src/utils/shell-utils.js.map +1 -1
  666. package/dist/src/utils/stdio.js +6 -0
  667. package/dist/src/utils/stdio.js.map +1 -1
  668. package/dist/src/utils/textUtils.d.ts +9 -0
  669. package/dist/src/utils/textUtils.js +15 -0
  670. package/dist/src/utils/textUtils.js.map +1 -1
  671. package/dist/src/utils/textUtils.test.js +42 -1
  672. package/dist/src/utils/textUtils.test.js.map +1 -1
  673. package/dist/src/utils/toolCallContext.d.ts +0 -5
  674. package/dist/src/utils/toolCallContext.js +1 -1
  675. package/dist/src/utils/toolCallContext.js.map +1 -1
  676. package/dist/src/utils/userAccountManager.js +3 -0
  677. package/dist/src/utils/userAccountManager.js.map +1 -1
  678. package/dist/tsconfig.tsbuildinfo +1 -1
  679. package/package.json +6 -3
  680. package/dist/docs/architecture.md +0 -80
  681. package/dist/docs/cli/index.md +0 -123
  682. package/dist/docs/core/concepts.md +0 -137
  683. package/dist/docs/get-started/configuration-v1.md +0 -882
  684. package/dist/google-gemini-cli-core-0.30.0-preview.5.tgz +0 -0
  685. /package/dist/docs/{core → reference}/memport.md +0 -0
  686. /package/dist/docs/{core → reference}/tools-api.md +0 -0
  687. /package/dist/docs/{cli → resources}/uninstall.md +0 -0
@@ -0,0 +1,356 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DeclarativeTool, BaseToolInvocation, Kind, } from '../../tools/tools.js';
7
+ import { debugLogger } from '../../utils/debugLogger.js';
8
+ /**
9
+ * Tool invocation that dispatches to BrowserManager's isolated MCP client.
10
+ */
11
+ class McpToolInvocation extends BaseToolInvocation {
12
+ browserManager;
13
+ toolName;
14
+ constructor(browserManager, toolName, params, messageBus) {
15
+ super(params, messageBus, toolName, toolName);
16
+ this.browserManager = browserManager;
17
+ this.toolName = toolName;
18
+ }
19
+ getDescription() {
20
+ return `Calling MCP tool: ${this.toolName}`;
21
+ }
22
+ async getConfirmationDetails(_abortSignal) {
23
+ if (!this.messageBus) {
24
+ return false;
25
+ }
26
+ return {
27
+ type: 'mcp',
28
+ title: `Confirm MCP Tool: ${this.toolName}`,
29
+ serverName: 'browser-agent',
30
+ toolName: this.toolName,
31
+ toolDisplayName: this.toolName,
32
+ onConfirm: async (outcome) => {
33
+ await this.publishPolicyUpdate(outcome);
34
+ },
35
+ };
36
+ }
37
+ getPolicyUpdateOptions(_outcome) {
38
+ return {
39
+ mcpName: 'browser-agent',
40
+ };
41
+ }
42
+ async execute(signal) {
43
+ try {
44
+ const callToolPromise = this.browserManager.callTool(this.toolName, this.params, signal);
45
+ const result = await callToolPromise;
46
+ // Extract text content from MCP response
47
+ let textContent = '';
48
+ if (result.content && Array.isArray(result.content)) {
49
+ textContent = result.content
50
+ .filter((c) => c.type === 'text' && c.text)
51
+ .map((c) => c.text)
52
+ .join('\n');
53
+ }
54
+ // Post-process to add contextual hints for common error patterns
55
+ const processedContent = postProcessToolResult(this.toolName, textContent);
56
+ if (result.isError) {
57
+ return {
58
+ llmContent: `Error: ${processedContent}`,
59
+ returnDisplay: `Error: ${processedContent}`,
60
+ error: { message: textContent },
61
+ };
62
+ }
63
+ return {
64
+ llmContent: processedContent || 'Tool executed successfully.',
65
+ returnDisplay: processedContent || 'Tool executed successfully.',
66
+ };
67
+ }
68
+ catch (error) {
69
+ const errorMsg = error instanceof Error ? error.message : String(error);
70
+ // Chrome connection errors are fatal — re-throw to terminate the agent
71
+ // immediately instead of returning a result the LLM would retry.
72
+ if (errorMsg.includes('Could not connect to Chrome')) {
73
+ throw error;
74
+ }
75
+ debugLogger.error(`MCP tool ${this.toolName} failed: ${errorMsg}`);
76
+ return {
77
+ llmContent: `Error: ${errorMsg}`,
78
+ returnDisplay: `Error: ${errorMsg}`,
79
+ error: { message: errorMsg },
80
+ };
81
+ }
82
+ }
83
+ }
84
+ /**
85
+ * Composite tool invocation that types a full string by calling press_key
86
+ * for each character internally, avoiding N model round-trips.
87
+ */
88
+ class TypeTextInvocation extends BaseToolInvocation {
89
+ browserManager;
90
+ text;
91
+ submitKey;
92
+ constructor(browserManager, text, submitKey, messageBus) {
93
+ super({ text, submitKey }, messageBus, 'type_text', 'type_text');
94
+ this.browserManager = browserManager;
95
+ this.text = text;
96
+ this.submitKey = submitKey;
97
+ }
98
+ getDescription() {
99
+ const preview = `"${this.text.substring(0, 50)}${this.text.length > 50 ? '...' : ''}"`;
100
+ return this.submitKey
101
+ ? `type_text: ${preview} + ${this.submitKey}`
102
+ : `type_text: ${preview}`;
103
+ }
104
+ async getConfirmationDetails(_abortSignal) {
105
+ if (!this.messageBus) {
106
+ return false;
107
+ }
108
+ return {
109
+ type: 'mcp',
110
+ title: `Confirm Tool: type_text`,
111
+ serverName: 'browser-agent',
112
+ toolName: 'type_text',
113
+ toolDisplayName: 'type_text',
114
+ onConfirm: async (outcome) => {
115
+ await this.publishPolicyUpdate(outcome);
116
+ },
117
+ };
118
+ }
119
+ getPolicyUpdateOptions(_outcome) {
120
+ return {
121
+ mcpName: 'browser-agent',
122
+ };
123
+ }
124
+ async execute(signal) {
125
+ try {
126
+ if (signal.aborted) {
127
+ return {
128
+ llmContent: 'Error: Operation cancelled before typing started.',
129
+ returnDisplay: 'Operation cancelled before typing started.',
130
+ error: { message: 'Operation cancelled' },
131
+ };
132
+ }
133
+ await this.typeCharByChar(signal);
134
+ // Optionally press a submit key (Enter, Tab, etc.) after typing
135
+ if (this.submitKey && !signal.aborted) {
136
+ const keyResult = await this.browserManager.callTool('press_key', { key: this.submitKey }, signal);
137
+ if (keyResult.isError) {
138
+ const errText = this.extractErrorText(keyResult);
139
+ debugLogger.warn(`type_text: submitKey("${this.submitKey}") failed: ${errText}`);
140
+ }
141
+ }
142
+ const summary = this.submitKey
143
+ ? `Successfully typed "${this.text}" and pressed ${this.submitKey}`
144
+ : `Successfully typed "${this.text}"`;
145
+ return {
146
+ llmContent: summary,
147
+ returnDisplay: summary,
148
+ };
149
+ }
150
+ catch (error) {
151
+ const errorMsg = error instanceof Error ? error.message : String(error);
152
+ // Chrome connection errors are fatal
153
+ if (errorMsg.includes('Could not connect to Chrome')) {
154
+ throw error;
155
+ }
156
+ debugLogger.error(`type_text failed: ${errorMsg}`);
157
+ return {
158
+ llmContent: `Error: ${errorMsg}`,
159
+ returnDisplay: `Error: ${errorMsg}`,
160
+ error: { message: errorMsg },
161
+ };
162
+ }
163
+ }
164
+ /** Types each character via individual press_key MCP calls. */
165
+ async typeCharByChar(signal) {
166
+ const chars = [...this.text]; // Handle Unicode correctly
167
+ for (const char of chars) {
168
+ if (signal.aborted)
169
+ return;
170
+ // Map special characters to key names
171
+ const key = char === ' ' ? 'Space' : char;
172
+ const result = await this.browserManager.callTool('press_key', { key }, signal);
173
+ if (result.isError) {
174
+ debugLogger.warn(`type_text: press_key("${key}") failed: ${this.extractErrorText(result)}`);
175
+ }
176
+ }
177
+ }
178
+ /** Extract error text from an MCP tool result. */
179
+ extractErrorText(result) {
180
+ return (result.content
181
+ ?.filter((c) => c.type === 'text' && c.text)
182
+ .map((c) => c.text)
183
+ .join('\n') || 'Unknown error');
184
+ }
185
+ }
186
+ /**
187
+ * DeclarativeTool wrapper for an MCP tool.
188
+ */
189
+ class McpDeclarativeTool extends DeclarativeTool {
190
+ browserManager;
191
+ constructor(browserManager, name, description, parameterSchema, messageBus) {
192
+ super(name, name, description, Kind.Other, parameterSchema, messageBus,
193
+ /* isOutputMarkdown */ true,
194
+ /* canUpdateOutput */ false);
195
+ this.browserManager = browserManager;
196
+ }
197
+ build(params) {
198
+ return new McpToolInvocation(this.browserManager, this.name, params, this.messageBus);
199
+ }
200
+ }
201
+ /**
202
+ * DeclarativeTool for the custom type_text composite tool.
203
+ */
204
+ class TypeTextDeclarativeTool extends DeclarativeTool {
205
+ browserManager;
206
+ constructor(browserManager, messageBus) {
207
+ super('type_text', 'type_text', 'Types a full text string into the currently focused element. ' +
208
+ 'Much faster than calling press_key for each character individually. ' +
209
+ 'Use this to enter text into form fields, search boxes, spreadsheet cells, or any focused input. ' +
210
+ 'The element must already be focused (e.g., after a click). ' +
211
+ 'Use submitKey to press a key after typing (e.g., submitKey="Enter" to submit a form or confirm a value, submitKey="Tab" to move to the next field).', Kind.Other, {
212
+ type: 'object',
213
+ properties: {
214
+ text: {
215
+ type: 'string',
216
+ description: 'The text to type into the focused element.',
217
+ },
218
+ submitKey: {
219
+ type: 'string',
220
+ description: 'Optional key to press after typing (e.g., "Enter", "Tab", "Escape"). ' +
221
+ 'Useful for submitting form fields or moving to the next cell in a spreadsheet.',
222
+ },
223
+ },
224
+ required: ['text'],
225
+ }, messageBus,
226
+ /* isOutputMarkdown */ true,
227
+ /* canUpdateOutput */ false);
228
+ this.browserManager = browserManager;
229
+ }
230
+ build(params) {
231
+ const submitKey = typeof params['submitKey'] === 'string' && params['submitKey']
232
+ ? params['submitKey']
233
+ : undefined;
234
+ return new TypeTextInvocation(this.browserManager, String(params['text'] ?? ''), submitKey, this.messageBus);
235
+ }
236
+ }
237
+ /**
238
+ * Creates DeclarativeTool instances from dynamically discovered MCP tools,
239
+ * plus custom composite tools (like type_text).
240
+ *
241
+ * These tools are registered in the browser agent's isolated ToolRegistry,
242
+ * NOT in the main agent's registry.
243
+ *
244
+ * Tool definitions are fetched dynamically from the MCP server at runtime.
245
+ *
246
+ * @param browserManager The browser manager with isolated MCP client
247
+ * @param messageBus Message bus for tool invocations
248
+ * @returns Array of DeclarativeTools that dispatch to the isolated MCP client
249
+ */
250
+ export async function createMcpDeclarativeTools(browserManager, messageBus) {
251
+ // Get dynamically discovered tools from the MCP server
252
+ const mcpTools = await browserManager.getDiscoveredTools();
253
+ debugLogger.log(`Creating ${mcpTools.length} declarative tools for browser agent`);
254
+ const tools = mcpTools.map((mcpTool) => {
255
+ const schema = convertMcpToolToFunctionDeclaration(mcpTool);
256
+ // Augment description with uid-context hints
257
+ const augmentedDescription = augmentToolDescription(mcpTool.name, mcpTool.description ?? '');
258
+ return new McpDeclarativeTool(browserManager, mcpTool.name, augmentedDescription, schema.parametersJsonSchema, messageBus);
259
+ });
260
+ // Add custom composite tools
261
+ tools.push(new TypeTextDeclarativeTool(browserManager, messageBus));
262
+ debugLogger.log(`Total tools registered: ${tools.length} (${mcpTools.length} MCP + 1 custom)`);
263
+ return tools;
264
+ }
265
+ /**
266
+ * Converts MCP tool definition to Gemini FunctionDeclaration.
267
+ */
268
+ function convertMcpToolToFunctionDeclaration(mcpTool) {
269
+ // MCP tool inputSchema is a JSON Schema object
270
+ // We pass it directly as parametersJsonSchema
271
+ return {
272
+ name: mcpTool.name,
273
+ description: mcpTool.description ?? '',
274
+ parametersJsonSchema: mcpTool.inputSchema ?? {
275
+ type: 'object',
276
+ properties: {},
277
+ },
278
+ };
279
+ }
280
+ /**
281
+ * Augments MCP tool descriptions with usage guidance.
282
+ * Adds semantic hints and usage rules directly in tool descriptions
283
+ * so the model makes correct tool choices without system prompt overhead.
284
+ *
285
+ * Actual chrome-devtools-mcp tools:
286
+ * Input: click, drag, fill, fill_form, handle_dialog, hover, press_key, upload_file
287
+ * Navigation: close_page, list_pages, navigate_page, new_page, select_page, wait_for
288
+ * Emulation: emulate, resize_page
289
+ * Performance: performance_analyze_insight, performance_start_trace, performance_stop_trace
290
+ * Network: get_network_request, list_network_requests
291
+ * Debugging: evaluate_script, get_console_message, list_console_messages, take_screenshot, take_snapshot
292
+ * Vision (--experimental-vision): click_at, analyze_screenshot
293
+ */
294
+ function augmentToolDescription(toolName, description) {
295
+ // More-specific keys MUST come before shorter keys to prevent
296
+ // partial matching from short-circuiting (e.g., fill_form before fill).
297
+ const hints = {
298
+ fill_form: ' Fills multiple standard HTML form fields at once. Same limitations as fill — does not work on canvas/custom widgets.',
299
+ fill: ' Fills standard HTML form fields (<input>, <textarea>, <select>) by uid. Does NOT work on custom/canvas-based widgets (e.g., Google Sheets cells, Notion blocks). If fill times out or fails, click the element first then use press_key with individual characters instead.',
300
+ click_at: ' Clicks at exact pixel coordinates (x, y). Use when you have specific coordinates for visual elements.',
301
+ click: ' Use the element uid from the accessibility tree snapshot (e.g., uid="87_4"). UIDs are invalidated after this action — call take_snapshot before using another uid.',
302
+ hover: ' Use the element uid from the accessibility tree snapshot to hover over elements.',
303
+ take_snapshot: ' Returns the accessibility tree with uid values for each element. Call this FIRST to see available elements, and AFTER every state-changing action (click, fill, press_key) before using any uid.',
304
+ navigate_page: ' Navigate to the specified URL. Call take_snapshot after to see the new page.',
305
+ new_page: ' Opens a new page/tab with the specified URL. Call take_snapshot after to see the new page.',
306
+ press_key: ' Press a SINGLE keyboard key (e.g., "Enter", "Tab", "Escape", "ArrowDown", "a", "8"). ONLY accepts one key name — do NOT pass multi-character strings like "Hello" or "A1\\nEnter". To type text, use type_text instead of calling press_key for each character.',
307
+ };
308
+ // Check for partial matches — order matters! More-specific keys first.
309
+ for (const [key, hint] of Object.entries(hints)) {
310
+ if (toolName.toLowerCase().includes(key)) {
311
+ return description + hint;
312
+ }
313
+ }
314
+ return description;
315
+ }
316
+ /**
317
+ * Post-processes tool results to add contextual hints for common error patterns.
318
+ * This helps the agent recover from overlay blocking, element not found, etc.
319
+ * Also strips embedded snapshots to prevent token bloat.
320
+ */
321
+ export function postProcessToolResult(toolName, result) {
322
+ // Strip embedded snapshots to prevent token bloat (except for take_snapshot,
323
+ // whose accessibility tree the model needs for uid-based interactions).
324
+ let processedResult = result;
325
+ if (toolName !== 'take_snapshot' &&
326
+ result.includes('## Latest page snapshot')) {
327
+ const parts = result.split('## Latest page snapshot');
328
+ processedResult = parts[0].trim();
329
+ if (parts[1]) {
330
+ debugLogger.log('Stripped embedded snapshot from tool response');
331
+ }
332
+ }
333
+ // Detect overlay/interactable issues
334
+ const overlayPatterns = [
335
+ 'not interactable',
336
+ 'obscured',
337
+ 'intercept',
338
+ 'blocked',
339
+ 'element is not visible',
340
+ 'element not found',
341
+ ];
342
+ const isOverlayIssue = overlayPatterns.some((pattern) => processedResult.toLowerCase().includes(pattern));
343
+ if (isOverlayIssue && (toolName === 'click' || toolName.includes('click'))) {
344
+ return (processedResult +
345
+ '\n\n⚠️ This action may have been blocked by an overlay, popup, or tooltip. ' +
346
+ 'Look for close/dismiss buttons (×, Close, "Got it", "Accept") in the accessibility tree and click them first.');
347
+ }
348
+ // Detect stale element references
349
+ if (processedResult.toLowerCase().includes('stale') ||
350
+ processedResult.toLowerCase().includes('detached')) {
351
+ return (processedResult +
352
+ '\n\n⚠️ The element reference is stale. Call take_snapshot to get fresh element uids.');
353
+ }
354
+ return processedResult;
355
+ }
356
+ //# sourceMappingURL=mcpToolWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpToolWrapper.js","sourceRoot":"","sources":["../../../../src/agents/browser/mcpToolWrapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,126 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
+ import { createMcpDeclarativeTools } from './mcpToolWrapper.js';
8
+ describe('mcpToolWrapper', () => {
9
+ let mockBrowserManager;
10
+ let mockMessageBus;
11
+ let mockMcpTools;
12
+ beforeEach(() => {
13
+ vi.resetAllMocks();
14
+ // Setup mock MCP tools discovered from server
15
+ mockMcpTools = [
16
+ {
17
+ name: 'take_snapshot',
18
+ description: 'Take a snapshot of the page accessibility tree',
19
+ inputSchema: {
20
+ type: 'object',
21
+ properties: {
22
+ verbose: { type: 'boolean', description: 'Include details' },
23
+ },
24
+ },
25
+ },
26
+ {
27
+ name: 'click',
28
+ description: 'Click on an element by uid',
29
+ inputSchema: {
30
+ type: 'object',
31
+ properties: {
32
+ uid: { type: 'string', description: 'Element uid' },
33
+ },
34
+ required: ['uid'],
35
+ },
36
+ },
37
+ ];
38
+ // Setup mock browser manager
39
+ mockBrowserManager = {
40
+ getDiscoveredTools: vi.fn().mockResolvedValue(mockMcpTools),
41
+ callTool: vi.fn().mockResolvedValue({
42
+ content: [{ type: 'text', text: 'Tool result' }],
43
+ }),
44
+ };
45
+ // Setup mock message bus
46
+ mockMessageBus = {
47
+ publish: vi.fn().mockResolvedValue(undefined),
48
+ subscribe: vi.fn(),
49
+ unsubscribe: vi.fn(),
50
+ };
51
+ });
52
+ afterEach(() => {
53
+ vi.restoreAllMocks();
54
+ });
55
+ describe('createMcpDeclarativeTools', () => {
56
+ it('should create declarative tools from discovered MCP tools', async () => {
57
+ const tools = await createMcpDeclarativeTools(mockBrowserManager, mockMessageBus);
58
+ expect(tools).toHaveLength(3);
59
+ expect(tools[0].name).toBe('take_snapshot');
60
+ expect(tools[1].name).toBe('click');
61
+ expect(tools[2].name).toBe('type_text');
62
+ });
63
+ it('should return tools with correct description', async () => {
64
+ const tools = await createMcpDeclarativeTools(mockBrowserManager, mockMessageBus);
65
+ // Descriptions include augmented hints, so we check they contain the original
66
+ expect(tools[0].description).toContain('Take a snapshot of the page accessibility tree');
67
+ expect(tools[1].description).toContain('Click on an element by uid');
68
+ });
69
+ it('should return tools with proper FunctionDeclaration schema', async () => {
70
+ const tools = await createMcpDeclarativeTools(mockBrowserManager, mockMessageBus);
71
+ const schema = tools[0].schema;
72
+ expect(schema.name).toBe('take_snapshot');
73
+ expect(schema.parametersJsonSchema).toBeDefined();
74
+ });
75
+ });
76
+ describe('McpDeclarativeTool.build', () => {
77
+ it('should create invocation that can be executed', async () => {
78
+ const tools = await createMcpDeclarativeTools(mockBrowserManager, mockMessageBus);
79
+ const invocation = tools[0].build({ verbose: true });
80
+ expect(invocation).toBeDefined();
81
+ expect(invocation.params).toEqual({ verbose: true });
82
+ });
83
+ it('should return invocation with correct description', async () => {
84
+ const tools = await createMcpDeclarativeTools(mockBrowserManager, mockMessageBus);
85
+ const invocation = tools[0].build({});
86
+ expect(invocation.getDescription()).toContain('take_snapshot');
87
+ });
88
+ });
89
+ describe('McpToolInvocation.execute', () => {
90
+ it('should call browserManager.callTool with correct params', async () => {
91
+ const tools = await createMcpDeclarativeTools(mockBrowserManager, mockMessageBus);
92
+ const invocation = tools[1].build({ uid: 'elem-123' });
93
+ await invocation.execute(new AbortController().signal);
94
+ expect(mockBrowserManager.callTool).toHaveBeenCalledWith('click', {
95
+ uid: 'elem-123',
96
+ }, expect.any(AbortSignal));
97
+ });
98
+ it('should return success result from MCP tool', async () => {
99
+ const tools = await createMcpDeclarativeTools(mockBrowserManager, mockMessageBus);
100
+ const invocation = tools[0].build({ verbose: true });
101
+ const result = await invocation.execute(new AbortController().signal);
102
+ expect(result.llmContent).toBe('Tool result');
103
+ expect(result.error).toBeUndefined();
104
+ });
105
+ it('should handle MCP tool errors', async () => {
106
+ vi.mocked(mockBrowserManager.callTool).mockResolvedValue({
107
+ content: [{ type: 'text', text: 'Element not found' }],
108
+ isError: true,
109
+ });
110
+ const tools = await createMcpDeclarativeTools(mockBrowserManager, mockMessageBus);
111
+ const invocation = tools[1].build({ uid: 'invalid' });
112
+ const result = await invocation.execute(new AbortController().signal);
113
+ expect(result.error).toBeDefined();
114
+ expect(result.error?.message).toBe('Element not found');
115
+ });
116
+ it('should handle exceptions during tool call', async () => {
117
+ vi.mocked(mockBrowserManager.callTool).mockRejectedValue(new Error('Connection lost'));
118
+ const tools = await createMcpDeclarativeTools(mockBrowserManager, mockMessageBus);
119
+ const invocation = tools[0].build({});
120
+ const result = await invocation.execute(new AbortController().signal);
121
+ expect(result.error).toBeDefined();
122
+ expect(result.error?.message).toBe('Connection lost');
123
+ });
124
+ });
125
+ });
126
+ //# sourceMappingURL=mcpToolWrapper.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpToolWrapper.test.js","sourceRoot":"","sources":["../../../../src/agents/browser/mcpToolWrapper.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { createMcpDeclarativeTools } from './mcpToolWrapper.js';
8
+ import { MessageBusType } from '../../confirmation-bus/types.js';
9
+ import { ToolConfirmationOutcome, } from '../../tools/tools.js';
10
+ describe('mcpToolWrapper Confirmation', () => {
11
+ let mockBrowserManager;
12
+ let mockMessageBus;
13
+ beforeEach(() => {
14
+ mockBrowserManager = {
15
+ getDiscoveredTools: vi
16
+ .fn()
17
+ .mockResolvedValue([
18
+ { name: 'test_tool', description: 'desc', inputSchema: {} },
19
+ ]),
20
+ callTool: vi.fn(),
21
+ };
22
+ mockMessageBus = {
23
+ publish: vi.fn().mockResolvedValue(undefined),
24
+ subscribe: vi.fn(),
25
+ unsubscribe: vi.fn(),
26
+ };
27
+ });
28
+ it('getConfirmationDetails returns specific MCP details', async () => {
29
+ const tools = await createMcpDeclarativeTools(mockBrowserManager, mockMessageBus);
30
+ const invocation = tools[0].build({});
31
+ const details = await invocation.getConfirmationDetails(new AbortController().signal);
32
+ expect(details).toEqual(expect.objectContaining({
33
+ type: 'mcp',
34
+ serverName: 'browser-agent',
35
+ toolName: 'test_tool',
36
+ }));
37
+ // Verify onConfirm publishes policy update
38
+ const outcome = ToolConfirmationOutcome.ProceedAlways;
39
+ if (details && typeof details === 'object' && 'onConfirm' in details) {
40
+ await details.onConfirm(outcome);
41
+ }
42
+ expect(mockMessageBus.publish).toHaveBeenCalledWith(expect.objectContaining({
43
+ type: MessageBusType.UPDATE_POLICY,
44
+ mcpName: 'browser-agent',
45
+ persist: false,
46
+ }));
47
+ });
48
+ it('getPolicyUpdateOptions returns correct options', async () => {
49
+ const tools = await createMcpDeclarativeTools(mockBrowserManager, mockMessageBus);
50
+ const invocation = tools[0].build({});
51
+ const options = invocation.getPolicyUpdateOptions(ToolConfirmationOutcome.ProceedAlways);
52
+ expect(options).toEqual({
53
+ mcpName: 'browser-agent',
54
+ });
55
+ });
56
+ });
57
+ //# sourceMappingURL=mcpToolWrapperConfirmation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpToolWrapperConfirmation.test.js","sourceRoot":"","sources":["../../../../src/agents/browser/mcpToolWrapperConfirmation.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EACL,uBAAuB,GAGxB,MAAM,sBAAsB,CAAC;AAW9B,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,kBAAkC,CAAC;IACvC,IAAI,cAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACd,kBAAkB,GAAG;YACnB,kBAAkB,EAAE,EAAE;iBACnB,EAAE,EAAE;iBACJ,iBAAiB,CAAC;gBACjB,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE;aAC5D,CAAC;YACJ,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;SACW,CAAC;QAE/B,cAAc,GAAG;YACf,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;YAC7C,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;YAClB,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;SACI,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAC3C,kBAAkB,EAClB,cAAc,CACf,CAAC;QACF,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAoC,CAAC;QAEzE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,sBAAsB,CACrD,IAAI,eAAe,EAAE,CAAC,MAAM,CAC7B,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CACrB,MAAM,CAAC,gBAAgB,CAAC;YACtB,IAAI,EAAE,KAAK;YACX,UAAU,EAAE,eAAe;YAC3B,QAAQ,EAAE,WAAW;SACtB,CAAC,CACH,CAAC;QAEF,2CAA2C;QAC3C,MAAM,OAAO,GAAG,uBAAuB,CAAC,aAAa,CAAC;QAEtD,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;YACrE,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,oBAAoB,CACjD,MAAM,CAAC,gBAAgB,CAAC;YACtB,IAAI,EAAE,cAAc,CAAC,aAAa;YAClC,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,KAAK;SACf,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,KAAK,GAAG,MAAM,yBAAyB,CAC3C,kBAAkB,EAClB,cAAc,CACf,CAAC;QACF,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAoC,CAAC;QAEzE,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,CAC/C,uBAAuB,CAAC,aAAa,CACtC,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YACtB,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * @fileoverview Model configuration for browser agent.
8
+ *
9
+ * Provides the default visual agent model and utilities for resolving
10
+ * the configured model.
11
+ */
12
+ import type { Config } from '../../config/config.js';
13
+ /**
14
+ * Default model for the visual agent (Computer Use capable).
15
+ */
16
+ export declare const VISUAL_AGENT_MODEL = "gemini-2.5-computer-use-preview-10-2025";
17
+ /**
18
+ * Gets the visual agent model from config, falling back to default.
19
+ *
20
+ * @param config Runtime configuration
21
+ * @returns The model to use for visual agent
22
+ */
23
+ export declare function getVisualAgentModel(config: Config): string;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { debugLogger } from '../../utils/debugLogger.js';
7
+ /**
8
+ * Default model for the visual agent (Computer Use capable).
9
+ */
10
+ export const VISUAL_AGENT_MODEL = 'gemini-2.5-computer-use-preview-10-2025';
11
+ /**
12
+ * Gets the visual agent model from config, falling back to default.
13
+ *
14
+ * @param config Runtime configuration
15
+ * @returns The model to use for visual agent
16
+ */
17
+ export function getVisualAgentModel(config) {
18
+ const browserConfig = config.getBrowserAgentConfig();
19
+ const model = browserConfig.customConfig.visualModel ?? VISUAL_AGENT_MODEL;
20
+ debugLogger.log(`Visual agent model: ${model}`);
21
+ return model;
22
+ }
23
+ //# sourceMappingURL=modelAvailability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelAvailability.js","sourceRoot":"","sources":["../../../../src/agents/browser/modelAvailability.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,yCAAyC,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,aAAa,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC,WAAW,IAAI,kBAAkB,CAAC;IAE3E,WAAW,CAAC,GAAG,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC;AACf,CAAC"}