@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.
Files changed (308) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/lib/inference.d.ts +3 -1
  3. package/dist/cjs/lib/inference.js +3 -3
  4. package/dist/cjs/lib/inference.js.map +1 -1
  5. package/dist/cjs/lib/prompt.d.ts +1 -1
  6. package/dist/cjs/lib/prompt.js +24 -18
  7. package/dist/cjs/lib/prompt.js.map +1 -1
  8. package/dist/cjs/lib/v3/agent/AgentClient.d.ts +8 -0
  9. package/dist/cjs/lib/v3/agent/AgentClient.js +13 -0
  10. package/dist/cjs/lib/v3/agent/AgentClient.js.map +1 -1
  11. package/dist/cjs/lib/v3/agent/AgentProvider.js +1 -0
  12. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  13. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +3 -1
  14. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +61 -9
  15. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  16. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +1 -0
  17. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  18. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js +16 -0
  19. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
  20. package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +12 -6
  21. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +164 -49
  22. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  23. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +2 -2
  24. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js +10 -11
  25. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  26. package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +0 -1
  27. package/dist/cjs/lib/v3/agent/tools/fillform.js +7 -10
  28. package/dist/cjs/lib/v3/agent/tools/fillform.js.map +1 -1
  29. package/dist/cjs/lib/v3/agent/tools/index.js +1 -1
  30. package/dist/cjs/lib/v3/agent/tools/index.js.map +1 -1
  31. package/dist/cjs/lib/v3/agent/tools/keys.d.ts +2 -1
  32. package/dist/cjs/lib/v3/agent/tools/keys.js +57 -49
  33. package/dist/cjs/lib/v3/agent/tools/keys.js.map +1 -1
  34. package/dist/cjs/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
  35. package/dist/cjs/lib/v3/agent/utils/captchaSolver.js +175 -0
  36. package/dist/cjs/lib/v3/agent/utils/captchaSolver.js.map +1 -0
  37. package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.js +3 -5
  38. package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.js.map +1 -1
  39. package/dist/cjs/lib/v3/agent/utils/variables.d.ts +5 -0
  40. package/dist/cjs/lib/v3/agent/utils/variables.js +9 -0
  41. package/dist/cjs/lib/v3/agent/utils/variables.js.map +1 -1
  42. package/dist/cjs/lib/v3/api.d.ts +5 -3
  43. package/dist/cjs/lib/v3/api.js +5 -15
  44. package/dist/cjs/lib/v3/api.js.map +1 -1
  45. package/dist/cjs/lib/v3/cache/AgentCache.js +5 -3
  46. package/dist/cjs/lib/v3/cache/AgentCache.js.map +1 -1
  47. package/dist/cjs/lib/v3/flowlogger/EventStore.js +1 -1
  48. package/dist/cjs/lib/v3/flowlogger/EventStore.js.map +1 -1
  49. package/dist/cjs/lib/v3/handlers/observeHandler.js +2 -1
  50. package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -1
  51. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -1
  52. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +110 -46
  53. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  54. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
  55. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +131 -16
  56. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  57. package/dist/cjs/lib/v3/index.d.ts +1 -1
  58. package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +5 -2
  59. package/dist/cjs/lib/v3/llm/LLMProvider.js +14 -6
  60. package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
  61. package/dist/cjs/lib/v3/llm/OpenAIClient.js +1 -0
  62. package/dist/cjs/lib/v3/llm/OpenAIClient.js.map +1 -1
  63. package/dist/cjs/lib/v3/llm/aisdk.d.ts +3 -1
  64. package/dist/cjs/lib/v3/llm/aisdk.js +67 -17
  65. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  66. package/dist/cjs/lib/v3/types/private/cache.d.ts +0 -1
  67. package/dist/cjs/lib/v3/types/private/cache.js.map +1 -1
  68. package/dist/cjs/lib/v3/types/private/handlers.d.ts +1 -0
  69. package/dist/cjs/lib/v3/types/private/handlers.js.map +1 -1
  70. package/dist/cjs/lib/v3/types/public/agent.d.ts +8 -3
  71. package/dist/cjs/lib/v3/types/public/agent.js +1 -0
  72. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  73. package/dist/cjs/lib/v3/types/public/api.d.ts +54 -7
  74. package/dist/cjs/lib/v3/types/public/api.js +47 -16
  75. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  76. package/dist/cjs/lib/v3/types/public/methods.d.ts +1 -0
  77. package/dist/cjs/lib/v3/types/public/methods.js.map +1 -1
  78. package/dist/cjs/lib/v3/types/public/model.d.ts +32 -2
  79. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  80. package/dist/cjs/lib/v3/types/public/variables.d.ts +7 -0
  81. package/dist/cjs/lib/v3/types/public/variables.js +22 -0
  82. package/dist/cjs/lib/v3/types/public/variables.js.map +1 -0
  83. package/dist/cjs/lib/v3/understudy/context.js +11 -3
  84. package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
  85. package/dist/cjs/lib/v3/understudy/page.js +1 -1
  86. package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
  87. package/dist/cjs/lib/v3/v3.d.ts +23 -2
  88. package/dist/cjs/lib/v3/v3.js +111 -13
  89. package/dist/cjs/lib/v3/v3.js.map +1 -1
  90. package/dist/cjs/lib/version.d.ts +1 -1
  91. package/dist/cjs/lib/version.js +1 -1
  92. package/dist/cjs/lib/version.js.map +1 -1
  93. package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.d.ts +1 -0
  94. package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js +56 -0
  95. package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
  96. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +6 -6
  97. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
  98. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.d.ts +1 -0
  99. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js +56 -0
  100. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js.map +1 -0
  101. package/dist/cjs/tests/integration/timeouts.spec.js +1 -1
  102. package/dist/cjs/tests/integration/timeouts.spec.js.map +1 -1
  103. package/dist/cjs/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
  104. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +341 -0
  105. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +1 -0
  106. package/dist/cjs/tests/unit/agent-execution-model.test.js +25 -3
  107. package/dist/cjs/tests/unit/agent-execution-model.test.js.map +1 -1
  108. package/dist/cjs/tests/unit/agent-metrics.test.d.ts +1 -0
  109. package/dist/cjs/tests/unit/agent-metrics.test.js +112 -0
  110. package/dist/cjs/tests/unit/agent-metrics.test.js.map +1 -0
  111. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.d.ts +1 -0
  112. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js +23 -0
  113. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js.map +1 -0
  114. package/dist/cjs/tests/unit/aisdk-clients.test.d.ts +1 -0
  115. package/dist/cjs/tests/unit/aisdk-clients.test.js +90 -0
  116. package/dist/cjs/tests/unit/aisdk-clients.test.js.map +1 -0
  117. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +1 -0
  118. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js +250 -0
  119. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +1 -0
  120. package/dist/cjs/tests/unit/api-client-observe-variables.test.d.ts +1 -0
  121. package/dist/cjs/tests/unit/api-client-observe-variables.test.js +86 -0
  122. package/dist/cjs/tests/unit/api-client-observe-variables.test.js.map +1 -0
  123. package/dist/cjs/tests/unit/api-optional-model-api-key.test.d.ts +1 -0
  124. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js +95 -0
  125. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js.map +1 -0
  126. package/dist/cjs/tests/unit/api-variables-schema.test.d.ts +1 -0
  127. package/dist/cjs/tests/unit/api-variables-schema.test.js +37 -0
  128. package/dist/cjs/tests/unit/api-variables-schema.test.js.map +1 -0
  129. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +40 -0
  130. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +1 -1
  131. package/dist/cjs/tests/unit/captcha-solver.test.d.ts +1 -0
  132. package/dist/cjs/tests/unit/captcha-solver.test.js +154 -0
  133. package/dist/cjs/tests/unit/captcha-solver.test.js.map +1 -0
  134. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js +1 -1
  135. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +1 -1
  136. package/dist/cjs/tests/unit/llm-middleware.test.d.ts +1 -0
  137. package/dist/cjs/tests/unit/llm-middleware.test.js +495 -0
  138. package/dist/cjs/tests/unit/llm-middleware.test.js.map +1 -0
  139. package/dist/cjs/tests/unit/microsoft-cua-client.test.d.ts +1 -0
  140. package/dist/cjs/tests/unit/microsoft-cua-client.test.js +86 -0
  141. package/dist/cjs/tests/unit/microsoft-cua-client.test.js.map +1 -0
  142. package/dist/cjs/tests/unit/openai-cua-client.test.d.ts +1 -0
  143. package/dist/cjs/tests/unit/openai-cua-client.test.js +71 -0
  144. package/dist/cjs/tests/unit/openai-cua-client.test.js.map +1 -0
  145. package/dist/cjs/tests/unit/prompt-observe-variables.test.d.ts +1 -0
  146. package/dist/cjs/tests/unit/prompt-observe-variables.test.js +19 -0
  147. package/dist/cjs/tests/unit/prompt-observe-variables.test.js.map +1 -0
  148. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +1 -0
  149. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  150. package/dist/cjs/tests/unit/public-api/public-types.test.js.map +1 -1
  151. package/dist/cjs/tests/unit/timeout-handlers.test.js +50 -0
  152. package/dist/cjs/tests/unit/timeout-handlers.test.js.map +1 -1
  153. package/dist/esm/lib/inference.d.ts +3 -1
  154. package/dist/esm/lib/inference.js +3 -3
  155. package/dist/esm/lib/inference.js.map +1 -1
  156. package/dist/esm/lib/prompt.d.ts +1 -1
  157. package/dist/esm/lib/prompt.js +24 -18
  158. package/dist/esm/lib/prompt.js.map +1 -1
  159. package/dist/esm/lib/v3/agent/AgentClient.d.ts +8 -0
  160. package/dist/esm/lib/v3/agent/AgentClient.js +13 -0
  161. package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -1
  162. package/dist/esm/lib/v3/agent/AgentProvider.js +1 -0
  163. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  164. package/dist/esm/lib/v3/agent/AnthropicCUAClient.d.ts +3 -1
  165. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +61 -9
  166. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  167. package/dist/esm/lib/v3/agent/GoogleCUAClient.js +1 -0
  168. package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  169. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +16 -0
  170. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
  171. package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +12 -6
  172. package/dist/esm/lib/v3/agent/OpenAICUAClient.js +164 -49
  173. package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  174. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +2 -2
  175. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +10 -11
  176. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  177. package/dist/esm/lib/v3/agent/tools/fillform.d.ts +0 -1
  178. package/dist/esm/lib/v3/agent/tools/fillform.js +7 -10
  179. package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
  180. package/dist/esm/lib/v3/agent/tools/index.js +1 -1
  181. package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
  182. package/dist/esm/lib/v3/agent/tools/keys.d.ts +2 -1
  183. package/dist/esm/lib/v3/agent/tools/keys.js +57 -49
  184. package/dist/esm/lib/v3/agent/tools/keys.js.map +1 -1
  185. package/dist/esm/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
  186. package/dist/esm/lib/v3/agent/utils/captchaSolver.js +171 -0
  187. package/dist/esm/lib/v3/agent/utils/captchaSolver.js.map +1 -0
  188. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js +3 -5
  189. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js.map +1 -1
  190. package/dist/esm/lib/v3/agent/utils/variables.d.ts +5 -0
  191. package/dist/esm/lib/v3/agent/utils/variables.js +8 -0
  192. package/dist/esm/lib/v3/agent/utils/variables.js.map +1 -1
  193. package/dist/esm/lib/v3/api.d.ts +5 -3
  194. package/dist/esm/lib/v3/api.js +5 -15
  195. package/dist/esm/lib/v3/api.js.map +1 -1
  196. package/dist/esm/lib/v3/cache/AgentCache.js +5 -3
  197. package/dist/esm/lib/v3/cache/AgentCache.js.map +1 -1
  198. package/dist/esm/lib/v3/flowlogger/EventStore.js +1 -1
  199. package/dist/esm/lib/v3/flowlogger/EventStore.js.map +1 -1
  200. package/dist/esm/lib/v3/handlers/observeHandler.js +2 -1
  201. package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
  202. package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -1
  203. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +110 -46
  204. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  205. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
  206. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +131 -16
  207. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  208. package/dist/esm/lib/v3/index.d.ts +1 -1
  209. package/dist/esm/lib/v3/llm/LLMProvider.d.ts +5 -2
  210. package/dist/esm/lib/v3/llm/LLMProvider.js +15 -7
  211. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
  212. package/dist/esm/lib/v3/llm/OpenAIClient.js +1 -0
  213. package/dist/esm/lib/v3/llm/OpenAIClient.js.map +1 -1
  214. package/dist/esm/lib/v3/llm/aisdk.d.ts +3 -1
  215. package/dist/esm/lib/v3/llm/aisdk.js +67 -17
  216. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  217. package/dist/esm/lib/v3/types/private/cache.d.ts +0 -1
  218. package/dist/esm/lib/v3/types/private/cache.js.map +1 -1
  219. package/dist/esm/lib/v3/types/private/handlers.d.ts +1 -0
  220. package/dist/esm/lib/v3/types/private/handlers.js.map +1 -1
  221. package/dist/esm/lib/v3/types/public/agent.d.ts +8 -3
  222. package/dist/esm/lib/v3/types/public/agent.js +1 -0
  223. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  224. package/dist/esm/lib/v3/types/public/api.d.ts +54 -7
  225. package/dist/esm/lib/v3/types/public/api.js +42 -14
  226. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  227. package/dist/esm/lib/v3/types/public/methods.d.ts +1 -0
  228. package/dist/esm/lib/v3/types/public/methods.js.map +1 -1
  229. package/dist/esm/lib/v3/types/public/model.d.ts +32 -2
  230. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  231. package/dist/esm/lib/v3/types/public/variables.d.ts +7 -0
  232. package/dist/esm/lib/v3/types/public/variables.js +19 -0
  233. package/dist/esm/lib/v3/types/public/variables.js.map +1 -0
  234. package/dist/esm/lib/v3/understudy/context.js +11 -3
  235. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  236. package/dist/esm/lib/v3/understudy/page.js +1 -1
  237. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  238. package/dist/esm/lib/v3/v3.d.ts +23 -2
  239. package/dist/esm/lib/v3/v3.js +111 -14
  240. package/dist/esm/lib/v3/v3.js.map +1 -1
  241. package/dist/esm/lib/version.d.ts +1 -1
  242. package/dist/esm/lib/version.js +1 -1
  243. package/dist/esm/lib/version.js.map +1 -1
  244. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.d.ts +1 -0
  245. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js +54 -0
  246. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
  247. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +6 -6
  248. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
  249. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.d.ts +1 -0
  250. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js +54 -0
  251. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js.map +1 -0
  252. package/dist/esm/tests/integration/timeouts.spec.js +1 -1
  253. package/dist/esm/tests/integration/timeouts.spec.js.map +1 -1
  254. package/dist/esm/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
  255. package/dist/esm/tests/unit/agent-captcha-hooks.test.js +339 -0
  256. package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +1 -0
  257. package/dist/esm/tests/unit/agent-execution-model.test.js +25 -3
  258. package/dist/esm/tests/unit/agent-execution-model.test.js.map +1 -1
  259. package/dist/esm/tests/unit/agent-metrics.test.d.ts +1 -0
  260. package/dist/esm/tests/unit/agent-metrics.test.js +110 -0
  261. package/dist/esm/tests/unit/agent-metrics.test.js.map +1 -0
  262. package/dist/esm/tests/unit/agent-system-prompt-variables.test.d.ts +1 -0
  263. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js +21 -0
  264. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js.map +1 -0
  265. package/dist/esm/tests/unit/aisdk-clients.test.d.ts +1 -0
  266. package/dist/esm/tests/unit/aisdk-clients.test.js +88 -0
  267. package/dist/esm/tests/unit/aisdk-clients.test.js.map +1 -0
  268. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +1 -0
  269. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js +245 -0
  270. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +1 -0
  271. package/dist/esm/tests/unit/api-client-observe-variables.test.d.ts +1 -0
  272. package/dist/esm/tests/unit/api-client-observe-variables.test.js +84 -0
  273. package/dist/esm/tests/unit/api-client-observe-variables.test.js.map +1 -0
  274. package/dist/esm/tests/unit/api-optional-model-api-key.test.d.ts +1 -0
  275. package/dist/esm/tests/unit/api-optional-model-api-key.test.js +93 -0
  276. package/dist/esm/tests/unit/api-optional-model-api-key.test.js.map +1 -0
  277. package/dist/esm/tests/unit/api-variables-schema.test.d.ts +1 -0
  278. package/dist/esm/tests/unit/api-variables-schema.test.js +35 -0
  279. package/dist/esm/tests/unit/api-variables-schema.test.js.map +1 -0
  280. package/dist/esm/tests/unit/browserbase-session-accessors.test.js +40 -0
  281. package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +1 -1
  282. package/dist/esm/tests/unit/captcha-solver.test.d.ts +1 -0
  283. package/dist/esm/tests/unit/captcha-solver.test.js +152 -0
  284. package/dist/esm/tests/unit/captcha-solver.test.js.map +1 -0
  285. package/dist/esm/tests/unit/flowlogger-eventstore.test.js +1 -1
  286. package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +1 -1
  287. package/dist/esm/tests/unit/llm-middleware.test.d.ts +1 -0
  288. package/dist/esm/tests/unit/llm-middleware.test.js +460 -0
  289. package/dist/esm/tests/unit/llm-middleware.test.js.map +1 -0
  290. package/dist/esm/tests/unit/microsoft-cua-client.test.d.ts +1 -0
  291. package/dist/esm/tests/unit/microsoft-cua-client.test.js +84 -0
  292. package/dist/esm/tests/unit/microsoft-cua-client.test.js.map +1 -0
  293. package/dist/esm/tests/unit/openai-cua-client.test.d.ts +1 -0
  294. package/dist/esm/tests/unit/openai-cua-client.test.js +69 -0
  295. package/dist/esm/tests/unit/openai-cua-client.test.js.map +1 -0
  296. package/dist/esm/tests/unit/prompt-observe-variables.test.d.ts +1 -0
  297. package/dist/esm/tests/unit/prompt-observe-variables.test.js +17 -0
  298. package/dist/esm/tests/unit/prompt-observe-variables.test.js.map +1 -0
  299. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +1 -0
  300. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  301. package/dist/esm/tests/unit/public-api/public-types.test.js.map +1 -1
  302. package/dist/esm/tests/unit/timeout-handlers.test.js +50 -0
  303. package/dist/esm/tests/unit/timeout-handlers.test.js.map +1 -1
  304. package/package.json +5 -9
  305. package/dist/cjs/lib/v3/dom/build/rerender-index.js +0 -1
  306. package/dist/cjs/lib/v3/dom/build/v3-index.js +0 -1
  307. package/dist/esm/lib/v3/dom/build/rerender-index.js +0 -1
  308. package/dist/esm/lib/v3/dom/build/v3-index.js +0 -1
@@ -1,12 +1,19 @@
1
+ import type { LanguageModelV2Middleware } from "@ai-sdk/provider";
1
2
  import { z } from "zod";
2
3
  import { InferStagehandSchema, StagehandZodSchema } from "./zodCompat.js";
3
4
  import { LLMClient } from "./llm/LLMClient.js";
4
5
  import { AgentReplayStep } from "./types/private/index.js";
5
- import { AgentConfig, AgentExecuteOptions, AgentStreamExecuteOptions, AgentResult, LogLine, StagehandMetrics, Action, ActOptions, ActResult, defaultExtractSchema, ExtractOptions, HistoryEntry, ObserveOptions, pageTextSchema, V3FunctionName, V3Options, AgentStreamResult } from "./types/public/index.js";
6
+ import { AgentConfig, AgentExecuteOptions, AgentStreamExecuteOptions, AgentResult, LogLine, StagehandMetrics, Action, ActOptions, ActResult, defaultExtractSchema, ExtractOptions, HistoryEntry, ObserveOptions, pageTextSchema, V3FunctionName, AvailableModel, ClientOptions, V3Options, AgentStreamResult } from "./types/public/index.js";
6
7
  import { V3Context } from "./understudy/context.js";
7
8
  import { type FlowLoggerContext } from "./flowlogger/FlowLogger.js";
8
9
  import { EventEmitterWithWildcardSupport } from "./flowlogger/EventEmitter.js";
9
10
  import { EventStore } from "./flowlogger/EventStore.js";
11
+ type ResolvedModelConfiguration = {
12
+ modelName: AvailableModel;
13
+ clientOptions?: ClientOptions;
14
+ middleware?: LanguageModelV2Middleware;
15
+ };
16
+ export declare function resolveModelConfiguration(model?: V3Options["model"]): ResolvedModelConfiguration;
10
17
  /**
11
18
  * V3
12
19
  *
@@ -52,7 +59,18 @@ export declare class V3 {
52
59
  */
53
60
  get isBrowserbase(): boolean;
54
61
  /**
55
- * Returns true if advancedStealth is enabled in Browserbase settings.
62
+ * Returns true if captcha auto-solving is enabled on Browserbase.
63
+ * Defaults to true when not explicitly set to false.
64
+ */
65
+ get isCaptchaAutoSolveEnabled(): boolean;
66
+ /**
67
+ * Returns true if Browserbase Verified mode is enabled in settings.
68
+ * Legacy `advancedStealth` is treated as equivalent for backwards compatibility.
69
+ */
70
+ get isVerified(): boolean;
71
+ /**
72
+ * Backwards-compatible alias for Browserbase managed fingerprinting mode.
73
+ * @deprecated Use `isVerified` instead. This alias will be removed in a future version.
56
74
  */
57
75
  get isAdvancedStealth(): boolean;
58
76
  /**
@@ -90,6 +108,8 @@ export declare class V3 {
90
108
  * When using API mode, fetches metrics from the API. Otherwise returns local metrics.
91
109
  */
92
110
  get metrics(): Promise<StagehandMetrics>;
111
+ private mergeAgentMetricsWithLocalFallback;
112
+ private updateAgentMetricsFromUsage;
93
113
  private resolveLlmClient;
94
114
  private beginAgentReplayRecording;
95
115
  private endAgentReplayRecording;
@@ -199,3 +219,4 @@ export declare class V3 {
199
219
  execute: (instructionOrOptions: string | AgentExecuteOptions) => Promise<AgentResult>;
200
220
  };
201
221
  }
222
+ export {};
@@ -49,6 +49,7 @@ import { ExtractHandler } from "./handlers/extractHandler.js";
49
49
  import { ObserveHandler } from "./handlers/observeHandler.js";
50
50
  import { V3AgentHandler } from "./handlers/v3AgentHandler.js";
51
51
  import { V3CuaAgentHandler } from "./handlers/v3CuaAgentHandler.js";
52
+ import { CAPTCHA_CUA_SYSTEM_PROMPT_NOTE } from "./agent/utils/captchaSolver.js";
52
53
  import { createBrowserbaseSession } from "./launch/browserbase.js";
53
54
  import { launchLocalChrome } from "./launch/local.js";
54
55
  import { LLMProvider } from "./llm/LLMProvider.js";
@@ -70,7 +71,7 @@ import { ActTimeoutError } from "./types/public/sdkErrors.js";
70
71
  const DEFAULT_MODEL_NAME = "openai/gpt-4.1-mini";
71
72
  const DEFAULT_VIEWPORT = { width: 1288, height: 711 };
72
73
  const DEFAULT_AGENT_TOOL_TIMEOUT_MS = 45000;
73
- function resolveModelConfiguration(model) {
74
+ export function resolveModelConfiguration(model) {
74
75
  if (!model) {
75
76
  return { modelName: DEFAULT_MODEL_NAME };
76
77
  }
@@ -78,13 +79,14 @@ function resolveModelConfiguration(model) {
78
79
  return { modelName: model };
79
80
  }
80
81
  if (model && typeof model === "object") {
81
- const { modelName, ...clientOptions } = model;
82
+ const { modelName, middleware, ...clientOptions } = model;
82
83
  if (!modelName) {
83
84
  throw new StagehandInvalidArgumentError("model.modelName is required when providing client options.");
84
85
  }
85
86
  return {
86
87
  modelName,
87
88
  clientOptions: clientOptions,
89
+ middleware,
88
90
  };
89
91
  }
90
92
  return { modelName: DEFAULT_MODEL_NAME };
@@ -163,11 +165,29 @@ let V3 = (() => {
163
165
  return this.state.kind === "BROWSERBASE";
164
166
  }
165
167
  /**
166
- * Returns true if advancedStealth is enabled in Browserbase settings.
168
+ * Returns true if captcha auto-solving is enabled on Browserbase.
169
+ * Defaults to true when not explicitly set to false.
170
+ */
171
+ get isCaptchaAutoSolveEnabled() {
172
+ return (this.isBrowserbase &&
173
+ this.opts.browserbaseSessionCreateParams?.browserSettings
174
+ ?.solveCaptchas !== false);
175
+ }
176
+ /**
177
+ * Returns true if Browserbase Verified mode is enabled in settings.
178
+ * Legacy `advancedStealth` is treated as equivalent for backwards compatibility.
179
+ */
180
+ get isVerified() {
181
+ const browserSettings = this.opts.browserbaseSessionCreateParams?.browserSettings;
182
+ return (browserSettings?.verified === true ||
183
+ browserSettings?.advancedStealth === true);
184
+ }
185
+ /**
186
+ * Backwards-compatible alias for Browserbase managed fingerprinting mode.
187
+ * @deprecated Use `isVerified` instead. This alias will be removed in a future version.
167
188
  */
168
189
  get isAdvancedStealth() {
169
- return (this.opts.browserbaseSessionCreateParams?.browserSettings
170
- ?.advancedStealth === true);
190
+ return this.isVerified;
171
191
  }
172
192
  /**
173
193
  * Returns the configured viewport dimensions from launch options.
@@ -279,11 +299,11 @@ let V3 = (() => {
279
299
  catch {
280
300
  // ignore
281
301
  }
282
- const { modelName, clientOptions } = resolveModelConfiguration(opts.model);
302
+ const { modelName, clientOptions, middleware } = resolveModelConfiguration(opts.model);
283
303
  this.modelName = modelName;
284
304
  this.experimental = opts.experimental ?? false;
285
305
  this.logInferenceToFile = opts.logInferenceToFile ?? false;
286
- this.llmProvider = new LLMProvider(this.logger);
306
+ this.llmProvider = new LLMProvider(this.logger, middleware);
287
307
  this.domSettleTimeoutMs = opts.domSettleTimeout;
288
308
  this.disableAPI = opts.disableAPI ?? false;
289
309
  const baseClientOptions = clientOptions
@@ -342,7 +362,7 @@ let V3 = (() => {
342
362
  this.opts = opts;
343
363
  // FlowLogger always gets a per-instance session context and shared event
344
364
  // bus. The attached EventStore decides which sinks are active:
345
- // `verbose: 2` or `BROWSERBASE_FLOW_LOGS=1` enables pretty stderr output,
365
+ // `BROWSERBASE_FLOW_LOGS=1` enables pretty stderr output,
346
366
  // and `BROWSERBASE_CONFIG_DIR` enables the pretty/jsonl file sinks for this session.
347
367
  this.eventStore = new EventStore(this.sessionId, opts);
348
368
  this.flowLoggerContext = FlowLogger.init(this.sessionId, this.bus);
@@ -365,7 +385,10 @@ let V3 = (() => {
365
385
  get metrics() {
366
386
  if (this.apiClient) {
367
387
  // Fetch metrics from the API
368
- return this.apiClient.getReplayMetrics().catch((error) => {
388
+ return this.apiClient
389
+ .getReplayMetrics()
390
+ .then((metrics) => this.mergeAgentMetricsWithLocalFallback(metrics))
391
+ .catch((error) => {
369
392
  this.logger({
370
393
  category: "metrics",
371
394
  message: `Failed to fetch metrics from API: ${error}`,
@@ -378,21 +401,78 @@ let V3 = (() => {
378
401
  // Return local metrics wrapped in a Promise for consistency
379
402
  return Promise.resolve(this.stagehandMetrics);
380
403
  }
404
+ mergeAgentMetricsWithLocalFallback(remoteMetrics) {
405
+ // In API mode, agent.execute() is the only path that returns trusted inline
406
+ // usage today, so only repair the agent bucket from local state.
407
+ const agentPromptTokens = Math.max(remoteMetrics.agentPromptTokens, this.stagehandMetrics.agentPromptTokens);
408
+ const agentCompletionTokens = Math.max(remoteMetrics.agentCompletionTokens, this.stagehandMetrics.agentCompletionTokens);
409
+ const agentReasoningTokens = Math.max(remoteMetrics.agentReasoningTokens, this.stagehandMetrics.agentReasoningTokens);
410
+ const agentCachedInputTokens = Math.max(remoteMetrics.agentCachedInputTokens, this.stagehandMetrics.agentCachedInputTokens);
411
+ const agentInferenceTimeMs = Math.max(remoteMetrics.agentInferenceTimeMs, this.stagehandMetrics.agentInferenceTimeMs);
412
+ const metrics = {
413
+ ...remoteMetrics,
414
+ agentPromptTokens,
415
+ agentCompletionTokens,
416
+ agentReasoningTokens,
417
+ agentCachedInputTokens,
418
+ agentInferenceTimeMs,
419
+ totalPromptTokens: 0,
420
+ totalCompletionTokens: 0,
421
+ totalReasoningTokens: 0,
422
+ totalCachedInputTokens: 0,
423
+ totalInferenceTimeMs: 0,
424
+ };
425
+ metrics.totalPromptTokens =
426
+ metrics.actPromptTokens +
427
+ metrics.extractPromptTokens +
428
+ metrics.observePromptTokens +
429
+ metrics.agentPromptTokens;
430
+ metrics.totalCompletionTokens =
431
+ metrics.actCompletionTokens +
432
+ metrics.extractCompletionTokens +
433
+ metrics.observeCompletionTokens +
434
+ metrics.agentCompletionTokens;
435
+ metrics.totalReasoningTokens =
436
+ metrics.actReasoningTokens +
437
+ metrics.extractReasoningTokens +
438
+ metrics.observeReasoningTokens +
439
+ metrics.agentReasoningTokens;
440
+ metrics.totalCachedInputTokens =
441
+ metrics.actCachedInputTokens +
442
+ metrics.extractCachedInputTokens +
443
+ metrics.observeCachedInputTokens +
444
+ metrics.agentCachedInputTokens;
445
+ metrics.totalInferenceTimeMs =
446
+ metrics.actInferenceTimeMs +
447
+ metrics.extractInferenceTimeMs +
448
+ metrics.observeInferenceTimeMs +
449
+ metrics.agentInferenceTimeMs;
450
+ return metrics;
451
+ }
452
+ updateAgentMetricsFromUsage(usage) {
453
+ if (!usage) {
454
+ return;
455
+ }
456
+ this.updateMetrics(V3FunctionName.AGENT, usage.input_tokens, usage.output_tokens, usage.reasoning_tokens ?? 0, usage.cached_input_tokens ?? 0, usage.inference_time_ms);
457
+ }
381
458
  resolveLlmClient(model) {
382
459
  if (!model) {
383
460
  return this.llmClient;
384
461
  }
385
462
  let modelName;
386
463
  let clientOptions;
464
+ let perCallMiddleware;
387
465
  if (typeof model === "string") {
388
466
  modelName = model;
389
467
  }
390
468
  else {
391
- const { modelName: overrideModelName, ...rest } = model;
469
+ const { modelName: overrideModelName, middleware, ...rest } = model;
392
470
  modelName = overrideModelName;
393
471
  clientOptions = rest;
472
+ perCallMiddleware = middleware;
394
473
  }
395
474
  if (modelName === this.modelName &&
475
+ !perCallMiddleware &&
396
476
  (!clientOptions || Object.keys(clientOptions).length === 0)) {
397
477
  return this.llmClient;
398
478
  }
@@ -409,6 +489,13 @@ let V3 = (() => {
409
489
  mergedOptions.apiKey = apiKey;
410
490
  }
411
491
  }
492
+ if (perCallMiddleware) {
493
+ return this.llmProvider.getClient(modelName, mergedOptions, {
494
+ experimental: this.experimental,
495
+ disableAPI: this.disableAPI,
496
+ middleware: perCallMiddleware,
497
+ });
498
+ }
412
499
  const cacheKey = JSON.stringify({
413
500
  modelName,
414
501
  clientOptions: mergedOptions,
@@ -417,7 +504,10 @@ let V3 = (() => {
417
504
  if (cached) {
418
505
  return cached;
419
506
  }
420
- const client = this.llmProvider.getClient(modelName, mergedOptions, { experimental: this.experimental, disableAPI: this.disableAPI });
507
+ const client = this.llmProvider.getClient(modelName, mergedOptions, {
508
+ experimental: this.experimental,
509
+ disableAPI: this.disableAPI,
510
+ });
421
511
  this.overrideLlmClients.set(cacheKey, client);
422
512
  return client;
423
513
  }
@@ -1053,6 +1143,7 @@ let V3 = (() => {
1053
1143
  const handlerParams = {
1054
1144
  instruction,
1055
1145
  model: options?.model,
1146
+ variables: options?.variables,
1056
1147
  timeout: options?.timeout,
1057
1148
  selector: options?.selector,
1058
1149
  page: page,
@@ -1072,6 +1163,7 @@ let V3 = (() => {
1072
1163
  // history: record observe call (omit page object)
1073
1164
  this.addToHistory("observe", {
1074
1165
  instruction,
1166
+ variables: options?.variables,
1075
1167
  timeout: options?.timeout,
1076
1168
  }, results);
1077
1169
  return results;
@@ -1339,7 +1431,7 @@ let V3 = (() => {
1339
1431
  ? this.resolveLlmClient(options.model)
1340
1432
  : this.llmClient;
1341
1433
  const resolvedExecutionModel = options?.executionModel ?? options?.model;
1342
- const handler = new V3AgentHandler(this, this.logger, agentLlmClient, resolvedExecutionModel, options?.systemPrompt, tools, options?.mode);
1434
+ const handler = new V3AgentHandler(this, this.logger, agentLlmClient, resolvedExecutionModel, options?.systemPrompt, tools, options?.mode, this.isCaptchaAutoSolveEnabled);
1343
1435
  const resolvedOptions = typeof instructionOrOptions === "string"
1344
1436
  ? {
1345
1437
  instruction: instructionOrOptions,
@@ -1442,8 +1534,11 @@ let V3 = (() => {
1442
1534
  const handler = new V3CuaAgentHandler(this, this.logger, {
1443
1535
  modelName,
1444
1536
  clientOptions,
1445
- userProvidedInstructions: options.systemPrompt ??
1446
- `You are a helpful assistant that can use a web browser.\nDo not ask follow up questions, the user will trust your judgement.`,
1537
+ userProvidedInstructions: (options.systemPrompt ??
1538
+ `You are a helpful assistant that can use a web browser.\nDo not ask follow up questions, the user will trust your judgement.`) +
1539
+ (this.isCaptchaAutoSolveEnabled
1540
+ ? CAPTCHA_CUA_SYSTEM_PROMPT_NOTE
1541
+ : ""),
1447
1542
  }, tools);
1448
1543
  const resolvedOptions = typeof instructionOrOptions === "string"
1449
1544
  ? {
@@ -1489,6 +1584,7 @@ let V3 = (() => {
1489
1584
  if (this.apiClient && !this.experimental) {
1490
1585
  const page = await this.ctx.awaitActivePage();
1491
1586
  result = await this.apiClient.agentExecute(options, resolvedOptions, page.mainFrameId(), !!cacheContext);
1587
+ this.updateAgentMetricsFromUsage(result.usage);
1492
1588
  if (cacheContext) {
1493
1589
  const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
1494
1590
  await this.agentCache.storeTransferredEntry(transferredEntry);
@@ -1572,6 +1668,7 @@ let V3 = (() => {
1572
1668
  if (this.apiClient && !this.experimental) {
1573
1669
  const page = await this.ctx.awaitActivePage();
1574
1670
  result = await this.apiClient.agentExecute(options ?? {}, resolvedOptions, page.mainFrameId(), !!cacheContext);
1671
+ this.updateAgentMetricsFromUsage(result.usage);
1575
1672
  if (cacheContext) {
1576
1673
  const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
1577
1674
  await this.agentCache.storeTransferredEntry(transferredEntry);