@browserbasehq/orca 3.0.9-alpha-3 → 3.1.0-patch.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/lib/inference.d.ts +65 -0
- package/dist/esm/lib/inference.js +333 -0
- package/dist/esm/lib/inference.js.map +1 -0
- package/dist/esm/lib/inferenceLogUtils.d.ts +12 -0
- package/dist/esm/lib/inferenceLogUtils.js +92 -0
- package/dist/esm/lib/inferenceLogUtils.js.map +1 -0
- package/dist/esm/lib/logger.d.ts +69 -0
- package/dist/esm/lib/logger.js +323 -0
- package/dist/esm/lib/logger.js.map +1 -0
- package/dist/esm/lib/modelUtils.d.ts +14 -0
- package/dist/esm/lib/modelUtils.js +48 -0
- package/dist/esm/lib/modelUtils.js.map +1 -0
- package/dist/esm/lib/prompt.d.ts +14 -0
- package/dist/esm/lib/prompt.js +230 -0
- package/dist/esm/lib/prompt.js.map +1 -0
- package/dist/esm/lib/utils.d.ts +68 -0
- package/dist/esm/lib/utils.js +654 -0
- package/dist/esm/lib/utils.js.map +1 -0
- package/dist/esm/lib/v3/agent/AgentClient.d.ts +19 -0
- package/dist/esm/lib/v3/agent/AgentClient.js +17 -0
- package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -0
- package/dist/esm/lib/v3/agent/AgentProvider.d.ts +20 -0
- package/dist/esm/lib/v3/agent/AgentProvider.js +77 -0
- package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -0
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.d.ts +57 -0
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +822 -0
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -0
- package/dist/esm/lib/v3/agent/GoogleCUAClient.d.ts +74 -0
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js +799 -0
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -0
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.d.ts +71 -0
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +770 -0
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -0
- package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +69 -0
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js +615 -0
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -0
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +12 -0
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +186 -0
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/act.d.ts +13 -0
- package/dist/esm/lib/v3/agent/tools/act.js +49 -0
- package/dist/esm/lib/v3/agent/tools/act.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/ariaTree.d.ts +5 -0
- package/dist/esm/lib/v3/agent/tools/ariaTree.js +31 -0
- package/dist/esm/lib/v3/agent/tools/ariaTree.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/click.d.ts +6 -0
- package/dist/esm/lib/v3/agent/tools/click.js +104 -0
- package/dist/esm/lib/v3/agent/tools/click.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/clickAndHold.d.ts +14 -0
- package/dist/esm/lib/v3/agent/tools/clickAndHold.js +68 -0
- package/dist/esm/lib/v3/agent/tools/clickAndHold.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.d.ts +7 -0
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +105 -0
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/extract.d.ts +21 -0
- package/dist/esm/lib/v3/agent/tools/extract.js +93 -0
- package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/fillFormVision.d.ts +12 -0
- package/dist/esm/lib/v3/agent/tools/fillFormVision.js +143 -0
- package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/fillform.d.ts +13 -0
- package/dist/esm/lib/v3/agent/tools/fillform.js +56 -0
- package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/goto.d.ts +12 -0
- package/dist/esm/lib/v3/agent/tools/goto.js +31 -0
- package/dist/esm/lib/v3/agent/tools/goto.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/index.d.ts +92 -0
- package/dist/esm/lib/v3/agent/tools/index.js +74 -0
- package/dist/esm/lib/v3/agent/tools/index.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/keys.d.ts +24 -0
- package/dist/esm/lib/v3/agent/tools/keys.js +60 -0
- package/dist/esm/lib/v3/agent/tools/keys.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/navback.d.ts +6 -0
- package/dist/esm/lib/v3/agent/tools/navback.js +23 -0
- package/dist/esm/lib/v3/agent/tools/navback.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/screenshot.d.ts +6 -0
- package/dist/esm/lib/v3/agent/tools/screenshot.js +26 -0
- package/dist/esm/lib/v3/agent/tools/screenshot.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/scroll.d.ts +19 -0
- package/dist/esm/lib/v3/agent/tools/scroll.js +142 -0
- package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/search.d.ts +15 -0
- package/dist/esm/lib/v3/agent/tools/search.js +73 -0
- package/dist/esm/lib/v3/agent/tools/search.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/think.d.ts +6 -0
- package/dist/esm/lib/v3/agent/tools/think.js +24 -0
- package/dist/esm/lib/v3/agent/tools/think.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/type.d.ts +7 -0
- package/dist/esm/lib/v3/agent/tools/type.js +106 -0
- package/dist/esm/lib/v3/agent/tools/type.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/wait.d.ts +5 -0
- package/dist/esm/lib/v3/agent/tools/wait.js +53 -0
- package/dist/esm/lib/v3/agent/tools/wait.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/actionMapping.d.ts +3 -0
- package/dist/esm/lib/v3/agent/utils/actionMapping.js +100 -0
- package/dist/esm/lib/v3/agent/utils/actionMapping.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/coordinateNormalization.d.ts +13 -0
- package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js +28 -0
- package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.d.ts +10 -0
- package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.js +62 -0
- package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.d.ts +25 -0
- package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.js +145 -0
- package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.d.ts +22 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +101 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/imageCompression.d.ts +53 -0
- package/dist/esm/lib/v3/agent/utils/imageCompression.js +204 -0
- package/dist/esm/lib/v3/agent/utils/imageCompression.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/messageProcessing.d.ts +12 -0
- package/dist/esm/lib/v3/agent/utils/messageProcessing.js +164 -0
- package/dist/esm/lib/v3/agent/utils/messageProcessing.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/screenshotHandler.d.ts +10 -0
- package/dist/esm/lib/v3/agent/utils/screenshotHandler.js +26 -0
- package/dist/esm/lib/v3/agent/utils/screenshotHandler.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.d.ts +26 -0
- package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js +79 -0
- package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/xpath.d.ts +11 -0
- package/dist/esm/lib/v3/agent/utils/xpath.js +19 -0
- package/dist/esm/lib/v3/agent/utils/xpath.js.map +1 -0
- package/dist/esm/lib/v3/api.d.ts +86 -0
- package/dist/esm/lib/v3/api.js +484 -0
- package/dist/esm/lib/v3/api.js.map +1 -0
- package/dist/esm/lib/v3/cache/ActCache.d.ts +23 -0
- package/dist/esm/lib/v3/cache/ActCache.js +292 -0
- package/dist/esm/lib/v3/cache/ActCache.js.map +1 -0
- package/dist/esm/lib/v3/cache/AgentCache.d.ts +109 -0
- package/dist/esm/lib/v3/cache/AgentCache.js +640 -0
- package/dist/esm/lib/v3/cache/AgentCache.js.map +1 -0
- package/dist/esm/lib/v3/cache/CacheStorage.d.ts +17 -0
- package/dist/esm/lib/v3/cache/CacheStorage.js +98 -0
- package/dist/esm/lib/v3/cache/CacheStorage.js.map +1 -0
- package/dist/esm/lib/v3/cache/serverAgentCache.d.ts +7 -0
- package/dist/esm/lib/v3/cache/serverAgentCache.js +49 -0
- package/dist/esm/lib/v3/cache/serverAgentCache.js.map +1 -0
- package/dist/esm/lib/v3/cache/utils.d.ts +15 -0
- package/dist/esm/lib/v3/cache/utils.js +39 -0
- package/dist/esm/lib/v3/cache/utils.js.map +1 -0
- package/dist/esm/lib/v3/dom/a11yScripts/index.d.ts +11 -0
- package/dist/esm/lib/v3/dom/a11yScripts/index.js +117 -0
- package/dist/esm/lib/v3/dom/a11yScripts/index.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/a11yScripts.generated.d.ts +16 -0
- package/dist/esm/lib/v3/dom/build/a11yScripts.generated.js +20 -0
- package/dist/esm/lib/v3/dom/build/a11yScripts.generated.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/locatorScripts.generated.d.ts +52 -0
- package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js +56 -0
- package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -0
- package/dist/esm/lib/v3/dom/build/reRenderScriptContent.js +2 -0
- package/dist/esm/lib/v3/dom/build/reRenderScriptContent.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/rerender-index.js +1 -0
- package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.d.ts +4 -0
- package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.js +8 -0
- package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/scriptV3Content.d.ts +1 -0
- package/dist/esm/lib/v3/dom/build/scriptV3Content.js +2 -0
- package/dist/esm/lib/v3/dom/build/scriptV3Content.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/v3-index.js +1 -0
- package/dist/esm/lib/v3/dom/genA11yScripts.d.ts +1 -0
- package/dist/esm/lib/v3/dom/genA11yScripts.js +54 -0
- package/dist/esm/lib/v3/dom/genA11yScripts.js.map +1 -0
- package/dist/esm/lib/v3/dom/genDomScripts.d.ts +1 -0
- package/dist/esm/lib/v3/dom/genDomScripts.js +38 -0
- package/dist/esm/lib/v3/dom/genDomScripts.js.map +1 -0
- package/dist/esm/lib/v3/dom/genLocatorScripts.d.ts +1 -0
- package/dist/esm/lib/v3/dom/genLocatorScripts.js +51 -0
- package/dist/esm/lib/v3/dom/genLocatorScripts.js.map +1 -0
- package/dist/esm/lib/v3/dom/genScreenshotScripts.d.ts +1 -0
- package/dist/esm/lib/v3/dom/genScreenshotScripts.js +37 -0
- package/dist/esm/lib/v3/dom/genScreenshotScripts.js.map +1 -0
- package/dist/esm/lib/v3/dom/index.d.ts +1 -0
- package/dist/esm/lib/v3/dom/index.js +2 -0
- package/dist/esm/lib/v3/dom/index.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/counts.d.ts +15 -0
- package/dist/esm/lib/v3/dom/locatorScripts/counts.js +272 -0
- package/dist/esm/lib/v3/dom/locatorScripts/counts.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/index.d.ts +4 -0
- package/dist/esm/lib/v3/dom/locatorScripts/index.js +5 -0
- package/dist/esm/lib/v3/dom/locatorScripts/index.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/scripts.d.ts +37 -0
- package/dist/esm/lib/v3/dom/locatorScripts/scripts.js +458 -0
- package/dist/esm/lib/v3/dom/locatorScripts/scripts.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/selectors.d.ts +4 -0
- package/dist/esm/lib/v3/dom/locatorScripts/selectors.js +283 -0
- package/dist/esm/lib/v3/dom/locatorScripts/selectors.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.d.ts +19 -0
- package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.js +283 -0
- package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.d.ts +76 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.js +376 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.js.map +1 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.d.ts +9 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js +196 -0
- package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js.map +1 -0
- package/dist/esm/lib/v3/dom/piercer.entry.d.ts +1 -0
- package/dist/esm/lib/v3/dom/piercer.entry.js +3 -0
- package/dist/esm/lib/v3/dom/piercer.entry.js.map +1 -0
- package/dist/esm/lib/v3/dom/piercer.runtime.d.ts +23 -0
- package/dist/esm/lib/v3/dom/piercer.runtime.js +90 -0
- package/dist/esm/lib/v3/dom/piercer.runtime.js.map +1 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.d.ts +1 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.js +3 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.js.map +1 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.d.ts +1 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.js +40 -0
- package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.js.map +1 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/index.d.ts +1 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/index.js +2 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/index.js.map +1 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.d.ts +8 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.js +82 -0
- package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.js.map +1 -0
- package/dist/esm/lib/v3/external_clients/aisdk.d.ts +11 -0
- package/dist/esm/lib/v3/external_clients/aisdk.js +103 -0
- package/dist/esm/lib/v3/external_clients/aisdk.js.map +1 -0
- package/dist/esm/lib/v3/external_clients/customOpenAI.d.ts +18 -0
- package/dist/esm/lib/v3/external_clients/customOpenAI.js +220 -0
- package/dist/esm/lib/v3/external_clients/customOpenAI.js.map +1 -0
- package/dist/esm/lib/v3/flowLogger.d.ts +139 -0
- package/dist/esm/lib/v3/flowLogger.js +868 -0
- package/dist/esm/lib/v3/flowLogger.js.map +1 -0
- package/dist/esm/lib/v3/handlers/actHandler.d.ts +21 -0
- package/dist/esm/lib/v3/handlers/actHandler.js +340 -0
- package/dist/esm/lib/v3/handlers/actHandler.js.map +1 -0
- package/dist/esm/lib/v3/handlers/extractHandler.d.ts +31 -0
- package/dist/esm/lib/v3/handlers/extractHandler.js +139 -0
- package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +24 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +623 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.d.ts +2 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.js +14 -0
- package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.js.map +1 -0
- package/dist/esm/lib/v3/handlers/observeHandler.d.ts +17 -0
- package/dist/esm/lib/v3/handlers/observeHandler.js +156 -0
- package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -0
- package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +32 -0
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js +461 -0
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -0
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +33 -0
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +528 -0
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -0
- package/dist/esm/lib/v3/index.d.ts +17 -0
- package/dist/esm/lib/v3/index.js +13 -0
- package/dist/esm/lib/v3/index.js.map +1 -0
- package/dist/esm/lib/v3/launch/browserbase.d.ts +7 -0
- package/dist/esm/lib/v3/launch/browserbase.js +46 -0
- package/dist/esm/lib/v3/launch/browserbase.js.map +1 -0
- package/dist/esm/lib/v3/launch/local.d.ts +15 -0
- package/dist/esm/lib/v3/launch/local.js +98 -0
- package/dist/esm/lib/v3/launch/local.js.map +1 -0
- package/dist/esm/lib/v3/llm/AnthropicClient.d.ts +16 -0
- package/dist/esm/lib/v3/llm/AnthropicClient.js +239 -0
- package/dist/esm/lib/v3/llm/AnthropicClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/CerebrasClient.d.ts +17 -0
- package/dist/esm/lib/v3/llm/CerebrasClient.js +235 -0
- package/dist/esm/lib/v3/llm/CerebrasClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/GoogleClient.d.ts +19 -0
- package/dist/esm/lib/v3/llm/GoogleClient.js +369 -0
- package/dist/esm/lib/v3/llm/GoogleClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/GroqClient.d.ts +17 -0
- package/dist/esm/lib/v3/llm/GroqClient.js +236 -0
- package/dist/esm/lib/v3/llm/GroqClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/LLMClient.d.ts +121 -0
- package/dist/esm/lib/v3/llm/LLMClient.js +23 -0
- package/dist/esm/lib/v3/llm/LLMClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/LLMProvider.d.ts +13 -0
- package/dist/esm/lib/v3/llm/LLMProvider.js +194 -0
- package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -0
- package/dist/esm/lib/v3/llm/OpenAIClient.d.ts +15 -0
- package/dist/esm/lib/v3/llm/OpenAIClient.js +329 -0
- package/dist/esm/lib/v3/llm/OpenAIClient.js.map +1 -0
- package/dist/esm/lib/v3/llm/aisdk.d.ts +15 -0
- package/dist/esm/lib/v3/llm/aisdk.js +348 -0
- package/dist/esm/lib/v3/llm/aisdk.js.map +1 -0
- package/dist/esm/lib/v3/logger.d.ts +9 -0
- package/dist/esm/lib/v3/logger.js +96 -0
- package/dist/esm/lib/v3/logger.js.map +1 -0
- package/dist/esm/lib/v3/mcp/connection.d.ts +11 -0
- package/dist/esm/lib/v3/mcp/connection.js +49 -0
- package/dist/esm/lib/v3/mcp/connection.js.map +1 -0
- package/dist/esm/lib/v3/mcp/utils.d.ts +3 -0
- package/dist/esm/lib/v3/mcp/utils.js +36 -0
- package/dist/esm/lib/v3/mcp/utils.js.map +1 -0
- package/dist/esm/lib/v3/shutdown/cleanupLocal.d.ts +14 -0
- package/dist/esm/lib/v3/shutdown/cleanupLocal.js +30 -0
- package/dist/esm/lib/v3/shutdown/cleanupLocal.js.map +1 -0
- package/dist/esm/lib/v3/shutdown/supervisor.d.ts +9 -0
- package/dist/esm/lib/v3/shutdown/supervisor.js +156 -0
- package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -0
- package/dist/esm/lib/v3/shutdown/supervisorClient.d.ts +15 -0
- package/dist/esm/lib/v3/shutdown/supervisorClient.js +97 -0
- package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -0
- package/dist/esm/lib/v3/tests/agent-abort-signal.spec.js +113 -0
- package/dist/esm/lib/v3/tests/agent-abort-signal.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-cache-self-heal.spec.js +80 -0
- package/dist/esm/lib/v3/tests/agent-cache-self-heal.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-callbacks.spec.js +374 -0
- package/dist/esm/lib/v3/tests/agent-callbacks.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-experimental-validation.spec.js +357 -0
- package/dist/esm/lib/v3/tests/agent-experimental-validation.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-hybrid-mode.spec.js +247 -0
- package/dist/esm/lib/v3/tests/agent-hybrid-mode.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-message-continuation.spec.js +105 -0
- package/dist/esm/lib/v3/tests/agent-message-continuation.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/agent-streaming.spec.js +126 -0
- package/dist/esm/lib/v3/tests/agent-streaming.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/cdp-session-detached.spec.js +44 -0
- package/dist/esm/lib/v3/tests/cdp-session-detached.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/click-count.spec.js +112 -0
- package/dist/esm/lib/v3/tests/click-count.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/connect-to-existing-browser.spec.js +54 -0
- package/dist/esm/lib/v3/tests/connect-to-existing-browser.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/context-addInitScript.spec.js +176 -0
- package/dist/esm/lib/v3/tests/context-addInitScript.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/default-page-tracking.spec.js +53 -0
- package/dist/esm/lib/v3/tests/default-page-tracking.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/downloads.spec.js +58 -0
- package/dist/esm/lib/v3/tests/downloads.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/envReporter.js +57 -0
- package/dist/esm/lib/v3/tests/envReporter.js.map +7 -0
- package/dist/esm/lib/v3/tests/frame-get-location-and-click.spec.js +53 -0
- package/dist/esm/lib/v3/tests/frame-get-location-and-click.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +447 -0
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/keep-alive.child.js +92 -0
- package/dist/esm/lib/v3/tests/keep-alive.child.js.map +7 -0
- package/dist/esm/lib/v3/tests/keep-alive.helpers.js +532 -0
- package/dist/esm/lib/v3/tests/keep-alive.helpers.js.map +7 -0
- package/dist/esm/lib/v3/tests/keep-alive.spec.js +19 -0
- package/dist/esm/lib/v3/tests/keep-alive.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/keyboard.spec.js +296 -0
- package/dist/esm/lib/v3/tests/keyboard.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-backend-node-id.spec.js +159 -0
- package/dist/esm/lib/v3/tests/locator-backend-node-id.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-content-methods.spec.js +191 -0
- package/dist/esm/lib/v3/tests/locator-content-methods.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-count-iframe.spec.js +108 -0
- package/dist/esm/lib/v3/tests/locator-count-iframe.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-count.spec.js +71 -0
- package/dist/esm/lib/v3/tests/locator-count.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-fill.spec.js +118 -0
- package/dist/esm/lib/v3/tests/locator-fill.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-input-methods.spec.js +136 -0
- package/dist/esm/lib/v3/tests/locator-input-methods.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-nth.spec.js +157 -0
- package/dist/esm/lib/v3/tests/locator-nth.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/locator-select-option.spec.js +242 -0
- package/dist/esm/lib/v3/tests/locator-select-option.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/logger-initialization.spec.js +552 -0
- package/dist/esm/lib/v3/tests/logger-initialization.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/multi-instance-logger.spec.js +269 -0
- package/dist/esm/lib/v3/tests/multi-instance-logger.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/nested-div.spec.js +23 -0
- package/dist/esm/lib/v3/tests/nested-div.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-addInitScript.spec.js +90 -0
- package/dist/esm/lib/v3/tests/page-addInitScript.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-console.spec.js +56 -0
- package/dist/esm/lib/v3/tests/page-console.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-drag-and-drop.spec.js +418 -0
- package/dist/esm/lib/v3/tests/page-drag-and-drop.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-goto-response.spec.js +35 -0
- package/dist/esm/lib/v3/tests/page-goto-response.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-hover.spec.js +167 -0
- package/dist/esm/lib/v3/tests/page-hover.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-screenshot.spec.js +273 -0
- package/dist/esm/lib/v3/tests/page-screenshot.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-scroll.spec.js +182 -0
- package/dist/esm/lib/v3/tests/page-scroll.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/page-send-cdp.spec.js +46 -0
- package/dist/esm/lib/v3/tests/page-send-cdp.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/perform-understudy-method.spec.js +98 -0
- package/dist/esm/lib/v3/tests/perform-understudy-method.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/setinputfiles.spec.js +126 -0
- package/dist/esm/lib/v3/tests/setinputfiles.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/shadow-iframe-oopif.spec.js +134 -0
- package/dist/esm/lib/v3/tests/shadow-iframe-oopif.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/shadow-iframe-spif.spec.js +134 -0
- package/dist/esm/lib/v3/tests/shadow-iframe-spif.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/testUtils.js +31 -0
- package/dist/esm/lib/v3/tests/testUtils.js.map +7 -0
- package/dist/esm/lib/v3/tests/text-selector-innermost.spec.js +100 -0
- package/dist/esm/lib/v3/tests/text-selector-innermost.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/timeouts.spec.js +32 -0
- package/dist/esm/lib/v3/tests/timeouts.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/user-data-dir.spec.js +43 -0
- package/dist/esm/lib/v3/tests/user-data-dir.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/v3.config.js +15 -0
- package/dist/esm/lib/v3/tests/v3.config.js.map +7 -0
- package/dist/esm/lib/v3/tests/v3.dynamic.config.js +43 -0
- package/dist/esm/lib/v3/tests/v3.dynamic.config.js.map +7 -0
- package/dist/esm/lib/v3/tests/v3.playwright.config.js +98 -0
- package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +7 -0
- package/dist/esm/lib/v3/tests/wait-for-selector.spec.js +593 -0
- package/dist/esm/lib/v3/tests/wait-for-selector.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/wait-for-timeout.spec.js +97 -0
- package/dist/esm/lib/v3/tests/wait-for-timeout.spec.js.map +7 -0
- package/dist/esm/lib/v3/tests/xpath-for-location-deep.spec.js +77 -0
- package/dist/esm/lib/v3/tests/xpath-for-location-deep.spec.js.map +7 -0
- package/dist/esm/lib/v3/timeoutConfig.d.ts +2 -0
- package/dist/esm/lib/v3/timeoutConfig.js +27 -0
- package/dist/esm/lib/v3/timeoutConfig.js.map +1 -0
- package/dist/esm/lib/v3/types/private/agent.d.ts +6 -0
- package/dist/esm/lib/v3/types/private/agent.js +2 -0
- package/dist/esm/lib/v3/types/private/agent.js.map +1 -0
- package/dist/esm/lib/v3/types/private/api.d.ts +11 -0
- package/dist/esm/lib/v3/types/private/api.js +2 -0
- package/dist/esm/lib/v3/types/private/api.js.map +1 -0
- package/dist/esm/lib/v3/types/private/cache.d.ts +128 -0
- package/dist/esm/lib/v3/types/private/cache.js +2 -0
- package/dist/esm/lib/v3/types/private/cache.js.map +1 -0
- package/dist/esm/lib/v3/types/private/evaluator.d.ts +40 -0
- package/dist/esm/lib/v3/types/private/evaluator.js +2 -0
- package/dist/esm/lib/v3/types/private/evaluator.js.map +1 -0
- package/dist/esm/lib/v3/types/private/handlers.d.ts +38 -0
- package/dist/esm/lib/v3/types/private/handlers.js +16 -0
- package/dist/esm/lib/v3/types/private/handlers.js.map +1 -0
- package/dist/esm/lib/v3/types/private/index.d.ts +7 -0
- package/dist/esm/lib/v3/types/private/index.js +8 -0
- package/dist/esm/lib/v3/types/private/index.js.map +1 -0
- package/dist/esm/lib/v3/types/private/internal.d.ts +39 -0
- package/dist/esm/lib/v3/types/private/internal.js +2 -0
- package/dist/esm/lib/v3/types/private/internal.js.map +1 -0
- package/dist/esm/lib/v3/types/private/locator.d.ts +9 -0
- package/dist/esm/lib/v3/types/private/locator.js +2 -0
- package/dist/esm/lib/v3/types/private/locator.js.map +1 -0
- package/dist/esm/lib/v3/types/private/network.d.ts +34 -0
- package/dist/esm/lib/v3/types/private/network.js +3 -0
- package/dist/esm/lib/v3/types/private/network.js.map +1 -0
- package/dist/esm/lib/v3/types/private/shutdown.d.ts +31 -0
- package/dist/esm/lib/v3/types/private/shutdown.js +5 -0
- package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -0
- package/dist/esm/lib/v3/types/private/shutdownErrors.d.ts +12 -0
- package/dist/esm/lib/v3/types/private/shutdownErrors.js +22 -0
- package/dist/esm/lib/v3/types/private/shutdownErrors.js.map +1 -0
- package/dist/esm/lib/v3/types/private/snapshot.d.ts +117 -0
- package/dist/esm/lib/v3/types/private/snapshot.js +2 -0
- package/dist/esm/lib/v3/types/private/snapshot.js.map +1 -0
- package/dist/esm/lib/v3/types/public/agent.d.ts +595 -0
- package/dist/esm/lib/v3/types/public/agent.js +15 -0
- package/dist/esm/lib/v3/types/public/agent.js.map +1 -0
- package/dist/esm/lib/v3/types/public/api.d.ts +1211 -0
- package/dist/esm/lib/v3/types/public/api.js +915 -0
- package/dist/esm/lib/v3/types/public/api.js.map +1 -0
- package/dist/esm/lib/v3/types/public/apiErrors.d.ts +18 -0
- package/dist/esm/lib/v3/types/public/apiErrors.js +32 -0
- package/dist/esm/lib/v3/types/public/apiErrors.js.map +1 -0
- package/dist/esm/lib/v3/types/public/index.d.ts +12 -0
- package/dist/esm/lib/v3/types/public/index.js +14 -0
- package/dist/esm/lib/v3/types/public/index.js.map +1 -0
- package/dist/esm/lib/v3/types/public/locator.d.ts +9 -0
- package/dist/esm/lib/v3/types/public/locator.js +2 -0
- package/dist/esm/lib/v3/types/public/locator.js.map +1 -0
- package/dist/esm/lib/v3/types/public/logs.d.ts +23 -0
- package/dist/esm/lib/v3/types/public/logs.js +13 -0
- package/dist/esm/lib/v3/types/public/logs.js.map +1 -0
- package/dist/esm/lib/v3/types/public/methods.d.ts +56 -0
- package/dist/esm/lib/v3/types/public/methods.js +15 -0
- package/dist/esm/lib/v3/types/public/methods.js.map +1 -0
- package/dist/esm/lib/v3/types/public/metrics.d.ts +27 -0
- package/dist/esm/lib/v3/types/public/metrics.js +2 -0
- package/dist/esm/lib/v3/types/public/metrics.js.map +1 -0
- package/dist/esm/lib/v3/types/public/model.d.ts +65 -0
- package/dist/esm/lib/v3/types/public/model.js +2 -0
- package/dist/esm/lib/v3/types/public/model.js.map +1 -0
- package/dist/esm/lib/v3/types/public/options.d.ts +70 -0
- package/dist/esm/lib/v3/types/public/options.js +4 -0
- package/dist/esm/lib/v3/types/public/options.js.map +1 -0
- package/dist/esm/lib/v3/types/public/page.d.ts +18 -0
- package/dist/esm/lib/v3/types/public/page.js +3 -0
- package/dist/esm/lib/v3/types/public/page.js.map +1 -0
- package/dist/esm/lib/v3/types/public/screenshotTypes.d.ts +25 -0
- package/dist/esm/lib/v3/types/public/screenshotTypes.js +2 -0
- package/dist/esm/lib/v3/types/public/screenshotTypes.js.map +1 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +152 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js +305 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.d.ts +15 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js +196 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.d.ts +8 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.js +121 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.d.ts +77 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js +336 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.d.ts +7 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js +129 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.d.ts +46 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.js +274 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +24 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.js +216 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/index.d.ts +4 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/index.js +5 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/index.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.d.ts +16 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.js +22 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.d.ts +28 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js +135 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.d.ts +26 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.js +102 -0
- package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.js.map +1 -0
- package/dist/esm/lib/v3/understudy/a11yInvocation.d.ts +8 -0
- package/dist/esm/lib/v3/understudy/a11yInvocation.js +12 -0
- package/dist/esm/lib/v3/understudy/a11yInvocation.js.map +1 -0
- package/dist/esm/lib/v3/understudy/cdp.d.ts +69 -0
- package/dist/esm/lib/v3/understudy/cdp.js +251 -0
- package/dist/esm/lib/v3/understudy/cdp.js.map +1 -0
- package/dist/esm/lib/v3/understudy/consoleMessage.d.ts +22 -0
- package/dist/esm/lib/v3/understudy/consoleMessage.js +66 -0
- package/dist/esm/lib/v3/understudy/consoleMessage.js.map +1 -0
- package/dist/esm/lib/v3/understudy/context.d.ts +132 -0
- package/dist/esm/lib/v3/understudy/context.js +687 -0
- package/dist/esm/lib/v3/understudy/context.js.map +1 -0
- package/dist/esm/lib/v3/understudy/deepLocator.d.ts +87 -0
- package/dist/esm/lib/v3/understudy/deepLocator.js +218 -0
- package/dist/esm/lib/v3/understudy/deepLocator.js.map +1 -0
- package/dist/esm/lib/v3/understudy/executionContextRegistry.d.ts +15 -0
- package/dist/esm/lib/v3/understudy/executionContextRegistry.js +83 -0
- package/dist/esm/lib/v3/understudy/executionContextRegistry.js.map +1 -0
- package/dist/esm/lib/v3/understudy/fileUploadUtils.d.ts +13 -0
- package/dist/esm/lib/v3/understudy/fileUploadUtils.js +81 -0
- package/dist/esm/lib/v3/understudy/fileUploadUtils.js.map +1 -0
- package/dist/esm/lib/v3/understudy/frame.d.ts +69 -0
- package/dist/esm/lib/v3/understudy/frame.js +211 -0
- package/dist/esm/lib/v3/understudy/frame.js.map +1 -0
- package/dist/esm/lib/v3/understudy/frameLocator.d.ts +50 -0
- package/dist/esm/lib/v3/understudy/frameLocator.js +255 -0
- package/dist/esm/lib/v3/understudy/frameLocator.js.map +1 -0
- package/dist/esm/lib/v3/understudy/frameRegistry.d.ts +101 -0
- package/dist/esm/lib/v3/understudy/frameRegistry.js +298 -0
- package/dist/esm/lib/v3/understudy/frameRegistry.js.map +1 -0
- package/dist/esm/lib/v3/understudy/initScripts.d.ts +2 -0
- package/dist/esm/lib/v3/understudy/initScripts.js +33 -0
- package/dist/esm/lib/v3/understudy/initScripts.js.map +1 -0
- package/dist/esm/lib/v3/understudy/lifecycleWatcher.d.ts +64 -0
- package/dist/esm/lib/v3/understudy/lifecycleWatcher.js +245 -0
- package/dist/esm/lib/v3/understudy/lifecycleWatcher.js.map +1 -0
- package/dist/esm/lib/v3/understudy/locator.d.ts +194 -0
- package/dist/esm/lib/v3/understudy/locator.js +753 -0
- package/dist/esm/lib/v3/understudy/locator.js.map +1 -0
- package/dist/esm/lib/v3/understudy/locatorInvocation.d.ts +8 -0
- package/dist/esm/lib/v3/understudy/locatorInvocation.js +12 -0
- package/dist/esm/lib/v3/understudy/locatorInvocation.js.map +1 -0
- package/dist/esm/lib/v3/understudy/navigationResponseTracker.d.ts +84 -0
- package/dist/esm/lib/v3/understudy/navigationResponseTracker.js +224 -0
- package/dist/esm/lib/v3/understudy/navigationResponseTracker.js.map +1 -0
- package/dist/esm/lib/v3/understudy/networkManager.d.ts +53 -0
- package/dist/esm/lib/v3/understudy/networkManager.js +306 -0
- package/dist/esm/lib/v3/understudy/networkManager.js.map +1 -0
- package/dist/esm/lib/v3/understudy/page.d.ts +354 -0
- package/dist/esm/lib/v3/understudy/page.js +1941 -0
- package/dist/esm/lib/v3/understudy/page.js.map +1 -0
- package/dist/esm/lib/v3/understudy/piercer.d.ts +4 -0
- package/dist/esm/lib/v3/understudy/piercer.js +61 -0
- package/dist/esm/lib/v3/understudy/piercer.js.map +1 -0
- package/dist/esm/lib/v3/understudy/response.d.ts +137 -0
- package/dist/esm/lib/v3/understudy/response.js +330 -0
- package/dist/esm/lib/v3/understudy/response.js.map +1 -0
- package/dist/esm/lib/v3/understudy/screenshotUtils.d.ts +16 -0
- package/dist/esm/lib/v3/understudy/screenshotUtils.js +352 -0
- package/dist/esm/lib/v3/understudy/screenshotUtils.js.map +1 -0
- package/dist/esm/lib/v3/understudy/selectorResolver.d.ts +38 -0
- package/dist/esm/lib/v3/understudy/selectorResolver.js +296 -0
- package/dist/esm/lib/v3/understudy/selectorResolver.js.map +1 -0
- package/dist/esm/lib/v3/v3.d.ts +191 -0
- package/dist/esm/lib/v3/v3.js +1572 -0
- package/dist/esm/lib/v3/v3.js.map +1 -0
- package/dist/esm/lib/v3/zodCompat.d.ts +12 -0
- package/dist/esm/lib/v3/zodCompat.js +17 -0
- package/dist/esm/lib/v3/zodCompat.js.map +1 -0
- package/dist/esm/lib/v3Evaluator.d.ts +19 -0
- package/dist/esm/lib/v3Evaluator.js +210 -0
- package/dist/esm/lib/v3Evaluator.js.map +1 -0
- package/dist/esm/lib/version.d.ts +5 -0
- package/dist/esm/lib/version.js +6 -0
- package/dist/esm/lib/version.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/tests/agent-execution-model.test.js +139 -0
- package/dist/esm/tests/agent-execution-model.test.js.map +7 -0
- package/dist/esm/tests/browserbase-session-accessors.test.js +101 -0
- package/dist/esm/tests/browserbase-session-accessors.test.js.map +7 -0
- package/dist/esm/tests/cache-llm-resolution.test.js +187 -0
- package/dist/esm/tests/cache-llm-resolution.test.js.map +7 -0
- package/dist/esm/tests/helpers/mockCDPSession.js +27 -0
- package/dist/esm/tests/helpers/mockCDPSession.js.map +7 -0
- package/dist/esm/tests/llm-provider.test.js +57 -0
- package/dist/esm/tests/llm-provider.test.js.map +7 -0
- package/dist/esm/tests/model-deprecation.test.js +135 -0
- package/dist/esm/tests/model-deprecation.test.js.map +7 -0
- package/dist/esm/tests/model-utils.test.js +43 -0
- package/dist/esm/tests/model-utils.test.js.map +7 -0
- package/dist/esm/tests/page-snapshot.test.js +36 -0
- package/dist/esm/tests/page-snapshot.test.js.map +7 -0
- package/dist/esm/tests/public-api/export-surface.test.js +53 -0
- package/dist/esm/tests/public-api/export-surface.test.js.map +7 -0
- package/dist/esm/tests/public-api/llm-and-agents.test.js +128 -0
- package/dist/esm/tests/public-api/llm-and-agents.test.js.map +7 -0
- package/dist/esm/tests/public-api/public-error-types.test.js +71 -0
- package/dist/esm/tests/public-api/public-error-types.test.js.map +7 -0
- package/dist/esm/tests/public-api/public-types.test.js +74 -0
- package/dist/esm/tests/public-api/public-types.test.js.map +7 -0
- package/dist/esm/tests/public-api/runtime-utils.test.js +31 -0
- package/dist/esm/tests/public-api/runtime-utils.test.js.map +7 -0
- package/dist/esm/tests/public-api/schema-utils.test.js +78 -0
- package/dist/esm/tests/public-api/schema-utils.test.js.map +7 -0
- package/dist/esm/tests/public-api/timeout-error-types.test.js +81 -0
- package/dist/esm/tests/public-api/timeout-error-types.test.js.map +7 -0
- package/dist/esm/tests/public-api/tool-type-export.test.js +25 -0
- package/dist/esm/tests/public-api/tool-type-export.test.js.map +7 -0
- package/dist/esm/tests/public-api/v3-core.test.js +82 -0
- package/dist/esm/tests/public-api/v3-core.test.js.map +7 -0
- package/dist/esm/tests/safety-confirmation.test.js +134 -0
- package/dist/esm/tests/safety-confirmation.test.js.map +7 -0
- package/dist/esm/tests/snapshot-a11y-resolvers.test.js +348 -0
- package/dist/esm/tests/snapshot-a11y-resolvers.test.js.map +7 -0
- package/dist/esm/tests/snapshot-a11y-tree-utils.test.js +300 -0
- package/dist/esm/tests/snapshot-a11y-tree-utils.test.js.map +7 -0
- package/dist/esm/tests/snapshot-capture-orchestration.test.js +381 -0
- package/dist/esm/tests/snapshot-capture-orchestration.test.js.map +7 -0
- package/dist/esm/tests/snapshot-cbor.test.js +197 -0
- package/dist/esm/tests/snapshot-cbor.test.js.map +7 -0
- package/dist/esm/tests/snapshot-dom-session-builders.test.js +251 -0
- package/dist/esm/tests/snapshot-dom-session-builders.test.js.map +7 -0
- package/dist/esm/tests/snapshot-dom-tree-utils.test.js +109 -0
- package/dist/esm/tests/snapshot-dom-tree-utils.test.js.map +7 -0
- package/dist/esm/tests/snapshot-focus-selectors-utils.test.js +49 -0
- package/dist/esm/tests/snapshot-focus-selectors-utils.test.js.map +7 -0
- package/dist/esm/tests/snapshot-frame-merge.test.js +391 -0
- package/dist/esm/tests/snapshot-frame-merge.test.js.map +7 -0
- package/dist/esm/tests/snapshot-tree-format-utils.test.js +113 -0
- package/dist/esm/tests/snapshot-tree-format-utils.test.js.map +7 -0
- package/dist/esm/tests/snapshot-xpath-utils.test.js +79 -0
- package/dist/esm/tests/snapshot-xpath-utils.test.js.map +7 -0
- package/dist/esm/tests/timeout-handlers.test.js +850 -0
- package/dist/esm/tests/timeout-handlers.test.js.map +7 -0
- package/dist/esm/tests/xpath-parser.test.js +317 -0
- package/dist/esm/tests/xpath-parser.test.js.map +7 -0
- package/dist/esm/tests/xpath-resolver.test.js +73 -0
- package/dist/esm/tests/xpath-resolver.test.js.map +7 -0
- package/dist/esm/tests/zod-enum-compatibility.test.js +97 -0
- package/dist/esm/tests/zod-enum-compatibility.test.js.map +7 -0
- package/package.json +42 -27
- package/dist/index.d.ts +0 -4321
- package/dist/index.js +0 -69585
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/agent-hybrid-mode.spec.ts"],
|
|
4
|
+
"sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\nimport { createAgentTools } from \"../agent/tools/index.js\";\nimport { buildAgentSystemPrompt } from \"../agent/prompts/agentSystemPrompt.js\";\nimport type { StepResult, ToolSet } from \"ai\";\n\ntest.describe(\"Stagehand agent hybrid mode\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3({\n ...v3TestConfig,\n experimental: true,\n });\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test.describe(\"Tool filtering by mode\", () => {\n test(\"DOM mode includes DOM-based tools and excludes coordinate-based tools\", () => {\n const tools = createAgentTools(v3, { mode: \"dom\" });\n\n // DOM mode should have these tools\n expect(tools).toHaveProperty(\"act\");\n expect(tools).toHaveProperty(\"fillForm\");\n expect(tools).toHaveProperty(\"ariaTree\");\n expect(tools).toHaveProperty(\"screenshot\");\n expect(tools).toHaveProperty(\"extract\");\n expect(tools).toHaveProperty(\"goto\");\n expect(tools).toHaveProperty(\"scroll\");\n expect(tools).toHaveProperty(\"wait\");\n expect(tools).toHaveProperty(\"navback\");\n expect(tools).toHaveProperty(\"keys\");\n expect(tools).toHaveProperty(\"think\");\n\n // DOM mode should NOT have coordinate-based tools\n expect(tools).not.toHaveProperty(\"click\");\n expect(tools).not.toHaveProperty(\"type\");\n expect(tools).not.toHaveProperty(\"dragAndDrop\");\n expect(tools).not.toHaveProperty(\"clickAndHold\");\n expect(tools).not.toHaveProperty(\"fillFormVision\");\n });\n\n test(\"Hybrid mode includes coordinate-based tools and excludes DOM fillForm\", () => {\n const tools = createAgentTools(v3, { mode: \"hybrid\" });\n\n // Hybrid mode should have coordinate-based tools\n expect(tools).toHaveProperty(\"click\");\n expect(tools).toHaveProperty(\"type\");\n expect(tools).toHaveProperty(\"dragAndDrop\");\n expect(tools).toHaveProperty(\"clickAndHold\");\n expect(tools).toHaveProperty(\"fillFormVision\");\n\n // Hybrid mode should also have common tools\n expect(tools).toHaveProperty(\"act\");\n expect(tools).toHaveProperty(\"ariaTree\");\n expect(tools).toHaveProperty(\"screenshot\");\n expect(tools).toHaveProperty(\"extract\");\n expect(tools).toHaveProperty(\"goto\");\n expect(tools).toHaveProperty(\"scroll\");\n expect(tools).toHaveProperty(\"wait\");\n expect(tools).toHaveProperty(\"navback\");\n expect(tools).toHaveProperty(\"keys\");\n expect(tools).toHaveProperty(\"think\");\n\n // Hybrid mode should NOT have DOM-based fillForm\n expect(tools).not.toHaveProperty(\"fillForm\");\n });\n\n test(\"Default mode is DOM when not specified\", () => {\n const tools = createAgentTools(v3, {});\n\n // Should behave like DOM mode\n expect(tools).toHaveProperty(\"fillForm\");\n expect(tools).not.toHaveProperty(\"click\");\n expect(tools).not.toHaveProperty(\"type\");\n });\n });\n\n test.describe(\"System prompt generation\", () => {\n test(\"DOM mode system prompt emphasizes ariaTree and act tool\", () => {\n const prompt = buildAgentSystemPrompt({\n url: \"https://example.com\",\n executionInstruction: \"Test instruction\",\n mode: \"dom\",\n });\n\n // DOM mode should prioritize ariaTree\n expect(prompt).toContain(\"ariaTree\");\n expect(prompt).toContain(\"act\");\n expect(prompt).toContain(\"fillForm\");\n\n // Should have DOM-specific strategy\n expect(prompt).toContain(\"Use act tool for all clicking and typing\");\n expect(prompt).toContain(\"Always check ariaTree first\");\n });\n\n test(\"Hybrid mode system prompt emphasizes screenshot and coordinate tools\", () => {\n const prompt = buildAgentSystemPrompt({\n url: \"https://example.com\",\n executionInstruction: \"Test instruction\",\n mode: \"hybrid\",\n });\n\n // Hybrid mode should have coordinate-based tools mentioned\n expect(prompt).toContain(\"click\");\n expect(prompt).toContain(\"type\");\n expect(prompt).toContain(\"fillFormVision\");\n expect(prompt).toContain(\"dragAndDrop\");\n\n // Should have hybrid-specific strategy\n expect(prompt).toContain(\n \"Use specific tools (click, type) when elements are visible\",\n );\n expect(prompt).toContain(\"Always use screenshot\");\n });\n\n test(\"System prompt includes custom instructions when provided\", () => {\n const customInstructions = \"Always be polite and thorough\";\n const prompt = buildAgentSystemPrompt({\n url: \"https://example.com\",\n executionInstruction: \"Test instruction\",\n mode: \"dom\",\n systemInstructions: customInstructions,\n });\n\n expect(prompt).toContain(\"customInstructions\");\n expect(prompt).toContain(customInstructions);\n });\n\n test(\"System prompt includes Browserbase captcha message when isBrowserbase is true\", () => {\n const prompt = buildAgentSystemPrompt({\n url: \"https://example.com\",\n executionInstruction: \"Test instruction\",\n mode: \"dom\",\n isBrowserbase: true,\n });\n\n expect(prompt).toContain(\"captcha\");\n expect(prompt).toContain(\"automatically be solved\");\n });\n\n test(\"System prompt does not include captcha message when isBrowserbase is false\", () => {\n const prompt = buildAgentSystemPrompt({\n url: \"https://example.com\",\n executionInstruction: \"Test instruction\",\n mode: \"dom\",\n isBrowserbase: false,\n });\n\n expect(prompt).not.toContain(\"automatically be solved\");\n });\n });\n\n test.describe(\"Agent creation with mode\", () => {\n test(\"agent({ mode: 'dom' }) creates DOM-mode agent\", () => {\n const agent = v3.agent({\n mode: \"dom\",\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n expect(agent).toHaveProperty(\"execute\");\n });\n\n test(\"agent({ mode: 'hybrid' }) creates hybrid-mode agent\", () => {\n const agent = v3.agent({\n mode: \"hybrid\",\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n expect(agent).toHaveProperty(\"execute\");\n });\n\n test(\"agent without mode defaults to DOM mode\", () => {\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n expect(agent).toHaveProperty(\"execute\");\n });\n\n test(\"hybrid mode can be combined with streaming\", () => {\n const agent = v3.agent({\n mode: \"hybrid\",\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n expect(agent).toHaveProperty(\"execute\");\n });\n });\n\n test.describe(\"Hybrid mode execution\", () => {\n test(\"hybrid mode agent uses coordinate-based tools when available\", async () => {\n test.setTimeout(90000);\n\n const toolCalls: Array<{ toolName: string; input: unknown }> = [];\n\n const agent = v3.agent({\n mode: \"hybrid\",\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n await agent.execute({\n instruction:\n \"Take a screenshot to see the page, then describe what you see briefly and mark the task as complete.\",\n maxSteps: 5,\n callbacks: {\n onStepFinish: async (event: StepResult<ToolSet>) => {\n if (event.toolCalls) {\n for (const tc of event.toolCalls) {\n toolCalls.push({\n toolName: tc.toolName,\n input: tc.input,\n });\n }\n }\n },\n },\n });\n\n // Should have captured tool calls\n expect(toolCalls.length).toBeGreaterThan(0);\n\n const toolNames = toolCalls.map((tc) => tc.toolName);\n // Should include screenshot (hybrid mode emphasizes visual)\n expect(toolNames).toContain(\"screenshot\");\n });\n\n test(\"DOM mode agent uses DOM-based tools\", async () => {\n test.setTimeout(90000);\n\n const toolCalls: Array<{ toolName: string; input: unknown }> = [];\n\n const agent = v3.agent({\n mode: \"dom\",\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n await agent.execute({\n instruction:\n \"Use the ariaTree to understand the page, then provide the final requested output or a summary of the page.\",\n maxSteps: 5,\n callbacks: {\n onStepFinish: async (event: StepResult<ToolSet>) => {\n if (event.toolCalls) {\n for (const tc of event.toolCalls) {\n toolCalls.push({\n toolName: tc.toolName,\n input: tc.input,\n });\n }\n }\n },\n },\n });\n\n // Should have captured tool calls\n expect(toolCalls.length).toBeGreaterThan(0);\n\n // Should include ariaTree (DOM mode emphasizes aria-based interaction)\n const toolNames = toolCalls.map((tc) => tc.toolName);\n expect(toolNames).toContain(\"ariaTree\");\n });\n });\n\n test.describe(\"Scroll tool variants by mode\", () => {\n test(\"DOM mode uses simple scroll tool without coordinates\", () => {\n const tools = createAgentTools(v3, { mode: \"dom\" });\n\n expect(tools).toHaveProperty(\"scroll\");\n // The DOM scroll tool should exist\n expect(typeof tools.scroll).toBe(\"object\");\n });\n\n test(\"Hybrid mode uses vision scroll tool with optional coordinates\", () => {\n const tools = createAgentTools(v3, { mode: \"hybrid\" });\n\n expect(tools).toHaveProperty(\"scroll\");\n // The hybrid scroll tool should exist\n expect(typeof tools.scroll).toBe(\"object\");\n });\n });\n\n test.describe(\"Keys tool availability in both modes\", () => {\n test(\"Keys tool is available in DOM mode\", () => {\n const tools = createAgentTools(v3, { mode: \"dom\" });\n expect(tools).toHaveProperty(\"keys\");\n });\n\n test(\"Keys tool is available in hybrid mode\", () => {\n const tools = createAgentTools(v3, { mode: \"hybrid\" });\n expect(tools).toHaveProperty(\"keys\");\n });\n });\n\n test.describe(\"Think tool availability\", () => {\n test(\"Think tool is available in DOM mode\", () => {\n const tools = createAgentTools(v3, { mode: \"dom\" });\n expect(tools).toHaveProperty(\"think\");\n });\n\n test(\"Think tool is available in hybrid mode\", () => {\n const tools = createAgentTools(v3, { mode: \"hybrid\" });\n expect(tools).toHaveProperty(\"think\");\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { test, expect } from "@playwright/test";
|
|
2
|
+
import { V3 } from "../v3.js";
|
|
3
|
+
import { v3TestConfig } from "./v3.config.js";
|
|
4
|
+
test.describe("Stagehand agent message continuation", () => {
|
|
5
|
+
let v3;
|
|
6
|
+
test.beforeEach(async () => {
|
|
7
|
+
v3 = new V3({
|
|
8
|
+
...v3TestConfig,
|
|
9
|
+
experimental: true
|
|
10
|
+
});
|
|
11
|
+
await v3.init();
|
|
12
|
+
});
|
|
13
|
+
test.afterEach(async () => {
|
|
14
|
+
await v3?.close?.().catch(() => {
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
test("execute returns messages in the result", async () => {
|
|
18
|
+
test.setTimeout(6e4);
|
|
19
|
+
const agent = v3.agent({
|
|
20
|
+
model: "anthropic/claude-haiku-4-5-20251001"
|
|
21
|
+
});
|
|
22
|
+
const page = v3.context.pages()[0];
|
|
23
|
+
await page.goto("https://example.com");
|
|
24
|
+
const result = await agent.execute({
|
|
25
|
+
instruction: "What is the title of this page? Describe it briefly.",
|
|
26
|
+
maxSteps: 5
|
|
27
|
+
});
|
|
28
|
+
expect(result.messages).toBeDefined();
|
|
29
|
+
expect(Array.isArray(result.messages)).toBe(true);
|
|
30
|
+
expect(result.messages.length).toBeGreaterThan(0);
|
|
31
|
+
const firstMessage = result.messages[0];
|
|
32
|
+
expect(firstMessage.role).toBe("user");
|
|
33
|
+
});
|
|
34
|
+
test("can continue conversation with previous messages", async () => {
|
|
35
|
+
test.setTimeout(12e4);
|
|
36
|
+
const agent = v3.agent({
|
|
37
|
+
model: "anthropic/claude-haiku-4-5-20251001"
|
|
38
|
+
});
|
|
39
|
+
const page = v3.context.pages()[0];
|
|
40
|
+
await page.goto("https://example.com");
|
|
41
|
+
const result1 = await agent.execute({
|
|
42
|
+
instruction: "What is the title of this page? Describe it briefly.",
|
|
43
|
+
maxSteps: 5
|
|
44
|
+
});
|
|
45
|
+
expect(result1.messages).toBeDefined();
|
|
46
|
+
expect(result1.messages.length).toBeGreaterThan(0);
|
|
47
|
+
const result2 = await agent.execute({
|
|
48
|
+
instruction: "Based on what you just told me, is this a simple or complex website? Answer briefly.",
|
|
49
|
+
maxSteps: 5,
|
|
50
|
+
messages: result1.messages
|
|
51
|
+
});
|
|
52
|
+
expect(result2.messages).toBeDefined();
|
|
53
|
+
expect(result2.messages.length).toBeGreaterThan(result1.messages.length);
|
|
54
|
+
});
|
|
55
|
+
test("messages include tool calls and results", async () => {
|
|
56
|
+
test.setTimeout(6e4);
|
|
57
|
+
const agent = v3.agent({
|
|
58
|
+
model: "anthropic/claude-haiku-4-5-20251001"
|
|
59
|
+
});
|
|
60
|
+
const page = v3.context.pages()[0];
|
|
61
|
+
await page.goto("https://example.com");
|
|
62
|
+
const result = await agent.execute({
|
|
63
|
+
instruction: "Use the ariaTree tool to see the page, then describe what you found briefly.",
|
|
64
|
+
maxSteps: 5
|
|
65
|
+
});
|
|
66
|
+
expect(result.messages).toBeDefined();
|
|
67
|
+
const assistantMessages = result.messages.filter(
|
|
68
|
+
(m) => m.role === "assistant"
|
|
69
|
+
);
|
|
70
|
+
expect(assistantMessages.length).toBeGreaterThan(0);
|
|
71
|
+
const hasToolCalls = assistantMessages.some((m) => {
|
|
72
|
+
if (Array.isArray(m.content)) {
|
|
73
|
+
return m.content.some(
|
|
74
|
+
(part) => typeof part === "object" && part.type === "tool-call"
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
});
|
|
79
|
+
expect(hasToolCalls).toBe(true);
|
|
80
|
+
const hasToolResults = result.messages.some(
|
|
81
|
+
(m) => m.role === "tool"
|
|
82
|
+
);
|
|
83
|
+
expect(hasToolResults).toBe(true);
|
|
84
|
+
});
|
|
85
|
+
test("streaming mode also returns messages", async () => {
|
|
86
|
+
test.setTimeout(6e4);
|
|
87
|
+
const agent = v3.agent({
|
|
88
|
+
stream: true,
|
|
89
|
+
model: "anthropic/claude-haiku-4-5-20251001"
|
|
90
|
+
});
|
|
91
|
+
const page = v3.context.pages()[0];
|
|
92
|
+
await page.goto("https://example.com");
|
|
93
|
+
const streamResult = await agent.execute({
|
|
94
|
+
instruction: "What is this page? Describe it briefly.",
|
|
95
|
+
maxSteps: 5
|
|
96
|
+
});
|
|
97
|
+
for await (const _ of streamResult.textStream) {
|
|
98
|
+
}
|
|
99
|
+
const result = await streamResult.result;
|
|
100
|
+
expect(result.messages).toBeDefined();
|
|
101
|
+
expect(Array.isArray(result.messages)).toBe(true);
|
|
102
|
+
expect(result.messages.length).toBeGreaterThan(0);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=agent-message-continuation.spec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/agent-message-continuation.spec.ts"],
|
|
4
|
+
"sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\nimport type { ModelMessage } from \"ai\";\n\ntest.describe(\"Stagehand agent message continuation\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3({\n ...v3TestConfig,\n experimental: true,\n });\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"execute returns messages in the result\", async () => {\n test.setTimeout(60000);\n\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const result = await agent.execute({\n instruction: \"What is the title of this page? Describe it briefly.\",\n maxSteps: 5,\n });\n\n // Result should contain messages\n expect(result.messages).toBeDefined();\n expect(Array.isArray(result.messages)).toBe(true);\n expect(result.messages!.length).toBeGreaterThan(0);\n\n // First message should be the user instruction\n const firstMessage = result.messages![0];\n expect(firstMessage.role).toBe(\"user\");\n });\n\n test(\"can continue conversation with previous messages\", async () => {\n test.setTimeout(120000);\n\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n // First execution\n const result1 = await agent.execute({\n instruction: \"What is the title of this page? Describe it briefly.\",\n maxSteps: 5,\n });\n\n expect(result1.messages).toBeDefined();\n expect(result1.messages!.length).toBeGreaterThan(0);\n\n // Second execution continuing from first\n const result2 = await agent.execute({\n instruction:\n \"Based on what you just told me, is this a simple or complex website? Answer briefly.\",\n maxSteps: 5,\n messages: result1.messages,\n });\n\n expect(result2.messages).toBeDefined();\n // Second result should have more messages (includes first conversation)\n expect(result2.messages!.length).toBeGreaterThan(result1.messages!.length);\n });\n\n test(\"messages include tool calls and results\", async () => {\n test.setTimeout(60000);\n\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const result = await agent.execute({\n instruction:\n \"Use the ariaTree tool to see the page, then describe what you found briefly.\",\n maxSteps: 5,\n });\n\n expect(result.messages).toBeDefined();\n\n // Verify there are assistant messages\n const assistantMessages = result.messages!.filter(\n (m: ModelMessage) => m.role === \"assistant\",\n );\n expect(assistantMessages.length).toBeGreaterThan(0);\n\n // Verify at least one assistant message contains tool calls\n const hasToolCalls = assistantMessages.some((m: ModelMessage) => {\n if (Array.isArray(m.content)) {\n return m.content.some(\n (part) => typeof part === \"object\" && part.type === \"tool-call\",\n );\n }\n return false;\n });\n expect(hasToolCalls).toBe(true);\n\n // Verify there are tool result messages\n const hasToolResults = result.messages!.some(\n (m: ModelMessage) => m.role === \"tool\",\n );\n expect(hasToolResults).toBe(true);\n });\n\n test(\"streaming mode also returns messages\", async () => {\n test.setTimeout(60000);\n\n const agent = v3.agent({\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const streamResult = await agent.execute({\n instruction: \"What is this page? Describe it briefly.\",\n maxSteps: 5,\n });\n\n // Consume the stream\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of streamResult.textStream) {\n // Just consume\n }\n\n const result = await streamResult.result;\n\n // Result should contain messages\n expect(result.messages).toBeDefined();\n expect(Array.isArray(result.messages)).toBe(true);\n expect(result.messages!.length).toBeGreaterThan(0);\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { test, expect } from "@playwright/test";
|
|
2
|
+
import { V3 } from "../v3.js";
|
|
3
|
+
import { v3TestConfig } from "./v3.config.js";
|
|
4
|
+
test.describe("Stagehand agent streaming behavior", () => {
|
|
5
|
+
let v3;
|
|
6
|
+
test.beforeEach(async () => {
|
|
7
|
+
v3 = new V3({
|
|
8
|
+
...v3TestConfig,
|
|
9
|
+
experimental: true
|
|
10
|
+
// Required for streaming
|
|
11
|
+
});
|
|
12
|
+
await v3.init();
|
|
13
|
+
});
|
|
14
|
+
test.afterEach(async () => {
|
|
15
|
+
await v3?.close?.().catch(() => {
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
test.describe("agent({ stream: true })", () => {
|
|
19
|
+
test("AgentStreamResult has textStream as async iterable", async () => {
|
|
20
|
+
test.setTimeout(6e4);
|
|
21
|
+
const agent = v3.agent({
|
|
22
|
+
stream: true,
|
|
23
|
+
model: "anthropic/claude-haiku-4-5-20251001"
|
|
24
|
+
});
|
|
25
|
+
const page = v3.context.pages()[0];
|
|
26
|
+
await page.goto("https://example.com");
|
|
27
|
+
const streamResult = await agent.execute({
|
|
28
|
+
instruction: "What is the title of this page? Describe it briefly.",
|
|
29
|
+
maxSteps: 3
|
|
30
|
+
});
|
|
31
|
+
expect(streamResult).toHaveProperty("textStream");
|
|
32
|
+
expect(streamResult).toHaveProperty("result");
|
|
33
|
+
expect(typeof streamResult.textStream[Symbol.asyncIterator]).toBe(
|
|
34
|
+
"function"
|
|
35
|
+
);
|
|
36
|
+
expect(streamResult.result).toBeInstanceOf(Promise);
|
|
37
|
+
});
|
|
38
|
+
test("textStream yields chunks incrementally", async () => {
|
|
39
|
+
test.setTimeout(6e4);
|
|
40
|
+
const agent = v3.agent({
|
|
41
|
+
stream: true,
|
|
42
|
+
model: "anthropic/claude-haiku-4-5-20251001"
|
|
43
|
+
});
|
|
44
|
+
const page = v3.context.pages()[0];
|
|
45
|
+
await page.goto("https://example.com");
|
|
46
|
+
const streamResult = await agent.execute({
|
|
47
|
+
instruction: "Say hello briefly.",
|
|
48
|
+
maxSteps: 3
|
|
49
|
+
});
|
|
50
|
+
const chunks = [];
|
|
51
|
+
for await (const chunk of streamResult.textStream) {
|
|
52
|
+
chunks.push(chunk);
|
|
53
|
+
}
|
|
54
|
+
expect(Array.isArray(chunks)).toBe(true);
|
|
55
|
+
expect(chunks.length).toBeGreaterThan(0);
|
|
56
|
+
});
|
|
57
|
+
test("result promise resolves to AgentResult after stream completes", async () => {
|
|
58
|
+
test.setTimeout(6e4);
|
|
59
|
+
const agent = v3.agent({
|
|
60
|
+
stream: true,
|
|
61
|
+
model: "anthropic/claude-haiku-4-5-20251001"
|
|
62
|
+
});
|
|
63
|
+
const page = v3.context.pages()[0];
|
|
64
|
+
await page.goto("https://example.com");
|
|
65
|
+
const streamResult = await agent.execute({
|
|
66
|
+
instruction: "What is this page about? Describe it briefly.",
|
|
67
|
+
maxSteps: 5
|
|
68
|
+
});
|
|
69
|
+
for await (const _ of streamResult.textStream) {
|
|
70
|
+
}
|
|
71
|
+
const finalResult = await streamResult.result;
|
|
72
|
+
expect(finalResult).toHaveProperty("success");
|
|
73
|
+
expect(finalResult).toHaveProperty("message");
|
|
74
|
+
expect(finalResult).toHaveProperty("actions");
|
|
75
|
+
expect(finalResult).toHaveProperty("completed");
|
|
76
|
+
expect(typeof finalResult.success).toBe("boolean");
|
|
77
|
+
expect(typeof finalResult.message).toBe("string");
|
|
78
|
+
expect(Array.isArray(finalResult.actions)).toBe(true);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
test.describe("agent({ stream: false }) or agent()", () => {
|
|
82
|
+
test("execute returns AgentResult without streaming properties", async () => {
|
|
83
|
+
test.setTimeout(6e4);
|
|
84
|
+
const agent = v3.agent({
|
|
85
|
+
model: "anthropic/claude-haiku-4-5-20251001"
|
|
86
|
+
});
|
|
87
|
+
const page = v3.context.pages()[0];
|
|
88
|
+
await page.goto("https://example.com");
|
|
89
|
+
const result = await agent.execute({
|
|
90
|
+
instruction: "What is this page? Describe it briefly.",
|
|
91
|
+
maxSteps: 3
|
|
92
|
+
});
|
|
93
|
+
expect(result).toHaveProperty("success");
|
|
94
|
+
expect(result).toHaveProperty("message");
|
|
95
|
+
expect(result).toHaveProperty("actions");
|
|
96
|
+
expect(result).toHaveProperty("completed");
|
|
97
|
+
expect(result).not.toHaveProperty("textStream");
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
test.describe("CUA disables streaming", () => {
|
|
101
|
+
test("throws StagehandInvalidArgumentError when cua: true and stream: true", () => {
|
|
102
|
+
expect(() => {
|
|
103
|
+
v3.agent({
|
|
104
|
+
cua: true,
|
|
105
|
+
stream: true,
|
|
106
|
+
model: "anthropic/claude-haiku-4-5-20251001"
|
|
107
|
+
});
|
|
108
|
+
}).toThrow("streaming is not supported with CUA");
|
|
109
|
+
});
|
|
110
|
+
test("allows cua: true without stream", () => {
|
|
111
|
+
const agent = v3.agent({
|
|
112
|
+
cua: true,
|
|
113
|
+
model: "anthropic/claude-haiku-4-5-20251001"
|
|
114
|
+
});
|
|
115
|
+
expect(agent).toHaveProperty("execute");
|
|
116
|
+
});
|
|
117
|
+
test("allows stream: true without cua", () => {
|
|
118
|
+
const agent = v3.agent({
|
|
119
|
+
stream: true,
|
|
120
|
+
model: "anthropic/claude-haiku-4-5-20251001"
|
|
121
|
+
});
|
|
122
|
+
expect(agent).toHaveProperty("execute");
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=agent-streaming.spec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/agent-streaming.spec.ts"],
|
|
4
|
+
"sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\nimport type { AgentResult } from \"../types/public/agent.js\";\n\ntest.describe(\"Stagehand agent streaming behavior\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3({\n ...v3TestConfig,\n experimental: true, // Required for streaming\n });\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test.describe(\"agent({ stream: true })\", () => {\n test(\"AgentStreamResult has textStream as async iterable\", async () => {\n test.setTimeout(60000);\n\n const agent = v3.agent({\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n // Navigate to a simple page first\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const streamResult = await agent.execute({\n instruction: \"What is the title of this page? Describe it briefly.\",\n maxSteps: 3,\n });\n\n // Verify it's an AgentStreamResult with streaming capabilities\n expect(streamResult).toHaveProperty(\"textStream\");\n expect(streamResult).toHaveProperty(\"result\");\n\n // textStream should be async iterable\n expect(typeof streamResult.textStream[Symbol.asyncIterator]).toBe(\n \"function\",\n );\n\n // result should be a promise\n expect(streamResult.result).toBeInstanceOf(Promise);\n });\n\n test(\"textStream yields chunks incrementally\", async () => {\n test.setTimeout(60000);\n\n const agent = v3.agent({\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const streamResult = await agent.execute({\n instruction: \"Say hello briefly.\",\n maxSteps: 3,\n });\n\n // Collect chunks from the stream\n const chunks: string[] = [];\n for await (const chunk of streamResult.textStream) {\n chunks.push(chunk);\n }\n\n // Should have received at least some chunks (streaming behavior)\n // The exact content depends on the LLM response\n expect(Array.isArray(chunks)).toBe(true);\n expect(chunks.length).toBeGreaterThan(0);\n });\n\n test(\"result promise resolves to AgentResult after stream completes\", async () => {\n test.setTimeout(60000);\n\n const agent = v3.agent({\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const streamResult = await agent.execute({\n instruction: \"What is this page about? Describe it briefly.\",\n maxSteps: 5,\n });\n\n // Consume the stream first\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of streamResult.textStream) {\n // Just consume\n }\n\n // Now get the final result\n const finalResult: AgentResult = await streamResult.result;\n\n // Verify it's a proper AgentResult\n expect(finalResult).toHaveProperty(\"success\");\n expect(finalResult).toHaveProperty(\"message\");\n expect(finalResult).toHaveProperty(\"actions\");\n expect(finalResult).toHaveProperty(\"completed\");\n expect(typeof finalResult.success).toBe(\"boolean\");\n expect(typeof finalResult.message).toBe(\"string\");\n expect(Array.isArray(finalResult.actions)).toBe(true);\n });\n });\n\n test.describe(\"agent({ stream: false }) or agent()\", () => {\n test(\"execute returns AgentResult without streaming properties\", async () => {\n test.setTimeout(60000);\n\n const agent = v3.agent({\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n const page = v3.context.pages()[0];\n await page.goto(\"https://example.com\");\n\n const result = await agent.execute({\n instruction: \"What is this page? Describe it briefly.\",\n maxSteps: 3,\n });\n // Should be AgentResult, not AgentStreamResult\n expect(result).toHaveProperty(\"success\");\n expect(result).toHaveProperty(\"message\");\n expect(result).toHaveProperty(\"actions\");\n expect(result).toHaveProperty(\"completed\");\n\n // Should NOT have streaming properties\n expect(result).not.toHaveProperty(\"textStream\");\n });\n });\n\n test.describe(\"CUA disables streaming\", () => {\n test(\"throws StagehandInvalidArgumentError when cua: true and stream: true\", () => {\n expect(() => {\n v3.agent({\n cua: true,\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n }).toThrow(\"streaming is not supported with CUA\");\n });\n\n test(\"allows cua: true without stream\", () => {\n // Should not throw\n const agent = v3.agent({\n cua: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n expect(agent).toHaveProperty(\"execute\");\n });\n\n test(\"allows stream: true without cua\", () => {\n // Should not throw\n const agent = v3.agent({\n stream: true,\n model: \"anthropic/claude-haiku-4-5-20251001\",\n });\n\n expect(agent).toHaveProperty(\"execute\");\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { test, expect } from "@playwright/test";
|
|
2
|
+
import { chromium as playwrightChromium } from "playwright";
|
|
3
|
+
import { V3 } from "../v3.js";
|
|
4
|
+
import { v3TestConfig } from "./v3.config.js";
|
|
5
|
+
test.describe("CDP session detach handling", () => {
|
|
6
|
+
let v3;
|
|
7
|
+
test.beforeEach(async () => {
|
|
8
|
+
v3 = new V3(v3TestConfig);
|
|
9
|
+
await v3.init();
|
|
10
|
+
});
|
|
11
|
+
test.afterEach(async () => {
|
|
12
|
+
await v3?.close?.().catch(() => {
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
test("rejects inflight CDP calls when a target is closed", async () => {
|
|
16
|
+
const unhandled = [];
|
|
17
|
+
const onUnhandled = (reason) => {
|
|
18
|
+
unhandled.push(reason);
|
|
19
|
+
};
|
|
20
|
+
process.on("unhandledRejection", onUnhandled);
|
|
21
|
+
let pwBrowser = null;
|
|
22
|
+
try {
|
|
23
|
+
pwBrowser = await playwrightChromium.connectOverCDP(v3.connectURL());
|
|
24
|
+
const pwContext = pwBrowser.contexts()[0];
|
|
25
|
+
const pwPage = pwContext.pages()[0];
|
|
26
|
+
const v3Page = v3.context.pages()[0];
|
|
27
|
+
await v3Page.goto("data:text/html,<html><body>cdp</body></html>");
|
|
28
|
+
const pending = v3Page.sendCDP("Runtime.evaluate", {
|
|
29
|
+
expression: "new Promise(r => setTimeout(() => r('done'), 5000))",
|
|
30
|
+
awaitPromise: true,
|
|
31
|
+
returnByValue: true
|
|
32
|
+
});
|
|
33
|
+
await pwPage.close();
|
|
34
|
+
await expect(pending).rejects.toThrow(/CDP session detached/);
|
|
35
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
36
|
+
expect(unhandled).toHaveLength(0);
|
|
37
|
+
} finally {
|
|
38
|
+
process.off("unhandledRejection", onUnhandled);
|
|
39
|
+
await pwBrowser?.close().catch(() => {
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=cdp-session-detached.spec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/cdp-session-detached.spec.ts"],
|
|
4
|
+
"sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { chromium as playwrightChromium } from \"playwright\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"CDP session detach handling\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"rejects inflight CDP calls when a target is closed\", async () => {\n const unhandled: unknown[] = [];\n const onUnhandled = (reason: unknown) => {\n unhandled.push(reason);\n };\n\n process.on(\"unhandledRejection\", onUnhandled);\n\n let pwBrowser: Awaited<\n ReturnType<typeof playwrightChromium.connectOverCDP>\n > | null = null;\n\n try {\n pwBrowser = await playwrightChromium.connectOverCDP(v3.connectURL());\n const pwContext = pwBrowser.contexts()[0];\n const pwPage = pwContext.pages()[0];\n\n const v3Page = v3.context.pages()[0];\n await v3Page.goto(\"data:text/html,<html><body>cdp</body></html>\");\n\n const pending = v3Page.sendCDP(\"Runtime.evaluate\", {\n expression: \"new Promise(r => setTimeout(() => r('done'), 5000))\",\n awaitPromise: true,\n returnByValue: true,\n });\n\n await pwPage.close();\n\n await expect(pending).rejects.toThrow(/CDP session detached/);\n\n await new Promise((r) => setTimeout(r, 50));\n expect(unhandled).toHaveLength(0);\n } finally {\n process.off(\"unhandledRejection\", onUnhandled);\n await pwBrowser?.close().catch(() => {});\n }\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,MAAM,cAAc;AAC7B,SAAS,YAAY,0BAA0B;AAC/C,SAAS,UAAU;AACnB,SAAS,oBAAoB;AAE7B,KAAK,SAAS,+BAA+B,MAAM;AACjD,MAAI;AAEJ,OAAK,WAAW,YAAY;AAC1B,SAAK,IAAI,GAAG,YAAY;AACxB,UAAM,GAAG,KAAK;AAAA,EAChB,CAAC;AAED,OAAK,UAAU,YAAY;AACzB,UAAM,IAAI,QAAQ,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACpC,CAAC;AAED,OAAK,sDAAsD,YAAY;AACrE,UAAM,YAAuB,CAAC;AAC9B,UAAM,cAAc,CAAC,WAAoB;AACvC,gBAAU,KAAK,MAAM;AAAA,IACvB;AAEA,YAAQ,GAAG,sBAAsB,WAAW;AAE5C,QAAI,YAEO;AAEX,QAAI;AACF,kBAAY,MAAM,mBAAmB,eAAe,GAAG,WAAW,CAAC;AACnE,YAAM,YAAY,UAAU,SAAS,EAAE,CAAC;AACxC,YAAM,SAAS,UAAU,MAAM,EAAE,CAAC;AAElC,YAAM,SAAS,GAAG,QAAQ,MAAM,EAAE,CAAC;AACnC,YAAM,OAAO,KAAK,8CAA8C;AAEhE,YAAM,UAAU,OAAO,QAAQ,oBAAoB;AAAA,QACjD,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,eAAe;AAAA,MACjB,CAAC;AAED,YAAM,OAAO,MAAM;AAEnB,YAAM,OAAO,OAAO,EAAE,QAAQ,QAAQ,sBAAsB;AAE5D,YAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC1C,aAAO,SAAS,EAAE,aAAa,CAAC;AAAA,IAClC,UAAE;AACA,cAAQ,IAAI,sBAAsB,WAAW;AAC7C,YAAM,WAAW,MAAM,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACzC;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { test, expect } from "@playwright/test";
|
|
2
|
+
import { V3 } from "../v3.js";
|
|
3
|
+
import { v3TestConfig } from "./v3.config.js";
|
|
4
|
+
test.describe("Locator and Page click methods", () => {
|
|
5
|
+
let v3;
|
|
6
|
+
test.beforeEach(async () => {
|
|
7
|
+
v3 = new V3(v3TestConfig);
|
|
8
|
+
await v3.init();
|
|
9
|
+
});
|
|
10
|
+
test.afterEach(async () => {
|
|
11
|
+
await v3?.close?.().catch(() => {
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
test("locator.click() performs single click by default", async () => {
|
|
15
|
+
const page = v3.context.pages()[0];
|
|
16
|
+
await page.goto(
|
|
17
|
+
"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/"
|
|
18
|
+
);
|
|
19
|
+
await page.waitForLoadState("domcontentloaded");
|
|
20
|
+
const countDisplay = page.locator("#count");
|
|
21
|
+
const initialCount = await countDisplay.inputValue();
|
|
22
|
+
expect(initialCount).toBe("0");
|
|
23
|
+
const clickArea = page.locator("#textarea");
|
|
24
|
+
await clickArea.click();
|
|
25
|
+
const newCount = await countDisplay.inputValue();
|
|
26
|
+
expect(newCount).toBe("1");
|
|
27
|
+
});
|
|
28
|
+
test("locator.click() with clickCount: 2 performs double-click", async () => {
|
|
29
|
+
const page = v3.context.pages()[0];
|
|
30
|
+
await page.goto(
|
|
31
|
+
"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/"
|
|
32
|
+
);
|
|
33
|
+
await page.waitForLoadState("domcontentloaded");
|
|
34
|
+
const countDisplay = page.locator("#count");
|
|
35
|
+
const dcCountDisplay = page.locator("#dcCount");
|
|
36
|
+
const initialCount = await countDisplay.inputValue();
|
|
37
|
+
const initialDcCount = await dcCountDisplay.inputValue();
|
|
38
|
+
expect(initialCount).toBe("0");
|
|
39
|
+
expect(initialDcCount).toBe("0");
|
|
40
|
+
const clickArea = page.locator("#textarea");
|
|
41
|
+
await clickArea.click({ clickCount: 2 });
|
|
42
|
+
const newCount = await countDisplay.inputValue();
|
|
43
|
+
expect(newCount).toBe("2");
|
|
44
|
+
const newDcCount = await dcCountDisplay.inputValue();
|
|
45
|
+
expect(newDcCount).toBe("1");
|
|
46
|
+
});
|
|
47
|
+
test("locator.click() with clickCount: 3 performs triple-click", async () => {
|
|
48
|
+
const page = v3.context.pages()[0];
|
|
49
|
+
await page.goto(
|
|
50
|
+
"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/"
|
|
51
|
+
);
|
|
52
|
+
await page.waitForLoadState("domcontentloaded");
|
|
53
|
+
const countDisplay = page.locator("#count");
|
|
54
|
+
const initialCount = await countDisplay.inputValue();
|
|
55
|
+
expect(initialCount).toBe("0");
|
|
56
|
+
const clickArea = page.locator("#textarea");
|
|
57
|
+
await clickArea.click({ clickCount: 3 });
|
|
58
|
+
const newCount = await countDisplay.inputValue();
|
|
59
|
+
expect(newCount).toBe("3");
|
|
60
|
+
});
|
|
61
|
+
test("page.click() performs single click with coordinates", async () => {
|
|
62
|
+
const page = v3.context.pages()[0];
|
|
63
|
+
await page.goto(
|
|
64
|
+
"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/"
|
|
65
|
+
);
|
|
66
|
+
await page.waitForLoadState("domcontentloaded");
|
|
67
|
+
const countDisplay = page.locator("#count");
|
|
68
|
+
const initialCount = await countDisplay.inputValue();
|
|
69
|
+
expect(initialCount).toBe("0");
|
|
70
|
+
const clickArea = page.locator("#textarea");
|
|
71
|
+
const { x, y } = await clickArea.centroid();
|
|
72
|
+
await page.click(x, y);
|
|
73
|
+
const newCount = await countDisplay.inputValue();
|
|
74
|
+
expect(newCount).toBe("1");
|
|
75
|
+
});
|
|
76
|
+
test("page.click() with clickCount: 2 performs double-click", async () => {
|
|
77
|
+
const page = v3.context.pages()[0];
|
|
78
|
+
await page.goto(
|
|
79
|
+
"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/"
|
|
80
|
+
);
|
|
81
|
+
await page.waitForLoadState("domcontentloaded");
|
|
82
|
+
const countDisplay = page.locator("#count");
|
|
83
|
+
const dcCountDisplay = page.locator("#dcCount");
|
|
84
|
+
const initialCount = await countDisplay.inputValue();
|
|
85
|
+
const initialDcCount = await dcCountDisplay.inputValue();
|
|
86
|
+
expect(initialCount).toBe("0");
|
|
87
|
+
expect(initialDcCount).toBe("0");
|
|
88
|
+
const clickArea = page.locator("#textarea");
|
|
89
|
+
const { x, y } = await clickArea.centroid();
|
|
90
|
+
await page.click(x, y, { clickCount: 2 });
|
|
91
|
+
const newCount = await countDisplay.inputValue();
|
|
92
|
+
expect(newCount).toBe("2");
|
|
93
|
+
const newDcCount = await dcCountDisplay.inputValue();
|
|
94
|
+
expect(newDcCount).toBe("1");
|
|
95
|
+
});
|
|
96
|
+
test("page.click() with clickCount: 3 performs triple-click", async () => {
|
|
97
|
+
const page = v3.context.pages()[0];
|
|
98
|
+
await page.goto(
|
|
99
|
+
"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/"
|
|
100
|
+
);
|
|
101
|
+
await page.waitForLoadState("domcontentloaded");
|
|
102
|
+
const countDisplay = page.locator("#count");
|
|
103
|
+
const initialCount = await countDisplay.inputValue();
|
|
104
|
+
expect(initialCount).toBe("0");
|
|
105
|
+
const clickArea = page.locator("#textarea");
|
|
106
|
+
const { x, y } = await clickArea.centroid();
|
|
107
|
+
await page.click(x, y, { clickCount: 3 });
|
|
108
|
+
const newCount = await countDisplay.inputValue();
|
|
109
|
+
expect(newCount).toBe("3");
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=click-count.spec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/click-count.spec.ts"],
|
|
4
|
+
"sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"Locator and Page click methods\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"locator.click() performs single click by default\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/\",\n );\n\n // Wait for page to be fully loaded\n await page.waitForLoadState(\"domcontentloaded\");\n\n // Get initial count\n const countDisplay = page.locator(\"#count\");\n const initialCount = await countDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n\n // Perform single click on the textarea (the clickable area)\n const clickArea = page.locator(\"#textarea\");\n await clickArea.click();\n\n // Verify count incremented by 1\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"1\");\n });\n\n test(\"locator.click() with clickCount: 2 performs double-click\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/\",\n );\n\n // Wait for page to be fully loaded\n await page.waitForLoadState(\"domcontentloaded\");\n\n // Get initial counts\n const countDisplay = page.locator(\"#count\");\n const dcCountDisplay = page.locator(\"#dcCount\");\n\n const initialCount = await countDisplay.inputValue();\n const initialDcCount = await dcCountDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n expect(initialDcCount).toBe(\"0\");\n\n // Perform double-click on the textarea\n const clickArea = page.locator(\"#textarea\");\n await clickArea.click({ clickCount: 2 });\n\n // Verify both counters incremented\n // Regular count should be 2 (one for each click in the double-click)\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"2\");\n\n // Double-click count should be 1 (one double-click event detected)\n const newDcCount = await dcCountDisplay.inputValue();\n expect(newDcCount).toBe(\"1\");\n });\n\n test(\"locator.click() with clickCount: 3 performs triple-click\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/\",\n );\n\n // Wait for page to be fully loaded\n await page.waitForLoadState(\"domcontentloaded\");\n\n const countDisplay = page.locator(\"#count\");\n const initialCount = await countDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n\n // Perform triple-click on the textarea\n const clickArea = page.locator(\"#textarea\");\n await clickArea.click({ clickCount: 3 });\n\n // Verify count incremented by 3\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"3\");\n });\n\n test(\"page.click() performs single click with coordinates\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/\",\n );\n\n // Wait for page to be fully loaded\n await page.waitForLoadState(\"domcontentloaded\");\n\n // Get initial count\n const countDisplay = page.locator(\"#count\");\n const initialCount = await countDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n\n // Get the centroid of the textarea to click\n const clickArea = page.locator(\"#textarea\");\n const { x, y } = await clickArea.centroid();\n\n // Perform single click using page.click() with coordinates\n await page.click(x, y);\n\n // Verify count incremented by 1\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"1\");\n });\n\n test(\"page.click() with clickCount: 2 performs double-click\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/\",\n );\n\n // Wait for page to be fully loaded\n await page.waitForLoadState(\"domcontentloaded\");\n\n // Get initial counts\n const countDisplay = page.locator(\"#count\");\n const dcCountDisplay = page.locator(\"#dcCount\");\n\n const initialCount = await countDisplay.inputValue();\n const initialDcCount = await dcCountDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n expect(initialDcCount).toBe(\"0\");\n\n // Get the centroid of the textarea to click\n const clickArea = page.locator(\"#textarea\");\n const { x, y } = await clickArea.centroid();\n\n // Perform double-click using page.click() with coordinates\n await page.click(x, y, { clickCount: 2 });\n\n // Verify both counters incremented\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"2\");\n\n // Double-click count should be 1\n const newDcCount = await dcCountDisplay.inputValue();\n expect(newDcCount).toBe(\"1\");\n });\n\n test(\"page.click() with clickCount: 3 performs triple-click\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"https://browserbase.github.io/stagehand-eval-sites/sites/click-test/\",\n );\n\n // Wait for page to be fully loaded\n await page.waitForLoadState(\"domcontentloaded\");\n\n const countDisplay = page.locator(\"#count\");\n const initialCount = await countDisplay.inputValue();\n expect(initialCount).toBe(\"0\");\n\n // Get the centroid of the textarea to click\n const clickArea = page.locator(\"#textarea\");\n const { x, y } = await clickArea.centroid();\n\n // Perform triple-click using page.click() with coordinates\n await page.click(x, y, { clickCount: 3 });\n\n // Verify count incremented by 3\n const newCount = await countDisplay.inputValue();\n expect(newCount).toBe(\"3\");\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { test, expect } from "@playwright/test";
|
|
2
|
+
import { V3 } from "../v3.js";
|
|
3
|
+
import { v3DynamicTestConfig } from "./v3.dynamic.config.js";
|
|
4
|
+
import { closeV3 } from "./testUtils.js";
|
|
5
|
+
const PAGE_TARGET_COUNT = 5;
|
|
6
|
+
test.describe("connect to existing Browserbase session", () => {
|
|
7
|
+
test("new Stagehand instance reuses an existing Browserbase session", async () => {
|
|
8
|
+
const browserTarget = (process.env.STAGEHAND_BROWSER_TARGET ?? "local").toLowerCase();
|
|
9
|
+
const isBrowserbase = browserTarget === "browserbase";
|
|
10
|
+
test.skip(!isBrowserbase, "Requires STAGEHAND_BROWSER_TARGET=browserbase");
|
|
11
|
+
test.skip(
|
|
12
|
+
!process.env.BROWSERBASE_API_KEY || !process.env.BROWSERBASE_PROJECT_ID,
|
|
13
|
+
"BROWSERBASE credentials are required"
|
|
14
|
+
);
|
|
15
|
+
const initialStagehand = new V3({
|
|
16
|
+
...v3DynamicTestConfig,
|
|
17
|
+
disableAPI: true
|
|
18
|
+
});
|
|
19
|
+
await initialStagehand.init();
|
|
20
|
+
let resumedStagehand = null;
|
|
21
|
+
try {
|
|
22
|
+
const ctx = initialStagehand.context;
|
|
23
|
+
const initialPage = ctx.pages()[0];
|
|
24
|
+
expect(initialPage).toBeDefined();
|
|
25
|
+
for (let i = 0; i < PAGE_TARGET_COUNT; i++) {
|
|
26
|
+
await ctx.newPage(`https://example.com/?tab=${i}`);
|
|
27
|
+
}
|
|
28
|
+
await initialPage?.close();
|
|
29
|
+
await expect.poll(() => ctx.pages().length, { timeout: 15e3 }).toBe(PAGE_TARGET_COUNT);
|
|
30
|
+
const sessionUrl = initialStagehand.connectURL();
|
|
31
|
+
expect(sessionUrl).toBeTruthy();
|
|
32
|
+
resumedStagehand = new V3({
|
|
33
|
+
env: "LOCAL",
|
|
34
|
+
verbose: 0,
|
|
35
|
+
disablePino: true,
|
|
36
|
+
disableAPI: true,
|
|
37
|
+
logger: v3DynamicTestConfig.logger,
|
|
38
|
+
localBrowserLaunchOptions: {
|
|
39
|
+
cdpUrl: sessionUrl
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
await resumedStagehand.init();
|
|
43
|
+
await expect.poll(() => resumedStagehand.context.pages().length, {
|
|
44
|
+
timeout: 15e3
|
|
45
|
+
}).toBe(PAGE_TARGET_COUNT);
|
|
46
|
+
const resumedPagesCount = resumedStagehand.context.pages().length;
|
|
47
|
+
expect(resumedPagesCount).toBe(PAGE_TARGET_COUNT);
|
|
48
|
+
} finally {
|
|
49
|
+
await closeV3(resumedStagehand);
|
|
50
|
+
await closeV3(initialStagehand);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=connect-to-existing-browser.spec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/connect-to-existing-browser.spec.ts"],
|
|
4
|
+
"sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { closeV3 } from \"./testUtils.js\";\n\nconst PAGE_TARGET_COUNT = 5;\n\ntest.describe(\"connect to existing Browserbase session\", () => {\n test(\"new Stagehand instance reuses an existing Browserbase session\", async () => {\n const browserTarget = (\n process.env.STAGEHAND_BROWSER_TARGET ?? \"local\"\n ).toLowerCase();\n const isBrowserbase = browserTarget === \"browserbase\";\n test.skip(!isBrowserbase, \"Requires STAGEHAND_BROWSER_TARGET=browserbase\");\n test.skip(\n !process.env.BROWSERBASE_API_KEY || !process.env.BROWSERBASE_PROJECT_ID,\n \"BROWSERBASE credentials are required\",\n );\n\n const initialStagehand = new V3({\n ...v3DynamicTestConfig,\n disableAPI: true,\n });\n await initialStagehand.init();\n\n let resumedStagehand: V3 | null = null;\n\n try {\n const ctx = initialStagehand.context;\n const initialPage = ctx.pages()[0];\n expect(initialPage).toBeDefined();\n\n for (let i = 0; i < PAGE_TARGET_COUNT; i++) {\n await ctx.newPage(`https://example.com/?tab=${i}`);\n }\n\n await initialPage?.close();\n await expect\n .poll(() => ctx.pages().length, { timeout: 15_000 })\n .toBe(PAGE_TARGET_COUNT);\n\n const sessionUrl = initialStagehand.connectURL();\n expect(sessionUrl).toBeTruthy();\n\n resumedStagehand = new V3({\n env: \"LOCAL\",\n verbose: 0,\n disablePino: true,\n disableAPI: true,\n logger: v3DynamicTestConfig.logger,\n localBrowserLaunchOptions: {\n cdpUrl: sessionUrl,\n },\n });\n await resumedStagehand.init();\n\n await expect\n .poll(() => resumedStagehand!.context.pages().length, {\n timeout: 15_000,\n })\n .toBe(PAGE_TARGET_COUNT);\n\n const resumedPagesCount = resumedStagehand.context.pages().length;\n expect(resumedPagesCount).toBe(PAGE_TARGET_COUNT);\n } finally {\n await closeV3(resumedStagehand);\n await closeV3(initialStagehand);\n }\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,MAAM,cAAc;AAC7B,SAAS,UAAU;AACnB,SAAS,2BAA2B;AACpC,SAAS,eAAe;AAExB,MAAM,oBAAoB;AAE1B,KAAK,SAAS,2CAA2C,MAAM;AAC7D,OAAK,iEAAiE,YAAY;AAChF,UAAM,iBACJ,QAAQ,IAAI,4BAA4B,SACxC,YAAY;AACd,UAAM,gBAAgB,kBAAkB;AACxC,SAAK,KAAK,CAAC,eAAe,+CAA+C;AACzE,SAAK;AAAA,MACH,CAAC,QAAQ,IAAI,uBAAuB,CAAC,QAAQ,IAAI;AAAA,MACjD;AAAA,IACF;AAEA,UAAM,mBAAmB,IAAI,GAAG;AAAA,MAC9B,GAAG;AAAA,MACH,YAAY;AAAA,IACd,CAAC;AACD,UAAM,iBAAiB,KAAK;AAE5B,QAAI,mBAA8B;AAElC,QAAI;AACF,YAAM,MAAM,iBAAiB;AAC7B,YAAM,cAAc,IAAI,MAAM,EAAE,CAAC;AACjC,aAAO,WAAW,EAAE,YAAY;AAEhC,eAAS,IAAI,GAAG,IAAI,mBAAmB,KAAK;AAC1C,cAAM,IAAI,QAAQ,4BAA4B,CAAC,EAAE;AAAA,MACnD;AAEA,YAAM,aAAa,MAAM;AACzB,YAAM,OACH,KAAK,MAAM,IAAI,MAAM,EAAE,QAAQ,EAAE,SAAS,KAAO,CAAC,EAClD,KAAK,iBAAiB;AAEzB,YAAM,aAAa,iBAAiB,WAAW;AAC/C,aAAO,UAAU,EAAE,WAAW;AAE9B,yBAAmB,IAAI,GAAG;AAAA,QACxB,KAAK;AAAA,QACL,SAAS;AAAA,QACT,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,QAAQ,oBAAoB;AAAA,QAC5B,2BAA2B;AAAA,UACzB,QAAQ;AAAA,QACV;AAAA,MACF,CAAC;AACD,YAAM,iBAAiB,KAAK;AAE5B,YAAM,OACH,KAAK,MAAM,iBAAkB,QAAQ,MAAM,EAAE,QAAQ;AAAA,QACpD,SAAS;AAAA,MACX,CAAC,EACA,KAAK,iBAAiB;AAEzB,YAAM,oBAAoB,iBAAiB,QAAQ,MAAM,EAAE;AAC3D,aAAO,iBAAiB,EAAE,KAAK,iBAAiB;AAAA,IAClD,UAAE;AACA,YAAM,QAAQ,gBAAgB;AAC9B,YAAM,QAAQ,gBAAgB;AAAA,IAChC;AAAA,EACF,CAAC;AACH,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|