@browserbasehq/orca 3.4.0-preview-4 → 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 (765) 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/launch/local.d.ts +2 -7
  4. package/dist/cjs/lib/v3/launch/local.js +47 -7
  5. package/dist/cjs/lib/v3/launch/local.js.map +1 -1
  6. package/dist/cjs/lib/v3/llm/aisdk.js +5 -0
  7. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  8. package/dist/cjs/lib/v3/types/public/agent.d.ts +1 -1
  9. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  10. package/dist/cjs/lib/v3/types/public/api.d.ts +283 -0
  11. package/dist/cjs/lib/v3/types/public/api.js +50 -3
  12. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  13. package/dist/cjs/lib/v3/types/public/model.d.ts +11 -7
  14. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  15. package/dist/cjs/lib/v3/v3.js +2 -47
  16. package/dist/cjs/lib/v3/v3.js.map +1 -1
  17. package/dist/esm/lib/v3/agent/AgentProvider.d.ts +1 -1
  18. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  19. package/dist/esm/lib/v3/launch/local.d.ts +2 -7
  20. package/dist/esm/lib/v3/launch/local.js +48 -8
  21. package/dist/esm/lib/v3/launch/local.js.map +1 -1
  22. package/dist/esm/lib/v3/llm/aisdk.js +5 -0
  23. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  24. package/dist/esm/lib/v3/types/public/agent.d.ts +1 -1
  25. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  26. package/dist/esm/lib/v3/types/public/api.d.ts +283 -0
  27. package/dist/esm/lib/v3/types/public/api.js +48 -1
  28. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  29. package/dist/esm/lib/v3/types/public/model.d.ts +11 -7
  30. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  31. package/dist/esm/lib/v3/v3.js +2 -47
  32. package/dist/esm/lib/v3/v3.js.map +1 -1
  33. package/package.json +4 -5
  34. package/dist/cjs/tests/cache-variables.test.d.ts +0 -1
  35. package/dist/cjs/tests/cache-variables.test.js +0 -221
  36. package/dist/cjs/tests/cache-variables.test.js.map +0 -1
  37. package/dist/cjs/tests/integration/agent-abort-signal.spec.d.ts +0 -1
  38. package/dist/cjs/tests/integration/agent-abort-signal.spec.js +0 -123
  39. package/dist/cjs/tests/integration/agent-abort-signal.spec.js.map +0 -1
  40. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.d.ts +0 -1
  41. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js +0 -83
  42. package/dist/cjs/tests/integration/agent-cache-self-heal.spec.js.map +0 -1
  43. package/dist/cjs/tests/integration/agent-callbacks.spec.d.ts +0 -1
  44. package/dist/cjs/tests/integration/agent-callbacks.spec.js +0 -385
  45. package/dist/cjs/tests/integration/agent-callbacks.spec.js.map +0 -1
  46. package/dist/cjs/tests/integration/agent-experimental-validation.spec.d.ts +0 -1
  47. package/dist/cjs/tests/integration/agent-experimental-validation.spec.js +0 -362
  48. package/dist/cjs/tests/integration/agent-experimental-validation.spec.js.map +0 -1
  49. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.d.ts +0 -1
  50. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +0 -262
  51. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +0 -1
  52. package/dist/cjs/tests/integration/agent-message-continuation.spec.d.ts +0 -1
  53. package/dist/cjs/tests/integration/agent-message-continuation.spec.js +0 -112
  54. package/dist/cjs/tests/integration/agent-message-continuation.spec.js.map +0 -1
  55. package/dist/cjs/tests/integration/agent-streaming.spec.d.ts +0 -1
  56. package/dist/cjs/tests/integration/agent-streaming.spec.js +0 -140
  57. package/dist/cjs/tests/integration/agent-streaming.spec.js.map +0 -1
  58. package/dist/cjs/tests/integration/cdp-close-api-region.spec.d.ts +0 -1
  59. package/dist/cjs/tests/integration/cdp-close-api-region.spec.js +0 -41
  60. package/dist/cjs/tests/integration/cdp-close-api-region.spec.js.map +0 -1
  61. package/dist/cjs/tests/integration/cdp-connection-close.spec.d.ts +0 -1
  62. package/dist/cjs/tests/integration/cdp-connection-close.spec.js +0 -76
  63. package/dist/cjs/tests/integration/cdp-connection-close.spec.js.map +0 -1
  64. package/dist/cjs/tests/integration/cdp-session-detached.spec.d.ts +0 -1
  65. package/dist/cjs/tests/integration/cdp-session-detached.spec.js +0 -45
  66. package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +0 -1
  67. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.d.ts +0 -1
  68. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js +0 -56
  69. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js.map +0 -1
  70. package/dist/cjs/tests/integration/click-count.spec.d.ts +0 -1
  71. package/dist/cjs/tests/integration/click-count.spec.js +0 -163
  72. package/dist/cjs/tests/integration/click-count.spec.js.map +0 -1
  73. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.d.ts +0 -1
  74. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js +0 -99
  75. package/dist/cjs/tests/integration/connect-to-existing-browser.spec.js.map +0 -1
  76. package/dist/cjs/tests/integration/context-addInitScript.spec.d.ts +0 -1
  77. package/dist/cjs/tests/integration/context-addInitScript.spec.js +0 -285
  78. package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +0 -1
  79. package/dist/cjs/tests/integration/context-extra-http-headers.spec.d.ts +0 -1
  80. package/dist/cjs/tests/integration/context-extra-http-headers.spec.js +0 -49
  81. package/dist/cjs/tests/integration/context-extra-http-headers.spec.js.map +0 -1
  82. package/dist/cjs/tests/integration/cookies.spec.d.ts +0 -1
  83. package/dist/cjs/tests/integration/cookies.spec.js +0 -187
  84. package/dist/cjs/tests/integration/cookies.spec.js.map +0 -1
  85. package/dist/cjs/tests/integration/default-page-tracking.spec.d.ts +0 -1
  86. package/dist/cjs/tests/integration/default-page-tracking.spec.js +0 -52
  87. package/dist/cjs/tests/integration/default-page-tracking.spec.js.map +0 -1
  88. package/dist/cjs/tests/integration/downloads.spec.d.ts +0 -1
  89. package/dist/cjs/tests/integration/downloads.spec.js +0 -52
  90. package/dist/cjs/tests/integration/downloads.spec.js.map +0 -1
  91. package/dist/cjs/tests/integration/flowLogger.spec.d.ts +0 -1
  92. package/dist/cjs/tests/integration/flowLogger.spec.js +0 -718
  93. package/dist/cjs/tests/integration/flowLogger.spec.js.map +0 -1
  94. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.d.ts +0 -1
  95. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js +0 -57
  96. package/dist/cjs/tests/integration/frame-get-location-and-click.spec.js.map +0 -1
  97. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +0 -1
  98. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +0 -219
  99. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +0 -1
  100. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.d.ts +0 -1
  101. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js +0 -474
  102. package/dist/cjs/tests/integration/iframe-ctx-addInitScript.spec.js.map +0 -1
  103. package/dist/cjs/tests/integration/keep-alive.child.d.ts +0 -1
  104. package/dist/cjs/tests/integration/keep-alive.child.js +0 -85
  105. package/dist/cjs/tests/integration/keep-alive.child.js.map +0 -1
  106. package/dist/cjs/tests/integration/keep-alive.spec.d.ts +0 -22
  107. package/dist/cjs/tests/integration/keep-alive.spec.js +0 -490
  108. package/dist/cjs/tests/integration/keep-alive.spec.js.map +0 -1
  109. package/dist/cjs/tests/integration/keyboard.spec.d.ts +0 -1
  110. package/dist/cjs/tests/integration/keyboard.spec.js +0 -259
  111. package/dist/cjs/tests/integration/keyboard.spec.js.map +0 -1
  112. package/dist/cjs/tests/integration/locator-backend-node-id.spec.d.ts +0 -1
  113. package/dist/cjs/tests/integration/locator-backend-node-id.spec.js +0 -150
  114. package/dist/cjs/tests/integration/locator-backend-node-id.spec.js.map +0 -1
  115. package/dist/cjs/tests/integration/locator-content-methods.spec.d.ts +0 -1
  116. package/dist/cjs/tests/integration/locator-content-methods.spec.js +0 -180
  117. package/dist/cjs/tests/integration/locator-content-methods.spec.js.map +0 -1
  118. package/dist/cjs/tests/integration/locator-count-iframe.spec.d.ts +0 -1
  119. package/dist/cjs/tests/integration/locator-count-iframe.spec.js +0 -129
  120. package/dist/cjs/tests/integration/locator-count-iframe.spec.js.map +0 -1
  121. package/dist/cjs/tests/integration/locator-count.spec.d.ts +0 -1
  122. package/dist/cjs/tests/integration/locator-count.spec.js +0 -68
  123. package/dist/cjs/tests/integration/locator-count.spec.js.map +0 -1
  124. package/dist/cjs/tests/integration/locator-fill.spec.d.ts +0 -1
  125. package/dist/cjs/tests/integration/locator-fill.spec.js +0 -117
  126. package/dist/cjs/tests/integration/locator-fill.spec.js.map +0 -1
  127. package/dist/cjs/tests/integration/locator-input-methods.spec.d.ts +0 -1
  128. package/dist/cjs/tests/integration/locator-input-methods.spec.js +0 -127
  129. package/dist/cjs/tests/integration/locator-input-methods.spec.js.map +0 -1
  130. package/dist/cjs/tests/integration/locator-nth.spec.d.ts +0 -1
  131. package/dist/cjs/tests/integration/locator-nth.spec.js +0 -175
  132. package/dist/cjs/tests/integration/locator-nth.spec.js.map +0 -1
  133. package/dist/cjs/tests/integration/locator-select-option.spec.d.ts +0 -1
  134. package/dist/cjs/tests/integration/locator-select-option.spec.js +0 -216
  135. package/dist/cjs/tests/integration/locator-select-option.spec.js.map +0 -1
  136. package/dist/cjs/tests/integration/logger-initialization.spec.d.ts +0 -1
  137. package/dist/cjs/tests/integration/logger-initialization.spec.js +0 -597
  138. package/dist/cjs/tests/integration/logger-initialization.spec.js.map +0 -1
  139. package/dist/cjs/tests/integration/multi-instance-logger.spec.d.ts +0 -1
  140. package/dist/cjs/tests/integration/multi-instance-logger.spec.js +0 -293
  141. package/dist/cjs/tests/integration/multi-instance-logger.spec.js.map +0 -1
  142. package/dist/cjs/tests/integration/nested-div.spec.d.ts +0 -1
  143. package/dist/cjs/tests/integration/nested-div.spec.js +0 -22
  144. package/dist/cjs/tests/integration/nested-div.spec.js.map +0 -1
  145. package/dist/cjs/tests/integration/observe-element-id-format.spec.d.ts +0 -1
  146. package/dist/cjs/tests/integration/observe-element-id-format.spec.js +0 -130
  147. package/dist/cjs/tests/integration/observe-element-id-format.spec.js.map +0 -1
  148. package/dist/cjs/tests/integration/page-addInitScript.spec.d.ts +0 -1
  149. package/dist/cjs/tests/integration/page-addInitScript.spec.js +0 -94
  150. package/dist/cjs/tests/integration/page-addInitScript.spec.js.map +0 -1
  151. package/dist/cjs/tests/integration/page-console.spec.d.ts +0 -1
  152. package/dist/cjs/tests/integration/page-console.spec.js +0 -47
  153. package/dist/cjs/tests/integration/page-console.spec.js.map +0 -1
  154. package/dist/cjs/tests/integration/page-drag-and-drop.spec.d.ts +0 -1
  155. package/dist/cjs/tests/integration/page-drag-and-drop.spec.js +0 -437
  156. package/dist/cjs/tests/integration/page-drag-and-drop.spec.js.map +0 -1
  157. package/dist/cjs/tests/integration/page-extra-http-headers.spec.d.ts +0 -1
  158. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +0 -85
  159. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +0 -1
  160. package/dist/cjs/tests/integration/page-goto-response.spec.d.ts +0 -1
  161. package/dist/cjs/tests/integration/page-goto-response.spec.js +0 -34
  162. package/dist/cjs/tests/integration/page-goto-response.spec.js.map +0 -1
  163. package/dist/cjs/tests/integration/page-hover.spec.d.ts +0 -1
  164. package/dist/cjs/tests/integration/page-hover.spec.js +0 -165
  165. package/dist/cjs/tests/integration/page-hover.spec.js.map +0 -1
  166. package/dist/cjs/tests/integration/page-screenshot.spec.d.ts +0 -1
  167. package/dist/cjs/tests/integration/page-screenshot.spec.js +0 -292
  168. package/dist/cjs/tests/integration/page-screenshot.spec.js.map +0 -1
  169. package/dist/cjs/tests/integration/page-scroll.spec.d.ts +0 -1
  170. package/dist/cjs/tests/integration/page-scroll.spec.js +0 -183
  171. package/dist/cjs/tests/integration/page-scroll.spec.js.map +0 -1
  172. package/dist/cjs/tests/integration/page-send-cdp.spec.d.ts +0 -1
  173. package/dist/cjs/tests/integration/page-send-cdp.spec.js +0 -47
  174. package/dist/cjs/tests/integration/page-send-cdp.spec.js.map +0 -1
  175. package/dist/cjs/tests/integration/perform-understudy-method.spec.d.ts +0 -1
  176. package/dist/cjs/tests/integration/perform-understudy-method.spec.js +0 -63
  177. package/dist/cjs/tests/integration/perform-understudy-method.spec.js.map +0 -1
  178. package/dist/cjs/tests/integration/setinputfiles.spec.d.ts +0 -1
  179. package/dist/cjs/tests/integration/setinputfiles.spec.js +0 -133
  180. package/dist/cjs/tests/integration/setinputfiles.spec.js.map +0 -1
  181. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.d.ts +0 -1
  182. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js +0 -161
  183. package/dist/cjs/tests/integration/shadow-iframe-oopif.spec.js.map +0 -1
  184. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.d.ts +0 -1
  185. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js +0 -160
  186. package/dist/cjs/tests/integration/shadow-iframe-spif.spec.js.map +0 -1
  187. package/dist/cjs/tests/integration/testUtils.d.ts +0 -40
  188. package/dist/cjs/tests/integration/testUtils.js +0 -188
  189. package/dist/cjs/tests/integration/testUtils.js.map +0 -1
  190. package/dist/cjs/tests/integration/text-selector-innermost.spec.d.ts +0 -1
  191. package/dist/cjs/tests/integration/text-selector-innermost.spec.js +0 -105
  192. package/dist/cjs/tests/integration/text-selector-innermost.spec.js.map +0 -1
  193. package/dist/cjs/tests/integration/timeouts.spec.d.ts +0 -1
  194. package/dist/cjs/tests/integration/timeouts.spec.js +0 -309
  195. package/dist/cjs/tests/integration/timeouts.spec.js.map +0 -1
  196. package/dist/cjs/tests/integration/user-data-dir.spec.d.ts +0 -1
  197. package/dist/cjs/tests/integration/user-data-dir.spec.js +0 -77
  198. package/dist/cjs/tests/integration/user-data-dir.spec.js.map +0 -1
  199. package/dist/cjs/tests/integration/v3.config.d.ts +0 -4
  200. package/dist/cjs/tests/integration/v3.config.js +0 -11
  201. package/dist/cjs/tests/integration/v3.config.js.map +0 -1
  202. package/dist/cjs/tests/integration/v3.dynamic.config.d.ts +0 -4
  203. package/dist/cjs/tests/integration/v3.dynamic.config.js +0 -48
  204. package/dist/cjs/tests/integration/v3.dynamic.config.js.map +0 -1
  205. package/dist/cjs/tests/integration/v3.playwright.config.d.ts +0 -2
  206. package/dist/cjs/tests/integration/v3.playwright.config.js +0 -48
  207. package/dist/cjs/tests/integration/v3.playwright.config.js.map +0 -1
  208. package/dist/cjs/tests/integration/wait-for-selector.spec.d.ts +0 -1
  209. package/dist/cjs/tests/integration/wait-for-selector.spec.js +0 -683
  210. package/dist/cjs/tests/integration/wait-for-selector.spec.js.map +0 -1
  211. package/dist/cjs/tests/integration/wait-for-timeout.spec.d.ts +0 -1
  212. package/dist/cjs/tests/integration/wait-for-timeout.spec.js +0 -118
  213. package/dist/cjs/tests/integration/wait-for-timeout.spec.js.map +0 -1
  214. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.d.ts +0 -1
  215. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js +0 -87
  216. package/dist/cjs/tests/integration/xpath-for-location-deep.spec.js.map +0 -1
  217. package/dist/cjs/tests/unit/agent-captcha-hooks.test.d.ts +0 -1
  218. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +0 -341
  219. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +0 -1
  220. package/dist/cjs/tests/unit/agent-execution-model.test.d.ts +0 -1
  221. package/dist/cjs/tests/unit/agent-execution-model.test.js +0 -150
  222. package/dist/cjs/tests/unit/agent-execution-model.test.js.map +0 -1
  223. package/dist/cjs/tests/unit/agent-metrics.test.d.ts +0 -1
  224. package/dist/cjs/tests/unit/agent-metrics.test.js +0 -112
  225. package/dist/cjs/tests/unit/agent-metrics.test.js.map +0 -1
  226. package/dist/cjs/tests/unit/agent-mode-routing.test.d.ts +0 -1
  227. package/dist/cjs/tests/unit/agent-mode-routing.test.js +0 -88
  228. package/dist/cjs/tests/unit/agent-mode-routing.test.js.map +0 -1
  229. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.d.ts +0 -1
  230. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js +0 -23
  231. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js.map +0 -1
  232. package/dist/cjs/tests/unit/agent-temperature.test.d.ts +0 -1
  233. package/dist/cjs/tests/unit/agent-temperature.test.js +0 -191
  234. package/dist/cjs/tests/unit/agent-temperature.test.js.map +0 -1
  235. package/dist/cjs/tests/unit/agent-variables-validation.test.d.ts +0 -1
  236. package/dist/cjs/tests/unit/agent-variables-validation.test.js +0 -43
  237. package/dist/cjs/tests/unit/agent-variables-validation.test.js.map +0 -1
  238. package/dist/cjs/tests/unit/aisdk-clients.test.d.ts +0 -1
  239. package/dist/cjs/tests/unit/aisdk-clients.test.js +0 -86
  240. package/dist/cjs/tests/unit/aisdk-clients.test.js.map +0 -1
  241. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +0 -1
  242. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js +0 -250
  243. package/dist/cjs/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +0 -1
  244. package/dist/cjs/tests/unit/anthropic-cua-triple-click.test.d.ts +0 -1
  245. package/dist/cjs/tests/unit/anthropic-cua-triple-click.test.js +0 -87
  246. package/dist/cjs/tests/unit/anthropic-cua-triple-click.test.js.map +0 -1
  247. package/dist/cjs/tests/unit/api-client-observe-variables.test.d.ts +0 -1
  248. package/dist/cjs/tests/unit/api-client-observe-variables.test.js +0 -135
  249. package/dist/cjs/tests/unit/api-client-observe-variables.test.js.map +0 -1
  250. package/dist/cjs/tests/unit/api-multiregion.test.d.ts +0 -1
  251. package/dist/cjs/tests/unit/api-multiregion.test.js +0 -58
  252. package/dist/cjs/tests/unit/api-multiregion.test.js.map +0 -1
  253. package/dist/cjs/tests/unit/api-optional-model-api-key.test.d.ts +0 -1
  254. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js +0 -155
  255. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js.map +0 -1
  256. package/dist/cjs/tests/unit/api-variables-schema.test.d.ts +0 -1
  257. package/dist/cjs/tests/unit/api-variables-schema.test.js +0 -69
  258. package/dist/cjs/tests/unit/api-variables-schema.test.js.map +0 -1
  259. package/dist/cjs/tests/unit/browserbase-session-accessors.test.d.ts +0 -1
  260. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +0 -142
  261. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +0 -1
  262. package/dist/cjs/tests/unit/cache-llm-resolution.test.d.ts +0 -1
  263. package/dist/cjs/tests/unit/cache-llm-resolution.test.js +0 -186
  264. package/dist/cjs/tests/unit/cache-llm-resolution.test.js.map +0 -1
  265. package/dist/cjs/tests/unit/captcha-solver.test.d.ts +0 -1
  266. package/dist/cjs/tests/unit/captcha-solver.test.js +0 -154
  267. package/dist/cjs/tests/unit/captcha-solver.test.js.map +0 -1
  268. package/dist/cjs/tests/unit/cdp-connection-close.test.d.ts +0 -1
  269. package/dist/cjs/tests/unit/cdp-connection-close.test.js +0 -74
  270. package/dist/cjs/tests/unit/cdp-connection-close.test.js.map +0 -1
  271. package/dist/cjs/tests/unit/context-extra-http-headers.test.d.ts +0 -1
  272. package/dist/cjs/tests/unit/context-extra-http-headers.test.js +0 -58
  273. package/dist/cjs/tests/unit/context-extra-http-headers.test.js.map +0 -1
  274. package/dist/cjs/tests/unit/cookies.test.d.ts +0 -1
  275. package/dist/cjs/tests/unit/cookies.test.js +0 -944
  276. package/dist/cjs/tests/unit/cookies.test.js.map +0 -1
  277. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.d.ts +0 -1
  278. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js +0 -95
  279. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js.map +0 -1
  280. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.d.ts +0 -1
  281. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js +0 -43
  282. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js.map +0 -1
  283. package/dist/cjs/tests/unit/flowlogger-eventstore.test.d.ts +0 -1
  284. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js +0 -250
  285. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +0 -1
  286. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.d.ts +0 -1
  287. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js +0 -60
  288. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js.map +0 -1
  289. package/dist/cjs/tests/unit/helpers/mockCDPSession.d.ts +0 -19
  290. package/dist/cjs/tests/unit/helpers/mockCDPSession.js +0 -29
  291. package/dist/cjs/tests/unit/helpers/mockCDPSession.js.map +0 -1
  292. package/dist/cjs/tests/unit/inference-temperature.test.d.ts +0 -1
  293. package/dist/cjs/tests/unit/inference-temperature.test.js +0 -65
  294. package/dist/cjs/tests/unit/inference-temperature.test.js.map +0 -1
  295. package/dist/cjs/tests/unit/llm-middleware.test.d.ts +0 -1
  296. package/dist/cjs/tests/unit/llm-middleware.test.js +0 -495
  297. package/dist/cjs/tests/unit/llm-middleware.test.js.map +0 -1
  298. package/dist/cjs/tests/unit/llm-provider.test.d.ts +0 -1
  299. package/dist/cjs/tests/unit/llm-provider.test.js +0 -64
  300. package/dist/cjs/tests/unit/llm-provider.test.js.map +0 -1
  301. package/dist/cjs/tests/unit/microsoft-cua-client.test.d.ts +0 -1
  302. package/dist/cjs/tests/unit/microsoft-cua-client.test.js +0 -86
  303. package/dist/cjs/tests/unit/microsoft-cua-client.test.js.map +0 -1
  304. package/dist/cjs/tests/unit/model-deprecation.test.d.ts +0 -1
  305. package/dist/cjs/tests/unit/model-deprecation.test.js +0 -142
  306. package/dist/cjs/tests/unit/model-deprecation.test.js.map +0 -1
  307. package/dist/cjs/tests/unit/model-utils.test.d.ts +0 -1
  308. package/dist/cjs/tests/unit/model-utils.test.js +0 -42
  309. package/dist/cjs/tests/unit/model-utils.test.js.map +0 -1
  310. package/dist/cjs/tests/unit/openai-compatible-temperature.test.d.ts +0 -1
  311. package/dist/cjs/tests/unit/openai-compatible-temperature.test.js +0 -84
  312. package/dist/cjs/tests/unit/openai-compatible-temperature.test.js.map +0 -1
  313. package/dist/cjs/tests/unit/openai-cua-client.test.d.ts +0 -1
  314. package/dist/cjs/tests/unit/openai-cua-client.test.js +0 -71
  315. package/dist/cjs/tests/unit/openai-cua-client.test.js.map +0 -1
  316. package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +0 -1
  317. package/dist/cjs/tests/unit/page-extra-http-headers.test.js +0 -92
  318. package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +0 -1
  319. package/dist/cjs/tests/unit/page-snapshot.test.d.ts +0 -1
  320. package/dist/cjs/tests/unit/page-snapshot.test.js +0 -75
  321. package/dist/cjs/tests/unit/page-snapshot.test.js.map +0 -1
  322. package/dist/cjs/tests/unit/prompt-observe-variables.test.d.ts +0 -1
  323. package/dist/cjs/tests/unit/prompt-observe-variables.test.js +0 -25
  324. package/dist/cjs/tests/unit/prompt-observe-variables.test.js.map +0 -1
  325. package/dist/cjs/tests/unit/public-api/export-surface.test.d.ts +0 -1
  326. package/dist/cjs/tests/unit/public-api/export-surface.test.js +0 -107
  327. package/dist/cjs/tests/unit/public-api/export-surface.test.js.map +0 -1
  328. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.d.ts +0 -1
  329. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +0 -179
  330. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +0 -1
  331. package/dist/cjs/tests/unit/public-api/public-error-types.test.d.ts +0 -62
  332. package/dist/cjs/tests/unit/public-api/public-error-types.test.js +0 -110
  333. package/dist/cjs/tests/unit/public-api/public-error-types.test.js.map +0 -1
  334. package/dist/cjs/tests/unit/public-api/public-types.test.d.ts +0 -1
  335. package/dist/cjs/tests/unit/public-api/public-types.test.js +0 -99
  336. package/dist/cjs/tests/unit/public-api/public-types.test.js.map +0 -1
  337. package/dist/cjs/tests/unit/public-api/runtime-utils.test.d.ts +0 -1
  338. package/dist/cjs/tests/unit/public-api/runtime-utils.test.js +0 -60
  339. package/dist/cjs/tests/unit/public-api/runtime-utils.test.js.map +0 -1
  340. package/dist/cjs/tests/unit/public-api/schema-utils.test.d.ts +0 -1
  341. package/dist/cjs/tests/unit/public-api/schema-utils.test.js +0 -95
  342. package/dist/cjs/tests/unit/public-api/schema-utils.test.js.map +0 -1
  343. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.d.ts +0 -1
  344. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js +0 -121
  345. package/dist/cjs/tests/unit/public-api/timeout-error-types.test.js.map +0 -1
  346. package/dist/cjs/tests/unit/public-api/tool-type-export.test.d.ts +0 -1
  347. package/dist/cjs/tests/unit/public-api/tool-type-export.test.js +0 -65
  348. package/dist/cjs/tests/unit/public-api/tool-type-export.test.js.map +0 -1
  349. package/dist/cjs/tests/unit/public-api/v3-core.test.d.ts +0 -1
  350. package/dist/cjs/tests/unit/public-api/v3-core.test.js +0 -108
  351. package/dist/cjs/tests/unit/public-api/v3-core.test.js.map +0 -1
  352. package/dist/cjs/tests/unit/safety-confirmation.test.d.ts +0 -1
  353. package/dist/cjs/tests/unit/safety-confirmation.test.js +0 -110
  354. package/dist/cjs/tests/unit/safety-confirmation.test.js.map +0 -1
  355. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.d.ts +0 -1
  356. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js +0 -431
  357. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js.map +0 -1
  358. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.d.ts +0 -1
  359. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js +0 -339
  360. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js.map +0 -1
  361. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.d.ts +0 -1
  362. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js +0 -504
  363. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js.map +0 -1
  364. package/dist/cjs/tests/unit/snapshot-cbor.test.d.ts +0 -1
  365. package/dist/cjs/tests/unit/snapshot-cbor.test.js +0 -204
  366. package/dist/cjs/tests/unit/snapshot-cbor.test.js.map +0 -1
  367. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.d.ts +0 -1
  368. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js +0 -220
  369. package/dist/cjs/tests/unit/snapshot-dom-session-builders.test.js.map +0 -1
  370. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.d.ts +0 -1
  371. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js +0 -107
  372. package/dist/cjs/tests/unit/snapshot-dom-tree-utils.test.js.map +0 -1
  373. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.d.ts +0 -1
  374. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js +0 -89
  375. package/dist/cjs/tests/unit/snapshot-focus-selectors-utils.test.js.map +0 -1
  376. package/dist/cjs/tests/unit/snapshot-frame-merge.test.d.ts +0 -1
  377. package/dist/cjs/tests/unit/snapshot-frame-merge.test.js +0 -335
  378. package/dist/cjs/tests/unit/snapshot-frame-merge.test.js.map +0 -1
  379. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.d.ts +0 -1
  380. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js +0 -127
  381. package/dist/cjs/tests/unit/snapshot-tree-format-utils.test.js.map +0 -1
  382. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.d.ts +0 -1
  383. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js +0 -74
  384. package/dist/cjs/tests/unit/snapshot-xpath-utils.test.js.map +0 -1
  385. package/dist/cjs/tests/unit/timeout-handlers.test.d.ts +0 -1
  386. package/dist/cjs/tests/unit/timeout-handlers.test.js +0 -933
  387. package/dist/cjs/tests/unit/timeout-handlers.test.js.map +0 -1
  388. package/dist/cjs/tests/unit/understudy-command-exception.test.d.ts +0 -1
  389. package/dist/cjs/tests/unit/understudy-command-exception.test.js +0 -57
  390. package/dist/cjs/tests/unit/understudy-command-exception.test.js.map +0 -1
  391. package/dist/cjs/tests/unit/xpath-parser.test.d.ts +0 -1
  392. package/dist/cjs/tests/unit/xpath-parser.test.js +0 -311
  393. package/dist/cjs/tests/unit/xpath-parser.test.js.map +0 -1
  394. package/dist/cjs/tests/unit/xpath-resolver.test.d.ts +0 -1
  395. package/dist/cjs/tests/unit/xpath-resolver.test.js +0 -80
  396. package/dist/cjs/tests/unit/xpath-resolver.test.js.map +0 -1
  397. package/dist/cjs/tests/unit/zod-enum-compatibility.test.d.ts +0 -1
  398. package/dist/cjs/tests/unit/zod-enum-compatibility.test.js +0 -149
  399. package/dist/cjs/tests/unit/zod-enum-compatibility.test.js.map +0 -1
  400. package/dist/esm/tests/cache-variables.test.d.ts +0 -1
  401. package/dist/esm/tests/cache-variables.test.js +0 -219
  402. package/dist/esm/tests/cache-variables.test.js.map +0 -1
  403. package/dist/esm/tests/integration/agent-abort-signal.spec.d.ts +0 -1
  404. package/dist/esm/tests/integration/agent-abort-signal.spec.js +0 -121
  405. package/dist/esm/tests/integration/agent-abort-signal.spec.js.map +0 -1
  406. package/dist/esm/tests/integration/agent-cache-self-heal.spec.d.ts +0 -1
  407. package/dist/esm/tests/integration/agent-cache-self-heal.spec.js +0 -78
  408. package/dist/esm/tests/integration/agent-cache-self-heal.spec.js.map +0 -1
  409. package/dist/esm/tests/integration/agent-callbacks.spec.d.ts +0 -1
  410. package/dist/esm/tests/integration/agent-callbacks.spec.js +0 -383
  411. package/dist/esm/tests/integration/agent-callbacks.spec.js.map +0 -1
  412. package/dist/esm/tests/integration/agent-experimental-validation.spec.d.ts +0 -1
  413. package/dist/esm/tests/integration/agent-experimental-validation.spec.js +0 -360
  414. package/dist/esm/tests/integration/agent-experimental-validation.spec.js.map +0 -1
  415. package/dist/esm/tests/integration/agent-hybrid-mode.spec.d.ts +0 -1
  416. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +0 -260
  417. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +0 -1
  418. package/dist/esm/tests/integration/agent-message-continuation.spec.d.ts +0 -1
  419. package/dist/esm/tests/integration/agent-message-continuation.spec.js +0 -110
  420. package/dist/esm/tests/integration/agent-message-continuation.spec.js.map +0 -1
  421. package/dist/esm/tests/integration/agent-streaming.spec.d.ts +0 -1
  422. package/dist/esm/tests/integration/agent-streaming.spec.js +0 -138
  423. package/dist/esm/tests/integration/agent-streaming.spec.js.map +0 -1
  424. package/dist/esm/tests/integration/cdp-close-api-region.spec.d.ts +0 -1
  425. package/dist/esm/tests/integration/cdp-close-api-region.spec.js +0 -39
  426. package/dist/esm/tests/integration/cdp-close-api-region.spec.js.map +0 -1
  427. package/dist/esm/tests/integration/cdp-connection-close.spec.d.ts +0 -1
  428. package/dist/esm/tests/integration/cdp-connection-close.spec.js +0 -74
  429. package/dist/esm/tests/integration/cdp-connection-close.spec.js.map +0 -1
  430. package/dist/esm/tests/integration/cdp-session-detached.spec.d.ts +0 -1
  431. package/dist/esm/tests/integration/cdp-session-detached.spec.js +0 -43
  432. package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +0 -1
  433. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.d.ts +0 -1
  434. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js +0 -54
  435. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js.map +0 -1
  436. package/dist/esm/tests/integration/click-count.spec.d.ts +0 -1
  437. package/dist/esm/tests/integration/click-count.spec.js +0 -161
  438. package/dist/esm/tests/integration/click-count.spec.js.map +0 -1
  439. package/dist/esm/tests/integration/connect-to-existing-browser.spec.d.ts +0 -1
  440. package/dist/esm/tests/integration/connect-to-existing-browser.spec.js +0 -97
  441. package/dist/esm/tests/integration/connect-to-existing-browser.spec.js.map +0 -1
  442. package/dist/esm/tests/integration/context-addInitScript.spec.d.ts +0 -1
  443. package/dist/esm/tests/integration/context-addInitScript.spec.js +0 -283
  444. package/dist/esm/tests/integration/context-addInitScript.spec.js.map +0 -1
  445. package/dist/esm/tests/integration/context-extra-http-headers.spec.d.ts +0 -1
  446. package/dist/esm/tests/integration/context-extra-http-headers.spec.js +0 -47
  447. package/dist/esm/tests/integration/context-extra-http-headers.spec.js.map +0 -1
  448. package/dist/esm/tests/integration/cookies.spec.d.ts +0 -1
  449. package/dist/esm/tests/integration/cookies.spec.js +0 -185
  450. package/dist/esm/tests/integration/cookies.spec.js.map +0 -1
  451. package/dist/esm/tests/integration/default-page-tracking.spec.d.ts +0 -1
  452. package/dist/esm/tests/integration/default-page-tracking.spec.js +0 -50
  453. package/dist/esm/tests/integration/default-page-tracking.spec.js.map +0 -1
  454. package/dist/esm/tests/integration/downloads.spec.d.ts +0 -1
  455. package/dist/esm/tests/integration/downloads.spec.js +0 -47
  456. package/dist/esm/tests/integration/downloads.spec.js.map +0 -1
  457. package/dist/esm/tests/integration/flowLogger.spec.d.ts +0 -1
  458. package/dist/esm/tests/integration/flowLogger.spec.js +0 -716
  459. package/dist/esm/tests/integration/flowLogger.spec.js.map +0 -1
  460. package/dist/esm/tests/integration/frame-get-location-and-click.spec.d.ts +0 -1
  461. package/dist/esm/tests/integration/frame-get-location-and-click.spec.js +0 -55
  462. package/dist/esm/tests/integration/frame-get-location-and-click.spec.js.map +0 -1
  463. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +0 -1
  464. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +0 -217
  465. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +0 -1
  466. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.d.ts +0 -1
  467. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js +0 -472
  468. package/dist/esm/tests/integration/iframe-ctx-addInitScript.spec.js.map +0 -1
  469. package/dist/esm/tests/integration/keep-alive.child.d.ts +0 -1
  470. package/dist/esm/tests/integration/keep-alive.child.js +0 -83
  471. package/dist/esm/tests/integration/keep-alive.child.js.map +0 -1
  472. package/dist/esm/tests/integration/keep-alive.spec.d.ts +0 -22
  473. package/dist/esm/tests/integration/keep-alive.spec.js +0 -482
  474. package/dist/esm/tests/integration/keep-alive.spec.js.map +0 -1
  475. package/dist/esm/tests/integration/keyboard.spec.d.ts +0 -1
  476. package/dist/esm/tests/integration/keyboard.spec.js +0 -257
  477. package/dist/esm/tests/integration/keyboard.spec.js.map +0 -1
  478. package/dist/esm/tests/integration/locator-backend-node-id.spec.d.ts +0 -1
  479. package/dist/esm/tests/integration/locator-backend-node-id.spec.js +0 -148
  480. package/dist/esm/tests/integration/locator-backend-node-id.spec.js.map +0 -1
  481. package/dist/esm/tests/integration/locator-content-methods.spec.d.ts +0 -1
  482. package/dist/esm/tests/integration/locator-content-methods.spec.js +0 -178
  483. package/dist/esm/tests/integration/locator-content-methods.spec.js.map +0 -1
  484. package/dist/esm/tests/integration/locator-count-iframe.spec.d.ts +0 -1
  485. package/dist/esm/tests/integration/locator-count-iframe.spec.js +0 -127
  486. package/dist/esm/tests/integration/locator-count-iframe.spec.js.map +0 -1
  487. package/dist/esm/tests/integration/locator-count.spec.d.ts +0 -1
  488. package/dist/esm/tests/integration/locator-count.spec.js +0 -66
  489. package/dist/esm/tests/integration/locator-count.spec.js.map +0 -1
  490. package/dist/esm/tests/integration/locator-fill.spec.d.ts +0 -1
  491. package/dist/esm/tests/integration/locator-fill.spec.js +0 -115
  492. package/dist/esm/tests/integration/locator-fill.spec.js.map +0 -1
  493. package/dist/esm/tests/integration/locator-input-methods.spec.d.ts +0 -1
  494. package/dist/esm/tests/integration/locator-input-methods.spec.js +0 -125
  495. package/dist/esm/tests/integration/locator-input-methods.spec.js.map +0 -1
  496. package/dist/esm/tests/integration/locator-nth.spec.d.ts +0 -1
  497. package/dist/esm/tests/integration/locator-nth.spec.js +0 -173
  498. package/dist/esm/tests/integration/locator-nth.spec.js.map +0 -1
  499. package/dist/esm/tests/integration/locator-select-option.spec.d.ts +0 -1
  500. package/dist/esm/tests/integration/locator-select-option.spec.js +0 -214
  501. package/dist/esm/tests/integration/locator-select-option.spec.js.map +0 -1
  502. package/dist/esm/tests/integration/logger-initialization.spec.d.ts +0 -1
  503. package/dist/esm/tests/integration/logger-initialization.spec.js +0 -595
  504. package/dist/esm/tests/integration/logger-initialization.spec.js.map +0 -1
  505. package/dist/esm/tests/integration/multi-instance-logger.spec.d.ts +0 -1
  506. package/dist/esm/tests/integration/multi-instance-logger.spec.js +0 -291
  507. package/dist/esm/tests/integration/multi-instance-logger.spec.js.map +0 -1
  508. package/dist/esm/tests/integration/nested-div.spec.d.ts +0 -1
  509. package/dist/esm/tests/integration/nested-div.spec.js +0 -20
  510. package/dist/esm/tests/integration/nested-div.spec.js.map +0 -1
  511. package/dist/esm/tests/integration/observe-element-id-format.spec.d.ts +0 -1
  512. package/dist/esm/tests/integration/observe-element-id-format.spec.js +0 -128
  513. package/dist/esm/tests/integration/observe-element-id-format.spec.js.map +0 -1
  514. package/dist/esm/tests/integration/page-addInitScript.spec.d.ts +0 -1
  515. package/dist/esm/tests/integration/page-addInitScript.spec.js +0 -92
  516. package/dist/esm/tests/integration/page-addInitScript.spec.js.map +0 -1
  517. package/dist/esm/tests/integration/page-console.spec.d.ts +0 -1
  518. package/dist/esm/tests/integration/page-console.spec.js +0 -45
  519. package/dist/esm/tests/integration/page-console.spec.js.map +0 -1
  520. package/dist/esm/tests/integration/page-drag-and-drop.spec.d.ts +0 -1
  521. package/dist/esm/tests/integration/page-drag-and-drop.spec.js +0 -435
  522. package/dist/esm/tests/integration/page-drag-and-drop.spec.js.map +0 -1
  523. package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +0 -1
  524. package/dist/esm/tests/integration/page-extra-http-headers.spec.js +0 -83
  525. package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +0 -1
  526. package/dist/esm/tests/integration/page-goto-response.spec.d.ts +0 -1
  527. package/dist/esm/tests/integration/page-goto-response.spec.js +0 -32
  528. package/dist/esm/tests/integration/page-goto-response.spec.js.map +0 -1
  529. package/dist/esm/tests/integration/page-hover.spec.d.ts +0 -1
  530. package/dist/esm/tests/integration/page-hover.spec.js +0 -163
  531. package/dist/esm/tests/integration/page-hover.spec.js.map +0 -1
  532. package/dist/esm/tests/integration/page-screenshot.spec.d.ts +0 -1
  533. package/dist/esm/tests/integration/page-screenshot.spec.js +0 -257
  534. package/dist/esm/tests/integration/page-screenshot.spec.js.map +0 -1
  535. package/dist/esm/tests/integration/page-scroll.spec.d.ts +0 -1
  536. package/dist/esm/tests/integration/page-scroll.spec.js +0 -181
  537. package/dist/esm/tests/integration/page-scroll.spec.js.map +0 -1
  538. package/dist/esm/tests/integration/page-send-cdp.spec.d.ts +0 -1
  539. package/dist/esm/tests/integration/page-send-cdp.spec.js +0 -45
  540. package/dist/esm/tests/integration/page-send-cdp.spec.js.map +0 -1
  541. package/dist/esm/tests/integration/perform-understudy-method.spec.d.ts +0 -1
  542. package/dist/esm/tests/integration/perform-understudy-method.spec.js +0 -61
  543. package/dist/esm/tests/integration/perform-understudy-method.spec.js.map +0 -1
  544. package/dist/esm/tests/integration/setinputfiles.spec.d.ts +0 -1
  545. package/dist/esm/tests/integration/setinputfiles.spec.js +0 -128
  546. package/dist/esm/tests/integration/setinputfiles.spec.js.map +0 -1
  547. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.d.ts +0 -1
  548. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js +0 -156
  549. package/dist/esm/tests/integration/shadow-iframe-oopif.spec.js.map +0 -1
  550. package/dist/esm/tests/integration/shadow-iframe-spif.spec.d.ts +0 -1
  551. package/dist/esm/tests/integration/shadow-iframe-spif.spec.js +0 -155
  552. package/dist/esm/tests/integration/shadow-iframe-spif.spec.js.map +0 -1
  553. package/dist/esm/tests/integration/testUtils.d.ts +0 -40
  554. package/dist/esm/tests/integration/testUtils.js +0 -178
  555. package/dist/esm/tests/integration/testUtils.js.map +0 -1
  556. package/dist/esm/tests/integration/text-selector-innermost.spec.d.ts +0 -1
  557. package/dist/esm/tests/integration/text-selector-innermost.spec.js +0 -103
  558. package/dist/esm/tests/integration/text-selector-innermost.spec.js.map +0 -1
  559. package/dist/esm/tests/integration/timeouts.spec.d.ts +0 -1
  560. package/dist/esm/tests/integration/timeouts.spec.js +0 -307
  561. package/dist/esm/tests/integration/timeouts.spec.js.map +0 -1
  562. package/dist/esm/tests/integration/user-data-dir.spec.d.ts +0 -1
  563. package/dist/esm/tests/integration/user-data-dir.spec.js +0 -42
  564. package/dist/esm/tests/integration/user-data-dir.spec.js.map +0 -1
  565. package/dist/esm/tests/integration/v3.config.d.ts +0 -4
  566. package/dist/esm/tests/integration/v3.config.js +0 -7
  567. package/dist/esm/tests/integration/v3.config.js.map +0 -1
  568. package/dist/esm/tests/integration/v3.dynamic.config.d.ts +0 -4
  569. package/dist/esm/tests/integration/v3.dynamic.config.js +0 -44
  570. package/dist/esm/tests/integration/v3.dynamic.config.js.map +0 -1
  571. package/dist/esm/tests/integration/v3.playwright.config.d.ts +0 -2
  572. package/dist/esm/tests/integration/v3.playwright.config.js +0 -46
  573. package/dist/esm/tests/integration/v3.playwright.config.js.map +0 -1
  574. package/dist/esm/tests/integration/wait-for-selector.spec.d.ts +0 -1
  575. package/dist/esm/tests/integration/wait-for-selector.spec.js +0 -681
  576. package/dist/esm/tests/integration/wait-for-selector.spec.js.map +0 -1
  577. package/dist/esm/tests/integration/wait-for-timeout.spec.d.ts +0 -1
  578. package/dist/esm/tests/integration/wait-for-timeout.spec.js +0 -116
  579. package/dist/esm/tests/integration/wait-for-timeout.spec.js.map +0 -1
  580. package/dist/esm/tests/integration/xpath-for-location-deep.spec.d.ts +0 -1
  581. package/dist/esm/tests/integration/xpath-for-location-deep.spec.js +0 -85
  582. package/dist/esm/tests/integration/xpath-for-location-deep.spec.js.map +0 -1
  583. package/dist/esm/tests/unit/agent-captcha-hooks.test.d.ts +0 -1
  584. package/dist/esm/tests/unit/agent-captcha-hooks.test.js +0 -339
  585. package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +0 -1
  586. package/dist/esm/tests/unit/agent-execution-model.test.d.ts +0 -1
  587. package/dist/esm/tests/unit/agent-execution-model.test.js +0 -148
  588. package/dist/esm/tests/unit/agent-execution-model.test.js.map +0 -1
  589. package/dist/esm/tests/unit/agent-metrics.test.d.ts +0 -1
  590. package/dist/esm/tests/unit/agent-metrics.test.js +0 -110
  591. package/dist/esm/tests/unit/agent-metrics.test.js.map +0 -1
  592. package/dist/esm/tests/unit/agent-mode-routing.test.d.ts +0 -1
  593. package/dist/esm/tests/unit/agent-mode-routing.test.js +0 -86
  594. package/dist/esm/tests/unit/agent-mode-routing.test.js.map +0 -1
  595. package/dist/esm/tests/unit/agent-system-prompt-variables.test.d.ts +0 -1
  596. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js +0 -21
  597. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js.map +0 -1
  598. package/dist/esm/tests/unit/agent-temperature.test.d.ts +0 -1
  599. package/dist/esm/tests/unit/agent-temperature.test.js +0 -189
  600. package/dist/esm/tests/unit/agent-temperature.test.js.map +0 -1
  601. package/dist/esm/tests/unit/agent-variables-validation.test.d.ts +0 -1
  602. package/dist/esm/tests/unit/agent-variables-validation.test.js +0 -41
  603. package/dist/esm/tests/unit/agent-variables-validation.test.js.map +0 -1
  604. package/dist/esm/tests/unit/aisdk-clients.test.d.ts +0 -1
  605. package/dist/esm/tests/unit/aisdk-clients.test.js +0 -84
  606. package/dist/esm/tests/unit/aisdk-clients.test.js.map +0 -1
  607. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.d.ts +0 -1
  608. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js +0 -245
  609. package/dist/esm/tests/unit/anthropic-cua-adaptive-thinking.test.js.map +0 -1
  610. package/dist/esm/tests/unit/anthropic-cua-triple-click.test.d.ts +0 -1
  611. package/dist/esm/tests/unit/anthropic-cua-triple-click.test.js +0 -82
  612. package/dist/esm/tests/unit/anthropic-cua-triple-click.test.js.map +0 -1
  613. package/dist/esm/tests/unit/api-client-observe-variables.test.d.ts +0 -1
  614. package/dist/esm/tests/unit/api-client-observe-variables.test.js +0 -133
  615. package/dist/esm/tests/unit/api-client-observe-variables.test.js.map +0 -1
  616. package/dist/esm/tests/unit/api-multiregion.test.d.ts +0 -1
  617. package/dist/esm/tests/unit/api-multiregion.test.js +0 -56
  618. package/dist/esm/tests/unit/api-multiregion.test.js.map +0 -1
  619. package/dist/esm/tests/unit/api-optional-model-api-key.test.d.ts +0 -1
  620. package/dist/esm/tests/unit/api-optional-model-api-key.test.js +0 -153
  621. package/dist/esm/tests/unit/api-optional-model-api-key.test.js.map +0 -1
  622. package/dist/esm/tests/unit/api-variables-schema.test.d.ts +0 -1
  623. package/dist/esm/tests/unit/api-variables-schema.test.js +0 -67
  624. package/dist/esm/tests/unit/api-variables-schema.test.js.map +0 -1
  625. package/dist/esm/tests/unit/browserbase-session-accessors.test.d.ts +0 -1
  626. package/dist/esm/tests/unit/browserbase-session-accessors.test.js +0 -140
  627. package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +0 -1
  628. package/dist/esm/tests/unit/cache-llm-resolution.test.d.ts +0 -1
  629. package/dist/esm/tests/unit/cache-llm-resolution.test.js +0 -184
  630. package/dist/esm/tests/unit/cache-llm-resolution.test.js.map +0 -1
  631. package/dist/esm/tests/unit/captcha-solver.test.d.ts +0 -1
  632. package/dist/esm/tests/unit/captcha-solver.test.js +0 -152
  633. package/dist/esm/tests/unit/captcha-solver.test.js.map +0 -1
  634. package/dist/esm/tests/unit/cdp-connection-close.test.d.ts +0 -1
  635. package/dist/esm/tests/unit/cdp-connection-close.test.js +0 -72
  636. package/dist/esm/tests/unit/cdp-connection-close.test.js.map +0 -1
  637. package/dist/esm/tests/unit/context-extra-http-headers.test.d.ts +0 -1
  638. package/dist/esm/tests/unit/context-extra-http-headers.test.js +0 -56
  639. package/dist/esm/tests/unit/context-extra-http-headers.test.js.map +0 -1
  640. package/dist/esm/tests/unit/cookies.test.d.ts +0 -1
  641. package/dist/esm/tests/unit/cookies.test.js +0 -909
  642. package/dist/esm/tests/unit/cookies.test.js.map +0 -1
  643. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.d.ts +0 -1
  644. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js +0 -93
  645. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js.map +0 -1
  646. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.d.ts +0 -1
  647. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js +0 -41
  648. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js.map +0 -1
  649. package/dist/esm/tests/unit/flowlogger-eventstore.test.d.ts +0 -1
  650. package/dist/esm/tests/unit/flowlogger-eventstore.test.js +0 -248
  651. package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +0 -1
  652. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.d.ts +0 -1
  653. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js +0 -58
  654. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js.map +0 -1
  655. package/dist/esm/tests/unit/helpers/mockCDPSession.d.ts +0 -19
  656. package/dist/esm/tests/unit/helpers/mockCDPSession.js +0 -25
  657. package/dist/esm/tests/unit/helpers/mockCDPSession.js.map +0 -1
  658. package/dist/esm/tests/unit/inference-temperature.test.d.ts +0 -1
  659. package/dist/esm/tests/unit/inference-temperature.test.js +0 -63
  660. package/dist/esm/tests/unit/inference-temperature.test.js.map +0 -1
  661. package/dist/esm/tests/unit/llm-middleware.test.d.ts +0 -1
  662. package/dist/esm/tests/unit/llm-middleware.test.js +0 -460
  663. package/dist/esm/tests/unit/llm-middleware.test.js.map +0 -1
  664. package/dist/esm/tests/unit/llm-provider.test.d.ts +0 -1
  665. package/dist/esm/tests/unit/llm-provider.test.js +0 -62
  666. package/dist/esm/tests/unit/llm-provider.test.js.map +0 -1
  667. package/dist/esm/tests/unit/microsoft-cua-client.test.d.ts +0 -1
  668. package/dist/esm/tests/unit/microsoft-cua-client.test.js +0 -84
  669. package/dist/esm/tests/unit/microsoft-cua-client.test.js.map +0 -1
  670. package/dist/esm/tests/unit/model-deprecation.test.d.ts +0 -1
  671. package/dist/esm/tests/unit/model-deprecation.test.js +0 -140
  672. package/dist/esm/tests/unit/model-deprecation.test.js.map +0 -1
  673. package/dist/esm/tests/unit/model-utils.test.d.ts +0 -1
  674. package/dist/esm/tests/unit/model-utils.test.js +0 -40
  675. package/dist/esm/tests/unit/model-utils.test.js.map +0 -1
  676. package/dist/esm/tests/unit/openai-compatible-temperature.test.d.ts +0 -1
  677. package/dist/esm/tests/unit/openai-compatible-temperature.test.js +0 -82
  678. package/dist/esm/tests/unit/openai-compatible-temperature.test.js.map +0 -1
  679. package/dist/esm/tests/unit/openai-cua-client.test.d.ts +0 -1
  680. package/dist/esm/tests/unit/openai-cua-client.test.js +0 -69
  681. package/dist/esm/tests/unit/openai-cua-client.test.js.map +0 -1
  682. package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +0 -1
  683. package/dist/esm/tests/unit/page-extra-http-headers.test.js +0 -90
  684. package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +0 -1
  685. package/dist/esm/tests/unit/page-snapshot.test.d.ts +0 -1
  686. package/dist/esm/tests/unit/page-snapshot.test.js +0 -40
  687. package/dist/esm/tests/unit/page-snapshot.test.js.map +0 -1
  688. package/dist/esm/tests/unit/prompt-observe-variables.test.d.ts +0 -1
  689. package/dist/esm/tests/unit/prompt-observe-variables.test.js +0 -23
  690. package/dist/esm/tests/unit/prompt-observe-variables.test.js.map +0 -1
  691. package/dist/esm/tests/unit/public-api/export-surface.test.d.ts +0 -1
  692. package/dist/esm/tests/unit/public-api/export-surface.test.js +0 -72
  693. package/dist/esm/tests/unit/public-api/export-surface.test.js.map +0 -1
  694. package/dist/esm/tests/unit/public-api/llm-and-agents.test.d.ts +0 -1
  695. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +0 -144
  696. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +0 -1
  697. package/dist/esm/tests/unit/public-api/public-error-types.test.d.ts +0 -62
  698. package/dist/esm/tests/unit/public-api/public-error-types.test.js +0 -74
  699. package/dist/esm/tests/unit/public-api/public-error-types.test.js.map +0 -1
  700. package/dist/esm/tests/unit/public-api/public-types.test.d.ts +0 -1
  701. package/dist/esm/tests/unit/public-api/public-types.test.js +0 -97
  702. package/dist/esm/tests/unit/public-api/public-types.test.js.map +0 -1
  703. package/dist/esm/tests/unit/public-api/runtime-utils.test.d.ts +0 -1
  704. package/dist/esm/tests/unit/public-api/runtime-utils.test.js +0 -25
  705. package/dist/esm/tests/unit/public-api/runtime-utils.test.js.map +0 -1
  706. package/dist/esm/tests/unit/public-api/schema-utils.test.d.ts +0 -1
  707. package/dist/esm/tests/unit/public-api/schema-utils.test.js +0 -60
  708. package/dist/esm/tests/unit/public-api/schema-utils.test.js.map +0 -1
  709. package/dist/esm/tests/unit/public-api/timeout-error-types.test.d.ts +0 -1
  710. package/dist/esm/tests/unit/public-api/timeout-error-types.test.js +0 -86
  711. package/dist/esm/tests/unit/public-api/timeout-error-types.test.js.map +0 -1
  712. package/dist/esm/tests/unit/public-api/tool-type-export.test.d.ts +0 -1
  713. package/dist/esm/tests/unit/public-api/tool-type-export.test.js +0 -30
  714. package/dist/esm/tests/unit/public-api/tool-type-export.test.js.map +0 -1
  715. package/dist/esm/tests/unit/public-api/v3-core.test.d.ts +0 -1
  716. package/dist/esm/tests/unit/public-api/v3-core.test.js +0 -73
  717. package/dist/esm/tests/unit/public-api/v3-core.test.js.map +0 -1
  718. package/dist/esm/tests/unit/safety-confirmation.test.d.ts +0 -1
  719. package/dist/esm/tests/unit/safety-confirmation.test.js +0 -108
  720. package/dist/esm/tests/unit/safety-confirmation.test.js.map +0 -1
  721. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.d.ts +0 -1
  722. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js +0 -396
  723. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js.map +0 -1
  724. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.d.ts +0 -1
  725. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js +0 -337
  726. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js.map +0 -1
  727. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.d.ts +0 -1
  728. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js +0 -469
  729. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js.map +0 -1
  730. package/dist/esm/tests/unit/snapshot-cbor.test.d.ts +0 -1
  731. package/dist/esm/tests/unit/snapshot-cbor.test.js +0 -202
  732. package/dist/esm/tests/unit/snapshot-cbor.test.js.map +0 -1
  733. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.d.ts +0 -1
  734. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js +0 -218
  735. package/dist/esm/tests/unit/snapshot-dom-session-builders.test.js.map +0 -1
  736. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.d.ts +0 -1
  737. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js +0 -105
  738. package/dist/esm/tests/unit/snapshot-dom-tree-utils.test.js.map +0 -1
  739. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.d.ts +0 -1
  740. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js +0 -87
  741. package/dist/esm/tests/unit/snapshot-focus-selectors-utils.test.js.map +0 -1
  742. package/dist/esm/tests/unit/snapshot-frame-merge.test.d.ts +0 -1
  743. package/dist/esm/tests/unit/snapshot-frame-merge.test.js +0 -333
  744. package/dist/esm/tests/unit/snapshot-frame-merge.test.js.map +0 -1
  745. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.d.ts +0 -1
  746. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js +0 -125
  747. package/dist/esm/tests/unit/snapshot-tree-format-utils.test.js.map +0 -1
  748. package/dist/esm/tests/unit/snapshot-xpath-utils.test.d.ts +0 -1
  749. package/dist/esm/tests/unit/snapshot-xpath-utils.test.js +0 -72
  750. package/dist/esm/tests/unit/snapshot-xpath-utils.test.js.map +0 -1
  751. package/dist/esm/tests/unit/timeout-handlers.test.d.ts +0 -1
  752. package/dist/esm/tests/unit/timeout-handlers.test.js +0 -898
  753. package/dist/esm/tests/unit/timeout-handlers.test.js.map +0 -1
  754. package/dist/esm/tests/unit/understudy-command-exception.test.d.ts +0 -1
  755. package/dist/esm/tests/unit/understudy-command-exception.test.js +0 -55
  756. package/dist/esm/tests/unit/understudy-command-exception.test.js.map +0 -1
  757. package/dist/esm/tests/unit/xpath-parser.test.d.ts +0 -1
  758. package/dist/esm/tests/unit/xpath-parser.test.js +0 -309
  759. package/dist/esm/tests/unit/xpath-parser.test.js.map +0 -1
  760. package/dist/esm/tests/unit/xpath-resolver.test.d.ts +0 -1
  761. package/dist/esm/tests/unit/xpath-resolver.test.js +0 -78
  762. package/dist/esm/tests/unit/xpath-resolver.test.js.map +0 -1
  763. package/dist/esm/tests/unit/zod-enum-compatibility.test.d.ts +0 -1
  764. package/dist/esm/tests/unit/zod-enum-compatibility.test.js +0 -114
  765. package/dist/esm/tests/unit/zod-enum-compatibility.test.js.map +0 -1
@@ -1,84 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { MicrosoftCUAClient } from "../../lib/v3/agent/MicrosoftCUAClient.js";
3
- import { FlowLogger } from "../../lib/v3/flowlogger/FlowLogger.js";
4
- function createClient() {
5
- const client = new MicrosoftCUAClient("microsoft", "fara-7b", undefined, {
6
- apiKey: "test-key",
7
- baseURL: "https://example.com",
8
- });
9
- client.setScreenshotProvider(async () => "mock-base64-screenshot");
10
- return client;
11
- }
12
- describe("MicrosoftCUAClient", () => {
13
- it("emits FlowLogger request and response events for a successful model call", async () => {
14
- const client = createClient();
15
- const createCompletion = vi.fn().mockResolvedValue({
16
- choices: [
17
- {
18
- message: {
19
- content: 'thoughts\n<tool_call>\n{"name":"computer_use","arguments":{"action":"terminate","status":"success"}}\n</tool_call>',
20
- },
21
- },
22
- ],
23
- usage: {
24
- prompt_tokens: 11,
25
- completion_tokens: 5,
26
- total_tokens: 16,
27
- },
28
- });
29
- client.client = {
30
- chat: {
31
- completions: {
32
- create: createCompletion,
33
- },
34
- },
35
- };
36
- const requestSpy = vi.spyOn(FlowLogger, "logLlmRequest");
37
- const responseSpy = vi.spyOn(FlowLogger, "logLlmResponse");
38
- try {
39
- const result = await client.executeStep(vi.fn(), false);
40
- expect(result.completed).toBe(true);
41
- expect(createCompletion).toHaveBeenCalledTimes(1);
42
- expect(requestSpy).toHaveBeenCalledTimes(1);
43
- expect(responseSpy).toHaveBeenCalledTimes(1);
44
- const requestPayload = requestSpy.mock.calls[0]?.[0];
45
- const responsePayload = responseSpy.mock.calls[0]?.[0];
46
- expect(requestPayload.model).toBe("fara-7b");
47
- expect(responsePayload.model).toBe("fara-7b");
48
- expect(responsePayload.requestId).toBe(requestPayload.requestId);
49
- expect(responsePayload.inputTokens).toBe(11);
50
- expect(responsePayload.outputTokens).toBe(5);
51
- expect(responsePayload.output).toContain("terminate");
52
- }
53
- finally {
54
- requestSpy.mockRestore();
55
- responseSpy.mockRestore();
56
- }
57
- });
58
- it("emits only FlowLogger request event when model call fails", async () => {
59
- const client = createClient();
60
- const createCompletion = vi
61
- .fn()
62
- .mockRejectedValue(new Error("upstream model error"));
63
- client.client = {
64
- chat: {
65
- completions: {
66
- create: createCompletion,
67
- },
68
- },
69
- };
70
- const requestSpy = vi.spyOn(FlowLogger, "logLlmRequest");
71
- const responseSpy = vi.spyOn(FlowLogger, "logLlmResponse");
72
- try {
73
- await expect(client.executeStep(vi.fn(), false)).rejects.toThrow("upstream model error");
74
- expect(requestSpy).toHaveBeenCalledTimes(1);
75
- expect(responseSpy).not.toHaveBeenCalled();
76
- expect(createCompletion).toHaveBeenCalledTimes(1);
77
- }
78
- finally {
79
- requestSpy.mockRestore();
80
- responseSpy.mockRestore();
81
- }
82
- });
83
- });
84
- //# sourceMappingURL=microsoft-cua-client.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"microsoft-cua-client.test.js","sourceRoot":"","sources":["../../../../tests/unit/microsoft-cua-client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEnE,SAAS,YAAY;IACnB,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE;QACvE,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,qBAAqB;KAC/B,CAAC,CAAC;IACH,MAAM,CAAC,qBAAqB,CAAC,KAAK,IAAI,EAAE,CAAC,wBAAwB,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YACjD,OAAO,EAAE;gBACP;oBACE,OAAO,EAAE;wBACP,OAAO,EACL,oHAAoH;qBACvH;iBACF;aACF;YACD,KAAK,EAAE;gBACL,aAAa,EAAE,EAAE;gBACjB,iBAAiB,EAAE,CAAC;gBACpB,YAAY,EAAE,EAAE;aACjB;SACF,CAAC,CAAC;QAGD,MAKD,CAAC,MAAM,GAAG;YACT,IAAI,EAAE;gBACJ,WAAW,EAAE;oBACX,MAAM,EAAE,gBAAgB;iBACzB;aACF;SACF,CAAC;QAEF,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MACb,MAMD,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAE9B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAE7C,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAGlD,CAAC;YACF,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAMpD,CAAC;YAEF,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7C,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACjE,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACxD,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,WAAW,EAAE,CAAC;YACzB,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,gBAAgB,GAAG,EAAE;aACxB,EAAE,EAAE;aACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAGtD,MAKD,CAAC,MAAM,GAAG;YACT,IAAI,EAAE;gBACJ,WAAW,EAAE;oBACX,MAAM,EAAE,gBAAgB;iBACzB;aACF;SACF,CAAC;QAEF,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,MAAM,CAER,MAMD,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAC9B,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAE1C,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC3C,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,WAAW,EAAE,CAAC;YACzB,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, it, vi } from \"vitest\";\nimport { MicrosoftCUAClient } from \"../../lib/v3/agent/MicrosoftCUAClient.js\";\nimport { FlowLogger } from \"../../lib/v3/flowlogger/FlowLogger.js\";\n\nfunction createClient() {\n const client = new MicrosoftCUAClient(\"microsoft\", \"fara-7b\", undefined, {\n apiKey: \"test-key\",\n baseURL: \"https://example.com\",\n });\n client.setScreenshotProvider(async () => \"mock-base64-screenshot\");\n return client;\n}\n\ndescribe(\"MicrosoftCUAClient\", () => {\n it(\"emits FlowLogger request and response events for a successful model call\", async () => {\n const client = createClient();\n const createCompletion = vi.fn().mockResolvedValue({\n choices: [\n {\n message: {\n content:\n 'thoughts\\n<tool_call>\\n{\"name\":\"computer_use\",\"arguments\":{\"action\":\"terminate\",\"status\":\"success\"}}\\n</tool_call>',\n },\n },\n ],\n usage: {\n prompt_tokens: 11,\n completion_tokens: 5,\n total_tokens: 16,\n },\n });\n\n (\n client as unknown as {\n client: {\n chat: { completions: { create: (...args: unknown[]) => unknown } };\n };\n }\n ).client = {\n chat: {\n completions: {\n create: createCompletion,\n },\n },\n };\n\n const requestSpy = vi.spyOn(FlowLogger, \"logLlmRequest\");\n const responseSpy = vi.spyOn(FlowLogger, \"logLlmResponse\");\n\n try {\n const result = await (\n client as unknown as {\n executeStep: (\n logger: (message: unknown) => void,\n isFirstRound?: boolean,\n ) => Promise<{ completed: boolean }>;\n }\n ).executeStep(vi.fn(), false);\n\n expect(result.completed).toBe(true);\n expect(createCompletion).toHaveBeenCalledTimes(1);\n expect(requestSpy).toHaveBeenCalledTimes(1);\n expect(responseSpy).toHaveBeenCalledTimes(1);\n\n const requestPayload = requestSpy.mock.calls[0]?.[0] as {\n requestId: string;\n model: string;\n };\n const responsePayload = responseSpy.mock.calls[0]?.[0] as {\n requestId: string;\n model: string;\n inputTokens: number;\n outputTokens: number;\n output: string;\n };\n\n expect(requestPayload.model).toBe(\"fara-7b\");\n expect(responsePayload.model).toBe(\"fara-7b\");\n expect(responsePayload.requestId).toBe(requestPayload.requestId);\n expect(responsePayload.inputTokens).toBe(11);\n expect(responsePayload.outputTokens).toBe(5);\n expect(responsePayload.output).toContain(\"terminate\");\n } finally {\n requestSpy.mockRestore();\n responseSpy.mockRestore();\n }\n });\n\n it(\"emits only FlowLogger request event when model call fails\", async () => {\n const client = createClient();\n const createCompletion = vi\n .fn()\n .mockRejectedValue(new Error(\"upstream model error\"));\n\n (\n client as unknown as {\n client: {\n chat: { completions: { create: (...args: unknown[]) => unknown } };\n };\n }\n ).client = {\n chat: {\n completions: {\n create: createCompletion,\n },\n },\n };\n\n const requestSpy = vi.spyOn(FlowLogger, \"logLlmRequest\");\n const responseSpy = vi.spyOn(FlowLogger, \"logLlmResponse\");\n\n try {\n await expect(\n (\n client as unknown as {\n executeStep: (\n logger: (message: unknown) => void,\n isFirstRound?: boolean,\n ) => Promise<unknown>;\n }\n ).executeStep(vi.fn(), false),\n ).rejects.toThrow(\"upstream model error\");\n\n expect(requestSpy).toHaveBeenCalledTimes(1);\n expect(responseSpy).not.toHaveBeenCalled();\n expect(createCompletion).toHaveBeenCalledTimes(1);\n } finally {\n requestSpy.mockRestore();\n responseSpy.mockRestore();\n }\n });\n});\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,140 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { LLMProvider } from "../../lib/v3/llm/LLMProvider.js";
3
- import { UnsupportedModelError, UnsupportedAISDKModelProviderError, } from "../../lib/v3/types/public/sdkErrors.js";
4
- // Mock client options with fake API keys for testing
5
- const mockClientOptions = { apiKey: "test-api-key-for-testing" };
6
- describe("Model format deprecation", () => {
7
- describe("UnsupportedModelError", () => {
8
- it("includes guidance to use provider/model format for unknown model names", () => {
9
- const error = new UnsupportedModelError(["gpt-4o", "gemini-2.0-flash"]);
10
- // Should mention the new format
11
- expect(error.message).toContain("provider/model");
12
- // Should include link to docs
13
- expect(error.message).toContain("https://docs.stagehand.dev/v3/configuration/models");
14
- });
15
- it("includes example of provider/model format", () => {
16
- const error = new UnsupportedModelError(["gpt-4o"]);
17
- // Should provide examples like openai/gpt-4o
18
- expect(error.message).toContain("openai/gpt-4o");
19
- expect(error.message).toContain("anthropic/claude-sonnet-4");
20
- });
21
- it("works with feature parameter", () => {
22
- const error = new UnsupportedModelError(["gpt-4o"], "extract");
23
- expect(error.message).toContain("extract");
24
- expect(error.message).toContain("provider/model");
25
- expect(error.message).toContain("https://docs.stagehand.dev/v3/configuration/models");
26
- });
27
- });
28
- describe("LLMProvider.getClient deprecation warning", () => {
29
- it("logs deprecation warning for legacy model names", () => {
30
- const logs = [];
31
- const logger = (line) => logs.push(line);
32
- const provider = new LLMProvider(logger);
33
- // Using a legacy model name like "gpt-4o" instead of "openai/gpt-4o"
34
- // Should not throw, but should log a deprecation warning
35
- const client = provider.getClient("gpt-4o", mockClientOptions);
36
- // Should return a client (not throw)
37
- expect(client).toBeDefined();
38
- // Should have logged a deprecation warning at level 0
39
- const deprecationWarning = logs.find((log) => log.message.toLowerCase().includes("deprecated") ||
40
- log.message.toLowerCase().includes("deprecation"));
41
- expect(deprecationWarning).toBeDefined();
42
- expect(deprecationWarning.level).toBe(0);
43
- });
44
- it("deprecation warning mentions provider/model format", () => {
45
- const logs = [];
46
- const logger = (line) => logs.push(line);
47
- const provider = new LLMProvider(logger);
48
- provider.getClient("gpt-4o", mockClientOptions);
49
- const deprecationWarning = logs.find((log) => log.message.toLowerCase().includes("deprecated") ||
50
- log.message.toLowerCase().includes("deprecation"));
51
- expect(deprecationWarning).toBeDefined();
52
- const message = deprecationWarning.message;
53
- // Should mention the provider/model format
54
- expect(message).toContain("provider/model");
55
- // Should give an example
56
- expect(message).toContain("openai/gpt-5");
57
- });
58
- it("returns OpenAIClient for legacy OpenAI model names", () => {
59
- const logs = [];
60
- const logger = (line) => logs.push(line);
61
- const provider = new LLMProvider(logger);
62
- const client = provider.getClient("gpt-4o", mockClientOptions);
63
- // Should return a client
64
- expect(client).toBeDefined();
65
- // The client should be an OpenAIClient (check constructor name)
66
- expect(client.constructor.name).toBe("OpenAIClient");
67
- });
68
- it("returns GoogleClient for legacy Google model names", () => {
69
- const logs = [];
70
- const logger = (line) => logs.push(line);
71
- const provider = new LLMProvider(logger);
72
- const client = provider.getClient("gemini-2.0-flash", mockClientOptions);
73
- // Should return a client
74
- expect(client).toBeDefined();
75
- // The client should be a GoogleClient
76
- expect(client.constructor.name).toBe("GoogleClient");
77
- });
78
- });
79
- describe("LLMProvider.getClient error handling", () => {
80
- it("throws UnsupportedModelError for unknown model without slash", () => {
81
- const logs = [];
82
- const logger = (line) => logs.push(line);
83
- const provider = new LLMProvider(logger);
84
- // Unknown model without slash should throw UnsupportedModelError
85
- expect(() => {
86
- provider.getClient("some-unknown-model", mockClientOptions);
87
- }).toThrow(UnsupportedModelError);
88
- });
89
- it("UnsupportedModelError includes provider/model format guidance", () => {
90
- const logs = [];
91
- const logger = (line) => logs.push(line);
92
- const provider = new LLMProvider(logger);
93
- try {
94
- provider.getClient("some-unknown-model", mockClientOptions);
95
- }
96
- catch (error) {
97
- expect(error.message).toContain("provider/model");
98
- }
99
- });
100
- it("throws UnsupportedAISDKModelProviderError for invalid provider in provider/model format", () => {
101
- const logs = [];
102
- const logger = (line) => logs.push(line);
103
- const provider = new LLMProvider(logger);
104
- // Invalid provider but correct format
105
- expect(() => {
106
- provider.getClient("invalid-provider/some-model", mockClientOptions);
107
- }).toThrow(UnsupportedAISDKModelProviderError);
108
- });
109
- it("UnsupportedAISDKModelProviderError lists valid providers", () => {
110
- const logs = [];
111
- const logger = (line) => logs.push(line);
112
- const provider = new LLMProvider(logger);
113
- try {
114
- provider.getClient("invalid-provider/some-model", mockClientOptions);
115
- }
116
- catch (error) {
117
- const message = error.message;
118
- // Should list valid providers
119
- expect(message).toContain("openai");
120
- expect(message).toContain("anthropic");
121
- expect(message).toContain("google");
122
- }
123
- });
124
- });
125
- describe("new provider/model format", () => {
126
- it("does not log deprecation warning for provider/model format", () => {
127
- const logs = [];
128
- const logger = (line) => logs.push(line);
129
- const provider = new LLMProvider(logger);
130
- // Using the new format
131
- const client = provider.getClient("openai/gpt-4o", mockClientOptions);
132
- expect(client).toBeDefined();
133
- // Should NOT have a deprecation warning
134
- const deprecationWarning = logs.find((log) => log.message.toLowerCase().includes("deprecated") ||
135
- log.message.toLowerCase().includes("deprecation"));
136
- expect(deprecationWarning).toBeUndefined();
137
- });
138
- });
139
- });
140
- //# sourceMappingURL=model-deprecation.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-deprecation.test.js","sourceRoot":"","sources":["../../../../tests/unit/model-deprecation.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { LLMProvider } from \"../../lib/v3/llm/LLMProvider.js\";\nimport {\n UnsupportedModelError,\n UnsupportedAISDKModelProviderError,\n} from \"../../lib/v3/types/public/sdkErrors.js\";\nimport type { LogLine } from \"../../lib/v3/types/public/logs.js\";\n\n// Mock client options with fake API keys for testing\nconst mockClientOptions = { apiKey: \"test-api-key-for-testing\" };\n\ndescribe(\"Model format deprecation\", () => {\n describe(\"UnsupportedModelError\", () => {\n it(\"includes guidance to use provider/model format for unknown model names\", () => {\n const error = new UnsupportedModelError([\"gpt-4o\", \"gemini-2.0-flash\"]);\n\n // Should mention the new format\n expect(error.message).toContain(\"provider/model\");\n // Should include link to docs\n expect(error.message).toContain(\n \"https://docs.stagehand.dev/v3/configuration/models\",\n );\n });\n\n it(\"includes example of provider/model format\", () => {\n const error = new UnsupportedModelError([\"gpt-4o\"]);\n\n // Should provide examples like openai/gpt-4o\n expect(error.message).toContain(\"openai/gpt-4o\");\n expect(error.message).toContain(\"anthropic/claude-sonnet-4\");\n });\n\n it(\"works with feature parameter\", () => {\n const error = new UnsupportedModelError([\"gpt-4o\"], \"extract\");\n\n expect(error.message).toContain(\"extract\");\n expect(error.message).toContain(\"provider/model\");\n expect(error.message).toContain(\n \"https://docs.stagehand.dev/v3/configuration/models\",\n );\n });\n });\n\n describe(\"LLMProvider.getClient deprecation warning\", () => {\n it(\"logs deprecation warning for legacy model names\", () => {\n const logs: LogLine[] = [];\n const logger = (line: LogLine) => logs.push(line);\n const provider = new LLMProvider(logger);\n\n // Using a legacy model name like \"gpt-4o\" instead of \"openai/gpt-4o\"\n // Should not throw, but should log a deprecation warning\n const client = provider.getClient(\"gpt-4o\", mockClientOptions);\n\n // Should return a client (not throw)\n expect(client).toBeDefined();\n\n // Should have logged a deprecation warning at level 0\n const deprecationWarning = logs.find(\n (log) =>\n log.message.toLowerCase().includes(\"deprecated\") ||\n log.message.toLowerCase().includes(\"deprecation\"),\n );\n expect(deprecationWarning).toBeDefined();\n expect(deprecationWarning!.level).toBe(0);\n });\n\n it(\"deprecation warning mentions provider/model format\", () => {\n const logs: LogLine[] = [];\n const logger = (line: LogLine) => logs.push(line);\n const provider = new LLMProvider(logger);\n\n provider.getClient(\"gpt-4o\", mockClientOptions);\n\n const deprecationWarning = logs.find(\n (log) =>\n log.message.toLowerCase().includes(\"deprecated\") ||\n log.message.toLowerCase().includes(\"deprecation\"),\n );\n\n expect(deprecationWarning).toBeDefined();\n const message = deprecationWarning!.message;\n // Should mention the provider/model format\n expect(message).toContain(\"provider/model\");\n // Should give an example\n expect(message).toContain(\"openai/gpt-5\");\n });\n\n it(\"returns OpenAIClient for legacy OpenAI model names\", () => {\n const logs: LogLine[] = [];\n const logger = (line: LogLine) => logs.push(line);\n const provider = new LLMProvider(logger);\n\n const client = provider.getClient(\"gpt-4o\", mockClientOptions);\n\n // Should return a client\n expect(client).toBeDefined();\n // The client should be an OpenAIClient (check constructor name)\n expect(client.constructor.name).toBe(\"OpenAIClient\");\n });\n\n it(\"returns GoogleClient for legacy Google model names\", () => {\n const logs: LogLine[] = [];\n const logger = (line: LogLine) => logs.push(line);\n const provider = new LLMProvider(logger);\n\n const client = provider.getClient(\"gemini-2.0-flash\", mockClientOptions);\n\n // Should return a client\n expect(client).toBeDefined();\n // The client should be a GoogleClient\n expect(client.constructor.name).toBe(\"GoogleClient\");\n });\n });\n\n describe(\"LLMProvider.getClient error handling\", () => {\n it(\"throws UnsupportedModelError for unknown model without slash\", () => {\n const logs: LogLine[] = [];\n const logger = (line: LogLine) => logs.push(line);\n const provider = new LLMProvider(logger);\n\n // Unknown model without slash should throw UnsupportedModelError\n expect(() => {\n provider.getClient(\"some-unknown-model\", mockClientOptions);\n }).toThrow(UnsupportedModelError);\n });\n\n it(\"UnsupportedModelError includes provider/model format guidance\", () => {\n const logs: LogLine[] = [];\n const logger = (line: LogLine) => logs.push(line);\n const provider = new LLMProvider(logger);\n\n try {\n provider.getClient(\"some-unknown-model\", mockClientOptions);\n } catch (error) {\n expect((error as Error).message).toContain(\"provider/model\");\n }\n });\n\n it(\"throws UnsupportedAISDKModelProviderError for invalid provider in provider/model format\", () => {\n const logs: LogLine[] = [];\n const logger = (line: LogLine) => logs.push(line);\n const provider = new LLMProvider(logger);\n\n // Invalid provider but correct format\n expect(() => {\n provider.getClient(\"invalid-provider/some-model\", mockClientOptions);\n }).toThrow(UnsupportedAISDKModelProviderError);\n });\n\n it(\"UnsupportedAISDKModelProviderError lists valid providers\", () => {\n const logs: LogLine[] = [];\n const logger = (line: LogLine) => logs.push(line);\n const provider = new LLMProvider(logger);\n\n try {\n provider.getClient(\"invalid-provider/some-model\", mockClientOptions);\n } catch (error) {\n const message = (error as Error).message;\n // Should list valid providers\n expect(message).toContain(\"openai\");\n expect(message).toContain(\"anthropic\");\n expect(message).toContain(\"google\");\n }\n });\n });\n\n describe(\"new provider/model format\", () => {\n it(\"does not log deprecation warning for provider/model format\", () => {\n const logs: LogLine[] = [];\n const logger = (line: LogLine) => logs.push(line);\n const provider = new LLMProvider(logger);\n\n // Using the new format\n const client = provider.getClient(\"openai/gpt-4o\", mockClientOptions);\n\n expect(client).toBeDefined();\n\n // Should NOT have a deprecation warning\n const deprecationWarning = logs.find(\n (log) =>\n log.message.toLowerCase().includes(\"deprecated\") ||\n log.message.toLowerCase().includes(\"deprecation\"),\n );\n expect(deprecationWarning).toBeUndefined();\n });\n });\n});\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,40 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { extractModelName, resolveModel } from "../../lib/modelUtils.js";
3
- describe("extractModelName", () => {
4
- it("returns undefined for undefined input", () => {
5
- expect(extractModelName(undefined)).toBeUndefined();
6
- });
7
- it("returns the string as-is for a string input", () => {
8
- expect(extractModelName("openai/gpt-4o")).toBe("openai/gpt-4o");
9
- });
10
- it("returns modelName from an object input", () => {
11
- expect(extractModelName({ modelName: "anthropic/claude-sonnet-4-20250514" })).toBe("anthropic/claude-sonnet-4-20250514");
12
- });
13
- it("returns modelName from an object with extra properties", () => {
14
- expect(extractModelName({
15
- modelName: "openai/gpt-4o-mini",
16
- apiKey: "sk-test",
17
- baseURL: "https://custom.endpoint",
18
- })).toBe("openai/gpt-4o-mini");
19
- });
20
- });
21
- describe("resolveModel", () => {
22
- it("extracts provider and modelName from a string", () => {
23
- const result = resolveModel("openai/gpt-4o");
24
- expect(result.provider).toBe("openai");
25
- expect(result.modelName).toBe("gpt-4o");
26
- expect(result.clientOptions).toEqual({});
27
- });
28
- it("extracts clientOptions from an object config", () => {
29
- const result = resolveModel({
30
- modelName: "openai/gpt-4o",
31
- apiKey: "sk-test",
32
- });
33
- expect(result.provider).toBe("openai");
34
- expect(result.modelName).toBe("gpt-4o");
35
- expect(result.clientOptions).toMatchObject({ apiKey: "sk-test" });
36
- // modelName should not leak into clientOptions
37
- expect(result.clientOptions).not.toHaveProperty("modelName");
38
- });
39
- });
40
- //# sourceMappingURL=model-utils.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-utils.test.js","sourceRoot":"","sources":["../../../../tests/unit/model-utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEzE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CACJ,gBAAgB,CAAC,EAAE,SAAS,EAAE,oCAAoC,EAAE,CAAC,CACtE,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CACJ,gBAAgB,CAAC;YACf,SAAS,EAAE,oBAAoB;YAC/B,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,yBAAyB;SACnC,CAAC,CACH,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,SAAS,EAAE,eAAwB;YACnC,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAClE,+CAA+C;QAC/C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { extractModelName, resolveModel } from \"../../lib/modelUtils.js\";\n\ndescribe(\"extractModelName\", () => {\n it(\"returns undefined for undefined input\", () => {\n expect(extractModelName(undefined)).toBeUndefined();\n });\n\n it(\"returns the string as-is for a string input\", () => {\n expect(extractModelName(\"openai/gpt-4o\")).toBe(\"openai/gpt-4o\");\n });\n\n it(\"returns modelName from an object input\", () => {\n expect(\n extractModelName({ modelName: \"anthropic/claude-sonnet-4-20250514\" }),\n ).toBe(\"anthropic/claude-sonnet-4-20250514\");\n });\n\n it(\"returns modelName from an object with extra properties\", () => {\n expect(\n extractModelName({\n modelName: \"openai/gpt-4o-mini\",\n apiKey: \"sk-test\",\n baseURL: \"https://custom.endpoint\",\n }),\n ).toBe(\"openai/gpt-4o-mini\");\n });\n});\n\ndescribe(\"resolveModel\", () => {\n it(\"extracts provider and modelName from a string\", () => {\n const result = resolveModel(\"openai/gpt-4o\");\n expect(result.provider).toBe(\"openai\");\n expect(result.modelName).toBe(\"gpt-4o\");\n expect(result.clientOptions).toEqual({});\n });\n\n it(\"extracts clientOptions from an object config\", () => {\n const result = resolveModel({\n modelName: \"openai/gpt-4o\" as never,\n apiKey: \"sk-test\",\n });\n expect(result.provider).toBe(\"openai\");\n expect(result.modelName).toBe(\"gpt-4o\");\n expect(result.clientOptions).toMatchObject({ apiKey: \"sk-test\" });\n // modelName should not leak into clientOptions\n expect(result.clientOptions).not.toHaveProperty(\"modelName\");\n });\n});\n"]}
@@ -1,82 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { CerebrasClient } from "../../lib/v3/llm/CerebrasClient.js";
3
- import { GroqClient } from "../../lib/v3/llm/GroqClient.js";
4
- function mockCompletionCreate() {
5
- return vi.fn().mockResolvedValue({
6
- id: "chatcmpl-test",
7
- choices: [
8
- {
9
- message: {
10
- role: "assistant",
11
- content: "ok",
12
- tool_calls: [],
13
- },
14
- finish_reason: "stop",
15
- },
16
- ],
17
- usage: {
18
- prompt_tokens: 1,
19
- completion_tokens: 1,
20
- total_tokens: 2,
21
- },
22
- });
23
- }
24
- function installMockClient(client) {
25
- const create = mockCompletionCreate();
26
- client.client = {
27
- chat: {
28
- completions: {
29
- create,
30
- },
31
- },
32
- };
33
- return create;
34
- }
35
- const logger = vi.fn();
36
- describe.each([
37
- [
38
- "GroqClient",
39
- () => new GroqClient({
40
- modelName: "groq-test-model",
41
- clientOptions: { apiKey: "test-key" },
42
- logger,
43
- }),
44
- ],
45
- [
46
- "CerebrasClient",
47
- () => new CerebrasClient({
48
- modelName: "cerebras-test-model",
49
- clientOptions: { apiKey: "test-key" },
50
- logger,
51
- }),
52
- ],
53
- ])("%s temperature handling", (_name, createClient) => {
54
- it("falls back to 0.7 when temperature is not provided", async () => {
55
- const client = createClient();
56
- const create = installMockClient(client);
57
- await client.createChatCompletion({
58
- options: {
59
- messages: [{ role: "user", content: "hello" }],
60
- },
61
- logger,
62
- });
63
- expect(create).toHaveBeenCalledWith(expect.objectContaining({
64
- temperature: 0.7,
65
- }));
66
- });
67
- it("preserves explicit temperature zero", async () => {
68
- const client = createClient();
69
- const create = installMockClient(client);
70
- await client.createChatCompletion({
71
- options: {
72
- messages: [{ role: "user", content: "hello" }],
73
- temperature: 0,
74
- },
75
- logger,
76
- });
77
- expect(create).toHaveBeenCalledWith(expect.objectContaining({
78
- temperature: 0,
79
- }));
80
- });
81
- });
82
- //# sourceMappingURL=openai-compatible-temperature.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai-compatible-temperature.test.js","sourceRoot":"","sources":["../../../../tests/unit/openai-compatible-temperature.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAe5D,SAAS,oBAAoB;IAC3B,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;QAC/B,EAAE,EAAE,eAAe;QACnB,OAAO,EAAE;YACP;gBACE,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,EAAE;iBACf;gBACD,aAAa,EAAE,MAAM;aACtB;SACF;QACD,KAAK,EAAE;YACL,aAAa,EAAE,CAAC;YAChB,iBAAiB,EAAE,CAAC;YACpB,YAAY,EAAE,CAAC;SAChB;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAiB;IAC1C,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACrC,MAAiC,CAAC,MAAM,GAAG;QAC1C,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,MAAM;aACP;SACF;KACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAA8B,CAAC;AAEnD,QAAQ,CAAC,IAAI,CAAC;IACZ;QACE,YAAY;QACZ,GAAG,EAAE,CACH,IAAI,UAAU,CAAC;YACb,SAAS,EAAE,iBAAmC;YAC9C,aAAa,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;YACrC,MAAM;SACP,CAAC;KACL;IACD;QACE,gBAAgB;QAChB,GAAG,EAAE,CACH,IAAI,cAAc,CAAC;YACjB,SAAS,EAAE,qBAAuC;YAClD,aAAa,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;YACrC,MAAM;SACP,CAAC;KACL;CACF,CAAC,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE;IACpD,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEzC,MAAM,MAAM,CAAC,oBAAoB,CAAC;YAChC,OAAO,EAAE;gBACP,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;aAC/C;YACD,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CACjC,MAAM,CAAC,gBAAgB,CAAC;YACtB,WAAW,EAAE,GAAG;SACjB,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAEzC,MAAM,MAAM,CAAC,oBAAoB,CAAC;YAChC,OAAO,EAAE;gBACP,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAC9C,WAAW,EAAE,CAAC;aACf;YACD,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CACjC,MAAM,CAAC,gBAAgB,CAAC;YACtB,WAAW,EAAE,CAAC;SACf,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, it, vi } from \"vitest\";\nimport { CerebrasClient } from \"../../lib/v3/llm/CerebrasClient.js\";\nimport { GroqClient } from \"../../lib/v3/llm/GroqClient.js\";\nimport type { LLMClient } from \"../../lib/v3/llm/LLMClient.js\";\nimport type { LogLine } from \"../../lib/v3/types/public/logs.js\";\nimport type { AvailableModel } from \"../../lib/v3/types/public/model.js\";\n\ntype OpenAICompatibleClient = LLMClient & {\n client: {\n chat: {\n completions: {\n create: ReturnType<typeof vi.fn>;\n };\n };\n };\n};\n\nfunction mockCompletionCreate() {\n return vi.fn().mockResolvedValue({\n id: \"chatcmpl-test\",\n choices: [\n {\n message: {\n role: \"assistant\",\n content: \"ok\",\n tool_calls: [],\n },\n finish_reason: \"stop\",\n },\n ],\n usage: {\n prompt_tokens: 1,\n completion_tokens: 1,\n total_tokens: 2,\n },\n });\n}\n\nfunction installMockClient(client: LLMClient) {\n const create = mockCompletionCreate();\n (client as OpenAICompatibleClient).client = {\n chat: {\n completions: {\n create,\n },\n },\n };\n return create;\n}\n\nconst logger = vi.fn<(message: LogLine) => void>();\n\ndescribe.each([\n [\n \"GroqClient\",\n () =>\n new GroqClient({\n modelName: \"groq-test-model\" as AvailableModel,\n clientOptions: { apiKey: \"test-key\" },\n logger,\n }),\n ],\n [\n \"CerebrasClient\",\n () =>\n new CerebrasClient({\n modelName: \"cerebras-test-model\" as AvailableModel,\n clientOptions: { apiKey: \"test-key\" },\n logger,\n }),\n ],\n])(\"%s temperature handling\", (_name, createClient) => {\n it(\"falls back to 0.7 when temperature is not provided\", async () => {\n const client = createClient();\n const create = installMockClient(client);\n\n await client.createChatCompletion({\n options: {\n messages: [{ role: \"user\", content: \"hello\" }],\n },\n logger,\n });\n\n expect(create).toHaveBeenCalledWith(\n expect.objectContaining({\n temperature: 0.7,\n }),\n );\n });\n\n it(\"preserves explicit temperature zero\", async () => {\n const client = createClient();\n const create = installMockClient(client);\n\n await client.createChatCompletion({\n options: {\n messages: [{ role: \"user\", content: \"hello\" }],\n temperature: 0,\n },\n logger,\n });\n\n expect(create).toHaveBeenCalledWith(\n expect.objectContaining({\n temperature: 0,\n }),\n );\n });\n});\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,69 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { OpenAICUAClient } from "../../lib/v3/agent/OpenAICUAClient.js";
3
- function createClient() {
4
- return new OpenAICUAClient("openai", "computer-use-preview-2025-03-11", undefined, { apiKey: "test-key" });
5
- }
6
- describe("OpenAICUAClient", () => {
7
- it("exposes captchaSolvedProceed tool after a captcha context note", () => {
8
- const client = createClient();
9
- // Before captcha note — tool should not be active
10
- expect(client
11
- .captchaSolvedToolActive).toBe(false);
12
- // Simulate a captcha context note being added (as the CUA handler does)
13
- client.addContextNote("A captcha was automatically detected and solved — no further interaction needed.");
14
- expect(client
15
- .captchaSolvedToolActive).toBe(true);
16
- });
17
- it("does NOT activate captcha tool for non-captcha context notes", () => {
18
- const client = createClient();
19
- client.addContextNote("The page has finished loading.");
20
- expect(client
21
- .captchaSolvedToolActive).toBe(false);
22
- });
23
- it("deactivates captcha tool after takeAction handles the function call", async () => {
24
- const client = createClient();
25
- client.addContextNote("A captcha was solved.");
26
- expect(client
27
- .captchaSolvedToolActive).toBe(true);
28
- // Simulate the model calling the captchaSolvedProceed tool
29
- const result = await client.takeAction([
30
- {
31
- type: "function_call",
32
- name: "captchaSolvedProceed",
33
- call_id: "call-1",
34
- arguments: "{}",
35
- },
36
- ], vi.fn());
37
- // Tool should be deactivated
38
- expect(client
39
- .captchaSolvedToolActive).toBe(false);
40
- // Result should contain a function_call_output confirming proceed
41
- expect(result).toEqual([
42
- {
43
- type: "function_call_output",
44
- call_id: "call-1",
45
- output: expect.stringContaining("Continue completing"),
46
- },
47
- ]);
48
- });
49
- it("does NOT auto-continue follow-up questions without a captcha context", async () => {
50
- const client = createClient();
51
- const executeStepSpy = vi.spyOn(client, "executeStep");
52
- executeStepSpy.mockResolvedValueOnce({
53
- actions: [],
54
- message: "I've located the Submit button. Should I go ahead and submit it?",
55
- completed: true,
56
- nextInputItems: [],
57
- responseId: "response-1",
58
- usage: { input_tokens: 1, output_tokens: 1, inference_time_ms: 1 },
59
- });
60
- const result = await client.execute({
61
- options: { instruction: "Submit the form.", maxSteps: 10 },
62
- logger: vi.fn(),
63
- });
64
- // Should NOT have continued — the model's follow-up is treated as completion
65
- expect(executeStepSpy).toHaveBeenCalledTimes(1);
66
- expect(result.completed).toBe(true);
67
- });
68
- });
69
- //# sourceMappingURL=openai-cua-client.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai-cua-client.test.js","sourceRoot":"","sources":["../../../../tests/unit/openai-cua-client.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it, vi } from \"vitest\";\nimport { OpenAICUAClient } from \"../../lib/v3/agent/OpenAICUAClient.js\";\n\nfunction createClient() {\n return new OpenAICUAClient(\n \"openai\",\n \"computer-use-preview-2025-03-11\",\n undefined,\n { apiKey: \"test-key\" },\n );\n}\n\ndescribe(\"OpenAICUAClient\", () => {\n it(\"exposes captchaSolvedProceed tool after a captcha context note\", () => {\n const client = createClient();\n\n // Before captcha note — tool should not be active\n expect(\n (client as unknown as { captchaSolvedToolActive: boolean })\n .captchaSolvedToolActive,\n ).toBe(false);\n\n // Simulate a captcha context note being added (as the CUA handler does)\n client.addContextNote(\n \"A captcha was automatically detected and solved — no further interaction needed.\",\n );\n\n expect(\n (client as unknown as { captchaSolvedToolActive: boolean })\n .captchaSolvedToolActive,\n ).toBe(true);\n });\n\n it(\"does NOT activate captcha tool for non-captcha context notes\", () => {\n const client = createClient();\n\n client.addContextNote(\"The page has finished loading.\");\n\n expect(\n (client as unknown as { captchaSolvedToolActive: boolean })\n .captchaSolvedToolActive,\n ).toBe(false);\n });\n\n it(\"deactivates captcha tool after takeAction handles the function call\", async () => {\n const client = createClient();\n client.addContextNote(\"A captcha was solved.\");\n\n expect(\n (client as unknown as { captchaSolvedToolActive: boolean })\n .captchaSolvedToolActive,\n ).toBe(true);\n\n // Simulate the model calling the captchaSolvedProceed tool\n const result = await (\n client as unknown as {\n takeAction: (\n output: unknown[],\n logger: (msg: unknown) => void,\n ) => Promise<unknown[]>;\n }\n ).takeAction(\n [\n {\n type: \"function_call\",\n name: \"captchaSolvedProceed\",\n call_id: \"call-1\",\n arguments: \"{}\",\n },\n ],\n vi.fn(),\n );\n\n // Tool should be deactivated\n expect(\n (client as unknown as { captchaSolvedToolActive: boolean })\n .captchaSolvedToolActive,\n ).toBe(false);\n\n // Result should contain a function_call_output confirming proceed\n expect(result).toEqual([\n {\n type: \"function_call_output\",\n call_id: \"call-1\",\n output: expect.stringContaining(\"Continue completing\"),\n },\n ]);\n });\n\n it(\"does NOT auto-continue follow-up questions without a captcha context\", async () => {\n const client = createClient();\n // No captcha context note — no tool should be exposed\n\n type ExecuteStepResult = {\n actions: Array<{ type: string }>;\n message: string;\n completed: boolean;\n nextInputItems: unknown[];\n responseId: string;\n usage: {\n input_tokens: number;\n output_tokens: number;\n inference_time_ms: number;\n };\n };\n\n const executeStepSpy = vi.spyOn(\n client as unknown as {\n executeStep: (\n inputItems: unknown[],\n previousResponseId: string | undefined,\n logger: (message: { message: string }) => void,\n ) => Promise<ExecuteStepResult>;\n },\n \"executeStep\",\n );\n\n executeStepSpy.mockResolvedValueOnce({\n actions: [],\n message:\n \"I've located the Submit button. Should I go ahead and submit it?\",\n completed: true,\n nextInputItems: [],\n responseId: \"response-1\",\n usage: { input_tokens: 1, output_tokens: 1, inference_time_ms: 1 },\n });\n\n const result = await client.execute({\n options: { instruction: \"Submit the form.\", maxSteps: 10 } as never,\n logger: vi.fn(),\n });\n\n // Should NOT have continued — the model's follow-up is treated as completion\n expect(executeStepSpy).toHaveBeenCalledTimes(1);\n expect(result.completed).toBe(true);\n });\n});\n"]}
@@ -1 +0,0 @@
1
- export {};
@@ -1,90 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { Page } from "../../lib/v3/understudy/page.js";
3
- import { MockCDPSession } from "./helpers/mockCDPSession.js";
4
- import { StagehandSetExtraHTTPHeadersError } from "../../lib/v3/types/public/sdkErrors.js";
5
- const makePage = (sessions) => {
6
- const mainSession = sessions[0] ?? new MockCDPSession({}, "main");
7
- const stub = {
8
- mainSession,
9
- sessions: new Map(sessions.map((s) => [s.id, s])),
10
- extraHTTPHeaders: {},
11
- // Bind the private helper from Page.prototype so setExtraHTTPHeaders can call it
12
- applyExtraHTTPHeadersToSession: Page.prototype
13
- .applyExtraHTTPHeadersToSession,
14
- };
15
- return stub;
16
- };
17
- describe("Page.setExtraHTTPHeaders", () => {
18
- const setExtraHTTPHeaders = Page.prototype.setExtraHTTPHeaders;
19
- it("sends headers to all sessions owned by the page", async () => {
20
- const sessionA = new MockCDPSession({}, "session-a");
21
- const sessionB = new MockCDPSession({}, "session-b");
22
- const page = makePage([sessionA, sessionB]);
23
- await setExtraHTTPHeaders.call(page, {
24
- "x-stagehand-test": "hello",
25
- });
26
- for (const session of [sessionA, sessionB]) {
27
- expect(session.callsFor("Network.enable").length).toBe(1);
28
- expect(session.callsFor("Network.setExtraHTTPHeaders")[0]?.params).toEqual({
29
- headers: { "x-stagehand-test": "hello" },
30
- });
31
- }
32
- });
33
- it("applies headers to mainSession even when sessions map is empty", async () => {
34
- const page = makePage([]);
35
- await setExtraHTTPHeaders.call(page, { "x-test": "value" });
36
- // mainSession should still receive headers even though it's not in the sessions map
37
- expect(page.mainSession.callsFor("Network.enable").length).toBe(1);
38
- expect(page.mainSession.callsFor("Network.setExtraHTTPHeaders")[0]?.params).toEqual({
39
- headers: { "x-test": "value" },
40
- });
41
- });
42
- it("throws StagehandSetExtraHTTPHeadersError with session failure details", async () => {
43
- const sessionA = new MockCDPSession({
44
- "Network.setExtraHTTPHeaders": () => {
45
- throw new Error("connection closed");
46
- },
47
- }, "session-a");
48
- const sessionB = new MockCDPSession({}, "session-b");
49
- const page = makePage([sessionA, sessionB]);
50
- let caughtError;
51
- try {
52
- await setExtraHTTPHeaders.call(page, {
53
- "x-stagehand-test": "yes",
54
- });
55
- }
56
- catch (error) {
57
- caughtError = error;
58
- }
59
- expect(caughtError).toBeInstanceOf(StagehandSetExtraHTTPHeadersError);
60
- expect(caughtError?.failures).toHaveLength(1);
61
- expect(caughtError?.failures[0]).toContain("session=session-a");
62
- expect(caughtError?.failures[0]).toContain("connection closed");
63
- // sessionB should still have been called successfully
64
- expect(sessionB.callsFor("Network.setExtraHTTPHeaders").length).toBe(1);
65
- });
66
- it("applies headers to sessions adopted after the call", async () => {
67
- const sessionA = new MockCDPSession({}, "session-a");
68
- const page = makePage([sessionA]);
69
- await setExtraHTTPHeaders.call(page, { "x-before": "yes" });
70
- // A new OOPIF session is adopted after headers were set
71
- const sessionB = new MockCDPSession({}, "session-b");
72
- page.sessions.set(sessionB.id, sessionB);
73
- // Simulate what adoptOopifSession does: replay headers onto the new session
74
- await page.applyExtraHTTPHeadersToSession.call(page, sessionB, page.extraHTTPHeaders);
75
- // The late-arriving session should have received the headers
76
- expect(sessionB.callsFor("Network.enable").length).toBe(1);
77
- expect(sessionB.callsFor("Network.setExtraHTTPHeaders")[0]?.params).toEqual({
78
- headers: { "x-before": "yes" },
79
- });
80
- });
81
- it("does not mutate the original headers object", async () => {
82
- const session = new MockCDPSession({}, "session-a");
83
- const page = makePage([session]);
84
- const original = { "x-custom": "value" };
85
- const frozen = { ...original };
86
- await setExtraHTTPHeaders.call(page, original);
87
- expect(original).toEqual(frozen);
88
- });
89
- });
90
- //# sourceMappingURL=page-extra-http-headers.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-extra-http-headers.test.js","sourceRoot":"","sources":["../../../../tests/unit/page-extra-http-headers.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { Page } from \"../../lib/v3/understudy/page.js\";\nimport { MockCDPSession } from \"./helpers/mockCDPSession.js\";\nimport { StagehandSetExtraHTTPHeadersError } from \"../../lib/v3/types/public/sdkErrors.js\";\n\ntype PageStub = {\n mainSession: MockCDPSession;\n sessions: Map<string, MockCDPSession>;\n extraHTTPHeaders: Record<string, string>;\n applyExtraHTTPHeadersToSession: (\n session: MockCDPSession,\n headers: Record<string, string>,\n ) => Promise<void>;\n};\n\nconst makePage = (sessions: MockCDPSession[]): PageStub => {\n const mainSession = sessions[0] ?? new MockCDPSession({}, \"main\");\n const stub: PageStub = {\n mainSession,\n sessions: new Map(sessions.map((s) => [s.id, s])),\n extraHTTPHeaders: {},\n // Bind the private helper from Page.prototype so setExtraHTTPHeaders can call it\n applyExtraHTTPHeadersToSession: (Page.prototype as unknown as PageStub)\n .applyExtraHTTPHeadersToSession,\n };\n return stub;\n};\n\ndescribe(\"Page.setExtraHTTPHeaders\", () => {\n const setExtraHTTPHeaders = Page.prototype.setExtraHTTPHeaders as (\n this: PageStub,\n headers: Record<string, string>,\n ) => Promise<void>;\n\n it(\"sends headers to all sessions owned by the page\", async () => {\n const sessionA = new MockCDPSession({}, \"session-a\");\n const sessionB = new MockCDPSession({}, \"session-b\");\n const page = makePage([sessionA, sessionB]);\n\n await setExtraHTTPHeaders.call(page, {\n \"x-stagehand-test\": \"hello\",\n });\n\n for (const session of [sessionA, sessionB]) {\n expect(session.callsFor(\"Network.enable\").length).toBe(1);\n expect(\n session.callsFor(\"Network.setExtraHTTPHeaders\")[0]?.params,\n ).toEqual({\n headers: { \"x-stagehand-test\": \"hello\" },\n });\n }\n });\n\n it(\"applies headers to mainSession even when sessions map is empty\", async () => {\n const page = makePage([]);\n\n await setExtraHTTPHeaders.call(page, { \"x-test\": \"value\" });\n\n // mainSession should still receive headers even though it's not in the sessions map\n expect(page.mainSession.callsFor(\"Network.enable\").length).toBe(1);\n expect(\n page.mainSession.callsFor(\"Network.setExtraHTTPHeaders\")[0]?.params,\n ).toEqual({\n headers: { \"x-test\": \"value\" },\n });\n });\n\n it(\"throws StagehandSetExtraHTTPHeadersError with session failure details\", async () => {\n const sessionA = new MockCDPSession(\n {\n \"Network.setExtraHTTPHeaders\": () => {\n throw new Error(\"connection closed\");\n },\n },\n \"session-a\",\n );\n const sessionB = new MockCDPSession({}, \"session-b\");\n const page = makePage([sessionA, sessionB]);\n\n let caughtError: StagehandSetExtraHTTPHeadersError | undefined;\n try {\n await setExtraHTTPHeaders.call(page, {\n \"x-stagehand-test\": \"yes\",\n });\n } catch (error) {\n caughtError = error as StagehandSetExtraHTTPHeadersError;\n }\n\n expect(caughtError).toBeInstanceOf(StagehandSetExtraHTTPHeadersError);\n expect(caughtError?.failures).toHaveLength(1);\n expect(caughtError?.failures[0]).toContain(\"session=session-a\");\n expect(caughtError?.failures[0]).toContain(\"connection closed\");\n\n // sessionB should still have been called successfully\n expect(sessionB.callsFor(\"Network.setExtraHTTPHeaders\").length).toBe(1);\n });\n\n it(\"applies headers to sessions adopted after the call\", async () => {\n const sessionA = new MockCDPSession({}, \"session-a\");\n const page = makePage([sessionA]);\n\n await setExtraHTTPHeaders.call(page, { \"x-before\": \"yes\" });\n\n // A new OOPIF session is adopted after headers were set\n const sessionB = new MockCDPSession({}, \"session-b\");\n page.sessions.set(sessionB.id, sessionB);\n\n // Simulate what adoptOopifSession does: replay headers onto the new session\n await page.applyExtraHTTPHeadersToSession.call(\n page,\n sessionB,\n page.extraHTTPHeaders,\n );\n\n // The late-arriving session should have received the headers\n expect(sessionB.callsFor(\"Network.enable\").length).toBe(1);\n expect(sessionB.callsFor(\"Network.setExtraHTTPHeaders\")[0]?.params).toEqual(\n {\n headers: { \"x-before\": \"yes\" },\n },\n );\n });\n\n it(\"does not mutate the original headers object\", async () => {\n const session = new MockCDPSession({}, \"session-a\");\n const page = makePage([session]);\n\n const original = { \"x-custom\": \"value\" };\n const frozen = { ...original };\n\n await setExtraHTTPHeaders.call(page, original);\n\n expect(original).toEqual(frozen);\n });\n});\n"]}