@browserbasehq/orca 3.1.0-patch.0 → 3.1.0-patch.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/cjs/cli.js +183 -0
- package/dist/cjs/cli.js.map +7 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +24956 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/lib/inference.d.ts +65 -0
- package/dist/cjs/lib/inferenceLogUtils.d.ts +12 -0
- package/dist/cjs/lib/logger.d.ts +69 -0
- package/dist/cjs/lib/modelUtils.d.ts +11 -0
- package/dist/cjs/lib/prompt.d.ts +14 -0
- package/dist/cjs/lib/utils.d.ts +68 -0
- package/dist/cjs/lib/v3/agent/AgentClient.d.ts +19 -0
- package/dist/cjs/lib/v3/agent/AgentProvider.d.ts +20 -0
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +57 -0
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.d.ts +74 -0
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.d.ts +71 -0
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +69 -0
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/act.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +5 -0
- package/dist/cjs/lib/v3/agent/tools/click.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/clickAndHold.d.ts +14 -0
- package/dist/cjs/lib/v3/agent/tools/dragAndDrop.d.ts +7 -0
- package/dist/cjs/lib/v3/agent/tools/extract.d.ts +20 -0
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/goto.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/index.d.ts +92 -0
- package/dist/cjs/lib/v3/agent/tools/keys.d.ts +24 -0
- package/dist/cjs/lib/v3/agent/tools/navback.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/scroll.d.ts +19 -0
- package/dist/cjs/lib/v3/agent/tools/search.d.ts +15 -0
- package/dist/cjs/lib/v3/agent/tools/think.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/type.d.ts +7 -0
- package/dist/cjs/lib/v3/agent/tools/wait.d.ts +5 -0
- package/dist/cjs/lib/v3/agent/utils/actionMapping.d.ts +3 -0
- package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.d.ts +13 -0
- package/dist/cjs/lib/v3/agent/utils/cuaKeyMapping.d.ts +10 -0
- package/dist/cjs/lib/v3/agent/utils/googleCustomToolHandler.d.ts +25 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.d.ts +22 -0
- package/dist/cjs/lib/v3/agent/utils/imageCompression.d.ts +53 -0
- package/dist/cjs/lib/v3/agent/utils/messageProcessing.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/utils/screenshotHandler.d.ts +10 -0
- package/dist/cjs/lib/v3/agent/utils/validateExperimentalFeatures.d.ts +26 -0
- package/dist/cjs/lib/v3/agent/utils/xpath.d.ts +11 -0
- package/dist/cjs/lib/v3/api.d.ts +86 -0
- package/dist/cjs/lib/v3/cache/ActCache.d.ts +23 -0
- package/dist/cjs/lib/v3/cache/AgentCache.d.ts +109 -0
- package/dist/cjs/lib/v3/cache/CacheStorage.d.ts +17 -0
- package/dist/cjs/lib/v3/cache/serverAgentCache.d.ts +7 -0
- package/dist/cjs/lib/v3/cache/utils.d.ts +15 -0
- package/dist/cjs/lib/v3/cli.d.ts +2 -0
- package/dist/cjs/lib/v3/dom/a11yScripts/index.d.ts +11 -0
- package/dist/cjs/lib/v3/dom/build/a11yScripts.generated.d.ts +16 -0
- package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.d.ts +52 -0
- package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/build/rerender-index.d.ts +0 -0
- package/dist/cjs/lib/v3/dom/build/rerender-index.js +1 -0
- package/dist/cjs/lib/v3/dom/build/screenshotScripts.generated.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/build/scriptV3Content.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/build/v3-index.d.ts +0 -0
- package/dist/cjs/lib/v3/dom/build/v3-index.js +1 -0
- package/dist/cjs/lib/v3/dom/genA11yScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genDomScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genLocatorScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genScreenshotScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/index.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/counts.d.ts +15 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/index.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/scripts.d.ts +37 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/selectors.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/waitForSelector.d.ts +19 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathParser.d.ts +76 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.d.ts +9 -0
- package/dist/cjs/lib/v3/dom/piercer.entry.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/piercer.runtime.d.ts +23 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.entry.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.runtime.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/index.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/resolveMaskRect.d.ts +8 -0
- package/dist/cjs/lib/v3/external_clients/aisdk.d.ts +11 -0
- package/dist/cjs/lib/v3/external_clients/customOpenAI.d.ts +18 -0
- package/dist/cjs/lib/v3/flowLogger.d.ts +139 -0
- package/dist/cjs/lib/v3/handlers/actHandler.d.ts +21 -0
- package/dist/cjs/lib/v3/handlers/extractHandler.d.ts +31 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +24 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/timeoutGuard.d.ts +2 -0
- package/dist/cjs/lib/v3/handlers/observeHandler.d.ts +17 -0
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +32 -0
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +33 -0
- package/dist/cjs/lib/v3/index.d.ts +18 -0
- package/dist/cjs/lib/v3/launch/browserbase.d.ts +7 -0
- package/dist/cjs/lib/v3/launch/local.d.ts +15 -0
- package/dist/cjs/lib/v3/llm/AnthropicClient.d.ts +16 -0
- package/dist/cjs/lib/v3/llm/CerebrasClient.d.ts +17 -0
- package/dist/cjs/lib/v3/llm/GoogleClient.d.ts +19 -0
- package/dist/cjs/lib/v3/llm/GroqClient.d.ts +17 -0
- package/dist/cjs/lib/v3/llm/LLMClient.d.ts +121 -0
- package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +13 -0
- package/dist/cjs/lib/v3/llm/OpenAIClient.d.ts +15 -0
- package/dist/cjs/lib/v3/llm/aisdk.d.ts +15 -0
- package/dist/cjs/lib/v3/logger.d.ts +9 -0
- package/dist/cjs/lib/v3/mcp/connection.d.ts +11 -0
- package/dist/cjs/lib/v3/mcp/utils.d.ts +3 -0
- package/dist/cjs/lib/v3/shutdown/cleanupLocal.d.ts +14 -0
- package/dist/cjs/lib/v3/shutdown/supervisor.d.ts +11 -0
- package/dist/cjs/lib/v3/shutdown/supervisorClient.d.ts +15 -0
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js +113 -0
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js +102 -0
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +374 -0
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js +354 -0
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js +247 -0
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js +105 -0
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js +126 -0
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js +44 -0
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/click-count.spec.js +147 -0
- package/dist/cjs/lib/v3/tests/click-count.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js +54 -0
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +176 -0
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js +53 -0
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/downloads.spec.js +80 -0
- package/dist/cjs/lib/v3/tests/downloads.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js +53 -0
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js +493 -0
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.child.js +92 -0
- package/dist/cjs/lib/v3/tests/keep-alive.child.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js +568 -0
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js +15 -0
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keyboard.spec.js +296 -0
- package/dist/cjs/lib/v3/tests/keyboard.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js +159 -0
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +191 -0
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js +108 -0
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-count.spec.js +71 -0
- package/dist/cjs/lib/v3/tests/locator-count.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js +118 -0
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +136 -0
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js +157 -0
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +242 -0
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js +547 -0
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js +269 -0
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/nested-div.spec.js +23 -0
- package/dist/cjs/lib/v3/tests/nested-div.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +90 -0
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-console.spec.js +56 -0
- package/dist/cjs/lib/v3/tests/page-console.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js +418 -0
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js +35 -0
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-hover.spec.js +167 -0
- package/dist/cjs/lib/v3/tests/page-hover.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js +295 -0
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js +182 -0
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js +46 -0
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js +98 -0
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js +148 -0
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js +156 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js +156 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/testUtils.js +54 -0
- package/dist/cjs/lib/v3/tests/testUtils.js.map +7 -0
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js +100 -0
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/timeouts.spec.js +32 -0
- package/dist/cjs/lib/v3/tests/timeouts.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js +65 -0
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.config.js +36 -0
- package/dist/cjs/lib/v3/tests/v3.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js +67 -0
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js +61 -0
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js +593 -0
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js +97 -0
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js +77 -0
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js.map +7 -0
- package/dist/cjs/lib/v3/timeoutConfig.d.ts +2 -0
- package/dist/cjs/lib/v3/types/private/agent.d.ts +6 -0
- package/dist/cjs/lib/v3/types/private/api.d.ts +11 -0
- package/dist/cjs/lib/v3/types/private/cache.d.ts +128 -0
- package/dist/cjs/lib/v3/types/private/evaluator.d.ts +40 -0
- package/dist/cjs/lib/v3/types/private/handlers.d.ts +38 -0
- package/dist/cjs/lib/v3/types/private/index.d.ts +7 -0
- package/dist/cjs/lib/v3/types/private/internal.d.ts +39 -0
- package/dist/cjs/lib/v3/types/private/locator.d.ts +9 -0
- package/dist/cjs/lib/v3/types/private/network.d.ts +34 -0
- package/dist/cjs/lib/v3/types/private/shutdown.d.ts +19 -0
- package/dist/cjs/lib/v3/types/private/shutdownErrors.d.ts +12 -0
- package/dist/cjs/lib/v3/types/private/snapshot.d.ts +117 -0
- package/dist/cjs/lib/v3/types/public/agent.d.ts +595 -0
- package/dist/cjs/lib/v3/types/public/api.d.ts +1211 -0
- package/dist/cjs/lib/v3/types/public/apiErrors.d.ts +18 -0
- package/dist/cjs/lib/v3/types/public/index.d.ts +12 -0
- package/dist/cjs/lib/v3/types/public/locator.d.ts +9 -0
- package/dist/cjs/lib/v3/types/public/logs.d.ts +23 -0
- package/dist/cjs/lib/v3/types/public/methods.d.ts +56 -0
- package/dist/cjs/lib/v3/types/public/metrics.d.ts +27 -0
- package/dist/cjs/lib/v3/types/public/model.d.ts +65 -0
- package/dist/cjs/lib/v3/types/public/options.d.ts +70 -0
- package/dist/cjs/lib/v3/types/public/page.d.ts +18 -0
- package/dist/cjs/lib/v3/types/public/screenshotTypes.d.ts +25 -0
- package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +152 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.d.ts +15 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/activeElement.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.d.ts +77 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.d.ts +7 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/domTree.d.ts +46 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +24 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/index.d.ts +4 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/sessions.d.ts +16 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.d.ts +28 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/xpathUtils.d.ts +26 -0
- package/dist/cjs/lib/v3/understudy/a11yInvocation.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/cdp.d.ts +69 -0
- package/dist/cjs/lib/v3/understudy/consoleMessage.d.ts +22 -0
- package/dist/cjs/lib/v3/understudy/context.d.ts +132 -0
- package/dist/cjs/lib/v3/understudy/deepLocator.d.ts +87 -0
- package/dist/cjs/lib/v3/understudy/executionContextRegistry.d.ts +15 -0
- package/dist/cjs/lib/v3/understudy/fileUploadUtils.d.ts +13 -0
- package/dist/cjs/lib/v3/understudy/frame.d.ts +69 -0
- package/dist/cjs/lib/v3/understudy/frameLocator.d.ts +50 -0
- package/dist/cjs/lib/v3/understudy/frameRegistry.d.ts +101 -0
- package/dist/cjs/lib/v3/understudy/initScripts.d.ts +2 -0
- package/dist/cjs/lib/v3/understudy/lifecycleWatcher.d.ts +64 -0
- package/dist/cjs/lib/v3/understudy/locator.d.ts +194 -0
- package/dist/cjs/lib/v3/understudy/locatorInvocation.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/navigationResponseTracker.d.ts +84 -0
- package/dist/cjs/lib/v3/understudy/networkManager.d.ts +53 -0
- package/dist/cjs/lib/v3/understudy/page.d.ts +354 -0
- package/dist/cjs/lib/v3/understudy/piercer.d.ts +4 -0
- package/dist/cjs/lib/v3/understudy/response.d.ts +137 -0
- package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +16 -0
- package/dist/cjs/lib/v3/understudy/selectorResolver.d.ts +38 -0
- package/dist/cjs/lib/v3/v3.d.ts +191 -0
- package/dist/cjs/lib/v3/zodCompat.d.ts +12 -0
- package/dist/cjs/lib/v3Evaluator.d.ts +19 -0
- package/dist/cjs/lib/version.d.ts +5 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/tests/browserbase-session-accessors.test.js +101 -0
- package/dist/cjs/tests/browserbase-session-accessors.test.js.map +7 -0
- package/dist/cjs/tests/cache-llm-resolution.test.js +187 -0
- package/dist/cjs/tests/cache-llm-resolution.test.js.map +7 -0
- package/dist/cjs/tests/helpers/mockCDPSession.js +50 -0
- package/dist/cjs/tests/helpers/mockCDPSession.js.map +7 -0
- package/dist/cjs/tests/llm-provider.test.js +57 -0
- package/dist/cjs/tests/llm-provider.test.js.map +7 -0
- package/dist/cjs/tests/model-deprecation.test.js +132 -0
- package/dist/cjs/tests/model-deprecation.test.js.map +7 -0
- package/dist/cjs/tests/page-snapshot.test.js +58 -0
- package/dist/cjs/tests/page-snapshot.test.js.map +7 -0
- package/dist/cjs/tests/public-api/export-surface.test.js +76 -0
- package/dist/cjs/tests/public-api/export-surface.test.js.map +7 -0
- package/dist/cjs/tests/public-api/llm-and-agents.test.js +150 -0
- package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +7 -0
- package/dist/cjs/tests/public-api/public-error-types.test.js +104 -0
- package/dist/cjs/tests/public-api/public-error-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/public-types.test.js +74 -0
- package/dist/cjs/tests/public-api/public-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/runtime-utils.test.js +53 -0
- package/dist/cjs/tests/public-api/runtime-utils.test.js.map +7 -0
- package/dist/cjs/tests/public-api/schema-utils.test.js +100 -0
- package/dist/cjs/tests/public-api/schema-utils.test.js.map +7 -0
- package/dist/cjs/tests/public-api/timeout-error-types.test.js +103 -0
- package/dist/cjs/tests/public-api/timeout-error-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/tool-type-export.test.js +47 -0
- package/dist/cjs/tests/public-api/tool-type-export.test.js.map +7 -0
- package/dist/cjs/tests/public-api/v3-core.test.js +104 -0
- package/dist/cjs/tests/public-api/v3-core.test.js.map +7 -0
- package/dist/cjs/tests/safety-confirmation.test.js +134 -0
- package/dist/cjs/tests/safety-confirmation.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js +370 -0
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js +294 -0
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js +403 -0
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-cbor.test.js +197 -0
- package/dist/cjs/tests/snapshot-cbor.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js +246 -0
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js +104 -0
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js +45 -0
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-frame-merge.test.js +388 -0
- package/dist/cjs/tests/snapshot-frame-merge.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js +106 -0
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-xpath-utils.test.js +74 -0
- package/dist/cjs/tests/snapshot-xpath-utils.test.js.map +7 -0
- package/dist/cjs/tests/timeout-handlers.test.js +864 -0
- package/dist/cjs/tests/timeout-handlers.test.js.map +7 -0
- package/dist/cjs/tests/xpath-parser.test.js +314 -0
- package/dist/cjs/tests/xpath-parser.test.js.map +7 -0
- package/dist/cjs/tests/xpath-resolver.test.js +70 -0
- package/dist/cjs/tests/xpath-resolver.test.js.map +7 -0
- package/dist/cjs/tests/zod-enum-compatibility.test.js +119 -0
- package/dist/cjs/tests/zod-enum-compatibility.test.js.map +7 -0
- package/dist/esm/lib/modelUtils.d.ts +0 -3
- package/dist/esm/lib/modelUtils.js +2 -7
- package/dist/esm/lib/modelUtils.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/act.d.ts +1 -2
- package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/extract.d.ts +1 -2
- package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/fillform.d.ts +1 -2
- package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/index.d.ts +2 -2
- package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/esm/lib/v3/cli.d.ts +2 -0
- package/dist/esm/lib/v3/cli.js +10 -0
- package/dist/esm/lib/v3/cli.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/rerender-index.d.ts +0 -0
- package/dist/esm/lib/v3/dom/build/rerender-index.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/v3-index.d.ts +0 -0
- package/dist/esm/lib/v3/dom/build/v3-index.js.map +1 -0
- package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/index.d.ts +1 -0
- package/dist/esm/lib/v3/index.js +1 -0
- package/dist/esm/lib/v3/index.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisor.d.ts +7 -5
- package/dist/esm/lib/v3/shutdown/supervisor.js +62 -52
- package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisorClient.js +48 -52
- package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
- package/dist/esm/lib/v3/tests/click-count.spec.js +47 -12
- package/dist/esm/lib/v3/tests/click-count.spec.js.map +2 -2
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +67 -21
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +2 -2
- package/dist/esm/lib/v3/tests/v3.playwright.config.js +3 -60
- package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +2 -2
- package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -13
- package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
- package/dist/esm/lib/v3/understudy/context.js +10 -1
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/locator.js +2 -2
- package/dist/esm/lib/v3/understudy/locator.js.map +1 -1
- package/dist/esm/lib/v3/understudy/page.js +2 -1
- package/dist/esm/lib/v3/understudy/page.js.map +1 -1
- package/dist/esm/lib/v3/v3.js +10 -13
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/dist/esm/tests/public-api/export-surface.test.js +1 -0
- package/dist/esm/tests/public-api/export-surface.test.js.map +2 -2
- package/package.json +13 -9
- package/dist/esm/lib/v3/tests/envReporter.js +0 -57
- package/dist/esm/lib/v3/tests/envReporter.js.map +0 -7
- package/dist/esm/tests/agent-execution-model.test.js +0 -139
- package/dist/esm/tests/agent-execution-model.test.js.map +0 -7
- package/dist/esm/tests/model-utils.test.js +0 -43
- package/dist/esm/tests/model-utils.test.js.map +0 -7
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from))
|
|
10
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
+
}
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var import_vitest = require("vitest");
|
|
24
|
+
var Stagehand = __toESM(require("@browserbasehq/stagehand"), 1);
|
|
25
|
+
(0, import_vitest.describe)("V3 Core public API types", () => {
|
|
26
|
+
(0, import_vitest.describe)("Stagehand", () => {
|
|
27
|
+
(0, import_vitest.it)("has correct public interface shape", () => {
|
|
28
|
+
(0, import_vitest.expectTypeOf)().toExtend();
|
|
29
|
+
});
|
|
30
|
+
(0, import_vitest.it)("act accepts Action as first parameter", () => {
|
|
31
|
+
const mockAction = {};
|
|
32
|
+
(0, import_vitest.expectTypeOf)().toBeCallableWith(
|
|
33
|
+
mockAction,
|
|
34
|
+
{}
|
|
35
|
+
);
|
|
36
|
+
});
|
|
37
|
+
(0, import_vitest.it)("extract accepts instruction and schema", () => {
|
|
38
|
+
const mockSchema = {};
|
|
39
|
+
(0, import_vitest.expectTypeOf)().toBeCallableWith(
|
|
40
|
+
"instruction",
|
|
41
|
+
mockSchema,
|
|
42
|
+
{}
|
|
43
|
+
);
|
|
44
|
+
});
|
|
45
|
+
(0, import_vitest.it)("observe accepts instruction and options", () => {
|
|
46
|
+
(0, import_vitest.expectTypeOf)().toBeCallableWith(
|
|
47
|
+
"instruction",
|
|
48
|
+
{}
|
|
49
|
+
);
|
|
50
|
+
});
|
|
51
|
+
(0, import_vitest.it)("agent execute accepts page option", () => {
|
|
52
|
+
const mockPage = {};
|
|
53
|
+
(0, import_vitest.expectTypeOf)().toBeCallableWith({
|
|
54
|
+
instruction: "test",
|
|
55
|
+
page: mockPage
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
(0, import_vitest.describe)("StagehandMetrics", () => {
|
|
60
|
+
(0, import_vitest.it)("matches the published metrics shape", () => {
|
|
61
|
+
(0, import_vitest.expectTypeOf)().toEqualTypeOf();
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
(0, import_vitest.describe)("V3", () => {
|
|
65
|
+
(0, import_vitest.it)("is exported", () => {
|
|
66
|
+
(0, import_vitest.expect)(Stagehand.V3).toBeDefined();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
(0, import_vitest.describe)("V3Evaluator", () => {
|
|
70
|
+
(0, import_vitest.it)("is exported", () => {
|
|
71
|
+
(0, import_vitest.expect)(Stagehand.V3Evaluator).toBeDefined();
|
|
72
|
+
});
|
|
73
|
+
(0, import_vitest.it)("has ask method", () => {
|
|
74
|
+
(0, import_vitest.expectTypeOf)().toExtend();
|
|
75
|
+
});
|
|
76
|
+
(0, import_vitest.it)("has batchAsk method", () => {
|
|
77
|
+
(0, import_vitest.expectTypeOf)().toExtend();
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
(0, import_vitest.describe)("V3FunctionName", () => {
|
|
81
|
+
const expectedFunctionNames = [
|
|
82
|
+
"ACT",
|
|
83
|
+
"EXTRACT",
|
|
84
|
+
"OBSERVE",
|
|
85
|
+
"AGENT"
|
|
86
|
+
];
|
|
87
|
+
(0, import_vitest.it)("matches the known function name literals", () => {
|
|
88
|
+
(0, import_vitest.expectTypeOf)().toExtend();
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
(0, import_vitest.describe)("connectToMCPServer", () => {
|
|
92
|
+
(0, import_vitest.it)("has correct parameter types", () => {
|
|
93
|
+
(0, import_vitest.expectTypeOf)(
|
|
94
|
+
Stagehand.connectToMCPServer
|
|
95
|
+
).parameters.branded.toEqualTypeOf();
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
(0, import_vitest.describe)("LOG_LEVEL_NAMES", () => {
|
|
99
|
+
(0, import_vitest.it)("maps numeric levels to strings", () => {
|
|
100
|
+
(0, import_vitest.expectTypeOf)().toExtend();
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=v3-core.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../tests/public-api/v3-core.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { describe, expect, expectTypeOf, it } from \"vitest\";\nimport * as Stagehand from \"@browserbasehq/stagehand\";\n\ndescribe(\"V3 Core public API types\", () => {\n describe(\"Stagehand\", () => {\n type ExpectedShape = {\n init: () => Promise<void>;\n close: (opts?: { force?: boolean }) => Promise<void>;\n act: (\n input: string | Stagehand.Action,\n options?: Stagehand.ActOptions,\n ) => Promise<Stagehand.ActResult>;\n extract: (...args: unknown[]) => Promise<unknown>;\n observe: (...args: unknown[]) => Promise<Stagehand.Action[]>;\n agent: (config?: Stagehand.AgentConfig) => {\n execute: (\n instructionOrOptions: string | Stagehand.AgentExecuteOptions,\n ) => Promise<Stagehand.AgentResult>;\n };\n connectURL: () => string;\n context: unknown;\n metrics: Promise<Stagehand.StagehandMetrics>;\n history: Promise<ReadonlyArray<Stagehand.HistoryEntry>>;\n llmClient: Stagehand.LLMClient;\n browserbaseSessionID: string | undefined;\n browserbaseSessionURL: string | undefined;\n browserbaseDebugURL: string | undefined;\n experimental: boolean;\n logInferenceToFile: boolean;\n verbose: 0 | 1 | 2;\n logger: (logLine: Stagehand.LogLine) => void;\n isAgentReplayActive: () => boolean;\n recordAgentReplayStep: (step: unknown) => void;\n };\n\n type StagehandInstance = InstanceType<typeof Stagehand.Stagehand>;\n\n it(\"has correct public interface shape\", () => {\n expectTypeOf<StagehandInstance>().toExtend<ExpectedShape>();\n });\n\n it(\"act accepts Action as first parameter\", () => {\n const mockAction = {} as Stagehand.Action;\n expectTypeOf<StagehandInstance[\"act\"]>().toBeCallableWith(\n mockAction,\n {} as Stagehand.ActOptions,\n );\n });\n\n it(\"extract accepts instruction and schema\", () => {\n const mockSchema = {} as Stagehand.StagehandZodSchema;\n expectTypeOf<StagehandInstance[\"extract\"]>().toBeCallableWith(\n \"instruction\",\n mockSchema,\n {} as Stagehand.ExtractOptions,\n );\n });\n\n it(\"observe accepts instruction and options\", () => {\n expectTypeOf<StagehandInstance[\"observe\"]>().toBeCallableWith(\n \"instruction\",\n {} as Stagehand.ObserveOptions,\n );\n });\n\n it(\"agent execute accepts page option\", () => {\n type AgentReturn = ReturnType<StagehandInstance[\"agent\"]>;\n const mockPage = {} as Stagehand.AnyPage;\n expectTypeOf<AgentReturn[\"execute\"]>().toBeCallableWith({\n instruction: \"test\",\n page: mockPage,\n } satisfies Stagehand.AgentExecuteOptions);\n });\n });\n\n describe(\"StagehandMetrics\", () => {\n type ExpectedStagehandMetrics = {\n actPromptTokens: number;\n actCompletionTokens: number;\n actReasoningTokens: number;\n actCachedInputTokens: number;\n actInferenceTimeMs: number;\n extractPromptTokens: number;\n extractCompletionTokens: number;\n extractReasoningTokens: number;\n extractCachedInputTokens: number;\n extractInferenceTimeMs: number;\n observePromptTokens: number;\n observeCompletionTokens: number;\n observeReasoningTokens: number;\n observeCachedInputTokens: number;\n observeInferenceTimeMs: number;\n agentPromptTokens: number;\n agentCompletionTokens: number;\n agentReasoningTokens: number;\n agentCachedInputTokens: number;\n agentInferenceTimeMs: number;\n totalPromptTokens: number;\n totalCompletionTokens: number;\n totalReasoningTokens: number;\n totalCachedInputTokens: number;\n totalInferenceTimeMs: number;\n };\n\n it(\"matches the published metrics shape\", () => {\n expectTypeOf<Stagehand.StagehandMetrics>().toEqualTypeOf<ExpectedStagehandMetrics>();\n });\n });\n\n describe(\"V3\", () => {\n // V3 is the same class as Stagehand, just re-exported with a different name.\n // The public interface shape is already tested in the \"Stagehand\" test above.\n it(\"is exported\", () => {\n expect(Stagehand.V3).toBeDefined();\n });\n });\n\n describe(\"V3Evaluator\", () => {\n type V3EvaluatorInstance = InstanceType<typeof Stagehand.V3Evaluator>;\n\n it(\"is exported\", () => {\n expect(Stagehand.V3Evaluator).toBeDefined();\n });\n\n it(\"has ask method\", () => {\n expectTypeOf<V3EvaluatorInstance[\"ask\"]>().toExtend<\n (options: unknown) => Promise<unknown>\n >();\n });\n\n it(\"has batchAsk method\", () => {\n expectTypeOf<V3EvaluatorInstance[\"batchAsk\"]>().toExtend<\n (options: unknown) => Promise<unknown[]>\n >();\n });\n });\n\n describe(\"V3FunctionName\", () => {\n const expectedFunctionNames = [\n \"ACT\",\n \"EXTRACT\",\n \"OBSERVE\",\n \"AGENT\",\n ] as const;\n\n it(\"matches the known function name literals\", () => {\n expectTypeOf<Stagehand.V3FunctionName>().toExtend<\n (typeof expectedFunctionNames)[number]\n >();\n void expectedFunctionNames; // Mark as used to satisfy ESLint\n });\n });\n\n describe(\"connectToMCPServer\", () => {\n type ExpectedServerConfig =\n | string\n | URL\n | { command: string; args?: string[]; env?: Record<string, string> }\n | { serverUrl: string | URL; clientOptions?: unknown };\n\n it(\"has correct parameter types\", () => {\n expectTypeOf(\n Stagehand.connectToMCPServer,\n ).parameters.branded.toEqualTypeOf<[ExpectedServerConfig]>();\n });\n });\n\n describe(\"LOG_LEVEL_NAMES\", () => {\n type ExpectedLOG_LEVEL_NAMES = Record<Stagehand.LogLevel, string>;\n\n it(\"maps numeric levels to strings\", () => {\n expectTypeOf<\n typeof Stagehand.LOG_LEVEL_NAMES\n >().toExtend<ExpectedLOG_LEVEL_NAMES>();\n });\n });\n});\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,oBAAmD;AACnD,gBAA2B;AAAA,IAE3B,wBAAS,4BAA4B,MAAM;AACzC,8BAAS,aAAa,MAAM;AAiC1B,0BAAG,sCAAsC,MAAM;AAC7C,sCAAgC,EAAE,SAAwB;AAAA,IAC5D,CAAC;AAED,0BAAG,yCAAyC,MAAM;AAChD,YAAM,aAAa,CAAC;AACpB,sCAAuC,EAAE;AAAA,QACvC;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,0BAAG,0CAA0C,MAAM;AACjD,YAAM,aAAa,CAAC;AACpB,sCAA2C,EAAE;AAAA,QAC3C;AAAA,QACA;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,0BAAG,2CAA2C,MAAM;AAClD,sCAA2C,EAAE;AAAA,QAC3C;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,0BAAG,qCAAqC,MAAM;AAE5C,YAAM,WAAW,CAAC;AAClB,sCAAqC,EAAE,iBAAiB;AAAA,QACtD,aAAa;AAAA,QACb,MAAM;AAAA,MACR,CAAyC;AAAA,IAC3C,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,oBAAoB,MAAM;AA6BjC,0BAAG,uCAAuC,MAAM;AAC9C,sCAAyC,EAAE,cAAwC;AAAA,IACrF,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,MAAM,MAAM;AAGnB,0BAAG,eAAe,MAAM;AACtB,gCAAO,UAAU,EAAE,EAAE,YAAY;AAAA,IACnC,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,eAAe,MAAM;AAG5B,0BAAG,eAAe,MAAM;AACtB,gCAAO,UAAU,WAAW,EAAE,YAAY;AAAA,IAC5C,CAAC;AAED,0BAAG,kBAAkB,MAAM;AACzB,sCAAyC,EAAE,SAEzC;AAAA,IACJ,CAAC;AAED,0BAAG,uBAAuB,MAAM;AAC9B,sCAA8C,EAAE,SAE9C;AAAA,IACJ,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,kBAAkB,MAAM;AAC/B,UAAM,wBAAwB;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,0BAAG,4CAA4C,MAAM;AACnD,sCAAuC,EAAE,SAEvC;AAAA,IAEJ,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,sBAAsB,MAAM;AAOnC,0BAAG,+BAA+B,MAAM;AACtC;AAAA,QACE,UAAU;AAAA,MACZ,EAAE,WAAW,QAAQ,cAAsC;AAAA,IAC7D,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,mBAAmB,MAAM;AAGhC,0BAAG,kCAAkC,MAAM;AACzC,sCAEE,EAAE,SAAkC;AAAA,IACxC,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
var import_vitest = require("vitest");
|
|
2
|
+
var import_OpenAICUAClient = require("../lib/v3/agent/OpenAICUAClient.js");
|
|
3
|
+
var import_GoogleCUAClient = require("../lib/v3/agent/GoogleCUAClient.js");
|
|
4
|
+
const openAISafetyInvoker = import_OpenAICUAClient.OpenAICUAClient.prototype.handleSafetyConfirmation;
|
|
5
|
+
const googleSafetyInvoker = import_GoogleCUAClient.GoogleCUAClient.prototype.handleSafetyConfirmation;
|
|
6
|
+
function createOpenAIClient() {
|
|
7
|
+
return new import_OpenAICUAClient.OpenAICUAClient(
|
|
8
|
+
"openai",
|
|
9
|
+
"openai/computer-use-preview",
|
|
10
|
+
"test instructions",
|
|
11
|
+
{ apiKey: "test" }
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
function createGoogleClient() {
|
|
15
|
+
return new import_GoogleCUAClient.GoogleCUAClient(
|
|
16
|
+
"google",
|
|
17
|
+
"google/gemini-2.5-computer-use-preview-10-2025",
|
|
18
|
+
"test instructions",
|
|
19
|
+
{ apiKey: "test" }
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
(0, import_vitest.describe)("Safety Confirmation Handler", () => {
|
|
23
|
+
(0, import_vitest.describe)("OpenAI-style (pending_safety_checks)", () => {
|
|
24
|
+
const mockChecks = [
|
|
25
|
+
{
|
|
26
|
+
id: "check-1",
|
|
27
|
+
code: "malicious_instructions",
|
|
28
|
+
message: "Potentially harmful action detected"
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
(0, import_vitest.it)("returns checks when handler acknowledges", async () => {
|
|
32
|
+
const client = createOpenAIClient();
|
|
33
|
+
const handler = import_vitest.vi.fn(async () => ({
|
|
34
|
+
acknowledged: true
|
|
35
|
+
}));
|
|
36
|
+
client.setSafetyConfirmationHandler(handler);
|
|
37
|
+
const logger = import_vitest.vi.fn();
|
|
38
|
+
const result = await openAISafetyInvoker.call(client, mockChecks, logger);
|
|
39
|
+
(0, import_vitest.expect)(handler).toHaveBeenCalledWith(mockChecks);
|
|
40
|
+
(0, import_vitest.expect)(result).toEqual(mockChecks);
|
|
41
|
+
});
|
|
42
|
+
(0, import_vitest.it)("returns undefined when handler rejects", async () => {
|
|
43
|
+
const client = createOpenAIClient();
|
|
44
|
+
const handler = import_vitest.vi.fn(async () => ({
|
|
45
|
+
acknowledged: false
|
|
46
|
+
}));
|
|
47
|
+
client.setSafetyConfirmationHandler(handler);
|
|
48
|
+
const logger = import_vitest.vi.fn();
|
|
49
|
+
const result = await openAISafetyInvoker.call(client, mockChecks, logger);
|
|
50
|
+
(0, import_vitest.expect)(handler).toHaveBeenCalledWith(mockChecks);
|
|
51
|
+
(0, import_vitest.expect)(result).toBeUndefined();
|
|
52
|
+
});
|
|
53
|
+
(0, import_vitest.it)("auto-acknowledges when no handler is set", async () => {
|
|
54
|
+
const client = createOpenAIClient();
|
|
55
|
+
const logger = import_vitest.vi.fn();
|
|
56
|
+
const result = await openAISafetyInvoker.call(client, mockChecks, logger);
|
|
57
|
+
(0, import_vitest.expect)(result).toEqual(mockChecks);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
(0, import_vitest.describe)("Google-style (safety_decision)", () => {
|
|
61
|
+
const mockDecision = {
|
|
62
|
+
decision: "require_confirmation",
|
|
63
|
+
explanation: "Cookie consent dialog detected"
|
|
64
|
+
};
|
|
65
|
+
(0, import_vitest.it)("returns 'true' when handler acknowledges", async () => {
|
|
66
|
+
const client = createGoogleClient();
|
|
67
|
+
const handler = import_vitest.vi.fn(async () => ({
|
|
68
|
+
acknowledged: true
|
|
69
|
+
}));
|
|
70
|
+
client.setSafetyConfirmationHandler(handler);
|
|
71
|
+
const logger = import_vitest.vi.fn();
|
|
72
|
+
const result = await googleSafetyInvoker.call(
|
|
73
|
+
client,
|
|
74
|
+
mockDecision,
|
|
75
|
+
logger
|
|
76
|
+
);
|
|
77
|
+
(0, import_vitest.expect)(handler).toHaveBeenCalledWith([
|
|
78
|
+
{
|
|
79
|
+
id: "google-safety-decision",
|
|
80
|
+
code: "safety_decision",
|
|
81
|
+
message: JSON.stringify(mockDecision, null, 2)
|
|
82
|
+
}
|
|
83
|
+
]);
|
|
84
|
+
(0, import_vitest.expect)(result).toBe("true");
|
|
85
|
+
});
|
|
86
|
+
(0, import_vitest.it)("returns undefined when handler rejects", async () => {
|
|
87
|
+
const client = createGoogleClient();
|
|
88
|
+
const handler = import_vitest.vi.fn(async () => ({
|
|
89
|
+
acknowledged: false
|
|
90
|
+
}));
|
|
91
|
+
client.setSafetyConfirmationHandler(handler);
|
|
92
|
+
const logger = import_vitest.vi.fn();
|
|
93
|
+
const result = await googleSafetyInvoker.call(
|
|
94
|
+
client,
|
|
95
|
+
mockDecision,
|
|
96
|
+
logger
|
|
97
|
+
);
|
|
98
|
+
(0, import_vitest.expect)(handler).toHaveBeenCalled();
|
|
99
|
+
(0, import_vitest.expect)(result).toBeUndefined();
|
|
100
|
+
});
|
|
101
|
+
(0, import_vitest.it)("auto-acknowledges when no handler is set", async () => {
|
|
102
|
+
const client = createGoogleClient();
|
|
103
|
+
const logger = import_vitest.vi.fn();
|
|
104
|
+
const result = await googleSafetyInvoker.call(
|
|
105
|
+
client,
|
|
106
|
+
mockDecision,
|
|
107
|
+
logger
|
|
108
|
+
);
|
|
109
|
+
(0, import_vitest.expect)(result).toBe("true");
|
|
110
|
+
});
|
|
111
|
+
(0, import_vitest.it)("handles string safety decisions", async () => {
|
|
112
|
+
const client = createGoogleClient();
|
|
113
|
+
const handler = import_vitest.vi.fn(async () => ({
|
|
114
|
+
acknowledged: true
|
|
115
|
+
}));
|
|
116
|
+
client.setSafetyConfirmationHandler(handler);
|
|
117
|
+
const logger = import_vitest.vi.fn();
|
|
118
|
+
const result = await googleSafetyInvoker.call(
|
|
119
|
+
client,
|
|
120
|
+
"Simple string decision",
|
|
121
|
+
logger
|
|
122
|
+
);
|
|
123
|
+
(0, import_vitest.expect)(handler).toHaveBeenCalledWith([
|
|
124
|
+
{
|
|
125
|
+
id: "google-safety-decision",
|
|
126
|
+
code: "safety_decision",
|
|
127
|
+
message: "Simple string decision"
|
|
128
|
+
}
|
|
129
|
+
]);
|
|
130
|
+
(0, import_vitest.expect)(result).toBe("true");
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=safety-confirmation.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../tests/safety-confirmation.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { describe, it, expect, vi } from \"vitest\";\nimport { OpenAICUAClient } from \"../lib/v3/agent/OpenAICUAClient.js\";\nimport { GoogleCUAClient } from \"../lib/v3/agent/GoogleCUAClient.js\";\nimport type {\n SafetyCheck,\n SafetyConfirmationHandler,\n} from \"../lib/v3/types/public/agent.js\";\nimport type { LogLine } from \"../lib/v3/types/public/logs.js\";\n\ntype LoggerMock = (message: LogLine) => void;\n\nconst openAISafetyInvoker = (\n OpenAICUAClient.prototype as unknown as {\n handleSafetyConfirmation: (\n this: OpenAICUAClient,\n pendingSafetyChecks: SafetyCheck[],\n logger: LoggerMock,\n ) => Promise<SafetyCheck[] | undefined>;\n }\n).handleSafetyConfirmation;\n\nconst googleSafetyInvoker = (\n GoogleCUAClient.prototype as unknown as {\n handleSafetyConfirmation: (\n this: GoogleCUAClient,\n safetyDecision: unknown,\n logger: LoggerMock,\n ) => Promise<string | undefined>;\n }\n).handleSafetyConfirmation;\n\nfunction createOpenAIClient(): OpenAICUAClient {\n return new OpenAICUAClient(\n \"openai\",\n \"openai/computer-use-preview\",\n \"test instructions\",\n { apiKey: \"test\" },\n );\n}\n\nfunction createGoogleClient(): GoogleCUAClient {\n return new GoogleCUAClient(\n \"google\",\n \"google/gemini-2.5-computer-use-preview-10-2025\",\n \"test instructions\",\n { apiKey: \"test\" },\n );\n}\n\ndescribe(\"Safety Confirmation Handler\", () => {\n describe(\"OpenAI-style (pending_safety_checks)\", () => {\n const mockChecks: SafetyCheck[] = [\n {\n id: \"check-1\",\n code: \"malicious_instructions\",\n message: \"Potentially harmful action detected\",\n },\n ];\n\n it(\"returns checks when handler acknowledges\", async () => {\n const client = createOpenAIClient();\n const handler: SafetyConfirmationHandler = vi.fn(async () => ({\n acknowledged: true,\n }));\n client.setSafetyConfirmationHandler(handler);\n const logger = vi.fn<LoggerMock>();\n const result = await openAISafetyInvoker.call(client, mockChecks, logger);\n\n expect(handler).toHaveBeenCalledWith(mockChecks);\n expect(result).toEqual(mockChecks);\n });\n\n it(\"returns undefined when handler rejects\", async () => {\n const client = createOpenAIClient();\n const handler: SafetyConfirmationHandler = vi.fn(async () => ({\n acknowledged: false,\n }));\n client.setSafetyConfirmationHandler(handler);\n const logger = vi.fn<LoggerMock>();\n const result = await openAISafetyInvoker.call(client, mockChecks, logger);\n\n expect(handler).toHaveBeenCalledWith(mockChecks);\n expect(result).toBeUndefined();\n });\n\n it(\"auto-acknowledges when no handler is set\", async () => {\n const client = createOpenAIClient();\n const logger = vi.fn<LoggerMock>();\n const result = await openAISafetyInvoker.call(client, mockChecks, logger);\n expect(result).toEqual(mockChecks);\n });\n });\n\n describe(\"Google-style (safety_decision)\", () => {\n const mockDecision = {\n decision: \"require_confirmation\",\n explanation: \"Cookie consent dialog detected\",\n };\n\n it(\"returns 'true' when handler acknowledges\", async () => {\n const client = createGoogleClient();\n const handler: SafetyConfirmationHandler = vi.fn(async () => ({\n acknowledged: true,\n }));\n client.setSafetyConfirmationHandler(handler);\n const logger = vi.fn<LoggerMock>();\n const result = await googleSafetyInvoker.call(\n client,\n mockDecision,\n logger,\n );\n\n expect(handler).toHaveBeenCalledWith([\n {\n id: \"google-safety-decision\",\n code: \"safety_decision\",\n message: JSON.stringify(mockDecision, null, 2),\n },\n ]);\n expect(result).toBe(\"true\");\n });\n\n it(\"returns undefined when handler rejects\", async () => {\n const client = createGoogleClient();\n const handler: SafetyConfirmationHandler = vi.fn(async () => ({\n acknowledged: false,\n }));\n client.setSafetyConfirmationHandler(handler);\n const logger = vi.fn<LoggerMock>();\n const result = await googleSafetyInvoker.call(\n client,\n mockDecision,\n logger,\n );\n\n expect(handler).toHaveBeenCalled();\n expect(result).toBeUndefined();\n });\n\n it(\"auto-acknowledges when no handler is set\", async () => {\n const client = createGoogleClient();\n const logger = vi.fn<LoggerMock>();\n const result = await googleSafetyInvoker.call(\n client,\n mockDecision,\n logger,\n );\n expect(result).toBe(\"true\");\n });\n\n it(\"handles string safety decisions\", async () => {\n const client = createGoogleClient();\n const handler: SafetyConfirmationHandler = vi.fn(async () => ({\n acknowledged: true,\n }));\n client.setSafetyConfirmationHandler(handler);\n const logger = vi.fn<LoggerMock>();\n const result = await googleSafetyInvoker.call(\n client,\n \"Simple string decision\",\n logger,\n );\n\n expect(handler).toHaveBeenCalledWith([\n {\n id: \"google-safety-decision\",\n code: \"safety_decision\",\n message: \"Simple string decision\",\n },\n ]);\n expect(result).toBe(\"true\");\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,oBAAyC;AACzC,6BAAgC;AAChC,6BAAgC;AAShC,MAAM,sBACJ,uCAAgB,UAOhB;AAEF,MAAM,sBACJ,uCAAgB,UAOhB;AAEF,SAAS,qBAAsC;AAC7C,SAAO,IAAI;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,QAAQ,OAAO;AAAA,EACnB;AACF;AAEA,SAAS,qBAAsC;AAC7C,SAAO,IAAI;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,QAAQ,OAAO;AAAA,EACnB;AACF;AAAA,IAEA,wBAAS,+BAA+B,MAAM;AAC5C,8BAAS,wCAAwC,MAAM;AACrD,UAAM,aAA4B;AAAA,MAChC;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAEA,0BAAG,4CAA4C,YAAY;AACzD,YAAM,SAAS,mBAAmB;AAClC,YAAM,UAAqC,iBAAG,GAAG,aAAa;AAAA,QAC5D,cAAc;AAAA,MAChB,EAAE;AACF,aAAO,6BAA6B,OAAO;AAC3C,YAAM,SAAS,iBAAG,GAAe;AACjC,YAAM,SAAS,MAAM,oBAAoB,KAAK,QAAQ,YAAY,MAAM;AAExE,gCAAO,OAAO,EAAE,qBAAqB,UAAU;AAC/C,gCAAO,MAAM,EAAE,QAAQ,UAAU;AAAA,IACnC,CAAC;AAED,0BAAG,0CAA0C,YAAY;AACvD,YAAM,SAAS,mBAAmB;AAClC,YAAM,UAAqC,iBAAG,GAAG,aAAa;AAAA,QAC5D,cAAc;AAAA,MAChB,EAAE;AACF,aAAO,6BAA6B,OAAO;AAC3C,YAAM,SAAS,iBAAG,GAAe;AACjC,YAAM,SAAS,MAAM,oBAAoB,KAAK,QAAQ,YAAY,MAAM;AAExE,gCAAO,OAAO,EAAE,qBAAqB,UAAU;AAC/C,gCAAO,MAAM,EAAE,cAAc;AAAA,IAC/B,CAAC;AAED,0BAAG,4CAA4C,YAAY;AACzD,YAAM,SAAS,mBAAmB;AAClC,YAAM,SAAS,iBAAG,GAAe;AACjC,YAAM,SAAS,MAAM,oBAAoB,KAAK,QAAQ,YAAY,MAAM;AACxE,gCAAO,MAAM,EAAE,QAAQ,UAAU;AAAA,IACnC,CAAC;AAAA,EACH,CAAC;AAED,8BAAS,kCAAkC,MAAM;AAC/C,UAAM,eAAe;AAAA,MACnB,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAEA,0BAAG,4CAA4C,YAAY;AACzD,YAAM,SAAS,mBAAmB;AAClC,YAAM,UAAqC,iBAAG,GAAG,aAAa;AAAA,QAC5D,cAAc;AAAA,MAChB,EAAE;AACF,aAAO,6BAA6B,OAAO;AAC3C,YAAM,SAAS,iBAAG,GAAe;AACjC,YAAM,SAAS,MAAM,oBAAoB;AAAA,QACvC;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,gCAAO,OAAO,EAAE,qBAAqB;AAAA,QACnC;AAAA,UACE,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,SAAS,KAAK,UAAU,cAAc,MAAM,CAAC;AAAA,QAC/C;AAAA,MACF,CAAC;AACD,gCAAO,MAAM,EAAE,KAAK,MAAM;AAAA,IAC5B,CAAC;AAED,0BAAG,0CAA0C,YAAY;AACvD,YAAM,SAAS,mBAAmB;AAClC,YAAM,UAAqC,iBAAG,GAAG,aAAa;AAAA,QAC5D,cAAc;AAAA,MAChB,EAAE;AACF,aAAO,6BAA6B,OAAO;AAC3C,YAAM,SAAS,iBAAG,GAAe;AACjC,YAAM,SAAS,MAAM,oBAAoB;AAAA,QACvC;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,gCAAO,OAAO,EAAE,iBAAiB;AACjC,gCAAO,MAAM,EAAE,cAAc;AAAA,IAC/B,CAAC;AAED,0BAAG,4CAA4C,YAAY;AACzD,YAAM,SAAS,mBAAmB;AAClC,YAAM,SAAS,iBAAG,GAAe;AACjC,YAAM,SAAS,MAAM,oBAAoB;AAAA,QACvC;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,gCAAO,MAAM,EAAE,KAAK,MAAM;AAAA,IAC5B,CAAC;AAED,0BAAG,mCAAmC,YAAY;AAChD,YAAM,SAAS,mBAAmB;AAClC,YAAM,UAAqC,iBAAG,GAAG,aAAa;AAAA,QAC5D,cAAc;AAAA,MAChB,EAAE;AACF,aAAO,6BAA6B,OAAO;AAC3C,YAAM,SAAS,iBAAG,GAAe;AACjC,YAAM,SAAS,MAAM,oBAAoB;AAAA,QACvC;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,gCAAO,OAAO,EAAE,qBAAqB;AAAA,QACnC;AAAA,UACE,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,SAAS;AAAA,QACX;AAAA,MACF,CAAC;AACD,gCAAO,MAAM,EAAE,KAAK,MAAM;AAAA,IAC5B,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from))
|
|
10
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
+
}
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var import_vitest = require("vitest");
|
|
24
|
+
var import_a11yTree = require("../lib/v3/understudy/a11y/snapshot/a11yTree.js");
|
|
25
|
+
var focusSelectors = __toESM(require("../lib/v3/understudy/a11y/snapshot/focusSelectors.js"), 1);
|
|
26
|
+
var import_mockCDPSession = require("./helpers/mockCDPSession.js");
|
|
27
|
+
var import_executionContextRegistry = require("../lib/v3/understudy/executionContextRegistry.js");
|
|
28
|
+
var import_capture = require("../lib/v3/understudy/a11y/snapshot/capture.js");
|
|
29
|
+
var domTree = __toESM(require("../lib/v3/understudy/a11y/snapshot/domTree.js"), 1);
|
|
30
|
+
var a11yTree = __toESM(require("../lib/v3/understudy/a11y/snapshot/a11yTree.js"), 1);
|
|
31
|
+
var logger = __toESM(require("../lib/v3/logger.js"), 1);
|
|
32
|
+
const stringType = "string";
|
|
33
|
+
const baseAxNodes = () => [
|
|
34
|
+
{
|
|
35
|
+
nodeId: "1",
|
|
36
|
+
role: { type: stringType, value: "RootWebArea" },
|
|
37
|
+
backendDOMNodeId: 100,
|
|
38
|
+
childIds: ["2"],
|
|
39
|
+
ignored: false
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
nodeId: "2",
|
|
43
|
+
role: { type: stringType, value: "link" },
|
|
44
|
+
name: { type: stringType, value: "Docs" },
|
|
45
|
+
backendDOMNodeId: 101,
|
|
46
|
+
parentId: "1",
|
|
47
|
+
childIds: [],
|
|
48
|
+
properties: [
|
|
49
|
+
{
|
|
50
|
+
name: "url",
|
|
51
|
+
value: { type: stringType, value: "https://example.com" }
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
ignored: false
|
|
55
|
+
}
|
|
56
|
+
];
|
|
57
|
+
const baseHandlers = {
|
|
58
|
+
"Accessibility.enable": async () => ({}),
|
|
59
|
+
"Runtime.enable": async () => ({}),
|
|
60
|
+
"DOM.enable": async () => ({})
|
|
61
|
+
};
|
|
62
|
+
(0, import_vitest.describe)("a11yForFrame", () => {
|
|
63
|
+
(0, import_vitest.beforeEach)(() => {
|
|
64
|
+
import_vitest.vi.restoreAllMocks();
|
|
65
|
+
});
|
|
66
|
+
(0, import_vitest.it)("returns full outline and url map when no focus selector is provided", async () => {
|
|
67
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
68
|
+
...baseHandlers,
|
|
69
|
+
"Accessibility.getFullAXTree": async () => ({ nodes: baseAxNodes() })
|
|
70
|
+
});
|
|
71
|
+
const opts = {
|
|
72
|
+
focusSelector: void 0,
|
|
73
|
+
experimental: false,
|
|
74
|
+
tagNameMap: { "enc-100": "#document", "enc-101": "a" },
|
|
75
|
+
scrollableMap: {},
|
|
76
|
+
encode: (backend) => `enc-${backend}`
|
|
77
|
+
};
|
|
78
|
+
const result = await (0, import_a11yTree.a11yForFrame)(session, void 0, opts);
|
|
79
|
+
(0, import_vitest.expect)(result.scopeApplied).toBe(false);
|
|
80
|
+
(0, import_vitest.expect)(result.urlMap["enc-101"]).toBe("https://example.com");
|
|
81
|
+
(0, import_vitest.expect)(result.outline).toContain("Docs");
|
|
82
|
+
});
|
|
83
|
+
(0, import_vitest.it)("scopes the tree to the resolved focus selector target", async () => {
|
|
84
|
+
const nodes = baseAxNodes().map(
|
|
85
|
+
(n) => n.nodeId === "2" ? {
|
|
86
|
+
...n,
|
|
87
|
+
childIds: ["3"]
|
|
88
|
+
} : n
|
|
89
|
+
);
|
|
90
|
+
nodes.push({
|
|
91
|
+
nodeId: "3",
|
|
92
|
+
parentId: "2",
|
|
93
|
+
childIds: [],
|
|
94
|
+
role: { type: stringType, value: "StaticText" },
|
|
95
|
+
backendDOMNodeId: 102,
|
|
96
|
+
ignored: false
|
|
97
|
+
});
|
|
98
|
+
let scopedOnce = false;
|
|
99
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
100
|
+
...baseHandlers,
|
|
101
|
+
"Accessibility.getFullAXTree": async (params) => {
|
|
102
|
+
if (params?.frameId && !scopedOnce) {
|
|
103
|
+
scopedOnce = true;
|
|
104
|
+
throw new Error("does not belong to the target");
|
|
105
|
+
}
|
|
106
|
+
return { nodes };
|
|
107
|
+
},
|
|
108
|
+
"DOM.describeNode": async () => ({
|
|
109
|
+
node: { backendNodeId: 101 }
|
|
110
|
+
})
|
|
111
|
+
});
|
|
112
|
+
const resolveSpy = import_vitest.vi.spyOn(focusSelectors, "resolveObjectIdForXPath").mockResolvedValue("object-1");
|
|
113
|
+
const opts = {
|
|
114
|
+
focusSelector: "xpath=//a",
|
|
115
|
+
experimental: false,
|
|
116
|
+
tagNameMap: { "enc-101": "a" },
|
|
117
|
+
scrollableMap: {},
|
|
118
|
+
encode: (backend) => `enc-${backend}`
|
|
119
|
+
};
|
|
120
|
+
const result = await (0, import_a11yTree.a11yForFrame)(session, "frame-1", opts);
|
|
121
|
+
(0, import_vitest.expect)(result.scopeApplied).toBe(true);
|
|
122
|
+
(0, import_vitest.expect)(result.outline).not.toContain("RootWebArea");
|
|
123
|
+
(0, import_vitest.expect)(resolveSpy).toHaveBeenCalled();
|
|
124
|
+
resolveSpy.mockRestore();
|
|
125
|
+
});
|
|
126
|
+
(0, import_vitest.it)("falls back to full tree when resolveObjectId throws", async () => {
|
|
127
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
128
|
+
...baseHandlers,
|
|
129
|
+
"Accessibility.getFullAXTree": async () => ({ nodes: baseAxNodes() })
|
|
130
|
+
});
|
|
131
|
+
import_vitest.vi.spyOn(focusSelectors, "resolveObjectIdForCss").mockRejectedValue(
|
|
132
|
+
new Error("fail")
|
|
133
|
+
);
|
|
134
|
+
const opts = {
|
|
135
|
+
focusSelector: ".btn",
|
|
136
|
+
experimental: false,
|
|
137
|
+
tagNameMap: {},
|
|
138
|
+
scrollableMap: {},
|
|
139
|
+
encode: (backend) => `enc-${backend}`
|
|
140
|
+
};
|
|
141
|
+
const result = await (0, import_a11yTree.a11yForFrame)(session, "frame-1", opts);
|
|
142
|
+
(0, import_vitest.expect)(result.scopeApplied).toBe(false);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
(0, import_vitest.describe)("resolveObjectIdForXPath", () => {
|
|
146
|
+
(0, import_vitest.beforeEach)(() => {
|
|
147
|
+
import_vitest.vi.restoreAllMocks();
|
|
148
|
+
});
|
|
149
|
+
(0, import_vitest.it)("evaluates in the target frame's main world when available", async () => {
|
|
150
|
+
import_vitest.vi.spyOn(import_executionContextRegistry.executionContexts, "waitForMainWorld").mockResolvedValue(42);
|
|
151
|
+
import_vitest.vi.spyOn(import_executionContextRegistry.executionContexts, "getMainWorld").mockReturnValue(void 0);
|
|
152
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
153
|
+
"Runtime.evaluate": async (params) => {
|
|
154
|
+
(0, import_vitest.expect)(params?.contextId).toBe(42);
|
|
155
|
+
return { result: { objectId: "node-obj" } };
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
const objectId = await focusSelectors.resolveObjectIdForXPath(
|
|
159
|
+
session,
|
|
160
|
+
"//div",
|
|
161
|
+
"frame-1"
|
|
162
|
+
);
|
|
163
|
+
(0, import_vitest.expect)(objectId).toBe("node-obj");
|
|
164
|
+
});
|
|
165
|
+
(0, import_vitest.it)("returns null when evaluation throws or reports exception details", async () => {
|
|
166
|
+
import_vitest.vi.spyOn(import_executionContextRegistry.executionContexts, "waitForMainWorld").mockRejectedValue(
|
|
167
|
+
new Error("missing")
|
|
168
|
+
);
|
|
169
|
+
import_vitest.vi.spyOn(import_executionContextRegistry.executionContexts, "getMainWorld").mockReturnValue(void 0);
|
|
170
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
171
|
+
"Runtime.evaluate": async () => ({
|
|
172
|
+
result: {},
|
|
173
|
+
exceptionDetails: { exception: { description: "bad" } }
|
|
174
|
+
})
|
|
175
|
+
});
|
|
176
|
+
const objectId = await focusSelectors.resolveObjectIdForXPath(
|
|
177
|
+
session,
|
|
178
|
+
"//div",
|
|
179
|
+
"frame-2"
|
|
180
|
+
);
|
|
181
|
+
(0, import_vitest.expect)(objectId).toBeNull();
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
(0, import_vitest.describe)("resolveObjectIdForCss", () => {
|
|
185
|
+
(0, import_vitest.beforeEach)(() => {
|
|
186
|
+
import_vitest.vi.restoreAllMocks();
|
|
187
|
+
});
|
|
188
|
+
(0, import_vitest.it)("returns primary evaluation result when available", async () => {
|
|
189
|
+
import_vitest.vi.spyOn(import_executionContextRegistry.executionContexts, "waitForMainWorld").mockResolvedValue(7);
|
|
190
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
191
|
+
"Runtime.evaluate": async () => ({
|
|
192
|
+
result: { objectId: "primary-obj" }
|
|
193
|
+
})
|
|
194
|
+
});
|
|
195
|
+
const objectId = await focusSelectors.resolveObjectIdForCss(
|
|
196
|
+
session,
|
|
197
|
+
".btn",
|
|
198
|
+
"frame-1"
|
|
199
|
+
);
|
|
200
|
+
(0, import_vitest.expect)(objectId).toBe("primary-obj");
|
|
201
|
+
});
|
|
202
|
+
(0, import_vitest.it)("falls back to the pierce selector when the primary lookup fails", async () => {
|
|
203
|
+
let call = 0;
|
|
204
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
205
|
+
"Runtime.evaluate": async (params) => {
|
|
206
|
+
call++;
|
|
207
|
+
if (call === 1) {
|
|
208
|
+
(0, import_vitest.expect)(String(params?.expression)).toContain("resolveCssSelector");
|
|
209
|
+
return { result: {} };
|
|
210
|
+
}
|
|
211
|
+
(0, import_vitest.expect)(String(params?.expression)).toContain(
|
|
212
|
+
"resolveCssSelectorPierce"
|
|
213
|
+
);
|
|
214
|
+
return { result: { objectId: "css-obj" } };
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
const objectId = await focusSelectors.resolveObjectIdForCss(
|
|
218
|
+
session,
|
|
219
|
+
".btn",
|
|
220
|
+
void 0
|
|
221
|
+
);
|
|
222
|
+
(0, import_vitest.expect)(objectId).toBe("css-obj");
|
|
223
|
+
});
|
|
224
|
+
(0, import_vitest.it)("returns null when both primary and fallback evaluations throw", async () => {
|
|
225
|
+
import_vitest.vi.spyOn(import_executionContextRegistry.executionContexts, "waitForMainWorld").mockResolvedValue(11);
|
|
226
|
+
import_vitest.vi.spyOn(import_executionContextRegistry.executionContexts, "getMainWorld").mockReturnValue(void 0);
|
|
227
|
+
const session = new import_mockCDPSession.MockCDPSession({
|
|
228
|
+
"Runtime.evaluate": async () => ({
|
|
229
|
+
result: {},
|
|
230
|
+
exceptionDetails: { exception: { description: "fail" } }
|
|
231
|
+
})
|
|
232
|
+
});
|
|
233
|
+
const objectId = await focusSelectors.resolveObjectIdForCss(
|
|
234
|
+
session,
|
|
235
|
+
".missing",
|
|
236
|
+
"frame-1"
|
|
237
|
+
);
|
|
238
|
+
(0, import_vitest.expect)(objectId).toBeNull();
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
(0, import_vitest.describe)("tryScopedSnapshot", () => {
|
|
242
|
+
const ordinal = (frameId) => frameId === "frame-1" ? 0 : 1;
|
|
243
|
+
const context = {
|
|
244
|
+
rootId: "frame-1",
|
|
245
|
+
frames: ["frame-1", "frame-2"],
|
|
246
|
+
parentByFrame: /* @__PURE__ */ new Map([
|
|
247
|
+
["frame-1", null],
|
|
248
|
+
["frame-2", "frame-1"]
|
|
249
|
+
])
|
|
250
|
+
};
|
|
251
|
+
const makePage = (session, overrides) => ({
|
|
252
|
+
mainFrameId: () => "frame-1",
|
|
253
|
+
asProtocolFrameTree: () => ({
|
|
254
|
+
frame: { id: "frame-1" },
|
|
255
|
+
childFrames: [{ frame: { id: "frame-2" } }]
|
|
256
|
+
}),
|
|
257
|
+
listAllFrameIds: () => ["frame-1", "frame-2"],
|
|
258
|
+
getSessionForFrame: () => session,
|
|
259
|
+
getOrdinal: (fid) => ordinal(fid),
|
|
260
|
+
...overrides
|
|
261
|
+
});
|
|
262
|
+
(0, import_vitest.beforeEach)(() => {
|
|
263
|
+
import_vitest.vi.restoreAllMocks();
|
|
264
|
+
});
|
|
265
|
+
(0, import_vitest.it)("returns scoped snapshot when focus selector resolves via CSS hops", async () => {
|
|
266
|
+
const session = new import_mockCDPSession.MockCDPSession({});
|
|
267
|
+
const domMapsSpy = import_vitest.vi.spyOn(domTree, "domMapsForSession").mockResolvedValue({
|
|
268
|
+
tagNameMap: { "1-10": "div" },
|
|
269
|
+
xpathMap: { "1-10": "/div[1]" },
|
|
270
|
+
scrollableMap: {}
|
|
271
|
+
});
|
|
272
|
+
const a11ySpy = import_vitest.vi.spyOn(a11yTree, "a11yForFrame").mockResolvedValue({
|
|
273
|
+
outline: "[1-10] div",
|
|
274
|
+
urlMap: { "1-10": "https://example.com" },
|
|
275
|
+
scopeApplied: true
|
|
276
|
+
});
|
|
277
|
+
import_vitest.vi.spyOn(focusSelectors, "resolveCssFocusFrameAndTail").mockResolvedValue({
|
|
278
|
+
targetFrameId: "frame-2",
|
|
279
|
+
tailSelector: ".btn-inner",
|
|
280
|
+
absPrefix: "/html/body/iframe[1]"
|
|
281
|
+
});
|
|
282
|
+
const result = await (0, import_capture.tryScopedSnapshot)(
|
|
283
|
+
makePage(session),
|
|
284
|
+
{ focusSelector: ".btn" },
|
|
285
|
+
context,
|
|
286
|
+
true
|
|
287
|
+
);
|
|
288
|
+
(0, import_vitest.expect)(result).not.toBeNull();
|
|
289
|
+
(0, import_vitest.expect)(result?.combinedXpathMap["1-10"]).toBe(
|
|
290
|
+
"/html/body/iframe[1]/div[1]"
|
|
291
|
+
);
|
|
292
|
+
(0, import_vitest.expect)(domMapsSpy).toHaveBeenCalled();
|
|
293
|
+
(0, import_vitest.expect)(a11ySpy).toHaveBeenCalled();
|
|
294
|
+
});
|
|
295
|
+
(0, import_vitest.it)("returns null and logs fallback when scope is not applied", async () => {
|
|
296
|
+
const session = new import_mockCDPSession.MockCDPSession({});
|
|
297
|
+
import_vitest.vi.spyOn(domTree, "domMapsForSession").mockResolvedValue({
|
|
298
|
+
tagNameMap: { "1-10": "div" },
|
|
299
|
+
xpathMap: { "1-10": "/div[1]" },
|
|
300
|
+
scrollableMap: {}
|
|
301
|
+
});
|
|
302
|
+
import_vitest.vi.spyOn(a11yTree, "a11yForFrame").mockResolvedValue({
|
|
303
|
+
outline: "ignored",
|
|
304
|
+
urlMap: {},
|
|
305
|
+
scopeApplied: false
|
|
306
|
+
});
|
|
307
|
+
const loggerSpy = import_vitest.vi.spyOn(logger, "v3Logger").mockImplementation(() => {
|
|
308
|
+
});
|
|
309
|
+
const result = await (0, import_capture.tryScopedSnapshot)(
|
|
310
|
+
makePage(session),
|
|
311
|
+
{ focusSelector: ".btn" },
|
|
312
|
+
context,
|
|
313
|
+
false
|
|
314
|
+
);
|
|
315
|
+
(0, import_vitest.expect)(result).toBeNull();
|
|
316
|
+
(0, import_vitest.expect)(loggerSpy).toHaveBeenCalled();
|
|
317
|
+
});
|
|
318
|
+
(0, import_vitest.it)("returns null immediately when no focus selector is provided", async () => {
|
|
319
|
+
const result = await (0, import_capture.tryScopedSnapshot)(
|
|
320
|
+
makePage(new import_mockCDPSession.MockCDPSession({})),
|
|
321
|
+
{},
|
|
322
|
+
context,
|
|
323
|
+
true
|
|
324
|
+
);
|
|
325
|
+
(0, import_vitest.expect)(result).toBeNull();
|
|
326
|
+
});
|
|
327
|
+
(0, import_vitest.it)("supports XPath focus resolution branch", async () => {
|
|
328
|
+
const session = new import_mockCDPSession.MockCDPSession({});
|
|
329
|
+
import_vitest.vi.spyOn(domTree, "domMapsForSession").mockResolvedValue({
|
|
330
|
+
tagNameMap: { "1-10": "div" },
|
|
331
|
+
xpathMap: { "1-10": "/div[1]" },
|
|
332
|
+
scrollableMap: {}
|
|
333
|
+
});
|
|
334
|
+
import_vitest.vi.spyOn(a11yTree, "a11yForFrame").mockResolvedValue({
|
|
335
|
+
outline: "[1-10] div",
|
|
336
|
+
urlMap: {},
|
|
337
|
+
scopeApplied: true
|
|
338
|
+
});
|
|
339
|
+
import_vitest.vi.spyOn(focusSelectors, "resolveFocusFrameAndTail").mockResolvedValue({
|
|
340
|
+
targetFrameId: "frame-1",
|
|
341
|
+
tailXPath: "//div[1]",
|
|
342
|
+
absPrefix: ""
|
|
343
|
+
});
|
|
344
|
+
const result = await (0, import_capture.tryScopedSnapshot)(
|
|
345
|
+
makePage(session),
|
|
346
|
+
{ focusSelector: "xpath=//div" },
|
|
347
|
+
context,
|
|
348
|
+
true
|
|
349
|
+
);
|
|
350
|
+
(0, import_vitest.expect)(result).not.toBeNull();
|
|
351
|
+
(0, import_vitest.expect)(result?.combinedXpathMap["1-10"]).toBe("/div[1]");
|
|
352
|
+
});
|
|
353
|
+
(0, import_vitest.it)("logs and returns null when resolver throws", async () => {
|
|
354
|
+
const session = new import_mockCDPSession.MockCDPSession({});
|
|
355
|
+
import_vitest.vi.spyOn(focusSelectors, "resolveCssFocusFrameAndTail").mockRejectedValue(
|
|
356
|
+
new Error("bad selector")
|
|
357
|
+
);
|
|
358
|
+
const loggerSpy = import_vitest.vi.spyOn(logger, "v3Logger").mockImplementation(() => {
|
|
359
|
+
});
|
|
360
|
+
const result = await (0, import_capture.tryScopedSnapshot)(
|
|
361
|
+
makePage(session),
|
|
362
|
+
{ focusSelector: ".bad" },
|
|
363
|
+
context,
|
|
364
|
+
true
|
|
365
|
+
);
|
|
366
|
+
(0, import_vitest.expect)(result).toBeNull();
|
|
367
|
+
(0, import_vitest.expect)(loggerSpy).toHaveBeenCalled();
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
//# sourceMappingURL=snapshot-a11y-resolvers.test.js.map
|