@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.
- package/dist/docs/assets/theme-ansi-dark.png +0 -0
- package/dist/docs/assets/theme-atom-one-dark.png +0 -0
- package/dist/docs/assets/theme-ayu-dark.png +0 -0
- package/dist/docs/assets/theme-default-dark.png +0 -0
- package/dist/docs/assets/theme-dracula-dark.png +0 -0
- package/dist/docs/assets/theme-github-dark.png +0 -0
- package/dist/docs/assets/theme-holiday-dark.png +0 -0
- package/dist/docs/assets/theme-shades-of-purple-dark.png +0 -0
- package/dist/docs/assets/theme-solarized-dark.png +0 -0
- package/dist/docs/assets/theme-solarized-light.png +0 -0
- package/dist/docs/cli/notifications.md +58 -0
- package/dist/docs/redirects.json +20 -0
- package/dist/docs/reference/commands.md +563 -0
- package/dist/docs/reference/configuration.md +1804 -0
- package/dist/docs/reference/keyboard-shortcuts.md +168 -0
- package/dist/docs/reference/memport.md +246 -0
- package/dist/docs/reference/policy-engine.md +386 -0
- package/dist/docs/reference/tools.md +106 -0
- package/dist/docs/resources/faq.md +175 -0
- package/dist/docs/resources/quota-and-pricing.md +199 -0
- package/dist/docs/resources/tos-privacy.md +102 -0
- package/dist/docs/resources/troubleshooting.md +176 -0
- package/dist/docs/resources/uninstall.md +56 -0
- package/dist/src/agents/a2a-errors.d.ts +65 -0
- package/dist/src/agents/a2a-errors.js +164 -0
- package/dist/src/agents/a2a-errors.js.map +1 -0
- package/dist/src/agents/a2a-errors.test.d.ts +6 -0
- package/dist/src/agents/a2a-errors.test.js +183 -0
- package/dist/src/agents/a2a-errors.test.js.map +1 -0
- package/dist/src/agents/auth-provider/api-key-provider.d.ts +30 -0
- package/dist/src/agents/auth-provider/api-key-provider.js +66 -0
- package/dist/src/agents/auth-provider/api-key-provider.js.map +1 -0
- package/dist/src/agents/auth-provider/api-key-provider.test.d.ts +6 -0
- package/dist/src/agents/auth-provider/api-key-provider.test.js +130 -0
- package/dist/src/agents/auth-provider/api-key-provider.test.js.map +1 -0
- package/dist/src/agents/auth-provider/http-provider.d.ts +28 -0
- package/dist/src/agents/auth-provider/http-provider.js +73 -0
- package/dist/src/agents/auth-provider/http-provider.js.map +1 -0
- package/dist/src/agents/auth-provider/http-provider.test.d.ts +6 -0
- package/dist/src/agents/auth-provider/http-provider.test.js +112 -0
- package/dist/src/agents/auth-provider/http-provider.test.js.map +1 -0
- package/dist/src/agents/auth-provider/oauth2-provider.d.ts +65 -0
- package/dist/src/agents/auth-provider/oauth2-provider.js +233 -0
- package/dist/src/agents/auth-provider/oauth2-provider.js.map +1 -0
- package/dist/src/agents/auth-provider/oauth2-provider.test.d.ts +6 -0
- package/dist/src/agents/auth-provider/oauth2-provider.test.js +490 -0
- package/dist/src/agents/auth-provider/oauth2-provider.test.js.map +1 -0
- package/dist/src/agents/browser/analyzeScreenshot.d.ts +35 -0
- package/dist/src/agents/browser/analyzeScreenshot.js +183 -0
- package/dist/src/agents/browser/analyzeScreenshot.js.map +1 -0
- package/dist/src/agents/browser/analyzeScreenshot.test.d.ts +6 -0
- package/dist/src/agents/browser/analyzeScreenshot.test.js +161 -0
- package/dist/src/agents/browser/analyzeScreenshot.test.js.map +1 -0
- package/dist/src/agents/browser/automationOverlay.d.ts +26 -0
- package/dist/src/agents/browser/automationOverlay.js +100 -0
- package/dist/src/agents/browser/automationOverlay.js.map +1 -0
- package/dist/src/agents/browser/browserAgentDefinition.d.ts +50 -0
- package/dist/src/agents/browser/browserAgentDefinition.js +141 -0
- package/dist/src/agents/browser/browserAgentDefinition.js.map +1 -0
- package/dist/src/agents/browser/browserAgentFactory.d.ts +42 -0
- package/dist/src/agents/browser/browserAgentFactory.js +116 -0
- package/dist/src/agents/browser/browserAgentFactory.js.map +1 -0
- package/dist/src/agents/browser/browserAgentFactory.test.d.ts +6 -0
- package/dist/src/agents/browser/browserAgentFactory.test.js +240 -0
- package/dist/src/agents/browser/browserAgentFactory.test.js.map +1 -0
- package/dist/src/agents/browser/browserAgentInvocation.d.ts +34 -0
- package/dist/src/agents/browser/browserAgentInvocation.js +386 -0
- package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -0
- package/dist/src/agents/browser/browserAgentInvocation.test.d.ts +6 -0
- package/dist/src/agents/browser/browserAgentInvocation.test.js +382 -0
- package/dist/src/agents/browser/browserAgentInvocation.test.js.map +1 -0
- package/dist/src/agents/browser/browserManager.d.ts +115 -0
- package/dist/src/agents/browser/browserManager.js +370 -0
- package/dist/src/agents/browser/browserManager.js.map +1 -0
- package/dist/src/agents/browser/browserManager.test.d.ts +6 -0
- package/dist/src/agents/browser/browserManager.test.js +382 -0
- package/dist/src/agents/browser/browserManager.test.js.map +1 -0
- package/dist/src/agents/browser/mcpToolWrapper.d.ts +45 -0
- package/dist/src/agents/browser/mcpToolWrapper.js +358 -0
- package/dist/src/agents/browser/mcpToolWrapper.js.map +1 -0
- package/dist/src/agents/browser/mcpToolWrapper.test.d.ts +6 -0
- package/dist/src/agents/browser/mcpToolWrapper.test.js +126 -0
- package/dist/src/agents/browser/mcpToolWrapper.test.js.map +1 -0
- package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.d.ts +6 -0
- package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.js +59 -0
- package/dist/src/agents/browser/mcpToolWrapperConfirmation.test.js.map +1 -0
- package/dist/src/agents/browser/modelAvailability.d.ts +23 -0
- package/dist/src/agents/browser/modelAvailability.js +23 -0
- package/dist/src/agents/browser/modelAvailability.js.map +1 -0
- package/dist/src/agents/cli-help-agent.d.ts +2 -2
- package/dist/src/billing/billing.d.ts +80 -0
- package/dist/src/billing/billing.js +128 -0
- package/dist/src/billing/billing.js.map +1 -0
- package/dist/src/billing/billing.test.d.ts +6 -0
- package/dist/src/billing/billing.test.js +182 -0
- package/dist/src/billing/billing.test.js.map +1 -0
- package/dist/src/billing/index.d.ts +6 -0
- package/dist/src/billing/index.js +7 -0
- package/dist/src/billing/index.js.map +1 -0
- package/dist/src/code_assist/oauth2.d.ts +1 -1
- package/dist/src/code_assist/types.d.ts +26 -26
- package/dist/src/config/agent-loop-context.d.ts +22 -0
- package/dist/src/config/agent-loop-context.js +7 -0
- package/dist/src/config/agent-loop-context.js.map +1 -0
- package/dist/src/config/trackerFeatureFlag.test.d.ts +6 -0
- package/dist/src/config/trackerFeatureFlag.test.js +43 -0
- package/dist/src/config/trackerFeatureFlag.test.js.map +1 -0
- package/dist/src/config/userHintService.d.ts +46 -0
- package/dist/src/config/userHintService.js +81 -0
- package/dist/src/config/userHintService.js.map +1 -0
- package/dist/src/config/userHintService.test.d.ts +6 -0
- package/dist/src/config/userHintService.test.js +62 -0
- package/dist/src/config/userHintService.test.js.map +1 -0
- package/dist/src/core/localLiteRtLmClient.d.ts +24 -0
- package/dist/src/core/localLiteRtLmClient.js +77 -0
- package/dist/src/core/localLiteRtLmClient.js.map +1 -0
- package/dist/src/core/localLiteRtLmClient.test.d.ts +6 -0
- package/dist/src/core/localLiteRtLmClient.test.js +87 -0
- package/dist/src/core/localLiteRtLmClient.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator.d.ts +1 -0
- package/dist/src/core/openaiContentGenerator.js +13 -13
- package/dist/src/core/openaiContentGenerator.js.map +1 -1
- package/dist/src/hooks/runtimeHooks.test.d.ts +6 -0
- package/dist/src/hooks/runtimeHooks.test.js +100 -0
- package/dist/src/hooks/runtimeHooks.test.js.map +1 -0
- package/dist/src/ide/types.d.ts +6 -6
- package/dist/src/mcp/mcp-oauth-provider.d.ts +43 -0
- package/dist/src/mcp/mcp-oauth-provider.js +67 -0
- package/dist/src/mcp/mcp-oauth-provider.js.map +1 -0
- package/dist/src/mcp/mcp-oauth-provider.test.d.ts +6 -0
- package/dist/src/mcp/mcp-oauth-provider.test.js +63 -0
- package/dist/src/mcp/mcp-oauth-provider.test.js.map +1 -0
- package/dist/src/policy/integrity.d.ts +45 -0
- package/dist/src/policy/integrity.js +121 -0
- package/dist/src/policy/integrity.js.map +1 -0
- package/dist/src/policy/integrity.test.d.ts +6 -0
- package/dist/src/policy/integrity.test.js +132 -0
- package/dist/src/policy/integrity.test.js.map +1 -0
- package/dist/src/policy/policies/conseca.toml +6 -0
- package/dist/src/policy/workspace-policy.test.js +231 -0
- package/dist/src/policy/workspace-policy.test.js.map +1 -0
- package/dist/src/routing/strategies/approvalModeStrategy.d.ts +18 -0
- package/dist/src/routing/strategies/approvalModeStrategy.js +59 -0
- package/dist/src/routing/strategies/approvalModeStrategy.js.map +1 -0
- package/dist/src/routing/strategies/approvalModeStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/approvalModeStrategy.test.js +140 -0
- package/dist/src/routing/strategies/approvalModeStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.d.ts +14 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.js +182 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.js.map +1 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js +218 -0
- package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js.map +1 -0
- package/dist/src/safety/conseca/conseca.d.ts +31 -0
- package/dist/src/safety/conseca/conseca.js +105 -0
- package/dist/src/safety/conseca/conseca.js.map +1 -0
- package/dist/src/safety/conseca/conseca.test.js +226 -0
- package/dist/src/safety/conseca/conseca.test.js.map +1 -0
- package/dist/src/safety/conseca/integration.test.js +19 -0
- package/dist/src/safety/conseca/integration.test.js.map +1 -0
- package/dist/src/safety/conseca/policy-enforcer.d.ts +13 -0
- package/dist/src/safety/conseca/policy-enforcer.js +135 -0
- package/dist/src/safety/conseca/policy-enforcer.js.map +1 -0
- package/dist/src/safety/conseca/policy-enforcer.test.js +141 -0
- package/dist/src/safety/conseca/policy-enforcer.test.js.map +1 -0
- package/dist/src/safety/conseca/policy-generator.d.ts +15 -0
- package/dist/src/safety/conseca/policy-generator.js +144 -0
- package/dist/src/safety/conseca/policy-generator.js.map +1 -0
- package/dist/src/safety/conseca/policy-generator.test.d.ts +6 -0
- package/dist/src/safety/conseca/policy-generator.test.js +84 -0
- package/dist/src/safety/conseca/policy-generator.test.js.map +1 -0
- package/dist/src/safety/conseca/types.d.ts +15 -0
- package/dist/src/safety/conseca/types.js +7 -0
- package/dist/src/safety/conseca/types.js.map +1 -0
- package/dist/src/scheduler/scheduler_parallel.test.d.ts +6 -0
- package/dist/src/scheduler/scheduler_parallel.test.js +401 -0
- package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -0
- package/dist/src/services/FolderTrustDiscoveryService.d.ts +32 -0
- package/dist/src/services/FolderTrustDiscoveryService.js +169 -0
- package/dist/src/services/FolderTrustDiscoveryService.js.map +1 -0
- package/dist/src/services/FolderTrustDiscoveryService.test.d.ts +6 -0
- package/dist/src/services/FolderTrustDiscoveryService.test.js +118 -0
- package/dist/src/services/FolderTrustDiscoveryService.test.js.map +1 -0
- package/dist/src/services/fileKeychain.d.ts +24 -0
- package/dist/src/services/fileKeychain.js +123 -0
- package/dist/src/services/fileKeychain.js.map +1 -0
- package/dist/src/services/keychainService.d.ts +51 -0
- package/dist/src/services/keychainService.js +133 -0
- package/dist/src/services/keychainService.js.map +1 -0
- package/dist/src/services/keychainService.test.d.ts +6 -0
- package/dist/src/services/keychainService.test.js +150 -0
- package/dist/src/services/keychainService.test.js.map +1 -0
- package/dist/src/services/keychainTypes.d.ts +41 -0
- package/dist/src/services/keychainTypes.js +18 -0
- package/dist/src/services/keychainTypes.js.map +1 -0
- package/dist/src/services/trackerService.d.ts +49 -0
- package/dist/src/services/trackerService.js +193 -0
- package/dist/src/services/trackerService.js.map +1 -0
- package/dist/src/services/trackerService.test.d.ts +6 -0
- package/dist/src/services/trackerService.test.js +117 -0
- package/dist/src/services/trackerService.test.js.map +1 -0
- package/dist/src/services/trackerTypes.d.ts +51 -0
- package/dist/src/services/trackerTypes.js +33 -0
- package/dist/src/services/trackerTypes.js.map +1 -0
- package/dist/src/telemetry/billingEvents.d.ts +75 -0
- package/dist/src/telemetry/billingEvents.js +181 -0
- package/dist/src/telemetry/billingEvents.js.map +1 -0
- package/dist/src/telemetry/billingEvents.test.d.ts +6 -0
- package/dist/src/telemetry/billingEvents.test.js +139 -0
- package/dist/src/telemetry/billingEvents.test.js.map +1 -0
- package/dist/src/telemetry/conseca-logger.d.ts +9 -0
- package/dist/src/telemetry/conseca-logger.js +91 -0
- package/dist/src/telemetry/conseca-logger.js.map +1 -0
- package/dist/src/telemetry/conseca-logger.test.d.ts +6 -0
- package/dist/src/telemetry/conseca-logger.test.js +90 -0
- package/dist/src/telemetry/conseca-logger.test.js.map +1 -0
- package/dist/src/telemetry/trace.test.d.ts +6 -0
- package/dist/src/telemetry/trace.test.js +116 -0
- package/dist/src/telemetry/trace.test.js.map +1 -0
- package/dist/src/tools/definitions/trackerTools.d.ts +12 -0
- package/dist/src/tools/definitions/trackerTools.js +146 -0
- package/dist/src/tools/definitions/trackerTools.js.map +1 -0
- package/dist/src/tools/diff-utils.d.ts +9 -0
- package/dist/src/tools/diff-utils.js +66 -0
- package/dist/src/tools/diff-utils.js.map +1 -0
- package/dist/src/tools/diff-utils.test.d.ts +6 -0
- package/dist/src/tools/diff-utils.test.js +53 -0
- package/dist/src/tools/diff-utils.test.js.map +1 -0
- package/dist/src/tools/grep-utils.d.ts +49 -0
- package/dist/src/tools/grep-utils.js +147 -0
- package/dist/src/tools/grep-utils.js.map +1 -0
- package/dist/src/tools/omissionPlaceholderDetector.d.ts +15 -0
- package/dist/src/tools/omissionPlaceholderDetector.js +90 -0
- package/dist/src/tools/omissionPlaceholderDetector.js.map +1 -0
- package/dist/src/tools/omissionPlaceholderDetector.test.d.ts +6 -0
- package/dist/src/tools/omissionPlaceholderDetector.test.js +49 -0
- package/dist/src/tools/omissionPlaceholderDetector.test.js.map +1 -0
- package/dist/src/tools/trackerTools.d.ts +122 -0
- package/dist/src/tools/trackerTools.js +365 -0
- package/dist/src/tools/trackerTools.js.map +1 -0
- package/dist/src/tools/trackerTools.test.d.ts +6 -0
- package/dist/src/tools/trackerTools.test.js +97 -0
- package/dist/src/tools/trackerTools.test.js.map +1 -0
- package/dist/src/utils/approvalModeUtils.d.ts +14 -0
- package/dist/src/utils/approvalModeUtils.js +35 -0
- package/dist/src/utils/approvalModeUtils.js.map +1 -0
- package/dist/src/utils/approvalModeUtils.test.d.ts +6 -0
- package/dist/src/utils/approvalModeUtils.test.js +36 -0
- package/dist/src/utils/approvalModeUtils.test.js.map +1 -0
- package/dist/src/utils/cache.d.ts +63 -0
- package/dist/src/utils/cache.js +103 -0
- package/dist/src/utils/cache.js.map +1 -0
- package/dist/src/utils/cache.test.d.ts +6 -0
- package/dist/src/utils/cache.test.js +158 -0
- package/dist/src/utils/cache.test.js.map +1 -0
- package/dist/src/utils/checkpointUtils.d.ts +2 -2
- package/dist/src/utils/compatibility.d.ts +41 -0
- package/dist/src/utils/compatibility.js +112 -0
- package/dist/src/utils/compatibility.js.map +1 -0
- package/dist/src/utils/compatibility.test.d.ts +6 -0
- package/dist/src/utils/compatibility.test.js +233 -0
- package/dist/src/utils/compatibility.test.js.map +1 -0
- package/dist/src/utils/envExpansion.d.ts +18 -0
- package/dist/src/utils/envExpansion.js +46 -0
- package/dist/src/utils/envExpansion.js.map +1 -0
- package/dist/src/utils/envExpansion.test.d.ts +6 -0
- package/dist/src/utils/envExpansion.test.js +110 -0
- package/dist/src/utils/envExpansion.test.js.map +1 -0
- package/dist/src/utils/errors_timeout.test.d.ts +6 -0
- package/dist/src/utils/errors_timeout.test.js +40 -0
- package/dist/src/utils/errors_timeout.test.js.map +1 -0
- package/dist/src/utils/fetch.test.d.ts +6 -0
- package/dist/src/utils/fetch.test.js +206 -0
- package/dist/src/utils/fetch.test.js.map +1 -0
- package/dist/src/utils/markdownUtils.d.ts +22 -0
- package/dist/src/utils/markdownUtils.js +126 -0
- package/dist/src/utils/markdownUtils.js.map +1 -0
- package/dist/src/utils/markdownUtils.test.d.ts +6 -0
- package/dist/src/utils/markdownUtils.test.js +107 -0
- package/dist/src/utils/markdownUtils.test.js.map +1 -0
- package/dist/src/utils/oauth-flow.d.ts +105 -0
- package/dist/src/utils/oauth-flow.js +370 -0
- package/dist/src/utils/oauth-flow.js.map +1 -0
- package/dist/src/utils/oauth-flow.test.d.ts +6 -0
- package/dist/src/utils/oauth-flow.test.js +360 -0
- package/dist/src/utils/oauth-flow.test.js.map +1 -0
- package/dist/src/utils/sessionUtils.d.ts +14 -0
- package/dist/src/utils/sessionUtils.js +122 -0
- package/dist/src/utils/sessionUtils.js.map +1 -0
- package/dist/src/utils/sessionUtils.test.d.ts +1 -0
- package/dist/src/utils/sessionUtils.test.js +171 -0
- package/dist/src/utils/sessionUtils.test.js.map +1 -0
- package/dist/src/voice/responseFormatter.d.ts +38 -0
- package/dist/src/voice/responseFormatter.js +130 -0
- package/dist/src/voice/responseFormatter.js.map +1 -0
- package/dist/src/voice/responseFormatter.test.d.ts +6 -0
- package/dist/src/voice/responseFormatter.test.js +214 -0
- package/dist/src/voice/responseFormatter.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/docs/CONTRIBUTING.md +0 -555
- package/dist/src/agents/executor.d.ts +0 -114
- package/dist/src/agents/executor.js +0 -779
- package/dist/src/agents/executor.js.map +0 -1
- package/dist/src/agents/executor.test.js +0 -1362
- package/dist/src/agents/executor.test.js.map +0 -1
- package/dist/src/agents/invocation.d.ts +0 -46
- package/dist/src/agents/invocation.js +0 -102
- package/dist/src/agents/invocation.js.map +0 -1
- package/dist/src/agents/invocation.test.js +0 -215
- package/dist/src/agents/invocation.test.js.map +0 -1
- package/dist/src/core/subagent.d.ts +0 -236
- package/dist/src/core/subagent.js +0 -482
- package/dist/src/core/subagent.js.map +0 -1
- package/dist/src/core/subagent.test.js +0 -530
- package/dist/src/core/subagent.test.js.map +0 -1
- package/dist/src/tools/smart-edit.d.ts +0 -78
- package/dist/src/tools/smart-edit.js +0 -717
- package/dist/src/tools/smart-edit.js.map +0 -1
- package/dist/src/tools/smart-edit.test.js +0 -592
- package/dist/src/tools/smart-edit.test.js.map +0 -1
- /package/dist/src/{agents/executor.test.d.ts → policy/workspace-policy.test.d.ts} +0 -0
- /package/dist/src/{agents/invocation.test.d.ts → safety/conseca/conseca.test.d.ts} +0 -0
- /package/dist/src/{core/subagent.test.d.ts → safety/conseca/integration.test.d.ts} +0 -0
- /package/dist/src/{tools/smart-edit.test.d.ts → safety/conseca/policy-enforcer.test.d.ts} +0 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { isPreviewModel, PREVIEW_GEMINI_FLASH_MODEL, DEFAULT_GEMINI_FLASH_MODEL, } from '../../config/models.js';
|
|
8
|
+
/** Canonical agent name — used for routing and configuration lookup. */
|
|
9
|
+
export const BROWSER_AGENT_NAME = 'browser_agent';
|
|
10
|
+
/**
|
|
11
|
+
* Output schema for browser agent results.
|
|
12
|
+
*/
|
|
13
|
+
export const BrowserTaskResultSchema = z.object({
|
|
14
|
+
success: z.boolean().describe('Whether the task was completed successfully'),
|
|
15
|
+
summary: z
|
|
16
|
+
.string()
|
|
17
|
+
.describe('A summary of what was accomplished or what went wrong'),
|
|
18
|
+
data: z
|
|
19
|
+
.unknown()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Optional extracted data from the task'),
|
|
22
|
+
});
|
|
23
|
+
const VISUAL_SECTION = `
|
|
24
|
+
VISUAL IDENTIFICATION (analyze_screenshot):
|
|
25
|
+
When you need to identify elements by visual attributes not in the AX tree (e.g., "click the yellow button", "find the red error message"), or need precise pixel coordinates:
|
|
26
|
+
1. Call analyze_screenshot with a clear instruction describing what to find
|
|
27
|
+
2. It returns visual analysis with coordinates/descriptions — it does NOT perform actions
|
|
28
|
+
3. Use the returned coordinates with click_at(x, y) or other tools yourself
|
|
29
|
+
4. If the analysis is insufficient, call it again with a more specific instruction
|
|
30
|
+
`;
|
|
31
|
+
/**
|
|
32
|
+
* System prompt for the semantic browser agent.
|
|
33
|
+
* Extracted from prototype (computer_use_subagent_cdt branch).
|
|
34
|
+
*
|
|
35
|
+
* @param visionEnabled Whether visual tools (analyze_screenshot, click_at) are available.
|
|
36
|
+
*/
|
|
37
|
+
export function buildBrowserSystemPrompt(visionEnabled) {
|
|
38
|
+
return `You are an expert browser automation agent (Orchestrator). Your goal is to completely fulfill the user's request.
|
|
39
|
+
|
|
40
|
+
IMPORTANT: You will receive an accessibility tree snapshot showing elements with uid values (e.g., uid=87_4 button "Login").
|
|
41
|
+
Use these uid values directly with your tools:
|
|
42
|
+
- click(uid="87_4") to click the Login button
|
|
43
|
+
- fill(uid="87_2", value="john") to fill a text field
|
|
44
|
+
- fill_form(elements=[{uid: "87_2", value: "john"}, {uid: "87_3", value: "pass"}]) to fill multiple fields at once
|
|
45
|
+
|
|
46
|
+
PARALLEL TOOL CALLS - CRITICAL:
|
|
47
|
+
- Do NOT make parallel calls for actions that change page state (click, fill, press_key, etc.)
|
|
48
|
+
- Each action changes the DOM and invalidates UIDs from the current snapshot
|
|
49
|
+
- Make state-changing actions ONE AT A TIME, then observe the results
|
|
50
|
+
|
|
51
|
+
OVERLAY/POPUP HANDLING:
|
|
52
|
+
Before interacting with page content, scan the accessibility tree for blocking overlays:
|
|
53
|
+
- Tooltips, popups, modals, cookie banners, newsletter prompts, promo dialogs
|
|
54
|
+
- These often have: close buttons (×, X, Close, Dismiss), "Got it", "Accept", "No thanks" buttons
|
|
55
|
+
- Common patterns: elements with role="dialog", role="tooltip", role="alertdialog", or aria-modal="true"
|
|
56
|
+
- If you see such elements, DISMISS THEM FIRST by clicking close/dismiss buttons before proceeding
|
|
57
|
+
- If a click seems to have no effect, check if an overlay appeared or is blocking the target
|
|
58
|
+
${visionEnabled ? VISUAL_SECTION : ''}
|
|
59
|
+
|
|
60
|
+
COMPLEX WEB APPS (spreadsheets, rich editors, canvas apps):
|
|
61
|
+
Many web apps (Google Sheets/Docs, Notion, Figma, etc.) use custom rendering rather than standard HTML inputs.
|
|
62
|
+
- fill does NOT work on these apps. Instead, click the target element, then use type_text to enter the value.
|
|
63
|
+
- type_text supports a submitKey parameter to press a key after typing (e.g., submitKey="Enter" to submit, submitKey="Tab" to move to the next field). This is much faster than separate press_key calls.
|
|
64
|
+
- Navigate cells/fields using keyboard shortcuts (Tab, Enter, ArrowDown) — more reliable than clicking UIDs.
|
|
65
|
+
- Use the Name Box (cell reference input, usually showing "A1") to jump to specific cells.
|
|
66
|
+
|
|
67
|
+
TERMINAL FAILURES — STOP IMMEDIATELY:
|
|
68
|
+
Some errors are unrecoverable and retrying will never help. When you see ANY of these, call complete_task immediately with success=false and include the EXACT error message (including any remediation steps it contains) in your summary:
|
|
69
|
+
- "Could not connect to Chrome" or "Failed to connect to Chrome" or "Timed out connecting to Chrome" — Include the full error message with its remediation steps in your summary verbatim. Do NOT paraphrase or omit instructions.
|
|
70
|
+
- "Browser closed" or "Target closed" or "Session closed" — The browser process has terminated. Include the error and tell the user to try again.
|
|
71
|
+
- "net::ERR_" network errors on the SAME URL after 2 retries — the site is unreachable. Report the URL and error.
|
|
72
|
+
- Any error that appears IDENTICALLY 3+ times in a row — it will not resolve by retrying.
|
|
73
|
+
Do NOT keep retrying terminal errors. Report them with actionable remediation steps and exit immediately.
|
|
74
|
+
|
|
75
|
+
CRITICAL: When you have fully completed the user's task, you MUST call the complete_task tool with a summary of what you accomplished. Do NOT just return text - you must explicitly call complete_task to exit the loop.`;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Browser Agent Definition Factory.
|
|
79
|
+
*
|
|
80
|
+
* Following the CodebaseInvestigatorAgent pattern:
|
|
81
|
+
* - Returns a factory function that takes Config for dynamic model selection
|
|
82
|
+
* - kind: 'local' for LocalAgentExecutor
|
|
83
|
+
* - toolConfig is set dynamically by browserAgentFactory
|
|
84
|
+
*/
|
|
85
|
+
export const BrowserAgentDefinition = (config, visionEnabled = false) => {
|
|
86
|
+
// Use Preview Flash model if the main model is any of the preview models.
|
|
87
|
+
// If the main model is not a preview model, use the default flash model.
|
|
88
|
+
const model = isPreviewModel(config.getModel())
|
|
89
|
+
? PREVIEW_GEMINI_FLASH_MODEL
|
|
90
|
+
: DEFAULT_GEMINI_FLASH_MODEL;
|
|
91
|
+
return {
|
|
92
|
+
name: BROWSER_AGENT_NAME,
|
|
93
|
+
kind: 'local',
|
|
94
|
+
experimental: true,
|
|
95
|
+
displayName: 'Browser Agent',
|
|
96
|
+
description: `Specialized autonomous agent for end-to-end web browser automation and objective-driven problem solving. Delegate complete, high-level tasks to this agent — it independently plans, executes multi-step interactions, interprets dynamic page feedback (e.g., game states, form validation errors, search results), and iterates until the goal is achieved. It perceives page structure through the Accessibility Tree, handles overlays and popups, and supports complex web apps.`,
|
|
97
|
+
inputConfig: {
|
|
98
|
+
inputSchema: {
|
|
99
|
+
type: 'object',
|
|
100
|
+
properties: {
|
|
101
|
+
task: {
|
|
102
|
+
type: 'string',
|
|
103
|
+
description: 'The task to perform in the browser.',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
required: ['task'],
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
outputConfig: {
|
|
110
|
+
outputName: 'result',
|
|
111
|
+
description: 'The result of the browser task.',
|
|
112
|
+
schema: BrowserTaskResultSchema,
|
|
113
|
+
},
|
|
114
|
+
processOutput: (output) => JSON.stringify(output, null, 2),
|
|
115
|
+
modelConfig: {
|
|
116
|
+
// Dynamic model based on whether user is using preview models
|
|
117
|
+
model,
|
|
118
|
+
generateContentConfig: {
|
|
119
|
+
temperature: 0.1,
|
|
120
|
+
topP: 0.95,
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
runConfig: {
|
|
124
|
+
maxTimeMinutes: 10,
|
|
125
|
+
maxTurns: 50,
|
|
126
|
+
},
|
|
127
|
+
// Tools are set dynamically by browserAgentFactory after MCP connection
|
|
128
|
+
// This is undefined here and will be set at invocation time
|
|
129
|
+
toolConfig: undefined,
|
|
130
|
+
promptConfig: {
|
|
131
|
+
query: `Your task is:
|
|
132
|
+
<task>
|
|
133
|
+
\${task}
|
|
134
|
+
</task>
|
|
135
|
+
|
|
136
|
+
First, use new_page to open the relevant URL. Then call take_snapshot to see the page and proceed with your task.`,
|
|
137
|
+
systemPrompt: buildBrowserSystemPrompt(visionEnabled),
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=browserAgentDefinition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserAgentDefinition.js","sourceRoot":"","sources":["../../../../src/agents/browser/browserAgentDefinition.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAEhC,wEAAwE;AACxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAC5E,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CAAC,uDAAuD,CAAC;IACpE,IAAI,EAAE,CAAC;SACJ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG;;;;;;;CAOtB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,aAAsB;IAC7D,OAAO;;;;;;;;;;;;;;;;;;;;EAoBP,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;0NAiBqL,CAAC;AAC3N,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAAc,EACd,aAAa,GAAG,KAAK,EACiC,EAAE;IACxD,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7C,CAAC,CAAC,0BAA0B;QAC5B,CAAC,CAAC,0BAA0B,CAAC;IAE/B,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,udAAud;QAEpe,WAAW,EAAE;YACX,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,qCAAqC;qBACnD;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;aACnB;SACF;QAED,YAAY,EAAE;YACZ,UAAU,EAAE,QAAQ;YACpB,WAAW,EAAE,iCAAiC;YAC9C,MAAM,EAAE,uBAAuB;SAChC;QAED,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1D,WAAW,EAAE;YACX,8DAA8D;YAC9D,KAAK;YACL,qBAAqB,EAAE;gBACrB,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,IAAI;aACX;SACF;QAED,SAAS,EAAE;YACT,cAAc,EAAE,EAAE;YAClB,QAAQ,EAAE,EAAE;SACb;QAED,wEAAwE;QACxE,4DAA4D;QAC5D,UAAU,EAAE,SAAS;QAErB,YAAY,EAAE;YACZ,KAAK,EAAE;;;;;kHAKqG;YAC5G,YAAY,EAAE,wBAAwB,CAAC,aAAa,CAAC;SACtD;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @fileoverview Factory for creating browser agent definitions with configured tools.
|
|
8
|
+
*
|
|
9
|
+
* This factory is called when the browser agent is invoked via delegate_to_agent.
|
|
10
|
+
* It creates a BrowserManager, connects the isolated MCP client, wraps tools,
|
|
11
|
+
* and returns a fully configured LocalAgentDefinition.
|
|
12
|
+
*
|
|
13
|
+
* IMPORTANT: The MCP tools are ONLY available to the browser agent's isolated
|
|
14
|
+
* registry. They are NOT registered in the main agent's ToolRegistry.
|
|
15
|
+
*/
|
|
16
|
+
import type { Config } from '../../config/config.js';
|
|
17
|
+
import type { LocalAgentDefinition } from '../types.js';
|
|
18
|
+
import type { MessageBus } from '../../confirmation-bus/message-bus.js';
|
|
19
|
+
import { BrowserManager } from './browserManager.js';
|
|
20
|
+
import { type BrowserTaskResultSchema } from './browserAgentDefinition.js';
|
|
21
|
+
/**
|
|
22
|
+
* Creates a browser agent definition with MCP tools configured.
|
|
23
|
+
*
|
|
24
|
+
* This is called when the browser agent is invoked via delegate_to_agent.
|
|
25
|
+
* The MCP client is created fresh and tools are wrapped for the agent's
|
|
26
|
+
* isolated registry - NOT registered with the main agent.
|
|
27
|
+
*
|
|
28
|
+
* @param config Runtime configuration
|
|
29
|
+
* @param messageBus Message bus for tool invocations
|
|
30
|
+
* @param printOutput Optional callback for progress messages
|
|
31
|
+
* @returns Fully configured LocalAgentDefinition with MCP tools
|
|
32
|
+
*/
|
|
33
|
+
export declare function createBrowserAgentDefinition(config: Config, messageBus: MessageBus, printOutput?: (msg: string) => void): Promise<{
|
|
34
|
+
definition: LocalAgentDefinition<typeof BrowserTaskResultSchema>;
|
|
35
|
+
browserManager: BrowserManager;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Cleans up browser resources after agent execution.
|
|
39
|
+
*
|
|
40
|
+
* @param browserManager The browser manager to clean up
|
|
41
|
+
*/
|
|
42
|
+
export declare function cleanupBrowserAgent(browserManager: BrowserManager): Promise<void>;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { AuthType } from '../../core/contentGenerator.js';
|
|
7
|
+
import { BrowserManager } from './browserManager.js';
|
|
8
|
+
import { BrowserAgentDefinition, } from './browserAgentDefinition.js';
|
|
9
|
+
import { createMcpDeclarativeTools } from './mcpToolWrapper.js';
|
|
10
|
+
import { createAnalyzeScreenshotTool } from './analyzeScreenshot.js';
|
|
11
|
+
import { injectAutomationOverlay } from './automationOverlay.js';
|
|
12
|
+
import { debugLogger } from '../../utils/debugLogger.js';
|
|
13
|
+
/**
|
|
14
|
+
* Creates a browser agent definition with MCP tools configured.
|
|
15
|
+
*
|
|
16
|
+
* This is called when the browser agent is invoked via delegate_to_agent.
|
|
17
|
+
* The MCP client is created fresh and tools are wrapped for the agent's
|
|
18
|
+
* isolated registry - NOT registered with the main agent.
|
|
19
|
+
*
|
|
20
|
+
* @param config Runtime configuration
|
|
21
|
+
* @param messageBus Message bus for tool invocations
|
|
22
|
+
* @param printOutput Optional callback for progress messages
|
|
23
|
+
* @returns Fully configured LocalAgentDefinition with MCP tools
|
|
24
|
+
*/
|
|
25
|
+
export async function createBrowserAgentDefinition(config, messageBus, printOutput) {
|
|
26
|
+
debugLogger.log('Creating browser agent definition with isolated MCP tools...');
|
|
27
|
+
// Create and initialize browser manager with isolated MCP client
|
|
28
|
+
const browserManager = new BrowserManager(config);
|
|
29
|
+
await browserManager.ensureConnection();
|
|
30
|
+
if (printOutput) {
|
|
31
|
+
printOutput('Browser connected with isolated MCP client.');
|
|
32
|
+
}
|
|
33
|
+
// Inject automation overlay if not in headless mode
|
|
34
|
+
const browserConfig = config.getBrowserAgentConfig();
|
|
35
|
+
if (!browserConfig?.customConfig?.headless) {
|
|
36
|
+
if (printOutput) {
|
|
37
|
+
printOutput('Injecting automation overlay...');
|
|
38
|
+
}
|
|
39
|
+
await injectAutomationOverlay(browserManager);
|
|
40
|
+
}
|
|
41
|
+
// Create declarative tools from dynamically discovered MCP tools
|
|
42
|
+
// These tools dispatch to browserManager's isolated client
|
|
43
|
+
const mcpTools = await createMcpDeclarativeTools(browserManager, messageBus);
|
|
44
|
+
const availableToolNames = mcpTools.map((t) => t.name);
|
|
45
|
+
// Validate required semantic tools are available
|
|
46
|
+
const requiredSemanticTools = [
|
|
47
|
+
'click',
|
|
48
|
+
'fill',
|
|
49
|
+
'navigate_page',
|
|
50
|
+
'take_snapshot',
|
|
51
|
+
];
|
|
52
|
+
const missingSemanticTools = requiredSemanticTools.filter((t) => !availableToolNames.includes(t));
|
|
53
|
+
if (missingSemanticTools.length > 0) {
|
|
54
|
+
debugLogger.warn(`Semantic tools missing (${missingSemanticTools.join(', ')}). ` +
|
|
55
|
+
'Some browser interactions may not work correctly.');
|
|
56
|
+
}
|
|
57
|
+
// Only click_at is strictly required — text input can use press_key or fill.
|
|
58
|
+
const requiredVisualTools = ['click_at'];
|
|
59
|
+
const missingVisualTools = requiredVisualTools.filter((t) => !availableToolNames.includes(t));
|
|
60
|
+
// Check whether vision can be enabled; returns undefined if all gates pass.
|
|
61
|
+
function getVisionDisabledReason() {
|
|
62
|
+
const browserConfig = config.getBrowserAgentConfig();
|
|
63
|
+
if (!browserConfig.customConfig.visualModel) {
|
|
64
|
+
return 'No visualModel configured.';
|
|
65
|
+
}
|
|
66
|
+
if (missingVisualTools.length > 0) {
|
|
67
|
+
return (`Visual tools missing (${missingVisualTools.join(', ')}). ` +
|
|
68
|
+
`The installed chrome-devtools-mcp version may be too old.`);
|
|
69
|
+
}
|
|
70
|
+
const authType = config.getContentGeneratorConfig()?.authType;
|
|
71
|
+
const blockedAuthTypes = new Set([
|
|
72
|
+
AuthType.LOGIN_WITH_GOOGLE,
|
|
73
|
+
AuthType.LEGACY_CLOUD_SHELL,
|
|
74
|
+
AuthType.COMPUTE_ADC,
|
|
75
|
+
]);
|
|
76
|
+
if (authType && blockedAuthTypes.has(authType)) {
|
|
77
|
+
return 'Visual agent model not available for current auth type.';
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const allTools = [...mcpTools];
|
|
82
|
+
const visionDisabledReason = getVisionDisabledReason();
|
|
83
|
+
if (visionDisabledReason) {
|
|
84
|
+
debugLogger.log(`Vision disabled: ${visionDisabledReason}`);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
allTools.push(createAnalyzeScreenshotTool(browserManager, config, messageBus));
|
|
88
|
+
}
|
|
89
|
+
debugLogger.log(`Created ${allTools.length} tools for browser agent: ` +
|
|
90
|
+
allTools.map((t) => t.name).join(', '));
|
|
91
|
+
// Create configured definition with tools
|
|
92
|
+
// BrowserAgentDefinition is a factory function - call it with config
|
|
93
|
+
const baseDefinition = BrowserAgentDefinition(config, !visionDisabledReason);
|
|
94
|
+
const definition = {
|
|
95
|
+
...baseDefinition,
|
|
96
|
+
toolConfig: {
|
|
97
|
+
tools: allTools,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
return { definition, browserManager };
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Cleans up browser resources after agent execution.
|
|
104
|
+
*
|
|
105
|
+
* @param browserManager The browser manager to clean up
|
|
106
|
+
*/
|
|
107
|
+
export async function cleanupBrowserAgent(browserManager) {
|
|
108
|
+
try {
|
|
109
|
+
await browserManager.close();
|
|
110
|
+
debugLogger.log('Browser agent cleanup complete');
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
debugLogger.error(`Error during browser cleanup: ${error instanceof Error ? error.message : String(error)}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=browserAgentFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserAgentFactory.js","sourceRoot":"","sources":["../../../../src/agents/browser/browserAgentFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,240 @@
|
|
|
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 { createBrowserAgentDefinition, cleanupBrowserAgent, } from './browserAgentFactory.js';
|
|
8
|
+
import { injectAutomationOverlay } from './automationOverlay.js';
|
|
9
|
+
import { makeFakeConfig } from '../../test-utils/config.js';
|
|
10
|
+
// Create mock browser manager
|
|
11
|
+
const mockBrowserManager = {
|
|
12
|
+
ensureConnection: vi.fn().mockResolvedValue(undefined),
|
|
13
|
+
getDiscoveredTools: vi.fn().mockResolvedValue([
|
|
14
|
+
// Semantic tools
|
|
15
|
+
{ name: 'take_snapshot', description: 'Take snapshot' },
|
|
16
|
+
{ name: 'click', description: 'Click element' },
|
|
17
|
+
{ name: 'fill', description: 'Fill form field' },
|
|
18
|
+
{ name: 'navigate_page', description: 'Navigate to URL' },
|
|
19
|
+
// Visual tools (from --experimental-vision)
|
|
20
|
+
{ name: 'click_at', description: 'Click at coordinates' },
|
|
21
|
+
]),
|
|
22
|
+
callTool: vi.fn().mockResolvedValue({ content: [] }),
|
|
23
|
+
close: vi.fn().mockResolvedValue(undefined),
|
|
24
|
+
};
|
|
25
|
+
// Mock dependencies
|
|
26
|
+
vi.mock('./browserManager.js', () => ({
|
|
27
|
+
BrowserManager: vi.fn(() => mockBrowserManager),
|
|
28
|
+
}));
|
|
29
|
+
vi.mock('./automationOverlay.js', () => ({
|
|
30
|
+
injectAutomationOverlay: vi.fn().mockResolvedValue(undefined),
|
|
31
|
+
}));
|
|
32
|
+
vi.mock('../../utils/debugLogger.js', () => ({
|
|
33
|
+
debugLogger: {
|
|
34
|
+
log: vi.fn(),
|
|
35
|
+
warn: vi.fn(),
|
|
36
|
+
error: vi.fn(),
|
|
37
|
+
},
|
|
38
|
+
}));
|
|
39
|
+
import { buildBrowserSystemPrompt, BROWSER_AGENT_NAME, } from './browserAgentDefinition.js';
|
|
40
|
+
describe('browserAgentFactory', () => {
|
|
41
|
+
let mockConfig;
|
|
42
|
+
let mockMessageBus;
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
vi.clearAllMocks();
|
|
45
|
+
vi.mocked(injectAutomationOverlay).mockClear();
|
|
46
|
+
// Reset mock implementations
|
|
47
|
+
mockBrowserManager.ensureConnection.mockResolvedValue(undefined);
|
|
48
|
+
mockBrowserManager.getDiscoveredTools.mockResolvedValue([
|
|
49
|
+
// Semantic tools
|
|
50
|
+
{ name: 'take_snapshot', description: 'Take snapshot' },
|
|
51
|
+
{ name: 'click', description: 'Click element' },
|
|
52
|
+
{ name: 'fill', description: 'Fill form field' },
|
|
53
|
+
{ name: 'navigate_page', description: 'Navigate to URL' },
|
|
54
|
+
// Visual tools (from --experimental-vision)
|
|
55
|
+
{ name: 'click_at', description: 'Click at coordinates' },
|
|
56
|
+
]);
|
|
57
|
+
mockBrowserManager.close.mockResolvedValue(undefined);
|
|
58
|
+
mockConfig = makeFakeConfig({
|
|
59
|
+
agents: {
|
|
60
|
+
overrides: {
|
|
61
|
+
browser_agent: {
|
|
62
|
+
enabled: true,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
browser: {
|
|
66
|
+
headless: false,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
mockMessageBus = {
|
|
71
|
+
publish: vi.fn().mockResolvedValue(undefined),
|
|
72
|
+
subscribe: vi.fn(),
|
|
73
|
+
unsubscribe: vi.fn(),
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
afterEach(() => {
|
|
77
|
+
vi.restoreAllMocks();
|
|
78
|
+
});
|
|
79
|
+
describe('createBrowserAgentDefinition', () => {
|
|
80
|
+
it('should ensure browser connection', async () => {
|
|
81
|
+
await createBrowserAgentDefinition(mockConfig, mockMessageBus);
|
|
82
|
+
expect(mockBrowserManager.ensureConnection).toHaveBeenCalled();
|
|
83
|
+
});
|
|
84
|
+
it('should inject automation overlay when not in headless mode', async () => {
|
|
85
|
+
await createBrowserAgentDefinition(mockConfig, mockMessageBus);
|
|
86
|
+
expect(injectAutomationOverlay).toHaveBeenCalledWith(mockBrowserManager);
|
|
87
|
+
});
|
|
88
|
+
it('should not inject automation overlay when in headless mode', async () => {
|
|
89
|
+
const headlessConfig = makeFakeConfig({
|
|
90
|
+
agents: {
|
|
91
|
+
overrides: {
|
|
92
|
+
browser_agent: {
|
|
93
|
+
enabled: true,
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
browser: {
|
|
97
|
+
headless: true,
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
await createBrowserAgentDefinition(headlessConfig, mockMessageBus);
|
|
102
|
+
expect(injectAutomationOverlay).not.toHaveBeenCalled();
|
|
103
|
+
});
|
|
104
|
+
it('should return agent definition with discovered tools', async () => {
|
|
105
|
+
const { definition } = await createBrowserAgentDefinition(mockConfig, mockMessageBus);
|
|
106
|
+
expect(definition.name).toBe(BROWSER_AGENT_NAME);
|
|
107
|
+
// 5 MCP tools + 1 type_text composite tool (no analyze_screenshot without visualModel)
|
|
108
|
+
expect(definition.toolConfig?.tools).toHaveLength(6);
|
|
109
|
+
});
|
|
110
|
+
it('should return browser manager for cleanup', async () => {
|
|
111
|
+
const { browserManager } = await createBrowserAgentDefinition(mockConfig, mockMessageBus);
|
|
112
|
+
expect(browserManager).toBeDefined();
|
|
113
|
+
});
|
|
114
|
+
it('should call printOutput when provided', async () => {
|
|
115
|
+
const printOutput = vi.fn();
|
|
116
|
+
await createBrowserAgentDefinition(mockConfig, mockMessageBus, printOutput);
|
|
117
|
+
expect(printOutput).toHaveBeenCalled();
|
|
118
|
+
});
|
|
119
|
+
it('should create definition with correct structure', async () => {
|
|
120
|
+
const { definition } = await createBrowserAgentDefinition(mockConfig, mockMessageBus);
|
|
121
|
+
expect(definition.kind).toBe('local');
|
|
122
|
+
expect(definition.inputConfig).toBeDefined();
|
|
123
|
+
expect(definition.outputConfig).toBeDefined();
|
|
124
|
+
expect(definition.promptConfig).toBeDefined();
|
|
125
|
+
});
|
|
126
|
+
it('should exclude visual prompt section when visualModel is not configured', async () => {
|
|
127
|
+
const { definition } = await createBrowserAgentDefinition(mockConfig, mockMessageBus);
|
|
128
|
+
const systemPrompt = definition.promptConfig?.systemPrompt ?? '';
|
|
129
|
+
expect(systemPrompt).not.toContain('analyze_screenshot');
|
|
130
|
+
expect(systemPrompt).not.toContain('VISUAL IDENTIFICATION');
|
|
131
|
+
});
|
|
132
|
+
it('should include visual prompt section when visualModel is configured', async () => {
|
|
133
|
+
const configWithVision = makeFakeConfig({
|
|
134
|
+
agents: {
|
|
135
|
+
overrides: {
|
|
136
|
+
browser_agent: {
|
|
137
|
+
enabled: true,
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
browser: {
|
|
141
|
+
headless: false,
|
|
142
|
+
visualModel: 'gemini-2.5-flash-preview',
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
const { definition } = await createBrowserAgentDefinition(configWithVision, mockMessageBus);
|
|
147
|
+
const systemPrompt = definition.promptConfig?.systemPrompt ?? '';
|
|
148
|
+
expect(systemPrompt).toContain('analyze_screenshot');
|
|
149
|
+
expect(systemPrompt).toContain('VISUAL IDENTIFICATION');
|
|
150
|
+
});
|
|
151
|
+
it('should include analyze_screenshot tool when visualModel is configured', async () => {
|
|
152
|
+
const configWithVision = makeFakeConfig({
|
|
153
|
+
agents: {
|
|
154
|
+
overrides: {
|
|
155
|
+
browser_agent: {
|
|
156
|
+
enabled: true,
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
browser: {
|
|
160
|
+
headless: false,
|
|
161
|
+
visualModel: 'gemini-2.5-flash-preview',
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
const { definition } = await createBrowserAgentDefinition(configWithVision, mockMessageBus);
|
|
166
|
+
// 5 MCP tools + 1 type_text + 1 analyze_screenshot
|
|
167
|
+
expect(definition.toolConfig?.tools).toHaveLength(7);
|
|
168
|
+
const toolNames = definition.toolConfig?.tools
|
|
169
|
+
?.filter((t) => typeof t === 'object' && 'name' in t)
|
|
170
|
+
.map((t) => t.name) ?? [];
|
|
171
|
+
expect(toolNames).toContain('analyze_screenshot');
|
|
172
|
+
});
|
|
173
|
+
it('should include all MCP navigation tools (new_page, navigate_page) in definition', async () => {
|
|
174
|
+
mockBrowserManager.getDiscoveredTools.mockResolvedValue([
|
|
175
|
+
{ name: 'take_snapshot', description: 'Take snapshot' },
|
|
176
|
+
{ name: 'click', description: 'Click element' },
|
|
177
|
+
{ name: 'fill', description: 'Fill form field' },
|
|
178
|
+
{ name: 'navigate_page', description: 'Navigate to URL' },
|
|
179
|
+
{ name: 'new_page', description: 'Open a new page/tab' },
|
|
180
|
+
{ name: 'close_page', description: 'Close page' },
|
|
181
|
+
{ name: 'select_page', description: 'Select page' },
|
|
182
|
+
{ name: 'press_key', description: 'Press key' },
|
|
183
|
+
{ name: 'hover', description: 'Hover element' },
|
|
184
|
+
]);
|
|
185
|
+
const { definition } = await createBrowserAgentDefinition(mockConfig, mockMessageBus);
|
|
186
|
+
const toolNames = definition.toolConfig?.tools
|
|
187
|
+
?.filter((t) => typeof t === 'object' && 'name' in t)
|
|
188
|
+
.map((t) => t.name) ?? [];
|
|
189
|
+
// All MCP tools must be present
|
|
190
|
+
expect(toolNames).toContain('new_page');
|
|
191
|
+
expect(toolNames).toContain('navigate_page');
|
|
192
|
+
expect(toolNames).toContain('close_page');
|
|
193
|
+
expect(toolNames).toContain('select_page');
|
|
194
|
+
expect(toolNames).toContain('click');
|
|
195
|
+
expect(toolNames).toContain('take_snapshot');
|
|
196
|
+
expect(toolNames).toContain('press_key');
|
|
197
|
+
// Custom composite tool must also be present
|
|
198
|
+
expect(toolNames).toContain('type_text');
|
|
199
|
+
// Total: 9 MCP + 1 type_text (no analyze_screenshot without visualModel)
|
|
200
|
+
expect(definition.toolConfig?.tools).toHaveLength(10);
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
describe('cleanupBrowserAgent', () => {
|
|
204
|
+
it('should call close on browser manager', async () => {
|
|
205
|
+
await cleanupBrowserAgent(mockBrowserManager);
|
|
206
|
+
expect(mockBrowserManager.close).toHaveBeenCalled();
|
|
207
|
+
});
|
|
208
|
+
it('should handle errors during cleanup gracefully', async () => {
|
|
209
|
+
const errorManager = {
|
|
210
|
+
close: vi.fn().mockRejectedValue(new Error('Close failed')),
|
|
211
|
+
};
|
|
212
|
+
// Should not throw
|
|
213
|
+
await expect(cleanupBrowserAgent(errorManager)).resolves.toBeUndefined();
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
describe('buildBrowserSystemPrompt', () => {
|
|
218
|
+
it('should include visual section when vision is enabled', () => {
|
|
219
|
+
const prompt = buildBrowserSystemPrompt(true);
|
|
220
|
+
expect(prompt).toContain('VISUAL IDENTIFICATION');
|
|
221
|
+
expect(prompt).toContain('analyze_screenshot');
|
|
222
|
+
expect(prompt).toContain('click_at');
|
|
223
|
+
});
|
|
224
|
+
it('should exclude visual section when vision is disabled', () => {
|
|
225
|
+
const prompt = buildBrowserSystemPrompt(false);
|
|
226
|
+
expect(prompt).not.toContain('VISUAL IDENTIFICATION');
|
|
227
|
+
expect(prompt).not.toContain('analyze_screenshot');
|
|
228
|
+
});
|
|
229
|
+
it('should always include core sections regardless of vision', () => {
|
|
230
|
+
for (const visionEnabled of [true, false]) {
|
|
231
|
+
const prompt = buildBrowserSystemPrompt(visionEnabled);
|
|
232
|
+
expect(prompt).toContain('PARALLEL TOOL CALLS');
|
|
233
|
+
expect(prompt).toContain('OVERLAY/POPUP HANDLING');
|
|
234
|
+
expect(prompt).toContain('COMPLEX WEB APPS');
|
|
235
|
+
expect(prompt).toContain('TERMINAL FAILURES');
|
|
236
|
+
expect(prompt).toContain('complete_task');
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
//# sourceMappingURL=browserAgentFactory.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserAgentFactory.test.js","sourceRoot":"","sources":["../../../../src/agents/browser/browserAgentFactory.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { Config } from '../../config/config.js';
|
|
7
|
+
import { BaseToolInvocation, type ToolResult, type ToolLiveOutput } from '../../tools/tools.js';
|
|
8
|
+
import { type AgentInputs } from '../types.js';
|
|
9
|
+
import type { MessageBus } from '../../confirmation-bus/message-bus.js';
|
|
10
|
+
/**
|
|
11
|
+
* Browser agent invocation with async tool setup.
|
|
12
|
+
*
|
|
13
|
+
* This invocation handles the browser agent's special requirements:
|
|
14
|
+
* - MCP connection and tool wrapping at invocation time
|
|
15
|
+
* - Browser cleanup after execution
|
|
16
|
+
*/
|
|
17
|
+
export declare class BrowserAgentInvocation extends BaseToolInvocation<AgentInputs, ToolResult> {
|
|
18
|
+
private readonly config;
|
|
19
|
+
constructor(config: Config, params: AgentInputs, messageBus: MessageBus, _toolName?: string, _toolDisplayName?: string);
|
|
20
|
+
/**
|
|
21
|
+
* Returns a concise, human-readable description of the invocation.
|
|
22
|
+
*/
|
|
23
|
+
getDescription(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Executes the browser agent.
|
|
26
|
+
*
|
|
27
|
+
* This method:
|
|
28
|
+
* 1. Creates browser manager and MCP connection
|
|
29
|
+
* 2. Wraps MCP tools for the isolated registry
|
|
30
|
+
* 3. Runs the agent via LocalAgentExecutor
|
|
31
|
+
* 4. Cleans up browser resources
|
|
32
|
+
*/
|
|
33
|
+
execute(signal: AbortSignal, updateOutput?: (output: ToolLiveOutput) => void): Promise<ToolResult>;
|
|
34
|
+
}
|