@browserbasehq/orca 3.4.0-preview-3 → 3.4.0-preview-5

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 (785) hide show
  1. package/dist/cjs/lib/v3/agent/AgentProvider.d.ts +1 -1
  2. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  3. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +10 -0
  4. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  5. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +1 -0
  6. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  7. package/dist/cjs/lib/v3/launch/local.d.ts +2 -7
  8. package/dist/cjs/lib/v3/launch/local.js +47 -7
  9. package/dist/cjs/lib/v3/launch/local.js.map +1 -1
  10. package/dist/cjs/lib/v3/llm/aisdk.js +5 -0
  11. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  12. package/dist/cjs/lib/v3/types/private/snapshot.d.ts +2 -0
  13. package/dist/cjs/lib/v3/types/private/snapshot.js.map +1 -1
  14. package/dist/cjs/lib/v3/types/public/agent.d.ts +1 -1
  15. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  16. package/dist/cjs/lib/v3/types/public/api.d.ts +283 -0
  17. package/dist/cjs/lib/v3/types/public/api.js +50 -3
  18. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  19. package/dist/cjs/lib/v3/types/public/model.d.ts +11 -7
  20. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  21. package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.js +25 -0
  22. package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.js.map +1 -1
  23. package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js +10 -1
  24. package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js.map +1 -1
  25. package/dist/cjs/lib/v3/v3.js +2 -47
  26. package/dist/cjs/lib/v3/v3.js.map +1 -1
  27. package/dist/cjs/lib/version.d.ts +1 -1
  28. package/dist/cjs/lib/version.js +1 -1
  29. package/dist/cjs/lib/version.js.map +1 -1
  30. package/dist/esm/lib/v3/agent/AgentProvider.d.ts +1 -1
  31. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  32. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +10 -0
  33. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  34. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +1 -0
  35. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  36. package/dist/esm/lib/v3/launch/local.d.ts +2 -7
  37. package/dist/esm/lib/v3/launch/local.js +48 -8
  38. package/dist/esm/lib/v3/launch/local.js.map +1 -1
  39. package/dist/esm/lib/v3/llm/aisdk.js +5 -0
  40. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  41. package/dist/esm/lib/v3/types/private/snapshot.d.ts +2 -0
  42. package/dist/esm/lib/v3/types/private/snapshot.js.map +1 -1
  43. package/dist/esm/lib/v3/types/public/agent.d.ts +1 -1
  44. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  45. package/dist/esm/lib/v3/types/public/api.d.ts +283 -0
  46. package/dist/esm/lib/v3/types/public/api.js +48 -1
  47. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  48. package/dist/esm/lib/v3/types/public/model.d.ts +11 -7
  49. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  50. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js +25 -0
  51. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js.map +1 -1
  52. package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js +10 -1
  53. package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js.map +1 -1
  54. package/dist/esm/lib/v3/v3.js +2 -47
  55. package/dist/esm/lib/v3/v3.js.map +1 -1
  56. package/dist/esm/lib/version.d.ts +1 -1
  57. package/dist/esm/lib/version.js +1 -1
  58. package/dist/esm/lib/version.js.map +1 -1
  59. package/package.json +8 -8
  60. package/dist/cjs/tests/cache-variables.test.d.ts +0 -1
  61. package/dist/cjs/tests/cache-variables.test.js +0 -221
  62. package/dist/cjs/tests/cache-variables.test.js.map +0 -1
  63. package/dist/cjs/tests/integration/agent-abort-signal.spec.d.ts +0 -1
  64. package/dist/cjs/tests/integration/agent-abort-signal.spec.js +0 -123
  65. package/dist/cjs/tests/integration/agent-abort-signal.spec.js.map +0 -1
  66. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.d.ts +0 -1
  67. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js +0 -83
  68. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js.map +0 -1
  69. package/dist/cjs/tests/integration/agent-callbacks.spec.d.ts +0 -1
  70. package/dist/cjs/tests/integration/agent-callbacks.spec.js +0 -385
  71. package/dist/cjs/tests/integration/agent-callbacks.spec.js.map +0 -1
  72. package/dist/cjs/tests/integration/agent-experimental-validation.spec.d.ts +0 -1
  73. package/dist/cjs/tests/integration/agent-experimental-validation.spec.js +0 -362
  74. package/dist/cjs/tests/integration/agent-experimental-validation.spec.js.map +0 -1
  75. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.d.ts +0 -1
  76. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +0 -262
  77. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +0 -1
  78. package/dist/cjs/tests/integration/agent-message-continuation.spec.d.ts +0 -1
  79. package/dist/cjs/tests/integration/agent-message-continuation.spec.js +0 -112
  80. package/dist/cjs/tests/integration/agent-message-continuation.spec.js.map +0 -1
  81. package/dist/cjs/tests/integration/agent-streaming.spec.d.ts +0 -1
  82. package/dist/cjs/tests/integration/agent-streaming.spec.js +0 -140
  83. package/dist/cjs/tests/integration/agent-streaming.spec.js.map +0 -1
  84. package/dist/cjs/tests/integration/cdp-close-api-region.spec.d.ts +0 -1
  85. package/dist/cjs/tests/integration/cdp-close-api-region.spec.js +0 -41
  86. package/dist/cjs/tests/integration/cdp-close-api-region.spec.js.map +0 -1
  87. package/dist/cjs/tests/integration/cdp-connection-close.spec.d.ts +0 -1
  88. package/dist/cjs/tests/integration/cdp-connection-close.spec.js +0 -76
  89. package/dist/cjs/tests/integration/cdp-connection-close.spec.js.map +0 -1
  90. package/dist/cjs/tests/integration/cdp-session-detached.spec.d.ts +0 -1
  91. package/dist/cjs/tests/integration/cdp-session-detached.spec.js +0 -45
  92. package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +0 -1
  93. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.d.ts +0 -1
  94. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js +0 -56
  95. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js.map +0 -1
  96. package/dist/cjs/tests/integration/click-count.spec.d.ts +0 -1
  97. package/dist/cjs/tests/integration/click-count.spec.js +0 -163
  98. package/dist/cjs/tests/integration/click-count.spec.js.map +0 -1
  99. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.d.ts +0 -1
  100. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js +0 -99
  101. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js.map +0 -1
  102. package/dist/cjs/tests/integration/context-addInitScript.spec.d.ts +0 -1
  103. package/dist/cjs/tests/integration/context-addInitScript.spec.js +0 -285
  104. package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +0 -1
  105. package/dist/cjs/tests/integration/context-extra-http-headers.spec.d.ts +0 -1
  106. package/dist/cjs/tests/integration/context-extra-http-headers.spec.js +0 -49
  107. package/dist/cjs/tests/integration/context-extra-http-headers.spec.js.map +0 -1
  108. package/dist/cjs/tests/integration/cookies.spec.d.ts +0 -1
  109. package/dist/cjs/tests/integration/cookies.spec.js +0 -187
  110. package/dist/cjs/tests/integration/cookies.spec.js.map +0 -1
  111. package/dist/cjs/tests/integration/default-page-tracking.spec.d.ts +0 -1
  112. package/dist/cjs/tests/integration/default-page-tracking.spec.js +0 -52
  113. package/dist/cjs/tests/integration/default-page-tracking.spec.js.map +0 -1
  114. package/dist/cjs/tests/integration/downloads.spec.d.ts +0 -1
  115. package/dist/cjs/tests/integration/downloads.spec.js +0 -52
  116. package/dist/cjs/tests/integration/downloads.spec.js.map +0 -1
  117. package/dist/cjs/tests/integration/flowLogger.spec.d.ts +0 -1
  118. package/dist/cjs/tests/integration/flowLogger.spec.js +0 -718
  119. package/dist/cjs/tests/integration/flowLogger.spec.js.map +0 -1
  120. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.d.ts +0 -1
  121. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js +0 -57
  122. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js.map +0 -1
  123. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +0 -1
  124. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +0 -219
  125. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +0 -1
  126. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.d.ts +0 -1
  127. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js +0 -474
  128. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js.map +0 -1
  129. package/dist/cjs/tests/integration/keep-alive.child.d.ts +0 -1
  130. package/dist/cjs/tests/integration/keep-alive.child.js +0 -85
  131. package/dist/cjs/tests/integration/keep-alive.child.js.map +0 -1
  132. package/dist/cjs/tests/integration/keep-alive.spec.d.ts +0 -22
  133. package/dist/cjs/tests/integration/keep-alive.spec.js +0 -490
  134. package/dist/cjs/tests/integration/keep-alive.spec.js.map +0 -1
  135. package/dist/cjs/tests/integration/keyboard.spec.d.ts +0 -1
  136. package/dist/cjs/tests/integration/keyboard.spec.js +0 -259
  137. package/dist/cjs/tests/integration/keyboard.spec.js.map +0 -1
  138. package/dist/cjs/tests/integration/locator-backend-node-id.spec.d.ts +0 -1
  139. package/dist/cjs/tests/integration/locator-backend-node-id.spec.js +0 -150
  140. package/dist/cjs/tests/integration/locator-backend-node-id.spec.js.map +0 -1
  141. package/dist/cjs/tests/integration/locator-content-methods.spec.d.ts +0 -1
  142. package/dist/cjs/tests/integration/locator-content-methods.spec.js +0 -180
  143. package/dist/cjs/tests/integration/locator-content-methods.spec.js.map +0 -1
  144. package/dist/cjs/tests/integration/locator-count-iframe.spec.d.ts +0 -1
  145. package/dist/cjs/tests/integration/locator-count-iframe.spec.js +0 -129
  146. package/dist/cjs/tests/integration/locator-count-iframe.spec.js.map +0 -1
  147. package/dist/cjs/tests/integration/locator-count.spec.d.ts +0 -1
  148. package/dist/cjs/tests/integration/locator-count.spec.js +0 -68
  149. package/dist/cjs/tests/integration/locator-count.spec.js.map +0 -1
  150. package/dist/cjs/tests/integration/locator-fill.spec.d.ts +0 -1
  151. package/dist/cjs/tests/integration/locator-fill.spec.js +0 -117
  152. package/dist/cjs/tests/integration/locator-fill.spec.js.map +0 -1
  153. package/dist/cjs/tests/integration/locator-input-methods.spec.d.ts +0 -1
  154. package/dist/cjs/tests/integration/locator-input-methods.spec.js +0 -127
  155. package/dist/cjs/tests/integration/locator-input-methods.spec.js.map +0 -1
  156. package/dist/cjs/tests/integration/locator-nth.spec.d.ts +0 -1
  157. package/dist/cjs/tests/integration/locator-nth.spec.js +0 -175
  158. package/dist/cjs/tests/integration/locator-nth.spec.js.map +0 -1
  159. package/dist/cjs/tests/integration/locator-select-option.spec.d.ts +0 -1
  160. package/dist/cjs/tests/integration/locator-select-option.spec.js +0 -216
  161. package/dist/cjs/tests/integration/locator-select-option.spec.js.map +0 -1
  162. package/dist/cjs/tests/integration/logger-initialization.spec.d.ts +0 -1
  163. package/dist/cjs/tests/integration/logger-initialization.spec.js +0 -597
  164. package/dist/cjs/tests/integration/logger-initialization.spec.js.map +0 -1
  165. package/dist/cjs/tests/integration/multi-instance-logger.spec.d.ts +0 -1
  166. package/dist/cjs/tests/integration/multi-instance-logger.spec.js +0 -293
  167. package/dist/cjs/tests/integration/multi-instance-logger.spec.js.map +0 -1
  168. package/dist/cjs/tests/integration/nested-div.spec.d.ts +0 -1
  169. package/dist/cjs/tests/integration/nested-div.spec.js +0 -22
  170. package/dist/cjs/tests/integration/nested-div.spec.js.map +0 -1
  171. package/dist/cjs/tests/integration/observe-element-id-format.spec.d.ts +0 -1
  172. package/dist/cjs/tests/integration/observe-element-id-format.spec.js +0 -130
  173. package/dist/cjs/tests/integration/observe-element-id-format.spec.js.map +0 -1
  174. package/dist/cjs/tests/integration/page-addInitScript.spec.d.ts +0 -1
  175. package/dist/cjs/tests/integration/page-addInitScript.spec.js +0 -94
  176. package/dist/cjs/tests/integration/page-addInitScript.spec.js.map +0 -1
  177. package/dist/cjs/tests/integration/page-console.spec.d.ts +0 -1
  178. package/dist/cjs/tests/integration/page-console.spec.js +0 -47
  179. package/dist/cjs/tests/integration/page-console.spec.js.map +0 -1
  180. package/dist/cjs/tests/integration/page-drag-and-drop.spec.d.ts +0 -1
  181. package/dist/cjs/tests/integration/page-drag-and-drop.spec.js +0 -437
  182. package/dist/cjs/tests/integration/page-drag-and-drop.spec.js.map +0 -1
  183. package/dist/cjs/tests/integration/page-extra-http-headers.spec.d.ts +0 -1
  184. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +0 -85
  185. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +0 -1
  186. package/dist/cjs/tests/integration/page-goto-response.spec.d.ts +0 -1
  187. package/dist/cjs/tests/integration/page-goto-response.spec.js +0 -34
  188. package/dist/cjs/tests/integration/page-goto-response.spec.js.map +0 -1
  189. package/dist/cjs/tests/integration/page-hover.spec.d.ts +0 -1
  190. package/dist/cjs/tests/integration/page-hover.spec.js +0 -165
  191. package/dist/cjs/tests/integration/page-hover.spec.js.map +0 -1
  192. package/dist/cjs/tests/integration/page-screenshot.spec.d.ts +0 -1
  193. package/dist/cjs/tests/integration/page-screenshot.spec.js +0 -292
  194. package/dist/cjs/tests/integration/page-screenshot.spec.js.map +0 -1
  195. package/dist/cjs/tests/integration/page-scroll.spec.d.ts +0 -1
  196. package/dist/cjs/tests/integration/page-scroll.spec.js +0 -183
  197. package/dist/cjs/tests/integration/page-scroll.spec.js.map +0 -1
  198. package/dist/cjs/tests/integration/page-send-cdp.spec.d.ts +0 -1
  199. package/dist/cjs/tests/integration/page-send-cdp.spec.js +0 -47
  200. package/dist/cjs/tests/integration/page-send-cdp.spec.js.map +0 -1
  201. package/dist/cjs/tests/integration/perform-understudy-method.spec.d.ts +0 -1
  202. package/dist/cjs/tests/integration/perform-understudy-method.spec.js +0 -63
  203. package/dist/cjs/tests/integration/perform-understudy-method.spec.js.map +0 -1
  204. package/dist/cjs/tests/integration/setinputfiles.spec.d.ts +0 -1
  205. package/dist/cjs/tests/integration/setinputfiles.spec.js +0 -133
  206. package/dist/cjs/tests/integration/setinputfiles.spec.js.map +0 -1
  207. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.d.ts +0 -1
  208. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js +0 -161
  209. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js.map +0 -1
  210. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.d.ts +0 -1
  211. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js +0 -160
  212. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js.map +0 -1
  213. package/dist/cjs/tests/integration/testUtils.d.ts +0 -40
  214. package/dist/cjs/tests/integration/testUtils.js +0 -188
  215. package/dist/cjs/tests/integration/testUtils.js.map +0 -1
  216. package/dist/cjs/tests/integration/text-selector-innermost.spec.d.ts +0 -1
  217. package/dist/cjs/tests/integration/text-selector-innermost.spec.js +0 -105
  218. package/dist/cjs/tests/integration/text-selector-innermost.spec.js.map +0 -1
  219. package/dist/cjs/tests/integration/timeouts.spec.d.ts +0 -1
  220. package/dist/cjs/tests/integration/timeouts.spec.js +0 -309
  221. package/dist/cjs/tests/integration/timeouts.spec.js.map +0 -1
  222. package/dist/cjs/tests/integration/user-data-dir.spec.d.ts +0 -1
  223. package/dist/cjs/tests/integration/user-data-dir.spec.js +0 -77
  224. package/dist/cjs/tests/integration/user-data-dir.spec.js.map +0 -1
  225. package/dist/cjs/tests/integration/v3.config.d.ts +0 -4
  226. package/dist/cjs/tests/integration/v3.config.js +0 -11
  227. package/dist/cjs/tests/integration/v3.config.js.map +0 -1
  228. package/dist/cjs/tests/integration/v3.dynamic.config.d.ts +0 -4
  229. package/dist/cjs/tests/integration/v3.dynamic.config.js +0 -48
  230. package/dist/cjs/tests/integration/v3.dynamic.config.js.map +0 -1
  231. package/dist/cjs/tests/integration/v3.playwright.config.d.ts +0 -2
  232. package/dist/cjs/tests/integration/v3.playwright.config.js +0 -48
  233. package/dist/cjs/tests/integration/v3.playwright.config.js.map +0 -1
  234. package/dist/cjs/tests/integration/wait-for-selector.spec.d.ts +0 -1
  235. package/dist/cjs/tests/integration/wait-for-selector.spec.js +0 -683
  236. package/dist/cjs/tests/integration/wait-for-selector.spec.js.map +0 -1
  237. package/dist/cjs/tests/integration/wait-for-timeout.spec.d.ts +0 -1
  238. package/dist/cjs/tests/integration/wait-for-timeout.spec.js +0 -118
  239. package/dist/cjs/tests/integration/wait-for-timeout.spec.js.map +0 -1
  240. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.d.ts +0 -1
  241. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js +0 -87
  242. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js.map +0 -1
  243. package/dist/cjs/tests/unit/agent-captcha-hooks.test.d.ts +0 -1
  244. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +0 -341
  245. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +0 -1
  246. package/dist/cjs/tests/unit/agent-execution-model.test.d.ts +0 -1
  247. package/dist/cjs/tests/unit/agent-execution-model.test.js +0 -150
  248. package/dist/cjs/tests/unit/agent-execution-model.test.js.map +0 -1
  249. package/dist/cjs/tests/unit/agent-metrics.test.d.ts +0 -1
  250. package/dist/cjs/tests/unit/agent-metrics.test.js +0 -112
  251. package/dist/cjs/tests/unit/agent-metrics.test.js.map +0 -1
  252. package/dist/cjs/tests/unit/agent-mode-routing.test.d.ts +0 -1
  253. package/dist/cjs/tests/unit/agent-mode-routing.test.js +0 -88
  254. package/dist/cjs/tests/unit/agent-mode-routing.test.js.map +0 -1
  255. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.d.ts +0 -1
  256. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js +0 -23
  257. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js.map +0 -1
  258. package/dist/cjs/tests/unit/agent-temperature.test.d.ts +0 -1
  259. package/dist/cjs/tests/unit/agent-temperature.test.js +0 -191
  260. package/dist/cjs/tests/unit/agent-temperature.test.js.map +0 -1
  261. package/dist/cjs/tests/unit/agent-variables-validation.test.d.ts +0 -1
  262. package/dist/cjs/tests/unit/agent-variables-validation.test.js +0 -43
  263. package/dist/cjs/tests/unit/agent-variables-validation.test.js.map +0 -1
  264. package/dist/cjs/tests/unit/aisdk-clients.test.d.ts +0 -1
  265. package/dist/cjs/tests/unit/aisdk-clients.test.js +0 -86
  266. package/dist/cjs/tests/unit/aisdk-clients.test.js.map +0 -1
  267. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +0 -1
  268. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js +0 -250
  269. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +0 -1
  270. package/dist/cjs/tests/unit/api-client-observe-variables.test.d.ts +0 -1
  271. package/dist/cjs/tests/unit/api-client-observe-variables.test.js +0 -135
  272. package/dist/cjs/tests/unit/api-client-observe-variables.test.js.map +0 -1
  273. package/dist/cjs/tests/unit/api-multiregion.test.d.ts +0 -1
  274. package/dist/cjs/tests/unit/api-multiregion.test.js +0 -58
  275. package/dist/cjs/tests/unit/api-multiregion.test.js.map +0 -1
  276. package/dist/cjs/tests/unit/api-optional-model-api-key.test.d.ts +0 -1
  277. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js +0 -155
  278. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js.map +0 -1
  279. package/dist/cjs/tests/unit/api-variables-schema.test.d.ts +0 -1
  280. package/dist/cjs/tests/unit/api-variables-schema.test.js +0 -69
  281. package/dist/cjs/tests/unit/api-variables-schema.test.js.map +0 -1
  282. package/dist/cjs/tests/unit/browserbase-session-accessors.test.d.ts +0 -1
  283. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +0 -142
  284. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +0 -1
  285. package/dist/cjs/tests/unit/cache-llm-resolution.test.d.ts +0 -1
  286. package/dist/cjs/tests/unit/cache-llm-resolution.test.js +0 -186
  287. package/dist/cjs/tests/unit/cache-llm-resolution.test.js.map +0 -1
  288. package/dist/cjs/tests/unit/captcha-solver.test.d.ts +0 -1
  289. package/dist/cjs/tests/unit/captcha-solver.test.js +0 -154
  290. package/dist/cjs/tests/unit/captcha-solver.test.js.map +0 -1
  291. package/dist/cjs/tests/unit/cdp-connection-close.test.d.ts +0 -1
  292. package/dist/cjs/tests/unit/cdp-connection-close.test.js +0 -74
  293. package/dist/cjs/tests/unit/cdp-connection-close.test.js.map +0 -1
  294. package/dist/cjs/tests/unit/context-extra-http-headers.test.d.ts +0 -1
  295. package/dist/cjs/tests/unit/context-extra-http-headers.test.js +0 -58
  296. package/dist/cjs/tests/unit/context-extra-http-headers.test.js.map +0 -1
  297. package/dist/cjs/tests/unit/cookies.test.d.ts +0 -1
  298. package/dist/cjs/tests/unit/cookies.test.js +0 -944
  299. package/dist/cjs/tests/unit/cookies.test.js.map +0 -1
  300. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.d.ts +0 -1
  301. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js +0 -95
  302. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js.map +0 -1
  303. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.d.ts +0 -1
  304. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js +0 -43
  305. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js.map +0 -1
  306. package/dist/cjs/tests/unit/flowlogger-eventstore.test.d.ts +0 -1
  307. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js +0 -250
  308. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +0 -1
  309. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.d.ts +0 -1
  310. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js +0 -60
  311. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js.map +0 -1
  312. package/dist/cjs/tests/unit/helpers/mockCDPSession.d.ts +0 -19
  313. package/dist/cjs/tests/unit/helpers/mockCDPSession.js +0 -29
  314. package/dist/cjs/tests/unit/helpers/mockCDPSession.js.map +0 -1
  315. package/dist/cjs/tests/unit/inference-temperature.test.d.ts +0 -1
  316. package/dist/cjs/tests/unit/inference-temperature.test.js +0 -65
  317. package/dist/cjs/tests/unit/inference-temperature.test.js.map +0 -1
  318. package/dist/cjs/tests/unit/llm-middleware.test.d.ts +0 -1
  319. package/dist/cjs/tests/unit/llm-middleware.test.js +0 -495
  320. package/dist/cjs/tests/unit/llm-middleware.test.js.map +0 -1
  321. package/dist/cjs/tests/unit/llm-provider.test.d.ts +0 -1
  322. package/dist/cjs/tests/unit/llm-provider.test.js +0 -64
  323. package/dist/cjs/tests/unit/llm-provider.test.js.map +0 -1
  324. package/dist/cjs/tests/unit/microsoft-cua-client.test.d.ts +0 -1
  325. package/dist/cjs/tests/unit/microsoft-cua-client.test.js +0 -86
  326. package/dist/cjs/tests/unit/microsoft-cua-client.test.js.map +0 -1
  327. package/dist/cjs/tests/unit/model-deprecation.test.d.ts +0 -1
  328. package/dist/cjs/tests/unit/model-deprecation.test.js +0 -142
  329. package/dist/cjs/tests/unit/model-deprecation.test.js.map +0 -1
  330. package/dist/cjs/tests/unit/model-utils.test.d.ts +0 -1
  331. package/dist/cjs/tests/unit/model-utils.test.js +0 -42
  332. package/dist/cjs/tests/unit/model-utils.test.js.map +0 -1
  333. package/dist/cjs/tests/unit/openai-compatible-temperature.test.d.ts +0 -1
  334. package/dist/cjs/tests/unit/openai-compatible-temperature.test.js +0 -84
  335. package/dist/cjs/tests/unit/openai-compatible-temperature.test.js.map +0 -1
  336. package/dist/cjs/tests/unit/openai-cua-client.test.d.ts +0 -1
  337. package/dist/cjs/tests/unit/openai-cua-client.test.js +0 -71
  338. package/dist/cjs/tests/unit/openai-cua-client.test.js.map +0 -1
  339. package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +0 -1
  340. package/dist/cjs/tests/unit/page-extra-http-headers.test.js +0 -92
  341. package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +0 -1
  342. package/dist/cjs/tests/unit/page-snapshot.test.d.ts +0 -1
  343. package/dist/cjs/tests/unit/page-snapshot.test.js +0 -75
  344. package/dist/cjs/tests/unit/page-snapshot.test.js.map +0 -1
  345. package/dist/cjs/tests/unit/prompt-observe-variables.test.d.ts +0 -1
  346. package/dist/cjs/tests/unit/prompt-observe-variables.test.js +0 -25
  347. package/dist/cjs/tests/unit/prompt-observe-variables.test.js.map +0 -1
  348. package/dist/cjs/tests/unit/public-api/export-surface.test.d.ts +0 -1
  349. package/dist/cjs/tests/unit/public-api/export-surface.test.js +0 -107
  350. package/dist/cjs/tests/unit/public-api/export-surface.test.js.map +0 -1
  351. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.d.ts +0 -1
  352. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +0 -179
  353. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +0 -1
  354. package/dist/cjs/tests/unit/public-api/public-error-types.test.d.ts +0 -62
  355. package/dist/cjs/tests/unit/public-api/public-error-types.test.js +0 -110
  356. package/dist/cjs/tests/unit/public-api/public-error-types.test.js.map +0 -1
  357. package/dist/cjs/tests/unit/public-api/public-types.test.d.ts +0 -1
  358. package/dist/cjs/tests/unit/public-api/public-types.test.js +0 -99
  359. package/dist/cjs/tests/unit/public-api/public-types.test.js.map +0 -1
  360. package/dist/cjs/tests/unit/public-api/runtime-utils.test.d.ts +0 -1
  361. package/dist/cjs/tests/unit/public-api/runtime-utils.test.js +0 -60
  362. package/dist/cjs/tests/unit/public-api/runtime-utils.test.js.map +0 -1
  363. package/dist/cjs/tests/unit/public-api/schema-utils.test.d.ts +0 -1
  364. package/dist/cjs/tests/unit/public-api/schema-utils.test.js +0 -95
  365. package/dist/cjs/tests/unit/public-api/schema-utils.test.js.map +0 -1
  366. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.d.ts +0 -1
  367. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js +0 -121
  368. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js.map +0 -1
  369. package/dist/cjs/tests/unit/public-api/tool-type-export.test.d.ts +0 -1
  370. package/dist/cjs/tests/unit/public-api/tool-type-export.test.js +0 -65
  371. package/dist/cjs/tests/unit/public-api/tool-type-export.test.js.map +0 -1
  372. package/dist/cjs/tests/unit/public-api/v3-core.test.d.ts +0 -1
  373. package/dist/cjs/tests/unit/public-api/v3-core.test.js +0 -108
  374. package/dist/cjs/tests/unit/public-api/v3-core.test.js.map +0 -1
  375. package/dist/cjs/tests/unit/safety-confirmation.test.d.ts +0 -1
  376. package/dist/cjs/tests/unit/safety-confirmation.test.js +0 -110
  377. package/dist/cjs/tests/unit/safety-confirmation.test.js.map +0 -1
  378. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.d.ts +0 -1
  379. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js +0 -431
  380. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js.map +0 -1
  381. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.d.ts +0 -1
  382. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js +0 -306
  383. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js.map +0 -1
  384. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.d.ts +0 -1
  385. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js +0 -504
  386. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js.map +0 -1
  387. package/dist/cjs/tests/unit/snapshot-cbor.test.d.ts +0 -1
  388. package/dist/cjs/tests/unit/snapshot-cbor.test.js +0 -204
  389. package/dist/cjs/tests/unit/snapshot-cbor.test.js.map +0 -1
  390. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.d.ts +0 -1
  391. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js +0 -220
  392. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js.map +0 -1
  393. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.d.ts +0 -1
  394. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js +0 -107
  395. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js.map +0 -1
  396. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.d.ts +0 -1
  397. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js +0 -89
  398. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js.map +0 -1
  399. package/dist/cjs/tests/unit/snapshot-frame-merge.test.d.ts +0 -1
  400. package/dist/cjs/tests/unit/snapshot-frame-merge.test.js +0 -335
  401. package/dist/cjs/tests/unit/snapshot-frame-merge.test.js.map +0 -1
  402. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.d.ts +0 -1
  403. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js +0 -84
  404. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js.map +0 -1
  405. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.d.ts +0 -1
  406. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js +0 -74
  407. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js.map +0 -1
  408. package/dist/cjs/tests/unit/timeout-handlers.test.d.ts +0 -1
  409. package/dist/cjs/tests/unit/timeout-handlers.test.js +0 -933
  410. package/dist/cjs/tests/unit/timeout-handlers.test.js.map +0 -1
  411. package/dist/cjs/tests/unit/understudy-command-exception.test.d.ts +0 -1
  412. package/dist/cjs/tests/unit/understudy-command-exception.test.js +0 -57
  413. package/dist/cjs/tests/unit/understudy-command-exception.test.js.map +0 -1
  414. package/dist/cjs/tests/unit/xpath-parser.test.d.ts +0 -1
  415. package/dist/cjs/tests/unit/xpath-parser.test.js +0 -311
  416. package/dist/cjs/tests/unit/xpath-parser.test.js.map +0 -1
  417. package/dist/cjs/tests/unit/xpath-resolver.test.d.ts +0 -1
  418. package/dist/cjs/tests/unit/xpath-resolver.test.js +0 -80
  419. package/dist/cjs/tests/unit/xpath-resolver.test.js.map +0 -1
  420. package/dist/cjs/tests/unit/zod-enum-compatibility.test.d.ts +0 -1
  421. package/dist/cjs/tests/unit/zod-enum-compatibility.test.js +0 -149
  422. package/dist/cjs/tests/unit/zod-enum-compatibility.test.js.map +0 -1
  423. package/dist/esm/tests/cache-variables.test.d.ts +0 -1
  424. package/dist/esm/tests/cache-variables.test.js +0 -219
  425. package/dist/esm/tests/cache-variables.test.js.map +0 -1
  426. package/dist/esm/tests/integration/agent-abort-signal.spec.d.ts +0 -1
  427. package/dist/esm/tests/integration/agent-abort-signal.spec.js +0 -121
  428. package/dist/esm/tests/integration/agent-abort-signal.spec.js.map +0 -1
  429. package/dist/esm/tests/integration/agent-cache-self-heal.spec.d.ts +0 -1
  430. package/dist/esm/tests/integration/agent-cache-self-heal.spec.js +0 -78
  431. package/dist/esm/tests/integration/agent-cache-self-heal.spec.js.map +0 -1
  432. package/dist/esm/tests/integration/agent-callbacks.spec.d.ts +0 -1
  433. package/dist/esm/tests/integration/agent-callbacks.spec.js +0 -383
  434. package/dist/esm/tests/integration/agent-callbacks.spec.js.map +0 -1
  435. package/dist/esm/tests/integration/agent-experimental-validation.spec.d.ts +0 -1
  436. package/dist/esm/tests/integration/agent-experimental-validation.spec.js +0 -360
  437. package/dist/esm/tests/integration/agent-experimental-validation.spec.js.map +0 -1
  438. package/dist/esm/tests/integration/agent-hybrid-mode.spec.d.ts +0 -1
  439. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +0 -260
  440. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +0 -1
  441. package/dist/esm/tests/integration/agent-message-continuation.spec.d.ts +0 -1
  442. package/dist/esm/tests/integration/agent-message-continuation.spec.js +0 -110
  443. package/dist/esm/tests/integration/agent-message-continuation.spec.js.map +0 -1
  444. package/dist/esm/tests/integration/agent-streaming.spec.d.ts +0 -1
  445. package/dist/esm/tests/integration/agent-streaming.spec.js +0 -138
  446. package/dist/esm/tests/integration/agent-streaming.spec.js.map +0 -1
  447. package/dist/esm/tests/integration/cdp-close-api-region.spec.d.ts +0 -1
  448. package/dist/esm/tests/integration/cdp-close-api-region.spec.js +0 -39
  449. package/dist/esm/tests/integration/cdp-close-api-region.spec.js.map +0 -1
  450. package/dist/esm/tests/integration/cdp-connection-close.spec.d.ts +0 -1
  451. package/dist/esm/tests/integration/cdp-connection-close.spec.js +0 -74
  452. package/dist/esm/tests/integration/cdp-connection-close.spec.js.map +0 -1
  453. package/dist/esm/tests/integration/cdp-session-detached.spec.d.ts +0 -1
  454. package/dist/esm/tests/integration/cdp-session-detached.spec.js +0 -43
  455. package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +0 -1
  456. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.d.ts +0 -1
  457. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js +0 -54
  458. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js.map +0 -1
  459. package/dist/esm/tests/integration/click-count.spec.d.ts +0 -1
  460. package/dist/esm/tests/integration/click-count.spec.js +0 -161
  461. package/dist/esm/tests/integration/click-count.spec.js.map +0 -1
  462. package/dist/esm/tests/integration/connect-to-existing-browser.spec.d.ts +0 -1
  463. package/dist/esm/tests/integration/connect-to-existing-browser.spec.js +0 -97
  464. package/dist/esm/tests/integration/connect-to-existing-browser.spec.js.map +0 -1
  465. package/dist/esm/tests/integration/context-addInitScript.spec.d.ts +0 -1
  466. package/dist/esm/tests/integration/context-addInitScript.spec.js +0 -283
  467. package/dist/esm/tests/integration/context-addInitScript.spec.js.map +0 -1
  468. package/dist/esm/tests/integration/context-extra-http-headers.spec.d.ts +0 -1
  469. package/dist/esm/tests/integration/context-extra-http-headers.spec.js +0 -47
  470. package/dist/esm/tests/integration/context-extra-http-headers.spec.js.map +0 -1
  471. package/dist/esm/tests/integration/cookies.spec.d.ts +0 -1
  472. package/dist/esm/tests/integration/cookies.spec.js +0 -185
  473. package/dist/esm/tests/integration/cookies.spec.js.map +0 -1
  474. package/dist/esm/tests/integration/default-page-tracking.spec.d.ts +0 -1
  475. package/dist/esm/tests/integration/default-page-tracking.spec.js +0 -50
  476. package/dist/esm/tests/integration/default-page-tracking.spec.js.map +0 -1
  477. package/dist/esm/tests/integration/downloads.spec.d.ts +0 -1
  478. package/dist/esm/tests/integration/downloads.spec.js +0 -47
  479. package/dist/esm/tests/integration/downloads.spec.js.map +0 -1
  480. package/dist/esm/tests/integration/flowLogger.spec.d.ts +0 -1
  481. package/dist/esm/tests/integration/flowLogger.spec.js +0 -716
  482. package/dist/esm/tests/integration/flowLogger.spec.js.map +0 -1
  483. package/dist/esm/tests/integration/frame-get-location-and-click.spec.d.ts +0 -1
  484. package/dist/esm/tests/integration/frame-get-location-and-click.spec.js +0 -55
  485. package/dist/esm/tests/integration/frame-get-location-and-click.spec.js.map +0 -1
  486. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +0 -1
  487. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +0 -217
  488. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +0 -1
  489. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.d.ts +0 -1
  490. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js +0 -472
  491. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js.map +0 -1
  492. package/dist/esm/tests/integration/keep-alive.child.d.ts +0 -1
  493. package/dist/esm/tests/integration/keep-alive.child.js +0 -83
  494. package/dist/esm/tests/integration/keep-alive.child.js.map +0 -1
  495. package/dist/esm/tests/integration/keep-alive.spec.d.ts +0 -22
  496. package/dist/esm/tests/integration/keep-alive.spec.js +0 -482
  497. package/dist/esm/tests/integration/keep-alive.spec.js.map +0 -1
  498. package/dist/esm/tests/integration/keyboard.spec.d.ts +0 -1
  499. package/dist/esm/tests/integration/keyboard.spec.js +0 -257
  500. package/dist/esm/tests/integration/keyboard.spec.js.map +0 -1
  501. package/dist/esm/tests/integration/locator-backend-node-id.spec.d.ts +0 -1
  502. package/dist/esm/tests/integration/locator-backend-node-id.spec.js +0 -148
  503. package/dist/esm/tests/integration/locator-backend-node-id.spec.js.map +0 -1
  504. package/dist/esm/tests/integration/locator-content-methods.spec.d.ts +0 -1
  505. package/dist/esm/tests/integration/locator-content-methods.spec.js +0 -178
  506. package/dist/esm/tests/integration/locator-content-methods.spec.js.map +0 -1
  507. package/dist/esm/tests/integration/locator-count-iframe.spec.d.ts +0 -1
  508. package/dist/esm/tests/integration/locator-count-iframe.spec.js +0 -127
  509. package/dist/esm/tests/integration/locator-count-iframe.spec.js.map +0 -1
  510. package/dist/esm/tests/integration/locator-count.spec.d.ts +0 -1
  511. package/dist/esm/tests/integration/locator-count.spec.js +0 -66
  512. package/dist/esm/tests/integration/locator-count.spec.js.map +0 -1
  513. package/dist/esm/tests/integration/locator-fill.spec.d.ts +0 -1
  514. package/dist/esm/tests/integration/locator-fill.spec.js +0 -115
  515. package/dist/esm/tests/integration/locator-fill.spec.js.map +0 -1
  516. package/dist/esm/tests/integration/locator-input-methods.spec.d.ts +0 -1
  517. package/dist/esm/tests/integration/locator-input-methods.spec.js +0 -125
  518. package/dist/esm/tests/integration/locator-input-methods.spec.js.map +0 -1
  519. package/dist/esm/tests/integration/locator-nth.spec.d.ts +0 -1
  520. package/dist/esm/tests/integration/locator-nth.spec.js +0 -173
  521. package/dist/esm/tests/integration/locator-nth.spec.js.map +0 -1
  522. package/dist/esm/tests/integration/locator-select-option.spec.d.ts +0 -1
  523. package/dist/esm/tests/integration/locator-select-option.spec.js +0 -214
  524. package/dist/esm/tests/integration/locator-select-option.spec.js.map +0 -1
  525. package/dist/esm/tests/integration/logger-initialization.spec.d.ts +0 -1
  526. package/dist/esm/tests/integration/logger-initialization.spec.js +0 -595
  527. package/dist/esm/tests/integration/logger-initialization.spec.js.map +0 -1
  528. package/dist/esm/tests/integration/multi-instance-logger.spec.d.ts +0 -1
  529. package/dist/esm/tests/integration/multi-instance-logger.spec.js +0 -291
  530. package/dist/esm/tests/integration/multi-instance-logger.spec.js.map +0 -1
  531. package/dist/esm/tests/integration/nested-div.spec.d.ts +0 -1
  532. package/dist/esm/tests/integration/nested-div.spec.js +0 -20
  533. package/dist/esm/tests/integration/nested-div.spec.js.map +0 -1
  534. package/dist/esm/tests/integration/observe-element-id-format.spec.d.ts +0 -1
  535. package/dist/esm/tests/integration/observe-element-id-format.spec.js +0 -128
  536. package/dist/esm/tests/integration/observe-element-id-format.spec.js.map +0 -1
  537. package/dist/esm/tests/integration/page-addInitScript.spec.d.ts +0 -1
  538. package/dist/esm/tests/integration/page-addInitScript.spec.js +0 -92
  539. package/dist/esm/tests/integration/page-addInitScript.spec.js.map +0 -1
  540. package/dist/esm/tests/integration/page-console.spec.d.ts +0 -1
  541. package/dist/esm/tests/integration/page-console.spec.js +0 -45
  542. package/dist/esm/tests/integration/page-console.spec.js.map +0 -1
  543. package/dist/esm/tests/integration/page-drag-and-drop.spec.d.ts +0 -1
  544. package/dist/esm/tests/integration/page-drag-and-drop.spec.js +0 -435
  545. package/dist/esm/tests/integration/page-drag-and-drop.spec.js.map +0 -1
  546. package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +0 -1
  547. package/dist/esm/tests/integration/page-extra-http-headers.spec.js +0 -83
  548. package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +0 -1
  549. package/dist/esm/tests/integration/page-goto-response.spec.d.ts +0 -1
  550. package/dist/esm/tests/integration/page-goto-response.spec.js +0 -32
  551. package/dist/esm/tests/integration/page-goto-response.spec.js.map +0 -1
  552. package/dist/esm/tests/integration/page-hover.spec.d.ts +0 -1
  553. package/dist/esm/tests/integration/page-hover.spec.js +0 -163
  554. package/dist/esm/tests/integration/page-hover.spec.js.map +0 -1
  555. package/dist/esm/tests/integration/page-screenshot.spec.d.ts +0 -1
  556. package/dist/esm/tests/integration/page-screenshot.spec.js +0 -257
  557. package/dist/esm/tests/integration/page-screenshot.spec.js.map +0 -1
  558. package/dist/esm/tests/integration/page-scroll.spec.d.ts +0 -1
  559. package/dist/esm/tests/integration/page-scroll.spec.js +0 -181
  560. package/dist/esm/tests/integration/page-scroll.spec.js.map +0 -1
  561. package/dist/esm/tests/integration/page-send-cdp.spec.d.ts +0 -1
  562. package/dist/esm/tests/integration/page-send-cdp.spec.js +0 -45
  563. package/dist/esm/tests/integration/page-send-cdp.spec.js.map +0 -1
  564. package/dist/esm/tests/integration/perform-understudy-method.spec.d.ts +0 -1
  565. package/dist/esm/tests/integration/perform-understudy-method.spec.js +0 -61
  566. package/dist/esm/tests/integration/perform-understudy-method.spec.js.map +0 -1
  567. package/dist/esm/tests/integration/setinputfiles.spec.d.ts +0 -1
  568. package/dist/esm/tests/integration/setinputfiles.spec.js +0 -128
  569. package/dist/esm/tests/integration/setinputfiles.spec.js.map +0 -1
  570. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.d.ts +0 -1
  571. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js +0 -156
  572. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js.map +0 -1
  573. package/dist/esm/tests/integration/shadow-iframe-spif.spec.d.ts +0 -1
  574. package/dist/esm/tests/integration/shadow-iframe-spif.spec.js +0 -155
  575. package/dist/esm/tests/integration/shadow-iframe-spif.spec.js.map +0 -1
  576. package/dist/esm/tests/integration/testUtils.d.ts +0 -40
  577. package/dist/esm/tests/integration/testUtils.js +0 -178
  578. package/dist/esm/tests/integration/testUtils.js.map +0 -1
  579. package/dist/esm/tests/integration/text-selector-innermost.spec.d.ts +0 -1
  580. package/dist/esm/tests/integration/text-selector-innermost.spec.js +0 -103
  581. package/dist/esm/tests/integration/text-selector-innermost.spec.js.map +0 -1
  582. package/dist/esm/tests/integration/timeouts.spec.d.ts +0 -1
  583. package/dist/esm/tests/integration/timeouts.spec.js +0 -307
  584. package/dist/esm/tests/integration/timeouts.spec.js.map +0 -1
  585. package/dist/esm/tests/integration/user-data-dir.spec.d.ts +0 -1
  586. package/dist/esm/tests/integration/user-data-dir.spec.js +0 -42
  587. package/dist/esm/tests/integration/user-data-dir.spec.js.map +0 -1
  588. package/dist/esm/tests/integration/v3.config.d.ts +0 -4
  589. package/dist/esm/tests/integration/v3.config.js +0 -7
  590. package/dist/esm/tests/integration/v3.config.js.map +0 -1
  591. package/dist/esm/tests/integration/v3.dynamic.config.d.ts +0 -4
  592. package/dist/esm/tests/integration/v3.dynamic.config.js +0 -44
  593. package/dist/esm/tests/integration/v3.dynamic.config.js.map +0 -1
  594. package/dist/esm/tests/integration/v3.playwright.config.d.ts +0 -2
  595. package/dist/esm/tests/integration/v3.playwright.config.js +0 -46
  596. package/dist/esm/tests/integration/v3.playwright.config.js.map +0 -1
  597. package/dist/esm/tests/integration/wait-for-selector.spec.d.ts +0 -1
  598. package/dist/esm/tests/integration/wait-for-selector.spec.js +0 -681
  599. package/dist/esm/tests/integration/wait-for-selector.spec.js.map +0 -1
  600. package/dist/esm/tests/integration/wait-for-timeout.spec.d.ts +0 -1
  601. package/dist/esm/tests/integration/wait-for-timeout.spec.js +0 -116
  602. package/dist/esm/tests/integration/wait-for-timeout.spec.js.map +0 -1
  603. package/dist/esm/tests/integration/xpath-for-location-deep.spec.d.ts +0 -1
  604. package/dist/esm/tests/integration/xpath-for-location-deep.spec.js +0 -85
  605. package/dist/esm/tests/integration/xpath-for-location-deep.spec.js.map +0 -1
  606. package/dist/esm/tests/unit/agent-captcha-hooks.test.d.ts +0 -1
  607. package/dist/esm/tests/unit/agent-captcha-hooks.test.js +0 -339
  608. package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +0 -1
  609. package/dist/esm/tests/unit/agent-execution-model.test.d.ts +0 -1
  610. package/dist/esm/tests/unit/agent-execution-model.test.js +0 -148
  611. package/dist/esm/tests/unit/agent-execution-model.test.js.map +0 -1
  612. package/dist/esm/tests/unit/agent-metrics.test.d.ts +0 -1
  613. package/dist/esm/tests/unit/agent-metrics.test.js +0 -110
  614. package/dist/esm/tests/unit/agent-metrics.test.js.map +0 -1
  615. package/dist/esm/tests/unit/agent-mode-routing.test.d.ts +0 -1
  616. package/dist/esm/tests/unit/agent-mode-routing.test.js +0 -86
  617. package/dist/esm/tests/unit/agent-mode-routing.test.js.map +0 -1
  618. package/dist/esm/tests/unit/agent-system-prompt-variables.test.d.ts +0 -1
  619. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js +0 -21
  620. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js.map +0 -1
  621. package/dist/esm/tests/unit/agent-temperature.test.d.ts +0 -1
  622. package/dist/esm/tests/unit/agent-temperature.test.js +0 -189
  623. package/dist/esm/tests/unit/agent-temperature.test.js.map +0 -1
  624. package/dist/esm/tests/unit/agent-variables-validation.test.d.ts +0 -1
  625. package/dist/esm/tests/unit/agent-variables-validation.test.js +0 -41
  626. package/dist/esm/tests/unit/agent-variables-validation.test.js.map +0 -1
  627. package/dist/esm/tests/unit/aisdk-clients.test.d.ts +0 -1
  628. package/dist/esm/tests/unit/aisdk-clients.test.js +0 -84
  629. package/dist/esm/tests/unit/aisdk-clients.test.js.map +0 -1
  630. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +0 -1
  631. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js +0 -245
  632. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +0 -1
  633. package/dist/esm/tests/unit/api-client-observe-variables.test.d.ts +0 -1
  634. package/dist/esm/tests/unit/api-client-observe-variables.test.js +0 -133
  635. package/dist/esm/tests/unit/api-client-observe-variables.test.js.map +0 -1
  636. package/dist/esm/tests/unit/api-multiregion.test.d.ts +0 -1
  637. package/dist/esm/tests/unit/api-multiregion.test.js +0 -56
  638. package/dist/esm/tests/unit/api-multiregion.test.js.map +0 -1
  639. package/dist/esm/tests/unit/api-optional-model-api-key.test.d.ts +0 -1
  640. package/dist/esm/tests/unit/api-optional-model-api-key.test.js +0 -153
  641. package/dist/esm/tests/unit/api-optional-model-api-key.test.js.map +0 -1
  642. package/dist/esm/tests/unit/api-variables-schema.test.d.ts +0 -1
  643. package/dist/esm/tests/unit/api-variables-schema.test.js +0 -67
  644. package/dist/esm/tests/unit/api-variables-schema.test.js.map +0 -1
  645. package/dist/esm/tests/unit/browserbase-session-accessors.test.d.ts +0 -1
  646. package/dist/esm/tests/unit/browserbase-session-accessors.test.js +0 -140
  647. package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +0 -1
  648. package/dist/esm/tests/unit/cache-llm-resolution.test.d.ts +0 -1
  649. package/dist/esm/tests/unit/cache-llm-resolution.test.js +0 -184
  650. package/dist/esm/tests/unit/cache-llm-resolution.test.js.map +0 -1
  651. package/dist/esm/tests/unit/captcha-solver.test.d.ts +0 -1
  652. package/dist/esm/tests/unit/captcha-solver.test.js +0 -152
  653. package/dist/esm/tests/unit/captcha-solver.test.js.map +0 -1
  654. package/dist/esm/tests/unit/cdp-connection-close.test.d.ts +0 -1
  655. package/dist/esm/tests/unit/cdp-connection-close.test.js +0 -72
  656. package/dist/esm/tests/unit/cdp-connection-close.test.js.map +0 -1
  657. package/dist/esm/tests/unit/context-extra-http-headers.test.d.ts +0 -1
  658. package/dist/esm/tests/unit/context-extra-http-headers.test.js +0 -56
  659. package/dist/esm/tests/unit/context-extra-http-headers.test.js.map +0 -1
  660. package/dist/esm/tests/unit/cookies.test.d.ts +0 -1
  661. package/dist/esm/tests/unit/cookies.test.js +0 -909
  662. package/dist/esm/tests/unit/cookies.test.js.map +0 -1
  663. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.d.ts +0 -1
  664. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js +0 -93
  665. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js.map +0 -1
  666. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.d.ts +0 -1
  667. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js +0 -41
  668. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js.map +0 -1
  669. package/dist/esm/tests/unit/flowlogger-eventstore.test.d.ts +0 -1
  670. package/dist/esm/tests/unit/flowlogger-eventstore.test.js +0 -248
  671. package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +0 -1
  672. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.d.ts +0 -1
  673. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js +0 -58
  674. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js.map +0 -1
  675. package/dist/esm/tests/unit/helpers/mockCDPSession.d.ts +0 -19
  676. package/dist/esm/tests/unit/helpers/mockCDPSession.js +0 -25
  677. package/dist/esm/tests/unit/helpers/mockCDPSession.js.map +0 -1
  678. package/dist/esm/tests/unit/inference-temperature.test.d.ts +0 -1
  679. package/dist/esm/tests/unit/inference-temperature.test.js +0 -63
  680. package/dist/esm/tests/unit/inference-temperature.test.js.map +0 -1
  681. package/dist/esm/tests/unit/llm-middleware.test.d.ts +0 -1
  682. package/dist/esm/tests/unit/llm-middleware.test.js +0 -460
  683. package/dist/esm/tests/unit/llm-middleware.test.js.map +0 -1
  684. package/dist/esm/tests/unit/llm-provider.test.d.ts +0 -1
  685. package/dist/esm/tests/unit/llm-provider.test.js +0 -62
  686. package/dist/esm/tests/unit/llm-provider.test.js.map +0 -1
  687. package/dist/esm/tests/unit/microsoft-cua-client.test.d.ts +0 -1
  688. package/dist/esm/tests/unit/microsoft-cua-client.test.js +0 -84
  689. package/dist/esm/tests/unit/microsoft-cua-client.test.js.map +0 -1
  690. package/dist/esm/tests/unit/model-deprecation.test.d.ts +0 -1
  691. package/dist/esm/tests/unit/model-deprecation.test.js +0 -140
  692. package/dist/esm/tests/unit/model-deprecation.test.js.map +0 -1
  693. package/dist/esm/tests/unit/model-utils.test.d.ts +0 -1
  694. package/dist/esm/tests/unit/model-utils.test.js +0 -40
  695. package/dist/esm/tests/unit/model-utils.test.js.map +0 -1
  696. package/dist/esm/tests/unit/openai-compatible-temperature.test.d.ts +0 -1
  697. package/dist/esm/tests/unit/openai-compatible-temperature.test.js +0 -82
  698. package/dist/esm/tests/unit/openai-compatible-temperature.test.js.map +0 -1
  699. package/dist/esm/tests/unit/openai-cua-client.test.d.ts +0 -1
  700. package/dist/esm/tests/unit/openai-cua-client.test.js +0 -69
  701. package/dist/esm/tests/unit/openai-cua-client.test.js.map +0 -1
  702. package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +0 -1
  703. package/dist/esm/tests/unit/page-extra-http-headers.test.js +0 -90
  704. package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +0 -1
  705. package/dist/esm/tests/unit/page-snapshot.test.d.ts +0 -1
  706. package/dist/esm/tests/unit/page-snapshot.test.js +0 -40
  707. package/dist/esm/tests/unit/page-snapshot.test.js.map +0 -1
  708. package/dist/esm/tests/unit/prompt-observe-variables.test.d.ts +0 -1
  709. package/dist/esm/tests/unit/prompt-observe-variables.test.js +0 -23
  710. package/dist/esm/tests/unit/prompt-observe-variables.test.js.map +0 -1
  711. package/dist/esm/tests/unit/public-api/export-surface.test.d.ts +0 -1
  712. package/dist/esm/tests/unit/public-api/export-surface.test.js +0 -72
  713. package/dist/esm/tests/unit/public-api/export-surface.test.js.map +0 -1
  714. package/dist/esm/tests/unit/public-api/llm-and-agents.test.d.ts +0 -1
  715. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +0 -144
  716. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +0 -1
  717. package/dist/esm/tests/unit/public-api/public-error-types.test.d.ts +0 -62
  718. package/dist/esm/tests/unit/public-api/public-error-types.test.js +0 -74
  719. package/dist/esm/tests/unit/public-api/public-error-types.test.js.map +0 -1
  720. package/dist/esm/tests/unit/public-api/public-types.test.d.ts +0 -1
  721. package/dist/esm/tests/unit/public-api/public-types.test.js +0 -97
  722. package/dist/esm/tests/unit/public-api/public-types.test.js.map +0 -1
  723. package/dist/esm/tests/unit/public-api/runtime-utils.test.d.ts +0 -1
  724. package/dist/esm/tests/unit/public-api/runtime-utils.test.js +0 -25
  725. package/dist/esm/tests/unit/public-api/runtime-utils.test.js.map +0 -1
  726. package/dist/esm/tests/unit/public-api/schema-utils.test.d.ts +0 -1
  727. package/dist/esm/tests/unit/public-api/schema-utils.test.js +0 -60
  728. package/dist/esm/tests/unit/public-api/schema-utils.test.js.map +0 -1
  729. package/dist/esm/tests/unit/public-api/timeout-error-types.test.d.ts +0 -1
  730. package/dist/esm/tests/unit/public-api/timeout-error-types.test.js +0 -86
  731. package/dist/esm/tests/unit/public-api/timeout-error-types.test.js.map +0 -1
  732. package/dist/esm/tests/unit/public-api/tool-type-export.test.d.ts +0 -1
  733. package/dist/esm/tests/unit/public-api/tool-type-export.test.js +0 -30
  734. package/dist/esm/tests/unit/public-api/tool-type-export.test.js.map +0 -1
  735. package/dist/esm/tests/unit/public-api/v3-core.test.d.ts +0 -1
  736. package/dist/esm/tests/unit/public-api/v3-core.test.js +0 -73
  737. package/dist/esm/tests/unit/public-api/v3-core.test.js.map +0 -1
  738. package/dist/esm/tests/unit/safety-confirmation.test.d.ts +0 -1
  739. package/dist/esm/tests/unit/safety-confirmation.test.js +0 -108
  740. package/dist/esm/tests/unit/safety-confirmation.test.js.map +0 -1
  741. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.d.ts +0 -1
  742. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js +0 -396
  743. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js.map +0 -1
  744. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.d.ts +0 -1
  745. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js +0 -304
  746. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js.map +0 -1
  747. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.d.ts +0 -1
  748. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js +0 -469
  749. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js.map +0 -1
  750. package/dist/esm/tests/unit/snapshot-cbor.test.d.ts +0 -1
  751. package/dist/esm/tests/unit/snapshot-cbor.test.js +0 -202
  752. package/dist/esm/tests/unit/snapshot-cbor.test.js.map +0 -1
  753. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.d.ts +0 -1
  754. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js +0 -218
  755. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js.map +0 -1
  756. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.d.ts +0 -1
  757. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js +0 -105
  758. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js.map +0 -1
  759. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.d.ts +0 -1
  760. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js +0 -87
  761. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js.map +0 -1
  762. package/dist/esm/tests/unit/snapshot-frame-merge.test.d.ts +0 -1
  763. package/dist/esm/tests/unit/snapshot-frame-merge.test.js +0 -333
  764. package/dist/esm/tests/unit/snapshot-frame-merge.test.js.map +0 -1
  765. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.d.ts +0 -1
  766. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js +0 -82
  767. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js.map +0 -1
  768. package/dist/esm/tests/unit/snapshot-xpath-utils.test.d.ts +0 -1
  769. package/dist/esm/tests/unit/snapshot-xpath-utils.test.js +0 -72
  770. package/dist/esm/tests/unit/snapshot-xpath-utils.test.js.map +0 -1
  771. package/dist/esm/tests/unit/timeout-handlers.test.d.ts +0 -1
  772. package/dist/esm/tests/unit/timeout-handlers.test.js +0 -898
  773. package/dist/esm/tests/unit/timeout-handlers.test.js.map +0 -1
  774. package/dist/esm/tests/unit/understudy-command-exception.test.d.ts +0 -1
  775. package/dist/esm/tests/unit/understudy-command-exception.test.js +0 -55
  776. package/dist/esm/tests/unit/understudy-command-exception.test.js.map +0 -1
  777. package/dist/esm/tests/unit/xpath-parser.test.d.ts +0 -1
  778. package/dist/esm/tests/unit/xpath-parser.test.js +0 -309
  779. package/dist/esm/tests/unit/xpath-parser.test.js.map +0 -1
  780. package/dist/esm/tests/unit/xpath-resolver.test.d.ts +0 -1
  781. package/dist/esm/tests/unit/xpath-resolver.test.js +0 -78
  782. package/dist/esm/tests/unit/xpath-resolver.test.js.map +0 -1
  783. package/dist/esm/tests/unit/zod-enum-compatibility.test.d.ts +0 -1
  784. package/dist/esm/tests/unit/zod-enum-compatibility.test.js +0 -114
  785. package/dist/esm/tests/unit/zod-enum-compatibility.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowLogger.spec.js","sourceRoot":"","sources":["../../../../tests/integration/flowLogger.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, test } from \"@playwright/test\";\nimport { z } from \"zod\";\nimport { InMemoryEventSink } from \"../../lib/v3/flowlogger/EventSink.js\";\nimport { FlowEvent } from \"../../lib/v3/flowlogger/FlowLogger.js\";\nimport { performUnderstudyMethod } from \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport {\n createScriptedAisdkTestLlmClient,\n closeV3,\n doneToolResponse,\n findLastEncodedId,\n toolCallResponse,\n} from \"./testUtils.js\";\nimport { getV3TestConfig } from \"./v3.config.js\";\n\nfunction encodeHtml(html: string): string {\n return `data:text/html,${encodeURIComponent(html)}`;\n}\n\nfunction createRecordedFlowLoggerV3(\n overrides: Parameters<typeof getV3TestConfig>[0] = {},\n): V3 {\n const v3 = new V3(getV3TestConfig(overrides));\n const sink = new InMemoryEventSink();\n v3.bus.on(\"*\", (event: unknown) => {\n if (event instanceof FlowEvent) {\n void sink.emit(event);\n }\n });\n v3.eventStore.query = (query) =>\n sink.query({ ...query, sessionId: v3.eventStore.sessionId });\n return v3;\n}\n\nasync function listRecordedFlowEvents(v3: V3): Promise<FlowEvent[]> {\n return v3.eventStore.query({});\n}\n\nasync function captureFlowEventBaseline(v3: V3): Promise<Set<string>> {\n const events = await listRecordedFlowEvents(v3);\n return new Set(events.map((event) => event.eventId));\n}\n\nasync function listRecordedFlowEventsSince(\n v3: V3,\n baseline: Set<string>,\n): Promise<FlowEvent[]> {\n const events = await listRecordedFlowEvents(v3);\n return events.filter((event) => !baseline.has(event.eventId));\n}\n\nfunction eventsOfType(events: FlowEvent[], eventType: string): FlowEvent[] {\n return events.filter((event) => event.eventType === eventType);\n}\n\nfunction requireSingleEvent(events: FlowEvent[], eventType: string): FlowEvent {\n const matches = eventsOfType(events, eventType);\n expect(matches, `expected a single ${eventType}`).toHaveLength(1);\n return matches[0];\n}\n\nfunction expectRootEvent(event: FlowEvent): void {\n expect(event.eventParentIds).toEqual([]);\n}\n\nfunction expectDirectParent(child: FlowEvent, parent: FlowEvent): void {\n expect(child.eventParentIds).toEqual([\n ...parent.eventParentIds,\n parent.eventId,\n ]);\n}\n\nfunction assertAllParentIdsResolve(events: FlowEvent[]): void {\n const eventIds = new Set(events.map((event) => event.eventId));\n\n for (const event of events) {\n for (const parentId of event.eventParentIds) {\n expect(\n eventIds.has(parentId),\n `${event.eventType} references missing parent ${parentId}`,\n ).toBe(true);\n }\n }\n}\n\nfunction assertSessionIds(events: FlowEvent[], sessionId: string): void {\n for (const event of events) {\n expect(event.sessionId).toBe(sessionId);\n }\n}\n\nfunction directChildrenOfType(\n events: FlowEvent[],\n parent: FlowEvent,\n eventType: string,\n): FlowEvent[] {\n const expectedParentIds = [...parent.eventParentIds, parent.eventId];\n return events.filter(\n (event) =>\n event.eventType === eventType &&\n JSON.stringify(event.eventParentIds) ===\n JSON.stringify(expectedParentIds),\n );\n}\n\nfunction assertCompletedEnvelope(\n events: FlowEvent[],\n eventType: string,\n completedEventType = `${eventType.replace(/Event$/, \"\")}CompletedEvent`,\n): FlowEvent {\n const root = requireSingleEvent(events, eventType);\n const completed = requireSingleEvent(events, completedEventType);\n expectDirectParent(completed, root);\n return root;\n}\n\nfunction assertNoFloatingLlmEvents(events: FlowEvent[]): void {\n const llmEvents = events.filter(\n (event) =>\n event.eventType === \"LlmRequestEvent\" ||\n event.eventType === \"LlmResponseEvent\",\n );\n const byId = new Map(events.map((event) => [event.eventId, event]));\n\n expect(llmEvents.length).toBeGreaterThan(0);\n\n for (const event of llmEvents) {\n expect(\n event.eventParentIds.length,\n `${event.eventType} is floating`,\n ).toBeGreaterThan(0);\n const lastParentId = event.eventParentIds.at(-1);\n const lastParent = lastParentId ? byId.get(lastParentId) : undefined;\n expect(\n lastParent,\n `${event.eventType} has no resolved parent`,\n ).toBeDefined();\n expect(lastParent?.eventType.startsWith(\"Llm\")).toBe(false);\n }\n}\n\nfunction assertNoFloatingCdpEvents(events: FlowEvent[]): void {\n const cdpEvents = events.filter((event) => event.eventType.startsWith(\"Cdp\"));\n const byId = new Map(events.map((event) => [event.eventId, event]));\n\n expect(cdpEvents.length).toBeGreaterThan(0);\n\n for (const event of cdpEvents) {\n expect(\n event.eventParentIds.length,\n `${event.eventType} is floating`,\n ).toBeGreaterThan(0);\n const lastParentId = event.eventParentIds.at(-1);\n const lastParent = lastParentId ? byId.get(lastParentId) : undefined;\n expect(\n lastParent,\n `${event.eventType} has no resolved parent`,\n ).toBeDefined();\n\n if (event.eventType === \"CdpCallEvent\") {\n expect(lastParent?.eventType.startsWith(\"Cdp\")).toBe(false);\n } else {\n expect(lastParent?.eventType).toBe(\"CdpCallEvent\");\n }\n }\n}\n\nfunction assertDirectRootCdpEvents(\n events: FlowEvent[],\n sessionId: string,\n): void {\n const call = requireSingleEvent(events, \"CdpCallEvent\");\n const responseTypes = [\"CdpResponseEvent\", \"CdpResponseErrorEvent\"];\n const response = events.find((event) =>\n responseTypes.includes(event.eventType),\n );\n\n expect(response, \"expected a direct CDP response event\").toBeDefined();\n assertSessionIds(events, sessionId);\n expectRootEvent(call);\n expect(response?.eventParentIds).toEqual([call.eventId]);\n}\n\nfunction sortCountRecord(\n input: Record<string, number>,\n): Record<string, number> {\n return Object.fromEntries(\n Object.entries(input).sort(([left], [right]) => left.localeCompare(right)),\n );\n}\n\nfunction assertNonCdpEventCounts(\n events: FlowEvent[],\n expected: Record<string, number>,\n): void {\n const actual = events.reduce<Record<string, number>>((counts, event) => {\n if (event.eventType.startsWith(\"Cdp\")) {\n return counts;\n }\n\n counts[event.eventType] = (counts[event.eventType] ?? 0) + 1;\n return counts;\n }, {});\n\n expect(sortCountRecord(actual)).toEqual(sortCountRecord(expected));\n}\n\ntest.describe(\"flow logger integration\", () => {\n test.describe.configure({ mode: \"serial\" });\n\n test(\"act emits a rooted tree with nested understudy, llm, and cdp events\", async () => {\n const buttonText = \"Flow Logger Act Button\";\n const llmClient = createScriptedAisdkTestLlmClient({\n jsonResponses: {\n act: (options) => ({\n action: {\n elementId: findLastEncodedId(options),\n description: `click ${buttonText}`,\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n }),\n },\n });\n\n const v3 = createRecordedFlowLoggerV3({\n llmClient,\n });\n\n await v3.init();\n\n try {\n const page = v3.context.pages()[0];\n await page.goto(\n encodeHtml(`\n <!doctype html>\n <html>\n <body>\n <button\n id=\"act-target\"\n onclick=\"document.body.dataset.clicked='true'\"\n >\n ${buttonText}\n </button>\n </body>\n </html>\n `),\n );\n\n const baseline = await captureFlowEventBaseline(v3);\n const result = await v3.act(`Click the ${buttonText}`);\n const events = await listRecordedFlowEventsSince(v3, baseline);\n\n expect(result.success).toBe(true);\n expect(\n await page.evaluate(() => document.body.dataset.clicked ?? \"\"),\n ).toBe(\"true\");\n const root = requireSingleEvent(events, \"StagehandActEvent\");\n const completed = requireSingleEvent(\n events,\n \"StagehandActCompletedEvent\",\n );\n const llmRequest = requireSingleEvent(events, \"LlmRequestEvent\");\n const llmResponse = requireSingleEvent(events, \"LlmResponseEvent\");\n const understudy = requireSingleEvent(events, \"UnderstudyClickEvent\");\n const understudyCompleted = requireSingleEvent(\n events,\n \"UnderstudyClickCompletedEvent\",\n );\n\n assertAllParentIdsResolve(events);\n assertNonCdpEventCounts(events, {\n LlmRequestEvent: 1,\n LlmResponseEvent: 1,\n StagehandActCompletedEvent: 1,\n StagehandActEvent: 1,\n UnderstudyClickCompletedEvent: 1,\n UnderstudyClickEvent: 1,\n });\n assertSessionIds(events, v3.flowLoggerContext.sessionId);\n expectRootEvent(root);\n expectDirectParent(completed, root);\n expect(llmRequest.eventParentIds).toEqual([root.eventId]);\n expect(llmResponse.eventParentIds).toEqual([root.eventId]);\n expect(understudy.eventParentIds).toEqual([root.eventId]);\n expectDirectParent(understudyCompleted, understudy);\n assertNoFloatingLlmEvents(events);\n assertNoFloatingCdpEvents(events);\n } finally {\n await closeV3(v3);\n }\n });\n\n test(\"observe and extract emit rooted trees with complete nested llm and cdp events\", async () => {\n const observeText = \"Flow Logger Observe Button\";\n const extractTitle = \"Flow Logger Extract Title\";\n const llmClient = createScriptedAisdkTestLlmClient({\n jsonResponses: {\n Observation: (options) => ({\n elements: [\n {\n elementId: findLastEncodedId(options),\n description: observeText,\n method: \"click\",\n arguments: [],\n },\n ],\n }),\n Extraction: {\n title: extractTitle,\n },\n Metadata: {\n completed: true,\n progress: \"done\",\n },\n },\n });\n\n const v3 = createRecordedFlowLoggerV3({\n llmClient,\n });\n\n await v3.init();\n\n try {\n const page = v3.context.pages()[0];\n await page.goto(\n encodeHtml(`\n <!doctype html>\n <html>\n <body>\n <button id=\"observe-target\">${observeText}</button>\n <h1>${extractTitle}</h1>\n </body>\n </html>\n `),\n );\n\n const observeBaseline = await captureFlowEventBaseline(v3);\n const observeResult = await v3.observe(`Find the ${observeText}`);\n\n expect(observeResult).toHaveLength(1);\n expect(observeResult[0].method).toBe(\"click\");\n\n const observeEvents = await listRecordedFlowEventsSince(\n v3,\n observeBaseline,\n );\n const observeRoot = requireSingleEvent(\n observeEvents,\n \"StagehandObserveEvent\",\n );\n const observeCompleted = requireSingleEvent(\n observeEvents,\n \"StagehandObserveCompletedEvent\",\n );\n const observeLlmRequests = eventsOfType(observeEvents, \"LlmRequestEvent\");\n const observeLlmResponses = eventsOfType(\n observeEvents,\n \"LlmResponseEvent\",\n );\n\n assertAllParentIdsResolve(observeEvents);\n assertNonCdpEventCounts(observeEvents, {\n LlmRequestEvent: 1,\n LlmResponseEvent: 1,\n StagehandObserveCompletedEvent: 1,\n StagehandObserveEvent: 1,\n });\n assertSessionIds(observeEvents, v3.flowLoggerContext.sessionId);\n expectRootEvent(observeRoot);\n expectDirectParent(observeCompleted, observeRoot);\n expect(observeLlmRequests).toHaveLength(1);\n expect(observeLlmResponses).toHaveLength(1);\n expect(observeLlmRequests[0].eventParentIds).toEqual([\n observeRoot.eventId,\n ]);\n expect(observeLlmResponses[0].eventParentIds).toEqual([\n observeRoot.eventId,\n ]);\n assertNoFloatingLlmEvents(observeEvents);\n assertNoFloatingCdpEvents(observeEvents);\n\n const extractBaseline = await captureFlowEventBaseline(v3);\n const extractResult = await v3.extract(\n \"Extract the title\",\n z.object({ title: z.string() }),\n );\n\n expect(extractResult).toEqual({ title: extractTitle });\n\n const extractEvents = await listRecordedFlowEventsSince(\n v3,\n extractBaseline,\n );\n const extractRoot = requireSingleEvent(\n extractEvents,\n \"StagehandExtractEvent\",\n );\n const extractCompleted = requireSingleEvent(\n extractEvents,\n \"StagehandExtractCompletedEvent\",\n );\n const extractLlmRequests = eventsOfType(extractEvents, \"LlmRequestEvent\");\n const extractLlmResponses = eventsOfType(\n extractEvents,\n \"LlmResponseEvent\",\n );\n\n assertAllParentIdsResolve(extractEvents);\n assertNonCdpEventCounts(extractEvents, {\n LlmRequestEvent: 2,\n LlmResponseEvent: 2,\n StagehandExtractCompletedEvent: 1,\n StagehandExtractEvent: 1,\n });\n assertSessionIds(extractEvents, v3.flowLoggerContext.sessionId);\n expectRootEvent(extractRoot);\n expectDirectParent(extractCompleted, extractRoot);\n expect(extractLlmRequests).toHaveLength(2);\n expect(extractLlmResponses).toHaveLength(2);\n\n for (const event of [...extractLlmRequests, ...extractLlmResponses]) {\n expect(event.eventParentIds).toEqual([extractRoot.eventId]);\n }\n\n assertNoFloatingLlmEvents(extractEvents);\n assertNoFloatingCdpEvents(extractEvents);\n } finally {\n await closeV3(v3);\n }\n });\n\n test(\"agent.execute -> act carries the full agent -> stagehand -> understudy -> cdp + llm hierarchy\", async () => {\n const buttonText = \"Agent Act Button\";\n const llmClient = createScriptedAisdkTestLlmClient({\n jsonResponses: {\n act: (options) => ({\n action: {\n elementId: findLastEncodedId(options),\n description: `click ${buttonText}`,\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n }),\n },\n generateResponses: [\n toolCallResponse(\"act\", { action: `click the ${buttonText}` }, \"act-1\"),\n doneToolResponse(\"finished\", true, \"done-1\"),\n ],\n });\n\n const v3 = createRecordedFlowLoggerV3({\n experimental: true,\n llmClient,\n });\n\n await v3.init();\n\n try {\n const page = v3.context.pages()[0];\n await page.goto(\n encodeHtml(`\n <!doctype html>\n <html>\n <body>\n <button\n id=\"agent-act-target\"\n onclick=\"document.body.dataset.agentAct='true'\"\n >\n ${buttonText}\n </button>\n </body>\n </html>\n `),\n );\n\n const baseline = await captureFlowEventBaseline(v3);\n const result = await v3.agent().execute({\n instruction: `Click the ${buttonText} and finish.`,\n maxSteps: 2,\n });\n const events = await listRecordedFlowEventsSince(v3, baseline);\n\n expect(result.success).toBe(true);\n expect(\n await page.evaluate(() => document.body.dataset.agentAct ?? \"\"),\n ).toBe(\"true\");\n const agentRoot = assertCompletedEnvelope(events, \"AgentExecuteEvent\");\n const actRoot = requireSingleEvent(events, \"StagehandActEvent\");\n const actCompleted = requireSingleEvent(\n events,\n \"StagehandActCompletedEvent\",\n );\n const understudy = requireSingleEvent(events, \"UnderstudyClickEvent\");\n const understudyCompleted = requireSingleEvent(\n events,\n \"UnderstudyClickCompletedEvent\",\n );\n\n assertAllParentIdsResolve(events);\n assertNonCdpEventCounts(events, {\n AgentExecuteCompletedEvent: 1,\n AgentExecuteEvent: 1,\n LlmRequestEvent: 3,\n LlmResponseEvent: 3,\n StagehandActCompletedEvent: 1,\n StagehandActEvent: 1,\n UnderstudyClickCompletedEvent: 1,\n UnderstudyClickEvent: 1,\n });\n assertSessionIds(events, v3.flowLoggerContext.sessionId);\n expectRootEvent(agentRoot);\n expect(actRoot.eventParentIds).toEqual([agentRoot.eventId]);\n expectDirectParent(actCompleted, actRoot);\n expectDirectParent(understudy, actRoot);\n expectDirectParent(understudyCompleted, understudy);\n expect(\n directChildrenOfType(events, agentRoot, \"LlmRequestEvent\"),\n ).toHaveLength(2);\n expect(\n directChildrenOfType(events, agentRoot, \"LlmResponseEvent\"),\n ).toHaveLength(2);\n expect(\n directChildrenOfType(events, actRoot, \"LlmRequestEvent\"),\n ).toHaveLength(1);\n expect(\n directChildrenOfType(events, actRoot, \"LlmResponseEvent\"),\n ).toHaveLength(1);\n assertNoFloatingLlmEvents(events);\n assertNoFloatingCdpEvents(events);\n } finally {\n await closeV3(v3);\n }\n });\n\n test(\"agent.execute -> fillForm carries the observe -> act -> understudy hierarchy with no missing layers\", async () => {\n const llmClient = createScriptedAisdkTestLlmClient({\n jsonResponses: {\n Observation: (options) => ({\n elements: [\n {\n elementId: findLastEncodedId(options),\n description: \"name input\",\n method: \"fill\",\n arguments: [\"hello\"],\n },\n ],\n }),\n },\n generateResponses: [\n toolCallResponse(\n \"fillForm\",\n {\n fields: [\n {\n action: \"type hello into the name field\",\n value: \"hello\",\n },\n ],\n },\n \"fillform-1\",\n ),\n doneToolResponse(\"finished\", true, \"done-1\"),\n ],\n });\n\n const v3 = createRecordedFlowLoggerV3({\n experimental: true,\n llmClient,\n });\n\n await v3.init();\n\n try {\n const page = v3.context.pages()[0];\n await page.goto(\n encodeHtml(`\n <!doctype html>\n <html>\n <body>\n <input id=\"name\" />\n </body>\n </html>\n `),\n );\n\n const baseline = await captureFlowEventBaseline(v3);\n const result = await v3.agent().execute({\n instruction: \"Fill the form and finish.\",\n maxSteps: 2,\n });\n const events = await listRecordedFlowEventsSince(v3, baseline);\n\n expect(result.success).toBe(true);\n expect(await page.locator(\"#name\").inputValue()).toBe(\"hello\");\n\n const agentRoot = assertCompletedEnvelope(events, \"AgentExecuteEvent\");\n const observeRoot = requireSingleEvent(events, \"StagehandObserveEvent\");\n const observeCompleted = requireSingleEvent(\n events,\n \"StagehandObserveCompletedEvent\",\n );\n const actRoot = requireSingleEvent(events, \"StagehandActEvent\");\n const actCompleted = requireSingleEvent(\n events,\n \"StagehandActCompletedEvent\",\n );\n const understudyFill = requireSingleEvent(events, \"UnderstudyFillEvent\");\n const understudyFillCompleted = requireSingleEvent(\n events,\n \"UnderstudyFillCompletedEvent\",\n );\n\n assertAllParentIdsResolve(events);\n assertNonCdpEventCounts(events, {\n AgentExecuteCompletedEvent: 1,\n AgentExecuteEvent: 1,\n LlmRequestEvent: 3,\n LlmResponseEvent: 3,\n StagehandActCompletedEvent: 1,\n StagehandActEvent: 1,\n StagehandObserveCompletedEvent: 1,\n StagehandObserveEvent: 1,\n UnderstudyFillCompletedEvent: 1,\n UnderstudyFillEvent: 1,\n });\n assertSessionIds(events, v3.flowLoggerContext.sessionId);\n expectRootEvent(agentRoot);\n expect(observeRoot.eventParentIds).toEqual([agentRoot.eventId]);\n expectDirectParent(observeCompleted, observeRoot);\n expect(actRoot.eventParentIds).toEqual([agentRoot.eventId]);\n expectDirectParent(actCompleted, actRoot);\n expectDirectParent(understudyFill, actRoot);\n expectDirectParent(understudyFillCompleted, understudyFill);\n expect(\n directChildrenOfType(events, observeRoot, \"LlmRequestEvent\"),\n ).toHaveLength(1);\n expect(\n directChildrenOfType(events, observeRoot, \"LlmResponseEvent\"),\n ).toHaveLength(1);\n expect(\n directChildrenOfType(events, agentRoot, \"LlmRequestEvent\"),\n ).toHaveLength(2);\n expect(\n directChildrenOfType(events, agentRoot, \"LlmResponseEvent\"),\n ).toHaveLength(2);\n expect(\n directChildrenOfType(events, actRoot, \"LlmRequestEvent\"),\n ).toHaveLength(0);\n expect(\n directChildrenOfType(events, actRoot, \"LlmResponseEvent\"),\n ).toHaveLength(0);\n assertNoFloatingLlmEvents(events);\n assertNoFloatingCdpEvents(events);\n } finally {\n await closeV3(v3);\n }\n });\n\n test(\"agent.execute -> extract carries the full agent -> extract -> cdp + llm hierarchy\", async () => {\n const extractTitle = \"Agent Extract Title\";\n const llmClient = createScriptedAisdkTestLlmClient({\n jsonResponses: {\n Extraction: {\n title: extractTitle,\n },\n Metadata: {\n completed: true,\n progress: \"done\",\n },\n },\n generateResponses: [\n toolCallResponse(\n \"extract\",\n {\n instruction: \"extract the title\",\n schema: {\n type: \"object\",\n properties: {\n title: { type: \"string\" },\n },\n },\n },\n \"extract-1\",\n ),\n doneToolResponse(\"finished\", true, \"done-1\"),\n ],\n });\n\n const v3 = createRecordedFlowLoggerV3({\n experimental: true,\n llmClient,\n });\n\n await v3.init();\n\n try {\n const page = v3.context.pages()[0];\n await page.goto(\n encodeHtml(`\n <!doctype html>\n <html>\n <body>\n <h1>${extractTitle}</h1>\n </body>\n </html>\n `),\n );\n\n const baseline = await captureFlowEventBaseline(v3);\n const result = await v3.agent().execute({\n instruction: \"Extract the title and finish.\",\n maxSteps: 2,\n });\n\n expect(result.success).toBe(true);\n\n const events = await listRecordedFlowEventsSince(v3, baseline);\n const agentRoot = assertCompletedEnvelope(events, \"AgentExecuteEvent\");\n const extractRoot = requireSingleEvent(events, \"StagehandExtractEvent\");\n const extractCompleted = requireSingleEvent(\n events,\n \"StagehandExtractCompletedEvent\",\n );\n\n assertAllParentIdsResolve(events);\n assertNonCdpEventCounts(events, {\n AgentExecuteCompletedEvent: 1,\n AgentExecuteEvent: 1,\n LlmRequestEvent: 4,\n LlmResponseEvent: 4,\n StagehandExtractCompletedEvent: 1,\n StagehandExtractEvent: 1,\n });\n assertSessionIds(events, v3.flowLoggerContext.sessionId);\n expectRootEvent(agentRoot);\n expect(extractRoot.eventParentIds).toEqual([agentRoot.eventId]);\n expectDirectParent(extractCompleted, extractRoot);\n expect(\n directChildrenOfType(events, agentRoot, \"LlmRequestEvent\"),\n ).toHaveLength(2);\n expect(\n directChildrenOfType(events, agentRoot, \"LlmResponseEvent\"),\n ).toHaveLength(2);\n expect(\n directChildrenOfType(events, extractRoot, \"LlmRequestEvent\"),\n ).toHaveLength(2);\n expect(\n directChildrenOfType(events, extractRoot, \"LlmResponseEvent\"),\n ).toHaveLength(2);\n assertNoFloatingLlmEvents(events);\n assertNoFloatingCdpEvents(events);\n } finally {\n await closeV3(v3);\n }\n });\n\n test(\"agent.execute nests page events under the agent root and direct page calls root themselves\", async () => {\n const agentPageUrl = encodeHtml(`\n <!doctype html>\n <html>\n <body>\n <h1>Agent Flow Logger Page</h1>\n </body>\n </html>\n `);\n const agentLlmClient = createScriptedAisdkTestLlmClient({\n generateResponses: [\n toolCallResponse(\"goto\", { url: agentPageUrl }, \"goto-1\"),\n toolCallResponse(\"screenshot\", {}, \"screenshot-1\"),\n doneToolResponse(\"finished\", true, \"done-1\"),\n ],\n });\n\n const agentV3 = createRecordedFlowLoggerV3({\n experimental: true,\n llmClient: agentLlmClient,\n });\n\n await agentV3.init();\n\n try {\n const baseline = await captureFlowEventBaseline(agentV3);\n const result = await agentV3.agent().execute({\n instruction: \"Go to the test page, take a screenshot, and finish.\",\n maxSteps: 3,\n });\n\n expect(result.success).toBe(true);\n expect(result.completed).toBe(true);\n\n const events = await listRecordedFlowEventsSince(agentV3, baseline);\n const root = assertCompletedEnvelope(events, \"AgentExecuteEvent\");\n const pageGoto = requireSingleEvent(events, \"PageGotoEvent\");\n const pageGotoCompleted = requireSingleEvent(\n events,\n \"PageGotoCompletedEvent\",\n );\n const pageScreenshot = requireSingleEvent(events, \"PageScreenshotEvent\");\n const pageScreenshotCompleted = requireSingleEvent(\n events,\n \"PageScreenshotCompletedEvent\",\n );\n const llmRequests = eventsOfType(events, \"LlmRequestEvent\");\n const llmResponses = eventsOfType(events, \"LlmResponseEvent\");\n\n assertAllParentIdsResolve(events);\n assertNonCdpEventCounts(events, {\n AgentExecuteCompletedEvent: 1,\n AgentExecuteEvent: 1,\n LlmRequestEvent: 3,\n LlmResponseEvent: 3,\n PageGotoCompletedEvent: 1,\n PageGotoEvent: 1,\n PageScreenshotCompletedEvent: 1,\n PageScreenshotEvent: 1,\n });\n assertSessionIds(events, agentV3.flowLoggerContext.sessionId);\n expectRootEvent(root);\n expect(pageGoto.eventParentIds).toEqual([root.eventId]);\n expectDirectParent(pageGotoCompleted, pageGoto);\n expect(pageScreenshot.eventParentIds).toEqual([root.eventId]);\n expectDirectParent(pageScreenshotCompleted, pageScreenshot);\n expect(llmRequests).toHaveLength(3);\n expect(llmResponses).toHaveLength(3);\n\n for (const event of [...llmRequests, ...llmResponses]) {\n expect(event.eventParentIds).toEqual([root.eventId]);\n }\n\n assertNoFloatingLlmEvents(events);\n assertNoFloatingCdpEvents(events);\n } finally {\n await closeV3(agentV3);\n }\n\n const directV3 = createRecordedFlowLoggerV3();\n await directV3.init();\n\n try {\n const page = directV3.context.pages()[0];\n const baseline = await captureFlowEventBaseline(directV3);\n\n await page.goto(agentPageUrl);\n await page.screenshot({ fullPage: false });\n\n const events = await listRecordedFlowEventsSince(directV3, baseline);\n const pageGoto = requireSingleEvent(events, \"PageGotoEvent\");\n const pageGotoCompleted = requireSingleEvent(\n events,\n \"PageGotoCompletedEvent\",\n );\n const pageScreenshot = requireSingleEvent(events, \"PageScreenshotEvent\");\n const pageScreenshotCompleted = requireSingleEvent(\n events,\n \"PageScreenshotCompletedEvent\",\n );\n\n assertAllParentIdsResolve(events);\n assertNonCdpEventCounts(events, {\n PageGotoCompletedEvent: 1,\n PageGotoEvent: 1,\n PageScreenshotCompletedEvent: 1,\n PageScreenshotEvent: 1,\n });\n assertSessionIds(events, directV3.flowLoggerContext.sessionId);\n expectRootEvent(pageGoto);\n expectDirectParent(pageGotoCompleted, pageGoto);\n expectRootEvent(pageScreenshot);\n expectDirectParent(pageScreenshotCompleted, pageScreenshot);\n expect(eventsOfType(events, \"LlmRequestEvent\")).toHaveLength(0);\n expect(eventsOfType(events, \"LlmResponseEvent\")).toHaveLength(0);\n assertNoFloatingCdpEvents(events);\n } finally {\n await closeV3(directV3);\n }\n });\n\n test(\"direct page methods, direct understudy calls, and direct sendCDP all attach complete event trees to the session\", async () => {\n const v3 = createRecordedFlowLoggerV3();\n await v3.init();\n\n try {\n const page = v3.context.pages()[0];\n await page.goto(\n encodeHtml(`\n <!doctype html>\n <html>\n <body>\n <button\n id=\"direct-click\"\n onclick=\"document.body.dataset.directClick='true'\"\n >\n Direct Click\n </button>\n <div id=\"ready\">ready</div>\n </body>\n </html>\n `),\n );\n\n let baseline = await captureFlowEventBaseline(v3);\n await page.evaluate(() => document.getElementById(\"ready\")?.textContent);\n let events = await listRecordedFlowEventsSince(v3, baseline);\n let root = assertCompletedEnvelope(events, \"PageEvaluateEvent\");\n assertAllParentIdsResolve(events);\n assertNonCdpEventCounts(events, {\n PageEvaluateCompletedEvent: 1,\n PageEvaluateEvent: 1,\n });\n assertSessionIds(events, v3.flowLoggerContext.sessionId);\n expectRootEvent(root);\n expect(eventsOfType(events, \"LlmRequestEvent\")).toHaveLength(0);\n expect(eventsOfType(events, \"LlmResponseEvent\")).toHaveLength(0);\n assertNoFloatingCdpEvents(events);\n\n baseline = await captureFlowEventBaseline(v3);\n await page.snapshot();\n events = await listRecordedFlowEventsSince(v3, baseline);\n root = assertCompletedEnvelope(events, \"PageSnapshotEvent\");\n assertAllParentIdsResolve(events);\n assertNonCdpEventCounts(events, {\n PageSnapshotCompletedEvent: 1,\n PageSnapshotEvent: 1,\n });\n assertSessionIds(events, v3.flowLoggerContext.sessionId);\n expectRootEvent(root);\n expect(eventsOfType(events, \"LlmRequestEvent\")).toHaveLength(0);\n expect(eventsOfType(events, \"LlmResponseEvent\")).toHaveLength(0);\n assertNoFloatingCdpEvents(events);\n\n baseline = await captureFlowEventBaseline(v3);\n await performUnderstudyMethod(\n page,\n page.mainFrame(),\n \"click\",\n \"/html/body/button\",\n [],\n 30_000,\n );\n events = await listRecordedFlowEventsSince(v3, baseline);\n root = assertCompletedEnvelope(events, \"UnderstudyClickEvent\");\n assertAllParentIdsResolve(events);\n assertNonCdpEventCounts(events, {\n UnderstudyClickCompletedEvent: 1,\n UnderstudyClickEvent: 1,\n });\n assertSessionIds(events, v3.flowLoggerContext.sessionId);\n expectRootEvent(root);\n expect(eventsOfType(events, \"LlmRequestEvent\")).toHaveLength(0);\n expect(eventsOfType(events, \"LlmResponseEvent\")).toHaveLength(0);\n assertNoFloatingCdpEvents(events);\n expect(\n await page.evaluate(() => document.body.dataset.directClick ?? \"\"),\n ).toBe(\"true\");\n\n baseline = await captureFlowEventBaseline(v3);\n const cdpResult = await page.sendCDP<{\n result?: { value?: number };\n }>(\"Runtime.evaluate\", {\n expression: \"2 + 2\",\n returnByValue: true,\n });\n events = await listRecordedFlowEventsSince(v3, baseline);\n expect(cdpResult.result?.value).toBe(4);\n expect(eventsOfType(events, \"LlmRequestEvent\")).toHaveLength(0);\n expect(eventsOfType(events, \"LlmResponseEvent\")).toHaveLength(0);\n assertAllParentIdsResolve(events);\n assertDirectRootCdpEvents(events, v3.flowLoggerContext.sessionId);\n } finally {\n await closeV3(v3);\n }\n });\n});\n"]}
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const test_1 = require("@playwright/test");
4
- const v3_js_1 = require("../../lib/v3/v3.js");
5
- const v3_config_js_1 = require("./v3.config.js");
6
- test_1.test.describe("Coordinate-based clicking", () => {
7
- let v3;
8
- test_1.test.beforeEach(async () => {
9
- v3 = new v3_js_1.V3(v3_config_js_1.v3TestConfig);
10
- await v3.init();
11
- });
12
- test_1.test.afterEach(async () => {
13
- await v3?.close?.().catch(() => { });
14
- });
15
- (0, test_1.test)("clicking by coordinates toggles a button state", async () => {
16
- const page = v3.context.pages()[0];
17
- await page.goto("data:text/html," +
18
- encodeURIComponent(`<!doctype html><html><body>
19
- <button id="btn" onclick="this.dataset.clicked = (this.dataset.clicked==='1'?'0':'1')">Click</button>
20
- <div id="out"></div>
21
- <script>
22
- const btn = document.getElementById('btn');
23
- const out = document.getElementById('out');
24
- const update = () => { out.textContent = btn.dataset.clicked === '1' ? 'clicked' : 'idle'; };
25
- update();
26
- btn.addEventListener('click', update);
27
- </script>
28
- </body></html>`));
29
- // Initial state should be idle
30
- let state = await page.mainFrame().evaluate(() => {
31
- const out = document.getElementById("out");
32
- return out?.textContent || "";
33
- });
34
- (0, test_1.expect)(state).toBe("idle");
35
- // Compute button location via Frame.getLocationForSelector
36
- const { x, y, width, height } = await page
37
- .mainFrame()
38
- .getLocationForSelector("#btn");
39
- // Click near the center of the button using Page.click coordinates
40
- const cx = Math.round(x + width / 2);
41
- const cy = Math.round(y + height / 2);
42
- await page.click(cx, cy);
43
- state = await page.mainFrame().evaluate(() => {
44
- const out = document.getElementById("out");
45
- return out?.textContent || "";
46
- });
47
- (0, test_1.expect)(state).toBe("clicked");
48
- // Click again to toggle back to idle
49
- await page.click(cx, cy);
50
- state = await page.mainFrame().evaluate(() => {
51
- const out = document.getElementById("out");
52
- return out?.textContent || "";
53
- });
54
- (0, test_1.expect)(state).toBe("idle");
55
- });
56
- });
57
- //# sourceMappingURL=frame-get-location-and-click.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frame-get-location-and-click.spec.js","sourceRoot":"","sources":["../../../../tests/integration/frame-get-location-and-click.spec.ts"],"names":[],"mappings":";;AAAA,2CAAgD;AAChD,8CAAwC;AACxC,iDAA8C;AAE9C,WAAI,CAAC,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC9C,IAAI,EAAM,CAAC;IAEX,WAAI,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;QACzB,EAAE,GAAG,IAAI,UAAE,CAAC,2BAAY,CAAC,CAAC;QAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,WAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAI,EAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnC,MAAM,IAAI,CAAC,IAAI,CACb,iBAAiB;YACf,kBAAkB,CAChB;;;;;;;;;;yBAUe,CAChB,CACJ,CAAC;QAEF,+BAA+B;QAC/B,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,GAAG,EAAE,WAAW,IAAI,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3B,2DAA2D;QAC3D,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI;aACvC,SAAS,EAAE;aACX,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAElC,mEAAmE;QACnE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzB,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,GAAG,EAAE,WAAW,IAAI,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE9B,qCAAqC;QACrC,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzB,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,GAAG,EAAE,WAAW,IAAI,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,IAAA,aAAM,EAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\n\ntest.describe(\"Coordinate-based clicking\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await v3?.close?.().catch(() => {});\n });\n\n test(\"clicking by coordinates toggles a button state\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n `<!doctype html><html><body>\n <button id=\"btn\" onclick=\"this.dataset.clicked = (this.dataset.clicked==='1'?'0':'1')\">Click</button>\n <div id=\"out\"></div>\n <script>\n const btn = document.getElementById('btn');\n const out = document.getElementById('out');\n const update = () => { out.textContent = btn.dataset.clicked === '1' ? 'clicked' : 'idle'; };\n update();\n btn.addEventListener('click', update);\n </script>\n </body></html>`,\n ),\n );\n\n // Initial state should be idle\n let state = await page.mainFrame().evaluate(() => {\n const out = document.getElementById(\"out\");\n return out?.textContent || \"\";\n });\n expect(state).toBe(\"idle\");\n\n // Compute button location via Frame.getLocationForSelector\n const { x, y, width, height } = await page\n .mainFrame()\n .getLocationForSelector(\"#btn\");\n\n // Click near the center of the button using Page.click coordinates\n const cx = Math.round(x + width / 2);\n const cy = Math.round(y + height / 2);\n await page.click(cx, cy);\n\n state = await page.mainFrame().evaluate(() => {\n const out = document.getElementById(\"out\");\n return out?.textContent || \"\";\n });\n expect(state).toBe(\"clicked\");\n\n // Click again to toggle back to idle\n await page.click(cx, cy);\n state = await page.mainFrame().evaluate(() => {\n const out = document.getElementById(\"out\");\n return out?.textContent || \"\";\n });\n expect(state).toBe(\"idle\");\n });\n});\n"]}
@@ -1,219 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const test_1 = require("@playwright/test");
4
- const v3_js_1 = require("../../lib/v3/v3.js");
5
- const v3_config_js_1 = require("./v3.config.js");
6
- const DEFAULT_INIT_SCRIPT_DELAY_MS = 250;
7
- const INIT_SCRIPT_DELAY_MS = (() => {
8
- const rawValue = process.env.IFRAME_INIT_SCRIPT_SEND_DELAY_MS;
9
- if (rawValue === undefined)
10
- return DEFAULT_INIT_SCRIPT_DELAY_MS;
11
- const parsed = Number(rawValue);
12
- if (!Number.isFinite(parsed) || parsed <= 0)
13
- return DEFAULT_INIT_SCRIPT_DELAY_MS;
14
- return parsed;
15
- })();
16
- const POPUP_TIMEOUT_MS = 20_000;
17
- const RACE_INIT_SCRIPT_SENTINEL = "__stagehand_init_script_race_sentinel__";
18
- const INIT_SCRIPT_MARKER_KEY = "__stagehand_init_script_loaded__";
19
- const POPUP_URL = "https://example.com/";
20
- const POPUP_IFRAME_URL = "https://example.org/";
21
- const INIT_SCRIPT_SOURCE = `
22
- (() => {
23
- /* ${RACE_INIT_SCRIPT_SENTINEL} */
24
- window["${INIT_SCRIPT_MARKER_KEY}"] = true;
25
- })();
26
- `;
27
- async function closeAllPages(ctx) {
28
- const pages = ctx.pages();
29
- await Promise.allSettled(pages.map((page) => page.close()));
30
- }
31
- async function waitForPopupPage(ctx, knownTargetIds, timeoutMs = POPUP_TIMEOUT_MS) {
32
- const deadline = Date.now() + timeoutMs;
33
- while (Date.now() < deadline) {
34
- const popup = ctx
35
- .pages()
36
- .find((candidate) => !knownTargetIds.has(candidate.targetId()));
37
- if (popup)
38
- return popup;
39
- try {
40
- const active = await ctx.awaitActivePage(500);
41
- if (!knownTargetIds.has(active.targetId()))
42
- return active;
43
- }
44
- catch {
45
- // keep polling
46
- }
47
- await new Promise((resolve) => setTimeout(resolve, 50));
48
- }
49
- throw new Error("Timed out waiting for popup page");
50
- }
51
- async function waitForChildFrame(page, expectedUrl, timeoutMs = POPUP_TIMEOUT_MS) {
52
- const mainFrameId = page.mainFrame().frameId;
53
- const deadline = Date.now() + timeoutMs;
54
- while (Date.now() < deadline) {
55
- for (const frame of page.frames()) {
56
- if (frame.frameId === mainFrameId)
57
- continue;
58
- try {
59
- const href = await frame.evaluate(() => window.location.href);
60
- if (href === expectedUrl)
61
- return frame;
62
- }
63
- catch {
64
- // frame context may not be ready yet
65
- }
66
- }
67
- await new Promise((resolve) => setTimeout(resolve, 50));
68
- }
69
- throw new Error("Timed out waiting for child frame");
70
- }
71
- async function prepareTargetBlankPopupOpener(opener) {
72
- await opener.goto("about:blank", { waitUntil: "domcontentloaded" });
73
- await opener.mainFrame().evaluate((popupUrl) => {
74
- const link = document.createElement("a");
75
- link.id = "open-popup";
76
- link.target = "_blank";
77
- link.href = popupUrl;
78
- link.textContent = "open popup";
79
- document.body.appendChild(link);
80
- }, POPUP_URL);
81
- }
82
- async function prepareWindowOpenPopupOpener(opener) {
83
- await opener.goto("about:blank", { waitUntil: "domcontentloaded" });
84
- await opener.mainFrame().evaluate((popupUrl) => {
85
- const button = document.createElement("button");
86
- button.id = "open-popup";
87
- button.textContent = "open popup";
88
- button.addEventListener("click", () => {
89
- window.open(popupUrl, "_blank");
90
- });
91
- document.body.appendChild(button);
92
- }, POPUP_URL);
93
- }
94
- const POPUP_TRIGGER_CASES = [
95
- {
96
- name: 'target="_blank" link click',
97
- prepare: prepareTargetBlankPopupOpener,
98
- },
99
- {
100
- name: "window.open from click handler",
101
- prepare: prepareWindowOpenPopupOpener,
102
- },
103
- ];
104
- test_1.test.describe("repro: popup iframe addInitScript race under delayed CDP send", () => {
105
- test_1.test.describe.configure({ mode: "serial" });
106
- let restoreSend;
107
- let v3;
108
- let ctx;
109
- let sequence = 0;
110
- let records = [];
111
- test_1.test.beforeAll(async () => {
112
- v3 = new v3_js_1.V3(v3_config_js_1.v3TestConfig);
113
- await v3.init();
114
- ctx = v3.context;
115
- const conn = ctx.conn;
116
- if (!conn || typeof conn._sendViaSession !== "function") {
117
- throw new Error("Unable to access CDP connection for race repro patch");
118
- }
119
- const originalSendViaSession = conn._sendViaSession.bind(conn);
120
- conn._sendViaSession = function patchedSendViaSession(sessionId, method, params) {
121
- const source = typeof params?.source === "string"
122
- ? params.source
123
- : "";
124
- const isRaceInitScript = method === "Page.addScriptToEvaluateOnNewDocument" &&
125
- source.includes(RACE_INIT_SCRIPT_SENTINEL);
126
- const sendNow = () => {
127
- records.push({
128
- sequence: ++sequence,
129
- sessionId,
130
- method,
131
- isRaceInitScript,
132
- });
133
- return originalSendViaSession(sessionId, method, params);
134
- };
135
- if (isRaceInitScript && INIT_SCRIPT_DELAY_MS > 0) {
136
- return new Promise((resolve, reject) => {
137
- setTimeout(() => {
138
- sendNow().then(resolve, reject);
139
- }, INIT_SCRIPT_DELAY_MS);
140
- });
141
- }
142
- return sendNow();
143
- };
144
- restoreSend = () => {
145
- conn._sendViaSession = originalSendViaSession;
146
- };
147
- await ctx.addInitScript(INIT_SCRIPT_SOURCE);
148
- });
149
- test_1.test.afterAll(async () => {
150
- restoreSend?.();
151
- await v3?.close?.().catch(() => { });
152
- });
153
- test_1.test.beforeEach(async () => {
154
- records = [];
155
- sequence = 0;
156
- if (!ctx)
157
- return;
158
- await closeAllPages(ctx);
159
- });
160
- test_1.test.afterEach(async () => {
161
- if (!ctx)
162
- return;
163
- await closeAllPages(ctx);
164
- });
165
- for (const popupCase of POPUP_TRIGGER_CASES) {
166
- (0, test_1.test)(`should send addScript before resume for popup targets via ${popupCase.name}`, async () => {
167
- if (!ctx)
168
- throw new Error("Context not initialized");
169
- const opener = await ctx.newPage();
170
- await popupCase.prepare(opener);
171
- const knownTargetIds = new Set(ctx.pages().map((p) => p.targetId()));
172
- const knownSessionIds = new Set(records.map((record) => record.sessionId));
173
- await opener.locator("#open-popup").click();
174
- const popup = await waitForPopupPage(ctx, knownTargetIds);
175
- await popup.waitForLoadState("load", POPUP_TIMEOUT_MS);
176
- await popup.mainFrame().evaluate((iframeUrl) => {
177
- const iframe = document.createElement("iframe");
178
- iframe.id = "race-child-iframe";
179
- iframe.src = iframeUrl;
180
- document.body.appendChild(iframe);
181
- }, POPUP_IFRAME_URL);
182
- const iframe = await waitForChildFrame(popup, POPUP_IFRAME_URL, POPUP_TIMEOUT_MS);
183
- const popupInitScriptMarker = await popup.mainFrame().evaluate((key) => {
184
- return Boolean(Reflect.get(window, key));
185
- }, INIT_SCRIPT_MARKER_KEY);
186
- const iframeInitScriptMarker = await iframe.evaluate((key) => {
187
- return Boolean(Reflect.get(window, key));
188
- }, INIT_SCRIPT_MARKER_KEY);
189
- const perSession = new Map();
190
- for (const record of records) {
191
- if (knownSessionIds.has(record.sessionId))
192
- continue;
193
- const entry = perSession.get(record.sessionId) ?? {};
194
- if (record.isRaceInitScript &&
195
- entry.raceInitScriptSequence === undefined) {
196
- entry.raceInitScriptSequence = record.sequence;
197
- }
198
- if (record.method === "Runtime.runIfWaitingForDebugger" &&
199
- entry.resumeSequence === undefined) {
200
- entry.resumeSequence = record.sequence;
201
- }
202
- perSession.set(record.sessionId, entry);
203
- }
204
- const comparableSessions = [...perSession.entries()]
205
- .map(([sessionId, entry]) => ({ sessionId, ...entry }))
206
- .filter((entry) => entry.raceInitScriptSequence !== undefined &&
207
- entry.resumeSequence !== undefined);
208
- (0, test_1.expect)(comparableSessions.length).toBeGreaterThan(0);
209
- const orderingViolations = comparableSessions.filter((entry) => {
210
- return (entry.raceInitScriptSequence >
211
- entry.resumeSequence);
212
- });
213
- (0, test_1.expect)(orderingViolations, `Expected addScript before resume for ${popupCase.name}. initScriptDelayMs=${INIT_SCRIPT_DELAY_MS}; comparableSessions=${JSON.stringify(comparableSessions)}`).toEqual([]);
214
- (0, test_1.expect)(popupInitScriptMarker).toBe(true);
215
- (0, test_1.expect)(iframeInitScriptMarker).toBe(true);
216
- });
217
- }
218
- });
219
- //# sourceMappingURL=iframe-ctx-addInitScript-race.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"iframe-ctx-addInitScript-race.spec.js","sourceRoot":"","sources":["../../../../tests/integration/iframe-ctx-addInitScript-race.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../../lib/v3/v3.js\";\nimport { v3TestConfig } from \"./v3.config.js\";\nimport type { V3Context } from \"../../lib/v3/understudy/context.js\";\nimport type { Page } from \"../../lib/v3/understudy/page.js\";\n\nconst DEFAULT_INIT_SCRIPT_DELAY_MS = 250;\nconst INIT_SCRIPT_DELAY_MS = (() => {\n const rawValue = process.env.IFRAME_INIT_SCRIPT_SEND_DELAY_MS;\n if (rawValue === undefined) return DEFAULT_INIT_SCRIPT_DELAY_MS;\n const parsed = Number(rawValue);\n if (!Number.isFinite(parsed) || parsed <= 0)\n return DEFAULT_INIT_SCRIPT_DELAY_MS;\n return parsed;\n})();\n\nconst POPUP_TIMEOUT_MS = 20_000;\nconst RACE_INIT_SCRIPT_SENTINEL = \"__stagehand_init_script_race_sentinel__\";\nconst INIT_SCRIPT_MARKER_KEY = \"__stagehand_init_script_loaded__\";\nconst POPUP_URL = \"https://example.com/\";\nconst POPUP_IFRAME_URL = \"https://example.org/\";\n\nconst INIT_SCRIPT_SOURCE = `\n(() => {\n /* ${RACE_INIT_SCRIPT_SENTINEL} */\n window[\"${INIT_SCRIPT_MARKER_KEY}\"] = true;\n})();\n`;\n\ntype PatchedConn = {\n _sendViaSession: (\n sessionId: string,\n method: string,\n params?: object,\n ) => Promise<unknown>;\n};\n\ntype SessionCommandRecord = {\n sequence: number;\n sessionId: string;\n method: string;\n isRaceInitScript: boolean;\n};\n\ntype PopupTriggerCase = {\n name: string;\n prepare: (opener: Page) => Promise<void>;\n};\n\nasync function closeAllPages(ctx: V3Context): Promise<void> {\n const pages = ctx.pages();\n await Promise.allSettled(pages.map((page) => page.close()));\n}\n\nasync function waitForPopupPage(\n ctx: V3Context,\n knownTargetIds: Set<string>,\n timeoutMs = POPUP_TIMEOUT_MS,\n): Promise<Page> {\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n const popup = ctx\n .pages()\n .find((candidate) => !knownTargetIds.has(candidate.targetId()));\n if (popup) return popup;\n try {\n const active = await ctx.awaitActivePage(500);\n if (!knownTargetIds.has(active.targetId())) return active;\n } catch {\n // keep polling\n }\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n throw new Error(\"Timed out waiting for popup page\");\n}\n\nasync function waitForChildFrame(\n page: Page,\n expectedUrl: string,\n timeoutMs = POPUP_TIMEOUT_MS,\n): Promise<ReturnType<Page[\"frames\"]>[number]> {\n const mainFrameId = page.mainFrame().frameId;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() < deadline) {\n for (const frame of page.frames()) {\n if (frame.frameId === mainFrameId) continue;\n try {\n const href = await frame.evaluate(() => window.location.href);\n if (href === expectedUrl) return frame;\n } catch {\n // frame context may not be ready yet\n }\n }\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n\n throw new Error(\"Timed out waiting for child frame\");\n}\n\nasync function prepareTargetBlankPopupOpener(opener: Page): Promise<void> {\n await opener.goto(\"about:blank\", { waitUntil: \"domcontentloaded\" });\n await opener.mainFrame().evaluate((popupUrl) => {\n const link = document.createElement(\"a\");\n link.id = \"open-popup\";\n link.target = \"_blank\";\n link.href = popupUrl;\n link.textContent = \"open popup\";\n document.body.appendChild(link);\n }, POPUP_URL);\n}\n\nasync function prepareWindowOpenPopupOpener(opener: Page): Promise<void> {\n await opener.goto(\"about:blank\", { waitUntil: \"domcontentloaded\" });\n await opener.mainFrame().evaluate((popupUrl) => {\n const button = document.createElement(\"button\");\n button.id = \"open-popup\";\n button.textContent = \"open popup\";\n button.addEventListener(\"click\", () => {\n window.open(popupUrl, \"_blank\");\n });\n document.body.appendChild(button);\n }, POPUP_URL);\n}\n\nconst POPUP_TRIGGER_CASES: PopupTriggerCase[] = [\n {\n name: 'target=\"_blank\" link click',\n prepare: prepareTargetBlankPopupOpener,\n },\n {\n name: \"window.open from click handler\",\n prepare: prepareWindowOpenPopupOpener,\n },\n];\n\ntest.describe(\"repro: popup iframe addInitScript race under delayed CDP send\", () => {\n test.describe.configure({ mode: \"serial\" });\n\n let restoreSend: (() => void) | undefined;\n let v3: V3 | undefined;\n let ctx: V3Context | undefined;\n let sequence = 0;\n let records: SessionCommandRecord[] = [];\n\n test.beforeAll(async () => {\n v3 = new V3(v3TestConfig);\n await v3.init();\n ctx = v3.context;\n\n const conn = (ctx as unknown as { conn?: PatchedConn }).conn;\n if (!conn || typeof conn._sendViaSession !== \"function\") {\n throw new Error(\"Unable to access CDP connection for race repro patch\");\n }\n\n const originalSendViaSession = conn._sendViaSession.bind(conn);\n conn._sendViaSession = function patchedSendViaSession(\n sessionId: string,\n method: string,\n params?: object,\n ) {\n const source =\n typeof (params as { source?: unknown } | undefined)?.source === \"string\"\n ? (params as { source: string }).source\n : \"\";\n const isRaceInitScript =\n method === \"Page.addScriptToEvaluateOnNewDocument\" &&\n source.includes(RACE_INIT_SCRIPT_SENTINEL);\n\n const sendNow = () => {\n records.push({\n sequence: ++sequence,\n sessionId,\n method,\n isRaceInitScript,\n });\n return originalSendViaSession(sessionId, method, params);\n };\n\n if (isRaceInitScript && INIT_SCRIPT_DELAY_MS > 0) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n sendNow().then(resolve, reject);\n }, INIT_SCRIPT_DELAY_MS);\n });\n }\n\n return sendNow();\n };\n\n restoreSend = () => {\n conn._sendViaSession = originalSendViaSession;\n };\n\n await ctx.addInitScript(INIT_SCRIPT_SOURCE);\n });\n\n test.afterAll(async () => {\n restoreSend?.();\n await v3?.close?.().catch(() => {});\n });\n\n test.beforeEach(async () => {\n records = [];\n sequence = 0;\n if (!ctx) return;\n await closeAllPages(ctx);\n });\n\n test.afterEach(async () => {\n if (!ctx) return;\n await closeAllPages(ctx);\n });\n\n for (const popupCase of POPUP_TRIGGER_CASES) {\n test(`should send addScript before resume for popup targets via ${popupCase.name}`, async () => {\n if (!ctx) throw new Error(\"Context not initialized\");\n\n const opener = await ctx.newPage();\n await popupCase.prepare(opener);\n\n const knownTargetIds = new Set(ctx.pages().map((p) => p.targetId()));\n const knownSessionIds = new Set(\n records.map((record) => record.sessionId),\n );\n\n await opener.locator(\"#open-popup\").click();\n\n const popup = await waitForPopupPage(ctx, knownTargetIds);\n await popup.waitForLoadState(\"load\", POPUP_TIMEOUT_MS);\n await popup.mainFrame().evaluate((iframeUrl) => {\n const iframe = document.createElement(\"iframe\");\n iframe.id = \"race-child-iframe\";\n iframe.src = iframeUrl;\n document.body.appendChild(iframe);\n }, POPUP_IFRAME_URL);\n const iframe = await waitForChildFrame(\n popup,\n POPUP_IFRAME_URL,\n POPUP_TIMEOUT_MS,\n );\n\n const popupInitScriptMarker = await popup.mainFrame().evaluate((key) => {\n return Boolean(Reflect.get(window, key));\n }, INIT_SCRIPT_MARKER_KEY);\n const iframeInitScriptMarker = await iframe.evaluate((key) => {\n return Boolean(Reflect.get(window, key));\n }, INIT_SCRIPT_MARKER_KEY);\n\n const perSession = new Map<\n string,\n {\n raceInitScriptSequence?: number;\n resumeSequence?: number;\n }\n >();\n\n for (const record of records) {\n if (knownSessionIds.has(record.sessionId)) continue;\n const entry = perSession.get(record.sessionId) ?? {};\n if (\n record.isRaceInitScript &&\n entry.raceInitScriptSequence === undefined\n ) {\n entry.raceInitScriptSequence = record.sequence;\n }\n if (\n record.method === \"Runtime.runIfWaitingForDebugger\" &&\n entry.resumeSequence === undefined\n ) {\n entry.resumeSequence = record.sequence;\n }\n perSession.set(record.sessionId, entry);\n }\n\n const comparableSessions = [...perSession.entries()]\n .map(([sessionId, entry]) => ({ sessionId, ...entry }))\n .filter(\n (entry) =>\n entry.raceInitScriptSequence !== undefined &&\n entry.resumeSequence !== undefined,\n );\n expect(comparableSessions.length).toBeGreaterThan(0);\n\n const orderingViolations = comparableSessions.filter((entry) => {\n return (\n (entry.raceInitScriptSequence as number) >\n (entry.resumeSequence as number)\n );\n });\n\n expect(\n orderingViolations,\n `Expected addScript before resume for ${popupCase.name}. initScriptDelayMs=${INIT_SCRIPT_DELAY_MS}; comparableSessions=${JSON.stringify(comparableSessions)}`,\n ).toEqual([]);\n expect(popupInitScriptMarker).toBe(true);\n expect(iframeInitScriptMarker).toBe(true);\n });\n }\n});\n"]}