@browserbasehq/orca 3.4.0-preview.0 → 3.5.0-vertex-test

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 (841) hide show
  1. package/dist/cjs/lib/inference.d.ts +2 -1
  2. package/dist/cjs/lib/inference.js +10 -3
  3. package/dist/cjs/lib/inference.js.map +1 -1
  4. package/dist/cjs/lib/prompt.d.ts +2 -2
  5. package/dist/cjs/lib/prompt.js +19 -4
  6. package/dist/cjs/lib/prompt.js.map +1 -1
  7. package/dist/cjs/lib/v3/agent/AgentProvider.d.ts +1 -1
  8. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  9. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +10 -0
  10. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  11. package/dist/cjs/lib/v3/api.d.ts +6 -1
  12. package/dist/cjs/lib/v3/api.js +57 -12
  13. package/dist/cjs/lib/v3/api.js.map +1 -1
  14. package/dist/cjs/lib/v3/handlers/extractHandler.js +19 -2
  15. package/dist/cjs/lib/v3/handlers/extractHandler.js.map +1 -1
  16. package/dist/cjs/lib/v3/handlers/observeHandler.js +2 -1
  17. package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -1
  18. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +1 -0
  19. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  20. package/dist/cjs/lib/v3/index.d.ts +1 -0
  21. package/dist/cjs/lib/v3/index.js.map +1 -1
  22. package/dist/cjs/lib/v3/launch/local.d.ts +2 -7
  23. package/dist/cjs/lib/v3/launch/local.js +47 -7
  24. package/dist/cjs/lib/v3/launch/local.js.map +1 -1
  25. package/dist/cjs/lib/v3/llm/LLMProvider.js +0 -5
  26. package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
  27. package/dist/cjs/lib/v3/llm/aisdk.js +5 -0
  28. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  29. package/dist/cjs/lib/v3/types/private/handlers.d.ts +2 -0
  30. package/dist/cjs/lib/v3/types/private/handlers.js.map +1 -1
  31. package/dist/cjs/lib/v3/types/private/snapshot.d.ts +2 -0
  32. package/dist/cjs/lib/v3/types/private/snapshot.js.map +1 -1
  33. package/dist/cjs/lib/v3/types/public/agent.d.ts +1 -1
  34. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  35. package/dist/cjs/lib/v3/types/public/api.d.ts +287 -0
  36. package/dist/cjs/lib/v3/types/public/api.js +61 -3
  37. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  38. package/dist/cjs/lib/v3/types/public/methods.d.ts +2 -0
  39. package/dist/cjs/lib/v3/types/public/methods.js.map +1 -1
  40. package/dist/cjs/lib/v3/types/public/model.d.ts +11 -7
  41. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  42. package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.js +25 -0
  43. package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.js.map +1 -1
  44. package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js +10 -1
  45. package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js.map +1 -1
  46. package/dist/cjs/lib/v3/v3.d.ts +1 -0
  47. package/dist/cjs/lib/v3/v3.js +21 -47
  48. package/dist/cjs/lib/v3/v3.js.map +1 -1
  49. package/dist/cjs/lib/v3Evaluator.d.ts +20 -12
  50. package/dist/cjs/lib/v3Evaluator.js +41 -199
  51. package/dist/cjs/lib/v3Evaluator.js.map +1 -1
  52. package/dist/cjs/lib/v3LegacyEvaluator.d.ts +20 -0
  53. package/dist/cjs/lib/v3LegacyEvaluator.js +215 -0
  54. package/dist/cjs/lib/v3LegacyEvaluator.js.map +1 -0
  55. package/dist/cjs/lib/version.d.ts +1 -1
  56. package/dist/cjs/lib/version.js +1 -1
  57. package/dist/cjs/lib/version.js.map +1 -1
  58. package/dist/esm/lib/inference.d.ts +2 -1
  59. package/dist/esm/lib/inference.js +10 -3
  60. package/dist/esm/lib/inference.js.map +1 -1
  61. package/dist/esm/lib/prompt.d.ts +2 -2
  62. package/dist/esm/lib/prompt.js +19 -4
  63. package/dist/esm/lib/prompt.js.map +1 -1
  64. package/dist/esm/lib/v3/agent/AgentProvider.d.ts +1 -1
  65. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  66. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +10 -0
  67. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  68. package/dist/esm/lib/v3/api.d.ts +6 -1
  69. package/dist/esm/lib/v3/api.js +57 -12
  70. package/dist/esm/lib/v3/api.js.map +1 -1
  71. package/dist/esm/lib/v3/handlers/extractHandler.js +19 -2
  72. package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -1
  73. package/dist/esm/lib/v3/handlers/observeHandler.js +2 -1
  74. package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
  75. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +1 -0
  76. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  77. package/dist/esm/lib/v3/index.d.ts +1 -0
  78. package/dist/esm/lib/v3/index.js.map +1 -1
  79. package/dist/esm/lib/v3/launch/local.d.ts +2 -7
  80. package/dist/esm/lib/v3/launch/local.js +48 -8
  81. package/dist/esm/lib/v3/launch/local.js.map +1 -1
  82. package/dist/esm/lib/v3/llm/LLMProvider.js +1 -6
  83. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
  84. package/dist/esm/lib/v3/llm/aisdk.js +5 -0
  85. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  86. package/dist/esm/lib/v3/types/private/handlers.d.ts +2 -0
  87. package/dist/esm/lib/v3/types/private/handlers.js.map +1 -1
  88. package/dist/esm/lib/v3/types/private/snapshot.d.ts +2 -0
  89. package/dist/esm/lib/v3/types/private/snapshot.js.map +1 -1
  90. package/dist/esm/lib/v3/types/public/agent.d.ts +1 -1
  91. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  92. package/dist/esm/lib/v3/types/public/api.d.ts +287 -0
  93. package/dist/esm/lib/v3/types/public/api.js +59 -1
  94. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  95. package/dist/esm/lib/v3/types/public/methods.d.ts +2 -0
  96. package/dist/esm/lib/v3/types/public/methods.js.map +1 -1
  97. package/dist/esm/lib/v3/types/public/model.d.ts +11 -7
  98. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  99. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js +25 -0
  100. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js.map +1 -1
  101. package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js +10 -1
  102. package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js.map +1 -1
  103. package/dist/esm/lib/v3/v3.d.ts +1 -0
  104. package/dist/esm/lib/v3/v3.js +21 -47
  105. package/dist/esm/lib/v3/v3.js.map +1 -1
  106. package/dist/esm/lib/v3Evaluator.d.ts +20 -12
  107. package/dist/esm/lib/v3Evaluator.js +41 -199
  108. package/dist/esm/lib/v3Evaluator.js.map +1 -1
  109. package/dist/esm/lib/v3LegacyEvaluator.d.ts +20 -0
  110. package/dist/esm/lib/v3LegacyEvaluator.js +211 -0
  111. package/dist/esm/lib/v3LegacyEvaluator.js.map +1 -0
  112. package/dist/esm/lib/version.d.ts +1 -1
  113. package/dist/esm/lib/version.js +1 -1
  114. package/dist/esm/lib/version.js.map +1 -1
  115. package/package.json +30 -18
  116. package/dist/cjs/tests/cache-variables.test.d.ts +0 -1
  117. package/dist/cjs/tests/cache-variables.test.js +0 -221
  118. package/dist/cjs/tests/cache-variables.test.js.map +0 -1
  119. package/dist/cjs/tests/integration/agent-abort-signal.spec.d.ts +0 -1
  120. package/dist/cjs/tests/integration/agent-abort-signal.spec.js +0 -123
  121. package/dist/cjs/tests/integration/agent-abort-signal.spec.js.map +0 -1
  122. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.d.ts +0 -1
  123. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js +0 -83
  124. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js.map +0 -1
  125. package/dist/cjs/tests/integration/agent-callbacks.spec.d.ts +0 -1
  126. package/dist/cjs/tests/integration/agent-callbacks.spec.js +0 -385
  127. package/dist/cjs/tests/integration/agent-callbacks.spec.js.map +0 -1
  128. package/dist/cjs/tests/integration/agent-experimental-validation.spec.d.ts +0 -1
  129. package/dist/cjs/tests/integration/agent-experimental-validation.spec.js +0 -362
  130. package/dist/cjs/tests/integration/agent-experimental-validation.spec.js.map +0 -1
  131. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.d.ts +0 -1
  132. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +0 -262
  133. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +0 -1
  134. package/dist/cjs/tests/integration/agent-message-continuation.spec.d.ts +0 -1
  135. package/dist/cjs/tests/integration/agent-message-continuation.spec.js +0 -112
  136. package/dist/cjs/tests/integration/agent-message-continuation.spec.js.map +0 -1
  137. package/dist/cjs/tests/integration/agent-streaming.spec.d.ts +0 -1
  138. package/dist/cjs/tests/integration/agent-streaming.spec.js +0 -140
  139. package/dist/cjs/tests/integration/agent-streaming.spec.js.map +0 -1
  140. package/dist/cjs/tests/integration/cdp-close-api-region.spec.d.ts +0 -1
  141. package/dist/cjs/tests/integration/cdp-close-api-region.spec.js +0 -41
  142. package/dist/cjs/tests/integration/cdp-close-api-region.spec.js.map +0 -1
  143. package/dist/cjs/tests/integration/cdp-connection-close.spec.d.ts +0 -1
  144. package/dist/cjs/tests/integration/cdp-connection-close.spec.js +0 -76
  145. package/dist/cjs/tests/integration/cdp-connection-close.spec.js.map +0 -1
  146. package/dist/cjs/tests/integration/cdp-session-detached.spec.d.ts +0 -1
  147. package/dist/cjs/tests/integration/cdp-session-detached.spec.js +0 -45
  148. package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +0 -1
  149. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.d.ts +0 -1
  150. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js +0 -56
  151. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js.map +0 -1
  152. package/dist/cjs/tests/integration/click-count.spec.d.ts +0 -1
  153. package/dist/cjs/tests/integration/click-count.spec.js +0 -163
  154. package/dist/cjs/tests/integration/click-count.spec.js.map +0 -1
  155. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.d.ts +0 -1
  156. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js +0 -99
  157. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js.map +0 -1
  158. package/dist/cjs/tests/integration/context-addInitScript.spec.d.ts +0 -1
  159. package/dist/cjs/tests/integration/context-addInitScript.spec.js +0 -285
  160. package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +0 -1
  161. package/dist/cjs/tests/integration/context-extra-http-headers.spec.d.ts +0 -1
  162. package/dist/cjs/tests/integration/context-extra-http-headers.spec.js +0 -49
  163. package/dist/cjs/tests/integration/context-extra-http-headers.spec.js.map +0 -1
  164. package/dist/cjs/tests/integration/cookies.spec.d.ts +0 -1
  165. package/dist/cjs/tests/integration/cookies.spec.js +0 -187
  166. package/dist/cjs/tests/integration/cookies.spec.js.map +0 -1
  167. package/dist/cjs/tests/integration/default-page-tracking.spec.d.ts +0 -1
  168. package/dist/cjs/tests/integration/default-page-tracking.spec.js +0 -52
  169. package/dist/cjs/tests/integration/default-page-tracking.spec.js.map +0 -1
  170. package/dist/cjs/tests/integration/downloads.spec.d.ts +0 -1
  171. package/dist/cjs/tests/integration/downloads.spec.js +0 -52
  172. package/dist/cjs/tests/integration/downloads.spec.js.map +0 -1
  173. package/dist/cjs/tests/integration/flowLogger.spec.d.ts +0 -1
  174. package/dist/cjs/tests/integration/flowLogger.spec.js +0 -718
  175. package/dist/cjs/tests/integration/flowLogger.spec.js.map +0 -1
  176. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.d.ts +0 -1
  177. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js +0 -57
  178. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js.map +0 -1
  179. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +0 -1
  180. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +0 -219
  181. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +0 -1
  182. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.d.ts +0 -1
  183. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js +0 -474
  184. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js.map +0 -1
  185. package/dist/cjs/tests/integration/keep-alive.child.d.ts +0 -1
  186. package/dist/cjs/tests/integration/keep-alive.child.js +0 -85
  187. package/dist/cjs/tests/integration/keep-alive.child.js.map +0 -1
  188. package/dist/cjs/tests/integration/keep-alive.spec.d.ts +0 -22
  189. package/dist/cjs/tests/integration/keep-alive.spec.js +0 -490
  190. package/dist/cjs/tests/integration/keep-alive.spec.js.map +0 -1
  191. package/dist/cjs/tests/integration/keyboard.spec.d.ts +0 -1
  192. package/dist/cjs/tests/integration/keyboard.spec.js +0 -259
  193. package/dist/cjs/tests/integration/keyboard.spec.js.map +0 -1
  194. package/dist/cjs/tests/integration/locator-backend-node-id.spec.d.ts +0 -1
  195. package/dist/cjs/tests/integration/locator-backend-node-id.spec.js +0 -150
  196. package/dist/cjs/tests/integration/locator-backend-node-id.spec.js.map +0 -1
  197. package/dist/cjs/tests/integration/locator-content-methods.spec.d.ts +0 -1
  198. package/dist/cjs/tests/integration/locator-content-methods.spec.js +0 -180
  199. package/dist/cjs/tests/integration/locator-content-methods.spec.js.map +0 -1
  200. package/dist/cjs/tests/integration/locator-count-iframe.spec.d.ts +0 -1
  201. package/dist/cjs/tests/integration/locator-count-iframe.spec.js +0 -129
  202. package/dist/cjs/tests/integration/locator-count-iframe.spec.js.map +0 -1
  203. package/dist/cjs/tests/integration/locator-count.spec.d.ts +0 -1
  204. package/dist/cjs/tests/integration/locator-count.spec.js +0 -68
  205. package/dist/cjs/tests/integration/locator-count.spec.js.map +0 -1
  206. package/dist/cjs/tests/integration/locator-fill.spec.d.ts +0 -1
  207. package/dist/cjs/tests/integration/locator-fill.spec.js +0 -117
  208. package/dist/cjs/tests/integration/locator-fill.spec.js.map +0 -1
  209. package/dist/cjs/tests/integration/locator-input-methods.spec.d.ts +0 -1
  210. package/dist/cjs/tests/integration/locator-input-methods.spec.js +0 -127
  211. package/dist/cjs/tests/integration/locator-input-methods.spec.js.map +0 -1
  212. package/dist/cjs/tests/integration/locator-nth.spec.d.ts +0 -1
  213. package/dist/cjs/tests/integration/locator-nth.spec.js +0 -175
  214. package/dist/cjs/tests/integration/locator-nth.spec.js.map +0 -1
  215. package/dist/cjs/tests/integration/locator-select-option.spec.d.ts +0 -1
  216. package/dist/cjs/tests/integration/locator-select-option.spec.js +0 -216
  217. package/dist/cjs/tests/integration/locator-select-option.spec.js.map +0 -1
  218. package/dist/cjs/tests/integration/logger-initialization.spec.d.ts +0 -1
  219. package/dist/cjs/tests/integration/logger-initialization.spec.js +0 -597
  220. package/dist/cjs/tests/integration/logger-initialization.spec.js.map +0 -1
  221. package/dist/cjs/tests/integration/multi-instance-logger.spec.d.ts +0 -1
  222. package/dist/cjs/tests/integration/multi-instance-logger.spec.js +0 -293
  223. package/dist/cjs/tests/integration/multi-instance-logger.spec.js.map +0 -1
  224. package/dist/cjs/tests/integration/nested-div.spec.d.ts +0 -1
  225. package/dist/cjs/tests/integration/nested-div.spec.js +0 -22
  226. package/dist/cjs/tests/integration/nested-div.spec.js.map +0 -1
  227. package/dist/cjs/tests/integration/observe-element-id-format.spec.d.ts +0 -1
  228. package/dist/cjs/tests/integration/observe-element-id-format.spec.js +0 -130
  229. package/dist/cjs/tests/integration/observe-element-id-format.spec.js.map +0 -1
  230. package/dist/cjs/tests/integration/page-addInitScript.spec.d.ts +0 -1
  231. package/dist/cjs/tests/integration/page-addInitScript.spec.js +0 -94
  232. package/dist/cjs/tests/integration/page-addInitScript.spec.js.map +0 -1
  233. package/dist/cjs/tests/integration/page-console.spec.d.ts +0 -1
  234. package/dist/cjs/tests/integration/page-console.spec.js +0 -47
  235. package/dist/cjs/tests/integration/page-console.spec.js.map +0 -1
  236. package/dist/cjs/tests/integration/page-drag-and-drop.spec.d.ts +0 -1
  237. package/dist/cjs/tests/integration/page-drag-and-drop.spec.js +0 -437
  238. package/dist/cjs/tests/integration/page-drag-and-drop.spec.js.map +0 -1
  239. package/dist/cjs/tests/integration/page-extra-http-headers.spec.d.ts +0 -1
  240. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +0 -85
  241. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +0 -1
  242. package/dist/cjs/tests/integration/page-goto-response.spec.d.ts +0 -1
  243. package/dist/cjs/tests/integration/page-goto-response.spec.js +0 -34
  244. package/dist/cjs/tests/integration/page-goto-response.spec.js.map +0 -1
  245. package/dist/cjs/tests/integration/page-hover.spec.d.ts +0 -1
  246. package/dist/cjs/tests/integration/page-hover.spec.js +0 -165
  247. package/dist/cjs/tests/integration/page-hover.spec.js.map +0 -1
  248. package/dist/cjs/tests/integration/page-screenshot.spec.d.ts +0 -1
  249. package/dist/cjs/tests/integration/page-screenshot.spec.js +0 -292
  250. package/dist/cjs/tests/integration/page-screenshot.spec.js.map +0 -1
  251. package/dist/cjs/tests/integration/page-scroll.spec.d.ts +0 -1
  252. package/dist/cjs/tests/integration/page-scroll.spec.js +0 -183
  253. package/dist/cjs/tests/integration/page-scroll.spec.js.map +0 -1
  254. package/dist/cjs/tests/integration/page-send-cdp.spec.d.ts +0 -1
  255. package/dist/cjs/tests/integration/page-send-cdp.spec.js +0 -47
  256. package/dist/cjs/tests/integration/page-send-cdp.spec.js.map +0 -1
  257. package/dist/cjs/tests/integration/perform-understudy-method.spec.d.ts +0 -1
  258. package/dist/cjs/tests/integration/perform-understudy-method.spec.js +0 -63
  259. package/dist/cjs/tests/integration/perform-understudy-method.spec.js.map +0 -1
  260. package/dist/cjs/tests/integration/setinputfiles.spec.d.ts +0 -1
  261. package/dist/cjs/tests/integration/setinputfiles.spec.js +0 -133
  262. package/dist/cjs/tests/integration/setinputfiles.spec.js.map +0 -1
  263. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.d.ts +0 -1
  264. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js +0 -161
  265. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js.map +0 -1
  266. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.d.ts +0 -1
  267. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js +0 -160
  268. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js.map +0 -1
  269. package/dist/cjs/tests/integration/testUtils.d.ts +0 -40
  270. package/dist/cjs/tests/integration/testUtils.js +0 -188
  271. package/dist/cjs/tests/integration/testUtils.js.map +0 -1
  272. package/dist/cjs/tests/integration/text-selector-innermost.spec.d.ts +0 -1
  273. package/dist/cjs/tests/integration/text-selector-innermost.spec.js +0 -105
  274. package/dist/cjs/tests/integration/text-selector-innermost.spec.js.map +0 -1
  275. package/dist/cjs/tests/integration/timeouts.spec.d.ts +0 -1
  276. package/dist/cjs/tests/integration/timeouts.spec.js +0 -309
  277. package/dist/cjs/tests/integration/timeouts.spec.js.map +0 -1
  278. package/dist/cjs/tests/integration/user-data-dir.spec.d.ts +0 -1
  279. package/dist/cjs/tests/integration/user-data-dir.spec.js +0 -77
  280. package/dist/cjs/tests/integration/user-data-dir.spec.js.map +0 -1
  281. package/dist/cjs/tests/integration/v3.config.d.ts +0 -4
  282. package/dist/cjs/tests/integration/v3.config.js +0 -11
  283. package/dist/cjs/tests/integration/v3.config.js.map +0 -1
  284. package/dist/cjs/tests/integration/v3.dynamic.config.d.ts +0 -4
  285. package/dist/cjs/tests/integration/v3.dynamic.config.js +0 -48
  286. package/dist/cjs/tests/integration/v3.dynamic.config.js.map +0 -1
  287. package/dist/cjs/tests/integration/v3.playwright.config.d.ts +0 -2
  288. package/dist/cjs/tests/integration/v3.playwright.config.js +0 -48
  289. package/dist/cjs/tests/integration/v3.playwright.config.js.map +0 -1
  290. package/dist/cjs/tests/integration/wait-for-selector.spec.d.ts +0 -1
  291. package/dist/cjs/tests/integration/wait-for-selector.spec.js +0 -683
  292. package/dist/cjs/tests/integration/wait-for-selector.spec.js.map +0 -1
  293. package/dist/cjs/tests/integration/wait-for-timeout.spec.d.ts +0 -1
  294. package/dist/cjs/tests/integration/wait-for-timeout.spec.js +0 -118
  295. package/dist/cjs/tests/integration/wait-for-timeout.spec.js.map +0 -1
  296. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.d.ts +0 -1
  297. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js +0 -87
  298. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js.map +0 -1
  299. package/dist/cjs/tests/unit/agent-captcha-hooks.test.d.ts +0 -1
  300. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +0 -341
  301. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +0 -1
  302. package/dist/cjs/tests/unit/agent-execution-model.test.d.ts +0 -1
  303. package/dist/cjs/tests/unit/agent-execution-model.test.js +0 -150
  304. package/dist/cjs/tests/unit/agent-execution-model.test.js.map +0 -1
  305. package/dist/cjs/tests/unit/agent-metrics.test.d.ts +0 -1
  306. package/dist/cjs/tests/unit/agent-metrics.test.js +0 -112
  307. package/dist/cjs/tests/unit/agent-metrics.test.js.map +0 -1
  308. package/dist/cjs/tests/unit/agent-mode-routing.test.d.ts +0 -1
  309. package/dist/cjs/tests/unit/agent-mode-routing.test.js +0 -88
  310. package/dist/cjs/tests/unit/agent-mode-routing.test.js.map +0 -1
  311. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.d.ts +0 -1
  312. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js +0 -23
  313. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js.map +0 -1
  314. package/dist/cjs/tests/unit/agent-temperature.test.d.ts +0 -1
  315. package/dist/cjs/tests/unit/agent-temperature.test.js +0 -191
  316. package/dist/cjs/tests/unit/agent-temperature.test.js.map +0 -1
  317. package/dist/cjs/tests/unit/agent-variables-validation.test.d.ts +0 -1
  318. package/dist/cjs/tests/unit/agent-variables-validation.test.js +0 -43
  319. package/dist/cjs/tests/unit/agent-variables-validation.test.js.map +0 -1
  320. package/dist/cjs/tests/unit/aisdk-clients.test.d.ts +0 -1
  321. package/dist/cjs/tests/unit/aisdk-clients.test.js +0 -86
  322. package/dist/cjs/tests/unit/aisdk-clients.test.js.map +0 -1
  323. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +0 -1
  324. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js +0 -250
  325. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +0 -1
  326. package/dist/cjs/tests/unit/api-client-observe-variables.test.d.ts +0 -1
  327. package/dist/cjs/tests/unit/api-client-observe-variables.test.js +0 -133
  328. package/dist/cjs/tests/unit/api-client-observe-variables.test.js.map +0 -1
  329. package/dist/cjs/tests/unit/api-multiregion.test.d.ts +0 -1
  330. package/dist/cjs/tests/unit/api-multiregion.test.js +0 -58
  331. package/dist/cjs/tests/unit/api-multiregion.test.js.map +0 -1
  332. package/dist/cjs/tests/unit/api-optional-model-api-key.test.d.ts +0 -1
  333. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js +0 -155
  334. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js.map +0 -1
  335. package/dist/cjs/tests/unit/api-variables-schema.test.d.ts +0 -1
  336. package/dist/cjs/tests/unit/api-variables-schema.test.js +0 -62
  337. package/dist/cjs/tests/unit/api-variables-schema.test.js.map +0 -1
  338. package/dist/cjs/tests/unit/browserbase-session-accessors.test.d.ts +0 -1
  339. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +0 -142
  340. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +0 -1
  341. package/dist/cjs/tests/unit/cache-llm-resolution.test.d.ts +0 -1
  342. package/dist/cjs/tests/unit/cache-llm-resolution.test.js +0 -186
  343. package/dist/cjs/tests/unit/cache-llm-resolution.test.js.map +0 -1
  344. package/dist/cjs/tests/unit/captcha-solver.test.d.ts +0 -1
  345. package/dist/cjs/tests/unit/captcha-solver.test.js +0 -154
  346. package/dist/cjs/tests/unit/captcha-solver.test.js.map +0 -1
  347. package/dist/cjs/tests/unit/cdp-connection-close.test.d.ts +0 -1
  348. package/dist/cjs/tests/unit/cdp-connection-close.test.js +0 -74
  349. package/dist/cjs/tests/unit/cdp-connection-close.test.js.map +0 -1
  350. package/dist/cjs/tests/unit/context-extra-http-headers.test.d.ts +0 -1
  351. package/dist/cjs/tests/unit/context-extra-http-headers.test.js +0 -58
  352. package/dist/cjs/tests/unit/context-extra-http-headers.test.js.map +0 -1
  353. package/dist/cjs/tests/unit/cookies.test.d.ts +0 -1
  354. package/dist/cjs/tests/unit/cookies.test.js +0 -944
  355. package/dist/cjs/tests/unit/cookies.test.js.map +0 -1
  356. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.d.ts +0 -1
  357. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js +0 -95
  358. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js.map +0 -1
  359. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.d.ts +0 -1
  360. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js +0 -43
  361. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js.map +0 -1
  362. package/dist/cjs/tests/unit/flowlogger-eventstore.test.d.ts +0 -1
  363. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js +0 -250
  364. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +0 -1
  365. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.d.ts +0 -1
  366. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js +0 -60
  367. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js.map +0 -1
  368. package/dist/cjs/tests/unit/helpers/mockCDPSession.d.ts +0 -19
  369. package/dist/cjs/tests/unit/helpers/mockCDPSession.js +0 -29
  370. package/dist/cjs/tests/unit/helpers/mockCDPSession.js.map +0 -1
  371. package/dist/cjs/tests/unit/inference-temperature.test.d.ts +0 -1
  372. package/dist/cjs/tests/unit/inference-temperature.test.js +0 -65
  373. package/dist/cjs/tests/unit/inference-temperature.test.js.map +0 -1
  374. package/dist/cjs/tests/unit/llm-middleware.test.d.ts +0 -1
  375. package/dist/cjs/tests/unit/llm-middleware.test.js +0 -495
  376. package/dist/cjs/tests/unit/llm-middleware.test.js.map +0 -1
  377. package/dist/cjs/tests/unit/llm-provider.test.d.ts +0 -1
  378. package/dist/cjs/tests/unit/llm-provider.test.js +0 -64
  379. package/dist/cjs/tests/unit/llm-provider.test.js.map +0 -1
  380. package/dist/cjs/tests/unit/microsoft-cua-client.test.d.ts +0 -1
  381. package/dist/cjs/tests/unit/microsoft-cua-client.test.js +0 -86
  382. package/dist/cjs/tests/unit/microsoft-cua-client.test.js.map +0 -1
  383. package/dist/cjs/tests/unit/model-deprecation.test.d.ts +0 -1
  384. package/dist/cjs/tests/unit/model-deprecation.test.js +0 -142
  385. package/dist/cjs/tests/unit/model-deprecation.test.js.map +0 -1
  386. package/dist/cjs/tests/unit/model-utils.test.d.ts +0 -1
  387. package/dist/cjs/tests/unit/model-utils.test.js +0 -42
  388. package/dist/cjs/tests/unit/model-utils.test.js.map +0 -1
  389. package/dist/cjs/tests/unit/openai-compatible-temperature.test.d.ts +0 -1
  390. package/dist/cjs/tests/unit/openai-compatible-temperature.test.js +0 -84
  391. package/dist/cjs/tests/unit/openai-compatible-temperature.test.js.map +0 -1
  392. package/dist/cjs/tests/unit/openai-cua-client.test.d.ts +0 -1
  393. package/dist/cjs/tests/unit/openai-cua-client.test.js +0 -71
  394. package/dist/cjs/tests/unit/openai-cua-client.test.js.map +0 -1
  395. package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +0 -1
  396. package/dist/cjs/tests/unit/page-extra-http-headers.test.js +0 -92
  397. package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +0 -1
  398. package/dist/cjs/tests/unit/page-snapshot.test.d.ts +0 -1
  399. package/dist/cjs/tests/unit/page-snapshot.test.js +0 -75
  400. package/dist/cjs/tests/unit/page-snapshot.test.js.map +0 -1
  401. package/dist/cjs/tests/unit/prompt-observe-variables.test.d.ts +0 -1
  402. package/dist/cjs/tests/unit/prompt-observe-variables.test.js +0 -25
  403. package/dist/cjs/tests/unit/prompt-observe-variables.test.js.map +0 -1
  404. package/dist/cjs/tests/unit/public-api/export-surface.test.d.ts +0 -1
  405. package/dist/cjs/tests/unit/public-api/export-surface.test.js +0 -107
  406. package/dist/cjs/tests/unit/public-api/export-surface.test.js.map +0 -1
  407. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.d.ts +0 -1
  408. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +0 -179
  409. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +0 -1
  410. package/dist/cjs/tests/unit/public-api/public-error-types.test.d.ts +0 -62
  411. package/dist/cjs/tests/unit/public-api/public-error-types.test.js +0 -110
  412. package/dist/cjs/tests/unit/public-api/public-error-types.test.js.map +0 -1
  413. package/dist/cjs/tests/unit/public-api/public-types.test.d.ts +0 -1
  414. package/dist/cjs/tests/unit/public-api/public-types.test.js +0 -99
  415. package/dist/cjs/tests/unit/public-api/public-types.test.js.map +0 -1
  416. package/dist/cjs/tests/unit/public-api/runtime-utils.test.d.ts +0 -1
  417. package/dist/cjs/tests/unit/public-api/runtime-utils.test.js +0 -60
  418. package/dist/cjs/tests/unit/public-api/runtime-utils.test.js.map +0 -1
  419. package/dist/cjs/tests/unit/public-api/schema-utils.test.d.ts +0 -1
  420. package/dist/cjs/tests/unit/public-api/schema-utils.test.js +0 -95
  421. package/dist/cjs/tests/unit/public-api/schema-utils.test.js.map +0 -1
  422. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.d.ts +0 -1
  423. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js +0 -121
  424. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js.map +0 -1
  425. package/dist/cjs/tests/unit/public-api/tool-type-export.test.d.ts +0 -1
  426. package/dist/cjs/tests/unit/public-api/tool-type-export.test.js +0 -65
  427. package/dist/cjs/tests/unit/public-api/tool-type-export.test.js.map +0 -1
  428. package/dist/cjs/tests/unit/public-api/v3-core.test.d.ts +0 -1
  429. package/dist/cjs/tests/unit/public-api/v3-core.test.js +0 -108
  430. package/dist/cjs/tests/unit/public-api/v3-core.test.js.map +0 -1
  431. package/dist/cjs/tests/unit/safety-confirmation.test.d.ts +0 -1
  432. package/dist/cjs/tests/unit/safety-confirmation.test.js +0 -110
  433. package/dist/cjs/tests/unit/safety-confirmation.test.js.map +0 -1
  434. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.d.ts +0 -1
  435. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js +0 -431
  436. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js.map +0 -1
  437. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.d.ts +0 -1
  438. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js +0 -306
  439. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js.map +0 -1
  440. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.d.ts +0 -1
  441. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js +0 -504
  442. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js.map +0 -1
  443. package/dist/cjs/tests/unit/snapshot-cbor.test.d.ts +0 -1
  444. package/dist/cjs/tests/unit/snapshot-cbor.test.js +0 -204
  445. package/dist/cjs/tests/unit/snapshot-cbor.test.js.map +0 -1
  446. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.d.ts +0 -1
  447. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js +0 -220
  448. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js.map +0 -1
  449. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.d.ts +0 -1
  450. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js +0 -107
  451. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js.map +0 -1
  452. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.d.ts +0 -1
  453. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js +0 -89
  454. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js.map +0 -1
  455. package/dist/cjs/tests/unit/snapshot-frame-merge.test.d.ts +0 -1
  456. package/dist/cjs/tests/unit/snapshot-frame-merge.test.js +0 -335
  457. package/dist/cjs/tests/unit/snapshot-frame-merge.test.js.map +0 -1
  458. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.d.ts +0 -1
  459. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js +0 -84
  460. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js.map +0 -1
  461. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.d.ts +0 -1
  462. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js +0 -74
  463. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js.map +0 -1
  464. package/dist/cjs/tests/unit/timeout-handlers.test.d.ts +0 -1
  465. package/dist/cjs/tests/unit/timeout-handlers.test.js +0 -897
  466. package/dist/cjs/tests/unit/timeout-handlers.test.js.map +0 -1
  467. package/dist/cjs/tests/unit/understudy-command-exception.test.d.ts +0 -1
  468. package/dist/cjs/tests/unit/understudy-command-exception.test.js +0 -57
  469. package/dist/cjs/tests/unit/understudy-command-exception.test.js.map +0 -1
  470. package/dist/cjs/tests/unit/xpath-parser.test.d.ts +0 -1
  471. package/dist/cjs/tests/unit/xpath-parser.test.js +0 -311
  472. package/dist/cjs/tests/unit/xpath-parser.test.js.map +0 -1
  473. package/dist/cjs/tests/unit/xpath-resolver.test.d.ts +0 -1
  474. package/dist/cjs/tests/unit/xpath-resolver.test.js +0 -80
  475. package/dist/cjs/tests/unit/xpath-resolver.test.js.map +0 -1
  476. package/dist/cjs/tests/unit/zod-enum-compatibility.test.d.ts +0 -1
  477. package/dist/cjs/tests/unit/zod-enum-compatibility.test.js +0 -149
  478. package/dist/cjs/tests/unit/zod-enum-compatibility.test.js.map +0 -1
  479. package/dist/esm/tests/cache-variables.test.d.ts +0 -1
  480. package/dist/esm/tests/cache-variables.test.js +0 -219
  481. package/dist/esm/tests/cache-variables.test.js.map +0 -1
  482. package/dist/esm/tests/integration/agent-abort-signal.spec.d.ts +0 -1
  483. package/dist/esm/tests/integration/agent-abort-signal.spec.js +0 -121
  484. package/dist/esm/tests/integration/agent-abort-signal.spec.js.map +0 -1
  485. package/dist/esm/tests/integration/agent-cache-self-heal.spec.d.ts +0 -1
  486. package/dist/esm/tests/integration/agent-cache-self-heal.spec.js +0 -78
  487. package/dist/esm/tests/integration/agent-cache-self-heal.spec.js.map +0 -1
  488. package/dist/esm/tests/integration/agent-callbacks.spec.d.ts +0 -1
  489. package/dist/esm/tests/integration/agent-callbacks.spec.js +0 -383
  490. package/dist/esm/tests/integration/agent-callbacks.spec.js.map +0 -1
  491. package/dist/esm/tests/integration/agent-experimental-validation.spec.d.ts +0 -1
  492. package/dist/esm/tests/integration/agent-experimental-validation.spec.js +0 -360
  493. package/dist/esm/tests/integration/agent-experimental-validation.spec.js.map +0 -1
  494. package/dist/esm/tests/integration/agent-hybrid-mode.spec.d.ts +0 -1
  495. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +0 -260
  496. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +0 -1
  497. package/dist/esm/tests/integration/agent-message-continuation.spec.d.ts +0 -1
  498. package/dist/esm/tests/integration/agent-message-continuation.spec.js +0 -110
  499. package/dist/esm/tests/integration/agent-message-continuation.spec.js.map +0 -1
  500. package/dist/esm/tests/integration/agent-streaming.spec.d.ts +0 -1
  501. package/dist/esm/tests/integration/agent-streaming.spec.js +0 -138
  502. package/dist/esm/tests/integration/agent-streaming.spec.js.map +0 -1
  503. package/dist/esm/tests/integration/cdp-close-api-region.spec.d.ts +0 -1
  504. package/dist/esm/tests/integration/cdp-close-api-region.spec.js +0 -39
  505. package/dist/esm/tests/integration/cdp-close-api-region.spec.js.map +0 -1
  506. package/dist/esm/tests/integration/cdp-connection-close.spec.d.ts +0 -1
  507. package/dist/esm/tests/integration/cdp-connection-close.spec.js +0 -74
  508. package/dist/esm/tests/integration/cdp-connection-close.spec.js.map +0 -1
  509. package/dist/esm/tests/integration/cdp-session-detached.spec.d.ts +0 -1
  510. package/dist/esm/tests/integration/cdp-session-detached.spec.js +0 -43
  511. package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +0 -1
  512. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.d.ts +0 -1
  513. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js +0 -54
  514. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js.map +0 -1
  515. package/dist/esm/tests/integration/click-count.spec.d.ts +0 -1
  516. package/dist/esm/tests/integration/click-count.spec.js +0 -161
  517. package/dist/esm/tests/integration/click-count.spec.js.map +0 -1
  518. package/dist/esm/tests/integration/connect-to-existing-browser.spec.d.ts +0 -1
  519. package/dist/esm/tests/integration/connect-to-existing-browser.spec.js +0 -97
  520. package/dist/esm/tests/integration/connect-to-existing-browser.spec.js.map +0 -1
  521. package/dist/esm/tests/integration/context-addInitScript.spec.d.ts +0 -1
  522. package/dist/esm/tests/integration/context-addInitScript.spec.js +0 -283
  523. package/dist/esm/tests/integration/context-addInitScript.spec.js.map +0 -1
  524. package/dist/esm/tests/integration/context-extra-http-headers.spec.d.ts +0 -1
  525. package/dist/esm/tests/integration/context-extra-http-headers.spec.js +0 -47
  526. package/dist/esm/tests/integration/context-extra-http-headers.spec.js.map +0 -1
  527. package/dist/esm/tests/integration/cookies.spec.d.ts +0 -1
  528. package/dist/esm/tests/integration/cookies.spec.js +0 -185
  529. package/dist/esm/tests/integration/cookies.spec.js.map +0 -1
  530. package/dist/esm/tests/integration/default-page-tracking.spec.d.ts +0 -1
  531. package/dist/esm/tests/integration/default-page-tracking.spec.js +0 -50
  532. package/dist/esm/tests/integration/default-page-tracking.spec.js.map +0 -1
  533. package/dist/esm/tests/integration/downloads.spec.d.ts +0 -1
  534. package/dist/esm/tests/integration/downloads.spec.js +0 -47
  535. package/dist/esm/tests/integration/downloads.spec.js.map +0 -1
  536. package/dist/esm/tests/integration/flowLogger.spec.d.ts +0 -1
  537. package/dist/esm/tests/integration/flowLogger.spec.js +0 -716
  538. package/dist/esm/tests/integration/flowLogger.spec.js.map +0 -1
  539. package/dist/esm/tests/integration/frame-get-location-and-click.spec.d.ts +0 -1
  540. package/dist/esm/tests/integration/frame-get-location-and-click.spec.js +0 -55
  541. package/dist/esm/tests/integration/frame-get-location-and-click.spec.js.map +0 -1
  542. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +0 -1
  543. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +0 -217
  544. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +0 -1
  545. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.d.ts +0 -1
  546. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js +0 -472
  547. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js.map +0 -1
  548. package/dist/esm/tests/integration/keep-alive.child.d.ts +0 -1
  549. package/dist/esm/tests/integration/keep-alive.child.js +0 -83
  550. package/dist/esm/tests/integration/keep-alive.child.js.map +0 -1
  551. package/dist/esm/tests/integration/keep-alive.spec.d.ts +0 -22
  552. package/dist/esm/tests/integration/keep-alive.spec.js +0 -482
  553. package/dist/esm/tests/integration/keep-alive.spec.js.map +0 -1
  554. package/dist/esm/tests/integration/keyboard.spec.d.ts +0 -1
  555. package/dist/esm/tests/integration/keyboard.spec.js +0 -257
  556. package/dist/esm/tests/integration/keyboard.spec.js.map +0 -1
  557. package/dist/esm/tests/integration/locator-backend-node-id.spec.d.ts +0 -1
  558. package/dist/esm/tests/integration/locator-backend-node-id.spec.js +0 -148
  559. package/dist/esm/tests/integration/locator-backend-node-id.spec.js.map +0 -1
  560. package/dist/esm/tests/integration/locator-content-methods.spec.d.ts +0 -1
  561. package/dist/esm/tests/integration/locator-content-methods.spec.js +0 -178
  562. package/dist/esm/tests/integration/locator-content-methods.spec.js.map +0 -1
  563. package/dist/esm/tests/integration/locator-count-iframe.spec.d.ts +0 -1
  564. package/dist/esm/tests/integration/locator-count-iframe.spec.js +0 -127
  565. package/dist/esm/tests/integration/locator-count-iframe.spec.js.map +0 -1
  566. package/dist/esm/tests/integration/locator-count.spec.d.ts +0 -1
  567. package/dist/esm/tests/integration/locator-count.spec.js +0 -66
  568. package/dist/esm/tests/integration/locator-count.spec.js.map +0 -1
  569. package/dist/esm/tests/integration/locator-fill.spec.d.ts +0 -1
  570. package/dist/esm/tests/integration/locator-fill.spec.js +0 -115
  571. package/dist/esm/tests/integration/locator-fill.spec.js.map +0 -1
  572. package/dist/esm/tests/integration/locator-input-methods.spec.d.ts +0 -1
  573. package/dist/esm/tests/integration/locator-input-methods.spec.js +0 -125
  574. package/dist/esm/tests/integration/locator-input-methods.spec.js.map +0 -1
  575. package/dist/esm/tests/integration/locator-nth.spec.d.ts +0 -1
  576. package/dist/esm/tests/integration/locator-nth.spec.js +0 -173
  577. package/dist/esm/tests/integration/locator-nth.spec.js.map +0 -1
  578. package/dist/esm/tests/integration/locator-select-option.spec.d.ts +0 -1
  579. package/dist/esm/tests/integration/locator-select-option.spec.js +0 -214
  580. package/dist/esm/tests/integration/locator-select-option.spec.js.map +0 -1
  581. package/dist/esm/tests/integration/logger-initialization.spec.d.ts +0 -1
  582. package/dist/esm/tests/integration/logger-initialization.spec.js +0 -595
  583. package/dist/esm/tests/integration/logger-initialization.spec.js.map +0 -1
  584. package/dist/esm/tests/integration/multi-instance-logger.spec.d.ts +0 -1
  585. package/dist/esm/tests/integration/multi-instance-logger.spec.js +0 -291
  586. package/dist/esm/tests/integration/multi-instance-logger.spec.js.map +0 -1
  587. package/dist/esm/tests/integration/nested-div.spec.d.ts +0 -1
  588. package/dist/esm/tests/integration/nested-div.spec.js +0 -20
  589. package/dist/esm/tests/integration/nested-div.spec.js.map +0 -1
  590. package/dist/esm/tests/integration/observe-element-id-format.spec.d.ts +0 -1
  591. package/dist/esm/tests/integration/observe-element-id-format.spec.js +0 -128
  592. package/dist/esm/tests/integration/observe-element-id-format.spec.js.map +0 -1
  593. package/dist/esm/tests/integration/page-addInitScript.spec.d.ts +0 -1
  594. package/dist/esm/tests/integration/page-addInitScript.spec.js +0 -92
  595. package/dist/esm/tests/integration/page-addInitScript.spec.js.map +0 -1
  596. package/dist/esm/tests/integration/page-console.spec.d.ts +0 -1
  597. package/dist/esm/tests/integration/page-console.spec.js +0 -45
  598. package/dist/esm/tests/integration/page-console.spec.js.map +0 -1
  599. package/dist/esm/tests/integration/page-drag-and-drop.spec.d.ts +0 -1
  600. package/dist/esm/tests/integration/page-drag-and-drop.spec.js +0 -435
  601. package/dist/esm/tests/integration/page-drag-and-drop.spec.js.map +0 -1
  602. package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +0 -1
  603. package/dist/esm/tests/integration/page-extra-http-headers.spec.js +0 -83
  604. package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +0 -1
  605. package/dist/esm/tests/integration/page-goto-response.spec.d.ts +0 -1
  606. package/dist/esm/tests/integration/page-goto-response.spec.js +0 -32
  607. package/dist/esm/tests/integration/page-goto-response.spec.js.map +0 -1
  608. package/dist/esm/tests/integration/page-hover.spec.d.ts +0 -1
  609. package/dist/esm/tests/integration/page-hover.spec.js +0 -163
  610. package/dist/esm/tests/integration/page-hover.spec.js.map +0 -1
  611. package/dist/esm/tests/integration/page-screenshot.spec.d.ts +0 -1
  612. package/dist/esm/tests/integration/page-screenshot.spec.js +0 -257
  613. package/dist/esm/tests/integration/page-screenshot.spec.js.map +0 -1
  614. package/dist/esm/tests/integration/page-scroll.spec.d.ts +0 -1
  615. package/dist/esm/tests/integration/page-scroll.spec.js +0 -181
  616. package/dist/esm/tests/integration/page-scroll.spec.js.map +0 -1
  617. package/dist/esm/tests/integration/page-send-cdp.spec.d.ts +0 -1
  618. package/dist/esm/tests/integration/page-send-cdp.spec.js +0 -45
  619. package/dist/esm/tests/integration/page-send-cdp.spec.js.map +0 -1
  620. package/dist/esm/tests/integration/perform-understudy-method.spec.d.ts +0 -1
  621. package/dist/esm/tests/integration/perform-understudy-method.spec.js +0 -61
  622. package/dist/esm/tests/integration/perform-understudy-method.spec.js.map +0 -1
  623. package/dist/esm/tests/integration/setinputfiles.spec.d.ts +0 -1
  624. package/dist/esm/tests/integration/setinputfiles.spec.js +0 -128
  625. package/dist/esm/tests/integration/setinputfiles.spec.js.map +0 -1
  626. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.d.ts +0 -1
  627. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js +0 -156
  628. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js.map +0 -1
  629. package/dist/esm/tests/integration/shadow-iframe-spif.spec.d.ts +0 -1
  630. package/dist/esm/tests/integration/shadow-iframe-spif.spec.js +0 -155
  631. package/dist/esm/tests/integration/shadow-iframe-spif.spec.js.map +0 -1
  632. package/dist/esm/tests/integration/testUtils.d.ts +0 -40
  633. package/dist/esm/tests/integration/testUtils.js +0 -178
  634. package/dist/esm/tests/integration/testUtils.js.map +0 -1
  635. package/dist/esm/tests/integration/text-selector-innermost.spec.d.ts +0 -1
  636. package/dist/esm/tests/integration/text-selector-innermost.spec.js +0 -103
  637. package/dist/esm/tests/integration/text-selector-innermost.spec.js.map +0 -1
  638. package/dist/esm/tests/integration/timeouts.spec.d.ts +0 -1
  639. package/dist/esm/tests/integration/timeouts.spec.js +0 -307
  640. package/dist/esm/tests/integration/timeouts.spec.js.map +0 -1
  641. package/dist/esm/tests/integration/user-data-dir.spec.d.ts +0 -1
  642. package/dist/esm/tests/integration/user-data-dir.spec.js +0 -42
  643. package/dist/esm/tests/integration/user-data-dir.spec.js.map +0 -1
  644. package/dist/esm/tests/integration/v3.config.d.ts +0 -4
  645. package/dist/esm/tests/integration/v3.config.js +0 -7
  646. package/dist/esm/tests/integration/v3.config.js.map +0 -1
  647. package/dist/esm/tests/integration/v3.dynamic.config.d.ts +0 -4
  648. package/dist/esm/tests/integration/v3.dynamic.config.js +0 -44
  649. package/dist/esm/tests/integration/v3.dynamic.config.js.map +0 -1
  650. package/dist/esm/tests/integration/v3.playwright.config.d.ts +0 -2
  651. package/dist/esm/tests/integration/v3.playwright.config.js +0 -46
  652. package/dist/esm/tests/integration/v3.playwright.config.js.map +0 -1
  653. package/dist/esm/tests/integration/wait-for-selector.spec.d.ts +0 -1
  654. package/dist/esm/tests/integration/wait-for-selector.spec.js +0 -681
  655. package/dist/esm/tests/integration/wait-for-selector.spec.js.map +0 -1
  656. package/dist/esm/tests/integration/wait-for-timeout.spec.d.ts +0 -1
  657. package/dist/esm/tests/integration/wait-for-timeout.spec.js +0 -116
  658. package/dist/esm/tests/integration/wait-for-timeout.spec.js.map +0 -1
  659. package/dist/esm/tests/integration/xpath-for-location-deep.spec.d.ts +0 -1
  660. package/dist/esm/tests/integration/xpath-for-location-deep.spec.js +0 -85
  661. package/dist/esm/tests/integration/xpath-for-location-deep.spec.js.map +0 -1
  662. package/dist/esm/tests/unit/agent-captcha-hooks.test.d.ts +0 -1
  663. package/dist/esm/tests/unit/agent-captcha-hooks.test.js +0 -339
  664. package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +0 -1
  665. package/dist/esm/tests/unit/agent-execution-model.test.d.ts +0 -1
  666. package/dist/esm/tests/unit/agent-execution-model.test.js +0 -148
  667. package/dist/esm/tests/unit/agent-execution-model.test.js.map +0 -1
  668. package/dist/esm/tests/unit/agent-metrics.test.d.ts +0 -1
  669. package/dist/esm/tests/unit/agent-metrics.test.js +0 -110
  670. package/dist/esm/tests/unit/agent-metrics.test.js.map +0 -1
  671. package/dist/esm/tests/unit/agent-mode-routing.test.d.ts +0 -1
  672. package/dist/esm/tests/unit/agent-mode-routing.test.js +0 -86
  673. package/dist/esm/tests/unit/agent-mode-routing.test.js.map +0 -1
  674. package/dist/esm/tests/unit/agent-system-prompt-variables.test.d.ts +0 -1
  675. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js +0 -21
  676. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js.map +0 -1
  677. package/dist/esm/tests/unit/agent-temperature.test.d.ts +0 -1
  678. package/dist/esm/tests/unit/agent-temperature.test.js +0 -189
  679. package/dist/esm/tests/unit/agent-temperature.test.js.map +0 -1
  680. package/dist/esm/tests/unit/agent-variables-validation.test.d.ts +0 -1
  681. package/dist/esm/tests/unit/agent-variables-validation.test.js +0 -41
  682. package/dist/esm/tests/unit/agent-variables-validation.test.js.map +0 -1
  683. package/dist/esm/tests/unit/aisdk-clients.test.d.ts +0 -1
  684. package/dist/esm/tests/unit/aisdk-clients.test.js +0 -84
  685. package/dist/esm/tests/unit/aisdk-clients.test.js.map +0 -1
  686. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +0 -1
  687. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js +0 -245
  688. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +0 -1
  689. package/dist/esm/tests/unit/api-client-observe-variables.test.d.ts +0 -1
  690. package/dist/esm/tests/unit/api-client-observe-variables.test.js +0 -131
  691. package/dist/esm/tests/unit/api-client-observe-variables.test.js.map +0 -1
  692. package/dist/esm/tests/unit/api-multiregion.test.d.ts +0 -1
  693. package/dist/esm/tests/unit/api-multiregion.test.js +0 -56
  694. package/dist/esm/tests/unit/api-multiregion.test.js.map +0 -1
  695. package/dist/esm/tests/unit/api-optional-model-api-key.test.d.ts +0 -1
  696. package/dist/esm/tests/unit/api-optional-model-api-key.test.js +0 -153
  697. package/dist/esm/tests/unit/api-optional-model-api-key.test.js.map +0 -1
  698. package/dist/esm/tests/unit/api-variables-schema.test.d.ts +0 -1
  699. package/dist/esm/tests/unit/api-variables-schema.test.js +0 -60
  700. package/dist/esm/tests/unit/api-variables-schema.test.js.map +0 -1
  701. package/dist/esm/tests/unit/browserbase-session-accessors.test.d.ts +0 -1
  702. package/dist/esm/tests/unit/browserbase-session-accessors.test.js +0 -140
  703. package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +0 -1
  704. package/dist/esm/tests/unit/cache-llm-resolution.test.d.ts +0 -1
  705. package/dist/esm/tests/unit/cache-llm-resolution.test.js +0 -184
  706. package/dist/esm/tests/unit/cache-llm-resolution.test.js.map +0 -1
  707. package/dist/esm/tests/unit/captcha-solver.test.d.ts +0 -1
  708. package/dist/esm/tests/unit/captcha-solver.test.js +0 -152
  709. package/dist/esm/tests/unit/captcha-solver.test.js.map +0 -1
  710. package/dist/esm/tests/unit/cdp-connection-close.test.d.ts +0 -1
  711. package/dist/esm/tests/unit/cdp-connection-close.test.js +0 -72
  712. package/dist/esm/tests/unit/cdp-connection-close.test.js.map +0 -1
  713. package/dist/esm/tests/unit/context-extra-http-headers.test.d.ts +0 -1
  714. package/dist/esm/tests/unit/context-extra-http-headers.test.js +0 -56
  715. package/dist/esm/tests/unit/context-extra-http-headers.test.js.map +0 -1
  716. package/dist/esm/tests/unit/cookies.test.d.ts +0 -1
  717. package/dist/esm/tests/unit/cookies.test.js +0 -909
  718. package/dist/esm/tests/unit/cookies.test.js.map +0 -1
  719. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.d.ts +0 -1
  720. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js +0 -93
  721. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js.map +0 -1
  722. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.d.ts +0 -1
  723. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js +0 -41
  724. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js.map +0 -1
  725. package/dist/esm/tests/unit/flowlogger-eventstore.test.d.ts +0 -1
  726. package/dist/esm/tests/unit/flowlogger-eventstore.test.js +0 -248
  727. package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +0 -1
  728. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.d.ts +0 -1
  729. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js +0 -58
  730. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js.map +0 -1
  731. package/dist/esm/tests/unit/helpers/mockCDPSession.d.ts +0 -19
  732. package/dist/esm/tests/unit/helpers/mockCDPSession.js +0 -25
  733. package/dist/esm/tests/unit/helpers/mockCDPSession.js.map +0 -1
  734. package/dist/esm/tests/unit/inference-temperature.test.d.ts +0 -1
  735. package/dist/esm/tests/unit/inference-temperature.test.js +0 -63
  736. package/dist/esm/tests/unit/inference-temperature.test.js.map +0 -1
  737. package/dist/esm/tests/unit/llm-middleware.test.d.ts +0 -1
  738. package/dist/esm/tests/unit/llm-middleware.test.js +0 -460
  739. package/dist/esm/tests/unit/llm-middleware.test.js.map +0 -1
  740. package/dist/esm/tests/unit/llm-provider.test.d.ts +0 -1
  741. package/dist/esm/tests/unit/llm-provider.test.js +0 -62
  742. package/dist/esm/tests/unit/llm-provider.test.js.map +0 -1
  743. package/dist/esm/tests/unit/microsoft-cua-client.test.d.ts +0 -1
  744. package/dist/esm/tests/unit/microsoft-cua-client.test.js +0 -84
  745. package/dist/esm/tests/unit/microsoft-cua-client.test.js.map +0 -1
  746. package/dist/esm/tests/unit/model-deprecation.test.d.ts +0 -1
  747. package/dist/esm/tests/unit/model-deprecation.test.js +0 -140
  748. package/dist/esm/tests/unit/model-deprecation.test.js.map +0 -1
  749. package/dist/esm/tests/unit/model-utils.test.d.ts +0 -1
  750. package/dist/esm/tests/unit/model-utils.test.js +0 -40
  751. package/dist/esm/tests/unit/model-utils.test.js.map +0 -1
  752. package/dist/esm/tests/unit/openai-compatible-temperature.test.d.ts +0 -1
  753. package/dist/esm/tests/unit/openai-compatible-temperature.test.js +0 -82
  754. package/dist/esm/tests/unit/openai-compatible-temperature.test.js.map +0 -1
  755. package/dist/esm/tests/unit/openai-cua-client.test.d.ts +0 -1
  756. package/dist/esm/tests/unit/openai-cua-client.test.js +0 -69
  757. package/dist/esm/tests/unit/openai-cua-client.test.js.map +0 -1
  758. package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +0 -1
  759. package/dist/esm/tests/unit/page-extra-http-headers.test.js +0 -90
  760. package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +0 -1
  761. package/dist/esm/tests/unit/page-snapshot.test.d.ts +0 -1
  762. package/dist/esm/tests/unit/page-snapshot.test.js +0 -40
  763. package/dist/esm/tests/unit/page-snapshot.test.js.map +0 -1
  764. package/dist/esm/tests/unit/prompt-observe-variables.test.d.ts +0 -1
  765. package/dist/esm/tests/unit/prompt-observe-variables.test.js +0 -23
  766. package/dist/esm/tests/unit/prompt-observe-variables.test.js.map +0 -1
  767. package/dist/esm/tests/unit/public-api/export-surface.test.d.ts +0 -1
  768. package/dist/esm/tests/unit/public-api/export-surface.test.js +0 -72
  769. package/dist/esm/tests/unit/public-api/export-surface.test.js.map +0 -1
  770. package/dist/esm/tests/unit/public-api/llm-and-agents.test.d.ts +0 -1
  771. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +0 -144
  772. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +0 -1
  773. package/dist/esm/tests/unit/public-api/public-error-types.test.d.ts +0 -62
  774. package/dist/esm/tests/unit/public-api/public-error-types.test.js +0 -74
  775. package/dist/esm/tests/unit/public-api/public-error-types.test.js.map +0 -1
  776. package/dist/esm/tests/unit/public-api/public-types.test.d.ts +0 -1
  777. package/dist/esm/tests/unit/public-api/public-types.test.js +0 -97
  778. package/dist/esm/tests/unit/public-api/public-types.test.js.map +0 -1
  779. package/dist/esm/tests/unit/public-api/runtime-utils.test.d.ts +0 -1
  780. package/dist/esm/tests/unit/public-api/runtime-utils.test.js +0 -25
  781. package/dist/esm/tests/unit/public-api/runtime-utils.test.js.map +0 -1
  782. package/dist/esm/tests/unit/public-api/schema-utils.test.d.ts +0 -1
  783. package/dist/esm/tests/unit/public-api/schema-utils.test.js +0 -60
  784. package/dist/esm/tests/unit/public-api/schema-utils.test.js.map +0 -1
  785. package/dist/esm/tests/unit/public-api/timeout-error-types.test.d.ts +0 -1
  786. package/dist/esm/tests/unit/public-api/timeout-error-types.test.js +0 -86
  787. package/dist/esm/tests/unit/public-api/timeout-error-types.test.js.map +0 -1
  788. package/dist/esm/tests/unit/public-api/tool-type-export.test.d.ts +0 -1
  789. package/dist/esm/tests/unit/public-api/tool-type-export.test.js +0 -30
  790. package/dist/esm/tests/unit/public-api/tool-type-export.test.js.map +0 -1
  791. package/dist/esm/tests/unit/public-api/v3-core.test.d.ts +0 -1
  792. package/dist/esm/tests/unit/public-api/v3-core.test.js +0 -73
  793. package/dist/esm/tests/unit/public-api/v3-core.test.js.map +0 -1
  794. package/dist/esm/tests/unit/safety-confirmation.test.d.ts +0 -1
  795. package/dist/esm/tests/unit/safety-confirmation.test.js +0 -108
  796. package/dist/esm/tests/unit/safety-confirmation.test.js.map +0 -1
  797. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.d.ts +0 -1
  798. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js +0 -396
  799. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js.map +0 -1
  800. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.d.ts +0 -1
  801. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js +0 -304
  802. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js.map +0 -1
  803. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.d.ts +0 -1
  804. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js +0 -469
  805. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js.map +0 -1
  806. package/dist/esm/tests/unit/snapshot-cbor.test.d.ts +0 -1
  807. package/dist/esm/tests/unit/snapshot-cbor.test.js +0 -202
  808. package/dist/esm/tests/unit/snapshot-cbor.test.js.map +0 -1
  809. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.d.ts +0 -1
  810. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js +0 -218
  811. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js.map +0 -1
  812. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.d.ts +0 -1
  813. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js +0 -105
  814. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js.map +0 -1
  815. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.d.ts +0 -1
  816. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js +0 -87
  817. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js.map +0 -1
  818. package/dist/esm/tests/unit/snapshot-frame-merge.test.d.ts +0 -1
  819. package/dist/esm/tests/unit/snapshot-frame-merge.test.js +0 -333
  820. package/dist/esm/tests/unit/snapshot-frame-merge.test.js.map +0 -1
  821. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.d.ts +0 -1
  822. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js +0 -82
  823. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js.map +0 -1
  824. package/dist/esm/tests/unit/snapshot-xpath-utils.test.d.ts +0 -1
  825. package/dist/esm/tests/unit/snapshot-xpath-utils.test.js +0 -72
  826. package/dist/esm/tests/unit/snapshot-xpath-utils.test.js.map +0 -1
  827. package/dist/esm/tests/unit/timeout-handlers.test.d.ts +0 -1
  828. package/dist/esm/tests/unit/timeout-handlers.test.js +0 -862
  829. package/dist/esm/tests/unit/timeout-handlers.test.js.map +0 -1
  830. package/dist/esm/tests/unit/understudy-command-exception.test.d.ts +0 -1
  831. package/dist/esm/tests/unit/understudy-command-exception.test.js +0 -55
  832. package/dist/esm/tests/unit/understudy-command-exception.test.js.map +0 -1
  833. package/dist/esm/tests/unit/xpath-parser.test.d.ts +0 -1
  834. package/dist/esm/tests/unit/xpath-parser.test.js +0 -309
  835. package/dist/esm/tests/unit/xpath-parser.test.js.map +0 -1
  836. package/dist/esm/tests/unit/xpath-resolver.test.d.ts +0 -1
  837. package/dist/esm/tests/unit/xpath-resolver.test.js +0 -78
  838. package/dist/esm/tests/unit/xpath-resolver.test.js.map +0 -1
  839. package/dist/esm/tests/unit/zod-enum-compatibility.test.d.ts +0 -1
  840. package/dist/esm/tests/unit/zod-enum-compatibility.test.js +0 -114
  841. package/dist/esm/tests/unit/zod-enum-compatibility.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../lib/v3/api.ts"],"names":[],"mappings":"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","sourcesContent":["import makeFetchCookie from \"fetch-cookie\";\nimport { loadApiKeyFromEnv } from \"../utils.js\";\nimport { STAGEHAND_VERSION } from \"../version.js\";\nimport {\n StagehandAPIError,\n StagehandAPIUnauthorizedError,\n StagehandHttpError,\n StagehandResponseBodyError,\n StagehandResponseParseError,\n StagehandServerError,\n ExperimentalNotConfiguredError,\n} from \"./types/public/index.js\";\nimport type {\n ActResult,\n AgentConfig,\n AgentExecuteOptions,\n AgentResult,\n ExtractResult,\n ObserveResult,\n LogLine,\n StagehandMetrics,\n BrowserbaseRegion,\n ActOptions,\n ExtractOptions,\n ObserveOptions,\n Api,\n} from \"./types/public/index.js\";\nimport type {\n SerializableResponse,\n AgentCacheTransferPayload,\n} from \"./types/private/index.js\";\nimport type { ModelConfiguration } from \"./types/public/model.js\";\nimport { toJsonSchema } from \"./zodCompat.js\";\nimport type { StagehandZodSchema } from \"./zodCompat.js\";\n\n// =============================================================================\n// Multi-region API URL mapping\n// =============================================================================\n\n/**\n * Mapping of Browserbase regions to their corresponding Stagehand API base URLs.\n * Users should configure their client to hit the API endpoint that matches\n * the region where their browser session is running.\n */\nexport const REGION_API_URLS: Record<BrowserbaseRegion, string> = {\n \"us-west-2\": \"https://api.stagehand.browserbase.com\",\n \"us-east-1\": \"https://api.use1.stagehand.browserbase.com\",\n \"eu-central-1\": \"https://api.euc1.stagehand.browserbase.com\",\n \"ap-southeast-1\": \"https://api.apse1.stagehand.browserbase.com\",\n};\n\n/**\n * Returns the full API URL (with /v1 suffix) for a given Browserbase region.\n * If no region is specified or the region is unknown, defaults to us-west-2.\n *\n * @param region - The Browserbase region (e.g., \"us-west-2\", \"eu-central-1\")\n * @returns The full API URL including /v1 suffix\n */\nexport function getApiUrlForRegion(\n region: BrowserbaseRegion | undefined,\n): string {\n const baseUrl =\n REGION_API_URLS[region as BrowserbaseRegion] ??\n REGION_API_URLS[\"us-west-2\"];\n return `${baseUrl}/v1`;\n}\n\n// =============================================================================\n// Client-specific types (can't be Zod schemas due to functions/Page objects)\n// =============================================================================\n//\n// These types mirror the Api.* schemas from types/public/api.ts but include\n// non-serializable SDK fields (like Page objects) that get stripped before\n// sending requests over the wire.\n//\n// Relationship to wire format:\n// - Client accepts: SDK types (ActOptions, ExtractOptions, etc.) with optional `page`\n// - Wire sends: Api.* types (page stripped, Zod schema converted to JSON schema)\n// - Client returns: SDK result types (ActResult, ExtractResult, etc.)\n// =============================================================================\n\n/**\n * Constructor parameters for StagehandAPIClient\n */\ninterface StagehandAPIConstructorParams {\n apiKey: string;\n projectId?: string;\n logger: (message: LogLine) => void;\n /**\n * When true, enables server-side caching by default for all requests.\n * When false, disables server-side caching.\n * Defaults to true (caching enabled).\n * Can be overridden per-method in act(), extract(), and observe() options.\n */\n serverCache?: boolean;\n}\n\n/**\n * Parameters for starting a session via the API client.\n * Extends Api.SessionStartRequest with client-specific field (modelApiKey).\n *\n * Wire format: Api.SessionStartRequest (modelApiKey sent via header, not body)\n */\ninterface ClientSessionStartParams extends Api.SessionStartRequest {\n /** Model API key - sent via x-model-api-key header, not in request body.\n * Optional: when omitted, requests are sent without the x-model-api-key header\n * and the server is expected to handle model authentication on its own. */\n modelApiKey?: string;\n}\n\n/**\n * Generic API response wrapper matching Api.*Response schemas\n */\ntype ApiResponse<T> =\n | { success: true; data: T }\n | { success: false; message: string };\n\n/**\n * Union of all API request body types for type-safe execute() calls\n */\ntype ApiRequestBody =\n | Api.ActRequest\n | Api.ExtractRequest\n | Api.ObserveRequest\n | Api.NavigateRequest\n | Api.AgentExecuteRequest;\n\n/**\n * Parameters for executing an action via the streaming API\n */\ninterface ExecuteActionParams {\n method: \"act\" | \"extract\" | \"observe\" | \"navigate\" | \"end\" | \"agentExecute\";\n args?: ApiRequestBody;\n params?: Record<string, string>;\n /**\n * Override the instance-level serverCache setting for this request.\n * When true, enables server-side caching.\n * When false, disables server-side caching.\n */\n serverCache?: boolean;\n}\n\n/**\n * Client parameters for act() method.\n * Derives structure from Api.ActRequest but uses SDK's ActOptions (which includes `page`).\n * Before serialization, `page` is stripped to produce Api.ActRequest wire format.\n */\ninterface ClientActParameters {\n input: Api.ActRequest[\"input\"];\n options?: ActOptions;\n frameId?: Api.ActRequest[\"frameId\"];\n}\n\n/**\n * Client parameters for extract() method.\n * Derives structure from Api.ExtractRequest but uses SDK's ExtractOptions (which includes `page`)\n * and accepts Zod schema (converted to JSON schema for wire format).\n */\ninterface ClientExtractParameters {\n instruction?: Api.ExtractRequest[\"instruction\"];\n schema?: StagehandZodSchema;\n options?: ExtractOptions;\n frameId?: Api.ExtractRequest[\"frameId\"];\n}\n\n/**\n * Client parameters for observe() method.\n * Derives structure from Api.ObserveRequest but uses SDK's ObserveOptions (which includes `page`).\n * Before serialization, `page` is stripped to produce Api.ObserveRequest wire format.\n */\ninterface ClientObserveParameters {\n instruction?: Api.ObserveRequest[\"instruction\"];\n options?: ObserveOptions;\n frameId?: Api.ObserveRequest[\"frameId\"];\n}\n\nexport class StagehandAPIClient {\n private apiKey: string;\n private projectId?: string;\n private sessionId?: string;\n private modelApiKey?: string;\n private modelProvider?: string;\n private region?: BrowserbaseRegion;\n private logger: (message: LogLine) => void;\n private fetchWithCookies;\n private serverCache: boolean;\n private lastFinishedEventData: Record<string, unknown> | null = null;\n private latestAgentCacheEntry: AgentCacheTransferPayload | null = null;\n private warnedStagehandBaseUrl = false;\n\n constructor({\n apiKey,\n projectId,\n logger,\n serverCache,\n }: StagehandAPIConstructorParams) {\n this.apiKey = apiKey;\n this.projectId = projectId;\n this.logger = logger;\n this.serverCache = serverCache ?? true;\n // Create a single cookie jar instance that will persist across all requests\n this.fetchWithCookies = makeFetchCookie(fetch);\n }\n\n async init({\n modelName,\n modelApiKey,\n domSettleTimeoutMs,\n verbose,\n systemPrompt,\n selfHeal,\n browserbaseSessionCreateParams,\n browserbaseSessionID,\n // browser, TODO for local browsers\n }: ClientSessionStartParams): Promise<Api.SessionStartResult> {\n this.modelApiKey = modelApiKey;\n // Extract provider from modelName (e.g., \"openai/gpt-5-nano\" -> \"openai\")\n this.modelProvider = modelName?.includes(\"/\")\n ? modelName.split(\"/\")[0]\n : undefined;\n\n // Store the region for multi-region API URL resolution\n this.region = browserbaseSessionCreateParams?.region;\n\n this.logger({\n category: \"init\",\n message: \"Creating new browserbase session...\",\n level: 1,\n });\n\n // Build wire-format request body (Api.SessionStartRequest shape)\n const requestBody: Api.SessionStartRequest = {\n modelName,\n domSettleTimeoutMs,\n verbose,\n systemPrompt,\n selfHeal,\n browserbaseSessionCreateParams,\n browserbaseSessionID,\n // browser, TODO: only send when connected to local fastify\n };\n\n const sessionResponse = await this.request(\"/sessions/start\", {\n method: \"POST\",\n body: JSON.stringify(requestBody),\n });\n\n if (sessionResponse.status === 401) {\n throw new StagehandAPIUnauthorizedError(\n \"Unauthorized. Ensure you provided a valid API key.\",\n );\n } else if (sessionResponse.status !== 200) {\n const errorText = await sessionResponse.text();\n this.logger({\n category: \"api\",\n message: `API error (${sessionResponse.status}): ${errorText}`,\n level: 0,\n });\n throw new StagehandHttpError(`Unknown error: ${sessionResponse.status}`);\n }\n\n const sessionResponseBody =\n (await sessionResponse.json()) as ApiResponse<Api.SessionStartResult>;\n\n if (sessionResponseBody.success === false) {\n throw new StagehandAPIError(sessionResponseBody.message);\n }\n\n // Temporary reroute for rollout\n if (!sessionResponseBody.data?.available && browserbaseSessionID) {\n sessionResponseBody.data.sessionId = browserbaseSessionID;\n }\n\n this.sessionId = sessionResponseBody.data.sessionId;\n\n return sessionResponseBody.data;\n }\n\n async act({\n input,\n options,\n frameId,\n }: ClientActParameters): Promise<ActResult> {\n // Strip non-serializable `page` and SDK-only fields from options before wire serialization\n let wireOptions: Api.ActRequest[\"options\"];\n let serverCache: boolean | undefined;\n if (options) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { page: _, serverCache: enableCache, ...restOptions } = options;\n serverCache = enableCache;\n if (Object.keys(restOptions).length > 0) {\n if (restOptions.model) {\n restOptions.model = this.prepareModelConfig(restOptions.model);\n }\n wireOptions = restOptions as unknown as Api.ActRequest[\"options\"];\n }\n }\n\n // Build wire-format request body\n const requestBody: Api.ActRequest = {\n input,\n options: wireOptions,\n frameId,\n };\n\n return this.execute<ActResult>({\n method: \"act\",\n args: requestBody,\n serverCache,\n });\n }\n\n async extract<T extends StagehandZodSchema>({\n instruction,\n schema: zodSchema,\n options,\n frameId,\n }: ClientExtractParameters): Promise<ExtractResult<T>> {\n // Convert Zod schema to JSON schema for wire format\n const jsonSchema = zodSchema ? toJsonSchema(zodSchema) : undefined;\n\n // Strip non-serializable `page` and SDK-only fields from options before wire serialization\n let wireOptions: Api.ExtractRequest[\"options\"];\n let serverCache: boolean | undefined;\n if (options) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { page: _, serverCache: enableCache, ...restOptions } = options;\n serverCache = enableCache;\n if (Object.keys(restOptions).length > 0) {\n if (restOptions.model) {\n restOptions.model = this.prepareModelConfig(restOptions.model);\n }\n wireOptions = restOptions as unknown as Api.ExtractRequest[\"options\"];\n }\n }\n\n // Build wire-format request body\n const requestBody: Api.ExtractRequest = {\n instruction,\n schema: jsonSchema,\n options: wireOptions,\n frameId,\n };\n\n return this.execute<ExtractResult<T>>({\n method: \"extract\",\n args: requestBody,\n serverCache,\n });\n }\n\n async observe({\n instruction,\n options,\n frameId,\n }: ClientObserveParameters): Promise<ObserveResult> {\n // Strip non-serializable `page` and SDK-only fields from options before wire serialization\n let wireOptions: Api.ObserveRequest[\"options\"];\n let serverCache: boolean | undefined;\n if (options) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { page: _, serverCache: enableCache, ...restOptions } = options;\n serverCache = enableCache;\n if (Object.keys(restOptions).length > 0) {\n if (restOptions.model) {\n restOptions.model = this.prepareModelConfig(restOptions.model);\n }\n wireOptions = restOptions as unknown as Api.ObserveRequest[\"options\"];\n }\n }\n\n // Build wire-format request body\n const requestBody: Api.ObserveRequest = {\n instruction,\n options: wireOptions,\n frameId,\n };\n\n return this.execute<ObserveResult>({\n method: \"observe\",\n args: requestBody,\n serverCache,\n });\n }\n\n async goto(\n url: string,\n options?: Api.NavigateRequest[\"options\"],\n frameId?: string,\n ): Promise<SerializableResponse | null> {\n const requestBody: Api.NavigateRequest = { url, options, frameId };\n\n return this.execute<SerializableResponse | null>({\n method: \"navigate\",\n args: requestBody,\n });\n }\n\n async agentExecute(\n agentConfig: AgentConfig,\n executeOptions: AgentExecuteOptions | string,\n frameId?: string,\n shouldCache?: boolean,\n ): Promise<AgentResult> {\n // Check if integrations are being used in API mode (not supported)\n if (agentConfig.integrations && agentConfig.integrations.length > 0) {\n throw new ExperimentalNotConfiguredError(\"MCP integrations\");\n }\n\n // Strip non-serializable `page` from executeOptions before wire serialization\n let wireExecuteOptions: Api.AgentExecuteRequest[\"executeOptions\"];\n if (typeof executeOptions === \"string\") {\n wireExecuteOptions = { instruction: executeOptions };\n } else if (executeOptions.page) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { page: _, ...rest } = executeOptions;\n wireExecuteOptions = rest;\n } else {\n wireExecuteOptions = executeOptions;\n }\n\n const wireAgentConfig: Api.AgentExecuteRequest[\"agentConfig\"] = {\n systemPrompt: agentConfig.systemPrompt,\n mode: agentConfig.mode ?? (agentConfig.cua === true ? \"cua\" : undefined),\n cua: agentConfig.mode === undefined ? agentConfig.cua : undefined,\n model: agentConfig.model\n ? this.prepareModelConfig(agentConfig.model)\n : undefined,\n executionModel: agentConfig.executionModel\n ? this.prepareModelConfig(agentConfig.executionModel)\n : undefined,\n };\n\n // Build wire-format request body\n const requestBody: Api.AgentExecuteRequest = {\n agentConfig: wireAgentConfig,\n executeOptions: wireExecuteOptions,\n frameId,\n shouldCache,\n };\n\n const result = await this.execute<AgentResult>({\n method: \"agentExecute\",\n args: requestBody,\n });\n\n const finishedData =\n this.consumeFinishedEventData<Api.AgentExecuteResult>() ?? null;\n this.latestAgentCacheEntry =\n finishedData?.cacheEntry !== undefined\n ? (finishedData.cacheEntry as AgentCacheTransferPayload)\n : null;\n return result;\n }\n\n consumeLatestAgentCacheEntry(): AgentCacheTransferPayload | null {\n const entry = this.latestAgentCacheEntry;\n this.latestAgentCacheEntry = null;\n return entry;\n }\n\n async end(): Promise<Response> {\n const url = `/sessions/${this.sessionId}/end`;\n const response = await this.request(url, {\n method: \"POST\",\n });\n return response;\n }\n\n async getReplayMetrics(): Promise<StagehandMetrics> {\n if (!this.sessionId) {\n throw new StagehandAPIError(\"sessionId is required to fetch metrics.\");\n }\n\n const response = await this.request(`/sessions/${this.sessionId}/replay`, {\n method: \"GET\",\n });\n\n if (response.status !== 200) {\n const errorText = await response.text();\n this.logger({\n category: \"api\",\n message: `Failed to fetch metrics. Status ${response.status}: ${errorText}`,\n level: 0,\n });\n throw new StagehandHttpError(\n `Failed to fetch metrics with status ${response.status}: ${errorText}`,\n );\n }\n\n const data = (await response.json()) as\n | Api.ReplayResponse\n | { success: false; error?: string };\n\n if (!data.success) {\n const errorData = data as { success: false; error?: string };\n throw new StagehandAPIError(\n `Failed to fetch metrics: ${errorData.error || \"Unknown error\"}`,\n );\n }\n\n // Parse the API data into StagehandMetrics format\n const apiData = (data as Api.ReplayResponse).data;\n const metrics: StagehandMetrics = {\n actPromptTokens: 0,\n actCompletionTokens: 0,\n actReasoningTokens: 0,\n actCachedInputTokens: 0,\n actInferenceTimeMs: 0,\n extractPromptTokens: 0,\n extractCompletionTokens: 0,\n extractReasoningTokens: 0,\n extractCachedInputTokens: 0,\n extractInferenceTimeMs: 0,\n observePromptTokens: 0,\n observeCompletionTokens: 0,\n observeReasoningTokens: 0,\n observeCachedInputTokens: 0,\n observeInferenceTimeMs: 0,\n agentPromptTokens: 0,\n agentCompletionTokens: 0,\n agentReasoningTokens: 0,\n agentCachedInputTokens: 0,\n agentInferenceTimeMs: 0,\n totalPromptTokens: 0,\n totalCompletionTokens: 0,\n totalReasoningTokens: 0,\n totalCachedInputTokens: 0,\n totalInferenceTimeMs: 0,\n };\n\n // Parse pages and their actions\n const pages = apiData?.pages || [];\n for (const page of pages) {\n const actions = page.actions || [];\n for (const action of actions) {\n // Get method name and token usage\n const method = (action.method || \"\").toLowerCase();\n const tokenUsage = action.tokenUsage;\n\n if (tokenUsage) {\n const inputTokens = tokenUsage.inputTokens || 0;\n const outputTokens = tokenUsage.outputTokens || 0;\n const reasoningTokens =\n \"reasoningTokens\" in tokenUsage\n ? Number(\n (tokenUsage as { reasoningTokens?: number })\n .reasoningTokens ?? 0,\n )\n : 0;\n const cachedInputTokens =\n \"cachedInputTokens\" in tokenUsage\n ? Number(\n (tokenUsage as { cachedInputTokens?: number })\n .cachedInputTokens ?? 0,\n )\n : 0;\n const timeMs = tokenUsage.timeMs || 0;\n\n // Map method to metrics fields\n if (method === \"act\") {\n metrics.actPromptTokens += inputTokens;\n metrics.actCompletionTokens += outputTokens;\n metrics.actReasoningTokens += reasoningTokens;\n metrics.actCachedInputTokens += cachedInputTokens;\n metrics.actInferenceTimeMs += timeMs;\n } else if (method === \"extract\") {\n metrics.extractPromptTokens += inputTokens;\n metrics.extractCompletionTokens += outputTokens;\n metrics.extractReasoningTokens += reasoningTokens;\n metrics.extractCachedInputTokens += cachedInputTokens;\n metrics.extractInferenceTimeMs += timeMs;\n } else if (method === \"observe\") {\n metrics.observePromptTokens += inputTokens;\n metrics.observeCompletionTokens += outputTokens;\n metrics.observeReasoningTokens += reasoningTokens;\n metrics.observeCachedInputTokens += cachedInputTokens;\n metrics.observeInferenceTimeMs += timeMs;\n } else if (method === \"agent\") {\n metrics.agentPromptTokens += inputTokens;\n metrics.agentCompletionTokens += outputTokens;\n metrics.agentReasoningTokens += reasoningTokens;\n metrics.agentCachedInputTokens += cachedInputTokens;\n metrics.agentInferenceTimeMs += timeMs;\n }\n\n // Always update totals for any method with token usage\n metrics.totalPromptTokens += inputTokens;\n metrics.totalCompletionTokens += outputTokens;\n metrics.totalReasoningTokens += reasoningTokens;\n metrics.totalCachedInputTokens += cachedInputTokens;\n metrics.totalInferenceTimeMs += timeMs;\n }\n }\n }\n\n return metrics;\n }\n\n /**\n * Prepares a model configuration for the API payload by ensuring the `apiKey`\n * is included. If the model is passed as a string, converts it to an object\n * with `modelName` and `apiKey`.\n *\n * In API mode, we only attempt to load an API key from env vars when the\n * model provider differs from the one used to init the session.\n */\n private prepareModelConfig(\n model: ModelConfiguration,\n ): { modelName: string; apiKey?: string } & Record<string, unknown> {\n if (typeof model === \"string\") {\n // Extract provider from model string (e.g., \"openai/gpt-5-nano\" -> \"openai\")\n const provider = model.includes(\"/\") ? model.split(\"/\")[0] : undefined;\n const apiKey =\n provider && provider !== this.modelProvider\n ? (loadApiKeyFromEnv(provider, this.logger) ?? this.modelApiKey)\n : this.modelApiKey;\n return {\n modelName: model,\n ...(apiKey ? { apiKey } : {}),\n };\n }\n\n if (!model.apiKey) {\n const provider = model.modelName?.includes(\"/\")\n ? model.modelName.split(\"/\")[0]\n : undefined;\n const apiKey =\n provider && provider !== this.modelProvider\n ? (loadApiKeyFromEnv(provider, this.logger) ?? this.modelApiKey)\n : this.modelApiKey;\n return {\n ...model,\n ...(apiKey ? { apiKey } : {}),\n };\n }\n\n return model as { modelName: string; apiKey: string } & Record<\n string,\n unknown\n >;\n }\n\n private consumeFinishedEventData<T>(): T | null {\n const data = this.lastFinishedEventData as T | null;\n this.lastFinishedEventData = null;\n return data;\n }\n\n private async execute<T>({\n method,\n args,\n params,\n serverCache,\n }: ExecuteActionParams): Promise<T> {\n this.lastFinishedEventData = null;\n const urlParams = new URLSearchParams(params as Record<string, string>);\n const queryString = urlParams.toString();\n const url = `/sessions/${this.sessionId}/${method}${queryString ? `?${queryString}` : \"\"}`;\n\n const response = await this.request(\n url,\n {\n method: \"POST\",\n body: JSON.stringify(args),\n },\n serverCache,\n );\n\n // Capture cache status from response header\n const cacheStatus = response.headers.get(\"browserbase-cache-status\") as\n | \"HIT\"\n | \"MISS\"\n | null;\n\n if (!response.ok) {\n const errorBody = await response.text();\n throw new StagehandHttpError(\n `HTTP error! status: ${response.status}, body: ${errorBody}`,\n );\n }\n\n if (!response.body) {\n throw new StagehandResponseBodyError();\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { value, done } = await reader.read();\n\n if (done && !buffer) {\n throw new StagehandServerError(\n \"Stream ended without completion signal\",\n );\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n\n try {\n const eventData = JSON.parse(line.slice(6));\n\n if (eventData.type === \"system\") {\n if (eventData.data.status === \"error\") {\n const { error: errorMsg } = eventData.data;\n // Throw plain Error to match local SDK behavior (useApi: false)\n throw new Error(errorMsg);\n }\n if (eventData.data.status === \"finished\") {\n this.lastFinishedEventData = eventData.data;\n\n // If caching was bypassed for this request, suppress cache status\n // so we don't log or surface a MISS that the server emits anyway.\n const cacheEnabled = this.shouldUseCache(serverCache);\n return this.attachCacheStatus(\n eventData.data.result as T,\n method,\n cacheEnabled ? cacheStatus : null,\n cacheEnabled ? eventData : { data: {} },\n );\n }\n } else if (eventData.type === \"log\") {\n const msg = eventData.data.message;\n // Skip server-side internal logs that don't apply to API mode\n if (msg?.message === \"Connecting to local browser\") {\n continue;\n }\n this.logger(eventData.data.message);\n }\n } catch (e) {\n // Let Error instances pass through (server errors thrown above)\n // Only wrap SyntaxError from JSON.parse as parse errors\n if (e instanceof Error && !(e instanceof SyntaxError)) {\n throw e;\n }\n\n const errorMessage = e instanceof Error ? e.message : String(e);\n this.logger({\n category: \"api\",\n message: `Failed to parse SSE event: ${errorMessage}`,\n level: 0,\n });\n throw new StagehandResponseParseError(\n `Failed to parse server response: ${errorMessage}`,\n );\n }\n }\n\n if (done) {\n // Process any remaining data in buffer before exiting\n if (buffer.trim() && buffer.startsWith(\"data: \")) {\n try {\n const eventData = JSON.parse(buffer.slice(6));\n if (\n eventData.type === \"system\" &&\n eventData.data.status === \"finished\"\n ) {\n return this.attachCacheStatus(\n eventData.data.result as T,\n method,\n cacheStatus,\n eventData,\n );\n }\n } catch {\n this.logger({\n category: \"api\",\n message: `Incomplete data in final buffer: ${buffer.substring(0, 100)}`,\n level: 0,\n });\n }\n }\n throw new StagehandServerError(\n \"Stream ended without completion signal\",\n );\n }\n }\n }\n\n /**\n * Resolves the final cache status from the response header or SSE event data,\n * logs it, and attaches it to act/extract results before returning.\n */\n private attachCacheStatus<T>(\n result: T,\n method: string,\n cacheStatus: \"HIT\" | \"MISS\" | null,\n eventData: { data: { cacheHit?: boolean } },\n ): T {\n const finalCacheStatus =\n cacheStatus ||\n (typeof eventData.data.cacheHit === \"boolean\"\n ? eventData.data.cacheHit\n ? \"HIT\"\n : \"MISS\"\n : undefined);\n if (\n finalCacheStatus &&\n (method === \"act\" || method === \"extract\" || method === \"observe\")\n ) {\n this.logger({\n category: \"cache\",\n message: `${method} server cache ${finalCacheStatus.toLowerCase()}`,\n level: 1,\n });\n }\n if (\n finalCacheStatus &&\n result &&\n typeof result === \"object\" &&\n (method === \"act\" || method === \"extract\" || method === \"observe\")\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (result as ActResult | ExtractResult<any> | ObserveResult).cacheStatus =\n finalCacheStatus;\n }\n return result;\n }\n\n /**\n * Determine if caching should be enabled for a request.\n * Method-level setting takes precedence over instance-level setting.\n */\n private shouldUseCache(methodServerCache?: boolean): boolean {\n // If method-level setting is explicitly provided, use it\n if (methodServerCache !== undefined) {\n return methodServerCache;\n }\n // Otherwise, use instance-level setting\n return this.serverCache;\n }\n\n private async request(\n path: string,\n options: RequestInit,\n serverCache?: boolean,\n ): Promise<Response> {\n const defaultHeaders: Record<string, string> = {\n \"x-bb-api-key\": this.apiKey,\n ...(this.projectId ? { \"x-bb-project-id\": this.projectId } : {}),\n \"x-bb-session-id\": this.sessionId,\n // we want real-time logs, so we stream the response\n \"x-stream-response\": \"true\",\n ...(this.modelApiKey ? { \"x-model-api-key\": this.modelApiKey } : {}),\n \"x-language\": \"typescript\",\n \"x-sdk-version\": STAGEHAND_VERSION,\n };\n\n // Add cache bypass header if caching is disabled\n if (!this.shouldUseCache(serverCache)) {\n defaultHeaders[\"browserbase-cache-bypass\"] = \"true\";\n }\n\n if (options.method === \"POST\" && options.body) {\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n }\n\n // Use STAGEHAND_API_URL when set. STAGEHAND_BASE_URL is a legacy alias.\n // Ensure /v1 suffix is present for consistency\n const configuredBaseUrl =\n process.env.STAGEHAND_API_URL ?? process.env.STAGEHAND_BASE_URL;\n if (\n !process.env.STAGEHAND_API_URL &&\n process.env.STAGEHAND_BASE_URL &&\n !this.warnedStagehandBaseUrl\n ) {\n this.logger({\n category: \"config\",\n message:\n \"STAGEHAND_BASE_URL is deprecated. Use STAGEHAND_API_URL instead.\",\n level: 0,\n });\n this.warnedStagehandBaseUrl = true;\n }\n\n let baseUrl: string;\n if (configuredBaseUrl) {\n const envUrl = configuredBaseUrl.replace(/\\/+$/, \"\");\n // Append /v1 if not already present\n baseUrl = envUrl.endsWith(\"/v1\") ? envUrl : `${envUrl}/v1`;\n } else {\n baseUrl = getApiUrlForRegion(this.region);\n }\n\n const response = await this.fetchWithCookies(`${baseUrl}${path}`, {\n ...options,\n headers: {\n ...defaultHeaders,\n ...options.headers,\n },\n });\n\n return response;\n }\n}\n"]}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../lib/v3/api.ts"],"names":[],"mappings":"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","sourcesContent":["import makeFetchCookie from \"fetch-cookie\";\nimport { loadApiKeyFromEnv } from \"../utils.js\";\nimport { STAGEHAND_VERSION } from \"../version.js\";\nimport {\n StagehandAPIError,\n StagehandAPIUnauthorizedError,\n StagehandHttpError,\n StagehandResponseBodyError,\n StagehandResponseParseError,\n StagehandServerError,\n ExperimentalNotConfiguredError,\n} from \"./types/public/index.js\";\nimport type {\n ActResult,\n AgentConfig,\n AgentExecuteOptions,\n AgentResult,\n ExtractResult,\n ObserveResult,\n LogLine,\n StagehandMetrics,\n BrowserbaseRegion,\n ActOptions,\n ExtractOptions,\n ObserveOptions,\n Api,\n} from \"./types/public/index.js\";\nimport type {\n SerializableResponse,\n AgentCacheTransferPayload,\n} from \"./types/private/index.js\";\nimport type { ModelConfiguration } from \"./types/public/model.js\";\nimport { toJsonSchema } from \"./zodCompat.js\";\nimport type { StagehandZodSchema } from \"./zodCompat.js\";\n\n// =============================================================================\n// Multi-region API URL mapping\n// =============================================================================\n\n/**\n * Mapping of Browserbase regions to their corresponding Stagehand API base URLs.\n * Users should configure their client to hit the API endpoint that matches\n * the region where their browser session is running.\n */\nexport const REGION_API_URLS: Record<BrowserbaseRegion, string> = {\n \"us-west-2\": \"https://api.stagehand.browserbase.com\",\n \"us-east-1\": \"https://api.use1.stagehand.browserbase.com\",\n \"eu-central-1\": \"https://api.euc1.stagehand.browserbase.com\",\n \"ap-southeast-1\": \"https://api.apse1.stagehand.browserbase.com\",\n};\n\n/**\n * Returns the full API URL (with /v1 suffix) for a given Browserbase region.\n * If no region is specified or the region is unknown, defaults to us-west-2.\n *\n * @param region - The Browserbase region (e.g., \"us-west-2\", \"eu-central-1\")\n * @returns The full API URL including /v1 suffix\n */\nexport function getApiUrlForRegion(\n region: BrowserbaseRegion | undefined,\n): string {\n const baseUrl =\n REGION_API_URLS[region as BrowserbaseRegion] ??\n REGION_API_URLS[\"us-west-2\"];\n return `${baseUrl}/v1`;\n}\n\n// =============================================================================\n// Client-specific types (can't be Zod schemas due to functions/Page objects)\n// =============================================================================\n//\n// These types mirror the Api.* schemas from types/public/api.ts but include\n// non-serializable SDK fields (like Page objects) that get stripped before\n// sending requests over the wire.\n//\n// Relationship to wire format:\n// - Client accepts: SDK types (ActOptions, ExtractOptions, etc.) with optional `page`\n// - Wire sends: Api.* types (page stripped, Zod schema converted to JSON schema)\n// - Client returns: SDK result types (ActResult, ExtractResult, etc.)\n// =============================================================================\n\n/**\n * Constructor parameters for StagehandAPIClient\n */\ninterface StagehandAPIConstructorParams {\n apiKey: string;\n projectId?: string;\n logger: (message: LogLine) => void;\n /**\n * When true, enables server-side caching by default for all requests.\n * When false, disables server-side caching.\n * Defaults to true (caching enabled).\n * Can be overridden per-method in act(), extract(), and observe() options.\n */\n serverCache?: boolean;\n}\n\n/**\n * Parameters for starting a session via the API client.\n * Extends Api.SessionStartRequest with client-specific field (modelApiKey).\n *\n * Wire format: Api.SessionStartRequest (modelApiKey sent via header, not body)\n */\ninterface ClientSessionStartParams extends Api.SessionStartRequest {\n /** Model API key - sent via x-model-api-key header, not in request body.\n * Optional: when omitted, requests are sent without the x-model-api-key header\n * and the server is expected to handle model authentication on its own. */\n modelApiKey?: string;\n /** Default model config for later action requests. Not sent to /sessions/start. */\n defaultModelConfig?: ModelConfiguration;\n}\n\n/**\n * Generic API response wrapper matching Api.*Response schemas\n */\ntype ApiResponse<T> =\n | { success: true; data: T }\n | { success: false; message: string };\n\ntype PreparedModelConfig = { modelName: string; apiKey?: string } & Record<\n string,\n unknown\n>;\n\n/**\n * Union of all API request body types for type-safe execute() calls\n */\ntype ApiRequestBody =\n | Api.ActRequest\n | Api.ExtractRequest\n | Api.ObserveRequest\n | Api.NavigateRequest\n | Api.AgentExecuteRequest;\n\n/**\n * Parameters for executing an action via the streaming API\n */\ninterface ExecuteActionParams {\n method: \"act\" | \"extract\" | \"observe\" | \"navigate\" | \"end\" | \"agentExecute\";\n args?: ApiRequestBody;\n params?: Record<string, string>;\n /**\n * Override the instance-level serverCache setting for this request.\n * When true, enables server-side caching.\n * When false, disables server-side caching.\n */\n serverCache?: boolean;\n}\n\n/**\n * Client parameters for act() method.\n * Derives structure from Api.ActRequest but uses SDK's ActOptions (which includes `page`).\n * Before serialization, `page` is stripped to produce Api.ActRequest wire format.\n */\ninterface ClientActParameters {\n input: Api.ActRequest[\"input\"];\n options?: ActOptions;\n frameId?: Api.ActRequest[\"frameId\"];\n}\n\n/**\n * Client parameters for extract() method.\n * Derives structure from Api.ExtractRequest but uses SDK's ExtractOptions (which includes `page`)\n * and accepts Zod schema (converted to JSON schema for wire format).\n */\ninterface ClientExtractParameters {\n instruction?: Api.ExtractRequest[\"instruction\"];\n schema?: StagehandZodSchema;\n options?: ExtractOptions;\n frameId?: Api.ExtractRequest[\"frameId\"];\n}\n\n/**\n * Client parameters for observe() method.\n * Derives structure from Api.ObserveRequest but uses SDK's ObserveOptions (which includes `page`).\n * Before serialization, `page` is stripped to produce Api.ObserveRequest wire format.\n */\ninterface ClientObserveParameters {\n instruction?: Api.ObserveRequest[\"instruction\"];\n options?: ObserveOptions;\n frameId?: Api.ObserveRequest[\"frameId\"];\n}\n\nexport class StagehandAPIClient {\n private apiKey: string;\n private projectId?: string;\n private sessionId?: string;\n private modelApiKey?: string;\n private modelProvider?: string;\n private defaultModelConfig?: PreparedModelConfig;\n private region?: BrowserbaseRegion;\n private logger: (message: LogLine) => void;\n private fetchWithCookies;\n private serverCache: boolean;\n private lastFinishedEventData: Record<string, unknown> | null = null;\n private latestAgentCacheEntry: AgentCacheTransferPayload | null = null;\n private warnedStagehandBaseUrl = false;\n\n constructor({\n apiKey,\n projectId,\n logger,\n serverCache,\n }: StagehandAPIConstructorParams) {\n this.apiKey = apiKey;\n this.projectId = projectId;\n this.logger = logger;\n this.serverCache = serverCache ?? true;\n // Create a single cookie jar instance that will persist across all requests\n this.fetchWithCookies = makeFetchCookie(fetch);\n }\n\n async init({\n modelName,\n modelApiKey,\n defaultModelConfig,\n domSettleTimeoutMs,\n verbose,\n systemPrompt,\n selfHeal,\n browserbaseSessionCreateParams,\n browserbaseSessionID,\n // browser, TODO for local browsers\n }: ClientSessionStartParams): Promise<Api.SessionStartResult> {\n this.modelApiKey = modelApiKey;\n // Extract provider from modelName (e.g., \"openai/gpt-5-nano\" -> \"openai\")\n this.modelProvider = modelName?.includes(\"/\")\n ? modelName.split(\"/\")[0]\n : undefined;\n this.defaultModelConfig = defaultModelConfig\n ? this.prepareModelConfig(defaultModelConfig)\n : undefined;\n\n // Store the region for multi-region API URL resolution\n this.region = browserbaseSessionCreateParams?.region;\n\n this.logger({\n category: \"init\",\n message: \"Creating new browserbase session...\",\n level: 1,\n });\n\n // Build wire-format request body (Api.SessionStartRequest shape)\n const requestBody: Api.SessionStartRequest = {\n modelName,\n domSettleTimeoutMs,\n verbose,\n systemPrompt,\n selfHeal,\n browserbaseSessionCreateParams,\n browserbaseSessionID,\n // browser, TODO: only send when connected to local fastify\n };\n\n const sessionResponse = await this.request(\"/sessions/start\", {\n method: \"POST\",\n body: JSON.stringify(requestBody),\n });\n\n if (sessionResponse.status === 401) {\n throw new StagehandAPIUnauthorizedError(\n \"Unauthorized. Ensure you provided a valid API key.\",\n );\n } else if (sessionResponse.status !== 200) {\n const errorText = await sessionResponse.text();\n this.logger({\n category: \"api\",\n message: `API error (${sessionResponse.status}): ${errorText}`,\n level: 0,\n });\n throw new StagehandHttpError(`Unknown error: ${sessionResponse.status}`);\n }\n\n const sessionResponseBody =\n (await sessionResponse.json()) as ApiResponse<Api.SessionStartResult>;\n\n if (sessionResponseBody.success === false) {\n throw new StagehandAPIError(sessionResponseBody.message);\n }\n\n // Temporary reroute for rollout\n if (!sessionResponseBody.data?.available && browserbaseSessionID) {\n sessionResponseBody.data.sessionId = browserbaseSessionID;\n }\n\n this.sessionId = sessionResponseBody.data.sessionId;\n\n return sessionResponseBody.data;\n }\n\n async act({\n input,\n options,\n frameId,\n }: ClientActParameters): Promise<ActResult> {\n // Strip non-serializable `page` and SDK-only fields from options before wire serialization\n let wireOptions: Api.ActRequest[\"options\"];\n let serverCache: boolean | undefined;\n if (options) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { page: _, serverCache: enableCache, ...restOptions } = options;\n serverCache = enableCache;\n if (restOptions.model) {\n restOptions.model = this.prepareModelConfig(restOptions.model);\n } else if (this.defaultModelConfig) {\n restOptions.model = this.getDefaultModelConfig();\n }\n if (Object.keys(restOptions).length > 0) {\n wireOptions = restOptions as unknown as Api.ActRequest[\"options\"];\n }\n } else if (this.defaultModelConfig) {\n wireOptions = {\n model: this.getDefaultModelConfig(),\n } as unknown as Api.ActRequest[\"options\"];\n }\n\n // Build wire-format request body\n const requestBody: Api.ActRequest = {\n input,\n options: wireOptions,\n frameId,\n };\n\n return this.execute<ActResult>({\n method: \"act\",\n args: requestBody,\n serverCache,\n });\n }\n\n async extract<T extends StagehandZodSchema>({\n instruction,\n schema: zodSchema,\n options,\n frameId,\n }: ClientExtractParameters): Promise<ExtractResult<T>> {\n // Convert Zod schema to JSON schema for wire format\n const jsonSchema = zodSchema ? toJsonSchema(zodSchema) : undefined;\n\n // Strip non-serializable `page` and SDK-only fields from options before wire serialization\n let wireOptions: Api.ExtractRequest[\"options\"];\n let serverCache: boolean | undefined;\n if (options) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { page: _, serverCache: enableCache, ...restOptions } = options;\n serverCache = enableCache;\n if (restOptions.model) {\n restOptions.model = this.prepareModelConfig(restOptions.model);\n } else if (this.defaultModelConfig) {\n restOptions.model = this.getDefaultModelConfig();\n }\n if (Object.keys(restOptions).length > 0) {\n wireOptions = restOptions as unknown as Api.ExtractRequest[\"options\"];\n }\n } else if (this.defaultModelConfig) {\n wireOptions = {\n model: this.getDefaultModelConfig(),\n } as unknown as Api.ExtractRequest[\"options\"];\n }\n\n // Build wire-format request body\n const requestBody: Api.ExtractRequest = {\n instruction,\n schema: jsonSchema,\n options: wireOptions,\n frameId,\n };\n\n return this.execute<ExtractResult<T>>({\n method: \"extract\",\n args: requestBody,\n serverCache,\n });\n }\n\n async observe({\n instruction,\n options,\n frameId,\n }: ClientObserveParameters): Promise<ObserveResult> {\n // Strip non-serializable `page` and SDK-only fields from options before wire serialization\n let wireOptions: Api.ObserveRequest[\"options\"];\n let serverCache: boolean | undefined;\n if (options) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { page: _, serverCache: enableCache, ...restOptions } = options;\n serverCache = enableCache;\n if (restOptions.model) {\n restOptions.model = this.prepareModelConfig(restOptions.model);\n } else if (this.defaultModelConfig) {\n restOptions.model = this.getDefaultModelConfig();\n }\n if (Object.keys(restOptions).length > 0) {\n wireOptions = restOptions as unknown as Api.ObserveRequest[\"options\"];\n }\n } else if (this.defaultModelConfig) {\n wireOptions = {\n model: this.getDefaultModelConfig(),\n } as unknown as Api.ObserveRequest[\"options\"];\n }\n\n // Build wire-format request body\n const requestBody: Api.ObserveRequest = {\n instruction,\n options: wireOptions,\n frameId,\n };\n\n return this.execute<ObserveResult>({\n method: \"observe\",\n args: requestBody,\n serverCache,\n });\n }\n\n async goto(\n url: string,\n options?: Api.NavigateRequest[\"options\"],\n frameId?: string,\n ): Promise<SerializableResponse | null> {\n const publicOptions = { ...(options ?? {}) } as NonNullable<\n Api.NavigateRequest[\"options\"]\n > & { model?: unknown };\n delete publicOptions.model;\n\n const wireOptions = {\n ...publicOptions,\n ...(this.defaultModelConfig\n ? { model: this.getDefaultModelConfig() }\n : {}),\n };\n const requestBody: Api.NavigateRequest = {\n url,\n options: Object.keys(wireOptions).length > 0 ? wireOptions : undefined,\n frameId,\n };\n\n return this.execute<SerializableResponse | null>({\n method: \"navigate\",\n args: requestBody,\n });\n }\n\n async agentExecute(\n agentConfig: AgentConfig,\n executeOptions: AgentExecuteOptions | string,\n frameId?: string,\n shouldCache?: boolean,\n ): Promise<AgentResult> {\n // Check if integrations are being used in API mode (not supported)\n if (agentConfig.integrations && agentConfig.integrations.length > 0) {\n throw new ExperimentalNotConfiguredError(\"MCP integrations\");\n }\n\n // Strip non-serializable `page` from executeOptions before wire serialization\n let wireExecuteOptions: Api.AgentExecuteRequest[\"executeOptions\"];\n if (typeof executeOptions === \"string\") {\n wireExecuteOptions = { instruction: executeOptions };\n } else if (executeOptions.page) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { page: _, ...rest } = executeOptions;\n wireExecuteOptions = rest;\n } else {\n wireExecuteOptions = executeOptions;\n }\n\n const wireAgentConfig: Api.AgentExecuteRequest[\"agentConfig\"] = {\n systemPrompt: agentConfig.systemPrompt,\n mode: agentConfig.mode ?? (agentConfig.cua === true ? \"cua\" : undefined),\n cua: agentConfig.mode === undefined ? agentConfig.cua : undefined,\n model: agentConfig.model\n ? this.prepareModelConfig(agentConfig.model)\n : this.getDefaultModelConfig(),\n executionModel: agentConfig.executionModel\n ? this.prepareModelConfig(agentConfig.executionModel)\n : undefined,\n };\n\n // Build wire-format request body\n const requestBody: Api.AgentExecuteRequest = {\n agentConfig: wireAgentConfig,\n executeOptions: wireExecuteOptions,\n frameId,\n shouldCache,\n };\n\n const result = await this.execute<AgentResult>({\n method: \"agentExecute\",\n args: requestBody,\n });\n\n const finishedData =\n this.consumeFinishedEventData<Api.AgentExecuteResult>() ?? null;\n this.latestAgentCacheEntry =\n finishedData?.cacheEntry !== undefined\n ? (finishedData.cacheEntry as AgentCacheTransferPayload)\n : null;\n return result;\n }\n\n consumeLatestAgentCacheEntry(): AgentCacheTransferPayload | null {\n const entry = this.latestAgentCacheEntry;\n this.latestAgentCacheEntry = null;\n return entry;\n }\n\n async end(): Promise<Response> {\n const url = `/sessions/${this.sessionId}/end`;\n const response = await this.request(url, {\n method: \"POST\",\n });\n return response;\n }\n\n async getReplayMetrics(): Promise<StagehandMetrics> {\n if (!this.sessionId) {\n throw new StagehandAPIError(\"sessionId is required to fetch metrics.\");\n }\n\n const response = await this.request(`/sessions/${this.sessionId}/replay`, {\n method: \"GET\",\n });\n\n if (response.status !== 200) {\n const errorText = await response.text();\n this.logger({\n category: \"api\",\n message: `Failed to fetch metrics. Status ${response.status}: ${errorText}`,\n level: 0,\n });\n throw new StagehandHttpError(\n `Failed to fetch metrics with status ${response.status}: ${errorText}`,\n );\n }\n\n const data = (await response.json()) as\n | Api.ReplayResponse\n | { success: false; error?: string };\n\n if (!data.success) {\n const errorData = data as { success: false; error?: string };\n throw new StagehandAPIError(\n `Failed to fetch metrics: ${errorData.error || \"Unknown error\"}`,\n );\n }\n\n // Parse the API data into StagehandMetrics format\n const apiData = (data as Api.ReplayResponse).data;\n const metrics: StagehandMetrics = {\n actPromptTokens: 0,\n actCompletionTokens: 0,\n actReasoningTokens: 0,\n actCachedInputTokens: 0,\n actInferenceTimeMs: 0,\n extractPromptTokens: 0,\n extractCompletionTokens: 0,\n extractReasoningTokens: 0,\n extractCachedInputTokens: 0,\n extractInferenceTimeMs: 0,\n observePromptTokens: 0,\n observeCompletionTokens: 0,\n observeReasoningTokens: 0,\n observeCachedInputTokens: 0,\n observeInferenceTimeMs: 0,\n agentPromptTokens: 0,\n agentCompletionTokens: 0,\n agentReasoningTokens: 0,\n agentCachedInputTokens: 0,\n agentInferenceTimeMs: 0,\n totalPromptTokens: 0,\n totalCompletionTokens: 0,\n totalReasoningTokens: 0,\n totalCachedInputTokens: 0,\n totalInferenceTimeMs: 0,\n };\n\n // Parse pages and their actions\n const pages = apiData?.pages || [];\n for (const page of pages) {\n const actions = page.actions || [];\n for (const action of actions) {\n // Get method name and token usage\n const method = (action.method || \"\").toLowerCase();\n const tokenUsage = action.tokenUsage;\n\n if (tokenUsage) {\n const inputTokens = tokenUsage.inputTokens || 0;\n const outputTokens = tokenUsage.outputTokens || 0;\n const reasoningTokens =\n \"reasoningTokens\" in tokenUsage\n ? Number(\n (tokenUsage as { reasoningTokens?: number })\n .reasoningTokens ?? 0,\n )\n : 0;\n const cachedInputTokens =\n \"cachedInputTokens\" in tokenUsage\n ? Number(\n (tokenUsage as { cachedInputTokens?: number })\n .cachedInputTokens ?? 0,\n )\n : 0;\n const timeMs = tokenUsage.timeMs || 0;\n\n // Map method to metrics fields\n if (method === \"act\") {\n metrics.actPromptTokens += inputTokens;\n metrics.actCompletionTokens += outputTokens;\n metrics.actReasoningTokens += reasoningTokens;\n metrics.actCachedInputTokens += cachedInputTokens;\n metrics.actInferenceTimeMs += timeMs;\n } else if (method === \"extract\") {\n metrics.extractPromptTokens += inputTokens;\n metrics.extractCompletionTokens += outputTokens;\n metrics.extractReasoningTokens += reasoningTokens;\n metrics.extractCachedInputTokens += cachedInputTokens;\n metrics.extractInferenceTimeMs += timeMs;\n } else if (method === \"observe\") {\n metrics.observePromptTokens += inputTokens;\n metrics.observeCompletionTokens += outputTokens;\n metrics.observeReasoningTokens += reasoningTokens;\n metrics.observeCachedInputTokens += cachedInputTokens;\n metrics.observeInferenceTimeMs += timeMs;\n } else if (method === \"agent\") {\n metrics.agentPromptTokens += inputTokens;\n metrics.agentCompletionTokens += outputTokens;\n metrics.agentReasoningTokens += reasoningTokens;\n metrics.agentCachedInputTokens += cachedInputTokens;\n metrics.agentInferenceTimeMs += timeMs;\n }\n\n // Always update totals for any method with token usage\n metrics.totalPromptTokens += inputTokens;\n metrics.totalCompletionTokens += outputTokens;\n metrics.totalReasoningTokens += reasoningTokens;\n metrics.totalCachedInputTokens += cachedInputTokens;\n metrics.totalInferenceTimeMs += timeMs;\n }\n }\n }\n\n return metrics;\n }\n\n /**\n * Prepares a model configuration for the API payload by ensuring the `apiKey`\n * is included. If the model is passed as a string, converts it to an object\n * with `modelName` and `apiKey`.\n *\n * In API mode, we only attempt to load an API key from env vars when the\n * model provider differs from the one used to init the session.\n */\n private prepareModelConfig(model: ModelConfiguration): PreparedModelConfig {\n if (typeof model === \"string\") {\n // Extract provider from model string (e.g., \"openai/gpt-5-nano\" -> \"openai\")\n const provider = model.includes(\"/\") ? model.split(\"/\")[0] : undefined;\n const apiKey =\n provider && provider !== this.modelProvider\n ? (loadApiKeyFromEnv(provider, this.logger) ?? this.modelApiKey)\n : this.modelApiKey;\n return {\n modelName: model,\n ...(apiKey ? { apiKey } : {}),\n };\n }\n\n if (!model.apiKey) {\n const provider = model.modelName?.includes(\"/\")\n ? model.modelName.split(\"/\")[0]\n : undefined;\n const apiKey =\n provider && provider !== this.modelProvider\n ? (loadApiKeyFromEnv(provider, this.logger) ?? this.modelApiKey)\n : this.modelApiKey;\n return {\n ...model,\n ...(apiKey ? { apiKey } : {}),\n };\n }\n\n return model as PreparedModelConfig;\n }\n\n private getDefaultModelConfig(): PreparedModelConfig | undefined {\n return this.defaultModelConfig\n ? ({ ...this.defaultModelConfig } as PreparedModelConfig)\n : undefined;\n }\n\n private consumeFinishedEventData<T>(): T | null {\n const data = this.lastFinishedEventData as T | null;\n this.lastFinishedEventData = null;\n return data;\n }\n\n private async execute<T>({\n method,\n args,\n params,\n serverCache,\n }: ExecuteActionParams): Promise<T> {\n this.lastFinishedEventData = null;\n const urlParams = new URLSearchParams(params as Record<string, string>);\n const queryString = urlParams.toString();\n const url = `/sessions/${this.sessionId}/${method}${queryString ? `?${queryString}` : \"\"}`;\n\n const response = await this.request(\n url,\n {\n method: \"POST\",\n body: JSON.stringify(args),\n },\n serverCache,\n );\n\n // Capture cache status from response header\n const cacheStatus = response.headers.get(\"browserbase-cache-status\") as\n | \"HIT\"\n | \"MISS\"\n | null;\n\n if (!response.ok) {\n const errorBody = await response.text();\n throw new StagehandHttpError(\n `HTTP error! status: ${response.status}, body: ${errorBody}`,\n );\n }\n\n if (!response.body) {\n throw new StagehandResponseBodyError();\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { value, done } = await reader.read();\n\n if (done && !buffer) {\n throw new StagehandServerError(\n \"Stream ended without completion signal\",\n );\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n\n try {\n const eventData = JSON.parse(line.slice(6));\n\n if (eventData.type === \"system\") {\n if (eventData.data.status === \"error\") {\n const { error: errorMsg } = eventData.data;\n // Throw plain Error to match local SDK behavior (useApi: false)\n throw new Error(errorMsg);\n }\n if (eventData.data.status === \"finished\") {\n this.lastFinishedEventData = eventData.data;\n\n // If caching was bypassed for this request, suppress cache status\n // so we don't log or surface a MISS that the server emits anyway.\n const cacheEnabled = this.shouldUseCache(serverCache);\n return this.attachCacheStatus(\n eventData.data.result as T,\n method,\n cacheEnabled ? cacheStatus : null,\n cacheEnabled ? eventData : { data: {} },\n );\n }\n } else if (eventData.type === \"log\") {\n const msg = eventData.data.message;\n // Skip server-side internal logs that don't apply to API mode\n if (msg?.message === \"Connecting to local browser\") {\n continue;\n }\n this.logger(eventData.data.message);\n }\n } catch (e) {\n // Let Error instances pass through (server errors thrown above)\n // Only wrap SyntaxError from JSON.parse as parse errors\n if (e instanceof Error && !(e instanceof SyntaxError)) {\n throw e;\n }\n\n const errorMessage = e instanceof Error ? e.message : String(e);\n this.logger({\n category: \"api\",\n message: `Failed to parse SSE event: ${errorMessage}`,\n level: 0,\n });\n throw new StagehandResponseParseError(\n `Failed to parse server response: ${errorMessage}`,\n );\n }\n }\n\n if (done) {\n // Process any remaining data in buffer before exiting\n if (buffer.trim() && buffer.startsWith(\"data: \")) {\n try {\n const eventData = JSON.parse(buffer.slice(6));\n if (\n eventData.type === \"system\" &&\n eventData.data.status === \"finished\"\n ) {\n return this.attachCacheStatus(\n eventData.data.result as T,\n method,\n cacheStatus,\n eventData,\n );\n }\n } catch {\n this.logger({\n category: \"api\",\n message: `Incomplete data in final buffer: ${buffer.substring(0, 100)}`,\n level: 0,\n });\n }\n }\n throw new StagehandServerError(\n \"Stream ended without completion signal\",\n );\n }\n }\n }\n\n /**\n * Resolves the final cache status from the response header or SSE event data,\n * logs it, and attaches it to act/extract results before returning.\n */\n private attachCacheStatus<T>(\n result: T,\n method: string,\n cacheStatus: \"HIT\" | \"MISS\" | null,\n eventData: { data: { cacheHit?: boolean } },\n ): T {\n const finalCacheStatus =\n cacheStatus ||\n (typeof eventData.data.cacheHit === \"boolean\"\n ? eventData.data.cacheHit\n ? \"HIT\"\n : \"MISS\"\n : undefined);\n if (\n finalCacheStatus &&\n (method === \"act\" || method === \"extract\" || method === \"observe\")\n ) {\n this.logger({\n category: \"cache\",\n message: `${method} server cache ${finalCacheStatus.toLowerCase()}`,\n level: 1,\n });\n }\n if (\n finalCacheStatus &&\n result &&\n typeof result === \"object\" &&\n (method === \"act\" || method === \"extract\" || method === \"observe\")\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (result as ActResult | ExtractResult<any> | ObserveResult).cacheStatus =\n finalCacheStatus;\n }\n return result;\n }\n\n /**\n * Determine if caching should be enabled for a request.\n * Method-level setting takes precedence over instance-level setting.\n */\n private shouldUseCache(methodServerCache?: boolean): boolean {\n // If method-level setting is explicitly provided, use it\n if (methodServerCache !== undefined) {\n return methodServerCache;\n }\n // Otherwise, use instance-level setting\n return this.serverCache;\n }\n\n private async request(\n path: string,\n options: RequestInit,\n serverCache?: boolean,\n ): Promise<Response> {\n const defaultHeaders: Record<string, string> = {\n \"x-bb-api-key\": this.apiKey,\n ...(this.projectId ? { \"x-bb-project-id\": this.projectId } : {}),\n \"x-bb-session-id\": this.sessionId,\n // we want real-time logs, so we stream the response\n \"x-stream-response\": \"true\",\n ...(this.modelApiKey ? { \"x-model-api-key\": this.modelApiKey } : {}),\n \"x-language\": \"typescript\",\n \"x-sdk-version\": STAGEHAND_VERSION,\n };\n\n // Add cache bypass header if caching is disabled\n if (!this.shouldUseCache(serverCache)) {\n defaultHeaders[\"browserbase-cache-bypass\"] = \"true\";\n }\n\n if (options.method === \"POST\" && options.body) {\n defaultHeaders[\"Content-Type\"] = \"application/json\";\n }\n\n // Use STAGEHAND_API_URL when set. STAGEHAND_BASE_URL is a legacy alias.\n // Ensure /v1 suffix is present for consistency\n const configuredBaseUrl =\n process.env.STAGEHAND_API_URL ?? process.env.STAGEHAND_BASE_URL;\n if (\n !process.env.STAGEHAND_API_URL &&\n process.env.STAGEHAND_BASE_URL &&\n !this.warnedStagehandBaseUrl\n ) {\n this.logger({\n category: \"config\",\n message:\n \"STAGEHAND_BASE_URL is deprecated. Use STAGEHAND_API_URL instead.\",\n level: 0,\n });\n this.warnedStagehandBaseUrl = true;\n }\n\n let baseUrl: string;\n if (configuredBaseUrl) {\n const envUrl = configuredBaseUrl.replace(/\\/+$/, \"\");\n // Append /v1 if not already present\n baseUrl = envUrl.endsWith(\"/v1\") ? envUrl : `${envUrl}/v1`;\n } else {\n baseUrl = getApiUrlForRegion(this.region);\n }\n\n const response = await this.fetchWithCookies(`${baseUrl}${path}`, {\n ...options,\n headers: {\n ...defaultHeaders,\n ...options.headers,\n },\n });\n\n return response;\n }\n}\n"]}
@@ -41,7 +41,7 @@ export class ExtractHandler {
41
41
  this.onMetrics = onMetrics;
42
42
  }
43
43
  async extract(params) {
44
- const { instruction, schema, page, selector, ignoreSelectors, timeout, model, } = params;
44
+ const { instruction, schema, page, selector, ignoreSelectors, timeout, model, screenshot, } = params;
45
45
  const llmClient = this.resolveLlmClient(model);
46
46
  const ensureTimeRemaining = createTimeoutGuard(timeout, (ms) => new ExtractTimeoutError(ms));
47
47
  // No-args → page text (parity with v2)
@@ -62,6 +62,9 @@ export class ExtractHandler {
62
62
  if (!instruction && schema) {
63
63
  throw new StagehandInvalidArgumentError("extract() requires an instruction when a schema is provided.");
64
64
  }
65
+ if (screenshot && llmClient.type !== "aisdk") {
66
+ throw new StagehandInvalidArgumentError("extract({ screenshot: true }) is only supported with AI SDK clients.");
67
+ }
65
68
  const focusSelector = selector?.replace(/^xpath=/, "") ?? "";
66
69
  // Build the hybrid snapshot (includes combinedTree; combinedUrlMap optional)
67
70
  ensureTimeRemaining();
@@ -70,9 +73,22 @@ export class ExtractHandler {
70
73
  focusSelector: focusSelector,
71
74
  ignoreSelectors,
72
75
  });
76
+ const screenshotBuffer = screenshot
77
+ ? await (async () => {
78
+ ensureTimeRemaining();
79
+ const buffer = await page.screenshot({
80
+ fullPage: false,
81
+ type: "png",
82
+ });
83
+ ensureTimeRemaining();
84
+ return buffer;
85
+ })()
86
+ : undefined;
73
87
  v3Logger({
74
88
  category: "extraction",
75
- message: "Starting extraction using a11y snapshot",
89
+ message: screenshot
90
+ ? "Starting extraction using a11y snapshot and viewport screenshot"
91
+ : "Starting extraction using a11y snapshot",
76
92
  level: 1,
77
93
  auxiliary: instruction
78
94
  ? { instruction: { value: instruction, type: "string" } }
@@ -100,6 +116,7 @@ export class ExtractHandler {
100
116
  userProvidedInstructions: this.systemPrompt,
101
117
  logger: v3Logger,
102
118
  logInferenceToFile: this.logInferenceToFile,
119
+ screenshot: screenshotBuffer,
103
120
  });
104
121
  const { metadata: { completed }, prompt_tokens, completion_tokens, reasoning_tokens = 0, cached_input_tokens = 0, inference_time_ms, ...rest } = extractionResponse;
105
122
  let output = rest;
@@ -1 +1 @@
1
- {"version":3,"file":"extractHandler.js","sourceRoot":"","sources":["../../../../../lib/v3/handlers/extractHandler.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAK7E,OAAO,EACL,oBAAoB,EACpB,cAAc,GACf,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAOpE;;;;;;;;;GASG;AACH,MAAM,UAAU,+BAA+B,CAC7C,MAAS;IAET,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC;AAcD,MAAM,OAAO,cAAc;IACR,SAAS,CAAY;IACrB,gBAAgB,CAAiB;IACjC,oBAAoB,CAAgB;IACpC,gBAAgB,CAA4C;IAC5D,YAAY,CAAS;IACrB,kBAAkB,CAAU;IAC5B,YAAY,CAAU;IACtB,SAAS,CAOhB;IAEV,YACE,SAAoB,EACpB,gBAAgC,EAChC,oBAAmC,EACnC,gBAA2D,EAC3D,YAAqB,EACrB,kBAA4B,EAC5B,YAAsB,EACtB,SAOS;QAET,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,IAAI,KAAK,CAAC;QACtD,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO,CACX,MAA+B;QAE/B,MAAM,EACJ,WAAW,EACX,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,eAAe,EACf,OAAO,EACP,KAAK,GACN,GAAG,MAAM,CAAC;QAEX,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE/C,MAAM,mBAAmB,GAAG,kBAAkB,CAC5C,OAAO,EACP,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,EAAE,CAAC,CACpC,CAAC;QAEF,uCAAuC;QACvC,MAAM,MAAM,GAAG,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,aAAa,GAAG,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;YAC9D,mBAAmB,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE;gBAC7C,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,aAAa,EAAE,aAAa,IAAI,SAAS;gBACzC,eAAe;aAChB,CAAC,CAAC;YACH,mBAAmB,EAAE,CAAC;YAEtB,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/C,0CAA0C;YAC1C,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,WAAW,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,6BAA6B,CACrC,8DAA8D,CAC/D,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAE7D,6EAA6E;QAC7E,mBAAmB,EAAE,CAAC;QACtB,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE;YACzE,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,aAAa;YAC5B,eAAe;SAChB,CAAC,CAAC;QAEH,QAAQ,CAAC;YACP,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,yCAAyC;YAClD,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,WAAW;gBACpB,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACzD,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;QAEH,qFAAqF;QACrF,MAAM,UAAU,GAAuB,CAAC,MAAM;YAC5C,oBAAoB,CAAuB,CAAC;QAC9C,0EAA0E;QAC1E,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC;QAC3D,MAAM,QAAQ,GAAG,OAAgB,CAAC;QAClC,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,YAAY,GAAuB,cAAc;YACrD,CAAC,CAAE,UAAiC;YACpC,CAAC,CAAE,OAAO,CAAC,MAAM,CAAC;gBACd,CAAC,QAAQ,CAAC,EAAE,UAAwB;aACrC,CAAwB,CAAC;QAE9B,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,GACtC,+BAA+B,CAAC,YAAY,CAAC,CAAC;QAEhD,mBAAmB,EAAE,CAAC;QACtB,MAAM,kBAAkB,GACtB,MAAM,UAAU,CAAqB;YACnC,WAAW;YACX,WAAW,EAAE,YAAY;YACzB,MAAM,EAAE,iBAAuC;YAC/C,SAAS;YACT,wBAAwB,EAAE,IAAI,CAAC,YAAY;YAC3C,MAAM,EAAE,QAAQ;YAChB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;SAC5C,CAAC,CAAC;QAEL,MAAM,EACJ,QAAQ,EAAE,EAAE,SAAS,EAAE,EACvB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GAAG,CAAC,EACpB,mBAAmB,GAAG,CAAC,EACvB,iBAAiB,EACjB,GAAG,IAAI,EACR,GAAG,kBAAkB,CAAC;QACvB,IAAI,MAAM,GAAG,IAAgD,CAAC;QAE9D,4CAA4C;QAC5C,IAAI,CAAC,SAAS,EAAE,CACd,cAAc,CAAC,OAAO,EACtB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,CAClB,CAAC;QAEF,2EAA2E;QAC3E,MAAM,OAAO,GAA8B,CAAC,cAAc,IAAI,EAAE,CAG/D,CAAC;QACF,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,aAAa,EAAE,CAAC;YACzC,UAAU,CACR,MAAiC,EACjC,QAAQ,EACR,OAA4C,CAC7C,CAAC;QACJ,CAAC;QACD,sDAAsD;QACtD,IAAI,CAAC,cAAc,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC5D,MAAM,GAAI,MAAkC,CAAC,QAAQ,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,mBAAmB,GAAG,GAAG,CAAC;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC;QAC3D,MAAM,aAAa,GACjB,YAAY,CAAC,MAAM,GAAG,mBAAmB;YACvC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,GAAG,KAAK;YACpD,CAAC,CAAC,YAAY,CAAC;QAEnB,QAAQ,CAAC;YACP,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,SAAS;gBAChB,CAAC,CAAC,mCAAmC;gBACrC,CAAC,CAAC,iDAAiD;YACrD,KAAK,EAAE,CAAC;YACR,SAAS,EAAE;gBACT,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC/D,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACvE,iBAAiB,EAAE;oBACjB,KAAK,EAAE,MAAM,CAAC,iBAAiB,CAAC;oBAChC,IAAI,EAAE,QAAQ;iBACf;gBACD,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE;aACjD;SACF,CAAC,CAAC;QAEH,OAAO,MAAiC,CAAC;IAC3C,CAAC;CACF","sourcesContent":["// lib/v3/handlers/extractHandler.ts\nimport { extract as runExtract } from \"../../inference.js\";\nimport {\n getZFactory,\n getZodType,\n injectUrls,\n transformSchema,\n} from \"../../utils.js\";\nimport { v3Logger } from \"../logger.js\";\nimport { V3FunctionName } from \"../types/public/methods.js\";\nimport { captureHybridSnapshot } from \"../understudy/a11y/snapshot/index.js\";\nimport type { ZodTypeAny } from \"zod\";\nimport { LLMClient } from \"../llm/LLMClient.js\";\nimport { ExtractHandlerParams } from \"../types/private/handlers.js\";\nimport { EncodedId, ZodPathSegments } from \"../types/private/internal.js\";\nimport {\n defaultExtractSchema,\n pageTextSchema,\n} from \"../types/public/methods.js\";\nimport {\n AvailableModel,\n ClientOptions,\n ModelConfiguration,\n} from \"../types/public/model.js\";\nimport {\n StagehandInvalidArgumentError,\n ExtractTimeoutError,\n} from \"../types/public/sdkErrors.js\";\nimport { createTimeoutGuard } from \"./handlerUtils/timeoutGuard.js\";\nimport type {\n InferStagehandSchema,\n StagehandZodObject,\n StagehandZodSchema,\n} from \"../zodCompat.js\";\n\n/**\n * Scans the provided Zod schema for any `z.string().url()` fields and\n * replaces them with `z.number()`.\n *\n * @param schema - The Zod object schema to transform.\n * @returns A tuple containing:\n * 1. The transformed schema (or the original schema if no changes were needed).\n * 2. An array of {@link ZodPathSegments} objects representing all the replaced URL fields,\n * with each path segment showing where in the schema the replacement occurred.\n */\nexport function transformUrlStringsToNumericIds<T extends StagehandZodSchema>(\n schema: T,\n): [StagehandZodSchema, ZodPathSegments[]] {\n const [finalSchema, urlPaths] = transformSchema(schema, []);\n return [finalSchema, urlPaths];\n}\n\ninterface ExtractionResponseBase {\n metadata: { completed: boolean };\n prompt_tokens: number;\n completion_tokens: number;\n reasoning_tokens: number;\n cached_input_tokens?: number;\n inference_time_ms: number;\n}\n\ntype ExtractionResponse<T extends StagehandZodObject> = ExtractionResponseBase &\n InferStagehandSchema<T>;\n\nexport class ExtractHandler {\n private readonly llmClient: LLMClient;\n private readonly defaultModelName: AvailableModel;\n private readonly defaultClientOptions: ClientOptions;\n private readonly resolveLlmClient: (model?: ModelConfiguration) => LLMClient;\n private readonly systemPrompt: string;\n private readonly logInferenceToFile: boolean;\n private readonly experimental: boolean;\n private readonly onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void;\n\n constructor(\n llmClient: LLMClient,\n defaultModelName: AvailableModel,\n defaultClientOptions: ClientOptions,\n resolveLlmClient: (model?: ModelConfiguration) => LLMClient,\n systemPrompt?: string,\n logInferenceToFile?: boolean,\n experimental?: boolean,\n onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void,\n ) {\n this.llmClient = llmClient;\n this.defaultModelName = defaultModelName;\n this.defaultClientOptions = defaultClientOptions;\n this.resolveLlmClient = resolveLlmClient;\n this.systemPrompt = systemPrompt ?? \"\";\n this.logInferenceToFile = logInferenceToFile ?? false;\n this.experimental = experimental ?? false;\n this.onMetrics = onMetrics;\n }\n\n async extract<T extends StagehandZodSchema>(\n params: ExtractHandlerParams<T>,\n ): Promise<InferStagehandSchema<T> | { pageText: string }> {\n const {\n instruction,\n schema,\n page,\n selector,\n ignoreSelectors,\n timeout,\n model,\n } = params;\n\n const llmClient = this.resolveLlmClient(model);\n\n const ensureTimeRemaining = createTimeoutGuard(\n timeout,\n (ms) => new ExtractTimeoutError(ms),\n );\n\n // No-args → page text (parity with v2)\n const noArgs = !instruction && !schema;\n if (noArgs) {\n const focusSelector = selector?.replace(/^xpath=/i, \"\") ?? \"\";\n ensureTimeRemaining();\n const snap = await captureHybridSnapshot(page, {\n experimental: this.experimental,\n focusSelector: focusSelector || undefined,\n ignoreSelectors,\n });\n ensureTimeRemaining();\n\n const result = { pageText: snap.combinedTree };\n // Validate via the same schema used in v2\n return pageTextSchema.parse(result);\n }\n\n if (!instruction && schema) {\n throw new StagehandInvalidArgumentError(\n \"extract() requires an instruction when a schema is provided.\",\n );\n }\n\n const focusSelector = selector?.replace(/^xpath=/, \"\") ?? \"\";\n\n // Build the hybrid snapshot (includes combinedTree; combinedUrlMap optional)\n ensureTimeRemaining();\n const { combinedTree, combinedUrlMap } = await captureHybridSnapshot(page, {\n experimental: this.experimental,\n focusSelector: focusSelector,\n ignoreSelectors,\n });\n\n v3Logger({\n category: \"extraction\",\n message: \"Starting extraction using a11y snapshot\",\n level: 1,\n auxiliary: instruction\n ? { instruction: { value: instruction, type: \"string\" } }\n : undefined,\n });\n\n // Normalize schema: if instruction provided without schema, use defaultExtractSchema\n const baseSchema: StagehandZodSchema = (schema ??\n defaultExtractSchema) as StagehandZodSchema;\n // Ensure we pass an object schema into inference; wrap non-object schemas\n const isObjectSchema = getZodType(baseSchema) === \"object\";\n const WRAP_KEY = \"value\" as const;\n const factory = getZFactory(baseSchema);\n const objectSchema: StagehandZodObject = isObjectSchema\n ? (baseSchema as StagehandZodObject)\n : (factory.object({\n [WRAP_KEY]: baseSchema as ZodTypeAny,\n }) as StagehandZodObject);\n\n const [transformedSchema, urlFieldPaths] =\n transformUrlStringsToNumericIds(objectSchema);\n\n ensureTimeRemaining();\n const extractionResponse: ExtractionResponse<StagehandZodObject> =\n await runExtract<StagehandZodObject>({\n instruction,\n domElements: combinedTree,\n schema: transformedSchema as StagehandZodObject,\n llmClient,\n userProvidedInstructions: this.systemPrompt,\n logger: v3Logger,\n logInferenceToFile: this.logInferenceToFile,\n });\n\n const {\n metadata: { completed },\n prompt_tokens,\n completion_tokens,\n reasoning_tokens = 0,\n cached_input_tokens = 0,\n inference_time_ms,\n ...rest\n } = extractionResponse;\n let output = rest as InferStagehandSchema<StagehandZodObject>;\n\n // Update EXTRACT metrics from the LLM calls\n this.onMetrics?.(\n V3FunctionName.EXTRACT,\n prompt_tokens,\n completion_tokens,\n reasoning_tokens,\n cached_input_tokens,\n inference_time_ms,\n );\n\n // Re-inject URLs for any url() fields we temporarily converted to number()\n const idToUrl: Record<EncodedId, string> = (combinedUrlMap ?? {}) as Record<\n EncodedId,\n string\n >;\n for (const { segments } of urlFieldPaths) {\n injectUrls(\n output as Record<string, unknown>,\n segments,\n idToUrl as unknown as Record<string, string>,\n );\n }\n // If we wrapped a non-object schema, unwrap the value\n if (!isObjectSchema && output && typeof output === \"object\") {\n output = (output as Record<string, unknown>)[WRAP_KEY];\n }\n\n const resultPreviewLength = 200;\n const resultString = JSON.stringify(output) ?? \"undefined\";\n const resultPreview =\n resultString.length > resultPreviewLength\n ? resultString.slice(0, resultPreviewLength) + \"...\"\n : resultString;\n\n v3Logger({\n category: \"extraction\",\n message: completed\n ? \"Extraction completed successfully\"\n : \"Extraction incomplete after processing all data\",\n level: 1,\n auxiliary: {\n prompt_tokens: { value: String(prompt_tokens), type: \"string\" },\n completion_tokens: { value: String(completion_tokens), type: \"string\" },\n inference_time_ms: {\n value: String(inference_time_ms),\n type: \"string\",\n },\n result: { value: resultPreview, type: \"string\" },\n },\n });\n\n return output as InferStagehandSchema<T>;\n }\n}\n"]}
1
+ {"version":3,"file":"extractHandler.js","sourceRoot":"","sources":["../../../../../lib/v3/handlers/extractHandler.ts"],"names":[],"mappings":"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","sourcesContent":["// lib/v3/handlers/extractHandler.ts\nimport { extract as runExtract } from \"../../inference.js\";\nimport {\n getZFactory,\n getZodType,\n injectUrls,\n transformSchema,\n} from \"../../utils.js\";\nimport { v3Logger } from \"../logger.js\";\nimport { V3FunctionName } from \"../types/public/methods.js\";\nimport { captureHybridSnapshot } from \"../understudy/a11y/snapshot/index.js\";\nimport type { ZodTypeAny } from \"zod\";\nimport { LLMClient } from \"../llm/LLMClient.js\";\nimport { ExtractHandlerParams } from \"../types/private/handlers.js\";\nimport { EncodedId, ZodPathSegments } from \"../types/private/internal.js\";\nimport {\n defaultExtractSchema,\n pageTextSchema,\n} from \"../types/public/methods.js\";\nimport {\n AvailableModel,\n ClientOptions,\n ModelConfiguration,\n} from \"../types/public/model.js\";\nimport {\n StagehandInvalidArgumentError,\n ExtractTimeoutError,\n} from \"../types/public/sdkErrors.js\";\nimport { createTimeoutGuard } from \"./handlerUtils/timeoutGuard.js\";\nimport type {\n InferStagehandSchema,\n StagehandZodObject,\n StagehandZodSchema,\n} from \"../zodCompat.js\";\n\n/**\n * Scans the provided Zod schema for any `z.string().url()` fields and\n * replaces them with `z.number()`.\n *\n * @param schema - The Zod object schema to transform.\n * @returns A tuple containing:\n * 1. The transformed schema (or the original schema if no changes were needed).\n * 2. An array of {@link ZodPathSegments} objects representing all the replaced URL fields,\n * with each path segment showing where in the schema the replacement occurred.\n */\nexport function transformUrlStringsToNumericIds<T extends StagehandZodSchema>(\n schema: T,\n): [StagehandZodSchema, ZodPathSegments[]] {\n const [finalSchema, urlPaths] = transformSchema(schema, []);\n return [finalSchema, urlPaths];\n}\n\ninterface ExtractionResponseBase {\n metadata: { completed: boolean };\n prompt_tokens: number;\n completion_tokens: number;\n reasoning_tokens: number;\n cached_input_tokens?: number;\n inference_time_ms: number;\n}\n\ntype ExtractionResponse<T extends StagehandZodObject> = ExtractionResponseBase &\n InferStagehandSchema<T>;\n\nexport class ExtractHandler {\n private readonly llmClient: LLMClient;\n private readonly defaultModelName: AvailableModel;\n private readonly defaultClientOptions: ClientOptions;\n private readonly resolveLlmClient: (model?: ModelConfiguration) => LLMClient;\n private readonly systemPrompt: string;\n private readonly logInferenceToFile: boolean;\n private readonly experimental: boolean;\n private readonly onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void;\n\n constructor(\n llmClient: LLMClient,\n defaultModelName: AvailableModel,\n defaultClientOptions: ClientOptions,\n resolveLlmClient: (model?: ModelConfiguration) => LLMClient,\n systemPrompt?: string,\n logInferenceToFile?: boolean,\n experimental?: boolean,\n onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void,\n ) {\n this.llmClient = llmClient;\n this.defaultModelName = defaultModelName;\n this.defaultClientOptions = defaultClientOptions;\n this.resolveLlmClient = resolveLlmClient;\n this.systemPrompt = systemPrompt ?? \"\";\n this.logInferenceToFile = logInferenceToFile ?? false;\n this.experimental = experimental ?? false;\n this.onMetrics = onMetrics;\n }\n\n async extract<T extends StagehandZodSchema>(\n params: ExtractHandlerParams<T>,\n ): Promise<InferStagehandSchema<T> | { pageText: string }> {\n const {\n instruction,\n schema,\n page,\n selector,\n ignoreSelectors,\n timeout,\n model,\n screenshot,\n } = params;\n\n const llmClient = this.resolveLlmClient(model);\n\n const ensureTimeRemaining = createTimeoutGuard(\n timeout,\n (ms) => new ExtractTimeoutError(ms),\n );\n\n // No-args → page text (parity with v2)\n const noArgs = !instruction && !schema;\n if (noArgs) {\n const focusSelector = selector?.replace(/^xpath=/i, \"\") ?? \"\";\n ensureTimeRemaining();\n const snap = await captureHybridSnapshot(page, {\n experimental: this.experimental,\n focusSelector: focusSelector || undefined,\n ignoreSelectors,\n });\n ensureTimeRemaining();\n\n const result = { pageText: snap.combinedTree };\n // Validate via the same schema used in v2\n return pageTextSchema.parse(result);\n }\n\n if (!instruction && schema) {\n throw new StagehandInvalidArgumentError(\n \"extract() requires an instruction when a schema is provided.\",\n );\n }\n\n if (screenshot && llmClient.type !== \"aisdk\") {\n throw new StagehandInvalidArgumentError(\n \"extract({ screenshot: true }) is only supported with AI SDK clients.\",\n );\n }\n\n const focusSelector = selector?.replace(/^xpath=/, \"\") ?? \"\";\n\n // Build the hybrid snapshot (includes combinedTree; combinedUrlMap optional)\n ensureTimeRemaining();\n const { combinedTree, combinedUrlMap } = await captureHybridSnapshot(page, {\n experimental: this.experimental,\n focusSelector: focusSelector,\n ignoreSelectors,\n });\n\n const screenshotBuffer = screenshot\n ? await (async () => {\n ensureTimeRemaining();\n const buffer = await page.screenshot({\n fullPage: false,\n type: \"png\",\n });\n ensureTimeRemaining();\n return buffer;\n })()\n : undefined;\n\n v3Logger({\n category: \"extraction\",\n message: screenshot\n ? \"Starting extraction using a11y snapshot and viewport screenshot\"\n : \"Starting extraction using a11y snapshot\",\n level: 1,\n auxiliary: instruction\n ? { instruction: { value: instruction, type: \"string\" } }\n : undefined,\n });\n\n // Normalize schema: if instruction provided without schema, use defaultExtractSchema\n const baseSchema: StagehandZodSchema = (schema ??\n defaultExtractSchema) as StagehandZodSchema;\n // Ensure we pass an object schema into inference; wrap non-object schemas\n const isObjectSchema = getZodType(baseSchema) === \"object\";\n const WRAP_KEY = \"value\" as const;\n const factory = getZFactory(baseSchema);\n const objectSchema: StagehandZodObject = isObjectSchema\n ? (baseSchema as StagehandZodObject)\n : (factory.object({\n [WRAP_KEY]: baseSchema as ZodTypeAny,\n }) as StagehandZodObject);\n\n const [transformedSchema, urlFieldPaths] =\n transformUrlStringsToNumericIds(objectSchema);\n\n ensureTimeRemaining();\n const extractionResponse: ExtractionResponse<StagehandZodObject> =\n await runExtract<StagehandZodObject>({\n instruction,\n domElements: combinedTree,\n schema: transformedSchema as StagehandZodObject,\n llmClient,\n userProvidedInstructions: this.systemPrompt,\n logger: v3Logger,\n logInferenceToFile: this.logInferenceToFile,\n screenshot: screenshotBuffer,\n });\n\n const {\n metadata: { completed },\n prompt_tokens,\n completion_tokens,\n reasoning_tokens = 0,\n cached_input_tokens = 0,\n inference_time_ms,\n ...rest\n } = extractionResponse;\n let output = rest as InferStagehandSchema<StagehandZodObject>;\n\n // Update EXTRACT metrics from the LLM calls\n this.onMetrics?.(\n V3FunctionName.EXTRACT,\n prompt_tokens,\n completion_tokens,\n reasoning_tokens,\n cached_input_tokens,\n inference_time_ms,\n );\n\n // Re-inject URLs for any url() fields we temporarily converted to number()\n const idToUrl: Record<EncodedId, string> = (combinedUrlMap ?? {}) as Record<\n EncodedId,\n string\n >;\n for (const { segments } of urlFieldPaths) {\n injectUrls(\n output as Record<string, unknown>,\n segments,\n idToUrl as unknown as Record<string, string>,\n );\n }\n // If we wrapped a non-object schema, unwrap the value\n if (!isObjectSchema && output && typeof output === \"object\") {\n output = (output as Record<string, unknown>)[WRAP_KEY];\n }\n\n const resultPreviewLength = 200;\n const resultString = JSON.stringify(output) ?? \"undefined\";\n const resultPreview =\n resultString.length > resultPreviewLength\n ? resultString.slice(0, resultPreviewLength) + \"...\"\n : resultString;\n\n v3Logger({\n category: \"extraction\",\n message: completed\n ? \"Extraction completed successfully\"\n : \"Extraction incomplete after processing all data\",\n level: 1,\n auxiliary: {\n prompt_tokens: { value: String(prompt_tokens), type: \"string\" },\n completion_tokens: { value: String(completion_tokens), type: \"string\" },\n inference_time_ms: {\n value: String(inference_time_ms),\n type: \"string\",\n },\n result: { value: resultPreview, type: \"string\" },\n },\n });\n\n return output as InferStagehandSchema<T>;\n }\n}\n"]}
@@ -27,7 +27,7 @@ export class ObserveHandler {
27
27
  this.onMetrics = onMetrics;
28
28
  }
29
29
  async observe(params) {
30
- const { instruction, page, timeout, selector, model, variables } = params;
30
+ const { instruction, page, timeout, selector, ignoreSelectors, model, variables, } = params;
31
31
  const llmClient = this.resolveLlmClient(model);
32
32
  const ensureTimeRemaining = createTimeoutGuard(timeout, (ms) => new ObserveTimeoutError(ms));
33
33
  const effectiveInstruction = instruction ??
@@ -49,6 +49,7 @@ export class ObserveHandler {
49
49
  const snapshot = await captureHybridSnapshot(page, {
50
50
  experimental: this.experimental,
51
51
  focusSelector: focusSelector || undefined,
52
+ ignoreSelectors,
52
53
  });
53
54
  const combinedTree = snapshot.combinedTree;
54
55
  const combinedXpathMap = snapshot.combinedXpathMap ?? {};
@@ -1 +1 @@
1
- {"version":3,"file":"observeHandler.js","sourceRoot":"","sources":["../../../../../lib/v3/handlers/observeHandler.ts"],"names":[],"mappings":"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","sourcesContent":["// lib/v3/handlers/observeHandler.ts\nimport { observe as runObserve } from \"../../inference.js\";\nimport { trimTrailingTextNode } from \"../../utils.js\";\nimport { v3Logger } from \"../logger.js\";\nimport { V3FunctionName } from \"../types/public/methods.js\";\nimport { captureHybridSnapshot } from \"../understudy/a11y/snapshot/index.js\";\nimport { LLMClient } from \"../llm/LLMClient.js\";\nimport {\n ObserveHandlerParams,\n SupportedUnderstudyAction,\n} from \"../types/private/handlers.js\";\nimport { EncodedId } from \"../types/private/internal.js\";\nimport { Action } from \"../types/public/methods.js\";\nimport {\n AvailableModel,\n ClientOptions,\n ModelConfiguration,\n} from \"../types/public/model.js\";\nimport { ObserveTimeoutError } from \"../types/public/sdkErrors.js\";\nimport { createTimeoutGuard } from \"./handlerUtils/timeoutGuard.js\";\n\nexport class ObserveHandler {\n private readonly llmClient: LLMClient;\n private readonly defaultModelName: AvailableModel;\n private readonly defaultClientOptions: ClientOptions;\n private readonly resolveLlmClient: (model?: ModelConfiguration) => LLMClient;\n private readonly systemPrompt: string;\n private readonly logInferenceToFile: boolean;\n private readonly experimental: boolean;\n private readonly onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void;\n\n constructor(\n llmClient: LLMClient,\n defaultModelName: AvailableModel,\n defaultClientOptions: ClientOptions,\n resolveLlmClient: (model?: ModelConfiguration) => LLMClient,\n systemPrompt?: string,\n logInferenceToFile?: boolean,\n experimental?: boolean,\n onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void,\n ) {\n this.llmClient = llmClient;\n this.defaultModelName = defaultModelName;\n this.defaultClientOptions = defaultClientOptions;\n this.resolveLlmClient = resolveLlmClient;\n this.systemPrompt = systemPrompt ?? \"\";\n this.logInferenceToFile = logInferenceToFile ?? false;\n this.experimental = experimental ?? false;\n this.onMetrics = onMetrics;\n }\n\n async observe(params: ObserveHandlerParams): Promise<Action[]> {\n const { instruction, page, timeout, selector, model, variables } = params;\n\n const llmClient = this.resolveLlmClient(model);\n\n const ensureTimeRemaining = createTimeoutGuard(\n timeout,\n (ms) => new ObserveTimeoutError(ms),\n );\n\n const effectiveInstruction =\n instruction ??\n \"Find elements that can be used for any future actions in the page. These may be navigation links, related pages, section/subsection links, buttons, or other interactive elements. Be comprehensive: if there are multiple elements that may be relevant for future actions, return all of them.\";\n\n v3Logger({\n category: \"observation\",\n message: \"starting observation\",\n level: 1,\n auxiliary: {\n instruction: {\n value: effectiveInstruction,\n type: \"string\",\n },\n },\n });\n\n // Build the hybrid snapshot (a11y-centric text tree + lookup maps)\n const focusSelector = selector?.replace(/^xpath=/i, \"\") ?? \"\";\n ensureTimeRemaining();\n const snapshot = await captureHybridSnapshot(page, {\n experimental: this.experimental,\n focusSelector: focusSelector || undefined,\n });\n\n const combinedTree = snapshot.combinedTree;\n const combinedXpathMap = snapshot.combinedXpathMap ?? {};\n\n v3Logger({\n category: \"observation\",\n message: \"Got accessibility tree data\",\n level: 1,\n });\n\n // Call the LLM to propose actionable elements\n ensureTimeRemaining();\n const observationResponse = await runObserve({\n instruction: effectiveInstruction,\n domElements: combinedTree,\n llmClient,\n userProvidedInstructions: this.systemPrompt,\n logger: v3Logger,\n logInferenceToFile: this.logInferenceToFile,\n supportedActions: Object.values(SupportedUnderstudyAction),\n variables,\n });\n\n const {\n prompt_tokens = 0,\n completion_tokens = 0,\n reasoning_tokens = 0,\n cached_input_tokens = 0,\n inference_time_ms = 0,\n } = observationResponse;\n\n // Update OBSERVE metrics from the LLM observation call\n this.onMetrics?.(\n V3FunctionName.OBSERVE,\n prompt_tokens,\n completion_tokens,\n reasoning_tokens,\n cached_input_tokens,\n inference_time_ms,\n );\n\n // Map elementIds -> selectors via combinedXpathMap\n const elementsWithSelectors = (\n await Promise.all(\n observationResponse.elements.map(async (element) => {\n const { elementId, ...rest } = element; // rest may or may not have method/arguments\n if (typeof elementId === \"string\" && elementId.includes(\"-\")) {\n const lookUpIndex = elementId as EncodedId;\n const xpath = combinedXpathMap[lookUpIndex];\n const trimmedXpath = trimTrailingTextNode(xpath);\n if (!trimmedXpath) return undefined;\n\n // For dragAndDrop, convert element ID in arguments to xpath (target element)\n let resolvedArgs = rest.arguments;\n if (\n rest.method === \"dragAndDrop\" &&\n Array.isArray(rest.arguments) &&\n rest.arguments.length > 0\n ) {\n const targetArg = rest.arguments[0];\n // Check if argument looks like an element ID (e.g., \"1-67\")\n if (\n typeof targetArg === \"string\" &&\n /^\\d+-\\d+$/.test(targetArg)\n ) {\n const argXpath = combinedXpathMap[targetArg as EncodedId];\n const trimmedArgXpath = trimTrailingTextNode(argXpath);\n if (trimmedArgXpath) {\n resolvedArgs = [\n `xpath=${trimmedArgXpath}`,\n ...rest.arguments.slice(1),\n ];\n } else {\n // Target element lookup failed, filter out this action\n v3Logger({\n category: \"observation\",\n message: \"dragAndDrop target element lookup failed\",\n level: 0,\n auxiliary: {\n targetElementId: { value: targetArg, type: \"string\" },\n sourceElementId: { value: elementId, type: \"string\" },\n },\n });\n return undefined;\n }\n } else {\n v3Logger({\n category: \"observation\",\n message: \"dragAndDrop target element invalid ID format\",\n level: 0,\n auxiliary: {\n targetElementId: { value: targetArg, type: \"string\" },\n sourceElementId: { value: elementId, type: \"string\" },\n },\n });\n return undefined;\n }\n }\n\n return {\n ...rest,\n arguments: resolvedArgs,\n selector: `xpath=${trimmedXpath}`,\n } as {\n description: string;\n method?: string;\n arguments?: string[];\n selector: string;\n };\n }\n // shadow-root fallback:\n return {\n description: \"an element inside a shadow DOM\",\n method: \"not-supported\",\n arguments: [],\n selector: \"not-supported\",\n };\n }),\n )\n ).filter(<T>(e: T | undefined): e is T => e !== undefined);\n\n v3Logger({\n category: \"observation\",\n message: \"found elements\",\n level: 1,\n auxiliary: {\n elements: {\n value: JSON.stringify(elementsWithSelectors),\n type: \"object\",\n },\n },\n });\n\n return elementsWithSelectors;\n }\n}\n"]}
1
+ {"version":3,"file":"observeHandler.js","sourceRoot":"","sources":["../../../../../lib/v3/handlers/observeHandler.ts"],"names":[],"mappings":"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","sourcesContent":["// lib/v3/handlers/observeHandler.ts\nimport { observe as runObserve } from \"../../inference.js\";\nimport { trimTrailingTextNode } from \"../../utils.js\";\nimport { v3Logger } from \"../logger.js\";\nimport { V3FunctionName } from \"../types/public/methods.js\";\nimport { captureHybridSnapshot } from \"../understudy/a11y/snapshot/index.js\";\nimport { LLMClient } from \"../llm/LLMClient.js\";\nimport {\n ObserveHandlerParams,\n SupportedUnderstudyAction,\n} from \"../types/private/handlers.js\";\nimport { EncodedId } from \"../types/private/internal.js\";\nimport { Action } from \"../types/public/methods.js\";\nimport {\n AvailableModel,\n ClientOptions,\n ModelConfiguration,\n} from \"../types/public/model.js\";\nimport { ObserveTimeoutError } from \"../types/public/sdkErrors.js\";\nimport { createTimeoutGuard } from \"./handlerUtils/timeoutGuard.js\";\n\nexport class ObserveHandler {\n private readonly llmClient: LLMClient;\n private readonly defaultModelName: AvailableModel;\n private readonly defaultClientOptions: ClientOptions;\n private readonly resolveLlmClient: (model?: ModelConfiguration) => LLMClient;\n private readonly systemPrompt: string;\n private readonly logInferenceToFile: boolean;\n private readonly experimental: boolean;\n private readonly onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void;\n\n constructor(\n llmClient: LLMClient,\n defaultModelName: AvailableModel,\n defaultClientOptions: ClientOptions,\n resolveLlmClient: (model?: ModelConfiguration) => LLMClient,\n systemPrompt?: string,\n logInferenceToFile?: boolean,\n experimental?: boolean,\n onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void,\n ) {\n this.llmClient = llmClient;\n this.defaultModelName = defaultModelName;\n this.defaultClientOptions = defaultClientOptions;\n this.resolveLlmClient = resolveLlmClient;\n this.systemPrompt = systemPrompt ?? \"\";\n this.logInferenceToFile = logInferenceToFile ?? false;\n this.experimental = experimental ?? false;\n this.onMetrics = onMetrics;\n }\n\n async observe(params: ObserveHandlerParams): Promise<Action[]> {\n const {\n instruction,\n page,\n timeout,\n selector,\n ignoreSelectors,\n model,\n variables,\n } = params;\n\n const llmClient = this.resolveLlmClient(model);\n\n const ensureTimeRemaining = createTimeoutGuard(\n timeout,\n (ms) => new ObserveTimeoutError(ms),\n );\n\n const effectiveInstruction =\n instruction ??\n \"Find elements that can be used for any future actions in the page. These may be navigation links, related pages, section/subsection links, buttons, or other interactive elements. Be comprehensive: if there are multiple elements that may be relevant for future actions, return all of them.\";\n\n v3Logger({\n category: \"observation\",\n message: \"starting observation\",\n level: 1,\n auxiliary: {\n instruction: {\n value: effectiveInstruction,\n type: \"string\",\n },\n },\n });\n\n // Build the hybrid snapshot (a11y-centric text tree + lookup maps)\n const focusSelector = selector?.replace(/^xpath=/i, \"\") ?? \"\";\n ensureTimeRemaining();\n const snapshot = await captureHybridSnapshot(page, {\n experimental: this.experimental,\n focusSelector: focusSelector || undefined,\n ignoreSelectors,\n });\n\n const combinedTree = snapshot.combinedTree;\n const combinedXpathMap = snapshot.combinedXpathMap ?? {};\n\n v3Logger({\n category: \"observation\",\n message: \"Got accessibility tree data\",\n level: 1,\n });\n\n // Call the LLM to propose actionable elements\n ensureTimeRemaining();\n const observationResponse = await runObserve({\n instruction: effectiveInstruction,\n domElements: combinedTree,\n llmClient,\n userProvidedInstructions: this.systemPrompt,\n logger: v3Logger,\n logInferenceToFile: this.logInferenceToFile,\n supportedActions: Object.values(SupportedUnderstudyAction),\n variables,\n });\n\n const {\n prompt_tokens = 0,\n completion_tokens = 0,\n reasoning_tokens = 0,\n cached_input_tokens = 0,\n inference_time_ms = 0,\n } = observationResponse;\n\n // Update OBSERVE metrics from the LLM observation call\n this.onMetrics?.(\n V3FunctionName.OBSERVE,\n prompt_tokens,\n completion_tokens,\n reasoning_tokens,\n cached_input_tokens,\n inference_time_ms,\n );\n\n // Map elementIds -> selectors via combinedXpathMap\n const elementsWithSelectors = (\n await Promise.all(\n observationResponse.elements.map(async (element) => {\n const { elementId, ...rest } = element; // rest may or may not have method/arguments\n if (typeof elementId === \"string\" && elementId.includes(\"-\")) {\n const lookUpIndex = elementId as EncodedId;\n const xpath = combinedXpathMap[lookUpIndex];\n const trimmedXpath = trimTrailingTextNode(xpath);\n if (!trimmedXpath) return undefined;\n\n // For dragAndDrop, convert element ID in arguments to xpath (target element)\n let resolvedArgs = rest.arguments;\n if (\n rest.method === \"dragAndDrop\" &&\n Array.isArray(rest.arguments) &&\n rest.arguments.length > 0\n ) {\n const targetArg = rest.arguments[0];\n // Check if argument looks like an element ID (e.g., \"1-67\")\n if (\n typeof targetArg === \"string\" &&\n /^\\d+-\\d+$/.test(targetArg)\n ) {\n const argXpath = combinedXpathMap[targetArg as EncodedId];\n const trimmedArgXpath = trimTrailingTextNode(argXpath);\n if (trimmedArgXpath) {\n resolvedArgs = [\n `xpath=${trimmedArgXpath}`,\n ...rest.arguments.slice(1),\n ];\n } else {\n // Target element lookup failed, filter out this action\n v3Logger({\n category: \"observation\",\n message: \"dragAndDrop target element lookup failed\",\n level: 0,\n auxiliary: {\n targetElementId: { value: targetArg, type: \"string\" },\n sourceElementId: { value: elementId, type: \"string\" },\n },\n });\n return undefined;\n }\n } else {\n v3Logger({\n category: \"observation\",\n message: \"dragAndDrop target element invalid ID format\",\n level: 0,\n auxiliary: {\n targetElementId: { value: targetArg, type: \"string\" },\n sourceElementId: { value: elementId, type: \"string\" },\n },\n });\n return undefined;\n }\n }\n\n return {\n ...rest,\n arguments: resolvedArgs,\n selector: `xpath=${trimmedXpath}`,\n } as {\n description: string;\n method?: string;\n arguments?: string[];\n selector: string;\n };\n }\n // shadow-root fallback:\n return {\n description: \"an element inside a shadow DOM\",\n method: \"not-supported\",\n arguments: [],\n selector: \"not-supported\",\n };\n }),\n )\n ).filter(<T>(e: T | undefined): e is T => e !== undefined);\n\n v3Logger({\n category: \"observation\",\n message: \"found elements\",\n level: 1,\n auxiliary: {\n elements: {\n value: JSON.stringify(elementsWithSelectors),\n type: \"object\",\n },\n },\n });\n\n return elementsWithSelectors;\n }\n}\n"]}
@@ -246,6 +246,7 @@ export class V3CuaAgentHandler {
246
246
  }
247
247
  return { success: true };
248
248
  }
249
+ case "triple_click":
249
250
  case "tripleClick": {
250
251
  const { x, y } = action;
251
252
  if (recording) {