@browserbasehq/orca 3.1.0-patch.4 → 3.2.0-middleware.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/dist/cjs/lib/inference.js +1 -4
  2. package/dist/cjs/lib/inference.js.map +1 -1
  3. package/dist/cjs/lib/utils.d.ts +1 -0
  4. package/dist/cjs/lib/utils.js +4 -0
  5. package/dist/cjs/lib/utils.js.map +1 -1
  6. package/dist/cjs/lib/v3/agent/AgentClient.d.ts +8 -0
  7. package/dist/cjs/lib/v3/agent/AgentClient.js +13 -0
  8. package/dist/cjs/lib/v3/agent/AgentClient.js.map +1 -1
  9. package/dist/cjs/lib/v3/agent/AgentProvider.js +0 -1
  10. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  11. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +6 -7
  12. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  13. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +6 -7
  14. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  15. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js +1 -0
  16. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
  17. package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +4 -4
  18. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +67 -8
  19. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  20. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +4 -2
  21. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js +7 -7
  22. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  23. package/dist/cjs/lib/v3/agent/tools/act.d.ts +1 -1
  24. package/dist/cjs/lib/v3/agent/tools/act.js +11 -4
  25. package/dist/cjs/lib/v3/agent/tools/act.js.map +1 -1
  26. package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +8 -1
  27. package/dist/cjs/lib/v3/agent/tools/ariaTree.js +49 -22
  28. package/dist/cjs/lib/v3/agent/tools/ariaTree.js.map +1 -1
  29. package/dist/cjs/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
  30. package/dist/cjs/lib/v3/agent/tools/braveSearch.js.map +1 -0
  31. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
  32. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js +70 -0
  33. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
  34. package/dist/cjs/lib/v3/agent/tools/click.js +23 -31
  35. package/dist/cjs/lib/v3/agent/tools/click.js.map +1 -1
  36. package/dist/cjs/lib/v3/agent/tools/clickAndHold.js.map +1 -1
  37. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js +22 -30
  38. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  39. package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -2
  40. package/dist/cjs/lib/v3/agent/tools/extract.js +7 -3
  41. package/dist/cjs/lib/v3/agent/tools/extract.js.map +1 -1
  42. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js +30 -30
  43. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  44. package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +7 -2
  45. package/dist/cjs/lib/v3/agent/tools/fillform.js +56 -45
  46. package/dist/cjs/lib/v3/agent/tools/fillform.js.map +1 -1
  47. package/dist/cjs/lib/v3/agent/tools/index.d.ts +19 -3
  48. package/dist/cjs/lib/v3/agent/tools/index.js +63 -11
  49. package/dist/cjs/lib/v3/agent/tools/index.js.map +1 -1
  50. package/dist/cjs/lib/v3/agent/tools/keys.d.ts +1 -1
  51. package/dist/cjs/lib/v3/agent/tools/keys.js.map +1 -1
  52. package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +8 -0
  53. package/dist/cjs/lib/v3/agent/tools/screenshot.js +32 -15
  54. package/dist/cjs/lib/v3/agent/tools/screenshot.js.map +1 -1
  55. package/dist/cjs/lib/v3/agent/tools/scroll.js +12 -0
  56. package/dist/cjs/lib/v3/agent/tools/scroll.js.map +1 -1
  57. package/dist/cjs/lib/v3/agent/tools/type.js +23 -31
  58. package/dist/cjs/lib/v3/agent/tools/type.js.map +1 -1
  59. package/dist/cjs/lib/v3/agent/tools/wait.js +6 -0
  60. package/dist/cjs/lib/v3/agent/tools/wait.js.map +1 -1
  61. package/dist/cjs/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
  62. package/dist/cjs/lib/v3/agent/utils/captchaSolver.js +175 -0
  63. package/dist/cjs/lib/v3/agent/utils/captchaSolver.js.map +1 -0
  64. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
  65. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  66. package/dist/cjs/lib/v3/api.d.ts +2 -2
  67. package/dist/cjs/lib/v3/api.js +1 -1
  68. package/dist/cjs/lib/v3/api.js.map +1 -1
  69. package/dist/cjs/lib/v3/cache/ActCache.d.ts +0 -1
  70. package/dist/cjs/lib/v3/cache/ActCache.js +2 -18
  71. package/dist/cjs/lib/v3/cache/ActCache.js.map +1 -1
  72. package/dist/cjs/lib/v3/flowlogger/EventEmitter.d.ts +7 -0
  73. package/dist/cjs/lib/v3/flowlogger/EventEmitter.js +30 -0
  74. package/dist/cjs/lib/v3/flowlogger/EventEmitter.js.map +1 -0
  75. package/dist/cjs/lib/v3/flowlogger/EventSink.d.ts +44 -0
  76. package/dist/cjs/lib/v3/flowlogger/EventSink.js +217 -0
  77. package/dist/cjs/lib/v3/flowlogger/EventSink.js.map +1 -0
  78. package/dist/cjs/lib/v3/flowlogger/EventStore.d.ts +26 -0
  79. package/dist/cjs/lib/v3/flowlogger/EventStore.js +135 -0
  80. package/dist/cjs/lib/v3/flowlogger/EventStore.js.map +1 -0
  81. package/dist/cjs/lib/v3/flowlogger/FlowLogger.d.ts +99 -0
  82. package/dist/cjs/lib/v3/flowlogger/FlowLogger.js +591 -0
  83. package/dist/cjs/lib/v3/flowlogger/FlowLogger.js.map +1 -0
  84. package/dist/cjs/lib/v3/flowlogger/prettify.d.ts +6 -0
  85. package/dist/cjs/lib/v3/flowlogger/prettify.js +395 -0
  86. package/dist/cjs/lib/v3/flowlogger/prettify.js.map +1 -0
  87. package/dist/cjs/lib/v3/handlers/actHandler.js +1 -2
  88. package/dist/cjs/lib/v3/handlers/actHandler.js.map +1 -1
  89. package/dist/cjs/lib/v3/handlers/extractHandler.js +2 -2
  90. package/dist/cjs/lib/v3/handlers/extractHandler.js.map +1 -1
  91. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js +43 -57
  92. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
  93. package/dist/cjs/lib/v3/handlers/observeHandler.js +1 -2
  94. package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -1
  95. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -5
  96. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +130 -91
  97. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  98. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
  99. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +134 -14
  100. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  101. package/dist/cjs/lib/v3/index.d.ts +2 -1
  102. package/dist/cjs/lib/v3/launch/browserbase.d.ts +1 -1
  103. package/dist/cjs/lib/v3/launch/browserbase.js +4 -9
  104. package/dist/cjs/lib/v3/launch/browserbase.js.map +1 -1
  105. package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +5 -2
  106. package/dist/cjs/lib/v3/llm/LLMProvider.js +13 -11
  107. package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
  108. package/dist/cjs/lib/v3/llm/aisdk.js +11 -17
  109. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  110. package/dist/cjs/lib/v3/runtimePaths.js +2 -1
  111. package/dist/cjs/lib/v3/runtimePaths.js.map +1 -1
  112. package/dist/cjs/lib/v3/shutdown/supervisor.js +2 -2
  113. package/dist/cjs/lib/v3/shutdown/supervisor.js.map +1 -1
  114. package/dist/cjs/lib/v3/timeoutConfig.d.ts +1 -1
  115. package/dist/cjs/lib/v3/timeoutConfig.js +5 -0
  116. package/dist/cjs/lib/v3/timeoutConfig.js.map +1 -1
  117. package/dist/cjs/lib/v3/types/private/cache.d.ts +0 -1
  118. package/dist/cjs/lib/v3/types/private/cache.js.map +1 -1
  119. package/dist/cjs/lib/v3/types/private/shutdown.d.ts +1 -1
  120. package/dist/cjs/lib/v3/types/private/shutdown.js.map +1 -1
  121. package/dist/cjs/lib/v3/types/public/agent.d.ts +28 -3
  122. package/dist/cjs/lib/v3/types/public/agent.js +0 -1
  123. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  124. package/dist/cjs/lib/v3/types/public/api.d.ts +7 -0
  125. package/dist/cjs/lib/v3/types/public/api.js +9 -0
  126. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  127. package/dist/cjs/lib/v3/types/public/model.d.ts +12 -3
  128. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  129. package/dist/cjs/lib/v3/types/public/options.d.ts +8 -0
  130. package/dist/cjs/lib/v3/types/public/options.js.map +1 -1
  131. package/dist/cjs/lib/v3/understudy/cdp.d.ts +8 -13
  132. package/dist/cjs/lib/v3/understudy/cdp.js +180 -20
  133. package/dist/cjs/lib/v3/understudy/cdp.js.map +1 -1
  134. package/dist/cjs/lib/v3/understudy/context.d.ts +1 -0
  135. package/dist/cjs/lib/v3/understudy/context.js +142 -60
  136. package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
  137. package/dist/cjs/lib/v3/understudy/frame.js +23 -6
  138. package/dist/cjs/lib/v3/understudy/frame.js.map +1 -1
  139. package/dist/cjs/lib/v3/understudy/page.d.ts +13 -0
  140. package/dist/cjs/lib/v3/understudy/page.js +84 -21
  141. package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
  142. package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +0 -1
  143. package/dist/cjs/lib/v3/understudy/screenshotUtils.js +0 -18
  144. package/dist/cjs/lib/v3/understudy/screenshotUtils.js.map +1 -1
  145. package/dist/cjs/lib/v3/v3.d.ts +26 -3
  146. package/dist/cjs/lib/v3/v3.js +242 -180
  147. package/dist/cjs/lib/v3/v3.js.map +1 -1
  148. package/dist/cjs/lib/version.d.ts +1 -1
  149. package/dist/cjs/lib/version.js +1 -1
  150. package/dist/cjs/lib/version.js.map +1 -1
  151. package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js +56 -0
  152. package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
  153. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +6 -6
  154. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
  155. package/dist/cjs/tests/integration/cdp-session-detached.spec.js +1 -1
  156. package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +1 -1
  157. package/dist/cjs/tests/integration/context-addInitScript.spec.js +104 -11
  158. package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +1 -1
  159. package/dist/cjs/tests/integration/flowLogger.spec.js +714 -0
  160. package/dist/cjs/tests/integration/flowLogger.spec.js.map +1 -0
  161. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
  162. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +219 -0
  163. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
  164. package/dist/cjs/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
  165. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +85 -0
  166. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +1 -0
  167. package/dist/cjs/tests/integration/page-screenshot.spec.js +1 -1
  168. package/dist/cjs/tests/integration/page-screenshot.spec.js.map +1 -1
  169. package/dist/cjs/tests/integration/testUtils.d.ts +33 -0
  170. package/dist/cjs/tests/integration/testUtils.js +144 -0
  171. package/dist/cjs/tests/integration/testUtils.js.map +1 -1
  172. package/dist/cjs/tests/integration/timeouts.spec.js +278 -0
  173. package/dist/cjs/tests/integration/timeouts.spec.js.map +1 -1
  174. package/dist/cjs/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
  175. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +285 -0
  176. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +1 -0
  177. package/dist/cjs/tests/unit/agent-execution-model.test.js +1 -1
  178. package/dist/cjs/tests/unit/agent-execution-model.test.js.map +1 -1
  179. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +20 -0
  180. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +1 -1
  181. package/dist/cjs/tests/unit/captcha-solver.test.d.ts +1 -0
  182. package/dist/cjs/tests/unit/captcha-solver.test.js +154 -0
  183. package/dist/cjs/tests/unit/captcha-solver.test.js.map +1 -0
  184. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.d.ts +1 -0
  185. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js +95 -0
  186. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js.map +1 -0
  187. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.d.ts +1 -0
  188. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js +43 -0
  189. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js.map +1 -0
  190. package/dist/cjs/tests/unit/flowlogger-eventstore.test.d.ts +1 -0
  191. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js +250 -0
  192. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +1 -0
  193. package/dist/cjs/tests/unit/llm-middleware.test.d.ts +1 -0
  194. package/dist/cjs/tests/unit/llm-middleware.test.js +495 -0
  195. package/dist/cjs/tests/unit/llm-middleware.test.js.map +1 -0
  196. package/dist/cjs/tests/unit/model-deprecation.test.js +5 -8
  197. package/dist/cjs/tests/unit/model-deprecation.test.js.map +1 -1
  198. package/dist/cjs/tests/unit/openai-cua-client.test.d.ts +1 -0
  199. package/dist/cjs/tests/unit/openai-cua-client.test.js +71 -0
  200. package/dist/cjs/tests/unit/openai-cua-client.test.js.map +1 -0
  201. package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +1 -0
  202. package/dist/cjs/tests/unit/page-extra-http-headers.test.js +92 -0
  203. package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +1 -0
  204. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +13 -1
  205. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  206. package/dist/cjs/tests/unit/public-api/public-types.test.js.map +1 -1
  207. package/dist/esm/lib/inference.js +1 -4
  208. package/dist/esm/lib/inference.js.map +1 -1
  209. package/dist/esm/lib/utils.d.ts +1 -0
  210. package/dist/esm/lib/utils.js +3 -0
  211. package/dist/esm/lib/utils.js.map +1 -1
  212. package/dist/esm/lib/v3/agent/AgentClient.d.ts +8 -0
  213. package/dist/esm/lib/v3/agent/AgentClient.js +13 -0
  214. package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -1
  215. package/dist/esm/lib/v3/agent/AgentProvider.js +0 -1
  216. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  217. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +6 -7
  218. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  219. package/dist/esm/lib/v3/agent/GoogleCUAClient.js +6 -7
  220. package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  221. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +1 -0
  222. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
  223. package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +4 -4
  224. package/dist/esm/lib/v3/agent/OpenAICUAClient.js +67 -8
  225. package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  226. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +4 -2
  227. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +7 -7
  228. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  229. package/dist/esm/lib/v3/agent/tools/act.d.ts +1 -1
  230. package/dist/esm/lib/v3/agent/tools/act.js +11 -4
  231. package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
  232. package/dist/esm/lib/v3/agent/tools/ariaTree.d.ts +8 -1
  233. package/dist/esm/lib/v3/agent/tools/ariaTree.js +49 -22
  234. package/dist/esm/lib/v3/agent/tools/ariaTree.js.map +1 -1
  235. package/dist/esm/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
  236. package/dist/esm/lib/v3/agent/tools/braveSearch.js.map +1 -0
  237. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
  238. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js +66 -0
  239. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
  240. package/dist/esm/lib/v3/agent/tools/click.js +23 -31
  241. package/dist/esm/lib/v3/agent/tools/click.js.map +1 -1
  242. package/dist/esm/lib/v3/agent/tools/clickAndHold.js.map +1 -1
  243. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +22 -30
  244. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  245. package/dist/esm/lib/v3/agent/tools/extract.d.ts +2 -2
  246. package/dist/esm/lib/v3/agent/tools/extract.js +7 -3
  247. package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
  248. package/dist/esm/lib/v3/agent/tools/fillFormVision.js +30 -30
  249. package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  250. package/dist/esm/lib/v3/agent/tools/fillform.d.ts +7 -2
  251. package/dist/esm/lib/v3/agent/tools/fillform.js +56 -45
  252. package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
  253. package/dist/esm/lib/v3/agent/tools/index.d.ts +19 -3
  254. package/dist/esm/lib/v3/agent/tools/index.js +63 -11
  255. package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
  256. package/dist/esm/lib/v3/agent/tools/keys.d.ts +1 -1
  257. package/dist/esm/lib/v3/agent/tools/keys.js.map +1 -1
  258. package/dist/esm/lib/v3/agent/tools/screenshot.d.ts +8 -0
  259. package/dist/esm/lib/v3/agent/tools/screenshot.js +32 -15
  260. package/dist/esm/lib/v3/agent/tools/screenshot.js.map +1 -1
  261. package/dist/esm/lib/v3/agent/tools/scroll.js +12 -0
  262. package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -1
  263. package/dist/esm/lib/v3/agent/tools/type.js +23 -31
  264. package/dist/esm/lib/v3/agent/tools/type.js.map +1 -1
  265. package/dist/esm/lib/v3/agent/tools/wait.js +6 -0
  266. package/dist/esm/lib/v3/agent/tools/wait.js.map +1 -1
  267. package/dist/esm/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
  268. package/dist/esm/lib/v3/agent/utils/captchaSolver.js +171 -0
  269. package/dist/esm/lib/v3/agent/utils/captchaSolver.js.map +1 -0
  270. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
  271. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  272. package/dist/esm/lib/v3/api.d.ts +2 -2
  273. package/dist/esm/lib/v3/api.js +1 -1
  274. package/dist/esm/lib/v3/api.js.map +1 -1
  275. package/dist/esm/lib/v3/cache/ActCache.d.ts +0 -1
  276. package/dist/esm/lib/v3/cache/ActCache.js +2 -18
  277. package/dist/esm/lib/v3/cache/ActCache.js.map +1 -1
  278. package/dist/esm/lib/v3/flowlogger/EventEmitter.d.ts +7 -0
  279. package/dist/esm/lib/v3/flowlogger/EventEmitter.js +26 -0
  280. package/dist/esm/lib/v3/flowlogger/EventEmitter.js.map +1 -0
  281. package/dist/esm/lib/v3/flowlogger/EventSink.d.ts +44 -0
  282. package/dist/esm/lib/v3/flowlogger/EventSink.js +206 -0
  283. package/dist/esm/lib/v3/flowlogger/EventSink.js.map +1 -0
  284. package/dist/esm/lib/v3/flowlogger/EventStore.d.ts +26 -0
  285. package/dist/esm/lib/v3/flowlogger/EventStore.js +127 -0
  286. package/dist/esm/lib/v3/flowlogger/EventStore.js.map +1 -0
  287. package/dist/esm/lib/v3/flowlogger/FlowLogger.d.ts +99 -0
  288. package/dist/esm/lib/v3/flowlogger/FlowLogger.js +583 -0
  289. package/dist/esm/lib/v3/flowlogger/FlowLogger.js.map +1 -0
  290. package/dist/esm/lib/v3/flowlogger/prettify.d.ts +6 -0
  291. package/dist/esm/lib/v3/flowlogger/prettify.js +389 -0
  292. package/dist/esm/lib/v3/flowlogger/prettify.js.map +1 -0
  293. package/dist/esm/lib/v3/handlers/actHandler.js +1 -2
  294. package/dist/esm/lib/v3/handlers/actHandler.js.map +1 -1
  295. package/dist/esm/lib/v3/handlers/extractHandler.js +2 -2
  296. package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -1
  297. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +43 -57
  298. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
  299. package/dist/esm/lib/v3/handlers/observeHandler.js +1 -2
  300. package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
  301. package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -5
  302. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +131 -92
  303. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  304. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
  305. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +134 -14
  306. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  307. package/dist/esm/lib/v3/index.d.ts +2 -1
  308. package/dist/esm/lib/v3/launch/browserbase.d.ts +1 -1
  309. package/dist/esm/lib/v3/launch/browserbase.js +4 -9
  310. package/dist/esm/lib/v3/launch/browserbase.js.map +1 -1
  311. package/dist/esm/lib/v3/llm/LLMProvider.d.ts +5 -2
  312. package/dist/esm/lib/v3/llm/LLMProvider.js +14 -12
  313. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
  314. package/dist/esm/lib/v3/llm/aisdk.js +11 -17
  315. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  316. package/dist/esm/lib/v3/runtimePaths.js +2 -1
  317. package/dist/esm/lib/v3/runtimePaths.js.map +1 -1
  318. package/dist/esm/lib/v3/shutdown/supervisor.js +2 -2
  319. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
  320. package/dist/esm/lib/v3/timeoutConfig.d.ts +1 -1
  321. package/dist/esm/lib/v3/timeoutConfig.js +5 -0
  322. package/dist/esm/lib/v3/timeoutConfig.js.map +1 -1
  323. package/dist/esm/lib/v3/types/private/cache.d.ts +0 -1
  324. package/dist/esm/lib/v3/types/private/cache.js.map +1 -1
  325. package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -1
  326. package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
  327. package/dist/esm/lib/v3/types/public/agent.d.ts +28 -3
  328. package/dist/esm/lib/v3/types/public/agent.js +0 -1
  329. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  330. package/dist/esm/lib/v3/types/public/api.d.ts +7 -0
  331. package/dist/esm/lib/v3/types/public/api.js +9 -0
  332. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  333. package/dist/esm/lib/v3/types/public/model.d.ts +12 -3
  334. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  335. package/dist/esm/lib/v3/types/public/options.d.ts +8 -0
  336. package/dist/esm/lib/v3/types/public/options.js.map +1 -1
  337. package/dist/esm/lib/v3/understudy/cdp.d.ts +8 -13
  338. package/dist/esm/lib/v3/understudy/cdp.js +181 -21
  339. package/dist/esm/lib/v3/understudy/cdp.js.map +1 -1
  340. package/dist/esm/lib/v3/understudy/context.d.ts +1 -0
  341. package/dist/esm/lib/v3/understudy/context.js +142 -60
  342. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  343. package/dist/esm/lib/v3/understudy/frame.js +23 -6
  344. package/dist/esm/lib/v3/understudy/frame.js.map +1 -1
  345. package/dist/esm/lib/v3/understudy/page.d.ts +13 -0
  346. package/dist/esm/lib/v3/understudy/page.js +86 -23
  347. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  348. package/dist/esm/lib/v3/understudy/screenshotUtils.d.ts +0 -1
  349. package/dist/esm/lib/v3/understudy/screenshotUtils.js +0 -17
  350. package/dist/esm/lib/v3/understudy/screenshotUtils.js.map +1 -1
  351. package/dist/esm/lib/v3/v3.d.ts +26 -3
  352. package/dist/esm/lib/v3/v3.js +242 -181
  353. package/dist/esm/lib/v3/v3.js.map +1 -1
  354. package/dist/esm/lib/version.d.ts +1 -1
  355. package/dist/esm/lib/version.js +1 -1
  356. package/dist/esm/lib/version.js.map +1 -1
  357. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.d.ts +1 -0
  358. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js +54 -0
  359. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
  360. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +6 -6
  361. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
  362. package/dist/esm/tests/integration/cdp-session-detached.spec.js +1 -1
  363. package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +1 -1
  364. package/dist/esm/tests/integration/context-addInitScript.spec.js +104 -11
  365. package/dist/esm/tests/integration/context-addInitScript.spec.js.map +1 -1
  366. package/dist/esm/tests/integration/flowLogger.spec.d.ts +1 -0
  367. package/dist/esm/tests/integration/flowLogger.spec.js +712 -0
  368. package/dist/esm/tests/integration/flowLogger.spec.js.map +1 -0
  369. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
  370. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +217 -0
  371. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
  372. package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
  373. package/dist/esm/tests/integration/page-extra-http-headers.spec.js +83 -0
  374. package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +1 -0
  375. package/dist/esm/tests/integration/page-screenshot.spec.js +1 -1
  376. package/dist/esm/tests/integration/page-screenshot.spec.js.map +1 -1
  377. package/dist/esm/tests/integration/testUtils.d.ts +33 -0
  378. package/dist/esm/tests/integration/testUtils.js +138 -0
  379. package/dist/esm/tests/integration/testUtils.js.map +1 -1
  380. package/dist/esm/tests/integration/timeouts.spec.js +278 -0
  381. package/dist/esm/tests/integration/timeouts.spec.js.map +1 -1
  382. package/dist/esm/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
  383. package/dist/esm/tests/unit/agent-captcha-hooks.test.js +283 -0
  384. package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +1 -0
  385. package/dist/esm/tests/unit/agent-execution-model.test.js +1 -1
  386. package/dist/esm/tests/unit/agent-execution-model.test.js.map +1 -1
  387. package/dist/esm/tests/unit/browserbase-session-accessors.test.js +20 -0
  388. package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +1 -1
  389. package/dist/esm/tests/unit/captcha-solver.test.d.ts +1 -0
  390. package/dist/esm/tests/unit/captcha-solver.test.js +152 -0
  391. package/dist/esm/tests/unit/captcha-solver.test.js.map +1 -0
  392. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.d.ts +1 -0
  393. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js +93 -0
  394. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js.map +1 -0
  395. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.d.ts +1 -0
  396. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js +41 -0
  397. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js.map +1 -0
  398. package/dist/esm/tests/unit/flowlogger-eventstore.test.d.ts +1 -0
  399. package/dist/esm/tests/unit/flowlogger-eventstore.test.js +248 -0
  400. package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +1 -0
  401. package/dist/esm/tests/unit/llm-middleware.test.d.ts +1 -0
  402. package/dist/esm/tests/unit/llm-middleware.test.js +460 -0
  403. package/dist/esm/tests/unit/llm-middleware.test.js.map +1 -0
  404. package/dist/esm/tests/unit/model-deprecation.test.js +5 -8
  405. package/dist/esm/tests/unit/model-deprecation.test.js.map +1 -1
  406. package/dist/esm/tests/unit/openai-cua-client.test.d.ts +1 -0
  407. package/dist/esm/tests/unit/openai-cua-client.test.js +69 -0
  408. package/dist/esm/tests/unit/openai-cua-client.test.js.map +1 -0
  409. package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +1 -0
  410. package/dist/esm/tests/unit/page-extra-http-headers.test.js +90 -0
  411. package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +1 -0
  412. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +13 -1
  413. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  414. package/dist/esm/tests/unit/public-api/public-types.test.js.map +1 -1
  415. package/package.json +5 -3
  416. package/dist/cjs/lib/v3/agent/tools/search.js.map +0 -1
  417. package/dist/cjs/lib/v3/flowLogger.d.ts +0 -139
  418. package/dist/cjs/lib/v3/flowLogger.js +0 -881
  419. package/dist/cjs/lib/v3/flowLogger.js.map +0 -1
  420. package/dist/cjs/tests/unit/rerender-missing-shadows.test.js +0 -209
  421. package/dist/cjs/tests/unit/rerender-missing-shadows.test.js.map +0 -1
  422. package/dist/esm/lib/v3/agent/tools/search.js.map +0 -1
  423. package/dist/esm/lib/v3/flowLogger.d.ts +0 -139
  424. package/dist/esm/lib/v3/flowLogger.js +0 -868
  425. package/dist/esm/lib/v3/flowLogger.js.map +0 -1
  426. package/dist/esm/tests/unit/rerender-missing-shadows.test.js +0 -207
  427. package/dist/esm/tests/unit/rerender-missing-shadows.test.js.map +0 -1
  428. /package/dist/cjs/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
  429. /package/dist/cjs/tests/{unit/rerender-missing-shadows.test.d.ts → integration/agent-captcha-autosolve.spec.d.ts} +0 -0
  430. /package/dist/{esm/tests/unit/rerender-missing-shadows.test.d.ts → cjs/tests/integration/flowLogger.spec.d.ts} +0 -0
  431. /package/dist/esm/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
@@ -13,4 +13,3 @@ export declare function disableAnimations(frames: Frame[]): Promise<ScreenshotCl
13
13
  export declare function hideCaret(frames: Frame[]): Promise<ScreenshotCleanup>;
14
14
  export declare function applyMaskOverlays(locators: Locator[], color: string): Promise<ScreenshotCleanup>;
15
15
  export declare function runScreenshotCleanups(cleanups: ScreenshotCleanup[]): Promise<void>;
16
- export declare function withScreenshotTimeout<T>(timeoutMs: number | undefined, task: () => Promise<T>): Promise<T>;
@@ -331,21 +331,4 @@ export async function runScreenshotCleanups(cleanups) {
331
331
  }
332
332
  }
333
333
  }
334
- export async function withScreenshotTimeout(timeoutMs, task) {
335
- if (!timeoutMs || timeoutMs <= 0)
336
- return task();
337
- let timer = null;
338
- const timeoutPromise = new Promise((_, reject) => {
339
- timer = setTimeout(() => {
340
- reject(new Error(`screenshot: timeout of ${timeoutMs}ms exceeded`));
341
- }, timeoutMs);
342
- });
343
- try {
344
- return await Promise.race([task(), timeoutPromise]);
345
- }
346
- finally {
347
- if (timer)
348
- clearTimeout(timer);
349
- }
350
- }
351
334
  //# sourceMappingURL=screenshotUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshotUtils.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/screenshotUtils.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AAItF,MAAM,UAAU,0BAA0B,CAAC,IAAU;IACnD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAiB,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAoB;IAC1D,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,6BAA6B,CACrC,oBAAoB,GAAG,0BAA0B,CAClD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,6BAA6B,CACrC,gDAAgD,CACjD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAU,EACV,IAA2B;IAE3B,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,KAAK;aACpB,QAAQ,CAAC,GAAG,EAAE;YACb,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;YACnD,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAuB;IAEvB,MAAM,OAAO;SACV,IAAI,CAAC,6CAA6C,EAAE;QACnD,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;KAClC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEnB,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,OAAO;aACV,IAAI,CAAC,6CAA6C,EAAE,EAAE,CAAC;aACvD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAe,EACf,GAAW,EACX,KAAa;IAEb,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,cAAc,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;SAC7D,QAAQ,CAAC,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAEd,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,KAAK;SACF,QAAQ,CACP,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,QAAQ,CAAC;YACrB,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACzC,KAAK,CAAC,YAAY,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAClD,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC;YACxB,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,IAAI,CAAC;YAC3D,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC,EACD,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CACxB;SACA,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CACnB,CACF,CAAC;IAEF,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,KAAK;aACF,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,QAAQ,CAAC;gBACrB,IAAI,CAAC,GAAG;oBAAE,OAAO;gBACjB,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAChC,0BAA0B,KAAK,IAAI,CACpC,CAAC;gBACF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC,EAAE,KAAK,CAAC;aACR,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CACnB,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAe;IAEf,MAAM,GAAG,GAAG;;;;;;;;;;;EAWZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;IAEpE,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,KAAK;SACF,QAAQ,CAAC,GAAG,EAAE;QACb,IAAI,CAAC;YACH,MAAM,UAAU,GACd,OAAO,QAAQ,CAAC,aAAa,KAAK,UAAU;gBAC1C,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE;gBAC1B,CAAC,CAAC,EAAE,CAAC;YACT,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,CAAC;oBACxD,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;wBAC/C,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACN,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;oBACvB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CACnB,CACF,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAe;IAC7C,MAAM,GAAG,GAAG;;;;;;;;;EASZ,CAAC;IAED,OAAO,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAmB,EACnB,KAAa;IAGb,MAAM,YAAY,GAAG,IAAI,GAAG,EAGzB,CAAC;IAEJ,MAAM,KAAK,GAAG,aAAa,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;gBAC5C,KAAK,EAAE,EAAE;gBACT,UAAU,EAAE,IAAI,GAAG,EAAU;aAC9B,CAAC;YACF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,SAAS;oBAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3D,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAC5D,KAAK;SACF,QAAQ,CACP,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,QAAQ,CAAC;YACrB,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,WAAW,GAAG,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,IAAI,CAAC;gBACpD,IAAI,CAAC,WAAW;oBAAE,OAAO;gBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS;oBACzB,CAAC,CAAC,GAAG,CAAC,aAAa,CACf,8BAA8B,IAAI,CAAC,SAAS,IAAI,CACjD,IAAI,WAAW;oBAClB,CAAC,CAAC,WAAW,CAAC;gBAChB,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAe,CAAC,CAAC;wBACvD,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;4BACzC,MAAM,MAAM,GAAG,IAAmB,CAAC;4BACnC,IACE,CAAC,MAAM,CAAC,YAAY,CAAC,8BAA8B,CAAC,EACpD,CAAC;gCACD,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAC5B,CAAC;4BACJ,CAAC;4BACD,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;wBACrC,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACpC,EAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;gBAC9C,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;gBAC/B,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;gBAC9B,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;gBAC7B,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;gBACnC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC;gBACrC,EAAE,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;gBACjC,EAAE,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;gBAChC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;gBAC/B,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;gBACvB,EAAE,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;gBAChC,IAAgB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC,EACD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CACxB;SACA,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CACnB,CACF,CAAC;IAEF,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,CACjE,KAAK;aACF,QAAQ,CACP,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;YACxB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,QAAQ,CAAC;gBACrB,IAAI,CAAC,GAAG;oBAAE,OAAO;gBACjB,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAChC,yBAAyB,KAAK,IAAI,CACnC,CAAC;gBACF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;oBACnC,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAC5B,8BAA8B,SAAS,IAAI,CACtB,CAAC;oBACxB,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAC5B,8BAA8B,CAC/B,CAAC;oBACF,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;wBAC3B,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,CAAC;oBACvD,CAAC;oBACD,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC,EACD,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAC9C;aACA,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CACnB,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,OAAgB,EAChB,SAAiB;IAKjB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,QAAQ,GAGT,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACzC,MAAM,KAAK,GAA0D,EAAE,CAAC;QAExE,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,wBAAwB,CACzC,OAAO,EACP,QAAQ,EACR,SAAS,CACV,CAAC;gBACF,IAAI,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO;qBACV,IAAI,CAAQ,uBAAuB,EAAE,EAAE,QAAQ,EAAE,CAAC;qBAClD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAE/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,OAAuB,EACvB,QAAyC,EACzC,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAC/B,wBAAwB,EACxB;QACE,QAAQ;QACR,mBAAmB,EAAE,uBAAuB,CAAC,eAAe;QAC5D,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACjC,aAAa,EAAE,IAAI;KACpB,CACF,CAAC;IAEF,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAEnB,CAAC;IACT,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxB,KAAK,IAAI,CAAC;QACV,MAAM,IAAI,CAAC,EACX,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,CAAC;QACD,CAAC;QACD,KAAK;QACL,MAAM;QACN,SAAS,EACP,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;YAClD,CAAC,CAAC,IAAI,CAAC,SAAS;YAChB,CAAC,CAAC,SAAS;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAA6B;IAE7B,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;YACpB,IAAI,MAAM,IAAI,OAAQ,MAAwB,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACnE,MAAM,MAAM,CAAC;YACf,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAA6B,EAC7B,IAAsB;IAEtB,IAAI,CAAC,SAAS,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,IAAI,EAAE,CAAC;IAEhD,IAAI,KAAK,GAA0B,IAAI,CAAC;IACxC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAClD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,SAAS,aAAa,CAAC,CAAC,CAAC;QACtE,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACtD,CAAC;YAAS,CAAC;QACT,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC","sourcesContent":["import { Protocol } from \"devtools-protocol\";\nimport type { CDPSessionLike } from \"./cdp.js\";\nimport type { Frame } from \"./frame.js\";\nimport type { Locator } from \"./locator.js\";\nimport type { Page } from \"./page.js\";\nimport type {\n ScreenshotClip,\n ScreenshotScaleOption,\n} from \"../types/public/screenshotTypes.js\";\nimport { StagehandInvalidArgumentError } from \"../types/public/sdkErrors.js\";\nimport { screenshotScriptSources } from \"../dom/build/screenshotScripts.generated.js\";\n\nexport type ScreenshotCleanup = () => Promise<void> | void;\n\nexport function collectFramesForScreenshot(page: Page): Frame[] {\n const seen = new Map<string, Frame>();\n const main = page.mainFrame();\n seen.set(main.frameId, main);\n for (const frame of page.frames()) {\n seen.set(frame.frameId, frame);\n }\n return Array.from(seen.values());\n}\n\nexport function normalizeScreenshotClip(clip: ScreenshotClip): ScreenshotClip {\n const x = Number(clip.x);\n const y = Number(clip.y);\n const width = Number(clip.width);\n const height = Number(clip.height);\n\n for (const [key, value] of Object.entries({ x, y, width, height })) {\n if (!Number.isFinite(value)) {\n throw new StagehandInvalidArgumentError(\n `screenshot: clip.${key} must be a finite number`,\n );\n }\n }\n\n if (width <= 0 || height <= 0) {\n throw new StagehandInvalidArgumentError(\n \"screenshot: clip width/height must be positive\",\n );\n }\n\n return { x, y, width, height };\n}\n\nexport async function computeScreenshotScale(\n page: Page,\n mode: ScreenshotScaleOption,\n): Promise<number | undefined> {\n if (mode !== \"css\") return undefined;\n try {\n const frame = page.mainFrame();\n const dpr = await frame\n .evaluate(() => {\n const ratio = Number(window.devicePixelRatio || 1);\n return Number.isFinite(ratio) && ratio > 0 ? ratio : 1;\n })\n .catch(() => 1);\n const safeRatio = Number.isFinite(dpr) && dpr > 0 ? dpr : 1;\n return Math.min(2, Math.max(0.1, 1 / safeRatio));\n } catch {\n return 1;\n }\n}\n\nexport async function setTransparentBackground(\n session: CDPSessionLike,\n): Promise<ScreenshotCleanup> {\n await session\n .send(\"Emulation.setDefaultBackgroundColorOverride\", {\n color: { r: 0, g: 0, b: 0, a: 0 },\n })\n .catch(() => {});\n\n return async () => {\n await session\n .send(\"Emulation.setDefaultBackgroundColorOverride\", {})\n .catch(() => {});\n };\n}\n\nexport async function applyStyleToFrames(\n frames: Frame[],\n css: string,\n label: string,\n): Promise<ScreenshotCleanup> {\n const trimmed = css.trim();\n if (!trimmed) return async () => {};\n const token = `__v3_style_${label}_${Date.now()}_${Math.random()\n .toString(36)\n .slice(2)}`;\n\n await Promise.all(\n frames.map((frame) =>\n frame\n .evaluate(\n ({ css, token }) => {\n try {\n const doc = document;\n if (!doc) return;\n const style = doc.createElement(\"style\");\n style.setAttribute(\"data-stagehand-style\", token);\n style.textContent = css;\n const parent = doc.head || doc.documentElement || doc.body;\n parent?.appendChild(style);\n } catch {\n // ignore\n }\n },\n { css: trimmed, token },\n )\n .catch(() => {}),\n ),\n );\n\n return async () => {\n await Promise.all(\n frames.map((frame) =>\n frame\n .evaluate((token) => {\n try {\n const doc = document;\n if (!doc) return;\n const nodes = doc.querySelectorAll(\n `[data-stagehand-style=\"${token}\"]`,\n );\n nodes.forEach((node) => node.remove());\n } catch {\n // ignore\n }\n }, token)\n .catch(() => {}),\n ),\n );\n };\n}\n\nexport async function disableAnimations(\n frames: Frame[],\n): Promise<ScreenshotCleanup> {\n const css = `\n*,\n*::before,\n*::after {\n animation-delay: 0s !important;\n animation-duration: 0s !important;\n animation-iteration-count: 1 !important;\n animation-play-state: paused !important;\n transition-property: none !important;\n transition-duration: 0s !important;\n transition-delay: 0s !important;\n}`;\n\n const cleanup = await applyStyleToFrames(frames, css, \"animations\");\n\n await Promise.all(\n frames.map((frame) =>\n frame\n .evaluate(() => {\n try {\n const animations =\n typeof document.getAnimations === \"function\"\n ? document.getAnimations()\n : [];\n for (const animation of animations) {\n try {\n const details = animation.effect?.getComputedTiming?.();\n if (details && details.iterations !== Infinity) {\n animation.finish?.();\n } else {\n animation.cancel?.();\n }\n } catch {\n animation.cancel?.();\n }\n }\n } catch {\n // ignore\n }\n })\n .catch(() => {}),\n ),\n );\n\n return cleanup;\n}\n\nexport async function hideCaret(frames: Frame[]): Promise<ScreenshotCleanup> {\n const css = `\ninput,\ntextarea,\n[contenteditable],\n[contenteditable=\"\"],\n[contenteditable=\"true\"],\n[contenteditable=\"plaintext-only\"],\n*:focus {\n caret-color: transparent !important;\n}`;\n\n return applyStyleToFrames(frames, css, \"caret\");\n}\n\nexport async function applyMaskOverlays(\n locators: Locator[],\n color: string,\n): Promise<ScreenshotCleanup> {\n type MaskRectSpec = ScreenshotClip & { rootToken?: string | null };\n const rectsByFrame = new Map<\n Frame,\n { rects: MaskRectSpec[]; rootTokens: Set<string> }\n >();\n\n const token = `__v3_mask_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n\n for (const locator of locators) {\n try {\n const info = await resolveMaskRects(locator, token);\n if (!info) continue;\n const entry = rectsByFrame.get(info.frame) ?? {\n rects: [],\n rootTokens: new Set<string>(),\n };\n entry.rects.push(...info.rects);\n for (const rect of info.rects) {\n if (rect.rootToken) entry.rootTokens.add(rect.rootToken);\n }\n rectsByFrame.set(info.frame, entry);\n } catch {\n // ignore individual locator failures\n }\n }\n\n if (rectsByFrame.size === 0) {\n return async () => {};\n }\n\n await Promise.all(\n Array.from(rectsByFrame.entries()).map(([frame, { rects }]) =>\n frame\n .evaluate(\n ({ rects, color, token }) => {\n try {\n const doc = document;\n if (!doc) return;\n for (const rect of rects) {\n const defaultRoot = doc.documentElement || doc.body;\n if (!defaultRoot) return;\n const root = rect.rootToken\n ? doc.querySelector(\n `[data-stagehand-mask-root=\"${rect.rootToken}\"]`,\n ) || defaultRoot\n : defaultRoot;\n if (!root) continue;\n if (rect.rootToken) {\n try {\n const style = window.getComputedStyle(root as Element);\n if (style && style.position === \"static\") {\n const rootEl = root as HTMLElement;\n if (\n !rootEl.hasAttribute(\"data-stagehand-mask-root-pos\")\n ) {\n rootEl.setAttribute(\n \"data-stagehand-mask-root-pos\",\n rootEl.style.position || \"\",\n );\n }\n rootEl.style.position = \"relative\";\n }\n } catch {\n // ignore\n }\n }\n const el = doc.createElement(\"div\");\n el.setAttribute(\"data-stagehand-mask\", token);\n el.style.position = \"absolute\";\n el.style.left = `${rect.x}px`;\n el.style.top = `${rect.y}px`;\n el.style.width = `${rect.width}px`;\n el.style.height = `${rect.height}px`;\n el.style.backgroundColor = color;\n el.style.pointerEvents = \"none\";\n el.style.zIndex = \"2147483647\";\n el.style.opacity = \"1\";\n el.style.mixBlendMode = \"normal\";\n (root as Element).appendChild(el);\n }\n } catch {\n // ignore\n }\n },\n { rects, color, token },\n )\n .catch(() => {}),\n ),\n );\n\n return async () => {\n await Promise.all(\n Array.from(rectsByFrame.entries()).map(([frame, { rootTokens }]) =>\n frame\n .evaluate(\n ({ token, rootTokens }) => {\n try {\n const doc = document;\n if (!doc) return;\n const nodes = doc.querySelectorAll(\n `[data-stagehand-mask=\"${token}\"]`,\n );\n nodes.forEach((node) => node.remove());\n for (const rootToken of rootTokens) {\n const root = doc.querySelector(\n `[data-stagehand-mask-root=\"${rootToken}\"]`,\n ) as HTMLElement | null;\n if (!root) continue;\n const prev = root.getAttribute(\n \"data-stagehand-mask-root-pos\",\n );\n if (prev !== null) {\n root.style.position = prev;\n root.removeAttribute(\"data-stagehand-mask-root-pos\");\n }\n root.removeAttribute(\"data-stagehand-mask-root\");\n }\n } catch {\n // ignore\n }\n },\n { token, rootTokens: Array.from(rootTokens) },\n )\n .catch(() => {}),\n ),\n );\n };\n}\n\nasync function resolveMaskRects(\n locator: Locator,\n maskToken: string,\n): Promise<{\n frame: Frame;\n rects: Array<ScreenshotClip & { rootToken?: string | null }>;\n} | null> {\n const frame = locator.getFrame();\n const session = frame.session;\n try {\n const resolved: Array<{\n objectId: Protocol.Runtime.RemoteObjectId;\n nodeId: Protocol.DOM.NodeId | null;\n }> = await locator.resolveNodesForMask();\n const rects: Array<ScreenshotClip & { rootToken?: string | null }> = [];\n\n for (const { objectId } of resolved) {\n try {\n const rect = await resolveMaskRectForObject(\n session,\n objectId,\n maskToken,\n );\n if (rect) rects.push(rect);\n } catch {\n // ignore individual element failures\n } finally {\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n }\n }\n\n if (!rects.length) return null;\n\n return { frame, rects };\n } catch {\n return null;\n }\n}\n\nasync function resolveMaskRectForObject(\n session: CDPSessionLike,\n objectId: Protocol.Runtime.RemoteObjectId,\n maskToken: string,\n): Promise<(ScreenshotClip & { rootToken?: string | null }) | null> {\n const result = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: screenshotScriptSources.resolveMaskRect,\n arguments: [{ value: maskToken }],\n returnByValue: true,\n },\n );\n\n if (result.exceptionDetails) {\n return null;\n }\n\n const rect = result.result.value as\n | (ScreenshotClip & { rootToken?: string | null })\n | null;\n if (!rect) return null;\n\n const { x, y, width, height } = rect;\n if (\n !Number.isFinite(x) ||\n !Number.isFinite(y) ||\n !Number.isFinite(width) ||\n !Number.isFinite(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return null;\n }\n\n return {\n x,\n y,\n width,\n height,\n rootToken:\n rect.rootToken && typeof rect.rootToken === \"string\"\n ? rect.rootToken\n : undefined,\n };\n}\n\nexport async function runScreenshotCleanups(\n cleanups: ScreenshotCleanup[],\n): Promise<void> {\n for (let i = cleanups.length - 1; i >= 0; i -= 1) {\n const fn = cleanups[i];\n if (!fn) continue;\n try {\n const result = fn();\n if (result && typeof (result as Promise<void>).then === \"function\") {\n await result;\n }\n } catch {\n // ignore cleanup errors\n }\n }\n}\n\nexport async function withScreenshotTimeout<T>(\n timeoutMs: number | undefined,\n task: () => Promise<T>,\n): Promise<T> {\n if (!timeoutMs || timeoutMs <= 0) return task();\n\n let timer: NodeJS.Timeout | null = null;\n const timeoutPromise = new Promise<T>((_, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`screenshot: timeout of ${timeoutMs}ms exceeded`));\n }, timeoutMs);\n });\n\n try {\n return await Promise.race([task(), timeoutPromise]);\n } finally {\n if (timer) clearTimeout(timer);\n }\n}\n"]}
1
+ {"version":3,"file":"screenshotUtils.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/screenshotUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { Protocol } from \"devtools-protocol\";\nimport type { CDPSessionLike } from \"./cdp.js\";\nimport type { Frame } from \"./frame.js\";\nimport type { Locator } from \"./locator.js\";\nimport type { Page } from \"./page.js\";\nimport type {\n ScreenshotClip,\n ScreenshotScaleOption,\n} from \"../types/public/screenshotTypes.js\";\nimport { StagehandInvalidArgumentError } from \"../types/public/sdkErrors.js\";\nimport { screenshotScriptSources } from \"../dom/build/screenshotScripts.generated.js\";\n\nexport type ScreenshotCleanup = () => Promise<void> | void;\n\nexport function collectFramesForScreenshot(page: Page): Frame[] {\n const seen = new Map<string, Frame>();\n const main = page.mainFrame();\n seen.set(main.frameId, main);\n for (const frame of page.frames()) {\n seen.set(frame.frameId, frame);\n }\n return Array.from(seen.values());\n}\n\nexport function normalizeScreenshotClip(clip: ScreenshotClip): ScreenshotClip {\n const x = Number(clip.x);\n const y = Number(clip.y);\n const width = Number(clip.width);\n const height = Number(clip.height);\n\n for (const [key, value] of Object.entries({ x, y, width, height })) {\n if (!Number.isFinite(value)) {\n throw new StagehandInvalidArgumentError(\n `screenshot: clip.${key} must be a finite number`,\n );\n }\n }\n\n if (width <= 0 || height <= 0) {\n throw new StagehandInvalidArgumentError(\n \"screenshot: clip width/height must be positive\",\n );\n }\n\n return { x, y, width, height };\n}\n\nexport async function computeScreenshotScale(\n page: Page,\n mode: ScreenshotScaleOption,\n): Promise<number | undefined> {\n if (mode !== \"css\") return undefined;\n try {\n const frame = page.mainFrame();\n const dpr = await frame\n .evaluate(() => {\n const ratio = Number(window.devicePixelRatio || 1);\n return Number.isFinite(ratio) && ratio > 0 ? ratio : 1;\n })\n .catch(() => 1);\n const safeRatio = Number.isFinite(dpr) && dpr > 0 ? dpr : 1;\n return Math.min(2, Math.max(0.1, 1 / safeRatio));\n } catch {\n return 1;\n }\n}\n\nexport async function setTransparentBackground(\n session: CDPSessionLike,\n): Promise<ScreenshotCleanup> {\n await session\n .send(\"Emulation.setDefaultBackgroundColorOverride\", {\n color: { r: 0, g: 0, b: 0, a: 0 },\n })\n .catch(() => {});\n\n return async () => {\n await session\n .send(\"Emulation.setDefaultBackgroundColorOverride\", {})\n .catch(() => {});\n };\n}\n\nexport async function applyStyleToFrames(\n frames: Frame[],\n css: string,\n label: string,\n): Promise<ScreenshotCleanup> {\n const trimmed = css.trim();\n if (!trimmed) return async () => {};\n const token = `__v3_style_${label}_${Date.now()}_${Math.random()\n .toString(36)\n .slice(2)}`;\n\n await Promise.all(\n frames.map((frame) =>\n frame\n .evaluate(\n ({ css, token }) => {\n try {\n const doc = document;\n if (!doc) return;\n const style = doc.createElement(\"style\");\n style.setAttribute(\"data-stagehand-style\", token);\n style.textContent = css;\n const parent = doc.head || doc.documentElement || doc.body;\n parent?.appendChild(style);\n } catch {\n // ignore\n }\n },\n { css: trimmed, token },\n )\n .catch(() => {}),\n ),\n );\n\n return async () => {\n await Promise.all(\n frames.map((frame) =>\n frame\n .evaluate((token) => {\n try {\n const doc = document;\n if (!doc) return;\n const nodes = doc.querySelectorAll(\n `[data-stagehand-style=\"${token}\"]`,\n );\n nodes.forEach((node) => node.remove());\n } catch {\n // ignore\n }\n }, token)\n .catch(() => {}),\n ),\n );\n };\n}\n\nexport async function disableAnimations(\n frames: Frame[],\n): Promise<ScreenshotCleanup> {\n const css = `\n*,\n*::before,\n*::after {\n animation-delay: 0s !important;\n animation-duration: 0s !important;\n animation-iteration-count: 1 !important;\n animation-play-state: paused !important;\n transition-property: none !important;\n transition-duration: 0s !important;\n transition-delay: 0s !important;\n}`;\n\n const cleanup = await applyStyleToFrames(frames, css, \"animations\");\n\n await Promise.all(\n frames.map((frame) =>\n frame\n .evaluate(() => {\n try {\n const animations =\n typeof document.getAnimations === \"function\"\n ? document.getAnimations()\n : [];\n for (const animation of animations) {\n try {\n const details = animation.effect?.getComputedTiming?.();\n if (details && details.iterations !== Infinity) {\n animation.finish?.();\n } else {\n animation.cancel?.();\n }\n } catch {\n animation.cancel?.();\n }\n }\n } catch {\n // ignore\n }\n })\n .catch(() => {}),\n ),\n );\n\n return cleanup;\n}\n\nexport async function hideCaret(frames: Frame[]): Promise<ScreenshotCleanup> {\n const css = `\ninput,\ntextarea,\n[contenteditable],\n[contenteditable=\"\"],\n[contenteditable=\"true\"],\n[contenteditable=\"plaintext-only\"],\n*:focus {\n caret-color: transparent !important;\n}`;\n\n return applyStyleToFrames(frames, css, \"caret\");\n}\n\nexport async function applyMaskOverlays(\n locators: Locator[],\n color: string,\n): Promise<ScreenshotCleanup> {\n type MaskRectSpec = ScreenshotClip & { rootToken?: string | null };\n const rectsByFrame = new Map<\n Frame,\n { rects: MaskRectSpec[]; rootTokens: Set<string> }\n >();\n\n const token = `__v3_mask_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n\n for (const locator of locators) {\n try {\n const info = await resolveMaskRects(locator, token);\n if (!info) continue;\n const entry = rectsByFrame.get(info.frame) ?? {\n rects: [],\n rootTokens: new Set<string>(),\n };\n entry.rects.push(...info.rects);\n for (const rect of info.rects) {\n if (rect.rootToken) entry.rootTokens.add(rect.rootToken);\n }\n rectsByFrame.set(info.frame, entry);\n } catch {\n // ignore individual locator failures\n }\n }\n\n if (rectsByFrame.size === 0) {\n return async () => {};\n }\n\n await Promise.all(\n Array.from(rectsByFrame.entries()).map(([frame, { rects }]) =>\n frame\n .evaluate(\n ({ rects, color, token }) => {\n try {\n const doc = document;\n if (!doc) return;\n for (const rect of rects) {\n const defaultRoot = doc.documentElement || doc.body;\n if (!defaultRoot) return;\n const root = rect.rootToken\n ? doc.querySelector(\n `[data-stagehand-mask-root=\"${rect.rootToken}\"]`,\n ) || defaultRoot\n : defaultRoot;\n if (!root) continue;\n if (rect.rootToken) {\n try {\n const style = window.getComputedStyle(root as Element);\n if (style && style.position === \"static\") {\n const rootEl = root as HTMLElement;\n if (\n !rootEl.hasAttribute(\"data-stagehand-mask-root-pos\")\n ) {\n rootEl.setAttribute(\n \"data-stagehand-mask-root-pos\",\n rootEl.style.position || \"\",\n );\n }\n rootEl.style.position = \"relative\";\n }\n } catch {\n // ignore\n }\n }\n const el = doc.createElement(\"div\");\n el.setAttribute(\"data-stagehand-mask\", token);\n el.style.position = \"absolute\";\n el.style.left = `${rect.x}px`;\n el.style.top = `${rect.y}px`;\n el.style.width = `${rect.width}px`;\n el.style.height = `${rect.height}px`;\n el.style.backgroundColor = color;\n el.style.pointerEvents = \"none\";\n el.style.zIndex = \"2147483647\";\n el.style.opacity = \"1\";\n el.style.mixBlendMode = \"normal\";\n (root as Element).appendChild(el);\n }\n } catch {\n // ignore\n }\n },\n { rects, color, token },\n )\n .catch(() => {}),\n ),\n );\n\n return async () => {\n await Promise.all(\n Array.from(rectsByFrame.entries()).map(([frame, { rootTokens }]) =>\n frame\n .evaluate(\n ({ token, rootTokens }) => {\n try {\n const doc = document;\n if (!doc) return;\n const nodes = doc.querySelectorAll(\n `[data-stagehand-mask=\"${token}\"]`,\n );\n nodes.forEach((node) => node.remove());\n for (const rootToken of rootTokens) {\n const root = doc.querySelector(\n `[data-stagehand-mask-root=\"${rootToken}\"]`,\n ) as HTMLElement | null;\n if (!root) continue;\n const prev = root.getAttribute(\n \"data-stagehand-mask-root-pos\",\n );\n if (prev !== null) {\n root.style.position = prev;\n root.removeAttribute(\"data-stagehand-mask-root-pos\");\n }\n root.removeAttribute(\"data-stagehand-mask-root\");\n }\n } catch {\n // ignore\n }\n },\n { token, rootTokens: Array.from(rootTokens) },\n )\n .catch(() => {}),\n ),\n );\n };\n}\n\nasync function resolveMaskRects(\n locator: Locator,\n maskToken: string,\n): Promise<{\n frame: Frame;\n rects: Array<ScreenshotClip & { rootToken?: string | null }>;\n} | null> {\n const frame = locator.getFrame();\n const session = frame.session;\n try {\n const resolved: Array<{\n objectId: Protocol.Runtime.RemoteObjectId;\n nodeId: Protocol.DOM.NodeId | null;\n }> = await locator.resolveNodesForMask();\n const rects: Array<ScreenshotClip & { rootToken?: string | null }> = [];\n\n for (const { objectId } of resolved) {\n try {\n const rect = await resolveMaskRectForObject(\n session,\n objectId,\n maskToken,\n );\n if (rect) rects.push(rect);\n } catch {\n // ignore individual element failures\n } finally {\n await session\n .send<never>(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n }\n }\n\n if (!rects.length) return null;\n\n return { frame, rects };\n } catch {\n return null;\n }\n}\n\nasync function resolveMaskRectForObject(\n session: CDPSessionLike,\n objectId: Protocol.Runtime.RemoteObjectId,\n maskToken: string,\n): Promise<(ScreenshotClip & { rootToken?: string | null }) | null> {\n const result = await session.send<Protocol.Runtime.CallFunctionOnResponse>(\n \"Runtime.callFunctionOn\",\n {\n objectId,\n functionDeclaration: screenshotScriptSources.resolveMaskRect,\n arguments: [{ value: maskToken }],\n returnByValue: true,\n },\n );\n\n if (result.exceptionDetails) {\n return null;\n }\n\n const rect = result.result.value as\n | (ScreenshotClip & { rootToken?: string | null })\n | null;\n if (!rect) return null;\n\n const { x, y, width, height } = rect;\n if (\n !Number.isFinite(x) ||\n !Number.isFinite(y) ||\n !Number.isFinite(width) ||\n !Number.isFinite(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return null;\n }\n\n return {\n x,\n y,\n width,\n height,\n rootToken:\n rect.rootToken && typeof rect.rootToken === \"string\"\n ? rect.rootToken\n : undefined,\n };\n}\n\nexport async function runScreenshotCleanups(\n cleanups: ScreenshotCleanup[],\n): Promise<void> {\n for (let i = cleanups.length - 1; i >= 0; i -= 1) {\n const fn = cleanups[i];\n if (!fn) continue;\n try {\n const result = fn();\n if (result && typeof (result as Promise<void>).then === \"function\") {\n await result;\n }\n } catch {\n // ignore cleanup errors\n }\n }\n}\n"]}
@@ -1,10 +1,19 @@
1
- import { EventEmitter } from "events";
1
+ import type { LanguageModelV2Middleware } from "@ai-sdk/provider";
2
2
  import { z } from "zod";
3
3
  import { InferStagehandSchema, StagehandZodSchema } from "./zodCompat.js";
4
4
  import { LLMClient } from "./llm/LLMClient.js";
5
5
  import { AgentReplayStep } from "./types/private/index.js";
6
- 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";
7
7
  import { V3Context } from "./understudy/context.js";
8
+ import { type FlowLoggerContext } from "./flowlogger/FlowLogger.js";
9
+ import { EventEmitterWithWildcardSupport } from "./flowlogger/EventEmitter.js";
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;
8
17
  /**
9
18
  * V3
10
19
  *
@@ -32,7 +41,7 @@ export declare class V3 {
32
41
  * Event bus for internal communication.
33
42
  * Emits events like 'screenshot' when screenshots are captured during agent execution.
34
43
  */
35
- readonly bus: EventEmitter;
44
+ readonly bus: EventEmitterWithWildcardSupport;
36
45
  private modelName;
37
46
  private modelClientOptions;
38
47
  private llmProvider;
@@ -49,6 +58,11 @@ export declare class V3 {
49
58
  * Returns true if the browser is running on Browserbase.
50
59
  */
51
60
  get isBrowserbase(): boolean;
61
+ /**
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;
52
66
  /**
53
67
  * Returns true if advancedStealth is enabled in Browserbase settings.
54
68
  */
@@ -70,6 +84,9 @@ export declare class V3 {
70
84
  private stagehandLogger;
71
85
  private _history;
72
86
  private readonly instanceId;
87
+ private readonly sessionId;
88
+ readonly eventStore: EventStore;
89
+ readonly flowLoggerContext: FlowLoggerContext;
73
90
  private static _processGuardsInstalled;
74
91
  private static _instances;
75
92
  private cacheStorage;
@@ -151,6 +168,11 @@ export declare class V3 {
151
168
  close(opts?: {
152
169
  force?: boolean;
153
170
  }): Promise<void>;
171
+ /**
172
+ * Resolves the Browserbase API key from options or environment variables.
173
+ * Returns undefined if no key is found (does not throw).
174
+ */
175
+ get browserbaseApiKey(): string | undefined;
154
176
  /** Guard: ensure Browserbase credentials exist in options. */
155
177
  private requireBrowserbaseCreds;
156
178
  get logger(): (logLine: LogLine) => void;
@@ -189,3 +211,4 @@ export declare class V3 {
189
211
  execute: (instructionOrOptions: string | AgentExecuteOptions) => Promise<AgentResult>;
190
212
  };
191
213
  }
214
+ export {};