@office-ai/aioncli-core 0.30.0 → 0.30.1

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 (325) hide show
  1. package/dist/docs/assets/theme-ansi-dark.png +0 -0
  2. package/dist/docs/assets/theme-atom-one-dark.png +0 -0
  3. package/dist/docs/assets/theme-ayu-dark.png +0 -0
  4. package/dist/docs/assets/theme-default-dark.png +0 -0
  5. package/dist/docs/assets/theme-dracula-dark.png +0 -0
  6. package/dist/docs/assets/theme-github-dark.png +0 -0
  7. package/dist/docs/assets/theme-holiday-dark.png +0 -0
  8. package/dist/docs/assets/theme-shades-of-purple-dark.png +0 -0
  9. package/dist/docs/assets/theme-solarized-dark.png +0 -0
  10. package/dist/docs/assets/theme-solarized-light.png +0 -0
  11. package/dist/docs/cli/notifications.md +58 -0
  12. package/dist/docs/redirects.json +20 -0
  13. package/dist/docs/reference/commands.md +563 -0
  14. package/dist/docs/reference/configuration.md +1804 -0
  15. package/dist/docs/reference/keyboard-shortcuts.md +168 -0
  16. package/dist/docs/reference/memport.md +246 -0
  17. package/dist/docs/reference/policy-engine.md +386 -0
  18. package/dist/docs/reference/tools.md +106 -0
  19. package/dist/docs/resources/faq.md +175 -0
  20. package/dist/docs/resources/quota-and-pricing.md +199 -0
  21. package/dist/docs/resources/tos-privacy.md +102 -0
  22. package/dist/docs/resources/troubleshooting.md +176 -0
  23. package/dist/docs/resources/uninstall.md +56 -0
  24. package/dist/src/agents/a2a-errors.d.ts +65 -0
  25. package/dist/src/agents/a2a-errors.js +164 -0
  26. package/dist/src/agents/a2a-errors.js.map +1 -0
  27. package/dist/src/agents/a2a-errors.test.d.ts +6 -0
  28. package/dist/src/agents/a2a-errors.test.js +183 -0
  29. package/dist/src/agents/a2a-errors.test.js.map +1 -0
  30. package/dist/src/agents/auth-provider/api-key-provider.d.ts +30 -0
  31. package/dist/src/agents/auth-provider/api-key-provider.js +66 -0
  32. package/dist/src/agents/auth-provider/api-key-provider.js.map +1 -0
  33. package/dist/src/agents/auth-provider/api-key-provider.test.d.ts +6 -0
  34. package/dist/src/agents/auth-provider/api-key-provider.test.js +130 -0
  35. package/dist/src/agents/auth-provider/api-key-provider.test.js.map +1 -0
  36. package/dist/src/agents/auth-provider/http-provider.d.ts +28 -0
  37. package/dist/src/agents/auth-provider/http-provider.js +73 -0
  38. package/dist/src/agents/auth-provider/http-provider.js.map +1 -0
  39. package/dist/src/agents/auth-provider/http-provider.test.d.ts +6 -0
  40. package/dist/src/agents/auth-provider/http-provider.test.js +112 -0
  41. package/dist/src/agents/auth-provider/http-provider.test.js.map +1 -0
  42. package/dist/src/agents/auth-provider/oauth2-provider.d.ts +65 -0
  43. package/dist/src/agents/auth-provider/oauth2-provider.js +233 -0
  44. package/dist/src/agents/auth-provider/oauth2-provider.js.map +1 -0
  45. package/dist/src/agents/auth-provider/oauth2-provider.test.d.ts +6 -0
  46. package/dist/src/agents/auth-provider/oauth2-provider.test.js +490 -0
  47. package/dist/src/agents/auth-provider/oauth2-provider.test.js.map +1 -0
  48. package/dist/src/agents/browser/analyzeScreenshot.d.ts +35 -0
  49. package/dist/src/agents/browser/analyzeScreenshot.js +183 -0
  50. package/dist/src/agents/browser/analyzeScreenshot.js.map +1 -0
  51. package/dist/src/agents/browser/analyzeScreenshot.test.d.ts +6 -0
  52. package/dist/src/agents/browser/analyzeScreenshot.test.js +161 -0
  53. package/dist/src/agents/browser/analyzeScreenshot.test.js.map +1 -0
  54. package/dist/src/agents/browser/automationOverlay.d.ts +26 -0
  55. package/dist/src/agents/browser/automationOverlay.js +100 -0
  56. package/dist/src/agents/browser/automationOverlay.js.map +1 -0
  57. package/dist/src/agents/browser/browserAgentDefinition.d.ts +50 -0
  58. package/dist/src/agents/browser/browserAgentDefinition.js +141 -0
  59. package/dist/src/agents/browser/browserAgentDefinition.js.map +1 -0
  60. package/dist/src/agents/browser/browserAgentFactory.d.ts +42 -0
  61. package/dist/src/agents/browser/browserAgentFactory.js +116 -0
  62. package/dist/src/agents/browser/browserAgentFactory.js.map +1 -0
  63. package/dist/src/agents/browser/browserAgentFactory.test.d.ts +6 -0
  64. package/dist/src/agents/browser/browserAgentFactory.test.js +240 -0
  65. package/dist/src/agents/browser/browserAgentFactory.test.js.map +1 -0
  66. package/dist/src/agents/browser/browserAgentInvocation.d.ts +34 -0
  67. package/dist/src/agents/browser/browserAgentInvocation.js +386 -0
  68. package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -0
  69. package/dist/src/agents/browser/browserAgentInvocation.test.d.ts +6 -0
  70. package/dist/src/agents/browser/browserAgentInvocation.test.js +382 -0
  71. package/dist/src/agents/browser/browserAgentInvocation.test.js.map +1 -0
  72. package/dist/src/agents/browser/browserManager.d.ts +115 -0
  73. package/dist/src/agents/browser/browserManager.js +370 -0
  74. package/dist/src/agents/browser/browserManager.js.map +1 -0
  75. package/dist/src/agents/browser/browserManager.test.d.ts +6 -0
  76. package/dist/src/agents/browser/browserManager.test.js +382 -0
  77. package/dist/src/agents/browser/browserManager.test.js.map +1 -0
  78. package/dist/src/agents/browser/mcpToolWrapper.d.ts +45 -0
  79. package/dist/src/agents/browser/mcpToolWrapper.js +358 -0
  80. package/dist/src/agents/browser/mcpToolWrapper.js.map +1 -0
  81. package/dist/src/agents/browser/mcpToolWrapper.test.d.ts +6 -0
  82. package/dist/src/agents/browser/mcpToolWrapper.test.js +126 -0
  83. package/dist/src/agents/browser/mcpToolWrapper.test.js.map +1 -0
  84. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.d.ts +6 -0
  85. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.js +59 -0
  86. package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.js.map +1 -0
  87. package/dist/src/agents/browser/modelAvailability.d.ts +23 -0
  88. package/dist/src/agents/browser/modelAvailability.js +23 -0
  89. package/dist/src/agents/browser/modelAvailability.js.map +1 -0
  90. package/dist/src/agents/cli-help-agent.d.ts +2 -2
  91. package/dist/src/billing/billing.d.ts +80 -0
  92. package/dist/src/billing/billing.js +128 -0
  93. package/dist/src/billing/billing.js.map +1 -0
  94. package/dist/src/billing/billing.test.d.ts +6 -0
  95. package/dist/src/billing/billing.test.js +182 -0
  96. package/dist/src/billing/billing.test.js.map +1 -0
  97. package/dist/src/billing/index.d.ts +6 -0
  98. package/dist/src/billing/index.js +7 -0
  99. package/dist/src/billing/index.js.map +1 -0
  100. package/dist/src/code_assist/oauth2.d.ts +1 -1
  101. package/dist/src/code_assist/types.d.ts +26 -26
  102. package/dist/src/config/agent-loop-context.d.ts +22 -0
  103. package/dist/src/config/agent-loop-context.js +7 -0
  104. package/dist/src/config/agent-loop-context.js.map +1 -0
  105. package/dist/src/config/trackerFeatureFlag.test.d.ts +6 -0
  106. package/dist/src/config/trackerFeatureFlag.test.js +43 -0
  107. package/dist/src/config/trackerFeatureFlag.test.js.map +1 -0
  108. package/dist/src/config/userHintService.d.ts +46 -0
  109. package/dist/src/config/userHintService.js +81 -0
  110. package/dist/src/config/userHintService.js.map +1 -0
  111. package/dist/src/config/userHintService.test.d.ts +6 -0
  112. package/dist/src/config/userHintService.test.js +62 -0
  113. package/dist/src/config/userHintService.test.js.map +1 -0
  114. package/dist/src/core/localLiteRtLmClient.d.ts +24 -0
  115. package/dist/src/core/localLiteRtLmClient.js +77 -0
  116. package/dist/src/core/localLiteRtLmClient.js.map +1 -0
  117. package/dist/src/core/localLiteRtLmClient.test.d.ts +6 -0
  118. package/dist/src/core/localLiteRtLmClient.test.js +87 -0
  119. package/dist/src/core/localLiteRtLmClient.test.js.map +1 -0
  120. package/dist/src/core/openaiContentGenerator.d.ts +1 -0
  121. package/dist/src/core/openaiContentGenerator.js +13 -13
  122. package/dist/src/core/openaiContentGenerator.js.map +1 -1
  123. package/dist/src/hooks/runtimeHooks.test.d.ts +6 -0
  124. package/dist/src/hooks/runtimeHooks.test.js +100 -0
  125. package/dist/src/hooks/runtimeHooks.test.js.map +1 -0
  126. package/dist/src/ide/types.d.ts +6 -6
  127. package/dist/src/mcp/mcp-oauth-provider.d.ts +43 -0
  128. package/dist/src/mcp/mcp-oauth-provider.js +67 -0
  129. package/dist/src/mcp/mcp-oauth-provider.js.map +1 -0
  130. package/dist/src/mcp/mcp-oauth-provider.test.d.ts +6 -0
  131. package/dist/src/mcp/mcp-oauth-provider.test.js +63 -0
  132. package/dist/src/mcp/mcp-oauth-provider.test.js.map +1 -0
  133. package/dist/src/policy/integrity.d.ts +45 -0
  134. package/dist/src/policy/integrity.js +121 -0
  135. package/dist/src/policy/integrity.js.map +1 -0
  136. package/dist/src/policy/integrity.test.d.ts +6 -0
  137. package/dist/src/policy/integrity.test.js +132 -0
  138. package/dist/src/policy/integrity.test.js.map +1 -0
  139. package/dist/src/policy/policies/conseca.toml +6 -0
  140. package/dist/src/policy/workspace-policy.test.js +231 -0
  141. package/dist/src/policy/workspace-policy.test.js.map +1 -0
  142. package/dist/src/routing/strategies/approvalModeStrategy.d.ts +18 -0
  143. package/dist/src/routing/strategies/approvalModeStrategy.js +59 -0
  144. package/dist/src/routing/strategies/approvalModeStrategy.js.map +1 -0
  145. package/dist/src/routing/strategies/approvalModeStrategy.test.d.ts +6 -0
  146. package/dist/src/routing/strategies/approvalModeStrategy.test.js +140 -0
  147. package/dist/src/routing/strategies/approvalModeStrategy.test.js.map +1 -0
  148. package/dist/src/routing/strategies/gemmaClassifierStrategy.d.ts +14 -0
  149. package/dist/src/routing/strategies/gemmaClassifierStrategy.js +182 -0
  150. package/dist/src/routing/strategies/gemmaClassifierStrategy.js.map +1 -0
  151. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.d.ts +6 -0
  152. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js +218 -0
  153. package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js.map +1 -0
  154. package/dist/src/safety/conseca/conseca.d.ts +31 -0
  155. package/dist/src/safety/conseca/conseca.js +105 -0
  156. package/dist/src/safety/conseca/conseca.js.map +1 -0
  157. package/dist/src/safety/conseca/conseca.test.js +226 -0
  158. package/dist/src/safety/conseca/conseca.test.js.map +1 -0
  159. package/dist/src/safety/conseca/integration.test.js +19 -0
  160. package/dist/src/safety/conseca/integration.test.js.map +1 -0
  161. package/dist/src/safety/conseca/policy-enforcer.d.ts +13 -0
  162. package/dist/src/safety/conseca/policy-enforcer.js +135 -0
  163. package/dist/src/safety/conseca/policy-enforcer.js.map +1 -0
  164. package/dist/src/safety/conseca/policy-enforcer.test.js +141 -0
  165. package/dist/src/safety/conseca/policy-enforcer.test.js.map +1 -0
  166. package/dist/src/safety/conseca/policy-generator.d.ts +15 -0
  167. package/dist/src/safety/conseca/policy-generator.js +144 -0
  168. package/dist/src/safety/conseca/policy-generator.js.map +1 -0
  169. package/dist/src/safety/conseca/policy-generator.test.d.ts +6 -0
  170. package/dist/src/safety/conseca/policy-generator.test.js +84 -0
  171. package/dist/src/safety/conseca/policy-generator.test.js.map +1 -0
  172. package/dist/src/safety/conseca/types.d.ts +15 -0
  173. package/dist/src/safety/conseca/types.js +7 -0
  174. package/dist/src/safety/conseca/types.js.map +1 -0
  175. package/dist/src/scheduler/scheduler_parallel.test.d.ts +6 -0
  176. package/dist/src/scheduler/scheduler_parallel.test.js +401 -0
  177. package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -0
  178. package/dist/src/services/FolderTrustDiscoveryService.d.ts +32 -0
  179. package/dist/src/services/FolderTrustDiscoveryService.js +169 -0
  180. package/dist/src/services/FolderTrustDiscoveryService.js.map +1 -0
  181. package/dist/src/services/FolderTrustDiscoveryService.test.d.ts +6 -0
  182. package/dist/src/services/FolderTrustDiscoveryService.test.js +118 -0
  183. package/dist/src/services/FolderTrustDiscoveryService.test.js.map +1 -0
  184. package/dist/src/services/fileKeychain.d.ts +24 -0
  185. package/dist/src/services/fileKeychain.js +123 -0
  186. package/dist/src/services/fileKeychain.js.map +1 -0
  187. package/dist/src/services/keychainService.d.ts +51 -0
  188. package/dist/src/services/keychainService.js +133 -0
  189. package/dist/src/services/keychainService.js.map +1 -0
  190. package/dist/src/services/keychainService.test.d.ts +6 -0
  191. package/dist/src/services/keychainService.test.js +150 -0
  192. package/dist/src/services/keychainService.test.js.map +1 -0
  193. package/dist/src/services/keychainTypes.d.ts +41 -0
  194. package/dist/src/services/keychainTypes.js +18 -0
  195. package/dist/src/services/keychainTypes.js.map +1 -0
  196. package/dist/src/services/trackerService.d.ts +49 -0
  197. package/dist/src/services/trackerService.js +193 -0
  198. package/dist/src/services/trackerService.js.map +1 -0
  199. package/dist/src/services/trackerService.test.d.ts +6 -0
  200. package/dist/src/services/trackerService.test.js +117 -0
  201. package/dist/src/services/trackerService.test.js.map +1 -0
  202. package/dist/src/services/trackerTypes.d.ts +51 -0
  203. package/dist/src/services/trackerTypes.js +33 -0
  204. package/dist/src/services/trackerTypes.js.map +1 -0
  205. package/dist/src/telemetry/billingEvents.d.ts +75 -0
  206. package/dist/src/telemetry/billingEvents.js +181 -0
  207. package/dist/src/telemetry/billingEvents.js.map +1 -0
  208. package/dist/src/telemetry/billingEvents.test.d.ts +6 -0
  209. package/dist/src/telemetry/billingEvents.test.js +139 -0
  210. package/dist/src/telemetry/billingEvents.test.js.map +1 -0
  211. package/dist/src/telemetry/conseca-logger.d.ts +9 -0
  212. package/dist/src/telemetry/conseca-logger.js +91 -0
  213. package/dist/src/telemetry/conseca-logger.js.map +1 -0
  214. package/dist/src/telemetry/conseca-logger.test.d.ts +6 -0
  215. package/dist/src/telemetry/conseca-logger.test.js +90 -0
  216. package/dist/src/telemetry/conseca-logger.test.js.map +1 -0
  217. package/dist/src/telemetry/trace.test.d.ts +6 -0
  218. package/dist/src/telemetry/trace.test.js +116 -0
  219. package/dist/src/telemetry/trace.test.js.map +1 -0
  220. package/dist/src/tools/definitions/trackerTools.d.ts +12 -0
  221. package/dist/src/tools/definitions/trackerTools.js +146 -0
  222. package/dist/src/tools/definitions/trackerTools.js.map +1 -0
  223. package/dist/src/tools/diff-utils.d.ts +9 -0
  224. package/dist/src/tools/diff-utils.js +66 -0
  225. package/dist/src/tools/diff-utils.js.map +1 -0
  226. package/dist/src/tools/diff-utils.test.d.ts +6 -0
  227. package/dist/src/tools/diff-utils.test.js +53 -0
  228. package/dist/src/tools/diff-utils.test.js.map +1 -0
  229. package/dist/src/tools/grep-utils.d.ts +49 -0
  230. package/dist/src/tools/grep-utils.js +147 -0
  231. package/dist/src/tools/grep-utils.js.map +1 -0
  232. package/dist/src/tools/omissionPlaceholderDetector.d.ts +15 -0
  233. package/dist/src/tools/omissionPlaceholderDetector.js +90 -0
  234. package/dist/src/tools/omissionPlaceholderDetector.js.map +1 -0
  235. package/dist/src/tools/omissionPlaceholderDetector.test.d.ts +6 -0
  236. package/dist/src/tools/omissionPlaceholderDetector.test.js +49 -0
  237. package/dist/src/tools/omissionPlaceholderDetector.test.js.map +1 -0
  238. package/dist/src/tools/trackerTools.d.ts +122 -0
  239. package/dist/src/tools/trackerTools.js +365 -0
  240. package/dist/src/tools/trackerTools.js.map +1 -0
  241. package/dist/src/tools/trackerTools.test.d.ts +6 -0
  242. package/dist/src/tools/trackerTools.test.js +97 -0
  243. package/dist/src/tools/trackerTools.test.js.map +1 -0
  244. package/dist/src/utils/approvalModeUtils.d.ts +14 -0
  245. package/dist/src/utils/approvalModeUtils.js +35 -0
  246. package/dist/src/utils/approvalModeUtils.js.map +1 -0
  247. package/dist/src/utils/approvalModeUtils.test.d.ts +6 -0
  248. package/dist/src/utils/approvalModeUtils.test.js +36 -0
  249. package/dist/src/utils/approvalModeUtils.test.js.map +1 -0
  250. package/dist/src/utils/cache.d.ts +63 -0
  251. package/dist/src/utils/cache.js +103 -0
  252. package/dist/src/utils/cache.js.map +1 -0
  253. package/dist/src/utils/cache.test.d.ts +6 -0
  254. package/dist/src/utils/cache.test.js +158 -0
  255. package/dist/src/utils/cache.test.js.map +1 -0
  256. package/dist/src/utils/checkpointUtils.d.ts +2 -2
  257. package/dist/src/utils/compatibility.d.ts +41 -0
  258. package/dist/src/utils/compatibility.js +112 -0
  259. package/dist/src/utils/compatibility.js.map +1 -0
  260. package/dist/src/utils/compatibility.test.d.ts +6 -0
  261. package/dist/src/utils/compatibility.test.js +233 -0
  262. package/dist/src/utils/compatibility.test.js.map +1 -0
  263. package/dist/src/utils/envExpansion.d.ts +18 -0
  264. package/dist/src/utils/envExpansion.js +46 -0
  265. package/dist/src/utils/envExpansion.js.map +1 -0
  266. package/dist/src/utils/envExpansion.test.d.ts +6 -0
  267. package/dist/src/utils/envExpansion.test.js +110 -0
  268. package/dist/src/utils/envExpansion.test.js.map +1 -0
  269. package/dist/src/utils/errors_timeout.test.d.ts +6 -0
  270. package/dist/src/utils/errors_timeout.test.js +40 -0
  271. package/dist/src/utils/errors_timeout.test.js.map +1 -0
  272. package/dist/src/utils/fetch.test.d.ts +6 -0
  273. package/dist/src/utils/fetch.test.js +206 -0
  274. package/dist/src/utils/fetch.test.js.map +1 -0
  275. package/dist/src/utils/markdownUtils.d.ts +22 -0
  276. package/dist/src/utils/markdownUtils.js +126 -0
  277. package/dist/src/utils/markdownUtils.js.map +1 -0
  278. package/dist/src/utils/markdownUtils.test.d.ts +6 -0
  279. package/dist/src/utils/markdownUtils.test.js +107 -0
  280. package/dist/src/utils/markdownUtils.test.js.map +1 -0
  281. package/dist/src/utils/oauth-flow.d.ts +105 -0
  282. package/dist/src/utils/oauth-flow.js +370 -0
  283. package/dist/src/utils/oauth-flow.js.map +1 -0
  284. package/dist/src/utils/oauth-flow.test.d.ts +6 -0
  285. package/dist/src/utils/oauth-flow.test.js +360 -0
  286. package/dist/src/utils/oauth-flow.test.js.map +1 -0
  287. package/dist/src/utils/sessionUtils.d.ts +14 -0
  288. package/dist/src/utils/sessionUtils.js +122 -0
  289. package/dist/src/utils/sessionUtils.js.map +1 -0
  290. package/dist/src/utils/sessionUtils.test.d.ts +1 -0
  291. package/dist/src/utils/sessionUtils.test.js +171 -0
  292. package/dist/src/utils/sessionUtils.test.js.map +1 -0
  293. package/dist/src/voice/responseFormatter.d.ts +38 -0
  294. package/dist/src/voice/responseFormatter.js +130 -0
  295. package/dist/src/voice/responseFormatter.js.map +1 -0
  296. package/dist/src/voice/responseFormatter.test.d.ts +6 -0
  297. package/dist/src/voice/responseFormatter.test.js +214 -0
  298. package/dist/src/voice/responseFormatter.test.js.map +1 -0
  299. package/dist/tsconfig.tsbuildinfo +1 -1
  300. package/package.json +1 -1
  301. package/dist/docs/CONTRIBUTING.md +0 -555
  302. package/dist/src/agents/executor.d.ts +0 -114
  303. package/dist/src/agents/executor.js +0 -779
  304. package/dist/src/agents/executor.js.map +0 -1
  305. package/dist/src/agents/executor.test.js +0 -1362
  306. package/dist/src/agents/executor.test.js.map +0 -1
  307. package/dist/src/agents/invocation.d.ts +0 -46
  308. package/dist/src/agents/invocation.js +0 -102
  309. package/dist/src/agents/invocation.js.map +0 -1
  310. package/dist/src/agents/invocation.test.js +0 -215
  311. package/dist/src/agents/invocation.test.js.map +0 -1
  312. package/dist/src/core/subagent.d.ts +0 -236
  313. package/dist/src/core/subagent.js +0 -482
  314. package/dist/src/core/subagent.js.map +0 -1
  315. package/dist/src/core/subagent.test.js +0 -530
  316. package/dist/src/core/subagent.test.js.map +0 -1
  317. package/dist/src/tools/smart-edit.d.ts +0 -78
  318. package/dist/src/tools/smart-edit.js +0 -717
  319. package/dist/src/tools/smart-edit.js.map +0 -1
  320. package/dist/src/tools/smart-edit.test.js +0 -592
  321. package/dist/src/tools/smart-edit.test.js.map +0 -1
  322. /package/dist/src/{agents/executor.test.d.ts → policy/workspace-policy.test.d.ts} +0 -0
  323. /package/dist/src/{agents/invocation.test.d.ts → safety/conseca/conseca.test.d.ts} +0 -0
  324. /package/dist/src/{core/subagent.test.d.ts → safety/conseca/integration.test.d.ts} +0 -0
  325. /package/dist/src/{tools/smart-edit.test.d.ts → safety/conseca/policy-enforcer.test.d.ts} +0 -0
@@ -0,0 +1,382 @@
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 { BrowserAgentInvocation } from './browserAgentInvocation.js';
8
+ import { makeFakeConfig } from '../../test-utils/config.js';
9
+ import {} from '../types.js';
10
+ // Mock dependencies before imports
11
+ vi.mock('../../utils/debugLogger.js', () => ({
12
+ debugLogger: {
13
+ log: vi.fn(),
14
+ error: vi.fn(),
15
+ },
16
+ }));
17
+ vi.mock('./browserAgentFactory.js', () => ({
18
+ createBrowserAgentDefinition: vi.fn(),
19
+ cleanupBrowserAgent: vi.fn(),
20
+ }));
21
+ vi.mock('../local-executor.js', () => ({
22
+ LocalAgentExecutor: {
23
+ create: vi.fn(),
24
+ },
25
+ }));
26
+ import { createBrowserAgentDefinition, cleanupBrowserAgent, } from './browserAgentFactory.js';
27
+ import { LocalAgentExecutor } from '../local-executor.js';
28
+ describe('BrowserAgentInvocation', () => {
29
+ let mockConfig;
30
+ let mockMessageBus;
31
+ let mockParams;
32
+ beforeEach(() => {
33
+ vi.clearAllMocks();
34
+ mockConfig = makeFakeConfig({
35
+ agents: {
36
+ overrides: {
37
+ browser_agent: {
38
+ enabled: true,
39
+ },
40
+ },
41
+ browser: {
42
+ headless: false,
43
+ sessionMode: 'isolated',
44
+ },
45
+ },
46
+ });
47
+ mockMessageBus = {
48
+ publish: vi.fn().mockResolvedValue(undefined),
49
+ subscribe: vi.fn(),
50
+ unsubscribe: vi.fn(),
51
+ };
52
+ mockParams = {
53
+ task: 'Navigate to example.com and click the button',
54
+ };
55
+ });
56
+ afterEach(() => {
57
+ vi.restoreAllMocks();
58
+ });
59
+ describe('constructor', () => {
60
+ it('should create invocation with params', () => {
61
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
62
+ expect(invocation.params).toEqual(mockParams);
63
+ });
64
+ it('should use browser_agent as default tool name', () => {
65
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
66
+ expect(invocation['_toolName']).toBe('browser_agent');
67
+ });
68
+ it('should use custom tool name if provided', () => {
69
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus, 'custom_name', 'Custom Display Name');
70
+ expect(invocation['_toolName']).toBe('custom_name');
71
+ expect(invocation['_toolDisplayName']).toBe('Custom Display Name');
72
+ });
73
+ });
74
+ describe('getDescription', () => {
75
+ it('should return description with input summary', () => {
76
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
77
+ const description = invocation.getDescription();
78
+ expect(description).toContain('browser agent');
79
+ expect(description).toContain('task');
80
+ });
81
+ it('should truncate long input values', () => {
82
+ const longParams = {
83
+ task: 'A'.repeat(100),
84
+ };
85
+ const invocation = new BrowserAgentInvocation(mockConfig, longParams, mockMessageBus);
86
+ const description = invocation.getDescription();
87
+ // Should be truncated to max length
88
+ expect(description.length).toBeLessThanOrEqual(200);
89
+ });
90
+ });
91
+ describe('toolLocations', () => {
92
+ it('should return empty array by default', () => {
93
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
94
+ const locations = invocation.toolLocations();
95
+ expect(locations).toEqual([]);
96
+ });
97
+ });
98
+ describe('execute', () => {
99
+ let mockExecutor;
100
+ beforeEach(() => {
101
+ vi.mocked(createBrowserAgentDefinition).mockResolvedValue({
102
+ definition: {
103
+ name: 'browser_agent',
104
+ description: 'mock definition',
105
+ kind: 'local',
106
+ inputConfig: {},
107
+ outputConfig: {},
108
+ processOutput: () => '',
109
+ modelConfig: { model: 'test' },
110
+ runConfig: {},
111
+ promptConfig: { query: '', systemPrompt: '' },
112
+ toolConfig: { tools: ['analyze_screenshot', 'click'] },
113
+ },
114
+ browserManager: {},
115
+ });
116
+ mockExecutor = {
117
+ run: vi.fn().mockResolvedValue({
118
+ result: JSON.stringify({ success: true }),
119
+ terminate_reason: 'GOAL',
120
+ }),
121
+ };
122
+ vi.mocked(LocalAgentExecutor.create).mockResolvedValue(mockExecutor);
123
+ vi.mocked(cleanupBrowserAgent).mockClear();
124
+ });
125
+ it('should return result text and call cleanup on success', async () => {
126
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
127
+ const controller = new AbortController();
128
+ const updateOutput = vi.fn();
129
+ const result = await invocation.execute(controller.signal, updateOutput);
130
+ expect(Array.isArray(result.llmContent)).toBe(true);
131
+ expect(result.llmContent[0].text).toContain('Browser agent finished');
132
+ expect(cleanupBrowserAgent).toHaveBeenCalled();
133
+ });
134
+ it('should work without updateOutput (fire-and-forget)', async () => {
135
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
136
+ const controller = new AbortController();
137
+ // Should not throw even with no updateOutput
138
+ await expect(invocation.execute(controller.signal)).resolves.toBeDefined();
139
+ });
140
+ it('should return error result when executor throws', async () => {
141
+ mockExecutor.run.mockRejectedValue(new Error('Unexpected crash'));
142
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
143
+ const controller = new AbortController();
144
+ const result = await invocation.execute(controller.signal);
145
+ expect(result.error).toBeDefined();
146
+ expect(cleanupBrowserAgent).toHaveBeenCalled();
147
+ });
148
+ // ─── Structured SubagentProgress emission tests ───────────────────────
149
+ /**
150
+ * Helper: sets up LocalAgentExecutor.create to capture the onActivity
151
+ * callback so tests can fire synthetic activity events.
152
+ */
153
+ function setupActivityCapture() {
154
+ let onActivityFn;
155
+ vi.mocked(LocalAgentExecutor.create).mockImplementation(async (_def, _config, onActivity) => {
156
+ onActivityFn = onActivity;
157
+ return mockExecutor;
158
+ });
159
+ return {
160
+ capturedOnActivity: () => undefined,
161
+ fireActivity: (event) => {
162
+ onActivityFn?.(event);
163
+ },
164
+ };
165
+ }
166
+ it('should emit initial SubagentProgress with running state', async () => {
167
+ const updateOutput = vi.fn();
168
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
169
+ await invocation.execute(new AbortController().signal, updateOutput);
170
+ const firstCall = updateOutput.mock.calls[0]?.[0];
171
+ expect(firstCall.isSubagentProgress).toBe(true);
172
+ expect(firstCall.state).toBe('running');
173
+ expect(firstCall.recentActivity).toEqual([]);
174
+ });
175
+ it('should emit completed SubagentProgress on success', async () => {
176
+ const updateOutput = vi.fn();
177
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
178
+ await invocation.execute(new AbortController().signal, updateOutput);
179
+ const lastCall = updateOutput.mock.calls[updateOutput.mock.calls.length - 1]?.[0];
180
+ expect(lastCall.isSubagentProgress).toBe(true);
181
+ expect(lastCall.state).toBe('completed');
182
+ });
183
+ it('should handle THOUGHT_CHUNK and emit structured progress', async () => {
184
+ const { fireActivity } = setupActivityCapture();
185
+ const updateOutput = vi.fn();
186
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
187
+ const executePromise = invocation.execute(new AbortController().signal, updateOutput);
188
+ // Allow createBrowserAgentDefinition to resolve and onActivity to be registered
189
+ await Promise.resolve();
190
+ await Promise.resolve();
191
+ fireActivity({
192
+ isSubagentActivityEvent: true,
193
+ agentName: 'browser_agent',
194
+ type: 'THOUGHT_CHUNK',
195
+ data: { text: 'Navigating to the page...' },
196
+ });
197
+ await executePromise;
198
+ const progressCalls = updateOutput.mock.calls
199
+ .map((c) => c[0])
200
+ .filter((p) => p.isSubagentProgress);
201
+ const thoughtProgress = progressCalls.find((p) => p.recentActivity.some((a) => a.type === 'thought' &&
202
+ a.content.includes('Navigating to the page...')));
203
+ expect(thoughtProgress).toBeDefined();
204
+ });
205
+ it('should handle TOOL_CALL_START and TOOL_CALL_END with callId tracking', async () => {
206
+ const { fireActivity } = setupActivityCapture();
207
+ const updateOutput = vi.fn();
208
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
209
+ const executePromise = invocation.execute(new AbortController().signal, updateOutput);
210
+ await Promise.resolve();
211
+ await Promise.resolve();
212
+ fireActivity({
213
+ isSubagentActivityEvent: true,
214
+ agentName: 'browser_agent',
215
+ type: 'TOOL_CALL_START',
216
+ data: {
217
+ name: 'navigate_browser',
218
+ callId: 'call-1',
219
+ args: { url: 'https://example.com' },
220
+ },
221
+ });
222
+ fireActivity({
223
+ isSubagentActivityEvent: true,
224
+ agentName: 'browser_agent',
225
+ type: 'TOOL_CALL_END',
226
+ data: { name: 'navigate_browser', id: 'call-1' },
227
+ });
228
+ await executePromise;
229
+ const progressCalls = updateOutput.mock.calls
230
+ .map((c) => c[0])
231
+ .filter((p) => p.isSubagentProgress);
232
+ // After TOOL_CALL_END, the tool should be completed
233
+ const finalProgress = progressCalls[progressCalls.length - 1];
234
+ const toolItem = finalProgress?.recentActivity.find((a) => a.type === 'tool_call' && a.content === 'navigate_browser');
235
+ expect(toolItem).toBeDefined();
236
+ expect(toolItem?.status).toBe('completed');
237
+ });
238
+ it('should sanitize sensitive data in tool call args', async () => {
239
+ const { fireActivity } = setupActivityCapture();
240
+ const updateOutput = vi.fn();
241
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
242
+ const executePromise = invocation.execute(new AbortController().signal, updateOutput);
243
+ await Promise.resolve();
244
+ await Promise.resolve();
245
+ fireActivity({
246
+ isSubagentActivityEvent: true,
247
+ agentName: 'browser_agent',
248
+ type: 'TOOL_CALL_START',
249
+ data: {
250
+ name: 'fill_form',
251
+ callId: 'call-2',
252
+ args: { password: 'supersecret123', url: 'https://example.com' },
253
+ },
254
+ });
255
+ await executePromise;
256
+ const progressCalls = updateOutput.mock.calls
257
+ .map((c) => c[0])
258
+ .filter((p) => p.isSubagentProgress);
259
+ const toolItem = progressCalls
260
+ .flatMap((p) => p.recentActivity)
261
+ .find((a) => a.type === 'tool_call' && a.content === 'fill_form');
262
+ expect(toolItem).toBeDefined();
263
+ expect(toolItem?.args).not.toContain('supersecret123');
264
+ expect(toolItem?.args).toContain('[REDACTED]');
265
+ });
266
+ it('should handle ERROR event with callId and mark tool as errored', async () => {
267
+ const { fireActivity } = setupActivityCapture();
268
+ const updateOutput = vi.fn();
269
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
270
+ const executePromise = invocation.execute(new AbortController().signal, updateOutput);
271
+ await Promise.resolve();
272
+ await Promise.resolve();
273
+ fireActivity({
274
+ isSubagentActivityEvent: true,
275
+ agentName: 'browser_agent',
276
+ type: 'TOOL_CALL_START',
277
+ data: { name: 'click_element', callId: 'call-3', args: {} },
278
+ });
279
+ fireActivity({
280
+ isSubagentActivityEvent: true,
281
+ agentName: 'browser_agent',
282
+ type: 'ERROR',
283
+ data: { error: 'Element not found', callId: 'call-3' },
284
+ });
285
+ await executePromise;
286
+ const progressCalls = updateOutput.mock.calls
287
+ .map((c) => c[0])
288
+ .filter((p) => p.isSubagentProgress);
289
+ const allItems = progressCalls.flatMap((p) => p.recentActivity);
290
+ const toolItem = allItems.find((a) => a.type === 'tool_call' && a.content === 'click_element');
291
+ expect(toolItem?.status).toBe('error');
292
+ });
293
+ it('should sanitize sensitive data in ERROR event messages', async () => {
294
+ const { fireActivity } = setupActivityCapture();
295
+ const updateOutput = vi.fn();
296
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
297
+ const executePromise = invocation.execute(new AbortController().signal, updateOutput);
298
+ await Promise.resolve();
299
+ await Promise.resolve();
300
+ fireActivity({
301
+ isSubagentActivityEvent: true,
302
+ agentName: 'browser_agent',
303
+ type: 'ERROR',
304
+ data: { error: 'Auth failed: api_key=sk-secret-abc1234567890' },
305
+ });
306
+ await executePromise;
307
+ const progressCalls = updateOutput.mock.calls
308
+ .map((c) => c[0])
309
+ .filter((p) => p.isSubagentProgress);
310
+ const errorItem = progressCalls
311
+ .flatMap((p) => p.recentActivity)
312
+ .find((a) => a.type === 'thought' && a.status === 'error');
313
+ expect(errorItem).toBeDefined();
314
+ expect(errorItem?.content).not.toContain('sk-secret-abc1234567890');
315
+ expect(errorItem?.content).toContain('[REDACTED]');
316
+ });
317
+ it('should sanitize inline PEM content in error messages', async () => {
318
+ const { fireActivity } = setupActivityCapture();
319
+ const updateOutput = vi.fn();
320
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
321
+ const executePromise = invocation.execute(new AbortController().signal, updateOutput);
322
+ await Promise.resolve();
323
+ await Promise.resolve();
324
+ fireActivity({
325
+ isSubagentActivityEvent: true,
326
+ agentName: 'browser_agent',
327
+ type: 'ERROR',
328
+ data: {
329
+ error: 'Failed to authenticate:\n-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEA12345...\n-----END RSA PRIVATE KEY-----\nPlease check credentials.',
330
+ },
331
+ });
332
+ await executePromise;
333
+ const progressCalls = updateOutput.mock.calls
334
+ .map((c) => c[0])
335
+ .filter((p) => p.isSubagentProgress);
336
+ const errorItem = progressCalls
337
+ .flatMap((p) => p.recentActivity)
338
+ .find((a) => a.type === 'thought' && a.status === 'error');
339
+ expect(errorItem).toBeDefined();
340
+ expect(errorItem?.content).toContain('[REDACTED_PEM]');
341
+ expect(errorItem?.content).not.toContain('-----BEGIN');
342
+ });
343
+ it('should mark all running tools as errored when ERROR has no callId', async () => {
344
+ const { fireActivity } = setupActivityCapture();
345
+ const updateOutput = vi.fn();
346
+ const invocation = new BrowserAgentInvocation(mockConfig, mockParams, mockMessageBus);
347
+ const executePromise = invocation.execute(new AbortController().signal, updateOutput);
348
+ await Promise.resolve();
349
+ await Promise.resolve();
350
+ fireActivity({
351
+ isSubagentActivityEvent: true,
352
+ agentName: 'browser_agent',
353
+ type: 'TOOL_CALL_START',
354
+ data: { name: 'tool_a', callId: 'c1', args: {} },
355
+ });
356
+ fireActivity({
357
+ isSubagentActivityEvent: true,
358
+ agentName: 'browser_agent',
359
+ type: 'TOOL_CALL_START',
360
+ data: { name: 'tool_b', callId: 'c2', args: {} },
361
+ });
362
+ // ERROR with no callId should mark ALL running tools as error
363
+ fireActivity({
364
+ isSubagentActivityEvent: true,
365
+ agentName: 'browser_agent',
366
+ type: 'ERROR',
367
+ data: { error: 'Agent crashed' },
368
+ });
369
+ await executePromise;
370
+ const progressCalls = updateOutput.mock.calls
371
+ .map((c) => c[0])
372
+ .filter((p) => p.isSubagentProgress);
373
+ const allItems = progressCalls.flatMap((p) => p.recentActivity);
374
+ const toolA = allItems.find((a) => a.type === 'tool_call' && a.content === 'tool_a');
375
+ const toolB = allItems.find((a) => a.type === 'tool_call' && a.content === 'tool_b');
376
+ // Both should be error since no callId was specified
377
+ expect(toolA?.status).toBe('error');
378
+ expect(toolB?.status).toBe('error');
379
+ });
380
+ });
381
+ });
382
+ //# sourceMappingURL=browserAgentInvocation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserAgentInvocation.test.js","sourceRoot":"","sources":["../../../../src/agents/browser/browserAgentInvocation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * @fileoverview Manages browser lifecycle for the Browser Agent.
8
+ *
9
+ * Handles:
10
+ * - Browser management via chrome-devtools-mcp with --isolated mode
11
+ * - CDP connection via raw MCP SDK Client (NOT registered in main registry)
12
+ * - Visual tools via --experimental-vision flag
13
+ *
14
+ * IMPORTANT: The MCP client here is ISOLATED from the main agent's tool registry.
15
+ * Tools discovered from chrome-devtools-mcp are NOT registered in the main registry.
16
+ * They are wrapped as DeclarativeTools and passed directly to the browser agent.
17
+ */
18
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
19
+ import type { Tool as McpTool } from '@modelcontextprotocol/sdk/types.js';
20
+ import type { Config } from '../../config/config.js';
21
+ /**
22
+ * Content item from an MCP tool call response.
23
+ * Can be text or image (for take_screenshot).
24
+ */
25
+ export interface McpContentItem {
26
+ type: 'text' | 'image';
27
+ text?: string;
28
+ /** Base64-encoded image data (for type='image') */
29
+ data?: string;
30
+ /** MIME type of the image (e.g., 'image/png') */
31
+ mimeType?: string;
32
+ }
33
+ /**
34
+ * Result from an MCP tool call.
35
+ */
36
+ export interface McpToolCallResult {
37
+ content?: McpContentItem[];
38
+ isError?: boolean;
39
+ }
40
+ /**
41
+ * Manages browser lifecycle and ISOLATED MCP client for the Browser Agent.
42
+ *
43
+ * The browser is launched and managed by chrome-devtools-mcp in --isolated mode.
44
+ * Visual tools (click_at, etc.) are enabled via --experimental-vision flag.
45
+ *
46
+ * Key isolation property: The MCP client here does NOT register tools
47
+ * in the main ToolRegistry. Tools are kept local to the browser agent.
48
+ */
49
+ export declare class BrowserManager {
50
+ private config;
51
+ private rawMcpClient;
52
+ private mcpTransport;
53
+ private discoveredTools;
54
+ /**
55
+ * Whether to inject the automation overlay.
56
+ * Always false in headless mode (no visible window to decorate).
57
+ */
58
+ private readonly shouldInjectOverlay;
59
+ constructor(config: Config);
60
+ /**
61
+ * Gets the raw MCP SDK Client for direct tool calls.
62
+ * This client is ISOLATED from the main tool registry.
63
+ */
64
+ getRawMcpClient(): Promise<Client>;
65
+ /**
66
+ * Gets the tool definitions discovered from the MCP server.
67
+ * These are dynamically fetched from chrome-devtools-mcp.
68
+ */
69
+ getDiscoveredTools(): Promise<McpTool[]>;
70
+ /**
71
+ * Calls a tool on the MCP server.
72
+ *
73
+ * @param toolName The name of the tool to call
74
+ * @param args Arguments to pass to the tool
75
+ * @param signal Optional AbortSignal to cancel the call
76
+ * @returns The result from the MCP server
77
+ */
78
+ callTool(toolName: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<McpToolCallResult>;
79
+ /**
80
+ * Safely maps a raw MCP SDK callTool response to our typed McpToolCallResult
81
+ * without using unsafe type assertions.
82
+ */
83
+ private toResult;
84
+ /**
85
+ * Ensures browser and MCP client are connected.
86
+ */
87
+ ensureConnection(): Promise<void>;
88
+ /**
89
+ * Closes browser and cleans up connections.
90
+ * The browser process is managed by chrome-devtools-mcp, so closing
91
+ * the transport will terminate the browser.
92
+ */
93
+ close(): Promise<void>;
94
+ /**
95
+ * Connects to chrome-devtools-mcp which manages the browser process.
96
+ *
97
+ * Spawns npx chrome-devtools-mcp with:
98
+ * - --isolated: Manages its own browser instance
99
+ * - --experimental-vision: Enables visual tools (click_at, etc.)
100
+ *
101
+ * IMPORTANT: This does NOT use McpClientManager and does NOT register
102
+ * tools in the main ToolRegistry. The connection is isolated to this
103
+ * BrowserManager instance.
104
+ */
105
+ private connectMcp;
106
+ /**
107
+ * Creates an Error with context-specific remediation based on the actual
108
+ * error message and the current sessionMode.
109
+ */
110
+ private createConnectionError;
111
+ /**
112
+ * Discovers tools from the connected MCP server.
113
+ */
114
+ private discoverTools;
115
+ }