@browserbasehq/orca 3.1.0-patch.0 → 3.1.0-patch.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli.js +183 -0
- package/dist/cjs/cli.js.map +7 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +24956 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/lib/inference.d.ts +65 -0
- package/dist/cjs/lib/inferenceLogUtils.d.ts +12 -0
- package/dist/cjs/lib/logger.d.ts +69 -0
- package/dist/cjs/lib/modelUtils.d.ts +11 -0
- package/dist/cjs/lib/prompt.d.ts +14 -0
- package/dist/cjs/lib/utils.d.ts +68 -0
- package/dist/cjs/lib/v3/agent/AgentClient.d.ts +19 -0
- package/dist/cjs/lib/v3/agent/AgentProvider.d.ts +20 -0
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +57 -0
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.d.ts +74 -0
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.d.ts +71 -0
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +69 -0
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/act.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +5 -0
- package/dist/cjs/lib/v3/agent/tools/click.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/clickAndHold.d.ts +14 -0
- package/dist/cjs/lib/v3/agent/tools/dragAndDrop.d.ts +7 -0
- package/dist/cjs/lib/v3/agent/tools/extract.d.ts +20 -0
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/goto.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/tools/index.d.ts +92 -0
- package/dist/cjs/lib/v3/agent/tools/keys.d.ts +24 -0
- package/dist/cjs/lib/v3/agent/tools/navback.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/scroll.d.ts +19 -0
- package/dist/cjs/lib/v3/agent/tools/search.d.ts +15 -0
- package/dist/cjs/lib/v3/agent/tools/think.d.ts +6 -0
- package/dist/cjs/lib/v3/agent/tools/type.d.ts +7 -0
- package/dist/cjs/lib/v3/agent/tools/wait.d.ts +5 -0
- package/dist/cjs/lib/v3/agent/utils/actionMapping.d.ts +3 -0
- package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.d.ts +13 -0
- package/dist/cjs/lib/v3/agent/utils/cuaKeyMapping.d.ts +10 -0
- package/dist/cjs/lib/v3/agent/utils/googleCustomToolHandler.d.ts +25 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.d.ts +22 -0
- package/dist/cjs/lib/v3/agent/utils/imageCompression.d.ts +53 -0
- package/dist/cjs/lib/v3/agent/utils/messageProcessing.d.ts +12 -0
- package/dist/cjs/lib/v3/agent/utils/screenshotHandler.d.ts +10 -0
- package/dist/cjs/lib/v3/agent/utils/validateExperimentalFeatures.d.ts +26 -0
- package/dist/cjs/lib/v3/agent/utils/xpath.d.ts +11 -0
- package/dist/cjs/lib/v3/api.d.ts +86 -0
- package/dist/cjs/lib/v3/cache/ActCache.d.ts +23 -0
- package/dist/cjs/lib/v3/cache/AgentCache.d.ts +109 -0
- package/dist/cjs/lib/v3/cache/CacheStorage.d.ts +17 -0
- package/dist/cjs/lib/v3/cache/serverAgentCache.d.ts +7 -0
- package/dist/cjs/lib/v3/cache/utils.d.ts +15 -0
- package/dist/cjs/lib/v3/cli.d.ts +2 -0
- package/dist/cjs/lib/v3/dom/a11yScripts/index.d.ts +11 -0
- package/dist/cjs/lib/v3/dom/build/a11yScripts.generated.d.ts +16 -0
- package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.d.ts +52 -0
- package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/build/rerender-index.d.ts +0 -0
- package/dist/cjs/lib/v3/dom/build/rerender-index.js +1 -0
- package/dist/cjs/lib/v3/dom/build/screenshotScripts.generated.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/build/scriptV3Content.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/build/v3-index.d.ts +0 -0
- package/dist/cjs/lib/v3/dom/build/v3-index.js +1 -0
- package/dist/cjs/lib/v3/dom/genA11yScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genDomScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genLocatorScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/genScreenshotScripts.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/index.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/counts.d.ts +15 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/index.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/scripts.d.ts +37 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/selectors.d.ts +4 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/waitForSelector.d.ts +19 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathParser.d.ts +76 -0
- package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.d.ts +9 -0
- package/dist/cjs/lib/v3/dom/piercer.entry.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/piercer.runtime.d.ts +23 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.entry.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/rerenderMissingShadows.runtime.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/index.d.ts +1 -0
- package/dist/cjs/lib/v3/dom/screenshotScripts/resolveMaskRect.d.ts +8 -0
- package/dist/cjs/lib/v3/external_clients/aisdk.d.ts +11 -0
- package/dist/cjs/lib/v3/external_clients/customOpenAI.d.ts +18 -0
- package/dist/cjs/lib/v3/flowLogger.d.ts +139 -0
- package/dist/cjs/lib/v3/handlers/actHandler.d.ts +21 -0
- package/dist/cjs/lib/v3/handlers/extractHandler.d.ts +31 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +24 -0
- package/dist/cjs/lib/v3/handlers/handlerUtils/timeoutGuard.d.ts +2 -0
- package/dist/cjs/lib/v3/handlers/observeHandler.d.ts +17 -0
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +32 -0
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +33 -0
- package/dist/cjs/lib/v3/index.d.ts +18 -0
- package/dist/cjs/lib/v3/launch/browserbase.d.ts +7 -0
- package/dist/cjs/lib/v3/launch/local.d.ts +15 -0
- package/dist/cjs/lib/v3/llm/AnthropicClient.d.ts +16 -0
- package/dist/cjs/lib/v3/llm/CerebrasClient.d.ts +17 -0
- package/dist/cjs/lib/v3/llm/GoogleClient.d.ts +19 -0
- package/dist/cjs/lib/v3/llm/GroqClient.d.ts +17 -0
- package/dist/cjs/lib/v3/llm/LLMClient.d.ts +121 -0
- package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +13 -0
- package/dist/cjs/lib/v3/llm/OpenAIClient.d.ts +15 -0
- package/dist/cjs/lib/v3/llm/aisdk.d.ts +15 -0
- package/dist/cjs/lib/v3/logger.d.ts +9 -0
- package/dist/cjs/lib/v3/mcp/connection.d.ts +11 -0
- package/dist/cjs/lib/v3/mcp/utils.d.ts +3 -0
- package/dist/cjs/lib/v3/shutdown/cleanupLocal.d.ts +14 -0
- package/dist/cjs/lib/v3/shutdown/supervisor.d.ts +11 -0
- package/dist/cjs/lib/v3/shutdown/supervisorClient.d.ts +15 -0
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js +113 -0
- package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js +102 -0
- package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +374 -0
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js +354 -0
- package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js +247 -0
- package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js +105 -0
- package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js +126 -0
- package/dist/cjs/lib/v3/tests/agent-streaming.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js +44 -0
- package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/click-count.spec.js +147 -0
- package/dist/cjs/lib/v3/tests/click-count.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js +54 -0
- package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +176 -0
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js +53 -0
- package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/downloads.spec.js +80 -0
- package/dist/cjs/lib/v3/tests/downloads.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js +53 -0
- package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js +493 -0
- package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.child.js +92 -0
- package/dist/cjs/lib/v3/tests/keep-alive.child.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js +568 -0
- package/dist/cjs/lib/v3/tests/keep-alive.helpers.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js +15 -0
- package/dist/cjs/lib/v3/tests/keep-alive.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/keyboard.spec.js +296 -0
- package/dist/cjs/lib/v3/tests/keyboard.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js +159 -0
- package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +191 -0
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js +108 -0
- package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-count.spec.js +71 -0
- package/dist/cjs/lib/v3/tests/locator-count.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js +118 -0
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +136 -0
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js +157 -0
- package/dist/cjs/lib/v3/tests/locator-nth.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +242 -0
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js +547 -0
- package/dist/cjs/lib/v3/tests/logger-initialization.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js +269 -0
- package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/nested-div.spec.js +23 -0
- package/dist/cjs/lib/v3/tests/nested-div.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +90 -0
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-console.spec.js +56 -0
- package/dist/cjs/lib/v3/tests/page-console.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js +418 -0
- package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js +35 -0
- package/dist/cjs/lib/v3/tests/page-goto-response.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-hover.spec.js +167 -0
- package/dist/cjs/lib/v3/tests/page-hover.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js +295 -0
- package/dist/cjs/lib/v3/tests/page-screenshot.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js +182 -0
- package/dist/cjs/lib/v3/tests/page-scroll.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js +46 -0
- package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js +98 -0
- package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js +148 -0
- package/dist/cjs/lib/v3/tests/setinputfiles.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js +156 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js +156 -0
- package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/testUtils.js +54 -0
- package/dist/cjs/lib/v3/tests/testUtils.js.map +7 -0
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js +100 -0
- package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/timeouts.spec.js +32 -0
- package/dist/cjs/lib/v3/tests/timeouts.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js +65 -0
- package/dist/cjs/lib/v3/tests/user-data-dir.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.config.js +36 -0
- package/dist/cjs/lib/v3/tests/v3.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js +67 -0
- package/dist/cjs/lib/v3/tests/v3.dynamic.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js +61 -0
- package/dist/cjs/lib/v3/tests/v3.playwright.config.js.map +7 -0
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js +593 -0
- package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js +97 -0
- package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js.map +7 -0
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js +77 -0
- package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js.map +7 -0
- package/dist/cjs/lib/v3/timeoutConfig.d.ts +2 -0
- package/dist/cjs/lib/v3/types/private/agent.d.ts +6 -0
- package/dist/cjs/lib/v3/types/private/api.d.ts +11 -0
- package/dist/cjs/lib/v3/types/private/cache.d.ts +128 -0
- package/dist/cjs/lib/v3/types/private/evaluator.d.ts +40 -0
- package/dist/cjs/lib/v3/types/private/handlers.d.ts +38 -0
- package/dist/cjs/lib/v3/types/private/index.d.ts +7 -0
- package/dist/cjs/lib/v3/types/private/internal.d.ts +39 -0
- package/dist/cjs/lib/v3/types/private/locator.d.ts +9 -0
- package/dist/cjs/lib/v3/types/private/network.d.ts +34 -0
- package/dist/cjs/lib/v3/types/private/shutdown.d.ts +19 -0
- package/dist/cjs/lib/v3/types/private/shutdownErrors.d.ts +12 -0
- package/dist/cjs/lib/v3/types/private/snapshot.d.ts +117 -0
- package/dist/cjs/lib/v3/types/public/agent.d.ts +595 -0
- package/dist/cjs/lib/v3/types/public/api.d.ts +1211 -0
- package/dist/cjs/lib/v3/types/public/apiErrors.d.ts +18 -0
- package/dist/cjs/lib/v3/types/public/index.d.ts +12 -0
- package/dist/cjs/lib/v3/types/public/locator.d.ts +9 -0
- package/dist/cjs/lib/v3/types/public/logs.d.ts +23 -0
- package/dist/cjs/lib/v3/types/public/methods.d.ts +56 -0
- package/dist/cjs/lib/v3/types/public/metrics.d.ts +27 -0
- package/dist/cjs/lib/v3/types/public/model.d.ts +65 -0
- package/dist/cjs/lib/v3/types/public/options.d.ts +70 -0
- package/dist/cjs/lib/v3/types/public/page.d.ts +18 -0
- package/dist/cjs/lib/v3/types/public/screenshotTypes.d.ts +25 -0
- package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +152 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.d.ts +15 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/activeElement.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.d.ts +77 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.d.ts +7 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/domTree.d.ts +46 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +24 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/index.d.ts +4 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/sessions.d.ts +16 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.d.ts +28 -0
- package/dist/cjs/lib/v3/understudy/a11y/snapshot/xpathUtils.d.ts +26 -0
- package/dist/cjs/lib/v3/understudy/a11yInvocation.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/cdp.d.ts +69 -0
- package/dist/cjs/lib/v3/understudy/consoleMessage.d.ts +22 -0
- package/dist/cjs/lib/v3/understudy/context.d.ts +132 -0
- package/dist/cjs/lib/v3/understudy/deepLocator.d.ts +87 -0
- package/dist/cjs/lib/v3/understudy/executionContextRegistry.d.ts +15 -0
- package/dist/cjs/lib/v3/understudy/fileUploadUtils.d.ts +13 -0
- package/dist/cjs/lib/v3/understudy/frame.d.ts +69 -0
- package/dist/cjs/lib/v3/understudy/frameLocator.d.ts +50 -0
- package/dist/cjs/lib/v3/understudy/frameRegistry.d.ts +101 -0
- package/dist/cjs/lib/v3/understudy/initScripts.d.ts +2 -0
- package/dist/cjs/lib/v3/understudy/lifecycleWatcher.d.ts +64 -0
- package/dist/cjs/lib/v3/understudy/locator.d.ts +194 -0
- package/dist/cjs/lib/v3/understudy/locatorInvocation.d.ts +8 -0
- package/dist/cjs/lib/v3/understudy/navigationResponseTracker.d.ts +84 -0
- package/dist/cjs/lib/v3/understudy/networkManager.d.ts +53 -0
- package/dist/cjs/lib/v3/understudy/page.d.ts +354 -0
- package/dist/cjs/lib/v3/understudy/piercer.d.ts +4 -0
- package/dist/cjs/lib/v3/understudy/response.d.ts +137 -0
- package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +16 -0
- package/dist/cjs/lib/v3/understudy/selectorResolver.d.ts +38 -0
- package/dist/cjs/lib/v3/v3.d.ts +191 -0
- package/dist/cjs/lib/v3/zodCompat.d.ts +12 -0
- package/dist/cjs/lib/v3Evaluator.d.ts +19 -0
- package/dist/cjs/lib/version.d.ts +5 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/tests/browserbase-session-accessors.test.js +101 -0
- package/dist/cjs/tests/browserbase-session-accessors.test.js.map +7 -0
- package/dist/cjs/tests/cache-llm-resolution.test.js +187 -0
- package/dist/cjs/tests/cache-llm-resolution.test.js.map +7 -0
- package/dist/cjs/tests/helpers/mockCDPSession.js +50 -0
- package/dist/cjs/tests/helpers/mockCDPSession.js.map +7 -0
- package/dist/cjs/tests/llm-provider.test.js +57 -0
- package/dist/cjs/tests/llm-provider.test.js.map +7 -0
- package/dist/cjs/tests/model-deprecation.test.js +132 -0
- package/dist/cjs/tests/model-deprecation.test.js.map +7 -0
- package/dist/cjs/tests/page-snapshot.test.js +58 -0
- package/dist/cjs/tests/page-snapshot.test.js.map +7 -0
- package/dist/cjs/tests/public-api/export-surface.test.js +76 -0
- package/dist/cjs/tests/public-api/export-surface.test.js.map +7 -0
- package/dist/cjs/tests/public-api/llm-and-agents.test.js +150 -0
- package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +7 -0
- package/dist/cjs/tests/public-api/public-error-types.test.js +104 -0
- package/dist/cjs/tests/public-api/public-error-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/public-types.test.js +74 -0
- package/dist/cjs/tests/public-api/public-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/runtime-utils.test.js +53 -0
- package/dist/cjs/tests/public-api/runtime-utils.test.js.map +7 -0
- package/dist/cjs/tests/public-api/schema-utils.test.js +100 -0
- package/dist/cjs/tests/public-api/schema-utils.test.js.map +7 -0
- package/dist/cjs/tests/public-api/timeout-error-types.test.js +103 -0
- package/dist/cjs/tests/public-api/timeout-error-types.test.js.map +7 -0
- package/dist/cjs/tests/public-api/tool-type-export.test.js +47 -0
- package/dist/cjs/tests/public-api/tool-type-export.test.js.map +7 -0
- package/dist/cjs/tests/public-api/v3-core.test.js +104 -0
- package/dist/cjs/tests/public-api/v3-core.test.js.map +7 -0
- package/dist/cjs/tests/safety-confirmation.test.js +134 -0
- package/dist/cjs/tests/safety-confirmation.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js +370 -0
- package/dist/cjs/tests/snapshot-a11y-resolvers.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js +294 -0
- package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js +403 -0
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-cbor.test.js +197 -0
- package/dist/cjs/tests/snapshot-cbor.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js +246 -0
- package/dist/cjs/tests/snapshot-dom-session-builders.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js +104 -0
- package/dist/cjs/tests/snapshot-dom-tree-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js +45 -0
- package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-frame-merge.test.js +388 -0
- package/dist/cjs/tests/snapshot-frame-merge.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js +106 -0
- package/dist/cjs/tests/snapshot-tree-format-utils.test.js.map +7 -0
- package/dist/cjs/tests/snapshot-xpath-utils.test.js +74 -0
- package/dist/cjs/tests/snapshot-xpath-utils.test.js.map +7 -0
- package/dist/cjs/tests/timeout-handlers.test.js +864 -0
- package/dist/cjs/tests/timeout-handlers.test.js.map +7 -0
- package/dist/cjs/tests/xpath-parser.test.js +314 -0
- package/dist/cjs/tests/xpath-parser.test.js.map +7 -0
- package/dist/cjs/tests/xpath-resolver.test.js +70 -0
- package/dist/cjs/tests/xpath-resolver.test.js.map +7 -0
- package/dist/cjs/tests/zod-enum-compatibility.test.js +119 -0
- package/dist/cjs/tests/zod-enum-compatibility.test.js.map +7 -0
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/lib/v3/api.d.ts +16 -1
- package/dist/esm/lib/v3/api.js +41 -5
- package/dist/esm/lib/v3/api.js.map +1 -1
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +0 -3
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +22 -20
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
- package/dist/esm/lib/v3/llm/aisdk.js +5 -2
- package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/esm/lib/v3/types/public/api.d.ts +8 -0
- package/dist/esm/lib/v3/types/public/api.js +5 -3
- package/dist/esm/lib/v3/types/public/api.js.map +1 -1
- package/dist/esm/lib/v3/types/public/index.d.ts +1 -0
- package/dist/esm/lib/v3/types/public/index.js.map +1 -1
- package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +3 -0
- package/dist/esm/lib/v3/types/public/sdkErrors.js +12 -6
- package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -1
- package/dist/esm/tests/api-multiregion.test.js +73 -0
- package/dist/esm/tests/api-multiregion.test.js.map +7 -0
- package/dist/esm/tests/public-api/public-error-types.test.js +2 -1
- package/dist/esm/tests/public-api/public-error-types.test.js.map +2 -2
- package/dist/esm/tests/understudy-command-exception.test.js +55 -0
- package/dist/esm/tests/understudy-command-exception.test.js.map +7 -0
- package/package.json +1 -1
|
@@ -0,0 +1,547 @@
|
|
|
1
|
+
var import_test = require("@playwright/test");
|
|
2
|
+
var import_logger = require("../logger.js");
|
|
3
|
+
import_test.test.describe("V3 Logger Instance Routing", () => {
|
|
4
|
+
import_test.test.afterEach(() => {
|
|
5
|
+
});
|
|
6
|
+
(0, import_test.test)("bindInstanceLogger routes logs to correct instance", () => {
|
|
7
|
+
const instanceId = "test-instance-001";
|
|
8
|
+
const capturedLogs = [];
|
|
9
|
+
(0, import_logger.bindInstanceLogger)(instanceId, (line) => {
|
|
10
|
+
capturedLogs.push(line);
|
|
11
|
+
});
|
|
12
|
+
try {
|
|
13
|
+
(0, import_logger.withInstanceLogContext)(instanceId, () => {
|
|
14
|
+
(0, import_logger.v3Logger)({
|
|
15
|
+
category: "test",
|
|
16
|
+
message: "Test message for instance",
|
|
17
|
+
level: 1
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
(0, import_test.expect)(capturedLogs.length).toBe(1);
|
|
21
|
+
(0, import_test.expect)(capturedLogs[0].message).toBe("Test message for instance");
|
|
22
|
+
} finally {
|
|
23
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
(0, import_test.test)("unbindInstanceLogger stops routing", () => {
|
|
27
|
+
const instanceId = "test-instance-002";
|
|
28
|
+
const capturedLogs = [];
|
|
29
|
+
const consoleOutput = [];
|
|
30
|
+
const originalConsoleLog = console.log;
|
|
31
|
+
try {
|
|
32
|
+
console.log = (msg) => {
|
|
33
|
+
consoleOutput.push(msg);
|
|
34
|
+
};
|
|
35
|
+
(0, import_logger.bindInstanceLogger)(instanceId, (line) => {
|
|
36
|
+
capturedLogs.push(line);
|
|
37
|
+
});
|
|
38
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
39
|
+
(0, import_logger.withInstanceLogContext)(instanceId, () => {
|
|
40
|
+
(0, import_logger.v3Logger)({
|
|
41
|
+
category: "test",
|
|
42
|
+
message: "After unbind",
|
|
43
|
+
level: 1
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
(0, import_test.expect)(capturedLogs.length).toBe(0);
|
|
47
|
+
(0, import_test.expect)(consoleOutput.length).toBeGreaterThan(0);
|
|
48
|
+
} finally {
|
|
49
|
+
console.log = originalConsoleLog;
|
|
50
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
(0, import_test.test)("multiple instances have isolated log routing", () => {
|
|
54
|
+
const instance1Id = "test-instance-1";
|
|
55
|
+
const instance2Id = "test-instance-2";
|
|
56
|
+
const instance1Logs = [];
|
|
57
|
+
const instance2Logs = [];
|
|
58
|
+
(0, import_logger.bindInstanceLogger)(instance1Id, (line) => instance1Logs.push(line));
|
|
59
|
+
(0, import_logger.bindInstanceLogger)(instance2Id, (line) => instance2Logs.push(line));
|
|
60
|
+
try {
|
|
61
|
+
(0, import_logger.withInstanceLogContext)(instance1Id, () => {
|
|
62
|
+
(0, import_logger.v3Logger)({
|
|
63
|
+
category: "test",
|
|
64
|
+
message: "From instance 1",
|
|
65
|
+
level: 1
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
(0, import_logger.withInstanceLogContext)(instance2Id, () => {
|
|
69
|
+
(0, import_logger.v3Logger)({
|
|
70
|
+
category: "test",
|
|
71
|
+
message: "From instance 2",
|
|
72
|
+
level: 1
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
(0, import_test.expect)(instance1Logs.length).toBe(1);
|
|
76
|
+
(0, import_test.expect)(instance2Logs.length).toBe(1);
|
|
77
|
+
(0, import_test.expect)(instance1Logs[0].message).toBe("From instance 1");
|
|
78
|
+
(0, import_test.expect)(instance2Logs[0].message).toBe("From instance 2");
|
|
79
|
+
} finally {
|
|
80
|
+
(0, import_logger.unbindInstanceLogger)(instance1Id);
|
|
81
|
+
(0, import_logger.unbindInstanceLogger)(instance2Id);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
(0, import_test.test)("v3Logger falls back to console when no instance context", () => {
|
|
85
|
+
const capturedLogs = [];
|
|
86
|
+
const originalConsoleLog = console.log;
|
|
87
|
+
try {
|
|
88
|
+
console.log = (msg) => {
|
|
89
|
+
capturedLogs.push(msg);
|
|
90
|
+
};
|
|
91
|
+
(0, import_logger.v3Logger)({
|
|
92
|
+
category: "test",
|
|
93
|
+
message: "Console fallback log",
|
|
94
|
+
level: 1
|
|
95
|
+
});
|
|
96
|
+
(0, import_test.expect)(capturedLogs.length).toBeGreaterThan(0);
|
|
97
|
+
const logOutput = capturedLogs.join("\n");
|
|
98
|
+
(0, import_test.expect)(logOutput).toContain("Console fallback log");
|
|
99
|
+
} finally {
|
|
100
|
+
console.log = originalConsoleLog;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
(0, import_test.test)("v3Logger falls back to console when instance logger throws", () => {
|
|
104
|
+
const instanceId = "failing-instance";
|
|
105
|
+
const capturedConsoleLogs = [];
|
|
106
|
+
const originalConsoleLog = console.log;
|
|
107
|
+
try {
|
|
108
|
+
console.log = (msg) => {
|
|
109
|
+
capturedConsoleLogs.push(msg);
|
|
110
|
+
};
|
|
111
|
+
(0, import_logger.bindInstanceLogger)(instanceId, () => {
|
|
112
|
+
throw new Error("Instance logger failed");
|
|
113
|
+
});
|
|
114
|
+
(0, import_logger.withInstanceLogContext)(instanceId, () => {
|
|
115
|
+
(0, import_test.expect)(() => {
|
|
116
|
+
(0, import_logger.v3Logger)({
|
|
117
|
+
category: "test",
|
|
118
|
+
message: "Test with failing instance logger",
|
|
119
|
+
level: 1
|
|
120
|
+
});
|
|
121
|
+
}).not.toThrow();
|
|
122
|
+
});
|
|
123
|
+
(0, import_test.expect)(capturedConsoleLogs.length).toBeGreaterThan(0);
|
|
124
|
+
const logOutput = capturedConsoleLogs.join("\n");
|
|
125
|
+
(0, import_test.expect)(logOutput).toContain("Test with failing instance logger");
|
|
126
|
+
} finally {
|
|
127
|
+
console.log = originalConsoleLog;
|
|
128
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
(0, import_test.test)("withInstanceLogContext nests properly", () => {
|
|
132
|
+
const outerInstanceId = "outer-instance";
|
|
133
|
+
const innerInstanceId = "inner-instance";
|
|
134
|
+
const outerLogs = [];
|
|
135
|
+
const innerLogs = [];
|
|
136
|
+
(0, import_logger.bindInstanceLogger)(outerInstanceId, (line) => outerLogs.push(line));
|
|
137
|
+
(0, import_logger.bindInstanceLogger)(innerInstanceId, (line) => innerLogs.push(line));
|
|
138
|
+
try {
|
|
139
|
+
(0, import_logger.withInstanceLogContext)(outerInstanceId, () => {
|
|
140
|
+
(0, import_logger.v3Logger)({
|
|
141
|
+
category: "test",
|
|
142
|
+
message: "Outer context",
|
|
143
|
+
level: 1
|
|
144
|
+
});
|
|
145
|
+
(0, import_logger.withInstanceLogContext)(innerInstanceId, () => {
|
|
146
|
+
(0, import_logger.v3Logger)({
|
|
147
|
+
category: "test",
|
|
148
|
+
message: "Inner context",
|
|
149
|
+
level: 1
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
(0, import_logger.v3Logger)({
|
|
153
|
+
category: "test",
|
|
154
|
+
message: "Back to outer context",
|
|
155
|
+
level: 1
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
(0, import_test.expect)(outerLogs.length).toBe(2);
|
|
159
|
+
(0, import_test.expect)(outerLogs[0].message).toBe("Outer context");
|
|
160
|
+
(0, import_test.expect)(outerLogs[1].message).toBe("Back to outer context");
|
|
161
|
+
(0, import_test.expect)(innerLogs.length).toBe(1);
|
|
162
|
+
(0, import_test.expect)(innerLogs[0].message).toBe("Inner context");
|
|
163
|
+
} finally {
|
|
164
|
+
(0, import_logger.unbindInstanceLogger)(outerInstanceId);
|
|
165
|
+
(0, import_logger.unbindInstanceLogger)(innerInstanceId);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
(0, import_test.test)("withInstanceLogContext returns function result", () => {
|
|
169
|
+
const instanceId = "return-test-instance";
|
|
170
|
+
(0, import_logger.bindInstanceLogger)(instanceId, () => {
|
|
171
|
+
});
|
|
172
|
+
try {
|
|
173
|
+
const result = (0, import_logger.withInstanceLogContext)(instanceId, () => {
|
|
174
|
+
return { success: true, value: 42 };
|
|
175
|
+
});
|
|
176
|
+
(0, import_test.expect)(result).toEqual({ success: true, value: 42 });
|
|
177
|
+
} finally {
|
|
178
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
(0, import_test.test)("withInstanceLogContext works with async functions", async () => {
|
|
182
|
+
const instanceId = "async-test-instance";
|
|
183
|
+
const capturedLogs = [];
|
|
184
|
+
(0, import_logger.bindInstanceLogger)(instanceId, (line) => capturedLogs.push(line));
|
|
185
|
+
try {
|
|
186
|
+
const asyncResult = await (0, import_logger.withInstanceLogContext)(instanceId, async () => {
|
|
187
|
+
(0, import_logger.v3Logger)({
|
|
188
|
+
category: "test",
|
|
189
|
+
message: "Log from async context",
|
|
190
|
+
level: 1
|
|
191
|
+
});
|
|
192
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
193
|
+
(0, import_logger.v3Logger)({
|
|
194
|
+
category: "test",
|
|
195
|
+
message: "Log after await",
|
|
196
|
+
level: 1
|
|
197
|
+
});
|
|
198
|
+
return "async result";
|
|
199
|
+
});
|
|
200
|
+
(0, import_test.expect)(asyncResult).toBe("async result");
|
|
201
|
+
(0, import_test.expect)(capturedLogs.length).toBe(2);
|
|
202
|
+
(0, import_test.expect)(capturedLogs[0].message).toBe("Log from async context");
|
|
203
|
+
(0, import_test.expect)(capturedLogs[1].message).toBe("Log after await");
|
|
204
|
+
} finally {
|
|
205
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
(0, import_test.test)("console fallback formats different log levels correctly", () => {
|
|
209
|
+
const consoleOutput = [];
|
|
210
|
+
const originalConsoleLog = console.log;
|
|
211
|
+
const originalConsoleError = console.error;
|
|
212
|
+
const originalConsoleDebug = console.debug;
|
|
213
|
+
try {
|
|
214
|
+
console.log = (msg) => {
|
|
215
|
+
consoleOutput.push({ level: "log", msg });
|
|
216
|
+
};
|
|
217
|
+
console.error = (msg) => {
|
|
218
|
+
consoleOutput.push({ level: "error", msg });
|
|
219
|
+
};
|
|
220
|
+
console.debug = (msg) => {
|
|
221
|
+
consoleOutput.push({ level: "debug", msg });
|
|
222
|
+
};
|
|
223
|
+
(0, import_logger.v3Logger)({
|
|
224
|
+
category: "test",
|
|
225
|
+
message: "Error message",
|
|
226
|
+
level: 0
|
|
227
|
+
});
|
|
228
|
+
(0, import_logger.v3Logger)({
|
|
229
|
+
category: "test",
|
|
230
|
+
message: "Info message",
|
|
231
|
+
level: 1
|
|
232
|
+
});
|
|
233
|
+
(0, import_logger.v3Logger)({
|
|
234
|
+
category: "test",
|
|
235
|
+
message: "Debug message",
|
|
236
|
+
level: 2
|
|
237
|
+
});
|
|
238
|
+
(0, import_test.expect)(consoleOutput.length).toBe(3);
|
|
239
|
+
(0, import_test.expect)(consoleOutput[0].level).toBe("error");
|
|
240
|
+
(0, import_test.expect)(consoleOutput[0].msg).toContain("ERROR");
|
|
241
|
+
(0, import_test.expect)(consoleOutput[0].msg).toContain("Error message");
|
|
242
|
+
(0, import_test.expect)(consoleOutput[1].level).toBe("log");
|
|
243
|
+
(0, import_test.expect)(consoleOutput[1].msg).toContain("INFO");
|
|
244
|
+
(0, import_test.expect)(consoleOutput[1].msg).toContain("Info message");
|
|
245
|
+
(0, import_test.expect)(consoleOutput[2].level).toBe("debug");
|
|
246
|
+
(0, import_test.expect)(consoleOutput[2].msg).toContain("DEBUG");
|
|
247
|
+
(0, import_test.expect)(consoleOutput[2].msg).toContain("Debug message");
|
|
248
|
+
} finally {
|
|
249
|
+
console.log = originalConsoleLog;
|
|
250
|
+
console.error = originalConsoleError;
|
|
251
|
+
console.debug = originalConsoleDebug;
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
(0, import_test.test)("console fallback formats auxiliary data", () => {
|
|
255
|
+
const consoleOutput = [];
|
|
256
|
+
const originalConsoleLog = console.log;
|
|
257
|
+
try {
|
|
258
|
+
console.log = (msg) => {
|
|
259
|
+
consoleOutput.push(msg);
|
|
260
|
+
};
|
|
261
|
+
(0, import_logger.v3Logger)({
|
|
262
|
+
category: "test",
|
|
263
|
+
message: "Message with auxiliary",
|
|
264
|
+
level: 1,
|
|
265
|
+
auxiliary: {
|
|
266
|
+
stringValue: { value: "test", type: "string" },
|
|
267
|
+
integerValue: { value: "42", type: "integer" },
|
|
268
|
+
objectValue: {
|
|
269
|
+
value: JSON.stringify({ nested: "data" }),
|
|
270
|
+
type: "object"
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
(0, import_test.expect)(consoleOutput.length).toBe(1);
|
|
275
|
+
const output = consoleOutput[0];
|
|
276
|
+
(0, import_test.expect)(output).toContain("Message with auxiliary");
|
|
277
|
+
(0, import_test.expect)(output).toContain("stringValue");
|
|
278
|
+
(0, import_test.expect)(output).toContain("integerValue");
|
|
279
|
+
(0, import_test.expect)(output).toContain("objectValue");
|
|
280
|
+
} finally {
|
|
281
|
+
console.log = originalConsoleLog;
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
(0, import_test.test)("concurrent instances don't interfere", () => {
|
|
285
|
+
const instances = Array.from({ length: 10 }, (_, i) => `instance-${i}`);
|
|
286
|
+
const logsByInstance = /* @__PURE__ */ new Map();
|
|
287
|
+
instances.forEach((id) => {
|
|
288
|
+
const logs = [];
|
|
289
|
+
logsByInstance.set(id, logs);
|
|
290
|
+
(0, import_logger.bindInstanceLogger)(id, (line) => logs.push(line));
|
|
291
|
+
});
|
|
292
|
+
try {
|
|
293
|
+
instances.forEach((id, index) => {
|
|
294
|
+
(0, import_logger.withInstanceLogContext)(id, () => {
|
|
295
|
+
(0, import_logger.v3Logger)({
|
|
296
|
+
category: "test",
|
|
297
|
+
message: `Message from ${id}`,
|
|
298
|
+
level: 1,
|
|
299
|
+
auxiliary: {
|
|
300
|
+
index: { value: String(index), type: "integer" }
|
|
301
|
+
}
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
instances.forEach((id) => {
|
|
306
|
+
const logs = logsByInstance.get(id);
|
|
307
|
+
(0, import_test.expect)(logs.length).toBe(1);
|
|
308
|
+
(0, import_test.expect)(logs[0].message).toBe(`Message from ${id}`);
|
|
309
|
+
});
|
|
310
|
+
} finally {
|
|
311
|
+
instances.forEach((id) => (0, import_logger.unbindInstanceLogger)(id));
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
import_test.test.describe("V3 Logger with External Logger (Production Pattern)", () => {
|
|
316
|
+
import_test.test.afterEach(() => {
|
|
317
|
+
});
|
|
318
|
+
(0, import_test.test)("external logger receives all logs from v3Logger", () => {
|
|
319
|
+
const instanceId = "v3-instance-with-external";
|
|
320
|
+
const externalLogs = [];
|
|
321
|
+
const externalLogger = (line) => {
|
|
322
|
+
externalLogs.push(line);
|
|
323
|
+
};
|
|
324
|
+
(0, import_logger.bindInstanceLogger)(instanceId, externalLogger);
|
|
325
|
+
try {
|
|
326
|
+
(0, import_logger.withInstanceLogContext)(instanceId, () => {
|
|
327
|
+
(0, import_logger.v3Logger)({
|
|
328
|
+
category: "a11y/snapshot",
|
|
329
|
+
message: "Capturing hybrid snapshot",
|
|
330
|
+
level: 0
|
|
331
|
+
});
|
|
332
|
+
(0, import_logger.v3Logger)({
|
|
333
|
+
category: "handlers/act",
|
|
334
|
+
message: "Executing action",
|
|
335
|
+
level: 1,
|
|
336
|
+
auxiliary: {
|
|
337
|
+
action: { value: "click", type: "string" }
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
(0, import_logger.v3Logger)({
|
|
341
|
+
category: "debug",
|
|
342
|
+
message: "Debug details",
|
|
343
|
+
level: 2
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
(0, import_test.expect)(externalLogs.length).toBe(3);
|
|
347
|
+
(0, import_test.expect)(externalLogs[0].message).toBe("Capturing hybrid snapshot");
|
|
348
|
+
(0, import_test.expect)(externalLogs[1].message).toBe("Executing action");
|
|
349
|
+
(0, import_test.expect)(externalLogs[2].message).toBe("Debug details");
|
|
350
|
+
} finally {
|
|
351
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
(0, import_test.test)("StagehandLogger wrapper forwards to external logger", () => {
|
|
355
|
+
const instanceId = "v3-with-stagehand-wrapper";
|
|
356
|
+
const externalLogs = [];
|
|
357
|
+
const mockStagehandLogger = {
|
|
358
|
+
log: (line) => {
|
|
359
|
+
externalLogs.push(line);
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
(0, import_logger.bindInstanceLogger)(instanceId, (line) => mockStagehandLogger.log(line));
|
|
363
|
+
try {
|
|
364
|
+
(0, import_logger.withInstanceLogContext)(instanceId, () => {
|
|
365
|
+
(0, import_logger.v3Logger)({
|
|
366
|
+
category: "test",
|
|
367
|
+
message: "Log through StagehandLogger wrapper",
|
|
368
|
+
level: 1
|
|
369
|
+
});
|
|
370
|
+
});
|
|
371
|
+
(0, import_test.expect)(externalLogs.length).toBe(1);
|
|
372
|
+
(0, import_test.expect)(externalLogs[0].message).toBe(
|
|
373
|
+
"Log through StagehandLogger wrapper"
|
|
374
|
+
);
|
|
375
|
+
} finally {
|
|
376
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
(0, import_test.test)("multiple V3 instances with different external loggers", () => {
|
|
380
|
+
const instance1Id = "v3-instance-1";
|
|
381
|
+
const instance2Id = "v3-instance-2";
|
|
382
|
+
const external1Logs = [];
|
|
383
|
+
const external2Logs = [];
|
|
384
|
+
(0, import_logger.bindInstanceLogger)(instance1Id, (line) => external1Logs.push(line));
|
|
385
|
+
(0, import_logger.bindInstanceLogger)(instance2Id, (line) => external2Logs.push(line));
|
|
386
|
+
try {
|
|
387
|
+
(0, import_logger.withInstanceLogContext)(instance1Id, () => {
|
|
388
|
+
(0, import_logger.v3Logger)({
|
|
389
|
+
category: "instance1",
|
|
390
|
+
message: "Instance 1 activity",
|
|
391
|
+
level: 1
|
|
392
|
+
});
|
|
393
|
+
});
|
|
394
|
+
(0, import_logger.withInstanceLogContext)(instance2Id, () => {
|
|
395
|
+
(0, import_logger.v3Logger)({
|
|
396
|
+
category: "instance2",
|
|
397
|
+
message: "Instance 2 activity",
|
|
398
|
+
level: 1
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
(0, import_test.expect)(external1Logs.length).toBe(1);
|
|
402
|
+
(0, import_test.expect)(external2Logs.length).toBe(1);
|
|
403
|
+
(0, import_test.expect)(external1Logs[0].message).toBe("Instance 1 activity");
|
|
404
|
+
(0, import_test.expect)(external2Logs[0].message).toBe("Instance 2 activity");
|
|
405
|
+
} finally {
|
|
406
|
+
(0, import_logger.unbindInstanceLogger)(instance1Id);
|
|
407
|
+
(0, import_logger.unbindInstanceLogger)(instance2Id);
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
(0, import_test.test)("external logger receives logs with auxiliary data preserved", () => {
|
|
411
|
+
const instanceId = "v3-with-auxiliary";
|
|
412
|
+
const externalLogs = [];
|
|
413
|
+
(0, import_logger.bindInstanceLogger)(instanceId, (line) => externalLogs.push(line));
|
|
414
|
+
try {
|
|
415
|
+
(0, import_logger.withInstanceLogContext)(instanceId, () => {
|
|
416
|
+
(0, import_logger.v3Logger)({
|
|
417
|
+
category: "extract",
|
|
418
|
+
message: "Extracting data",
|
|
419
|
+
level: 1,
|
|
420
|
+
auxiliary: {
|
|
421
|
+
selector: { value: "xpath=/html/body", type: "string" },
|
|
422
|
+
timeout: { value: "5000", type: "integer" },
|
|
423
|
+
retries: { value: "3", type: "integer" },
|
|
424
|
+
metadata: {
|
|
425
|
+
value: JSON.stringify({ key: "value" }),
|
|
426
|
+
type: "object"
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
});
|
|
430
|
+
});
|
|
431
|
+
(0, import_test.expect)(externalLogs.length).toBe(1);
|
|
432
|
+
const log = externalLogs[0];
|
|
433
|
+
(0, import_test.expect)(log.auxiliary).toBeDefined();
|
|
434
|
+
(0, import_test.expect)(log.auxiliary?.selector?.value).toBe("xpath=/html/body");
|
|
435
|
+
(0, import_test.expect)(log.auxiliary?.timeout?.value).toBe("5000");
|
|
436
|
+
(0, import_test.expect)(log.auxiliary?.retries?.value).toBe("3");
|
|
437
|
+
(0, import_test.expect)(log.auxiliary?.metadata?.type).toBe("object");
|
|
438
|
+
} finally {
|
|
439
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
(0, import_test.test)("external logger handles rapid concurrent logs", () => {
|
|
443
|
+
const instanceId = "v3-rapid-logs";
|
|
444
|
+
const externalLogs = [];
|
|
445
|
+
(0, import_logger.bindInstanceLogger)(instanceId, (line) => externalLogs.push(line));
|
|
446
|
+
try {
|
|
447
|
+
(0, import_logger.withInstanceLogContext)(instanceId, () => {
|
|
448
|
+
for (let i = 0; i < 50; i++) {
|
|
449
|
+
(0, import_logger.v3Logger)({
|
|
450
|
+
category: "perf",
|
|
451
|
+
message: `Operation ${i}`,
|
|
452
|
+
level: 2,
|
|
453
|
+
auxiliary: {
|
|
454
|
+
iteration: { value: String(i), type: "integer" }
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
});
|
|
459
|
+
(0, import_test.expect)(externalLogs.length).toBe(50);
|
|
460
|
+
(0, import_test.expect)(externalLogs[0].message).toBe("Operation 0");
|
|
461
|
+
(0, import_test.expect)(externalLogs[49].message).toBe("Operation 49");
|
|
462
|
+
} finally {
|
|
463
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
(0, import_test.test)("external logger can filter by log level", () => {
|
|
467
|
+
const instanceId = "v3-with-filtering";
|
|
468
|
+
const errorLogs = [];
|
|
469
|
+
const filteringLogger = (line) => {
|
|
470
|
+
if (line.level === 0) {
|
|
471
|
+
errorLogs.push(line);
|
|
472
|
+
}
|
|
473
|
+
};
|
|
474
|
+
(0, import_logger.bindInstanceLogger)(instanceId, filteringLogger);
|
|
475
|
+
try {
|
|
476
|
+
(0, import_logger.withInstanceLogContext)(instanceId, () => {
|
|
477
|
+
(0, import_logger.v3Logger)({
|
|
478
|
+
category: "test",
|
|
479
|
+
message: "Info message",
|
|
480
|
+
level: 1
|
|
481
|
+
});
|
|
482
|
+
(0, import_logger.v3Logger)({
|
|
483
|
+
category: "test",
|
|
484
|
+
message: "Error message",
|
|
485
|
+
level: 0
|
|
486
|
+
});
|
|
487
|
+
(0, import_logger.v3Logger)({
|
|
488
|
+
category: "test",
|
|
489
|
+
message: "Debug message",
|
|
490
|
+
level: 2
|
|
491
|
+
});
|
|
492
|
+
(0, import_logger.v3Logger)({
|
|
493
|
+
category: "test",
|
|
494
|
+
message: "Another error",
|
|
495
|
+
level: 0
|
|
496
|
+
});
|
|
497
|
+
});
|
|
498
|
+
(0, import_test.expect)(errorLogs.length).toBe(2);
|
|
499
|
+
(0, import_test.expect)(errorLogs[0].message).toBe("Error message");
|
|
500
|
+
(0, import_test.expect)(errorLogs[1].message).toBe("Another error");
|
|
501
|
+
} finally {
|
|
502
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
(0, import_test.test)("external logger persists across async operations", async () => {
|
|
506
|
+
const instanceId = "v3-async-ops";
|
|
507
|
+
const externalLogs = [];
|
|
508
|
+
(0, import_logger.bindInstanceLogger)(instanceId, (line) => externalLogs.push(line));
|
|
509
|
+
try {
|
|
510
|
+
await (0, import_logger.withInstanceLogContext)(instanceId, async () => {
|
|
511
|
+
(0, import_logger.v3Logger)({
|
|
512
|
+
category: "async",
|
|
513
|
+
message: "Before async operation",
|
|
514
|
+
level: 1
|
|
515
|
+
});
|
|
516
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
517
|
+
(0, import_logger.v3Logger)({
|
|
518
|
+
category: "async",
|
|
519
|
+
message: "After async operation",
|
|
520
|
+
level: 1
|
|
521
|
+
});
|
|
522
|
+
await Promise.all([
|
|
523
|
+
Promise.resolve().then(
|
|
524
|
+
() => (0, import_logger.v3Logger)({
|
|
525
|
+
category: "async",
|
|
526
|
+
message: "Parallel operation 1",
|
|
527
|
+
level: 1
|
|
528
|
+
})
|
|
529
|
+
),
|
|
530
|
+
Promise.resolve().then(
|
|
531
|
+
() => (0, import_logger.v3Logger)({
|
|
532
|
+
category: "async",
|
|
533
|
+
message: "Parallel operation 2",
|
|
534
|
+
level: 1
|
|
535
|
+
})
|
|
536
|
+
)
|
|
537
|
+
]);
|
|
538
|
+
});
|
|
539
|
+
(0, import_test.expect)(externalLogs.length).toBe(4);
|
|
540
|
+
(0, import_test.expect)(externalLogs[0].message).toBe("Before async operation");
|
|
541
|
+
(0, import_test.expect)(externalLogs[1].message).toBe("After async operation");
|
|
542
|
+
} finally {
|
|
543
|
+
(0, import_logger.unbindInstanceLogger)(instanceId);
|
|
544
|
+
}
|
|
545
|
+
});
|
|
546
|
+
});
|
|
547
|
+
//# sourceMappingURL=logger-initialization.spec.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../lib/v3/tests/logger-initialization.spec.ts"],
|
|
4
|
+
"sourcesContent": ["import { test, expect } from \"@playwright/test\";\nimport {\n bindInstanceLogger,\n unbindInstanceLogger,\n withInstanceLogContext,\n v3Logger,\n} from \"../logger.js\";\nimport type { LogLine } from \"../types/public/logs.js\";\n\ntest.describe(\"V3 Logger Instance Routing\", () => {\n test.afterEach(() => {\n // Clean up is handled by unbindInstanceLogger calls in tests\n });\n\n test(\"bindInstanceLogger routes logs to correct instance\", () => {\n const instanceId = \"test-instance-001\";\n const capturedLogs: LogLine[] = [];\n\n bindInstanceLogger(instanceId, (line) => {\n capturedLogs.push(line);\n });\n\n try {\n // Log within context\n withInstanceLogContext(instanceId, () => {\n v3Logger({\n category: \"test\",\n message: \"Test message for instance\",\n level: 1,\n });\n });\n\n // Should have captured the log\n expect(capturedLogs.length).toBe(1);\n expect(capturedLogs[0].message).toBe(\"Test message for instance\");\n } finally {\n unbindInstanceLogger(instanceId);\n }\n });\n\n test(\"unbindInstanceLogger stops routing\", () => {\n const instanceId = \"test-instance-002\";\n const capturedLogs: LogLine[] = [];\n const consoleOutput: string[] = [];\n const originalConsoleLog = console.log;\n\n try {\n console.log = (msg: string) => {\n consoleOutput.push(msg);\n };\n\n bindInstanceLogger(instanceId, (line) => {\n capturedLogs.push(line);\n });\n\n // Unbind immediately\n unbindInstanceLogger(instanceId);\n\n // Log - should fall back to console\n withInstanceLogContext(instanceId, () => {\n v3Logger({\n category: \"test\",\n message: \"After unbind\",\n level: 1,\n });\n });\n\n // Should not have captured via instance logger\n expect(capturedLogs.length).toBe(0);\n // But should have logged to console\n expect(consoleOutput.length).toBeGreaterThan(0);\n } finally {\n console.log = originalConsoleLog;\n unbindInstanceLogger(instanceId);\n }\n });\n\n test(\"multiple instances have isolated log routing\", () => {\n const instance1Id = \"test-instance-1\";\n const instance2Id = \"test-instance-2\";\n const instance1Logs: LogLine[] = [];\n const instance2Logs: LogLine[] = [];\n\n bindInstanceLogger(instance1Id, (line) => instance1Logs.push(line));\n bindInstanceLogger(instance2Id, (line) => instance2Logs.push(line));\n\n try {\n // Log from instance 1\n withInstanceLogContext(instance1Id, () => {\n v3Logger({\n category: \"test\",\n message: \"From instance 1\",\n level: 1,\n });\n });\n\n // Log from instance 2\n withInstanceLogContext(instance2Id, () => {\n v3Logger({\n category: \"test\",\n message: \"From instance 2\",\n level: 1,\n });\n });\n\n // Each instance should have only its own log\n expect(instance1Logs.length).toBe(1);\n expect(instance2Logs.length).toBe(1);\n expect(instance1Logs[0].message).toBe(\"From instance 1\");\n expect(instance2Logs[0].message).toBe(\"From instance 2\");\n } finally {\n unbindInstanceLogger(instance1Id);\n unbindInstanceLogger(instance2Id);\n }\n });\n\n test(\"v3Logger falls back to console when no instance context\", () => {\n const capturedLogs: string[] = [];\n const originalConsoleLog = console.log;\n\n try {\n console.log = (msg: string) => {\n capturedLogs.push(msg);\n };\n\n // Log without any instance context\n v3Logger({\n category: \"test\",\n message: \"Console fallback log\",\n level: 1,\n });\n\n // Should have used console logger\n expect(capturedLogs.length).toBeGreaterThan(0);\n const logOutput = capturedLogs.join(\"\\n\");\n expect(logOutput).toContain(\"Console fallback log\");\n } finally {\n console.log = originalConsoleLog;\n }\n });\n\n test(\"v3Logger falls back to console when instance logger throws\", () => {\n const instanceId = \"failing-instance\";\n const capturedConsoleLogs: string[] = [];\n const originalConsoleLog = console.log;\n\n try {\n console.log = (msg: string) => {\n capturedConsoleLogs.push(msg);\n };\n\n // Bind a logger that throws\n bindInstanceLogger(instanceId, () => {\n throw new Error(\"Instance logger failed\");\n });\n\n // Should fall back to console without throwing\n withInstanceLogContext(instanceId, () => {\n expect(() => {\n v3Logger({\n category: \"test\",\n message: \"Test with failing instance logger\",\n level: 1,\n });\n }).not.toThrow();\n });\n\n // Console should have received the log as fallback\n expect(capturedConsoleLogs.length).toBeGreaterThan(0);\n const logOutput = capturedConsoleLogs.join(\"\\n\");\n expect(logOutput).toContain(\"Test with failing instance logger\");\n } finally {\n console.log = originalConsoleLog;\n unbindInstanceLogger(instanceId);\n }\n });\n\n test(\"withInstanceLogContext nests properly\", () => {\n const outerInstanceId = \"outer-instance\";\n const innerInstanceId = \"inner-instance\";\n const outerLogs: LogLine[] = [];\n const innerLogs: LogLine[] = [];\n\n bindInstanceLogger(outerInstanceId, (line) => outerLogs.push(line));\n bindInstanceLogger(innerInstanceId, (line) => innerLogs.push(line));\n\n try {\n withInstanceLogContext(outerInstanceId, () => {\n v3Logger({\n category: \"test\",\n message: \"Outer context\",\n level: 1,\n });\n\n withInstanceLogContext(innerInstanceId, () => {\n v3Logger({\n category: \"test\",\n message: \"Inner context\",\n level: 1,\n });\n });\n\n v3Logger({\n category: \"test\",\n message: \"Back to outer context\",\n level: 1,\n });\n });\n\n // Outer instance should have 2 logs\n expect(outerLogs.length).toBe(2);\n expect(outerLogs[0].message).toBe(\"Outer context\");\n expect(outerLogs[1].message).toBe(\"Back to outer context\");\n\n // Inner instance should have 1 log\n expect(innerLogs.length).toBe(1);\n expect(innerLogs[0].message).toBe(\"Inner context\");\n } finally {\n unbindInstanceLogger(outerInstanceId);\n unbindInstanceLogger(innerInstanceId);\n }\n });\n\n test(\"withInstanceLogContext returns function result\", () => {\n const instanceId = \"return-test-instance\";\n bindInstanceLogger(instanceId, () => {});\n\n try {\n const result = withInstanceLogContext(instanceId, () => {\n return { success: true, value: 42 };\n });\n\n expect(result).toEqual({ success: true, value: 42 });\n } finally {\n unbindInstanceLogger(instanceId);\n }\n });\n\n test(\"withInstanceLogContext works with async functions\", async () => {\n const instanceId = \"async-test-instance\";\n const capturedLogs: LogLine[] = [];\n\n bindInstanceLogger(instanceId, (line) => capturedLogs.push(line));\n\n try {\n const asyncResult = await withInstanceLogContext(instanceId, async () => {\n v3Logger({\n category: \"test\",\n message: \"Log from async context\",\n level: 1,\n });\n\n await new Promise((resolve) => setTimeout(resolve, 10));\n\n v3Logger({\n category: \"test\",\n message: \"Log after await\",\n level: 1,\n });\n\n return \"async result\";\n });\n\n expect(asyncResult).toBe(\"async result\");\n expect(capturedLogs.length).toBe(2);\n expect(capturedLogs[0].message).toBe(\"Log from async context\");\n expect(capturedLogs[1].message).toBe(\"Log after await\");\n } finally {\n unbindInstanceLogger(instanceId);\n }\n });\n\n test(\"console fallback formats different log levels correctly\", () => {\n const consoleOutput: { level: string; msg: string }[] = [];\n const originalConsoleLog = console.log;\n const originalConsoleError = console.error;\n const originalConsoleDebug = console.debug;\n\n try {\n console.log = (msg: string) => {\n consoleOutput.push({ level: \"log\", msg });\n };\n console.error = (msg: string) => {\n consoleOutput.push({ level: \"error\", msg });\n };\n console.debug = (msg: string) => {\n consoleOutput.push({ level: \"debug\", msg });\n };\n\n // Test error level (0)\n v3Logger({\n category: \"test\",\n message: \"Error message\",\n level: 0,\n });\n\n // Test info level (1)\n v3Logger({\n category: \"test\",\n message: \"Info message\",\n level: 1,\n });\n\n // Test debug level (2)\n v3Logger({\n category: \"test\",\n message: \"Debug message\",\n level: 2,\n });\n\n expect(consoleOutput.length).toBe(3);\n expect(consoleOutput[0].level).toBe(\"error\");\n expect(consoleOutput[0].msg).toContain(\"ERROR\");\n expect(consoleOutput[0].msg).toContain(\"Error message\");\n\n expect(consoleOutput[1].level).toBe(\"log\");\n expect(consoleOutput[1].msg).toContain(\"INFO\");\n expect(consoleOutput[1].msg).toContain(\"Info message\");\n\n expect(consoleOutput[2].level).toBe(\"debug\");\n expect(consoleOutput[2].msg).toContain(\"DEBUG\");\n expect(consoleOutput[2].msg).toContain(\"Debug message\");\n } finally {\n console.log = originalConsoleLog;\n console.error = originalConsoleError;\n console.debug = originalConsoleDebug;\n }\n });\n\n test(\"console fallback formats auxiliary data\", () => {\n const consoleOutput: string[] = [];\n const originalConsoleLog = console.log;\n\n try {\n console.log = (msg: string) => {\n consoleOutput.push(msg);\n };\n\n v3Logger({\n category: \"test\",\n message: \"Message with auxiliary\",\n level: 1,\n auxiliary: {\n stringValue: { value: \"test\", type: \"string\" },\n integerValue: { value: \"42\", type: \"integer\" },\n objectValue: {\n value: JSON.stringify({ nested: \"data\" }),\n type: \"object\",\n },\n },\n });\n\n expect(consoleOutput.length).toBe(1);\n const output = consoleOutput[0];\n expect(output).toContain(\"Message with auxiliary\");\n expect(output).toContain(\"stringValue\");\n expect(output).toContain(\"integerValue\");\n expect(output).toContain(\"objectValue\");\n } finally {\n console.log = originalConsoleLog;\n }\n });\n\n test(\"concurrent instances don't interfere\", () => {\n const instances = Array.from({ length: 10 }, (_, i) => `instance-${i}`);\n const logsByInstance = new Map<string, LogLine[]>();\n\n // Bind all instances\n instances.forEach((id) => {\n const logs: LogLine[] = [];\n logsByInstance.set(id, logs);\n bindInstanceLogger(id, (line) => logs.push(line));\n });\n\n try {\n // Log from each instance\n instances.forEach((id, index) => {\n withInstanceLogContext(id, () => {\n v3Logger({\n category: \"test\",\n message: `Message from ${id}`,\n level: 1,\n auxiliary: {\n index: { value: String(index), type: \"integer\" },\n },\n });\n });\n });\n\n // Verify each instance received only its own log\n instances.forEach((id) => {\n const logs = logsByInstance.get(id)!;\n expect(logs.length).toBe(1);\n expect(logs[0].message).toBe(`Message from ${id}`);\n });\n } finally {\n instances.forEach((id) => unbindInstanceLogger(id));\n }\n });\n});\n\ntest.describe(\"V3 Logger with External Logger (Production Pattern)\", () => {\n test.afterEach(() => {\n // Clean up instance loggers\n });\n\n test(\"external logger receives all logs from v3Logger\", () => {\n const instanceId = \"v3-instance-with-external\";\n const externalLogs: LogLine[] = [];\n\n // Simulate V3 constructor behavior with external logger\n const externalLogger = (line: LogLine) => {\n externalLogs.push(line);\n };\n\n bindInstanceLogger(instanceId, externalLogger);\n\n try {\n withInstanceLogContext(instanceId, () => {\n v3Logger({\n category: \"a11y/snapshot\",\n message: \"Capturing hybrid snapshot\",\n level: 0,\n });\n\n v3Logger({\n category: \"handlers/act\",\n message: \"Executing action\",\n level: 1,\n auxiliary: {\n action: { value: \"click\", type: \"string\" },\n },\n });\n\n v3Logger({\n category: \"debug\",\n message: \"Debug details\",\n level: 2,\n });\n });\n\n // All logs should be captured by external logger\n expect(externalLogs.length).toBe(3);\n expect(externalLogs[0].message).toBe(\"Capturing hybrid snapshot\");\n expect(externalLogs[1].message).toBe(\"Executing action\");\n expect(externalLogs[2].message).toBe(\"Debug details\");\n } finally {\n unbindInstanceLogger(instanceId);\n }\n });\n\n test(\"StagehandLogger wrapper forwards to external logger\", () => {\n const instanceId = \"v3-with-stagehand-wrapper\";\n const externalLogs: LogLine[] = [];\n\n // Simulate V3's stagehandLogger.log() wrapping pattern\n const mockStagehandLogger = {\n log: (line: LogLine) => {\n // This simulates StagehandLogger.log() which internally calls externalLogger\n externalLogs.push(line);\n },\n };\n\n bindInstanceLogger(instanceId, (line) => mockStagehandLogger.log(line));\n\n try {\n withInstanceLogContext(instanceId, () => {\n v3Logger({\n category: \"test\",\n message: \"Log through StagehandLogger wrapper\",\n level: 1,\n });\n });\n\n expect(externalLogs.length).toBe(1);\n expect(externalLogs[0].message).toBe(\n \"Log through StagehandLogger wrapper\",\n );\n } finally {\n unbindInstanceLogger(instanceId);\n }\n });\n\n test(\"multiple V3 instances with different external loggers\", () => {\n const instance1Id = \"v3-instance-1\";\n const instance2Id = \"v3-instance-2\";\n const external1Logs: LogLine[] = [];\n const external2Logs: LogLine[] = [];\n\n // Simulate two V3 instances with different external loggers\n bindInstanceLogger(instance1Id, (line) => external1Logs.push(line));\n bindInstanceLogger(instance2Id, (line) => external2Logs.push(line));\n\n try {\n // Instance 1 logs\n withInstanceLogContext(instance1Id, () => {\n v3Logger({\n category: \"instance1\",\n message: \"Instance 1 activity\",\n level: 1,\n });\n });\n\n // Instance 2 logs\n withInstanceLogContext(instance2Id, () => {\n v3Logger({\n category: \"instance2\",\n message: \"Instance 2 activity\",\n level: 1,\n });\n });\n\n // Each external logger should only have its instance's logs\n expect(external1Logs.length).toBe(1);\n expect(external2Logs.length).toBe(1);\n expect(external1Logs[0].message).toBe(\"Instance 1 activity\");\n expect(external2Logs[0].message).toBe(\"Instance 2 activity\");\n } finally {\n unbindInstanceLogger(instance1Id);\n unbindInstanceLogger(instance2Id);\n }\n });\n\n test(\"external logger receives logs with auxiliary data preserved\", () => {\n const instanceId = \"v3-with-auxiliary\";\n const externalLogs: LogLine[] = [];\n\n bindInstanceLogger(instanceId, (line) => externalLogs.push(line));\n\n try {\n withInstanceLogContext(instanceId, () => {\n v3Logger({\n category: \"extract\",\n message: \"Extracting data\",\n level: 1,\n auxiliary: {\n selector: { value: \"xpath=/html/body\", type: \"string\" },\n timeout: { value: \"5000\", type: \"integer\" },\n retries: { value: \"3\", type: \"integer\" },\n metadata: {\n value: JSON.stringify({ key: \"value\" }),\n type: \"object\",\n },\n },\n });\n });\n\n expect(externalLogs.length).toBe(1);\n const log = externalLogs[0];\n expect(log.auxiliary).toBeDefined();\n expect(log.auxiliary?.selector?.value).toBe(\"xpath=/html/body\");\n expect(log.auxiliary?.timeout?.value).toBe(\"5000\");\n expect(log.auxiliary?.retries?.value).toBe(\"3\");\n expect(log.auxiliary?.metadata?.type).toBe(\"object\");\n } finally {\n unbindInstanceLogger(instanceId);\n }\n });\n\n test(\"external logger handles rapid concurrent logs\", () => {\n const instanceId = \"v3-rapid-logs\";\n const externalLogs: LogLine[] = [];\n\n bindInstanceLogger(instanceId, (line) => externalLogs.push(line));\n\n try {\n withInstanceLogContext(instanceId, () => {\n // Simulate rapid logging like during snapshot capture\n for (let i = 0; i < 50; i++) {\n v3Logger({\n category: \"perf\",\n message: `Operation ${i}`,\n level: 2,\n auxiliary: {\n iteration: { value: String(i), type: \"integer\" },\n },\n });\n }\n });\n\n // All logs should be captured\n expect(externalLogs.length).toBe(50);\n expect(externalLogs[0].message).toBe(\"Operation 0\");\n expect(externalLogs[49].message).toBe(\"Operation 49\");\n } finally {\n unbindInstanceLogger(instanceId);\n }\n });\n\n test(\"external logger can filter by log level\", () => {\n const instanceId = \"v3-with-filtering\";\n const errorLogs: LogLine[] = [];\n\n // External logger that only captures errors\n const filteringLogger = (line: LogLine) => {\n if (line.level === 0) {\n errorLogs.push(line);\n }\n };\n\n bindInstanceLogger(instanceId, filteringLogger);\n\n try {\n withInstanceLogContext(instanceId, () => {\n v3Logger({\n category: \"test\",\n message: \"Info message\",\n level: 1,\n });\n\n v3Logger({\n category: \"test\",\n message: \"Error message\",\n level: 0,\n });\n\n v3Logger({\n category: \"test\",\n message: \"Debug message\",\n level: 2,\n });\n\n v3Logger({\n category: \"test\",\n message: \"Another error\",\n level: 0,\n });\n });\n\n // Only error logs should be captured\n expect(errorLogs.length).toBe(2);\n expect(errorLogs[0].message).toBe(\"Error message\");\n expect(errorLogs[1].message).toBe(\"Another error\");\n } finally {\n unbindInstanceLogger(instanceId);\n }\n });\n\n test(\"external logger persists across async operations\", async () => {\n const instanceId = \"v3-async-ops\";\n const externalLogs: LogLine[] = [];\n\n bindInstanceLogger(instanceId, (line) => externalLogs.push(line));\n\n try {\n await withInstanceLogContext(instanceId, async () => {\n v3Logger({\n category: \"async\",\n message: \"Before async operation\",\n level: 1,\n });\n\n await new Promise((resolve) => setTimeout(resolve, 50));\n\n v3Logger({\n category: \"async\",\n message: \"After async operation\",\n level: 1,\n });\n\n await Promise.all([\n Promise.resolve().then(() =>\n v3Logger({\n category: \"async\",\n message: \"Parallel operation 1\",\n level: 1,\n }),\n ),\n Promise.resolve().then(() =>\n v3Logger({\n category: \"async\",\n message: \"Parallel operation 2\",\n level: 1,\n }),\n ),\n ]);\n });\n\n // All logs should be captured despite async boundaries\n expect(externalLogs.length).toBe(4);\n expect(externalLogs[0].message).toBe(\"Before async operation\");\n expect(externalLogs[1].message).toBe(\"After async operation\");\n } finally {\n unbindInstanceLogger(instanceId);\n }\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|