@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 {};
@@ -71,6 +71,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
71
71
  };
72
72
  Object.defineProperty(exports, "__esModule", { value: true });
73
73
  exports.V3 = void 0;
74
+ exports.resolveModelConfiguration = resolveModelConfiguration;
74
75
  const fs_1 = __importDefault(require("fs"));
75
76
  const os_1 = __importDefault(require("os"));
76
77
  const path_1 = __importDefault(require("path"));
@@ -88,6 +89,7 @@ const extractHandler_js_1 = require("./handlers/extractHandler.js");
88
89
  const observeHandler_js_1 = require("./handlers/observeHandler.js");
89
90
  const v3AgentHandler_js_1 = require("./handlers/v3AgentHandler.js");
90
91
  const v3CuaAgentHandler_js_1 = require("./handlers/v3CuaAgentHandler.js");
92
+ const captchaSolver_js_1 = require("./agent/utils/captchaSolver.js");
91
93
  const browserbase_js_1 = require("./launch/browserbase.js");
92
94
  const local_js_1 = require("./launch/local.js");
93
95
  const LLMProvider_js_1 = require("./llm/LLMProvider.js");
@@ -117,13 +119,14 @@ function resolveModelConfiguration(model) {
117
119
  return { modelName: model };
118
120
  }
119
121
  if (model && typeof model === "object") {
120
- const { modelName, ...clientOptions } = model;
122
+ const { modelName, middleware, ...clientOptions } = model;
121
123
  if (!modelName) {
122
124
  throw new index_js_1.StagehandInvalidArgumentError("model.modelName is required when providing client options.");
123
125
  }
124
126
  return {
125
127
  modelName,
126
128
  clientOptions: clientOptions,
129
+ middleware,
127
130
  };
128
131
  }
129
132
  return { modelName: DEFAULT_MODEL_NAME };
@@ -202,11 +205,29 @@ let V3 = (() => {
202
205
  return this.state.kind === "BROWSERBASE";
203
206
  }
204
207
  /**
205
- * Returns true if advancedStealth is enabled in Browserbase settings.
208
+ * Returns true if captcha auto-solving is enabled on Browserbase.
209
+ * Defaults to true when not explicitly set to false.
210
+ */
211
+ get isCaptchaAutoSolveEnabled() {
212
+ return (this.isBrowserbase &&
213
+ this.opts.browserbaseSessionCreateParams?.browserSettings
214
+ ?.solveCaptchas !== false);
215
+ }
216
+ /**
217
+ * Returns true if Browserbase Verified mode is enabled in settings.
218
+ * Legacy `advancedStealth` is treated as equivalent for backwards compatibility.
219
+ */
220
+ get isVerified() {
221
+ const browserSettings = this.opts.browserbaseSessionCreateParams?.browserSettings;
222
+ return (browserSettings?.verified === true ||
223
+ browserSettings?.advancedStealth === true);
224
+ }
225
+ /**
226
+ * Backwards-compatible alias for Browserbase managed fingerprinting mode.
227
+ * @deprecated Use `isVerified` instead. This alias will be removed in a future version.
206
228
  */
207
229
  get isAdvancedStealth() {
208
- return (this.opts.browserbaseSessionCreateParams?.browserSettings
209
- ?.advancedStealth === true);
230
+ return this.isVerified;
210
231
  }
211
232
  /**
212
233
  * Returns the configured viewport dimensions from launch options.
@@ -318,11 +339,11 @@ let V3 = (() => {
318
339
  catch {
319
340
  // ignore
320
341
  }
321
- const { modelName, clientOptions } = resolveModelConfiguration(opts.model);
342
+ const { modelName, clientOptions, middleware } = resolveModelConfiguration(opts.model);
322
343
  this.modelName = modelName;
323
344
  this.experimental = opts.experimental ?? false;
324
345
  this.logInferenceToFile = opts.logInferenceToFile ?? false;
325
- this.llmProvider = new LLMProvider_js_1.LLMProvider(this.logger);
346
+ this.llmProvider = new LLMProvider_js_1.LLMProvider(this.logger, middleware);
326
347
  this.domSettleTimeoutMs = opts.domSettleTimeout;
327
348
  this.disableAPI = opts.disableAPI ?? false;
328
349
  const baseClientOptions = clientOptions
@@ -381,7 +402,7 @@ let V3 = (() => {
381
402
  this.opts = opts;
382
403
  // FlowLogger always gets a per-instance session context and shared event
383
404
  // bus. The attached EventStore decides which sinks are active:
384
- // `verbose: 2` or `BROWSERBASE_FLOW_LOGS=1` enables pretty stderr output,
405
+ // `BROWSERBASE_FLOW_LOGS=1` enables pretty stderr output,
385
406
  // and `BROWSERBASE_CONFIG_DIR` enables the pretty/jsonl file sinks for this session.
386
407
  this.eventStore = new EventStore_js_1.EventStore(this.sessionId, opts);
387
408
  this.flowLoggerContext = FlowLogger_js_1.FlowLogger.init(this.sessionId, this.bus);
@@ -404,7 +425,10 @@ let V3 = (() => {
404
425
  get metrics() {
405
426
  if (this.apiClient) {
406
427
  // Fetch metrics from the API
407
- return this.apiClient.getReplayMetrics().catch((error) => {
428
+ return this.apiClient
429
+ .getReplayMetrics()
430
+ .then((metrics) => this.mergeAgentMetricsWithLocalFallback(metrics))
431
+ .catch((error) => {
408
432
  this.logger({
409
433
  category: "metrics",
410
434
  message: `Failed to fetch metrics from API: ${error}`,
@@ -417,21 +441,78 @@ let V3 = (() => {
417
441
  // Return local metrics wrapped in a Promise for consistency
418
442
  return Promise.resolve(this.stagehandMetrics);
419
443
  }
444
+ mergeAgentMetricsWithLocalFallback(remoteMetrics) {
445
+ // In API mode, agent.execute() is the only path that returns trusted inline
446
+ // usage today, so only repair the agent bucket from local state.
447
+ const agentPromptTokens = Math.max(remoteMetrics.agentPromptTokens, this.stagehandMetrics.agentPromptTokens);
448
+ const agentCompletionTokens = Math.max(remoteMetrics.agentCompletionTokens, this.stagehandMetrics.agentCompletionTokens);
449
+ const agentReasoningTokens = Math.max(remoteMetrics.agentReasoningTokens, this.stagehandMetrics.agentReasoningTokens);
450
+ const agentCachedInputTokens = Math.max(remoteMetrics.agentCachedInputTokens, this.stagehandMetrics.agentCachedInputTokens);
451
+ const agentInferenceTimeMs = Math.max(remoteMetrics.agentInferenceTimeMs, this.stagehandMetrics.agentInferenceTimeMs);
452
+ const metrics = {
453
+ ...remoteMetrics,
454
+ agentPromptTokens,
455
+ agentCompletionTokens,
456
+ agentReasoningTokens,
457
+ agentCachedInputTokens,
458
+ agentInferenceTimeMs,
459
+ totalPromptTokens: 0,
460
+ totalCompletionTokens: 0,
461
+ totalReasoningTokens: 0,
462
+ totalCachedInputTokens: 0,
463
+ totalInferenceTimeMs: 0,
464
+ };
465
+ metrics.totalPromptTokens =
466
+ metrics.actPromptTokens +
467
+ metrics.extractPromptTokens +
468
+ metrics.observePromptTokens +
469
+ metrics.agentPromptTokens;
470
+ metrics.totalCompletionTokens =
471
+ metrics.actCompletionTokens +
472
+ metrics.extractCompletionTokens +
473
+ metrics.observeCompletionTokens +
474
+ metrics.agentCompletionTokens;
475
+ metrics.totalReasoningTokens =
476
+ metrics.actReasoningTokens +
477
+ metrics.extractReasoningTokens +
478
+ metrics.observeReasoningTokens +
479
+ metrics.agentReasoningTokens;
480
+ metrics.totalCachedInputTokens =
481
+ metrics.actCachedInputTokens +
482
+ metrics.extractCachedInputTokens +
483
+ metrics.observeCachedInputTokens +
484
+ metrics.agentCachedInputTokens;
485
+ metrics.totalInferenceTimeMs =
486
+ metrics.actInferenceTimeMs +
487
+ metrics.extractInferenceTimeMs +
488
+ metrics.observeInferenceTimeMs +
489
+ metrics.agentInferenceTimeMs;
490
+ return metrics;
491
+ }
492
+ updateAgentMetricsFromUsage(usage) {
493
+ if (!usage) {
494
+ return;
495
+ }
496
+ this.updateMetrics(index_js_1.V3FunctionName.AGENT, usage.input_tokens, usage.output_tokens, usage.reasoning_tokens ?? 0, usage.cached_input_tokens ?? 0, usage.inference_time_ms);
497
+ }
420
498
  resolveLlmClient(model) {
421
499
  if (!model) {
422
500
  return this.llmClient;
423
501
  }
424
502
  let modelName;
425
503
  let clientOptions;
504
+ let perCallMiddleware;
426
505
  if (typeof model === "string") {
427
506
  modelName = model;
428
507
  }
429
508
  else {
430
- const { modelName: overrideModelName, ...rest } = model;
509
+ const { modelName: overrideModelName, middleware, ...rest } = model;
431
510
  modelName = overrideModelName;
432
511
  clientOptions = rest;
512
+ perCallMiddleware = middleware;
433
513
  }
434
514
  if (modelName === this.modelName &&
515
+ !perCallMiddleware &&
435
516
  (!clientOptions || Object.keys(clientOptions).length === 0)) {
436
517
  return this.llmClient;
437
518
  }
@@ -448,6 +529,13 @@ let V3 = (() => {
448
529
  mergedOptions.apiKey = apiKey;
449
530
  }
450
531
  }
532
+ if (perCallMiddleware) {
533
+ return this.llmProvider.getClient(modelName, mergedOptions, {
534
+ experimental: this.experimental,
535
+ disableAPI: this.disableAPI,
536
+ middleware: perCallMiddleware,
537
+ });
538
+ }
451
539
  const cacheKey = JSON.stringify({
452
540
  modelName,
453
541
  clientOptions: mergedOptions,
@@ -456,7 +544,10 @@ let V3 = (() => {
456
544
  if (cached) {
457
545
  return cached;
458
546
  }
459
- const client = this.llmProvider.getClient(modelName, mergedOptions, { experimental: this.experimental, disableAPI: this.disableAPI });
547
+ const client = this.llmProvider.getClient(modelName, mergedOptions, {
548
+ experimental: this.experimental,
549
+ disableAPI: this.disableAPI,
550
+ });
460
551
  this.overrideLlmClients.set(cacheKey, client);
461
552
  return client;
462
553
  }
@@ -1092,6 +1183,7 @@ let V3 = (() => {
1092
1183
  const handlerParams = {
1093
1184
  instruction,
1094
1185
  model: options?.model,
1186
+ variables: options?.variables,
1095
1187
  timeout: options?.timeout,
1096
1188
  selector: options?.selector,
1097
1189
  page: page,
@@ -1111,6 +1203,7 @@ let V3 = (() => {
1111
1203
  // history: record observe call (omit page object)
1112
1204
  this.addToHistory("observe", {
1113
1205
  instruction,
1206
+ variables: options?.variables,
1114
1207
  timeout: options?.timeout,
1115
1208
  }, results);
1116
1209
  return results;
@@ -1378,7 +1471,7 @@ let V3 = (() => {
1378
1471
  ? this.resolveLlmClient(options.model)
1379
1472
  : this.llmClient;
1380
1473
  const resolvedExecutionModel = options?.executionModel ?? options?.model;
1381
- const handler = new v3AgentHandler_js_1.V3AgentHandler(this, this.logger, agentLlmClient, resolvedExecutionModel, options?.systemPrompt, tools, options?.mode);
1474
+ const handler = new v3AgentHandler_js_1.V3AgentHandler(this, this.logger, agentLlmClient, resolvedExecutionModel, options?.systemPrompt, tools, options?.mode, this.isCaptchaAutoSolveEnabled);
1382
1475
  const resolvedOptions = typeof instructionOrOptions === "string"
1383
1476
  ? {
1384
1477
  instruction: instructionOrOptions,
@@ -1481,8 +1574,11 @@ let V3 = (() => {
1481
1574
  const handler = new v3CuaAgentHandler_js_1.V3CuaAgentHandler(this, this.logger, {
1482
1575
  modelName,
1483
1576
  clientOptions,
1484
- userProvidedInstructions: options.systemPrompt ??
1485
- `You are a helpful assistant that can use a web browser.\nDo not ask follow up questions, the user will trust your judgement.`,
1577
+ userProvidedInstructions: (options.systemPrompt ??
1578
+ `You are a helpful assistant that can use a web browser.\nDo not ask follow up questions, the user will trust your judgement.`) +
1579
+ (this.isCaptchaAutoSolveEnabled
1580
+ ? captchaSolver_js_1.CAPTCHA_CUA_SYSTEM_PROMPT_NOTE
1581
+ : ""),
1486
1582
  }, tools);
1487
1583
  const resolvedOptions = typeof instructionOrOptions === "string"
1488
1584
  ? {
@@ -1528,6 +1624,7 @@ let V3 = (() => {
1528
1624
  if (this.apiClient && !this.experimental) {
1529
1625
  const page = await this.ctx.awaitActivePage();
1530
1626
  result = await this.apiClient.agentExecute(options, resolvedOptions, page.mainFrameId(), !!cacheContext);
1627
+ this.updateAgentMetricsFromUsage(result.usage);
1531
1628
  if (cacheContext) {
1532
1629
  const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
1533
1630
  await this.agentCache.storeTransferredEntry(transferredEntry);
@@ -1611,6 +1708,7 @@ let V3 = (() => {
1611
1708
  if (this.apiClient && !this.experimental) {
1612
1709
  const page = await this.ctx.awaitActivePage();
1613
1710
  result = await this.apiClient.agentExecute(options ?? {}, resolvedOptions, page.mainFrameId(), !!cacheContext);
1711
+ this.updateAgentMetricsFromUsage(result.usage);
1614
1712
  if (cacheContext) {
1615
1713
  const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
1616
1714
  await this.agentCache.storeTransferredEntry(transferredEntry);