@browserbasehq/orca 3.2.0-preview.4 → 3.2.1-preview.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/cjs/lib/inference.d.ts +3 -1
- package/dist/cjs/lib/inference.js +3 -3
- package/dist/cjs/lib/inference.js.map +1 -1
- package/dist/cjs/lib/prompt.d.ts +1 -1
- package/dist/cjs/lib/prompt.js +24 -18
- package/dist/cjs/lib/prompt.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 +1 -0
- package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +3 -1
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +61 -9
- package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +1 -0
- package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js +16 -0
- package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +12 -6
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +164 -49
- package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +2 -2
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js +10 -11
- package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +0 -1
- package/dist/cjs/lib/v3/agent/tools/fillform.js +7 -10
- package/dist/cjs/lib/v3/agent/tools/fillform.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/index.js +1 -1
- package/dist/cjs/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/cjs/lib/v3/agent/tools/keys.d.ts +2 -1
- package/dist/cjs/lib/v3/agent/tools/keys.js +57 -49
- package/dist/cjs/lib/v3/agent/tools/keys.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/coordinateNormalization.js +3 -5
- package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.js.map +1 -1
- package/dist/cjs/lib/v3/agent/utils/variables.d.ts +5 -0
- package/dist/cjs/lib/v3/agent/utils/variables.js +9 -0
- package/dist/cjs/lib/v3/agent/utils/variables.js.map +1 -1
- package/dist/cjs/lib/v3/api.d.ts +5 -3
- package/dist/cjs/lib/v3/api.js +5 -15
- package/dist/cjs/lib/v3/api.js.map +1 -1
- package/dist/cjs/lib/v3/cache/AgentCache.js +5 -3
- package/dist/cjs/lib/v3/cache/AgentCache.js.map +1 -1
- package/dist/cjs/lib/v3/flowlogger/EventStore.js +1 -1
- package/dist/cjs/lib/v3/flowlogger/EventStore.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/observeHandler.js +2 -1
- package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -1
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -1
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +110 -46
- 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 +131 -16
- package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/cjs/lib/v3/index.d.ts +1 -1
- package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +5 -2
- package/dist/cjs/lib/v3/llm/LLMProvider.js +14 -6
- package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/cjs/lib/v3/llm/OpenAIClient.js +1 -0
- package/dist/cjs/lib/v3/llm/OpenAIClient.js.map +1 -1
- package/dist/cjs/lib/v3/llm/aisdk.d.ts +3 -1
- package/dist/cjs/lib/v3/llm/aisdk.js +67 -17
- package/dist/cjs/lib/v3/llm/aisdk.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/handlers.d.ts +1 -0
- package/dist/cjs/lib/v3/types/private/handlers.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/agent.d.ts +8 -3
- package/dist/cjs/lib/v3/types/public/agent.js +1 -0
- package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/api.d.ts +54 -7
- package/dist/cjs/lib/v3/types/public/api.js +47 -16
- package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/methods.d.ts +1 -0
- package/dist/cjs/lib/v3/types/public/methods.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/model.d.ts +32 -2
- package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/variables.d.ts +7 -0
- package/dist/cjs/lib/v3/types/public/variables.js +22 -0
- package/dist/cjs/lib/v3/types/public/variables.js.map +1 -0
- package/dist/cjs/lib/v3/understudy/context.js +11 -3
- package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
- package/dist/cjs/lib/v3/understudy/page.js +1 -1
- package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
- package/dist/cjs/lib/v3/v3.d.ts +23 -2
- package/dist/cjs/lib/v3/v3.js +111 -13
- 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.d.ts +1 -0
- 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/chrome-newtab-page-tracking.spec.d.ts +1 -0
- package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js +56 -0
- package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js.map +1 -0
- package/dist/cjs/tests/integration/timeouts.spec.js +1 -1
- 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 +341 -0
- package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +1 -0
- package/dist/cjs/tests/unit/agent-execution-model.test.js +25 -3
- package/dist/cjs/tests/unit/agent-execution-model.test.js.map +1 -1
- package/dist/cjs/tests/unit/agent-metrics.test.d.ts +1 -0
- package/dist/cjs/tests/unit/agent-metrics.test.js +112 -0
- package/dist/cjs/tests/unit/agent-metrics.test.js.map +1 -0
- package/dist/cjs/tests/unit/agent-system-prompt-variables.test.d.ts +1 -0
- package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js +23 -0
- package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js.map +1 -0
- package/dist/cjs/tests/unit/aisdk-clients.test.d.ts +1 -0
- package/dist/cjs/tests/unit/aisdk-clients.test.js +90 -0
- package/dist/cjs/tests/unit/aisdk-clients.test.js.map +1 -0
- package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +1 -0
- package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js +250 -0
- package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +1 -0
- package/dist/cjs/tests/unit/api-client-observe-variables.test.d.ts +1 -0
- package/dist/cjs/tests/unit/api-client-observe-variables.test.js +86 -0
- package/dist/cjs/tests/unit/api-client-observe-variables.test.js.map +1 -0
- package/dist/cjs/tests/unit/api-optional-model-api-key.test.d.ts +1 -0
- package/dist/cjs/tests/unit/api-optional-model-api-key.test.js +95 -0
- package/dist/cjs/tests/unit/api-optional-model-api-key.test.js.map +1 -0
- package/dist/cjs/tests/unit/api-variables-schema.test.d.ts +1 -0
- package/dist/cjs/tests/unit/api-variables-schema.test.js +37 -0
- package/dist/cjs/tests/unit/api-variables-schema.test.js.map +1 -0
- package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +40 -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-eventstore.test.js +1 -1
- package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +1 -1
- 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/microsoft-cua-client.test.d.ts +1 -0
- package/dist/cjs/tests/unit/microsoft-cua-client.test.js +86 -0
- package/dist/cjs/tests/unit/microsoft-cua-client.test.js.map +1 -0
- 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/prompt-observe-variables.test.d.ts +1 -0
- package/dist/cjs/tests/unit/prompt-observe-variables.test.js +19 -0
- package/dist/cjs/tests/unit/prompt-observe-variables.test.js.map +1 -0
- package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +1 -0
- 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/cjs/tests/unit/timeout-handlers.test.js +50 -0
- package/dist/cjs/tests/unit/timeout-handlers.test.js.map +1 -1
- package/dist/esm/lib/inference.d.ts +3 -1
- package/dist/esm/lib/inference.js +3 -3
- package/dist/esm/lib/inference.js.map +1 -1
- package/dist/esm/lib/prompt.d.ts +1 -1
- package/dist/esm/lib/prompt.js +24 -18
- package/dist/esm/lib/prompt.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 +1 -0
- package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.d.ts +3 -1
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +61 -9
- package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js +1 -0
- package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +16 -0
- package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +12 -6
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js +164 -49
- package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +2 -2
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +10 -11
- package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/fillform.d.ts +0 -1
- package/dist/esm/lib/v3/agent/tools/fillform.js +7 -10
- package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/index.js +1 -1
- package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
- package/dist/esm/lib/v3/agent/tools/keys.d.ts +2 -1
- package/dist/esm/lib/v3/agent/tools/keys.js +57 -49
- package/dist/esm/lib/v3/agent/tools/keys.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/coordinateNormalization.js +3 -5
- package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js.map +1 -1
- package/dist/esm/lib/v3/agent/utils/variables.d.ts +5 -0
- package/dist/esm/lib/v3/agent/utils/variables.js +8 -0
- package/dist/esm/lib/v3/agent/utils/variables.js.map +1 -1
- package/dist/esm/lib/v3/api.d.ts +5 -3
- package/dist/esm/lib/v3/api.js +5 -15
- package/dist/esm/lib/v3/api.js.map +1 -1
- package/dist/esm/lib/v3/cache/AgentCache.js +5 -3
- package/dist/esm/lib/v3/cache/AgentCache.js.map +1 -1
- package/dist/esm/lib/v3/flowlogger/EventStore.js +1 -1
- package/dist/esm/lib/v3/flowlogger/EventStore.js.map +1 -1
- package/dist/esm/lib/v3/handlers/observeHandler.js +2 -1
- package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
- package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -1
- package/dist/esm/lib/v3/handlers/v3AgentHandler.js +110 -46
- 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 +131 -16
- package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
- package/dist/esm/lib/v3/index.d.ts +1 -1
- package/dist/esm/lib/v3/llm/LLMProvider.d.ts +5 -2
- package/dist/esm/lib/v3/llm/LLMProvider.js +15 -7
- package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
- package/dist/esm/lib/v3/llm/OpenAIClient.js +1 -0
- package/dist/esm/lib/v3/llm/OpenAIClient.js.map +1 -1
- package/dist/esm/lib/v3/llm/aisdk.d.ts +3 -1
- package/dist/esm/lib/v3/llm/aisdk.js +67 -17
- package/dist/esm/lib/v3/llm/aisdk.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/handlers.d.ts +1 -0
- package/dist/esm/lib/v3/types/private/handlers.js.map +1 -1
- package/dist/esm/lib/v3/types/public/agent.d.ts +8 -3
- package/dist/esm/lib/v3/types/public/agent.js +1 -0
- package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
- package/dist/esm/lib/v3/types/public/api.d.ts +54 -7
- package/dist/esm/lib/v3/types/public/api.js +42 -14
- package/dist/esm/lib/v3/types/public/api.js.map +1 -1
- package/dist/esm/lib/v3/types/public/methods.d.ts +1 -0
- package/dist/esm/lib/v3/types/public/methods.js.map +1 -1
- package/dist/esm/lib/v3/types/public/model.d.ts +32 -2
- package/dist/esm/lib/v3/types/public/model.js.map +1 -1
- package/dist/esm/lib/v3/types/public/variables.d.ts +7 -0
- package/dist/esm/lib/v3/types/public/variables.js +19 -0
- package/dist/esm/lib/v3/types/public/variables.js.map +1 -0
- package/dist/esm/lib/v3/understudy/context.js +11 -3
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/page.js +1 -1
- package/dist/esm/lib/v3/understudy/page.js.map +1 -1
- package/dist/esm/lib/v3/v3.d.ts +23 -2
- package/dist/esm/lib/v3/v3.js +111 -14
- 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/chrome-newtab-page-tracking.spec.d.ts +1 -0
- package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js +54 -0
- package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js.map +1 -0
- package/dist/esm/tests/integration/timeouts.spec.js +1 -1
- 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 +339 -0
- package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +1 -0
- package/dist/esm/tests/unit/agent-execution-model.test.js +25 -3
- package/dist/esm/tests/unit/agent-execution-model.test.js.map +1 -1
- package/dist/esm/tests/unit/agent-metrics.test.d.ts +1 -0
- package/dist/esm/tests/unit/agent-metrics.test.js +110 -0
- package/dist/esm/tests/unit/agent-metrics.test.js.map +1 -0
- package/dist/esm/tests/unit/agent-system-prompt-variables.test.d.ts +1 -0
- package/dist/esm/tests/unit/agent-system-prompt-variables.test.js +21 -0
- package/dist/esm/tests/unit/agent-system-prompt-variables.test.js.map +1 -0
- package/dist/esm/tests/unit/aisdk-clients.test.d.ts +1 -0
- package/dist/esm/tests/unit/aisdk-clients.test.js +88 -0
- package/dist/esm/tests/unit/aisdk-clients.test.js.map +1 -0
- package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +1 -0
- package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js +245 -0
- package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +1 -0
- package/dist/esm/tests/unit/api-client-observe-variables.test.d.ts +1 -0
- package/dist/esm/tests/unit/api-client-observe-variables.test.js +84 -0
- package/dist/esm/tests/unit/api-client-observe-variables.test.js.map +1 -0
- package/dist/esm/tests/unit/api-optional-model-api-key.test.d.ts +1 -0
- package/dist/esm/tests/unit/api-optional-model-api-key.test.js +93 -0
- package/dist/esm/tests/unit/api-optional-model-api-key.test.js.map +1 -0
- package/dist/esm/tests/unit/api-variables-schema.test.d.ts +1 -0
- package/dist/esm/tests/unit/api-variables-schema.test.js +35 -0
- package/dist/esm/tests/unit/api-variables-schema.test.js.map +1 -0
- package/dist/esm/tests/unit/browserbase-session-accessors.test.js +40 -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-eventstore.test.js +1 -1
- package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +1 -1
- 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/microsoft-cua-client.test.d.ts +1 -0
- package/dist/esm/tests/unit/microsoft-cua-client.test.js +84 -0
- package/dist/esm/tests/unit/microsoft-cua-client.test.js.map +1 -0
- 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/prompt-observe-variables.test.d.ts +1 -0
- package/dist/esm/tests/unit/prompt-observe-variables.test.js +17 -0
- package/dist/esm/tests/unit/prompt-observe-variables.test.js.map +1 -0
- package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +1 -0
- 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/dist/esm/tests/unit/timeout-handlers.test.js +50 -0
- package/dist/esm/tests/unit/timeout-handlers.test.js.map +1 -1
- package/package.json +5 -9
- package/dist/cjs/lib/v3/dom/build/rerender-index.js +0 -1
- package/dist/cjs/lib/v3/dom/build/v3-index.js +0 -1
- package/dist/esm/lib/v3/dom/build/rerender-index.js +0 -1
- package/dist/esm/lib/v3/dom/build/v3-index.js +0 -1
|
@@ -11,6 +11,7 @@ const methods_js_1 = require("../types/public/methods.js");
|
|
|
11
11
|
const FlowLogger_js_1 = require("../flowlogger/FlowLogger.js");
|
|
12
12
|
const utils_js_1 = require("../../utils.js");
|
|
13
13
|
const sdkErrors_js_1 = require("../types/public/sdkErrors.js");
|
|
14
|
+
const captchaSolver_js_1 = require("../agent/utils/captchaSolver.js");
|
|
14
15
|
class V3CuaAgentHandler {
|
|
15
16
|
v3;
|
|
16
17
|
agent;
|
|
@@ -19,6 +20,9 @@ class V3CuaAgentHandler {
|
|
|
19
20
|
agentClient;
|
|
20
21
|
options;
|
|
21
22
|
highlightCursor;
|
|
23
|
+
captchaSolver = null;
|
|
24
|
+
captchaClickGuardRemaining = 0;
|
|
25
|
+
currentInstruction = "";
|
|
22
26
|
constructor(v3, logger, options, tools) {
|
|
23
27
|
this.v3 = v3;
|
|
24
28
|
this.logger = logger;
|
|
@@ -49,7 +53,29 @@ class V3CuaAgentHandler {
|
|
|
49
53
|
// Provide action executor
|
|
50
54
|
this.agentClient.setActionHandler(async (action) => {
|
|
51
55
|
this.ensureNotClosed();
|
|
56
|
+
// Wait for captcha solver to finish before executing action
|
|
57
|
+
if (this.captchaSolver) {
|
|
58
|
+
if (this.captchaSolver.isSolving()) {
|
|
59
|
+
this.logger({
|
|
60
|
+
category: "agent",
|
|
61
|
+
message: "Captcha detected — waiting for Browserbase to solve it before continuing",
|
|
62
|
+
level: 1,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
await this.captchaSolver.waitIfSolving();
|
|
66
|
+
this.handleCaptchaSolveResult(this.captchaSolver.consumeSolveResult());
|
|
67
|
+
}
|
|
52
68
|
action.pageUrl = (await this.v3.context.awaitActivePage()).url();
|
|
69
|
+
if (await this.shouldSkipSolvedCaptchaInteraction(action)) {
|
|
70
|
+
this.captchaClickGuardRemaining = Math.max(0, this.captchaClickGuardRemaining - 1);
|
|
71
|
+
this.agentClient.addContextNote(`The captcha has already been solved automatically. Do not click the captcha checkbox, widget, or challenge again. Continue with the original task outside the captcha area. Original task: ${this.currentInstruction}`);
|
|
72
|
+
this.logger({
|
|
73
|
+
category: "agent",
|
|
74
|
+
message: "Skipped click on solved captcha widget — injected follow-up guidance",
|
|
75
|
+
level: 1,
|
|
76
|
+
});
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
53
79
|
const defaultDelay = 500;
|
|
54
80
|
const waitBetween = this.options.clientOptions?.waitBetweenActions ||
|
|
55
81
|
defaultDelay;
|
|
@@ -64,8 +90,8 @@ class V3CuaAgentHandler {
|
|
|
64
90
|
}
|
|
65
91
|
}
|
|
66
92
|
await new Promise((r) => setTimeout(r, 300));
|
|
67
|
-
// Skip logging for screenshot actions - they're no-ops
|
|
68
|
-
//
|
|
93
|
+
// Skip logging for screenshot actions - they're no-ops; the CUA client
|
|
94
|
+
// takes its own screenshot via screenshotProvider between API turns.
|
|
69
95
|
const shouldLog = action.type !== "screenshot";
|
|
70
96
|
if (shouldLog) {
|
|
71
97
|
await FlowLogger_js_1.FlowLogger.runWithLogging({
|
|
@@ -80,16 +106,6 @@ class V3CuaAgentHandler {
|
|
|
80
106
|
}
|
|
81
107
|
action.timestamp = Date.now();
|
|
82
108
|
await new Promise((r) => setTimeout(r, waitBetween));
|
|
83
|
-
try {
|
|
84
|
-
await this.captureAndSendScreenshot();
|
|
85
|
-
}
|
|
86
|
-
catch (e) {
|
|
87
|
-
this.logger({
|
|
88
|
-
category: "agent",
|
|
89
|
-
message: `Warning: Failed to take screenshot after action: ${String(e?.message ?? e)}`,
|
|
90
|
-
level: 1,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
109
|
}
|
|
94
110
|
catch (error) {
|
|
95
111
|
const msg = error?.message ?? String(error);
|
|
@@ -116,6 +132,7 @@ class V3CuaAgentHandler {
|
|
|
116
132
|
: optionsOrInstruction;
|
|
117
133
|
this.setSafetyConfirmationHandler(options.callbacks?.onSafetyConfirmation);
|
|
118
134
|
this.highlightCursor = options.highlightCursor !== false;
|
|
135
|
+
this.currentInstruction = options.instruction;
|
|
119
136
|
// Redirect if blank
|
|
120
137
|
const page = await this.v3.context.awaitActivePage();
|
|
121
138
|
const currentUrl = page.url();
|
|
@@ -127,6 +144,23 @@ class V3CuaAgentHandler {
|
|
|
127
144
|
});
|
|
128
145
|
await page.goto("https://www.google.com", { waitUntil: "load" });
|
|
129
146
|
}
|
|
147
|
+
// Set up captcha solver for Browserbase environments
|
|
148
|
+
if (this.v3.isCaptchaAutoSolveEnabled) {
|
|
149
|
+
this.captchaSolver = new captchaSolver_js_1.CaptchaSolver();
|
|
150
|
+
this.captchaSolver.init(() => this.v3.context.awaitActivePage());
|
|
151
|
+
// Block the CUA agent loop before each step while a captcha is being solved
|
|
152
|
+
this.agentClient.setPreStepHook(async () => {
|
|
153
|
+
if (this.captchaSolver?.isSolving()) {
|
|
154
|
+
this.logger({
|
|
155
|
+
category: "agent",
|
|
156
|
+
message: "Captcha detected — waiting for Browserbase to solve it before continuing",
|
|
157
|
+
level: 1,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
await this.captchaSolver?.waitIfSolving();
|
|
161
|
+
this.handleCaptchaSolveResult(this.captchaSolver?.consumeSolveResult());
|
|
162
|
+
});
|
|
163
|
+
}
|
|
130
164
|
if (this.highlightCursor) {
|
|
131
165
|
try {
|
|
132
166
|
await this.injectCursor();
|
|
@@ -142,7 +176,14 @@ class V3CuaAgentHandler {
|
|
|
142
176
|
}
|
|
143
177
|
}
|
|
144
178
|
const start = Date.now();
|
|
145
|
-
|
|
179
|
+
let result;
|
|
180
|
+
try {
|
|
181
|
+
result = await this.agent.execute({ options, logger: this.logger });
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
this.captchaSolver?.dispose();
|
|
185
|
+
this.captchaSolver = null;
|
|
186
|
+
}
|
|
146
187
|
const inferenceTimeMs = Date.now() - start;
|
|
147
188
|
if (result.usage) {
|
|
148
189
|
this.v3.updateMetrics(methods_js_1.V3FunctionName.AGENT, result.usage.input_tokens, result.usage.output_tokens, result.usage.reasoning_tokens ?? 0, result.usage.cached_input_tokens ?? 0, inferenceTimeMs);
|
|
@@ -353,7 +394,8 @@ class V3CuaAgentHandler {
|
|
|
353
394
|
return { success: true };
|
|
354
395
|
}
|
|
355
396
|
case "screenshot": {
|
|
356
|
-
// No-op -
|
|
397
|
+
// No-op - the CUA client captures a screenshot itself after each
|
|
398
|
+
// computer_call (or batch of actions) for the next request.
|
|
357
399
|
return { success: true };
|
|
358
400
|
}
|
|
359
401
|
case "goto": {
|
|
@@ -461,9 +503,9 @@ class V3CuaAgentHandler {
|
|
|
461
503
|
async updateClientViewport() {
|
|
462
504
|
try {
|
|
463
505
|
// For Google CUA, use configured viewport for coordinate normalization
|
|
464
|
-
//
|
|
506
|
+
// Browserbase managed fingerprinting uses a fixed 1288x711 fallback.
|
|
465
507
|
if (this.agentClient instanceof GoogleCUAClient_js_1.GoogleCUAClient) {
|
|
466
|
-
const dims = this.v3.
|
|
508
|
+
const dims = this.v3.isVerified
|
|
467
509
|
? { width: 1288, height: 711 }
|
|
468
510
|
: this.v3.configuredViewport;
|
|
469
511
|
this.agentClient.setViewport(dims.width, dims.height);
|
|
@@ -514,6 +556,79 @@ class V3CuaAgentHandler {
|
|
|
514
556
|
return null;
|
|
515
557
|
}
|
|
516
558
|
}
|
|
559
|
+
handleCaptchaSolveResult(result) {
|
|
560
|
+
if (!result)
|
|
561
|
+
return;
|
|
562
|
+
if (result.solved) {
|
|
563
|
+
this.captchaClickGuardRemaining = 3;
|
|
564
|
+
this.agentClient.addContextNote(captchaSolver_js_1.CAPTCHA_SOLVED_MSG);
|
|
565
|
+
this.logger({
|
|
566
|
+
category: "agent",
|
|
567
|
+
message: "Captcha solved — continuing with task",
|
|
568
|
+
level: 1,
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
if (result.errored) {
|
|
572
|
+
this.captchaClickGuardRemaining = 0;
|
|
573
|
+
this.agentClient.addContextNote(captchaSolver_js_1.CAPTCHA_ERRORED_MSG);
|
|
574
|
+
this.logger({
|
|
575
|
+
category: "agent",
|
|
576
|
+
message: "Captcha solver failed or errored",
|
|
577
|
+
level: 1,
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
async shouldSkipSolvedCaptchaInteraction(action) {
|
|
582
|
+
if (this.captchaClickGuardRemaining <= 0) {
|
|
583
|
+
return false;
|
|
584
|
+
}
|
|
585
|
+
if (action.type !== "click") {
|
|
586
|
+
return false;
|
|
587
|
+
}
|
|
588
|
+
const x = action.x;
|
|
589
|
+
const y = action.y;
|
|
590
|
+
if (typeof x !== "number" || typeof y !== "number") {
|
|
591
|
+
return false;
|
|
592
|
+
}
|
|
593
|
+
try {
|
|
594
|
+
const page = await this.v3.context.awaitActivePage();
|
|
595
|
+
const boxes = await page.evaluate(() => {
|
|
596
|
+
const selectors = [
|
|
597
|
+
'iframe[title*="reCAPTCHA"]',
|
|
598
|
+
'iframe[src*="recaptcha"]',
|
|
599
|
+
'iframe[src*="hcaptcha"]',
|
|
600
|
+
'iframe[src*="turnstile"]',
|
|
601
|
+
".g-recaptcha",
|
|
602
|
+
"[data-sitekey]",
|
|
603
|
+
'[class*="captcha"]',
|
|
604
|
+
'[id*="captcha"]',
|
|
605
|
+
];
|
|
606
|
+
const seen = new Set();
|
|
607
|
+
const bounds = [];
|
|
608
|
+
for (const selector of selectors) {
|
|
609
|
+
for (const element of document.querySelectorAll(selector)) {
|
|
610
|
+
if (seen.has(element))
|
|
611
|
+
continue;
|
|
612
|
+
seen.add(element);
|
|
613
|
+
const rect = element.getBoundingClientRect();
|
|
614
|
+
if (rect.width <= 0 || rect.height <= 0)
|
|
615
|
+
continue;
|
|
616
|
+
bounds.push({
|
|
617
|
+
left: rect.left,
|
|
618
|
+
top: rect.top,
|
|
619
|
+
right: rect.right,
|
|
620
|
+
bottom: rect.bottom,
|
|
621
|
+
});
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
return bounds;
|
|
625
|
+
});
|
|
626
|
+
return boxes.some((box) => x >= box.left && x <= box.right && y >= box.top && y <= box.bottom);
|
|
627
|
+
}
|
|
628
|
+
catch {
|
|
629
|
+
return false;
|
|
630
|
+
}
|
|
631
|
+
}
|
|
517
632
|
async injectCursor() {
|
|
518
633
|
try {
|
|
519
634
|
const page = await this.v3.context.awaitActivePage();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3CuaAgentHandler.js","sourceRoot":"","sources":["../../../../../lib/v3/handlers/v3CuaAgentHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { computeActiveElementXpath } from \"../understudy/a11y/snapshot/index.js\";\nimport { V3 } from \"../v3.js\";\nimport { ToolSet } from \"ai\";\nimport { AgentClient } from \"../agent/AgentClient.js\";\nimport { AgentProvider } from \"../agent/AgentProvider.js\";\nimport { GoogleCUAClient } from \"../agent/GoogleCUAClient.js\";\nimport { OpenAICUAClient } from \"../agent/OpenAICUAClient.js\";\nimport { mapKeyToPlaywright } from \"../agent/utils/cuaKeyMapping.js\";\nimport { ensureXPath } from \"../agent/utils/xpath.js\";\nimport {\n ActionExecutionResult,\n AgentAction,\n AgentExecuteOptions,\n AgentHandlerOptions,\n AgentResult,\n SafetyConfirmationHandler,\n} from \"../types/public/agent.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport { type Action, V3FunctionName } from \"../types/public/methods.js\";\nimport { FlowLogger } from \"../flowlogger/FlowLogger.js\";\nimport { toTitleCase } from \"../../utils.js\";\nimport { StagehandClosedError } from \"../types/public/sdkErrors.js\";\n\nexport class V3CuaAgentHandler {\n private v3: V3;\n private agent: AgentClient;\n private provider: AgentProvider;\n private logger: (message: LogLine) => void;\n private agentClient: AgentClient;\n private options: AgentHandlerOptions;\n private highlightCursor: boolean;\n\n constructor(\n v3: V3,\n logger: (message: LogLine) => void,\n options: AgentHandlerOptions,\n tools?: ToolSet,\n ) {\n this.v3 = v3;\n this.logger = logger;\n this.options = options;\n\n this.provider = new AgentProvider(logger);\n const client = this.provider.getClient(\n options.modelName,\n options.clientOptions || {},\n options.userProvidedInstructions,\n tools,\n );\n this.agentClient = client;\n this.setupAgentClient();\n this.agent = client;\n }\n\n /**\n * Ensures the V3 context is still available (not closed).\n * Throws StagehandClosedError if stagehand.close() was called.\n */\n private ensureNotClosed(): void {\n if (!this.v3.context) {\n throw new StagehandClosedError();\n }\n }\n\n private setupAgentClient(): void {\n // Provide screenshots to the agent client\n this.agentClient.setScreenshotProvider(async () => {\n this.ensureNotClosed();\n const page = await this.v3.context.awaitActivePage();\n const screenshotBuffer = await page.screenshot({ fullPage: false });\n return screenshotBuffer.toString(\"base64\"); // base64 png\n });\n\n // Provide action executor\n this.agentClient.setActionHandler(async (action) => {\n this.ensureNotClosed();\n action.pageUrl = (await this.v3.context.awaitActivePage()).url();\n\n const defaultDelay = 500;\n const waitBetween =\n (this.options.clientOptions?.waitBetweenActions as number) ||\n defaultDelay;\n try {\n // Try to inject cursor before each action if enabled\n if (this.highlightCursor) {\n try {\n await this.injectCursor();\n } catch {\n // Ignore cursor injection failures\n }\n }\n await new Promise((r) => setTimeout(r, 300));\n // Skip logging for screenshot actions - they're no-ops, the actual\n // Page.screenshot in captureAndSendScreenshot() is logged separately\n const shouldLog = action.type !== \"screenshot\";\n if (shouldLog) {\n await FlowLogger.runWithLogging(\n {\n eventType: `V3Cua${toTitleCase(action.type)}`, // e.g. \"V3CuaClick\"\n data: {\n target: this.computePointerTarget(action),\n },\n },\n async (loggedAction: typeof action) =>\n await this.executeAction(loggedAction),\n [action],\n );\n } else {\n await this.executeAction(action);\n }\n\n action.timestamp = Date.now();\n\n await new Promise((r) => setTimeout(r, waitBetween));\n try {\n await this.captureAndSendScreenshot();\n } catch (e) {\n this.logger({\n category: \"agent\",\n message: `Warning: Failed to take screenshot after action: ${String(\n (e as Error)?.message ?? e,\n )}`,\n level: 1,\n });\n }\n } catch (error) {\n const msg = (error as Error)?.message ?? String(error);\n this.logger({\n category: \"agent\",\n message: `Error executing action ${action.type}: ${msg}`,\n level: 0,\n });\n throw error;\n }\n });\n\n void this.updateClientViewport();\n void this.updateClientUrl();\n }\n\n setSafetyConfirmationHandler(handler?: SafetyConfirmationHandler): void {\n if (\n this.agentClient instanceof GoogleCUAClient ||\n this.agentClient instanceof OpenAICUAClient\n ) {\n this.agentClient.setSafetyConfirmationHandler(handler);\n }\n }\n\n async execute(\n optionsOrInstruction: AgentExecuteOptions | string,\n ): Promise<AgentResult> {\n const options =\n typeof optionsOrInstruction === \"string\"\n ? { instruction: optionsOrInstruction }\n : optionsOrInstruction;\n\n this.setSafetyConfirmationHandler(options.callbacks?.onSafetyConfirmation);\n\n this.highlightCursor = options.highlightCursor !== false;\n\n // Redirect if blank\n const page = await this.v3.context.awaitActivePage();\n const currentUrl = page.url();\n if (!currentUrl || currentUrl === \"about:blank\") {\n this.logger({\n category: \"agent\",\n message: `Page URL is empty. Navigating to https://www.google.com ...`,\n level: 1,\n });\n await page.goto(\"https://www.google.com\", { waitUntil: \"load\" });\n }\n\n if (this.highlightCursor) {\n try {\n await this.injectCursor();\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.logger({\n category: \"agent\",\n message: `Warning: Failed to inject cursor: ${errorMessage}. Continuing with execution.`,\n level: 1,\n });\n // Continue execution even if cursor injection fails\n }\n }\n\n const start = Date.now();\n const result = await this.agent.execute({ options, logger: this.logger });\n const inferenceTimeMs = Date.now() - start;\n if (result.usage) {\n this.v3.updateMetrics(\n V3FunctionName.AGENT,\n result.usage.input_tokens,\n result.usage.output_tokens,\n result.usage.reasoning_tokens ?? 0,\n result.usage.cached_input_tokens ?? 0,\n inferenceTimeMs,\n );\n }\n return result;\n }\n\n private async executeAction(\n action: AgentAction,\n ): Promise<ActionExecutionResult> {\n const page = await this.v3.context.awaitActivePage();\n const recording = this.v3.isAgentReplayActive();\n switch (action.type) {\n case \"click\": {\n const { x, y, button = \"left\", clickCount } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: (button as \"left\" | \"right\" | \"middle\") ?? \"left\",\n clickCount: (clickCount as number) ?? 1,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"click\", x, y),\n method: \"click\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n button: (button as \"left\" | \"right\" | \"middle\") ?? \"left\",\n clickCount: (clickCount as number) ?? 1,\n });\n }\n return { success: true };\n }\n case \"double_click\":\n case \"doubleClick\": {\n const { x, y } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 2,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"double click\", x, y),\n method: \"doubleClick\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 2,\n });\n }\n return { success: true };\n }\n case \"tripleClick\": {\n const { x, y } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 3,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"triple click\", x, y),\n method: \"tripleClick\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n clickCount: 3,\n });\n }\n return { success: true };\n }\n case \"type\": {\n const { text } = action;\n await page.type(String(text ?? \"\"));\n if (recording) {\n const xpath = await computeActiveElementXpath(page);\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describeTypeAction(String(text ?? \"\")),\n method: \"type\",\n arguments: [String(text ?? \"\")],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n }\n return { success: true };\n }\n case \"keypress\": {\n const { keys } = action;\n const keyList = Array.isArray(keys) ? keys : [keys];\n const stagehandActions: Action[] = [];\n for (const rawKey of keyList) {\n const mapped = mapKeyToPlaywright(String(rawKey ?? \"\"));\n await page.keyPress(mapped);\n if (recording) {\n stagehandActions.push({\n selector: \"xpath=/html\",\n description: `press ${mapped}`,\n method: \"press\",\n arguments: [mapped],\n });\n }\n }\n if (recording && stagehandActions.length > 0) {\n this.recordCuaActStep(\n action,\n stagehandActions,\n stagehandActions\n .map((a) => a.description)\n .filter(Boolean)\n .join(\", \") || \"keypress\",\n );\n }\n return { success: true };\n }\n case \"scroll\": {\n const { x, y, scroll_x = 0, scroll_y = 0 } = action;\n await page.scroll(\n (x as number) ?? 0,\n (y as number) ?? 0,\n (scroll_x as number) ?? 0,\n (scroll_y as number) ?? 0,\n );\n this.v3.recordAgentReplayStep({\n type: \"scroll\",\n deltaX: Number(scroll_x ?? 0),\n deltaY: Number(scroll_y ?? 0),\n anchor:\n typeof x === \"number\" && typeof y === \"number\"\n ? { x: Math.round(x), y: Math.round(y) }\n : undefined,\n });\n return { success: true };\n }\n case \"drag\": {\n const { path } = action;\n if (Array.isArray(path) && path.length >= 2) {\n const start = path[0];\n const end = path[path.length - 1];\n if (recording) {\n const xps = await page.dragAndDrop(start.x, start.y, end.x, end.y, {\n steps: Math.min(20, Math.max(5, path.length)),\n delay: 10,\n returnXpath: true,\n });\n const [fromXpath, toXpath] = (xps as [string, string]) || [\"\", \"\"];\n const from = ensureXPath(fromXpath);\n const to = ensureXPath(toXpath);\n if (from && to) {\n const stagehandAction: Action = {\n selector: from,\n description: this.describeDragAction(),\n method: \"dragAndDrop\",\n arguments: [to],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.dragAndDrop(start.x, start.y, end.x, end.y, {\n steps: Math.min(20, Math.max(5, path.length)),\n delay: 10,\n });\n }\n }\n return { success: true };\n }\n case \"move\": {\n const { x, y } = action;\n if (typeof x === \"number\" && typeof y === \"number\") {\n if (recording) {\n const xpath = await page.hover(x, y, { returnXpath: true });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"hover\", x, y),\n method: \"hover\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.hover(x, y);\n }\n }\n return { success: true };\n }\n case \"wait\": {\n const time = action?.timeMs ?? 1000;\n await new Promise((r) => setTimeout(r, time));\n if (time > 0 && recording) {\n this.v3.recordAgentReplayStep({ type: \"wait\", timeMs: Number(time) });\n }\n return { success: true };\n }\n case \"screenshot\": {\n // No-op - screenshot is captured by captureAndSendScreenshot() after all actions\n return { success: true };\n }\n case \"goto\": {\n const { url } = action;\n await page.goto(String(url ?? \"\"), { waitUntil: \"load\" });\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"goto\",\n url: String(url ?? \"\"),\n });\n }\n return { success: true };\n }\n case \"back\": {\n await page.goBack();\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"back\",\n });\n }\n return { success: true };\n }\n case \"forward\": {\n await page.goForward();\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"forward\",\n });\n }\n return { success: true };\n }\n case \"open_web_browser\": {\n // Browser is already open, this is a no-op\n return { success: true };\n }\n case \"custom_tool\": {\n // Custom tools are handled by the agent client directly\n return { success: true };\n }\n default:\n this.logger({\n category: \"agent\",\n message: `Unknown action type: ${String(action.type)}`,\n level: 1,\n });\n return {\n success: false,\n error: `Unknown action ${String(action.type)}`,\n };\n }\n }\n\n // helper to make pointer target human-readable for logging\n private computePointerTarget(action: AgentAction): string | undefined {\n return typeof action.x === \"number\" && typeof action.y === \"number\"\n ? `(${action.x}, ${action.y})`\n : typeof action.selector === \"string\"\n ? action.selector\n : typeof action.input === \"string\"\n ? action.input\n : typeof action.description === \"string\"\n ? action.description\n : undefined;\n }\n\n private describePointerAction(kind: string, x: unknown, y: unknown): string {\n const nx = Number(x);\n const ny = Number(y);\n if (Number.isFinite(nx) && Number.isFinite(ny)) {\n return `${kind} at (${Math.round(nx)}, ${Math.round(ny)})`;\n }\n return kind;\n }\n\n private describeTypeAction(text: string): string {\n const snippet = text.length > 30 ? `${text.slice(0, 27)}...` : text;\n return `type \"${snippet}\"`;\n }\n\n private describeDragAction(): string {\n return \"drag and drop\";\n }\n\n private buildInstructionFallback(\n agentAction: AgentAction,\n fallback: string,\n ): string {\n const raw =\n (typeof agentAction.action === \"string\" && agentAction.action.trim()) ||\n (typeof agentAction.reasoning === \"string\" &&\n agentAction.reasoning.trim());\n return raw && raw.length > 0 ? raw : fallback;\n }\n\n private recordCuaActStep(\n agentAction: AgentAction,\n stagehandActions: Action[],\n fallback: string,\n ): void {\n if (!stagehandActions.length) return;\n const instruction = this.buildInstructionFallback(agentAction, fallback);\n const description = stagehandActions[0]?.description || instruction;\n const actions = stagehandActions.map((act) => ({\n ...act,\n description: act.description || description,\n }));\n this.v3.recordAgentReplayStep({\n type: \"act\",\n instruction,\n actions,\n actionDescription: description,\n message:\n typeof agentAction.reasoning === \"string\" &&\n agentAction.reasoning.trim().length > 0\n ? agentAction.reasoning.trim()\n : undefined,\n });\n }\n\n private async updateClientViewport(): Promise<void> {\n try {\n // For Google CUA, use configured viewport for coordinate normalization\n // advancedStealth uses fixed 1288x711, otherwise use configured viewport\n if (this.agentClient instanceof GoogleCUAClient) {\n const dims = this.v3.isAdvancedStealth\n ? { width: 1288, height: 711 }\n : this.v3.configuredViewport;\n this.agentClient.setViewport(dims.width, dims.height);\n } else {\n // For other clients, use actual window dimensions\n const page = await this.v3.context.awaitActivePage();\n const { w, h } = await page.mainFrame().evaluate<{\n w: number;\n h: number;\n }>(\"({ w: window.innerWidth, h: window.innerHeight })\");\n if (w && h) this.agentClient.setViewport(w, h);\n }\n } catch {\n //\n }\n }\n\n private async updateClientUrl(): Promise<void> {\n try {\n const page = await this.v3.context.awaitActivePage();\n const url = page.url();\n this.agentClient.setCurrentUrl(url);\n } catch {\n //\n }\n }\n\n async captureAndSendScreenshot(): Promise<unknown> {\n this.logger({\n category: \"agent\",\n message: \"Capturing screenshot\",\n level: 1,\n });\n try {\n const page = await this.v3.context.awaitActivePage();\n const screenshotBuffer = await page.screenshot({ fullPage: false });\n\n const currentUrl = page.url();\n return await this.agentClient.captureScreenshot({\n base64Image: screenshotBuffer.toString(\"base64\"),\n currentUrl,\n });\n } catch (e) {\n this.logger({\n category: \"agent\",\n message: `Error capturing screenshot: ${String((e as Error)?.message ?? e)}`,\n level: 0,\n });\n return null;\n }\n }\n\n private async injectCursor(): Promise<void> {\n try {\n const page = await this.v3.context.awaitActivePage();\n await page.enableCursorOverlay();\n } catch {\n // Best-effort only\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"v3CuaAgentHandler.js","sourceRoot":"","sources":["../../../../../lib/v3/handlers/v3CuaAgentHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { computeActiveElementXpath } from \"../understudy/a11y/snapshot/index.js\";\nimport { V3 } from \"../v3.js\";\nimport { ToolSet } from \"ai\";\nimport { AgentClient } from \"../agent/AgentClient.js\";\nimport { AgentProvider } from \"../agent/AgentProvider.js\";\nimport { GoogleCUAClient } from \"../agent/GoogleCUAClient.js\";\nimport { OpenAICUAClient } from \"../agent/OpenAICUAClient.js\";\nimport { mapKeyToPlaywright } from \"../agent/utils/cuaKeyMapping.js\";\nimport { ensureXPath } from \"../agent/utils/xpath.js\";\nimport {\n ActionExecutionResult,\n AgentAction,\n AgentExecuteOptions,\n AgentHandlerOptions,\n AgentResult,\n SafetyConfirmationHandler,\n} from \"../types/public/agent.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport { type Action, V3FunctionName } from \"../types/public/methods.js\";\nimport { FlowLogger } from \"../flowlogger/FlowLogger.js\";\nimport { toTitleCase } from \"../../utils.js\";\nimport { StagehandClosedError } from \"../types/public/sdkErrors.js\";\nimport {\n CaptchaSolver,\n CAPTCHA_SOLVED_MSG,\n CAPTCHA_ERRORED_MSG,\n} from \"../agent/utils/captchaSolver.js\";\n\nexport class V3CuaAgentHandler {\n private v3: V3;\n private agent: AgentClient;\n private provider: AgentProvider;\n private logger: (message: LogLine) => void;\n private agentClient: AgentClient;\n private options: AgentHandlerOptions;\n private highlightCursor: boolean;\n private captchaSolver: CaptchaSolver | null = null;\n private captchaClickGuardRemaining = 0;\n private currentInstruction = \"\";\n\n constructor(\n v3: V3,\n logger: (message: LogLine) => void,\n options: AgentHandlerOptions,\n tools?: ToolSet,\n ) {\n this.v3 = v3;\n this.logger = logger;\n this.options = options;\n\n this.provider = new AgentProvider(logger);\n const client = this.provider.getClient(\n options.modelName,\n options.clientOptions || {},\n options.userProvidedInstructions,\n tools,\n );\n this.agentClient = client;\n this.setupAgentClient();\n this.agent = client;\n }\n\n /**\n * Ensures the V3 context is still available (not closed).\n * Throws StagehandClosedError if stagehand.close() was called.\n */\n private ensureNotClosed(): void {\n if (!this.v3.context) {\n throw new StagehandClosedError();\n }\n }\n\n private setupAgentClient(): void {\n // Provide screenshots to the agent client\n this.agentClient.setScreenshotProvider(async () => {\n this.ensureNotClosed();\n const page = await this.v3.context.awaitActivePage();\n const screenshotBuffer = await page.screenshot({ fullPage: false });\n return screenshotBuffer.toString(\"base64\"); // base64 png\n });\n\n // Provide action executor\n this.agentClient.setActionHandler(async (action) => {\n this.ensureNotClosed();\n\n // Wait for captcha solver to finish before executing action\n if (this.captchaSolver) {\n if (this.captchaSolver.isSolving()) {\n this.logger({\n category: \"agent\",\n message:\n \"Captcha detected — waiting for Browserbase to solve it before continuing\",\n level: 1,\n });\n }\n await this.captchaSolver.waitIfSolving();\n this.handleCaptchaSolveResult(this.captchaSolver.consumeSolveResult());\n }\n\n action.pageUrl = (await this.v3.context.awaitActivePage()).url();\n if (await this.shouldSkipSolvedCaptchaInteraction(action)) {\n this.captchaClickGuardRemaining = Math.max(\n 0,\n this.captchaClickGuardRemaining - 1,\n );\n this.agentClient.addContextNote(\n `The captcha has already been solved automatically. Do not click the captcha checkbox, widget, or challenge again. Continue with the original task outside the captcha area. Original task: ${this.currentInstruction}`,\n );\n this.logger({\n category: \"agent\",\n message:\n \"Skipped click on solved captcha widget — injected follow-up guidance\",\n level: 1,\n });\n return;\n }\n\n const defaultDelay = 500;\n const waitBetween =\n (this.options.clientOptions?.waitBetweenActions as number) ||\n defaultDelay;\n try {\n // Try to inject cursor before each action if enabled\n if (this.highlightCursor) {\n try {\n await this.injectCursor();\n } catch {\n // Ignore cursor injection failures\n }\n }\n await new Promise((r) => setTimeout(r, 300));\n // Skip logging for screenshot actions - they're no-ops; the CUA client\n // takes its own screenshot via screenshotProvider between API turns.\n const shouldLog = action.type !== \"screenshot\";\n if (shouldLog) {\n await FlowLogger.runWithLogging(\n {\n eventType: `V3Cua${toTitleCase(action.type)}`, // e.g. \"V3CuaClick\"\n data: {\n target: this.computePointerTarget(action),\n },\n },\n async (loggedAction: typeof action) =>\n await this.executeAction(loggedAction),\n [action],\n );\n } else {\n await this.executeAction(action);\n }\n\n action.timestamp = Date.now();\n\n await new Promise((r) => setTimeout(r, waitBetween));\n } catch (error) {\n const msg = (error as Error)?.message ?? String(error);\n this.logger({\n category: \"agent\",\n message: `Error executing action ${action.type}: ${msg}`,\n level: 0,\n });\n throw error;\n }\n });\n\n void this.updateClientViewport();\n void this.updateClientUrl();\n }\n\n setSafetyConfirmationHandler(handler?: SafetyConfirmationHandler): void {\n if (\n this.agentClient instanceof GoogleCUAClient ||\n this.agentClient instanceof OpenAICUAClient\n ) {\n this.agentClient.setSafetyConfirmationHandler(handler);\n }\n }\n\n async execute(\n optionsOrInstruction: AgentExecuteOptions | string,\n ): Promise<AgentResult> {\n const options =\n typeof optionsOrInstruction === \"string\"\n ? { instruction: optionsOrInstruction }\n : optionsOrInstruction;\n\n this.setSafetyConfirmationHandler(options.callbacks?.onSafetyConfirmation);\n\n this.highlightCursor = options.highlightCursor !== false;\n this.currentInstruction = options.instruction;\n\n // Redirect if blank\n const page = await this.v3.context.awaitActivePage();\n const currentUrl = page.url();\n if (!currentUrl || currentUrl === \"about:blank\") {\n this.logger({\n category: \"agent\",\n message: `Page URL is empty. Navigating to https://www.google.com ...`,\n level: 1,\n });\n await page.goto(\"https://www.google.com\", { waitUntil: \"load\" });\n }\n\n // Set up captcha solver for Browserbase environments\n if (this.v3.isCaptchaAutoSolveEnabled) {\n this.captchaSolver = new CaptchaSolver();\n this.captchaSolver.init(() => this.v3.context.awaitActivePage());\n\n // Block the CUA agent loop before each step while a captcha is being solved\n this.agentClient.setPreStepHook(async () => {\n if (this.captchaSolver?.isSolving()) {\n this.logger({\n category: \"agent\",\n message:\n \"Captcha detected — waiting for Browserbase to solve it before continuing\",\n level: 1,\n });\n }\n await this.captchaSolver?.waitIfSolving();\n this.handleCaptchaSolveResult(this.captchaSolver?.consumeSolveResult());\n });\n }\n\n if (this.highlightCursor) {\n try {\n await this.injectCursor();\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.logger({\n category: \"agent\",\n message: `Warning: Failed to inject cursor: ${errorMessage}. Continuing with execution.`,\n level: 1,\n });\n // Continue execution even if cursor injection fails\n }\n }\n\n const start = Date.now();\n let result: AgentResult;\n try {\n result = await this.agent.execute({ options, logger: this.logger });\n } finally {\n this.captchaSolver?.dispose();\n this.captchaSolver = null;\n }\n const inferenceTimeMs = Date.now() - start;\n if (result.usage) {\n this.v3.updateMetrics(\n V3FunctionName.AGENT,\n result.usage.input_tokens,\n result.usage.output_tokens,\n result.usage.reasoning_tokens ?? 0,\n result.usage.cached_input_tokens ?? 0,\n inferenceTimeMs,\n );\n }\n return result;\n }\n\n private async executeAction(\n action: AgentAction,\n ): Promise<ActionExecutionResult> {\n const page = await this.v3.context.awaitActivePage();\n const recording = this.v3.isAgentReplayActive();\n switch (action.type) {\n case \"click\": {\n const { x, y, button = \"left\", clickCount } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: (button as \"left\" | \"right\" | \"middle\") ?? \"left\",\n clickCount: (clickCount as number) ?? 1,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"click\", x, y),\n method: \"click\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n button: (button as \"left\" | \"right\" | \"middle\") ?? \"left\",\n clickCount: (clickCount as number) ?? 1,\n });\n }\n return { success: true };\n }\n case \"double_click\":\n case \"doubleClick\": {\n const { x, y } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 2,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"double click\", x, y),\n method: \"doubleClick\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 2,\n });\n }\n return { success: true };\n }\n case \"tripleClick\": {\n const { x, y } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 3,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"triple click\", x, y),\n method: \"tripleClick\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n clickCount: 3,\n });\n }\n return { success: true };\n }\n case \"type\": {\n const { text } = action;\n await page.type(String(text ?? \"\"));\n if (recording) {\n const xpath = await computeActiveElementXpath(page);\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describeTypeAction(String(text ?? \"\")),\n method: \"type\",\n arguments: [String(text ?? \"\")],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n }\n return { success: true };\n }\n case \"keypress\": {\n const { keys } = action;\n const keyList = Array.isArray(keys) ? keys : [keys];\n const stagehandActions: Action[] = [];\n for (const rawKey of keyList) {\n const mapped = mapKeyToPlaywright(String(rawKey ?? \"\"));\n await page.keyPress(mapped);\n if (recording) {\n stagehandActions.push({\n selector: \"xpath=/html\",\n description: `press ${mapped}`,\n method: \"press\",\n arguments: [mapped],\n });\n }\n }\n if (recording && stagehandActions.length > 0) {\n this.recordCuaActStep(\n action,\n stagehandActions,\n stagehandActions\n .map((a) => a.description)\n .filter(Boolean)\n .join(\", \") || \"keypress\",\n );\n }\n return { success: true };\n }\n case \"scroll\": {\n const { x, y, scroll_x = 0, scroll_y = 0 } = action;\n await page.scroll(\n (x as number) ?? 0,\n (y as number) ?? 0,\n (scroll_x as number) ?? 0,\n (scroll_y as number) ?? 0,\n );\n this.v3.recordAgentReplayStep({\n type: \"scroll\",\n deltaX: Number(scroll_x ?? 0),\n deltaY: Number(scroll_y ?? 0),\n anchor:\n typeof x === \"number\" && typeof y === \"number\"\n ? { x: Math.round(x), y: Math.round(y) }\n : undefined,\n });\n return { success: true };\n }\n case \"drag\": {\n const { path } = action;\n if (Array.isArray(path) && path.length >= 2) {\n const start = path[0];\n const end = path[path.length - 1];\n if (recording) {\n const xps = await page.dragAndDrop(start.x, start.y, end.x, end.y, {\n steps: Math.min(20, Math.max(5, path.length)),\n delay: 10,\n returnXpath: true,\n });\n const [fromXpath, toXpath] = (xps as [string, string]) || [\"\", \"\"];\n const from = ensureXPath(fromXpath);\n const to = ensureXPath(toXpath);\n if (from && to) {\n const stagehandAction: Action = {\n selector: from,\n description: this.describeDragAction(),\n method: \"dragAndDrop\",\n arguments: [to],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.dragAndDrop(start.x, start.y, end.x, end.y, {\n steps: Math.min(20, Math.max(5, path.length)),\n delay: 10,\n });\n }\n }\n return { success: true };\n }\n case \"move\": {\n const { x, y } = action;\n if (typeof x === \"number\" && typeof y === \"number\") {\n if (recording) {\n const xpath = await page.hover(x, y, { returnXpath: true });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"hover\", x, y),\n method: \"hover\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.hover(x, y);\n }\n }\n return { success: true };\n }\n case \"wait\": {\n const time = action?.timeMs ?? 1000;\n await new Promise((r) => setTimeout(r, time));\n if (time > 0 && recording) {\n this.v3.recordAgentReplayStep({ type: \"wait\", timeMs: Number(time) });\n }\n return { success: true };\n }\n case \"screenshot\": {\n // No-op - the CUA client captures a screenshot itself after each\n // computer_call (or batch of actions) for the next request.\n return { success: true };\n }\n case \"goto\": {\n const { url } = action;\n await page.goto(String(url ?? \"\"), { waitUntil: \"load\" });\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"goto\",\n url: String(url ?? \"\"),\n });\n }\n return { success: true };\n }\n case \"back\": {\n await page.goBack();\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"back\",\n });\n }\n return { success: true };\n }\n case \"forward\": {\n await page.goForward();\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"forward\",\n });\n }\n return { success: true };\n }\n case \"open_web_browser\": {\n // Browser is already open, this is a no-op\n return { success: true };\n }\n case \"custom_tool\": {\n // Custom tools are handled by the agent client directly\n return { success: true };\n }\n default:\n this.logger({\n category: \"agent\",\n message: `Unknown action type: ${String(action.type)}`,\n level: 1,\n });\n return {\n success: false,\n error: `Unknown action ${String(action.type)}`,\n };\n }\n }\n\n // helper to make pointer target human-readable for logging\n private computePointerTarget(action: AgentAction): string | undefined {\n return typeof action.x === \"number\" && typeof action.y === \"number\"\n ? `(${action.x}, ${action.y})`\n : typeof action.selector === \"string\"\n ? action.selector\n : typeof action.input === \"string\"\n ? action.input\n : typeof action.description === \"string\"\n ? action.description\n : undefined;\n }\n\n private describePointerAction(kind: string, x: unknown, y: unknown): string {\n const nx = Number(x);\n const ny = Number(y);\n if (Number.isFinite(nx) && Number.isFinite(ny)) {\n return `${kind} at (${Math.round(nx)}, ${Math.round(ny)})`;\n }\n return kind;\n }\n\n private describeTypeAction(text: string): string {\n const snippet = text.length > 30 ? `${text.slice(0, 27)}...` : text;\n return `type \"${snippet}\"`;\n }\n\n private describeDragAction(): string {\n return \"drag and drop\";\n }\n\n private buildInstructionFallback(\n agentAction: AgentAction,\n fallback: string,\n ): string {\n const raw =\n (typeof agentAction.action === \"string\" && agentAction.action.trim()) ||\n (typeof agentAction.reasoning === \"string\" &&\n agentAction.reasoning.trim());\n return raw && raw.length > 0 ? raw : fallback;\n }\n\n private recordCuaActStep(\n agentAction: AgentAction,\n stagehandActions: Action[],\n fallback: string,\n ): void {\n if (!stagehandActions.length) return;\n const instruction = this.buildInstructionFallback(agentAction, fallback);\n const description = stagehandActions[0]?.description || instruction;\n const actions = stagehandActions.map((act) => ({\n ...act,\n description: act.description || description,\n }));\n this.v3.recordAgentReplayStep({\n type: \"act\",\n instruction,\n actions,\n actionDescription: description,\n message:\n typeof agentAction.reasoning === \"string\" &&\n agentAction.reasoning.trim().length > 0\n ? agentAction.reasoning.trim()\n : undefined,\n });\n }\n\n private async updateClientViewport(): Promise<void> {\n try {\n // For Google CUA, use configured viewport for coordinate normalization\n // Browserbase managed fingerprinting uses a fixed 1288x711 fallback.\n if (this.agentClient instanceof GoogleCUAClient) {\n const dims = this.v3.isVerified\n ? { width: 1288, height: 711 }\n : this.v3.configuredViewport;\n this.agentClient.setViewport(dims.width, dims.height);\n } else {\n // For other clients, use actual window dimensions\n const page = await this.v3.context.awaitActivePage();\n const { w, h } = await page.mainFrame().evaluate<{\n w: number;\n h: number;\n }>(\"({ w: window.innerWidth, h: window.innerHeight })\");\n if (w && h) this.agentClient.setViewport(w, h);\n }\n } catch {\n //\n }\n }\n\n private async updateClientUrl(): Promise<void> {\n try {\n const page = await this.v3.context.awaitActivePage();\n const url = page.url();\n this.agentClient.setCurrentUrl(url);\n } catch {\n //\n }\n }\n\n async captureAndSendScreenshot(): Promise<unknown> {\n this.logger({\n category: \"agent\",\n message: \"Capturing screenshot\",\n level: 1,\n });\n try {\n const page = await this.v3.context.awaitActivePage();\n const screenshotBuffer = await page.screenshot({ fullPage: false });\n\n const currentUrl = page.url();\n return await this.agentClient.captureScreenshot({\n base64Image: screenshotBuffer.toString(\"base64\"),\n currentUrl,\n });\n } catch (e) {\n this.logger({\n category: \"agent\",\n message: `Error capturing screenshot: ${String((e as Error)?.message ?? e)}`,\n level: 0,\n });\n return null;\n }\n }\n\n private handleCaptchaSolveResult(result?: {\n solved: boolean;\n errored: boolean;\n }): void {\n if (!result) return;\n\n if (result.solved) {\n this.captchaClickGuardRemaining = 3;\n this.agentClient.addContextNote(CAPTCHA_SOLVED_MSG);\n this.logger({\n category: \"agent\",\n message: \"Captcha solved — continuing with task\",\n level: 1,\n });\n }\n\n if (result.errored) {\n this.captchaClickGuardRemaining = 0;\n this.agentClient.addContextNote(CAPTCHA_ERRORED_MSG);\n this.logger({\n category: \"agent\",\n message: \"Captcha solver failed or errored\",\n level: 1,\n });\n }\n }\n\n private async shouldSkipSolvedCaptchaInteraction(\n action: AgentAction,\n ): Promise<boolean> {\n if (this.captchaClickGuardRemaining <= 0) {\n return false;\n }\n\n if (action.type !== \"click\") {\n return false;\n }\n\n const x = action.x;\n const y = action.y;\n if (typeof x !== \"number\" || typeof y !== \"number\") {\n return false;\n }\n\n try {\n const page = await this.v3.context.awaitActivePage();\n const boxes = await page.evaluate<\n Array<{ left: number; top: number; right: number; bottom: number }>\n >(() => {\n const selectors = [\n 'iframe[title*=\"reCAPTCHA\"]',\n 'iframe[src*=\"recaptcha\"]',\n 'iframe[src*=\"hcaptcha\"]',\n 'iframe[src*=\"turnstile\"]',\n \".g-recaptcha\",\n \"[data-sitekey]\",\n '[class*=\"captcha\"]',\n '[id*=\"captcha\"]',\n ];\n\n const seen = new Set<Element>();\n const bounds: Array<{\n left: number;\n top: number;\n right: number;\n bottom: number;\n }> = [];\n\n for (const selector of selectors) {\n for (const element of document.querySelectorAll(selector)) {\n if (seen.has(element)) continue;\n seen.add(element);\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) continue;\n bounds.push({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n });\n }\n }\n\n return bounds;\n });\n\n return boxes.some(\n (box) =>\n x >= box.left && x <= box.right && y >= box.top && y <= box.bottom,\n );\n } catch {\n return false;\n }\n }\n\n private async injectCursor(): Promise<void> {\n try {\n const page = await this.v3.context.awaitActivePage();\n await page.enableCursorOverlay();\n } catch {\n // Best-effort only\n }\n }\n}\n"]}
|
|
@@ -57,7 +57,7 @@ declare const StagehandDefault: {
|
|
|
57
57
|
Api: typeof PublicApi.Api;
|
|
58
58
|
AISdkClient: typeof PublicApi.AISdkClient;
|
|
59
59
|
CustomOpenAIClient: typeof PublicApi.CustomOpenAIClient;
|
|
60
|
-
AVAILABLE_CUA_MODELS: readonly ["openai/computer-use-preview", "openai/computer-use-preview-2025-03-11", "anthropic/claude-opus-4-5-20251101", "anthropic/claude-opus-4-6", "anthropic/claude-sonnet-4-6", "anthropic/claude-haiku-4-5-20251001", "anthropic/claude-sonnet-4-20250514", "anthropic/claude-sonnet-4-5-20250929", "google/gemini-2.5-computer-use-preview-10-2025", "google/gemini-3-flash-preview", "google/gemini-3-pro-preview", "microsoft/fara-7b"];
|
|
60
|
+
AVAILABLE_CUA_MODELS: readonly ["openai/gpt-5.4", "openai/computer-use-preview", "openai/computer-use-preview-2025-03-11", "anthropic/claude-opus-4-5-20251101", "anthropic/claude-opus-4-6", "anthropic/claude-sonnet-4-6", "anthropic/claude-haiku-4-5-20251001", "anthropic/claude-sonnet-4-20250514", "anthropic/claude-sonnet-4-5-20250929", "google/gemini-2.5-computer-use-preview-10-2025", "google/gemini-3-flash-preview", "google/gemini-3-pro-preview", "microsoft/fara-7b"];
|
|
61
61
|
StagehandAPIError: typeof PublicApi.StagehandAPIError;
|
|
62
62
|
StagehandAPIUnauthorizedError: typeof PublicApi.StagehandAPIUnauthorizedError;
|
|
63
63
|
StagehandHttpError: typeof PublicApi.StagehandHttpError;
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
import type { LanguageModelV2Middleware } from "@ai-sdk/provider";
|
|
1
2
|
import { LogLine } from "../types/public/logs.js";
|
|
2
3
|
import { AvailableModel, ClientOptions, ModelProvider } from "../types/public/model.js";
|
|
3
4
|
import { LLMClient } from "./LLMClient.js";
|
|
4
|
-
export declare function getAISDKLanguageModel(subProvider: string, subModelName: string, clientOptions?: ClientOptions): import("@ai-sdk/provider").LanguageModelV2;
|
|
5
|
+
export declare function getAISDKLanguageModel(subProvider: string, subModelName: string, clientOptions?: ClientOptions, middleware?: LanguageModelV2Middleware): import("@ai-sdk/provider").LanguageModelV2;
|
|
5
6
|
export declare class LLMProvider {
|
|
6
7
|
private logger;
|
|
7
|
-
|
|
8
|
+
private middleware?;
|
|
9
|
+
constructor(logger: (message: LogLine) => void, middleware?: LanguageModelV2Middleware);
|
|
8
10
|
getClient(modelName: AvailableModel, clientOptions?: ClientOptions, options?: {
|
|
9
11
|
experimental?: boolean;
|
|
10
12
|
disableAPI?: boolean;
|
|
13
|
+
middleware?: LanguageModelV2Middleware;
|
|
11
14
|
}): LLMClient;
|
|
12
15
|
static getModelProvider(modelName: AvailableModel): ModelProvider;
|
|
13
16
|
}
|
|
@@ -87,30 +87,36 @@ const modelToProviderMap = {
|
|
|
87
87
|
"gemini-2.5-flash-preview-04-17": "google",
|
|
88
88
|
"gemini-2.5-pro-preview-03-25": "google",
|
|
89
89
|
};
|
|
90
|
-
function getAISDKLanguageModel(subProvider, subModelName, clientOptions) {
|
|
90
|
+
function getAISDKLanguageModel(subProvider, subModelName, clientOptions, middleware) {
|
|
91
91
|
const hasValidOptions = clientOptions &&
|
|
92
92
|
Object.values(clientOptions).some((v) => v !== undefined && v !== null);
|
|
93
|
+
let model;
|
|
93
94
|
if (hasValidOptions) {
|
|
94
95
|
const creator = AISDKProvidersWithAPIKey[subProvider];
|
|
95
96
|
if (!creator) {
|
|
96
97
|
throw new sdkErrors_js_1.UnsupportedAISDKModelProviderError(subProvider, Object.keys(AISDKProvidersWithAPIKey));
|
|
97
98
|
}
|
|
98
99
|
const provider = creator(clientOptions);
|
|
99
|
-
|
|
100
|
-
return provider(subModelName);
|
|
100
|
+
model = provider(subModelName);
|
|
101
101
|
}
|
|
102
102
|
else {
|
|
103
103
|
const provider = AISDKProviders[subProvider];
|
|
104
104
|
if (!provider) {
|
|
105
105
|
throw new sdkErrors_js_1.UnsupportedAISDKModelProviderError(subProvider, Object.keys(AISDKProviders));
|
|
106
106
|
}
|
|
107
|
-
|
|
107
|
+
model = provider(subModelName);
|
|
108
108
|
}
|
|
109
|
+
if (middleware) {
|
|
110
|
+
return (0, ai_1.wrapLanguageModel)({ model, middleware });
|
|
111
|
+
}
|
|
112
|
+
return model;
|
|
109
113
|
}
|
|
110
114
|
class LLMProvider {
|
|
111
115
|
logger;
|
|
112
|
-
|
|
116
|
+
middleware;
|
|
117
|
+
constructor(logger, middleware) {
|
|
113
118
|
this.logger = logger;
|
|
119
|
+
this.middleware = middleware;
|
|
114
120
|
}
|
|
115
121
|
getClient(modelName, clientOptions, options) {
|
|
116
122
|
if (modelName.includes("/")) {
|
|
@@ -122,10 +128,12 @@ class LLMProvider {
|
|
|
122
128
|
!options?.experimental) {
|
|
123
129
|
throw new sdkErrors_js_1.ExperimentalNotConfiguredError("Vertex provider");
|
|
124
130
|
}
|
|
125
|
-
const
|
|
131
|
+
const effectiveMiddleware = options?.middleware ?? this.middleware;
|
|
132
|
+
const languageModel = getAISDKLanguageModel(subProvider, subModelName, clientOptions, effectiveMiddleware);
|
|
126
133
|
return new aisdk_js_1.AISdkClient({
|
|
127
134
|
model: languageModel,
|
|
128
135
|
logger: this.logger,
|
|
136
|
+
clientOptions,
|
|
129
137
|
});
|
|
130
138
|
}
|
|
131
139
|
// Model name doesn't include "/" - this format is deprecated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLMProvider.js","sourceRoot":"","sources":["../../../../../lib/v3/llm/LLMProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ExperimentalNotConfiguredError,\n UnsupportedAISDKModelProviderError,\n UnsupportedModelError,\n UnsupportedModelProviderError,\n} from \"../types/public/sdkErrors.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport {\n AvailableModel,\n ClientOptions,\n ModelProvider,\n} from \"../types/public/model.js\";\nimport { AISdkClient } from \"./aisdk.js\";\nimport { AnthropicClient } from \"./AnthropicClient.js\";\nimport { CerebrasClient } from \"./CerebrasClient.js\";\nimport { GoogleClient } from \"./GoogleClient.js\";\nimport { GroqClient } from \"./GroqClient.js\";\nimport { LLMClient } from \"./LLMClient.js\";\nimport { OpenAIClient } from \"./OpenAIClient.js\";\nimport { openai, createOpenAI } from \"@ai-sdk/openai\";\nimport { bedrock, createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\";\nimport { vertex, createVertex } from \"@ai-sdk/google-vertex\";\nimport { anthropic, createAnthropic } from \"@ai-sdk/anthropic\";\nimport { google, createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { xai, createXai } from \"@ai-sdk/xai\";\nimport { azure, createAzure } from \"@ai-sdk/azure\";\nimport { groq, createGroq } from \"@ai-sdk/groq\";\nimport { cerebras, createCerebras } from \"@ai-sdk/cerebras\";\nimport { togetherai, createTogetherAI } from \"@ai-sdk/togetherai\";\nimport { mistral, createMistral } from \"@ai-sdk/mistral\";\nimport { deepseek, createDeepSeek } from \"@ai-sdk/deepseek\";\nimport { perplexity, createPerplexity } from \"@ai-sdk/perplexity\";\nimport { ollama, createOllama } from \"ollama-ai-provider-v2\";\nimport { gateway, createGateway } from \"ai\";\nimport { AISDKProvider, AISDKCustomProvider } from \"../types/public/model.js\";\n\nconst AISDKProviders: Record<string, AISDKProvider> = {\n openai,\n bedrock,\n anthropic,\n google,\n xai,\n azure,\n groq,\n cerebras,\n togetherai,\n mistral,\n deepseek,\n perplexity,\n ollama,\n vertex,\n gateway,\n};\nconst AISDKProvidersWithAPIKey: Record<string, AISDKCustomProvider> = {\n openai: createOpenAI,\n bedrock: createAmazonBedrock,\n anthropic: createAnthropic,\n google: createGoogleGenerativeAI,\n vertex: createVertex,\n xai: createXai,\n azure: createAzure,\n groq: createGroq,\n cerebras: createCerebras,\n togetherai: createTogetherAI,\n mistral: createMistral,\n deepseek: createDeepSeek,\n perplexity: createPerplexity,\n ollama: createOllama,\n gateway: createGateway,\n};\n\nconst modelToProviderMap: { [key in AvailableModel]: ModelProvider } = {\n \"gpt-4.1\": \"openai\",\n \"gpt-4.1-mini\": \"openai\",\n \"gpt-4.1-nano\": \"openai\",\n \"o4-mini\": \"openai\",\n //prettier-ignore\n \"o3\": \"openai\",\n \"o3-mini\": \"openai\",\n //prettier-ignore\n \"o1\": \"openai\",\n \"o1-mini\": \"openai\",\n \"gpt-4o\": \"openai\",\n \"gpt-4o-mini\": \"openai\",\n \"gpt-4o-2024-08-06\": \"openai\",\n \"gpt-4.5-preview\": \"openai\",\n \"o1-preview\": \"openai\",\n \"cerebras-llama-3.3-70b\": \"cerebras\",\n \"cerebras-llama-3.1-8b\": \"cerebras\",\n \"groq-llama-3.3-70b-versatile\": \"groq\",\n \"groq-llama-3.3-70b-specdec\": \"groq\",\n \"moonshotai/kimi-k2-instruct\": \"groq\",\n \"gemini-1.5-flash\": \"google\",\n \"gemini-1.5-pro\": \"google\",\n \"gemini-1.5-flash-8b\": \"google\",\n \"gemini-2.0-flash-lite\": \"google\",\n \"gemini-2.0-flash\": \"google\",\n \"gemini-2.5-flash-preview-04-17\": \"google\",\n \"gemini-2.5-pro-preview-03-25\": \"google\",\n};\n\nexport function getAISDKLanguageModel(\n subProvider: string,\n subModelName: string,\n clientOptions?: ClientOptions,\n) {\n const hasValidOptions =\n clientOptions &&\n Object.values(clientOptions).some((v) => v !== undefined && v !== null);\n\n if (hasValidOptions) {\n const creator = AISDKProvidersWithAPIKey[subProvider];\n if (!creator) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProvidersWithAPIKey),\n );\n }\n const provider = creator(clientOptions);\n // Get the specific model from the provider\n return provider(subModelName);\n } else {\n const provider = AISDKProviders[subProvider];\n if (!provider) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProviders),\n );\n }\n return provider(subModelName);\n }\n}\n\nexport class LLMProvider {\n private logger: (message: LogLine) => void;\n\n constructor(logger: (message: LogLine) => void) {\n this.logger = logger;\n }\n\n getClient(\n modelName: AvailableModel,\n clientOptions?: ClientOptions,\n options?: { experimental?: boolean; disableAPI?: boolean },\n ): LLMClient {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n const subModelName = modelName.substring(firstSlashIndex + 1);\n if (\n subProvider === \"vertex\" &&\n !options?.disableAPI &&\n !options?.experimental\n ) {\n throw new ExperimentalNotConfiguredError(\"Vertex provider\");\n }\n\n const languageModel = getAISDKLanguageModel(\n subProvider,\n subModelName,\n clientOptions,\n );\n\n return new AISdkClient({\n model: languageModel,\n logger: this.logger,\n });\n }\n\n // Model name doesn't include \"/\" - this format is deprecated\n const provider = modelToProviderMap[modelName];\n if (!provider) {\n throw new UnsupportedModelError(Object.keys(modelToProviderMap));\n }\n\n this.logger({\n category: \"llm\",\n message: `Deprecation warning: Model format \"${modelName}\" is deprecated. Please use the provider/model format (e.g., \"openai/gpt-5\" or \"anthropic/claude-sonnet-4\").`,\n level: 0,\n });\n\n const availableModel = modelName as AvailableModel;\n switch (provider) {\n case \"openai\":\n return new OpenAIClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"anthropic\":\n return new AnthropicClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"cerebras\":\n return new CerebrasClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"groq\":\n return new GroqClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"google\":\n return new GoogleClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n default:\n // This default case handles unknown providers that exist in modelToProviderMap\n // but aren't implemented in the switch. This is an internal consistency issue.\n throw new UnsupportedModelProviderError([\n ...new Set(Object.values(modelToProviderMap)),\n ]);\n }\n }\n\n static getModelProvider(modelName: AvailableModel): ModelProvider {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n if (AISDKProviders[subProvider]) {\n return \"aisdk\";\n }\n }\n const provider = modelToProviderMap[modelName];\n return provider;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"LLMProvider.js","sourceRoot":"","sources":["../../../../../lib/v3/llm/LLMProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import type { LanguageModelV2Middleware } from \"@ai-sdk/provider\";\nimport {\n ExperimentalNotConfiguredError,\n UnsupportedAISDKModelProviderError,\n UnsupportedModelError,\n UnsupportedModelProviderError,\n} from \"../types/public/sdkErrors.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport {\n AvailableModel,\n ClientOptions,\n ModelProvider,\n} from \"../types/public/model.js\";\nimport { AISdkClient } from \"./aisdk.js\";\nimport { AnthropicClient } from \"./AnthropicClient.js\";\nimport { CerebrasClient } from \"./CerebrasClient.js\";\nimport { GoogleClient } from \"./GoogleClient.js\";\nimport { GroqClient } from \"./GroqClient.js\";\nimport { LLMClient } from \"./LLMClient.js\";\nimport { OpenAIClient } from \"./OpenAIClient.js\";\nimport { openai, createOpenAI } from \"@ai-sdk/openai\";\nimport { bedrock, createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\";\nimport { vertex, createVertex } from \"@ai-sdk/google-vertex\";\nimport { anthropic, createAnthropic } from \"@ai-sdk/anthropic\";\nimport { google, createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { xai, createXai } from \"@ai-sdk/xai\";\nimport { azure, createAzure } from \"@ai-sdk/azure\";\nimport { groq, createGroq } from \"@ai-sdk/groq\";\nimport { cerebras, createCerebras } from \"@ai-sdk/cerebras\";\nimport { togetherai, createTogetherAI } from \"@ai-sdk/togetherai\";\nimport { mistral, createMistral } from \"@ai-sdk/mistral\";\nimport { deepseek, createDeepSeek } from \"@ai-sdk/deepseek\";\nimport { perplexity, createPerplexity } from \"@ai-sdk/perplexity\";\nimport { ollama, createOllama } from \"ollama-ai-provider-v2\";\nimport { gateway, createGateway, wrapLanguageModel } from \"ai\";\nimport { AISDKProvider, AISDKCustomProvider } from \"../types/public/model.js\";\n\nconst AISDKProviders: Record<string, AISDKProvider> = {\n openai,\n bedrock,\n anthropic,\n google,\n xai,\n azure,\n groq,\n cerebras,\n togetherai,\n mistral,\n deepseek,\n perplexity,\n ollama,\n vertex,\n gateway,\n};\nconst AISDKProvidersWithAPIKey: Record<string, AISDKCustomProvider> = {\n openai: createOpenAI,\n bedrock: createAmazonBedrock,\n anthropic: createAnthropic,\n google: createGoogleGenerativeAI,\n vertex: createVertex,\n xai: createXai,\n azure: createAzure,\n groq: createGroq,\n cerebras: createCerebras,\n togetherai: createTogetherAI,\n mistral: createMistral,\n deepseek: createDeepSeek,\n perplexity: createPerplexity,\n ollama: createOllama,\n gateway: createGateway,\n};\n\nconst modelToProviderMap: { [key in AvailableModel]: ModelProvider } = {\n \"gpt-4.1\": \"openai\",\n \"gpt-4.1-mini\": \"openai\",\n \"gpt-4.1-nano\": \"openai\",\n \"o4-mini\": \"openai\",\n //prettier-ignore\n \"o3\": \"openai\",\n \"o3-mini\": \"openai\",\n //prettier-ignore\n \"o1\": \"openai\",\n \"o1-mini\": \"openai\",\n \"gpt-4o\": \"openai\",\n \"gpt-4o-mini\": \"openai\",\n \"gpt-4o-2024-08-06\": \"openai\",\n \"gpt-4.5-preview\": \"openai\",\n \"o1-preview\": \"openai\",\n \"cerebras-llama-3.3-70b\": \"cerebras\",\n \"cerebras-llama-3.1-8b\": \"cerebras\",\n \"groq-llama-3.3-70b-versatile\": \"groq\",\n \"groq-llama-3.3-70b-specdec\": \"groq\",\n \"moonshotai/kimi-k2-instruct\": \"groq\",\n \"gemini-1.5-flash\": \"google\",\n \"gemini-1.5-pro\": \"google\",\n \"gemini-1.5-flash-8b\": \"google\",\n \"gemini-2.0-flash-lite\": \"google\",\n \"gemini-2.0-flash\": \"google\",\n \"gemini-2.5-flash-preview-04-17\": \"google\",\n \"gemini-2.5-pro-preview-03-25\": \"google\",\n};\n\nexport function getAISDKLanguageModel(\n subProvider: string,\n subModelName: string,\n clientOptions?: ClientOptions,\n middleware?: LanguageModelV2Middleware,\n) {\n const hasValidOptions =\n clientOptions &&\n Object.values(clientOptions).some((v) => v !== undefined && v !== null);\n\n let model;\n if (hasValidOptions) {\n const creator = AISDKProvidersWithAPIKey[subProvider];\n if (!creator) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProvidersWithAPIKey),\n );\n }\n const provider = creator(clientOptions);\n model = provider(subModelName);\n } else {\n const provider = AISDKProviders[subProvider];\n if (!provider) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProviders),\n );\n }\n model = provider(subModelName);\n }\n\n if (middleware) {\n return wrapLanguageModel({ model, middleware });\n }\n return model;\n}\n\nexport class LLMProvider {\n private logger: (message: LogLine) => void;\n private middleware?: LanguageModelV2Middleware;\n\n constructor(\n logger: (message: LogLine) => void,\n middleware?: LanguageModelV2Middleware,\n ) {\n this.logger = logger;\n this.middleware = middleware;\n }\n\n getClient(\n modelName: AvailableModel,\n clientOptions?: ClientOptions,\n options?: {\n experimental?: boolean;\n disableAPI?: boolean;\n middleware?: LanguageModelV2Middleware;\n },\n ): LLMClient {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n const subModelName = modelName.substring(firstSlashIndex + 1);\n if (\n subProvider === \"vertex\" &&\n !options?.disableAPI &&\n !options?.experimental\n ) {\n throw new ExperimentalNotConfiguredError(\"Vertex provider\");\n }\n\n const effectiveMiddleware = options?.middleware ?? this.middleware;\n const languageModel = getAISDKLanguageModel(\n subProvider,\n subModelName,\n clientOptions,\n effectiveMiddleware,\n );\n\n return new AISdkClient({\n model: languageModel,\n logger: this.logger,\n clientOptions,\n });\n }\n\n // Model name doesn't include \"/\" - this format is deprecated\n const provider = modelToProviderMap[modelName];\n if (!provider) {\n throw new UnsupportedModelError(Object.keys(modelToProviderMap));\n }\n\n this.logger({\n category: \"llm\",\n message: `Deprecation warning: Model format \"${modelName}\" is deprecated. Please use the provider/model format (e.g., \"openai/gpt-5\" or \"anthropic/claude-sonnet-4\").`,\n level: 0,\n });\n\n const availableModel = modelName as AvailableModel;\n switch (provider) {\n case \"openai\":\n return new OpenAIClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"anthropic\":\n return new AnthropicClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"cerebras\":\n return new CerebrasClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"groq\":\n return new GroqClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"google\":\n return new GoogleClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n default:\n // This default case handles unknown providers that exist in modelToProviderMap\n // but aren't implemented in the switch. This is an internal consistency issue.\n throw new UnsupportedModelProviderError([\n ...new Set(Object.values(modelToProviderMap)),\n ]);\n }\n }\n\n static getModelProvider(modelName: AvailableModel): ModelProvider {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n if (AISDKProviders[subProvider]) {\n return \"aisdk\";\n }\n }\n const provider = modelToProviderMap[modelName];\n return provider;\n }\n}\n"]}
|