@browserbasehq/orca 3.1.0-patch.4 → 3.2.0-middleware.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/lib/inference.js +1 -4
- package/dist/cjs/lib/inference.js.map +1 -1
- package/dist/cjs/lib/utils.d.ts +1 -0
- package/dist/cjs/lib/utils.js +4 -0
- package/dist/cjs/lib/utils.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AgentClient.d.ts +8 -0
- package/dist/cjs/lib/v3/agent/AgentClient.js +13 -0
- package/dist/cjs/lib/v3/agent/AgentClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AgentProvider.js +0 -1
- package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +6 -7
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +6 -7
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js +1 -0
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +4 -4
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +67 -8
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +4 -2
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js +7 -7
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/act.d.ts +1 -1
- package/dist/cjs/lib/v3/agent/tools/act.js +11 -4
- package/dist/cjs/lib/v3/agent/tools/act.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +8 -1
- package/dist/cjs/lib/v3/agent/tools/ariaTree.js +49 -22
- package/dist/cjs/lib/v3/agent/tools/ariaTree.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
- package/dist/cjs/lib/v3/agent/tools/braveSearch.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
- package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js +70 -0
- package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
- package/dist/cjs/lib/v3/agent/tools/click.js +23 -31
- package/dist/cjs/lib/v3/agent/tools/click.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/clickAndHold.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js +22 -30
- package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -2
- package/dist/cjs/lib/v3/agent/tools/extract.js +7 -3
- package/dist/cjs/lib/v3/agent/tools/extract.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.js +30 -30
- package/dist/cjs/lib/v3/agent/tools/fillFormVision.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +7 -2
- package/dist/cjs/lib/v3/agent/tools/fillform.js +56 -45
- package/dist/cjs/lib/v3/agent/tools/fillform.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/index.d.ts +19 -3
- package/dist/cjs/lib/v3/agent/tools/index.js +63 -11
- package/dist/cjs/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/keys.d.ts +1 -1
- package/dist/cjs/lib/v3/agent/tools/keys.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +8 -0
- package/dist/cjs/lib/v3/agent/tools/screenshot.js +32 -15
- package/dist/cjs/lib/v3/agent/tools/screenshot.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/scroll.js +12 -0
- package/dist/cjs/lib/v3/agent/tools/scroll.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/type.js +23 -31
- package/dist/cjs/lib/v3/agent/tools/type.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/wait.js +6 -0
- package/dist/cjs/lib/v3/agent/tools/wait.js.map +1 -1
- package/dist/cjs/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
- package/dist/cjs/lib/v3/agent/utils/captchaSolver.js +175 -0
- package/dist/cjs/lib/v3/agent/utils/captchaSolver.js.map +1 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
- package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
- package/dist/cjs/lib/v3/api.d.ts +2 -2
- package/dist/cjs/lib/v3/api.js +1 -1
- package/dist/cjs/lib/v3/api.js.map +1 -1
- package/dist/cjs/lib/v3/cache/ActCache.d.ts +0 -1
- package/dist/cjs/lib/v3/cache/ActCache.js +2 -18
- package/dist/cjs/lib/v3/cache/ActCache.js.map +1 -1
- package/dist/cjs/lib/v3/flowlogger/EventEmitter.d.ts +7 -0
- package/dist/cjs/lib/v3/flowlogger/EventEmitter.js +30 -0
- package/dist/cjs/lib/v3/flowlogger/EventEmitter.js.map +1 -0
- package/dist/cjs/lib/v3/flowlogger/EventSink.d.ts +44 -0
- package/dist/cjs/lib/v3/flowlogger/EventSink.js +217 -0
- package/dist/cjs/lib/v3/flowlogger/EventSink.js.map +1 -0
- package/dist/cjs/lib/v3/flowlogger/EventStore.d.ts +26 -0
- package/dist/cjs/lib/v3/flowlogger/EventStore.js +135 -0
- package/dist/cjs/lib/v3/flowlogger/EventStore.js.map +1 -0
- package/dist/cjs/lib/v3/flowlogger/FlowLogger.d.ts +99 -0
- package/dist/cjs/lib/v3/flowlogger/FlowLogger.js +591 -0
- package/dist/cjs/lib/v3/flowlogger/FlowLogger.js.map +1 -0
- package/dist/cjs/lib/v3/flowlogger/prettify.d.ts +6 -0
- package/dist/cjs/lib/v3/flowlogger/prettify.js +395 -0
- package/dist/cjs/lib/v3/flowlogger/prettify.js.map +1 -0
- package/dist/cjs/lib/v3/handlers/actHandler.js +1 -2
- package/dist/cjs/lib/v3/handlers/actHandler.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/extractHandler.js +2 -2
- package/dist/cjs/lib/v3/handlers/extractHandler.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js +43 -57
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/observeHandler.js +1 -2
- package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -5
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +130 -91
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +134 -14
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/cjs/lib/v3/index.d.ts +2 -1
- package/dist/cjs/lib/v3/launch/browserbase.d.ts +1 -1
- package/dist/cjs/lib/v3/launch/browserbase.js +4 -9
- package/dist/cjs/lib/v3/launch/browserbase.js.map +1 -1
- package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +5 -2
- package/dist/cjs/lib/v3/llm/LLMProvider.js +13 -11
- package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/cjs/lib/v3/llm/aisdk.js +11 -17
- package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/cjs/lib/v3/runtimePaths.js +2 -1
- package/dist/cjs/lib/v3/runtimePaths.js.map +1 -1
- package/dist/cjs/lib/v3/shutdown/supervisor.js +2 -2
- package/dist/cjs/lib/v3/shutdown/supervisor.js.map +1 -1
- package/dist/cjs/lib/v3/timeoutConfig.d.ts +1 -1
- package/dist/cjs/lib/v3/timeoutConfig.js +5 -0
- package/dist/cjs/lib/v3/timeoutConfig.js.map +1 -1
- package/dist/cjs/lib/v3/types/private/cache.d.ts +0 -1
- package/dist/cjs/lib/v3/types/private/cache.js.map +1 -1
- package/dist/cjs/lib/v3/types/private/shutdown.d.ts +1 -1
- package/dist/cjs/lib/v3/types/private/shutdown.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/agent.d.ts +28 -3
- package/dist/cjs/lib/v3/types/public/agent.js +0 -1
- package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/api.d.ts +7 -0
- package/dist/cjs/lib/v3/types/public/api.js +9 -0
- package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/model.d.ts +12 -3
- package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/options.d.ts +8 -0
- package/dist/cjs/lib/v3/types/public/options.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/cdp.d.ts +8 -13
- package/dist/cjs/lib/v3/understudy/cdp.js +180 -20
- package/dist/cjs/lib/v3/understudy/cdp.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/context.d.ts +1 -0
- package/dist/cjs/lib/v3/understudy/context.js +142 -60
- package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/frame.js +23 -6
- package/dist/cjs/lib/v3/understudy/frame.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/page.d.ts +13 -0
- package/dist/cjs/lib/v3/understudy/page.js +84 -21
- package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +0 -1
- package/dist/cjs/lib/v3/understudy/screenshotUtils.js +0 -18
- package/dist/cjs/lib/v3/understudy/screenshotUtils.js.map +1 -1
- package/dist/cjs/lib/v3/v3.d.ts +26 -3
- package/dist/cjs/lib/v3/v3.js +242 -180
- package/dist/cjs/lib/v3/v3.js.map +1 -1
- package/dist/cjs/lib/version.d.ts +1 -1
- package/dist/cjs/lib/version.js +1 -1
- package/dist/cjs/lib/version.js.map +1 -1
- package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js +56 -0
- package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
- package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +6 -6
- package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
- package/dist/cjs/tests/integration/cdp-session-detached.spec.js +1 -1
- package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +1 -1
- package/dist/cjs/tests/integration/context-addInitScript.spec.js +104 -11
- package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +1 -1
- package/dist/cjs/tests/integration/flowLogger.spec.js +714 -0
- package/dist/cjs/tests/integration/flowLogger.spec.js.map +1 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +219 -0
- package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +85 -0
- package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +1 -0
- package/dist/cjs/tests/integration/page-screenshot.spec.js +1 -1
- package/dist/cjs/tests/integration/page-screenshot.spec.js.map +1 -1
- package/dist/cjs/tests/integration/testUtils.d.ts +33 -0
- package/dist/cjs/tests/integration/testUtils.js +144 -0
- package/dist/cjs/tests/integration/testUtils.js.map +1 -1
- package/dist/cjs/tests/integration/timeouts.spec.js +278 -0
- package/dist/cjs/tests/integration/timeouts.spec.js.map +1 -1
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +285 -0
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +1 -0
- package/dist/cjs/tests/unit/agent-execution-model.test.js +1 -1
- package/dist/cjs/tests/unit/agent-execution-model.test.js.map +1 -1
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +20 -0
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +1 -1
- package/dist/cjs/tests/unit/captcha-solver.test.d.ts +1 -0
- package/dist/cjs/tests/unit/captcha-solver.test.js +154 -0
- package/dist/cjs/tests/unit/captcha-solver.test.js.map +1 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.d.ts +1 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js +95 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js.map +1 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.d.ts +1 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js +43 -0
- package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js.map +1 -0
- package/dist/cjs/tests/unit/flowlogger-eventstore.test.d.ts +1 -0
- package/dist/cjs/tests/unit/flowlogger-eventstore.test.js +250 -0
- package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +1 -0
- package/dist/cjs/tests/unit/llm-middleware.test.d.ts +1 -0
- package/dist/cjs/tests/unit/llm-middleware.test.js +495 -0
- package/dist/cjs/tests/unit/llm-middleware.test.js.map +1 -0
- package/dist/cjs/tests/unit/model-deprecation.test.js +5 -8
- package/dist/cjs/tests/unit/model-deprecation.test.js.map +1 -1
- package/dist/cjs/tests/unit/openai-cua-client.test.d.ts +1 -0
- package/dist/cjs/tests/unit/openai-cua-client.test.js +71 -0
- package/dist/cjs/tests/unit/openai-cua-client.test.js.map +1 -0
- package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +1 -0
- package/dist/cjs/tests/unit/page-extra-http-headers.test.js +92 -0
- package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +13 -1
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
- package/dist/cjs/tests/unit/public-api/public-types.test.js.map +1 -1
- package/dist/esm/lib/inference.js +1 -4
- package/dist/esm/lib/inference.js.map +1 -1
- package/dist/esm/lib/utils.d.ts +1 -0
- package/dist/esm/lib/utils.js +3 -0
- package/dist/esm/lib/utils.js.map +1 -1
- package/dist/esm/lib/v3/agent/AgentClient.d.ts +8 -0
- package/dist/esm/lib/v3/agent/AgentClient.js +13 -0
- package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/AgentProvider.js +0 -1
- package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +6 -7
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js +6 -7
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +1 -0
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +4 -4
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js +67 -8
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +4 -2
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +7 -7
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/act.d.ts +1 -1
- package/dist/esm/lib/v3/agent/tools/act.js +11 -4
- package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/ariaTree.d.ts +8 -1
- package/dist/esm/lib/v3/agent/tools/ariaTree.js +49 -22
- package/dist/esm/lib/v3/agent/tools/ariaTree.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
- package/dist/esm/lib/v3/agent/tools/braveSearch.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
- package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js +66 -0
- package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
- package/dist/esm/lib/v3/agent/tools/click.js +23 -31
- package/dist/esm/lib/v3/agent/tools/click.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/clickAndHold.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +22 -30
- package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/extract.d.ts +2 -2
- package/dist/esm/lib/v3/agent/tools/extract.js +7 -3
- package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/fillFormVision.js +30 -30
- package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/fillform.d.ts +7 -2
- package/dist/esm/lib/v3/agent/tools/fillform.js +56 -45
- package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/index.d.ts +19 -3
- package/dist/esm/lib/v3/agent/tools/index.js +63 -11
- package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/keys.d.ts +1 -1
- package/dist/esm/lib/v3/agent/tools/keys.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/screenshot.d.ts +8 -0
- package/dist/esm/lib/v3/agent/tools/screenshot.js +32 -15
- package/dist/esm/lib/v3/agent/tools/screenshot.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/scroll.js +12 -0
- package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/type.js +23 -31
- package/dist/esm/lib/v3/agent/tools/type.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/wait.js +6 -0
- package/dist/esm/lib/v3/agent/tools/wait.js.map +1 -1
- package/dist/esm/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
- package/dist/esm/lib/v3/agent/utils/captchaSolver.js +171 -0
- package/dist/esm/lib/v3/agent/utils/captchaSolver.js.map +1 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
- package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
- package/dist/esm/lib/v3/api.d.ts +2 -2
- package/dist/esm/lib/v3/api.js +1 -1
- package/dist/esm/lib/v3/api.js.map +1 -1
- package/dist/esm/lib/v3/cache/ActCache.d.ts +0 -1
- package/dist/esm/lib/v3/cache/ActCache.js +2 -18
- package/dist/esm/lib/v3/cache/ActCache.js.map +1 -1
- package/dist/esm/lib/v3/flowlogger/EventEmitter.d.ts +7 -0
- package/dist/esm/lib/v3/flowlogger/EventEmitter.js +26 -0
- package/dist/esm/lib/v3/flowlogger/EventEmitter.js.map +1 -0
- package/dist/esm/lib/v3/flowlogger/EventSink.d.ts +44 -0
- package/dist/esm/lib/v3/flowlogger/EventSink.js +206 -0
- package/dist/esm/lib/v3/flowlogger/EventSink.js.map +1 -0
- package/dist/esm/lib/v3/flowlogger/EventStore.d.ts +26 -0
- package/dist/esm/lib/v3/flowlogger/EventStore.js +127 -0
- package/dist/esm/lib/v3/flowlogger/EventStore.js.map +1 -0
- package/dist/esm/lib/v3/flowlogger/FlowLogger.d.ts +99 -0
- package/dist/esm/lib/v3/flowlogger/FlowLogger.js +583 -0
- package/dist/esm/lib/v3/flowlogger/FlowLogger.js.map +1 -0
- package/dist/esm/lib/v3/flowlogger/prettify.d.ts +6 -0
- package/dist/esm/lib/v3/flowlogger/prettify.js +389 -0
- package/dist/esm/lib/v3/flowlogger/prettify.js.map +1 -0
- package/dist/esm/lib/v3/handlers/actHandler.js +1 -2
- package/dist/esm/lib/v3/handlers/actHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/extractHandler.js +2 -2
- package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +43 -57
- package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
- package/dist/esm/lib/v3/handlers/observeHandler.js +1 -2
- package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -5
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js +131 -92
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +134 -14
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/index.d.ts +2 -1
- package/dist/esm/lib/v3/launch/browserbase.d.ts +1 -1
- package/dist/esm/lib/v3/launch/browserbase.js +4 -9
- package/dist/esm/lib/v3/launch/browserbase.js.map +1 -1
- package/dist/esm/lib/v3/llm/LLMProvider.d.ts +5 -2
- package/dist/esm/lib/v3/llm/LLMProvider.js +14 -12
- package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/esm/lib/v3/llm/aisdk.js +11 -17
- package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
- package/dist/esm/lib/v3/runtimePaths.js +2 -1
- package/dist/esm/lib/v3/runtimePaths.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisor.js +2 -2
- package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
- package/dist/esm/lib/v3/timeoutConfig.d.ts +1 -1
- package/dist/esm/lib/v3/timeoutConfig.js +5 -0
- package/dist/esm/lib/v3/timeoutConfig.js.map +1 -1
- package/dist/esm/lib/v3/types/private/cache.d.ts +0 -1
- package/dist/esm/lib/v3/types/private/cache.js.map +1 -1
- package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -1
- package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
- package/dist/esm/lib/v3/types/public/agent.d.ts +28 -3
- package/dist/esm/lib/v3/types/public/agent.js +0 -1
- package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
- package/dist/esm/lib/v3/types/public/api.d.ts +7 -0
- package/dist/esm/lib/v3/types/public/api.js +9 -0
- package/dist/esm/lib/v3/types/public/api.js.map +1 -1
- package/dist/esm/lib/v3/types/public/model.d.ts +12 -3
- package/dist/esm/lib/v3/types/public/model.js.map +1 -1
- package/dist/esm/lib/v3/types/public/options.d.ts +8 -0
- package/dist/esm/lib/v3/types/public/options.js.map +1 -1
- package/dist/esm/lib/v3/understudy/cdp.d.ts +8 -13
- package/dist/esm/lib/v3/understudy/cdp.js +181 -21
- package/dist/esm/lib/v3/understudy/cdp.js.map +1 -1
- package/dist/esm/lib/v3/understudy/context.d.ts +1 -0
- package/dist/esm/lib/v3/understudy/context.js +142 -60
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/frame.js +23 -6
- package/dist/esm/lib/v3/understudy/frame.js.map +1 -1
- package/dist/esm/lib/v3/understudy/page.d.ts +13 -0
- package/dist/esm/lib/v3/understudy/page.js +86 -23
- package/dist/esm/lib/v3/understudy/page.js.map +1 -1
- package/dist/esm/lib/v3/understudy/screenshotUtils.d.ts +0 -1
- package/dist/esm/lib/v3/understudy/screenshotUtils.js +0 -17
- package/dist/esm/lib/v3/understudy/screenshotUtils.js.map +1 -1
- package/dist/esm/lib/v3/v3.d.ts +26 -3
- package/dist/esm/lib/v3/v3.js +242 -181
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/dist/esm/lib/version.d.ts +1 -1
- package/dist/esm/lib/version.js +1 -1
- package/dist/esm/lib/version.js.map +1 -1
- package/dist/esm/tests/integration/agent-captcha-autosolve.spec.d.ts +1 -0
- package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js +54 -0
- package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
- package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +6 -6
- package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
- package/dist/esm/tests/integration/cdp-session-detached.spec.js +1 -1
- package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +1 -1
- package/dist/esm/tests/integration/context-addInitScript.spec.js +104 -11
- package/dist/esm/tests/integration/context-addInitScript.spec.js.map +1 -1
- package/dist/esm/tests/integration/flowLogger.spec.d.ts +1 -0
- package/dist/esm/tests/integration/flowLogger.spec.js +712 -0
- package/dist/esm/tests/integration/flowLogger.spec.js.map +1 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +217 -0
- package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
- package/dist/esm/tests/integration/page-extra-http-headers.spec.js +83 -0
- package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +1 -0
- package/dist/esm/tests/integration/page-screenshot.spec.js +1 -1
- package/dist/esm/tests/integration/page-screenshot.spec.js.map +1 -1
- package/dist/esm/tests/integration/testUtils.d.ts +33 -0
- package/dist/esm/tests/integration/testUtils.js +138 -0
- package/dist/esm/tests/integration/testUtils.js.map +1 -1
- package/dist/esm/tests/integration/timeouts.spec.js +278 -0
- package/dist/esm/tests/integration/timeouts.spec.js.map +1 -1
- package/dist/esm/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
- package/dist/esm/tests/unit/agent-captcha-hooks.test.js +283 -0
- package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +1 -0
- package/dist/esm/tests/unit/agent-execution-model.test.js +1 -1
- package/dist/esm/tests/unit/agent-execution-model.test.js.map +1 -1
- package/dist/esm/tests/unit/browserbase-session-accessors.test.js +20 -0
- package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +1 -1
- package/dist/esm/tests/unit/captcha-solver.test.d.ts +1 -0
- package/dist/esm/tests/unit/captcha-solver.test.js +152 -0
- package/dist/esm/tests/unit/captcha-solver.test.js.map +1 -0
- package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.d.ts +1 -0
- package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js +93 -0
- package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js.map +1 -0
- package/dist/esm/tests/unit/flowlogger-capturing-llm.test.d.ts +1 -0
- package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js +41 -0
- package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js.map +1 -0
- package/dist/esm/tests/unit/flowlogger-eventstore.test.d.ts +1 -0
- package/dist/esm/tests/unit/flowlogger-eventstore.test.js +248 -0
- package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +1 -0
- package/dist/esm/tests/unit/llm-middleware.test.d.ts +1 -0
- package/dist/esm/tests/unit/llm-middleware.test.js +460 -0
- package/dist/esm/tests/unit/llm-middleware.test.js.map +1 -0
- package/dist/esm/tests/unit/model-deprecation.test.js +5 -8
- package/dist/esm/tests/unit/model-deprecation.test.js.map +1 -1
- package/dist/esm/tests/unit/openai-cua-client.test.d.ts +1 -0
- package/dist/esm/tests/unit/openai-cua-client.test.js +69 -0
- package/dist/esm/tests/unit/openai-cua-client.test.js.map +1 -0
- package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +1 -0
- package/dist/esm/tests/unit/page-extra-http-headers.test.js +90 -0
- package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +13 -1
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
- package/dist/esm/tests/unit/public-api/public-types.test.js.map +1 -1
- package/package.json +5 -3
- package/dist/cjs/lib/v3/agent/tools/search.js.map +0 -1
- package/dist/cjs/lib/v3/flowLogger.d.ts +0 -139
- package/dist/cjs/lib/v3/flowLogger.js +0 -881
- package/dist/cjs/lib/v3/flowLogger.js.map +0 -1
- package/dist/cjs/tests/unit/rerender-missing-shadows.test.js +0 -209
- package/dist/cjs/tests/unit/rerender-missing-shadows.test.js.map +0 -1
- package/dist/esm/lib/v3/agent/tools/search.js.map +0 -1
- package/dist/esm/lib/v3/flowLogger.d.ts +0 -139
- package/dist/esm/lib/v3/flowLogger.js +0 -868
- package/dist/esm/lib/v3/flowLogger.js.map +0 -1
- package/dist/esm/tests/unit/rerender-missing-shadows.test.js +0 -207
- package/dist/esm/tests/unit/rerender-missing-shadows.test.js.map +0 -1
- /package/dist/cjs/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
- /package/dist/cjs/tests/{unit/rerender-missing-shadows.test.d.ts → integration/agent-captcha-autosolve.spec.d.ts} +0 -0
- /package/dist/{esm/tests/unit/rerender-missing-shadows.test.d.ts → cjs/tests/integration/flowLogger.spec.d.ts} +0 -0
- /package/dist/esm/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
package/dist/cjs/lib/v3/v3.js
CHANGED
|
@@ -71,7 +71,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
71
71
|
};
|
|
72
72
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
73
73
|
exports.V3 = void 0;
|
|
74
|
-
|
|
74
|
+
exports.resolveModelConfiguration = resolveModelConfiguration;
|
|
75
75
|
const fs_1 = __importDefault(require("fs"));
|
|
76
76
|
const os_1 = __importDefault(require("os"));
|
|
77
77
|
const path_1 = __importDefault(require("path"));
|
|
@@ -89,6 +89,7 @@ const extractHandler_js_1 = require("./handlers/extractHandler.js");
|
|
|
89
89
|
const observeHandler_js_1 = require("./handlers/observeHandler.js");
|
|
90
90
|
const v3AgentHandler_js_1 = require("./handlers/v3AgentHandler.js");
|
|
91
91
|
const v3CuaAgentHandler_js_1 = require("./handlers/v3CuaAgentHandler.js");
|
|
92
|
+
const captchaSolver_js_1 = require("./agent/utils/captchaSolver.js");
|
|
92
93
|
const browserbase_js_1 = require("./launch/browserbase.js");
|
|
93
94
|
const local_js_1 = require("./launch/local.js");
|
|
94
95
|
const LLMProvider_js_1 = require("./llm/LLMProvider.js");
|
|
@@ -102,11 +103,14 @@ const modelUtils_js_2 = require("../modelUtils.js");
|
|
|
102
103
|
const api_js_1 = require("./api.js");
|
|
103
104
|
const validateExperimentalFeatures_js_1 = require("./agent/utils/validateExperimentalFeatures.js");
|
|
104
105
|
const variables_js_1 = require("./agent/utils/variables.js");
|
|
105
|
-
const
|
|
106
|
+
const FlowLogger_js_1 = require("./flowlogger/FlowLogger.js");
|
|
107
|
+
const EventEmitter_js_1 = require("./flowlogger/EventEmitter.js");
|
|
108
|
+
const EventStore_js_1 = require("./flowlogger/EventStore.js");
|
|
106
109
|
const timeoutGuard_js_1 = require("./handlers/handlerUtils/timeoutGuard.js");
|
|
107
110
|
const sdkErrors_js_1 = require("./types/public/sdkErrors.js");
|
|
108
111
|
const DEFAULT_MODEL_NAME = "openai/gpt-4.1-mini";
|
|
109
112
|
const DEFAULT_VIEWPORT = { width: 1288, height: 711 };
|
|
113
|
+
const DEFAULT_AGENT_TOOL_TIMEOUT_MS = 45000;
|
|
110
114
|
function resolveModelConfiguration(model) {
|
|
111
115
|
if (!model) {
|
|
112
116
|
return { modelName: DEFAULT_MODEL_NAME };
|
|
@@ -115,13 +119,14 @@ function resolveModelConfiguration(model) {
|
|
|
115
119
|
return { modelName: model };
|
|
116
120
|
}
|
|
117
121
|
if (model && typeof model === "object") {
|
|
118
|
-
const { modelName, ...clientOptions } = model;
|
|
122
|
+
const { modelName, middleware, ...clientOptions } = model;
|
|
119
123
|
if (!modelName) {
|
|
120
124
|
throw new index_js_1.StagehandInvalidArgumentError("model.modelName is required when providing client options.");
|
|
121
125
|
}
|
|
122
126
|
return {
|
|
123
127
|
modelName,
|
|
124
128
|
clientOptions: clientOptions,
|
|
129
|
+
middleware,
|
|
125
130
|
};
|
|
126
131
|
}
|
|
127
132
|
return { modelName: DEFAULT_MODEL_NAME };
|
|
@@ -149,9 +154,15 @@ let V3 = (() => {
|
|
|
149
154
|
return class V3 {
|
|
150
155
|
static {
|
|
151
156
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
152
|
-
_act_decorators = [
|
|
153
|
-
|
|
154
|
-
|
|
157
|
+
_act_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({
|
|
158
|
+
eventType: "StagehandAct",
|
|
159
|
+
})];
|
|
160
|
+
_extract_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({
|
|
161
|
+
eventType: "StagehandExtract",
|
|
162
|
+
})];
|
|
163
|
+
_observe_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({
|
|
164
|
+
eventType: "StagehandObserve",
|
|
165
|
+
})];
|
|
155
166
|
__esDecorate(this, null, _act_decorators, { kind: "method", name: "act", static: false, private: false, access: { has: obj => "act" in obj, get: obj => obj.act }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
156
167
|
__esDecorate(this, null, _extract_decorators, { kind: "method", name: "extract", static: false, private: false, access: { has: obj => "extract" in obj, get: obj => obj.extract }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
157
168
|
__esDecorate(this, null, _observe_decorators, { kind: "method", name: "observe", static: false, private: false, access: { has: obj => "observe" in obj, get: obj => obj.observe }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
@@ -168,7 +179,7 @@ let V3 = (() => {
|
|
|
168
179
|
* Event bus for internal communication.
|
|
169
180
|
* Emits events like 'screenshot' when screenshots are captured during agent execution.
|
|
170
181
|
*/
|
|
171
|
-
bus = new
|
|
182
|
+
bus = new EventEmitter_js_1.EventEmitterWithWildcardSupport();
|
|
172
183
|
modelName;
|
|
173
184
|
modelClientOptions;
|
|
174
185
|
llmProvider;
|
|
@@ -193,6 +204,15 @@ let V3 = (() => {
|
|
|
193
204
|
get isBrowserbase() {
|
|
194
205
|
return this.state.kind === "BROWSERBASE";
|
|
195
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* Returns true if captcha auto-solving is enabled on Browserbase.
|
|
209
|
+
* Defaults to true when not explicitly set to false.
|
|
210
|
+
*/
|
|
211
|
+
get isCaptchaAutoSolveEnabled() {
|
|
212
|
+
return (this.isBrowserbase &&
|
|
213
|
+
this.opts.browserbaseSessionCreateParams?.browserSettings
|
|
214
|
+
?.solveCaptchas !== false);
|
|
215
|
+
}
|
|
196
216
|
/**
|
|
197
217
|
* Returns true if advancedStealth is enabled in Browserbase settings.
|
|
198
218
|
*/
|
|
@@ -236,6 +256,9 @@ let V3 = (() => {
|
|
|
236
256
|
stagehandLogger;
|
|
237
257
|
_history = [];
|
|
238
258
|
instanceId;
|
|
259
|
+
sessionId;
|
|
260
|
+
eventStore;
|
|
261
|
+
flowLoggerContext;
|
|
239
262
|
static _processGuardsInstalled = false;
|
|
240
263
|
static _instances = new Set();
|
|
241
264
|
cacheStorage;
|
|
@@ -275,6 +298,7 @@ let V3 = (() => {
|
|
|
275
298
|
this.externalLogger = opts.logger;
|
|
276
299
|
this.verbose = opts.verbose ?? 1;
|
|
277
300
|
this.instanceId = (0, uuid_1.v7)();
|
|
301
|
+
this.sessionId = opts.sessionId ?? this.instanceId;
|
|
278
302
|
this.keepAlive =
|
|
279
303
|
opts.keepAlive ?? opts.browserbaseSessionCreateParams?.keepAlive;
|
|
280
304
|
// Create per-instance StagehandLogger (handles usePino, verbose, externalLogger)
|
|
@@ -306,11 +330,11 @@ let V3 = (() => {
|
|
|
306
330
|
catch {
|
|
307
331
|
// ignore
|
|
308
332
|
}
|
|
309
|
-
const { modelName, clientOptions } = resolveModelConfiguration(opts.model);
|
|
333
|
+
const { modelName, clientOptions, middleware } = resolveModelConfiguration(opts.model);
|
|
310
334
|
this.modelName = modelName;
|
|
311
335
|
this.experimental = opts.experimental ?? false;
|
|
312
336
|
this.logInferenceToFile = opts.logInferenceToFile ?? false;
|
|
313
|
-
this.llmProvider = new LLMProvider_js_1.LLMProvider(this.logger);
|
|
337
|
+
this.llmProvider = new LLMProvider_js_1.LLMProvider(this.logger, middleware);
|
|
314
338
|
this.domSettleTimeoutMs = opts.domSettleTimeout;
|
|
315
339
|
this.disableAPI = opts.disableAPI ?? false;
|
|
316
340
|
const baseClientOptions = clientOptions
|
|
@@ -367,8 +391,21 @@ let V3 = (() => {
|
|
|
367
391
|
act: this.act.bind(this),
|
|
368
392
|
});
|
|
369
393
|
this.opts = opts;
|
|
370
|
-
//
|
|
371
|
-
|
|
394
|
+
// FlowLogger always gets a per-instance session context and shared event
|
|
395
|
+
// bus. The attached EventStore decides which sinks are active:
|
|
396
|
+
// `BROWSERBASE_FLOW_LOGS=1` enables pretty stderr output,
|
|
397
|
+
// and `BROWSERBASE_CONFIG_DIR` enables the pretty/jsonl file sinks for this session.
|
|
398
|
+
this.eventStore = new EventStore_js_1.EventStore(this.sessionId, opts);
|
|
399
|
+
this.flowLoggerContext = FlowLogger_js_1.FlowLogger.init(this.sessionId, this.bus);
|
|
400
|
+
// Flow event pipeline:
|
|
401
|
+
// FlowLogger -> this.bus -> this.eventStore -> configured sinks/query history.
|
|
402
|
+
// V3 owns the bus for this session. EventStore is not another bus; it just
|
|
403
|
+
// receives already-emitted FlowEvents here, then fans them out to sinks and
|
|
404
|
+
// keeps the queryable per-session history used by /v4/log, parent/ancestor lookups, and tests.
|
|
405
|
+
// `on()` stores a strong reference to the handler, so the EventStore
|
|
406
|
+
// stays alive until this bus is garbage-collected with the rest of the V3
|
|
407
|
+
// object graph.
|
|
408
|
+
this.bus.on("*", this.eventStore.emit);
|
|
372
409
|
// Track instance for global process guard handling
|
|
373
410
|
V3._instances.add(this);
|
|
374
411
|
}
|
|
@@ -398,15 +435,18 @@ let V3 = (() => {
|
|
|
398
435
|
}
|
|
399
436
|
let modelName;
|
|
400
437
|
let clientOptions;
|
|
438
|
+
let perCallMiddleware;
|
|
401
439
|
if (typeof model === "string") {
|
|
402
440
|
modelName = model;
|
|
403
441
|
}
|
|
404
442
|
else {
|
|
405
|
-
const { modelName: overrideModelName, ...rest } = model;
|
|
443
|
+
const { modelName: overrideModelName, middleware, ...rest } = model;
|
|
406
444
|
modelName = overrideModelName;
|
|
407
445
|
clientOptions = rest;
|
|
446
|
+
perCallMiddleware = middleware;
|
|
408
447
|
}
|
|
409
448
|
if (modelName === this.modelName &&
|
|
449
|
+
!perCallMiddleware &&
|
|
410
450
|
(!clientOptions || Object.keys(clientOptions).length === 0)) {
|
|
411
451
|
return this.llmClient;
|
|
412
452
|
}
|
|
@@ -431,7 +471,11 @@ let V3 = (() => {
|
|
|
431
471
|
if (cached) {
|
|
432
472
|
return cached;
|
|
433
473
|
}
|
|
434
|
-
const client = this.llmProvider.getClient(modelName, mergedOptions, {
|
|
474
|
+
const client = this.llmProvider.getClient(modelName, mergedOptions, {
|
|
475
|
+
experimental: this.experimental,
|
|
476
|
+
disableAPI: this.disableAPI,
|
|
477
|
+
middleware: perCallMiddleware,
|
|
478
|
+
});
|
|
435
479
|
this.overrideLlmClients.set(cacheKey, client);
|
|
436
480
|
return client;
|
|
437
481
|
}
|
|
@@ -591,6 +635,13 @@ let V3 = (() => {
|
|
|
591
635
|
}
|
|
592
636
|
}
|
|
593
637
|
const lbo = this.opts.localBrowserLaunchOptions ?? {};
|
|
638
|
+
if (lbo.cdpHeaders && !lbo.cdpUrl) {
|
|
639
|
+
this.logger({
|
|
640
|
+
category: "init",
|
|
641
|
+
message: "`cdpHeaders` was provided but `cdpUrl` is not set — cdpHeaders will be ignored. Set `cdpUrl` to connect to an existing browser via CDP.",
|
|
642
|
+
level: 2,
|
|
643
|
+
});
|
|
644
|
+
}
|
|
594
645
|
// If a CDP URL is provided, attach instead of launching.
|
|
595
646
|
if (lbo.cdpUrl) {
|
|
596
647
|
this.logger({
|
|
@@ -600,10 +651,9 @@ let V3 = (() => {
|
|
|
600
651
|
});
|
|
601
652
|
this.ctx = await context_js_1.V3Context.create(lbo.cdpUrl, {
|
|
602
653
|
env: "LOCAL",
|
|
654
|
+
cdpHeaders: lbo.cdpHeaders,
|
|
603
655
|
});
|
|
604
|
-
|
|
605
|
-
this.ctx.conn.cdpLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpCallEvent(info, logCtx);
|
|
606
|
-
this.ctx.conn.cdpEventLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpMessageEvent(info, logCtx);
|
|
656
|
+
this.ctx.conn.flowLoggerContext = this.flowLoggerContext;
|
|
607
657
|
this.ctx.conn.onTransportClosed(this._onCdpClosed);
|
|
608
658
|
this.state = {
|
|
609
659
|
kind: "LOCAL",
|
|
@@ -699,9 +749,7 @@ let V3 = (() => {
|
|
|
699
749
|
env: "LOCAL",
|
|
700
750
|
localBrowserLaunchOptions: lbo,
|
|
701
751
|
});
|
|
702
|
-
|
|
703
|
-
this.ctx.conn.cdpLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpCallEvent(info, logCtx);
|
|
704
|
-
this.ctx.conn.cdpEventLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpMessageEvent(info, logCtx);
|
|
752
|
+
this.ctx.conn.flowLoggerContext = this.flowLoggerContext;
|
|
705
753
|
this.ctx.conn.onTransportClosed(this._onCdpClosed);
|
|
706
754
|
this.state = {
|
|
707
755
|
kind: "LOCAL",
|
|
@@ -728,9 +776,6 @@ let V3 = (() => {
|
|
|
728
776
|
}
|
|
729
777
|
if (this.opts.env === "BROWSERBASE") {
|
|
730
778
|
const { apiKey, projectId } = this.requireBrowserbaseCreds();
|
|
731
|
-
if (!apiKey || !projectId) {
|
|
732
|
-
throw new index_js_1.MissingEnvironmentVariableError("BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID", "Browserbase environment");
|
|
733
|
-
}
|
|
734
779
|
this.logger({
|
|
735
780
|
category: "init",
|
|
736
781
|
message: "Starting browserbase session",
|
|
@@ -739,9 +784,13 @@ let V3 = (() => {
|
|
|
739
784
|
const baseSessionParams = this.opts.browserbaseSessionCreateParams ?? {};
|
|
740
785
|
const resolvedKeepAlive = this.keepAlive;
|
|
741
786
|
const keepAlive = this.keepAlive === true;
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
787
|
+
let effectiveSessionParams = baseSessionParams;
|
|
788
|
+
if (resolvedKeepAlive !== undefined) {
|
|
789
|
+
effectiveSessionParams = {
|
|
790
|
+
...baseSessionParams,
|
|
791
|
+
keepAlive: resolvedKeepAlive,
|
|
792
|
+
};
|
|
793
|
+
}
|
|
745
794
|
if (!this.disableAPI && !this.experimental) {
|
|
746
795
|
this.apiClient = new api_js_1.StagehandAPIClient({
|
|
747
796
|
apiKey,
|
|
@@ -749,18 +798,20 @@ let V3 = (() => {
|
|
|
749
798
|
logger: this.logger,
|
|
750
799
|
serverCache: this.opts.serverCache,
|
|
751
800
|
});
|
|
801
|
+
const { projectId: overrideProjectId, browserSettings, userMetadata, ...restSessionParams } = effectiveSessionParams;
|
|
802
|
+
const resolvedProjectId = overrideProjectId ?? projectId;
|
|
752
803
|
const createSessionPayload = {
|
|
753
|
-
projectId:
|
|
754
|
-
...
|
|
804
|
+
...(resolvedProjectId ? { projectId: resolvedProjectId } : {}),
|
|
805
|
+
...restSessionParams,
|
|
755
806
|
browserSettings: {
|
|
756
|
-
...(
|
|
757
|
-
viewport:
|
|
807
|
+
...(browserSettings ?? {}),
|
|
808
|
+
viewport: browserSettings?.viewport ?? {
|
|
758
809
|
width: 1288,
|
|
759
810
|
height: 711,
|
|
760
811
|
},
|
|
761
812
|
},
|
|
762
813
|
userMetadata: {
|
|
763
|
-
...(
|
|
814
|
+
...(userMetadata ?? {}),
|
|
764
815
|
stagehand: "true",
|
|
765
816
|
},
|
|
766
817
|
};
|
|
@@ -784,9 +835,7 @@ let V3 = (() => {
|
|
|
784
835
|
env: "BROWSERBASE",
|
|
785
836
|
apiClient: this.apiClient,
|
|
786
837
|
});
|
|
787
|
-
|
|
788
|
-
this.ctx.conn.cdpLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpCallEvent(info, logCtx);
|
|
789
|
-
this.ctx.conn.cdpEventLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpMessageEvent(info, logCtx);
|
|
838
|
+
this.ctx.conn.flowLoggerContext = this.flowLoggerContext;
|
|
790
839
|
this.ctx.conn.onTransportClosed(this._onCdpClosed);
|
|
791
840
|
this.state = { kind: "BROWSERBASE", sessionId, ws, bb };
|
|
792
841
|
this.browserbaseSessionId = sessionId;
|
|
@@ -908,10 +957,7 @@ let V3 = (() => {
|
|
|
908
957
|
});
|
|
909
958
|
}
|
|
910
959
|
else {
|
|
911
|
-
const
|
|
912
|
-
? options.timeout
|
|
913
|
-
: undefined;
|
|
914
|
-
const ensureTimeRemaining = (0, timeoutGuard_js_1.createTimeoutGuard)(effectiveTimeoutMs, (ms) => new sdkErrors_js_1.ActTimeoutError(ms));
|
|
960
|
+
const ensureTimeRemaining = (0, timeoutGuard_js_1.createTimeoutGuard)(options?.timeout, (ms) => new sdkErrors_js_1.ActTimeoutError(ms));
|
|
915
961
|
actResult = await this.actHandler.takeDeterministicAction({ ...input, selector }, v3Page, this.domSettleTimeoutMs, this.resolveLlmClient(options?.model), ensureTimeRemaining, options?.variables);
|
|
916
962
|
}
|
|
917
963
|
// history: record ObserveResult-based act call
|
|
@@ -1132,7 +1178,7 @@ let V3 = (() => {
|
|
|
1132
1178
|
try {
|
|
1133
1179
|
// Close session file logger
|
|
1134
1180
|
try {
|
|
1135
|
-
await
|
|
1181
|
+
await FlowLogger_js_1.FlowLogger.close(this.flowLoggerContext);
|
|
1136
1182
|
}
|
|
1137
1183
|
catch {
|
|
1138
1184
|
// ignore
|
|
@@ -1168,6 +1214,12 @@ let V3 = (() => {
|
|
|
1168
1214
|
catch {
|
|
1169
1215
|
// ignore
|
|
1170
1216
|
}
|
|
1217
|
+
try {
|
|
1218
|
+
await this.eventStore.destroy();
|
|
1219
|
+
}
|
|
1220
|
+
catch {
|
|
1221
|
+
// ignore
|
|
1222
|
+
}
|
|
1171
1223
|
try {
|
|
1172
1224
|
this.bus.removeAllListeners();
|
|
1173
1225
|
}
|
|
@@ -1181,6 +1233,13 @@ let V3 = (() => {
|
|
|
1181
1233
|
V3._instances.delete(this);
|
|
1182
1234
|
}
|
|
1183
1235
|
}
|
|
1236
|
+
/**
|
|
1237
|
+
* Resolves the Browserbase API key from options or environment variables.
|
|
1238
|
+
* Returns undefined if no key is found (does not throw).
|
|
1239
|
+
*/
|
|
1240
|
+
get browserbaseApiKey() {
|
|
1241
|
+
return this.opts.apiKey || process_1.default.env.BROWSERBASE_API_KEY;
|
|
1242
|
+
}
|
|
1184
1243
|
/** Guard: ensure Browserbase credentials exist in options. */
|
|
1185
1244
|
requireBrowserbaseCreds() {
|
|
1186
1245
|
let { apiKey, projectId } = this.opts;
|
|
@@ -1190,17 +1249,13 @@ let V3 = (() => {
|
|
|
1190
1249
|
if (!projectId)
|
|
1191
1250
|
projectId =
|
|
1192
1251
|
process_1.default.env.BROWSERBASE_PROJECT_ID ?? process_1.default.env.BB_PROJECT_ID;
|
|
1193
|
-
if (!apiKey
|
|
1194
|
-
|
|
1195
|
-
if (!apiKey)
|
|
1196
|
-
missing.push("BROWSERBASE_API_KEY");
|
|
1197
|
-
if (!projectId)
|
|
1198
|
-
missing.push("BROWSERBASE_PROJECT_ID");
|
|
1199
|
-
throw new index_js_1.MissingEnvironmentVariableError(missing.join(", "), "Browserbase");
|
|
1252
|
+
if (!apiKey) {
|
|
1253
|
+
throw new index_js_1.MissingEnvironmentVariableError("BROWSERBASE_API_KEY", "Browserbase");
|
|
1200
1254
|
}
|
|
1201
1255
|
// Cache resolved values back into opts for consistency
|
|
1202
1256
|
this.opts.apiKey = apiKey;
|
|
1203
|
-
|
|
1257
|
+
if (projectId)
|
|
1258
|
+
this.opts.projectId = projectId;
|
|
1204
1259
|
// Informational log
|
|
1205
1260
|
this.logger({
|
|
1206
1261
|
category: "init",
|
|
@@ -1342,10 +1397,16 @@ let V3 = (() => {
|
|
|
1342
1397
|
? this.resolveLlmClient(options.model)
|
|
1343
1398
|
: this.llmClient;
|
|
1344
1399
|
const resolvedExecutionModel = options?.executionModel ?? options?.model;
|
|
1345
|
-
const handler = new v3AgentHandler_js_1.V3AgentHandler(this, this.logger, agentLlmClient, resolvedExecutionModel, options?.systemPrompt, tools, options?.mode);
|
|
1400
|
+
const handler = new v3AgentHandler_js_1.V3AgentHandler(this, this.logger, agentLlmClient, resolvedExecutionModel, options?.systemPrompt, tools, options?.mode, this.isCaptchaAutoSolveEnabled);
|
|
1346
1401
|
const resolvedOptions = typeof instructionOrOptions === "string"
|
|
1347
|
-
? {
|
|
1348
|
-
|
|
1402
|
+
? {
|
|
1403
|
+
instruction: instructionOrOptions,
|
|
1404
|
+
toolTimeout: DEFAULT_AGENT_TOOL_TIMEOUT_MS,
|
|
1405
|
+
}
|
|
1406
|
+
: {
|
|
1407
|
+
...instructionOrOptions,
|
|
1408
|
+
toolTimeout: instructionOrOptions.toolTimeout ?? DEFAULT_AGENT_TOOL_TIMEOUT_MS,
|
|
1409
|
+
};
|
|
1349
1410
|
const callbacksWithSafety = resolvedOptions.callbacks;
|
|
1350
1411
|
if (callbacksWithSafety?.onSafetyConfirmation) {
|
|
1351
1412
|
throw new index_js_1.StagehandInvalidArgumentError('onSafetyConfirmation callback is only supported when using mode: "cua" agents.');
|
|
@@ -1425,145 +1486,59 @@ let V3 = (() => {
|
|
|
1425
1486
|
throw new index_js_1.CuaModelRequiredError(index_js_1.AVAILABLE_CUA_MODELS);
|
|
1426
1487
|
}
|
|
1427
1488
|
const agentConfigSignature = this.agentCache.buildConfigSignature(options);
|
|
1428
|
-
|
|
1429
|
-
execute: async (instructionOrOptions) => (0, logger_js_2.withInstanceLogContext)(this.instanceId, async () => {
|
|
1430
|
-
(0, validateExperimentalFeatures_js_1.validateExperimentalFeatures)({
|
|
1431
|
-
isExperimental: this.experimental,
|
|
1432
|
-
agentConfig: options,
|
|
1433
|
-
executeOptions: typeof instructionOrOptions === "object"
|
|
1434
|
-
? instructionOrOptions
|
|
1435
|
-
: null,
|
|
1436
|
-
});
|
|
1437
|
-
flowLogger_js_1.SessionFileLogger.logAgentTaskStarted({
|
|
1438
|
-
invocation: "Agent.execute",
|
|
1439
|
-
args: [instructionOrOptions],
|
|
1440
|
-
});
|
|
1441
|
-
const tools = options?.integrations
|
|
1442
|
-
? await (0, utils_js_2.resolveTools)(options.integrations, options.tools)
|
|
1443
|
-
: (options?.tools ?? {});
|
|
1444
|
-
const handler = new v3CuaAgentHandler_js_1.V3CuaAgentHandler(this, this.logger, {
|
|
1445
|
-
modelName,
|
|
1446
|
-
clientOptions,
|
|
1447
|
-
userProvidedInstructions: options.systemPrompt ??
|
|
1448
|
-
`You are a helpful assistant that can use a web browser.\nDo not ask follow up questions, the user will trust your judgement.`,
|
|
1449
|
-
}, tools);
|
|
1450
|
-
const resolvedOptions = typeof instructionOrOptions === "string"
|
|
1451
|
-
? { instruction: instructionOrOptions }
|
|
1452
|
-
: instructionOrOptions;
|
|
1453
|
-
if (resolvedOptions.page) {
|
|
1454
|
-
const normalizedPage = await this.normalizeToV3Page(resolvedOptions.page);
|
|
1455
|
-
this.ctx.setActivePage(normalizedPage);
|
|
1456
|
-
}
|
|
1457
|
-
const instruction = resolvedOptions.instruction.trim();
|
|
1458
|
-
const sanitizedOptions = this.agentCache.sanitizeExecuteOptions(resolvedOptions);
|
|
1459
|
-
const cacheVariables = (0, variables_js_1.flattenVariables)(resolvedOptions.variables);
|
|
1460
|
-
let cacheContext = null;
|
|
1461
|
-
if (this.agentCache.shouldAttemptCache(instruction)) {
|
|
1462
|
-
const startPage = await this.ctx.awaitActivePage();
|
|
1463
|
-
cacheContext = await this.agentCache.prepareContext({
|
|
1464
|
-
instruction,
|
|
1465
|
-
options: sanitizedOptions,
|
|
1466
|
-
configSignature: agentConfigSignature,
|
|
1467
|
-
page: startPage,
|
|
1468
|
-
variables: cacheVariables,
|
|
1469
|
-
});
|
|
1470
|
-
if (cacheContext) {
|
|
1471
|
-
const replayed = await this.agentCache.tryReplay(cacheContext);
|
|
1472
|
-
if (replayed) {
|
|
1473
|
-
flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted({ cacheHit: true });
|
|
1474
|
-
return replayed;
|
|
1475
|
-
}
|
|
1476
|
-
}
|
|
1477
|
-
}
|
|
1478
|
-
let agentSteps = [];
|
|
1479
|
-
const shouldRecordLocally = !!cacheContext && (!this.apiClient || this.experimental);
|
|
1480
|
-
if (shouldRecordLocally) {
|
|
1481
|
-
this.beginAgentReplayRecording();
|
|
1482
|
-
}
|
|
1483
|
-
let result;
|
|
1484
|
-
try {
|
|
1485
|
-
if (this.apiClient && !this.experimental) {
|
|
1486
|
-
const page = await this.ctx.awaitActivePage();
|
|
1487
|
-
result = await this.apiClient.agentExecute(options, resolvedOptions, page.mainFrameId(), !!cacheContext);
|
|
1488
|
-
if (cacheContext) {
|
|
1489
|
-
const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
|
|
1490
|
-
await this.agentCache.storeTransferredEntry(transferredEntry);
|
|
1491
|
-
}
|
|
1492
|
-
}
|
|
1493
|
-
else {
|
|
1494
|
-
result = await handler.execute(instructionOrOptions);
|
|
1495
|
-
}
|
|
1496
|
-
if (shouldRecordLocally) {
|
|
1497
|
-
agentSteps = this.endAgentReplayRecording();
|
|
1498
|
-
}
|
|
1499
|
-
if (shouldRecordLocally &&
|
|
1500
|
-
cacheContext &&
|
|
1501
|
-
result.success &&
|
|
1502
|
-
agentSteps.length > 0) {
|
|
1503
|
-
await this.agentCache.store(cacheContext, agentSteps, result);
|
|
1504
|
-
}
|
|
1505
|
-
return result;
|
|
1506
|
-
}
|
|
1507
|
-
catch (err) {
|
|
1508
|
-
if (shouldRecordLocally)
|
|
1509
|
-
this.discardAgentReplayRecording();
|
|
1510
|
-
throw err;
|
|
1511
|
-
}
|
|
1512
|
-
finally {
|
|
1513
|
-
if (shouldRecordLocally) {
|
|
1514
|
-
this.discardAgentReplayRecording();
|
|
1515
|
-
}
|
|
1516
|
-
flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted();
|
|
1517
|
-
}
|
|
1518
|
-
}),
|
|
1519
|
-
};
|
|
1520
|
-
}
|
|
1521
|
-
// Default: AISDK tools-based agent
|
|
1522
|
-
const agentConfigSignature = this.agentCache.buildConfigSignature(options);
|
|
1523
|
-
const isStreaming = options?.stream ?? false;
|
|
1524
|
-
return {
|
|
1525
|
-
execute: async (instructionOrOptions) => (0, logger_js_2.withInstanceLogContext)(this.instanceId, async () => {
|
|
1489
|
+
const execute = async (instructionOrOptions) => (0, logger_js_2.withInstanceLogContext)(this.instanceId, async () => {
|
|
1526
1490
|
(0, validateExperimentalFeatures_js_1.validateExperimentalFeatures)({
|
|
1527
1491
|
isExperimental: this.experimental,
|
|
1528
1492
|
agentConfig: options,
|
|
1529
1493
|
executeOptions: typeof instructionOrOptions === "object"
|
|
1530
1494
|
? instructionOrOptions
|
|
1531
1495
|
: null,
|
|
1532
|
-
isStreaming,
|
|
1533
1496
|
});
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1497
|
+
const tools = options?.integrations
|
|
1498
|
+
? await (0, utils_js_2.resolveTools)(options.integrations, options.tools)
|
|
1499
|
+
: (options?.tools ?? {});
|
|
1500
|
+
const handler = new v3CuaAgentHandler_js_1.V3CuaAgentHandler(this, this.logger, {
|
|
1501
|
+
modelName,
|
|
1502
|
+
clientOptions,
|
|
1503
|
+
userProvidedInstructions: (options.systemPrompt ??
|
|
1504
|
+
`You are a helpful assistant that can use a web browser.\nDo not ask follow up questions, the user will trust your judgement.`) +
|
|
1505
|
+
(this.isCaptchaAutoSolveEnabled
|
|
1506
|
+
? captchaSolver_js_1.CAPTCHA_CUA_SYSTEM_PROMPT_NOTE
|
|
1507
|
+
: ""),
|
|
1508
|
+
}, tools);
|
|
1509
|
+
const resolvedOptions = typeof instructionOrOptions === "string"
|
|
1510
|
+
? {
|
|
1511
|
+
instruction: instructionOrOptions,
|
|
1512
|
+
toolTimeout: DEFAULT_AGENT_TOOL_TIMEOUT_MS,
|
|
1513
|
+
}
|
|
1514
|
+
: {
|
|
1515
|
+
...instructionOrOptions,
|
|
1516
|
+
toolTimeout: instructionOrOptions.toolTimeout ??
|
|
1517
|
+
DEFAULT_AGENT_TOOL_TIMEOUT_MS,
|
|
1518
|
+
};
|
|
1519
|
+
if (resolvedOptions.page) {
|
|
1520
|
+
const normalizedPage = await this.normalizeToV3Page(resolvedOptions.page);
|
|
1521
|
+
this.ctx.setActivePage(normalizedPage);
|
|
1522
|
+
}
|
|
1523
|
+
const instruction = resolvedOptions.instruction.trim();
|
|
1524
|
+
const sanitizedOptions = this.agentCache.sanitizeExecuteOptions(resolvedOptions);
|
|
1525
|
+
const cacheVariables = (0, variables_js_1.flattenVariables)(resolvedOptions.variables);
|
|
1526
|
+
let cacheContext = null;
|
|
1527
|
+
if (this.agentCache.shouldAttemptCache(instruction)) {
|
|
1528
|
+
const startPage = await this.ctx.awaitActivePage();
|
|
1529
|
+
cacheContext = await this.agentCache.prepareContext({
|
|
1530
|
+
instruction,
|
|
1531
|
+
options: sanitizedOptions,
|
|
1532
|
+
configSignature: agentConfigSignature,
|
|
1533
|
+
page: startPage,
|
|
1534
|
+
variables: cacheVariables,
|
|
1535
|
+
});
|
|
1541
1536
|
if (cacheContext) {
|
|
1542
|
-
const replayed = await this.agentCache.
|
|
1537
|
+
const replayed = await this.agentCache.tryReplay(cacheContext);
|
|
1543
1538
|
if (replayed) {
|
|
1544
|
-
flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted({ cacheHit: true });
|
|
1545
1539
|
return replayed;
|
|
1546
1540
|
}
|
|
1547
1541
|
}
|
|
1548
|
-
const streamResult = await handler.stream(resolvedOptions);
|
|
1549
|
-
if (cacheContext) {
|
|
1550
|
-
const wrappedStream = this.agentCache.wrapStreamForCaching(cacheContext, streamResult, () => this.beginAgentReplayRecording(), () => this.endAgentReplayRecording(), () => this.discardAgentReplayRecording());
|
|
1551
|
-
// Log completion when stream is returned (stream completes asynchronously)
|
|
1552
|
-
flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted();
|
|
1553
|
-
return wrappedStream;
|
|
1554
|
-
}
|
|
1555
|
-
// Log completion when stream is returned (stream completes asynchronously)
|
|
1556
|
-
flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted();
|
|
1557
|
-
return streamResult;
|
|
1558
|
-
}
|
|
1559
|
-
// Non-streaming mode (default)
|
|
1560
|
-
const { handler, resolvedOptions, cacheContext, llmClient } = await this.prepareAgentExecution(options, instructionOrOptions, agentConfigSignature);
|
|
1561
|
-
if (cacheContext) {
|
|
1562
|
-
const replayed = await this.agentCache.tryReplay(cacheContext, llmClient);
|
|
1563
|
-
if (replayed) {
|
|
1564
|
-
flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted({ cacheHit: true });
|
|
1565
|
-
return replayed;
|
|
1566
|
-
}
|
|
1567
1542
|
}
|
|
1568
1543
|
let agentSteps = [];
|
|
1569
1544
|
const shouldRecordLocally = !!cacheContext && (!this.apiClient || this.experimental);
|
|
@@ -1574,14 +1549,14 @@ let V3 = (() => {
|
|
|
1574
1549
|
try {
|
|
1575
1550
|
if (this.apiClient && !this.experimental) {
|
|
1576
1551
|
const page = await this.ctx.awaitActivePage();
|
|
1577
|
-
result = await this.apiClient.agentExecute(options
|
|
1552
|
+
result = await this.apiClient.agentExecute(options, resolvedOptions, page.mainFrameId(), !!cacheContext);
|
|
1578
1553
|
if (cacheContext) {
|
|
1579
1554
|
const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
|
|
1580
1555
|
await this.agentCache.storeTransferredEntry(transferredEntry);
|
|
1581
1556
|
}
|
|
1582
1557
|
}
|
|
1583
1558
|
else {
|
|
1584
|
-
result = await handler.execute(
|
|
1559
|
+
result = await handler.execute(instructionOrOptions);
|
|
1585
1560
|
}
|
|
1586
1561
|
if (shouldRecordLocally) {
|
|
1587
1562
|
agentSteps = this.endAgentReplayRecording();
|
|
@@ -1603,9 +1578,96 @@ let V3 = (() => {
|
|
|
1603
1578
|
if (shouldRecordLocally) {
|
|
1604
1579
|
this.discardAgentReplayRecording();
|
|
1605
1580
|
}
|
|
1606
|
-
flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted();
|
|
1607
1581
|
}
|
|
1608
|
-
})
|
|
1582
|
+
});
|
|
1583
|
+
return {
|
|
1584
|
+
execute: FlowLogger_js_1.FlowLogger.wrapWithLogging({
|
|
1585
|
+
eventType: "AgentExecute",
|
|
1586
|
+
context: this.flowLoggerContext,
|
|
1587
|
+
})(execute),
|
|
1588
|
+
};
|
|
1589
|
+
}
|
|
1590
|
+
// Default: AISDK tools-based agent
|
|
1591
|
+
const agentConfigSignature = this.agentCache.buildConfigSignature(options);
|
|
1592
|
+
const isStreaming = options?.stream ?? false;
|
|
1593
|
+
const execute = async (instructionOrOptions) => (0, logger_js_2.withInstanceLogContext)(this.instanceId, async () => {
|
|
1594
|
+
(0, validateExperimentalFeatures_js_1.validateExperimentalFeatures)({
|
|
1595
|
+
isExperimental: this.experimental,
|
|
1596
|
+
agentConfig: options,
|
|
1597
|
+
executeOptions: typeof instructionOrOptions === "object"
|
|
1598
|
+
? instructionOrOptions
|
|
1599
|
+
: null,
|
|
1600
|
+
isStreaming,
|
|
1601
|
+
});
|
|
1602
|
+
// Streaming mode
|
|
1603
|
+
if (isStreaming) {
|
|
1604
|
+
const { handler, resolvedOptions, cacheContext, llmClient } = await this.prepareAgentExecution(options, instructionOrOptions, agentConfigSignature);
|
|
1605
|
+
if (cacheContext) {
|
|
1606
|
+
const replayed = await this.agentCache.tryReplayAsStream(cacheContext, llmClient);
|
|
1607
|
+
if (replayed) {
|
|
1608
|
+
return replayed;
|
|
1609
|
+
}
|
|
1610
|
+
}
|
|
1611
|
+
const streamResult = await handler.stream(resolvedOptions);
|
|
1612
|
+
if (cacheContext) {
|
|
1613
|
+
const wrappedStream = this.agentCache.wrapStreamForCaching(cacheContext, streamResult, () => this.beginAgentReplayRecording(), () => this.endAgentReplayRecording(), () => this.discardAgentReplayRecording());
|
|
1614
|
+
return wrappedStream;
|
|
1615
|
+
}
|
|
1616
|
+
return streamResult;
|
|
1617
|
+
}
|
|
1618
|
+
// Non-streaming mode (default)
|
|
1619
|
+
const { handler, resolvedOptions, cacheContext, llmClient } = await this.prepareAgentExecution(options, instructionOrOptions, agentConfigSignature);
|
|
1620
|
+
if (cacheContext) {
|
|
1621
|
+
const replayed = await this.agentCache.tryReplay(cacheContext, llmClient);
|
|
1622
|
+
if (replayed) {
|
|
1623
|
+
return replayed;
|
|
1624
|
+
}
|
|
1625
|
+
}
|
|
1626
|
+
let agentSteps = [];
|
|
1627
|
+
const shouldRecordLocally = !!cacheContext && (!this.apiClient || this.experimental);
|
|
1628
|
+
if (shouldRecordLocally) {
|
|
1629
|
+
this.beginAgentReplayRecording();
|
|
1630
|
+
}
|
|
1631
|
+
let result;
|
|
1632
|
+
try {
|
|
1633
|
+
if (this.apiClient && !this.experimental) {
|
|
1634
|
+
const page = await this.ctx.awaitActivePage();
|
|
1635
|
+
result = await this.apiClient.agentExecute(options ?? {}, resolvedOptions, page.mainFrameId(), !!cacheContext);
|
|
1636
|
+
if (cacheContext) {
|
|
1637
|
+
const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
|
|
1638
|
+
await this.agentCache.storeTransferredEntry(transferredEntry);
|
|
1639
|
+
}
|
|
1640
|
+
}
|
|
1641
|
+
else {
|
|
1642
|
+
result = await handler.execute(resolvedOptions);
|
|
1643
|
+
}
|
|
1644
|
+
if (shouldRecordLocally) {
|
|
1645
|
+
agentSteps = this.endAgentReplayRecording();
|
|
1646
|
+
}
|
|
1647
|
+
if (shouldRecordLocally &&
|
|
1648
|
+
cacheContext &&
|
|
1649
|
+
result.success &&
|
|
1650
|
+
agentSteps.length > 0) {
|
|
1651
|
+
await this.agentCache.store(cacheContext, agentSteps, result);
|
|
1652
|
+
}
|
|
1653
|
+
return result;
|
|
1654
|
+
}
|
|
1655
|
+
catch (err) {
|
|
1656
|
+
if (shouldRecordLocally)
|
|
1657
|
+
this.discardAgentReplayRecording();
|
|
1658
|
+
throw err;
|
|
1659
|
+
}
|
|
1660
|
+
finally {
|
|
1661
|
+
if (shouldRecordLocally) {
|
|
1662
|
+
this.discardAgentReplayRecording();
|
|
1663
|
+
}
|
|
1664
|
+
}
|
|
1665
|
+
});
|
|
1666
|
+
return {
|
|
1667
|
+
execute: FlowLogger_js_1.FlowLogger.wrapWithLogging({
|
|
1668
|
+
eventType: "AgentExecute",
|
|
1669
|
+
context: this.flowLoggerContext,
|
|
1670
|
+
})(execute),
|
|
1609
1671
|
};
|
|
1610
1672
|
}
|
|
1611
1673
|
};
|