@browserbasehq/orca 3.1.0-patch.0 → 3.1.0-patch.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/dist/cjs/cli.js +183 -0
  2. package/dist/cjs/cli.js.map +7 -0
  3. package/dist/cjs/index.d.ts +1 -0
  4. package/dist/cjs/index.js +24956 -0
  5. package/dist/cjs/index.js.map +7 -0
  6. package/dist/cjs/lib/inference.d.ts +65 -0
  7. package/dist/cjs/lib/inferenceLogUtils.d.ts +12 -0
  8. package/dist/cjs/lib/logger.d.ts +69 -0
  9. package/dist/cjs/lib/modelUtils.d.ts +11 -0
  10. package/dist/cjs/lib/prompt.d.ts +14 -0
  11. package/dist/cjs/lib/utils.d.ts +68 -0
  12. package/dist/cjs/lib/v3/agent/AgentClient.d.ts +19 -0
  13. package/dist/cjs/lib/v3/agent/AgentProvider.d.ts +20 -0
  14. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.d.ts +57 -0
  15. package/dist/cjs/lib/v3/agent/GoogleCUAClient.d.ts +74 -0
  16. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.d.ts +71 -0
  17. package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +69 -0
  18. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +12 -0
  19. package/dist/cjs/lib/v3/agent/tools/act.d.ts +12 -0
  20. package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +5 -0
  21. package/dist/cjs/lib/v3/agent/tools/click.d.ts +6 -0
  22. package/dist/cjs/lib/v3/agent/tools/clickAndHold.d.ts +14 -0
  23. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.d.ts +7 -0
  24. package/dist/cjs/lib/v3/agent/tools/extract.d.ts +20 -0
  25. package/dist/cjs/lib/v3/agent/tools/fillFormVision.d.ts +12 -0
  26. package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +12 -0
  27. package/dist/cjs/lib/v3/agent/tools/goto.d.ts +12 -0
  28. package/dist/cjs/lib/v3/agent/tools/index.d.ts +92 -0
  29. package/dist/cjs/lib/v3/agent/tools/keys.d.ts +24 -0
  30. package/dist/cjs/lib/v3/agent/tools/navback.d.ts +6 -0
  31. package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +6 -0
  32. package/dist/cjs/lib/v3/agent/tools/scroll.d.ts +19 -0
  33. package/dist/cjs/lib/v3/agent/tools/search.d.ts +15 -0
  34. package/dist/cjs/lib/v3/agent/tools/think.d.ts +6 -0
  35. package/dist/cjs/lib/v3/agent/tools/type.d.ts +7 -0
  36. package/dist/cjs/lib/v3/agent/tools/wait.d.ts +5 -0
  37. package/dist/cjs/lib/v3/agent/utils/actionMapping.d.ts +3 -0
  38. package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.d.ts +13 -0
  39. package/dist/cjs/lib/v3/agent/utils/cuaKeyMapping.d.ts +10 -0
  40. package/dist/cjs/lib/v3/agent/utils/googleCustomToolHandler.d.ts +25 -0
  41. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.d.ts +22 -0
  42. package/dist/cjs/lib/v3/agent/utils/imageCompression.d.ts +53 -0
  43. package/dist/cjs/lib/v3/agent/utils/messageProcessing.d.ts +12 -0
  44. package/dist/cjs/lib/v3/agent/utils/screenshotHandler.d.ts +10 -0
  45. package/dist/cjs/lib/v3/agent/utils/validateExperimentalFeatures.d.ts +26 -0
  46. package/dist/cjs/lib/v3/agent/utils/xpath.d.ts +11 -0
  47. package/dist/cjs/lib/v3/api.d.ts +86 -0
  48. package/dist/cjs/lib/v3/cache/ActCache.d.ts +23 -0
  49. package/dist/cjs/lib/v3/cache/AgentCache.d.ts +109 -0
  50. package/dist/cjs/lib/v3/cache/CacheStorage.d.ts +17 -0
  51. package/dist/cjs/lib/v3/cache/serverAgentCache.d.ts +7 -0
  52. package/dist/cjs/lib/v3/cache/utils.d.ts +15 -0
  53. package/dist/cjs/lib/v3/cli.d.ts +2 -0
  54. package/dist/cjs/lib/v3/dom/a11yScripts/index.d.ts +11 -0
  55. package/dist/cjs/lib/v3/dom/build/a11yScripts.generated.d.ts +16 -0
  56. package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.d.ts +52 -0
  57. package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -0
  58. package/dist/cjs/lib/v3/dom/build/rerender-index.d.ts +0 -0
  59. package/dist/cjs/lib/v3/dom/build/rerender-index.js +1 -0
  60. package/dist/cjs/lib/v3/dom/build/screenshotScripts.generated.d.ts +4 -0
  61. package/dist/cjs/lib/v3/dom/build/scriptV3Content.d.ts +1 -0
  62. package/dist/cjs/lib/v3/dom/build/v3-index.d.ts +0 -0
  63. package/dist/cjs/lib/v3/dom/build/v3-index.js +1 -0
  64. package/dist/cjs/lib/v3/dom/genA11yScripts.d.ts +1 -0
  65. package/dist/cjs/lib/v3/dom/genDomScripts.d.ts +1 -0
  66. package/dist/cjs/lib/v3/dom/genLocatorScripts.d.ts +1 -0
  67. package/dist/cjs/lib/v3/dom/genScreenshotScripts.d.ts +1 -0
  68. package/dist/cjs/lib/v3/dom/index.d.ts +1 -0
  69. package/dist/cjs/lib/v3/dom/locatorScripts/counts.d.ts +15 -0
  70. package/dist/cjs/lib/v3/dom/locatorScripts/index.d.ts +4 -0
  71. package/dist/cjs/lib/v3/dom/locatorScripts/scripts.d.ts +37 -0
  72. package/dist/cjs/lib/v3/dom/locatorScripts/selectors.d.ts +4 -0
  73. package/dist/cjs/lib/v3/dom/locatorScripts/waitForSelector.d.ts +19 -0
  74. package/dist/cjs/lib/v3/dom/locatorScripts/xpathParser.d.ts +76 -0
  75. package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.d.ts +9 -0
  76. package/dist/cjs/lib/v3/dom/piercer.entry.d.ts +1 -0
  77. package/dist/cjs/lib/v3/dom/piercer.runtime.d.ts +23 -0
  78. package/dist/cjs/lib/v3/dom/rerenderMissingShadows.entry.d.ts +1 -0
  79. package/dist/cjs/lib/v3/dom/rerenderMissingShadows.runtime.d.ts +1 -0
  80. package/dist/cjs/lib/v3/dom/screenshotScripts/index.d.ts +1 -0
  81. package/dist/cjs/lib/v3/dom/screenshotScripts/resolveMaskRect.d.ts +8 -0
  82. package/dist/cjs/lib/v3/external_clients/aisdk.d.ts +11 -0
  83. package/dist/cjs/lib/v3/external_clients/customOpenAI.d.ts +18 -0
  84. package/dist/cjs/lib/v3/flowLogger.d.ts +139 -0
  85. package/dist/cjs/lib/v3/handlers/actHandler.d.ts +21 -0
  86. package/dist/cjs/lib/v3/handlers/extractHandler.d.ts +31 -0
  87. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +24 -0
  88. package/dist/cjs/lib/v3/handlers/handlerUtils/timeoutGuard.d.ts +2 -0
  89. package/dist/cjs/lib/v3/handlers/observeHandler.d.ts +17 -0
  90. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +32 -0
  91. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +33 -0
  92. package/dist/cjs/lib/v3/index.d.ts +18 -0
  93. package/dist/cjs/lib/v3/launch/browserbase.d.ts +7 -0
  94. package/dist/cjs/lib/v3/launch/local.d.ts +15 -0
  95. package/dist/cjs/lib/v3/llm/AnthropicClient.d.ts +16 -0
  96. package/dist/cjs/lib/v3/llm/CerebrasClient.d.ts +17 -0
  97. package/dist/cjs/lib/v3/llm/GoogleClient.d.ts +19 -0
  98. package/dist/cjs/lib/v3/llm/GroqClient.d.ts +17 -0
  99. package/dist/cjs/lib/v3/llm/LLMClient.d.ts +121 -0
  100. package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +13 -0
  101. package/dist/cjs/lib/v3/llm/OpenAIClient.d.ts +15 -0
  102. package/dist/cjs/lib/v3/llm/aisdk.d.ts +15 -0
  103. package/dist/cjs/lib/v3/logger.d.ts +9 -0
  104. package/dist/cjs/lib/v3/mcp/connection.d.ts +11 -0
  105. package/dist/cjs/lib/v3/mcp/utils.d.ts +3 -0
  106. package/dist/cjs/lib/v3/shutdown/cleanupLocal.d.ts +14 -0
  107. package/dist/cjs/lib/v3/shutdown/supervisor.d.ts +11 -0
  108. package/dist/cjs/lib/v3/shutdown/supervisorClient.d.ts +15 -0
  109. package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js +113 -0
  110. package/dist/cjs/lib/v3/tests/agent-abort-signal.spec.js.map +7 -0
  111. package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js +102 -0
  112. package/dist/cjs/lib/v3/tests/agent-cache-self-heal.spec.js.map +7 -0
  113. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +374 -0
  114. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +7 -0
  115. package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js +354 -0
  116. package/dist/cjs/lib/v3/tests/agent-experimental-validation.spec.js.map +7 -0
  117. package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js +247 -0
  118. package/dist/cjs/lib/v3/tests/agent-hybrid-mode.spec.js.map +7 -0
  119. package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js +105 -0
  120. package/dist/cjs/lib/v3/tests/agent-message-continuation.spec.js.map +7 -0
  121. package/dist/cjs/lib/v3/tests/agent-streaming.spec.js +126 -0
  122. package/dist/cjs/lib/v3/tests/agent-streaming.spec.js.map +7 -0
  123. package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js +44 -0
  124. package/dist/cjs/lib/v3/tests/cdp-session-detached.spec.js.map +7 -0
  125. package/dist/cjs/lib/v3/tests/click-count.spec.js +147 -0
  126. package/dist/cjs/lib/v3/tests/click-count.spec.js.map +7 -0
  127. package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js +54 -0
  128. package/dist/cjs/lib/v3/tests/connect-to-existing-browser.spec.js.map +7 -0
  129. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +176 -0
  130. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +7 -0
  131. package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js +53 -0
  132. package/dist/cjs/lib/v3/tests/default-page-tracking.spec.js.map +7 -0
  133. package/dist/cjs/lib/v3/tests/downloads.spec.js +80 -0
  134. package/dist/cjs/lib/v3/tests/downloads.spec.js.map +7 -0
  135. package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js +53 -0
  136. package/dist/cjs/lib/v3/tests/frame-get-location-and-click.spec.js.map +7 -0
  137. package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js +493 -0
  138. package/dist/cjs/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +7 -0
  139. package/dist/cjs/lib/v3/tests/keep-alive.child.js +92 -0
  140. package/dist/cjs/lib/v3/tests/keep-alive.child.js.map +7 -0
  141. package/dist/cjs/lib/v3/tests/keep-alive.helpers.js +568 -0
  142. package/dist/cjs/lib/v3/tests/keep-alive.helpers.js.map +7 -0
  143. package/dist/cjs/lib/v3/tests/keep-alive.spec.js +15 -0
  144. package/dist/cjs/lib/v3/tests/keep-alive.spec.js.map +7 -0
  145. package/dist/cjs/lib/v3/tests/keyboard.spec.js +296 -0
  146. package/dist/cjs/lib/v3/tests/keyboard.spec.js.map +7 -0
  147. package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js +159 -0
  148. package/dist/cjs/lib/v3/tests/locator-backend-node-id.spec.js.map +7 -0
  149. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +191 -0
  150. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +7 -0
  151. package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js +108 -0
  152. package/dist/cjs/lib/v3/tests/locator-count-iframe.spec.js.map +7 -0
  153. package/dist/cjs/lib/v3/tests/locator-count.spec.js +71 -0
  154. package/dist/cjs/lib/v3/tests/locator-count.spec.js.map +7 -0
  155. package/dist/cjs/lib/v3/tests/locator-fill.spec.js +118 -0
  156. package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +7 -0
  157. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +136 -0
  158. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +7 -0
  159. package/dist/cjs/lib/v3/tests/locator-nth.spec.js +157 -0
  160. package/dist/cjs/lib/v3/tests/locator-nth.spec.js.map +7 -0
  161. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +242 -0
  162. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +7 -0
  163. package/dist/cjs/lib/v3/tests/logger-initialization.spec.js +547 -0
  164. package/dist/cjs/lib/v3/tests/logger-initialization.spec.js.map +7 -0
  165. package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js +269 -0
  166. package/dist/cjs/lib/v3/tests/multi-instance-logger.spec.js.map +7 -0
  167. package/dist/cjs/lib/v3/tests/nested-div.spec.js +23 -0
  168. package/dist/cjs/lib/v3/tests/nested-div.spec.js.map +7 -0
  169. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +90 -0
  170. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +7 -0
  171. package/dist/cjs/lib/v3/tests/page-console.spec.js +56 -0
  172. package/dist/cjs/lib/v3/tests/page-console.spec.js.map +7 -0
  173. package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js +418 -0
  174. package/dist/cjs/lib/v3/tests/page-drag-and-drop.spec.js.map +7 -0
  175. package/dist/cjs/lib/v3/tests/page-goto-response.spec.js +35 -0
  176. package/dist/cjs/lib/v3/tests/page-goto-response.spec.js.map +7 -0
  177. package/dist/cjs/lib/v3/tests/page-hover.spec.js +167 -0
  178. package/dist/cjs/lib/v3/tests/page-hover.spec.js.map +7 -0
  179. package/dist/cjs/lib/v3/tests/page-screenshot.spec.js +295 -0
  180. package/dist/cjs/lib/v3/tests/page-screenshot.spec.js.map +7 -0
  181. package/dist/cjs/lib/v3/tests/page-scroll.spec.js +182 -0
  182. package/dist/cjs/lib/v3/tests/page-scroll.spec.js.map +7 -0
  183. package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js +46 -0
  184. package/dist/cjs/lib/v3/tests/page-send-cdp.spec.js.map +7 -0
  185. package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js +98 -0
  186. package/dist/cjs/lib/v3/tests/perform-understudy-method.spec.js.map +7 -0
  187. package/dist/cjs/lib/v3/tests/setinputfiles.spec.js +148 -0
  188. package/dist/cjs/lib/v3/tests/setinputfiles.spec.js.map +7 -0
  189. package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js +156 -0
  190. package/dist/cjs/lib/v3/tests/shadow-iframe-oopif.spec.js.map +7 -0
  191. package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js +156 -0
  192. package/dist/cjs/lib/v3/tests/shadow-iframe-spif.spec.js.map +7 -0
  193. package/dist/cjs/lib/v3/tests/testUtils.js +54 -0
  194. package/dist/cjs/lib/v3/tests/testUtils.js.map +7 -0
  195. package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js +100 -0
  196. package/dist/cjs/lib/v3/tests/text-selector-innermost.spec.js.map +7 -0
  197. package/dist/cjs/lib/v3/tests/timeouts.spec.js +32 -0
  198. package/dist/cjs/lib/v3/tests/timeouts.spec.js.map +7 -0
  199. package/dist/cjs/lib/v3/tests/user-data-dir.spec.js +65 -0
  200. package/dist/cjs/lib/v3/tests/user-data-dir.spec.js.map +7 -0
  201. package/dist/cjs/lib/v3/tests/v3.config.js +36 -0
  202. package/dist/cjs/lib/v3/tests/v3.config.js.map +7 -0
  203. package/dist/cjs/lib/v3/tests/v3.dynamic.config.js +67 -0
  204. package/dist/cjs/lib/v3/tests/v3.dynamic.config.js.map +7 -0
  205. package/dist/cjs/lib/v3/tests/v3.playwright.config.js +61 -0
  206. package/dist/cjs/lib/v3/tests/v3.playwright.config.js.map +7 -0
  207. package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js +593 -0
  208. package/dist/cjs/lib/v3/tests/wait-for-selector.spec.js.map +7 -0
  209. package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js +97 -0
  210. package/dist/cjs/lib/v3/tests/wait-for-timeout.spec.js.map +7 -0
  211. package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js +77 -0
  212. package/dist/cjs/lib/v3/tests/xpath-for-location-deep.spec.js.map +7 -0
  213. package/dist/cjs/lib/v3/timeoutConfig.d.ts +2 -0
  214. package/dist/cjs/lib/v3/types/private/agent.d.ts +6 -0
  215. package/dist/cjs/lib/v3/types/private/api.d.ts +11 -0
  216. package/dist/cjs/lib/v3/types/private/cache.d.ts +128 -0
  217. package/dist/cjs/lib/v3/types/private/evaluator.d.ts +40 -0
  218. package/dist/cjs/lib/v3/types/private/handlers.d.ts +38 -0
  219. package/dist/cjs/lib/v3/types/private/index.d.ts +7 -0
  220. package/dist/cjs/lib/v3/types/private/internal.d.ts +39 -0
  221. package/dist/cjs/lib/v3/types/private/locator.d.ts +9 -0
  222. package/dist/cjs/lib/v3/types/private/network.d.ts +34 -0
  223. package/dist/cjs/lib/v3/types/private/shutdown.d.ts +19 -0
  224. package/dist/cjs/lib/v3/types/private/shutdownErrors.d.ts +12 -0
  225. package/dist/cjs/lib/v3/types/private/snapshot.d.ts +117 -0
  226. package/dist/cjs/lib/v3/types/public/agent.d.ts +595 -0
  227. package/dist/cjs/lib/v3/types/public/api.d.ts +1211 -0
  228. package/dist/cjs/lib/v3/types/public/apiErrors.d.ts +18 -0
  229. package/dist/cjs/lib/v3/types/public/index.d.ts +12 -0
  230. package/dist/cjs/lib/v3/types/public/locator.d.ts +9 -0
  231. package/dist/cjs/lib/v3/types/public/logs.d.ts +23 -0
  232. package/dist/cjs/lib/v3/types/public/methods.d.ts +56 -0
  233. package/dist/cjs/lib/v3/types/public/metrics.d.ts +27 -0
  234. package/dist/cjs/lib/v3/types/public/model.d.ts +65 -0
  235. package/dist/cjs/lib/v3/types/public/options.d.ts +70 -0
  236. package/dist/cjs/lib/v3/types/public/page.d.ts +18 -0
  237. package/dist/cjs/lib/v3/types/public/screenshotTypes.d.ts +25 -0
  238. package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +152 -0
  239. package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.d.ts +15 -0
  240. package/dist/cjs/lib/v3/understudy/a11y/snapshot/activeElement.d.ts +8 -0
  241. package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.d.ts +77 -0
  242. package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.d.ts +7 -0
  243. package/dist/cjs/lib/v3/understudy/a11y/snapshot/domTree.d.ts +46 -0
  244. package/dist/cjs/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +24 -0
  245. package/dist/cjs/lib/v3/understudy/a11y/snapshot/index.d.ts +4 -0
  246. package/dist/cjs/lib/v3/understudy/a11y/snapshot/sessions.d.ts +16 -0
  247. package/dist/cjs/lib/v3/understudy/a11y/snapshot/treeFormatUtils.d.ts +28 -0
  248. package/dist/cjs/lib/v3/understudy/a11y/snapshot/xpathUtils.d.ts +26 -0
  249. package/dist/cjs/lib/v3/understudy/a11yInvocation.d.ts +8 -0
  250. package/dist/cjs/lib/v3/understudy/cdp.d.ts +69 -0
  251. package/dist/cjs/lib/v3/understudy/consoleMessage.d.ts +22 -0
  252. package/dist/cjs/lib/v3/understudy/context.d.ts +132 -0
  253. package/dist/cjs/lib/v3/understudy/deepLocator.d.ts +87 -0
  254. package/dist/cjs/lib/v3/understudy/executionContextRegistry.d.ts +15 -0
  255. package/dist/cjs/lib/v3/understudy/fileUploadUtils.d.ts +13 -0
  256. package/dist/cjs/lib/v3/understudy/frame.d.ts +69 -0
  257. package/dist/cjs/lib/v3/understudy/frameLocator.d.ts +50 -0
  258. package/dist/cjs/lib/v3/understudy/frameRegistry.d.ts +101 -0
  259. package/dist/cjs/lib/v3/understudy/initScripts.d.ts +2 -0
  260. package/dist/cjs/lib/v3/understudy/lifecycleWatcher.d.ts +64 -0
  261. package/dist/cjs/lib/v3/understudy/locator.d.ts +194 -0
  262. package/dist/cjs/lib/v3/understudy/locatorInvocation.d.ts +8 -0
  263. package/dist/cjs/lib/v3/understudy/navigationResponseTracker.d.ts +84 -0
  264. package/dist/cjs/lib/v3/understudy/networkManager.d.ts +53 -0
  265. package/dist/cjs/lib/v3/understudy/page.d.ts +354 -0
  266. package/dist/cjs/lib/v3/understudy/piercer.d.ts +4 -0
  267. package/dist/cjs/lib/v3/understudy/response.d.ts +137 -0
  268. package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +16 -0
  269. package/dist/cjs/lib/v3/understudy/selectorResolver.d.ts +38 -0
  270. package/dist/cjs/lib/v3/v3.d.ts +191 -0
  271. package/dist/cjs/lib/v3/zodCompat.d.ts +12 -0
  272. package/dist/cjs/lib/v3Evaluator.d.ts +19 -0
  273. package/dist/cjs/lib/version.d.ts +5 -0
  274. package/dist/cjs/package.json +3 -0
  275. package/dist/cjs/tests/browserbase-session-accessors.test.js +101 -0
  276. package/dist/cjs/tests/browserbase-session-accessors.test.js.map +7 -0
  277. package/dist/cjs/tests/cache-llm-resolution.test.js +187 -0
  278. package/dist/cjs/tests/cache-llm-resolution.test.js.map +7 -0
  279. package/dist/cjs/tests/helpers/mockCDPSession.js +50 -0
  280. package/dist/cjs/tests/helpers/mockCDPSession.js.map +7 -0
  281. package/dist/cjs/tests/llm-provider.test.js +57 -0
  282. package/dist/cjs/tests/llm-provider.test.js.map +7 -0
  283. package/dist/cjs/tests/model-deprecation.test.js +132 -0
  284. package/dist/cjs/tests/model-deprecation.test.js.map +7 -0
  285. package/dist/cjs/tests/page-snapshot.test.js +58 -0
  286. package/dist/cjs/tests/page-snapshot.test.js.map +7 -0
  287. package/dist/cjs/tests/public-api/export-surface.test.js +76 -0
  288. package/dist/cjs/tests/public-api/export-surface.test.js.map +7 -0
  289. package/dist/cjs/tests/public-api/llm-and-agents.test.js +150 -0
  290. package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +7 -0
  291. package/dist/cjs/tests/public-api/public-error-types.test.js +104 -0
  292. package/dist/cjs/tests/public-api/public-error-types.test.js.map +7 -0
  293. package/dist/cjs/tests/public-api/public-types.test.js +74 -0
  294. package/dist/cjs/tests/public-api/public-types.test.js.map +7 -0
  295. package/dist/cjs/tests/public-api/runtime-utils.test.js +53 -0
  296. package/dist/cjs/tests/public-api/runtime-utils.test.js.map +7 -0
  297. package/dist/cjs/tests/public-api/schema-utils.test.js +100 -0
  298. package/dist/cjs/tests/public-api/schema-utils.test.js.map +7 -0
  299. package/dist/cjs/tests/public-api/timeout-error-types.test.js +103 -0
  300. package/dist/cjs/tests/public-api/timeout-error-types.test.js.map +7 -0
  301. package/dist/cjs/tests/public-api/tool-type-export.test.js +47 -0
  302. package/dist/cjs/tests/public-api/tool-type-export.test.js.map +7 -0
  303. package/dist/cjs/tests/public-api/v3-core.test.js +104 -0
  304. package/dist/cjs/tests/public-api/v3-core.test.js.map +7 -0
  305. package/dist/cjs/tests/safety-confirmation.test.js +134 -0
  306. package/dist/cjs/tests/safety-confirmation.test.js.map +7 -0
  307. package/dist/cjs/tests/snapshot-a11y-resolvers.test.js +370 -0
  308. package/dist/cjs/tests/snapshot-a11y-resolvers.test.js.map +7 -0
  309. package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js +294 -0
  310. package/dist/cjs/tests/snapshot-a11y-tree-utils.test.js.map +7 -0
  311. package/dist/cjs/tests/snapshot-capture-orchestration.test.js +403 -0
  312. package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +7 -0
  313. package/dist/cjs/tests/snapshot-cbor.test.js +197 -0
  314. package/dist/cjs/tests/snapshot-cbor.test.js.map +7 -0
  315. package/dist/cjs/tests/snapshot-dom-session-builders.test.js +246 -0
  316. package/dist/cjs/tests/snapshot-dom-session-builders.test.js.map +7 -0
  317. package/dist/cjs/tests/snapshot-dom-tree-utils.test.js +104 -0
  318. package/dist/cjs/tests/snapshot-dom-tree-utils.test.js.map +7 -0
  319. package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js +45 -0
  320. package/dist/cjs/tests/snapshot-focus-selectors-utils.test.js.map +7 -0
  321. package/dist/cjs/tests/snapshot-frame-merge.test.js +388 -0
  322. package/dist/cjs/tests/snapshot-frame-merge.test.js.map +7 -0
  323. package/dist/cjs/tests/snapshot-tree-format-utils.test.js +106 -0
  324. package/dist/cjs/tests/snapshot-tree-format-utils.test.js.map +7 -0
  325. package/dist/cjs/tests/snapshot-xpath-utils.test.js +74 -0
  326. package/dist/cjs/tests/snapshot-xpath-utils.test.js.map +7 -0
  327. package/dist/cjs/tests/timeout-handlers.test.js +864 -0
  328. package/dist/cjs/tests/timeout-handlers.test.js.map +7 -0
  329. package/dist/cjs/tests/xpath-parser.test.js +314 -0
  330. package/dist/cjs/tests/xpath-parser.test.js.map +7 -0
  331. package/dist/cjs/tests/xpath-resolver.test.js +70 -0
  332. package/dist/cjs/tests/xpath-resolver.test.js.map +7 -0
  333. package/dist/cjs/tests/zod-enum-compatibility.test.js +119 -0
  334. package/dist/cjs/tests/zod-enum-compatibility.test.js.map +7 -0
  335. package/dist/esm/lib/modelUtils.d.ts +0 -3
  336. package/dist/esm/lib/modelUtils.js +2 -7
  337. package/dist/esm/lib/modelUtils.js.map +1 -1
  338. package/dist/esm/lib/v3/agent/tools/act.d.ts +1 -2
  339. package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
  340. package/dist/esm/lib/v3/agent/tools/extract.d.ts +1 -2
  341. package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
  342. package/dist/esm/lib/v3/agent/tools/fillform.d.ts +1 -2
  343. package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
  344. package/dist/esm/lib/v3/agent/tools/index.d.ts +2 -2
  345. package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
  346. package/dist/esm/lib/v3/cli.d.ts +2 -0
  347. package/dist/esm/lib/v3/cli.js +10 -0
  348. package/dist/esm/lib/v3/cli.js.map +1 -0
  349. package/dist/esm/lib/v3/dom/build/rerender-index.d.ts +0 -0
  350. package/dist/esm/lib/v3/dom/build/rerender-index.js.map +1 -0
  351. package/dist/esm/lib/v3/dom/build/v3-index.d.ts +0 -0
  352. package/dist/esm/lib/v3/dom/build/v3-index.js.map +1 -0
  353. package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
  354. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  355. package/dist/esm/lib/v3/index.d.ts +1 -0
  356. package/dist/esm/lib/v3/index.js +1 -0
  357. package/dist/esm/lib/v3/index.js.map +1 -1
  358. package/dist/esm/lib/v3/shutdown/supervisor.d.ts +7 -5
  359. package/dist/esm/lib/v3/shutdown/supervisor.js +62 -52
  360. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
  361. package/dist/esm/lib/v3/shutdown/supervisorClient.js +48 -52
  362. package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
  363. package/dist/esm/lib/v3/tests/click-count.spec.js +47 -12
  364. package/dist/esm/lib/v3/tests/click-count.spec.js.map +2 -2
  365. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +67 -21
  366. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +2 -2
  367. package/dist/esm/lib/v3/tests/v3.playwright.config.js +3 -60
  368. package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +2 -2
  369. package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -13
  370. package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
  371. package/dist/esm/lib/v3/understudy/context.js +10 -1
  372. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  373. package/dist/esm/lib/v3/understudy/locator.js +2 -2
  374. package/dist/esm/lib/v3/understudy/locator.js.map +1 -1
  375. package/dist/esm/lib/v3/understudy/page.js +2 -1
  376. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  377. package/dist/esm/lib/v3/v3.js +10 -13
  378. package/dist/esm/lib/v3/v3.js.map +1 -1
  379. package/dist/esm/tests/public-api/export-surface.test.js +1 -0
  380. package/dist/esm/tests/public-api/export-surface.test.js.map +2 -2
  381. package/package.json +13 -9
  382. package/dist/esm/lib/v3/tests/envReporter.js +0 -57
  383. package/dist/esm/lib/v3/tests/envReporter.js.map +0 -7
  384. package/dist/esm/tests/agent-execution-model.test.js +0 -139
  385. package/dist/esm/tests/agent-execution-model.test.js.map +0 -7
  386. package/dist/esm/tests/model-utils.test.js +0 -43
  387. package/dist/esm/tests/model-utils.test.js.map +0 -7
@@ -0,0 +1,92 @@
1
+ var import_v3 = require("../v3.js");
2
+ async function main() {
3
+ const encoded = process.argv.find((arg) => arg.startsWith("cfg:"));
4
+ if (!encoded) {
5
+ throw new Error("Missing child config payload.");
6
+ }
7
+ const raw = Buffer.from(encoded.slice(4), "base64").toString("utf8");
8
+ const cfg = JSON.parse(raw);
9
+ const {
10
+ env,
11
+ keepAlive,
12
+ disableAPI,
13
+ scenario,
14
+ apiKey,
15
+ projectId,
16
+ debug = false,
17
+ viewMs = 0
18
+ } = cfg;
19
+ const log = (message) => {
20
+ if (debug) {
21
+ console.log(message);
22
+ }
23
+ };
24
+ if (env !== "LOCAL" && env !== "BROWSERBASE") {
25
+ throw new Error("KEEP_ALIVE_ENV must be LOCAL or BROWSERBASE");
26
+ }
27
+ if (!scenario) {
28
+ throw new Error("KEEP_ALIVE_SCENARIO is required");
29
+ }
30
+ log(
31
+ `[keep-alive-child] env=${env} keepAlive=${keepAlive} disableAPI=${disableAPI} scenario=${scenario} apiKey=${apiKey ? "set" : "missing"} projectId=${projectId ? "set" : "missing"}`
32
+ );
33
+ const showBrowser = viewMs > 0;
34
+ const v3 = new import_v3.V3({
35
+ env,
36
+ keepAlive,
37
+ disableAPI,
38
+ apiKey,
39
+ projectId,
40
+ browserbaseSessionCreateParams: void 0,
41
+ localBrowserLaunchOptions: env === "LOCAL" ? {
42
+ executablePath: process.env.CHROME_PATH,
43
+ args: process.env.CI ? ["--no-sandbox"] : void 0,
44
+ headless: !showBrowser,
45
+ viewport: { width: 1288, height: 711 }
46
+ } : void 0,
47
+ verbose: debug ? 2 : 0,
48
+ disablePino: true,
49
+ logger: debug ? (line) => console.log(line) : void 0
50
+ });
51
+ await v3.init();
52
+ const info = {
53
+ connectURL: v3.connectURL(),
54
+ sessionId: v3.browserbaseSessionId ?? null
55
+ };
56
+ await new Promise((resolve, reject) => {
57
+ process.stdout.write(`__KEEPALIVE__${JSON.stringify(info)}
58
+ `, (error) => {
59
+ if (error) {
60
+ reject(error);
61
+ return;
62
+ }
63
+ resolve();
64
+ });
65
+ });
66
+ if (env === "LOCAL" && viewMs > 0) {
67
+ await new Promise((r) => setTimeout(r, viewMs));
68
+ }
69
+ if (scenario === "close") {
70
+ await v3.close().catch(() => {
71
+ });
72
+ process.exit(0);
73
+ }
74
+ if (scenario === "sigterm") {
75
+ return;
76
+ }
77
+ if (scenario === "sigint") {
78
+ return;
79
+ }
80
+ if (scenario === "unhandled") {
81
+ setTimeout(() => {
82
+ void Promise.reject(new Error("keepAlive unhandled rejection"));
83
+ }, 0);
84
+ return;
85
+ }
86
+ throw new Error(`Unknown scenario: ${scenario}`);
87
+ }
88
+ main().catch((err) => {
89
+ console.error(err);
90
+ process.exit(1);
91
+ });
92
+ //# sourceMappingURL=keep-alive.child.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../lib/v3/tests/keep-alive.child.ts"],
4
+ "sourcesContent": ["import { V3 } from \"../v3.js\";\n\nasync function main(): Promise<void> {\n const encoded = process.argv.find((arg) => arg.startsWith(\"cfg:\"));\n if (!encoded) {\n throw new Error(\"Missing child config payload.\");\n }\n const raw = Buffer.from(encoded.slice(4), \"base64\").toString(\"utf8\");\n const cfg = JSON.parse(raw) as {\n env: \"LOCAL\" | \"BROWSERBASE\";\n keepAlive: boolean;\n disableAPI: boolean;\n scenario: string;\n apiKey?: string;\n projectId?: string;\n debug?: boolean;\n viewMs?: number;\n };\n const {\n env,\n keepAlive,\n disableAPI,\n scenario,\n apiKey,\n projectId,\n debug = false,\n viewMs = 0,\n } = cfg;\n\n const log = (message: string): void => {\n if (debug) {\n console.log(message);\n }\n };\n\n if (env !== \"LOCAL\" && env !== \"BROWSERBASE\") {\n throw new Error(\"KEEP_ALIVE_ENV must be LOCAL or BROWSERBASE\");\n }\n if (!scenario) {\n throw new Error(\"KEEP_ALIVE_SCENARIO is required\");\n }\n\n log(\n `[keep-alive-child] env=${env} keepAlive=${keepAlive} disableAPI=${disableAPI} ` +\n `scenario=${scenario} apiKey=${apiKey ? \"set\" : \"missing\"} ` +\n `projectId=${projectId ? \"set\" : \"missing\"}`,\n );\n\n const showBrowser = viewMs > 0;\n const v3 = new V3({\n env,\n keepAlive,\n disableAPI,\n apiKey,\n projectId,\n browserbaseSessionCreateParams: undefined,\n localBrowserLaunchOptions:\n env === \"LOCAL\"\n ? {\n executablePath: process.env.CHROME_PATH,\n args: process.env.CI ? [\"--no-sandbox\"] : undefined,\n headless: !showBrowser,\n viewport: { width: 1288, height: 711 },\n }\n : undefined,\n verbose: debug ? 2 : 0,\n disablePino: true,\n logger: debug ? (line) => console.log(line) : undefined,\n });\n\n await v3.init();\n\n const info = {\n connectURL: v3.connectURL(),\n sessionId: v3.browserbaseSessionId ?? null,\n };\n await new Promise<void>((resolve, reject) => {\n process.stdout.write(`__KEEPALIVE__${JSON.stringify(info)}\\n`, (error) => {\n if (error) {\n reject(error);\n return;\n }\n resolve();\n });\n });\n\n if (env === \"LOCAL\" && viewMs > 0) {\n await new Promise((r) => setTimeout(r, viewMs));\n }\n\n if (scenario === \"close\") {\n await v3.close().catch(() => {});\n process.exit(0);\n }\n\n if (scenario === \"sigterm\") {\n return;\n }\n\n if (scenario === \"sigint\") {\n return;\n }\n\n if (scenario === \"unhandled\") {\n setTimeout(() => {\n void Promise.reject(new Error(\"keepAlive unhandled rejection\"));\n }, 0);\n return;\n }\n\n throw new Error(`Unknown scenario: ${scenario}`);\n}\n\nmain().catch((err) => {\n console.error(err);\n process.exit(1);\n});\n"],
5
+ "mappings": "AAAA,gBAAmB;AAEnB,eAAe,OAAsB;AACnC,QAAM,UAAU,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,MAAM,CAAC;AACjE,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACA,QAAM,MAAM,OAAO,KAAK,QAAQ,MAAM,CAAC,GAAG,QAAQ,EAAE,SAAS,MAAM;AACnE,QAAM,MAAM,KAAK,MAAM,GAAG;AAU1B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,EACX,IAAI;AAEJ,QAAM,MAAM,CAAC,YAA0B;AACrC,QAAI,OAAO;AACT,cAAQ,IAAI,OAAO;AAAA,IACrB;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,QAAQ,eAAe;AAC5C,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AACA,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AAEA;AAAA,IACE,0BAA0B,GAAG,cAAc,SAAS,eAAe,UAAU,aAC/D,QAAQ,WAAW,SAAS,QAAQ,SAAS,cAC5C,YAAY,QAAQ,SAAS;AAAA,EAC9C;AAEA,QAAM,cAAc,SAAS;AAC7B,QAAM,KAAK,IAAI,aAAG;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gCAAgC;AAAA,IAChC,2BACE,QAAQ,UACJ;AAAA,MACE,gBAAgB,QAAQ,IAAI;AAAA,MAC5B,MAAM,QAAQ,IAAI,KAAK,CAAC,cAAc,IAAI;AAAA,MAC1C,UAAU,CAAC;AAAA,MACX,UAAU,EAAE,OAAO,MAAM,QAAQ,IAAI;AAAA,IACvC,IACA;AAAA,IACN,SAAS,QAAQ,IAAI;AAAA,IACrB,aAAa;AAAA,IACb,QAAQ,QAAQ,CAAC,SAAS,QAAQ,IAAI,IAAI,IAAI;AAAA,EAChD,CAAC;AAED,QAAM,GAAG,KAAK;AAEd,QAAM,OAAO;AAAA,IACX,YAAY,GAAG,WAAW;AAAA,IAC1B,WAAW,GAAG,wBAAwB;AAAA,EACxC;AACA,QAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,YAAQ,OAAO,MAAM,gBAAgB,KAAK,UAAU,IAAI,CAAC;AAAA,GAAM,CAAC,UAAU;AACxE,UAAI,OAAO;AACT,eAAO,KAAK;AACZ;AAAA,MACF;AACA,cAAQ;AAAA,IACV,CAAC;AAAA,EACH,CAAC;AAED,MAAI,QAAQ,WAAW,SAAS,GAAG;AACjC,UAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC;AAAA,EAChD;AAEA,MAAI,aAAa,SAAS;AACxB,UAAM,GAAG,MAAM,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAC/B,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI,aAAa,WAAW;AAC1B;AAAA,EACF;AAEA,MAAI,aAAa,UAAU;AACzB;AAAA,EACF;AAEA,MAAI,aAAa,aAAa;AAC5B,eAAW,MAAM;AACf,WAAK,QAAQ,OAAO,IAAI,MAAM,+BAA+B,CAAC;AAAA,IAChE,GAAG,CAAC;AACJ;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,qBAAqB,QAAQ,EAAE;AACjD;AAEA,KAAK,EAAE,MAAM,CAAC,QAAQ;AACpB,UAAQ,MAAM,GAAG;AACjB,UAAQ,KAAK,CAAC;AAChB,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,568 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+ var keep_alive_helpers_exports = {};
29
+ __export(keep_alive_helpers_exports, {
30
+ buildKeepAliveCases: () => buildKeepAliveCases,
31
+ getKeepAliveEnvConfig: () => getKeepAliveEnvConfig,
32
+ runKeepAliveCase: () => runKeepAliveCase
33
+ });
34
+ module.exports = __toCommonJS(keep_alive_helpers_exports);
35
+ var import_node_child_process = require("node:child_process");
36
+ var import_node_fs = __toESM(require("node:fs"), 1);
37
+ var import_node_path = __toESM(require("node:path"), 1);
38
+ var import_node_url = require("node:url");
39
+ var import_sdk = __toESM(require("@browserbasehq/sdk"), 1);
40
+ var import_ws = __toESM(require("ws"), 1);
41
+ var import_v3_dynamic_config = require("./v3.dynamic.config.js");
42
+ const import_meta = {};
43
+ const testsDir = import_node_path.default.dirname((0, import_node_url.fileURLToPath)(import_meta.url));
44
+ const findCoreDir = (startDir) => {
45
+ let current = import_node_path.default.resolve(startDir);
46
+ while (true) {
47
+ const packageJsonPath = import_node_path.default.join(current, "package.json");
48
+ if (import_node_fs.default.existsSync(packageJsonPath)) {
49
+ try {
50
+ const pkg = JSON.parse(import_node_fs.default.readFileSync(packageJsonPath, "utf8"));
51
+ if (pkg.name === "@browserbasehq/stagehand") {
52
+ return current;
53
+ }
54
+ } catch {
55
+ }
56
+ }
57
+ const parent = import_node_path.default.dirname(current);
58
+ if (parent === current) {
59
+ return import_node_path.default.resolve(startDir, "../../..");
60
+ }
61
+ current = parent;
62
+ }
63
+ };
64
+ const coreDir = findCoreDir(testsDir);
65
+ const resolveChildRunner = () => {
66
+ const distJsPath = import_node_path.default.join(
67
+ coreDir,
68
+ "dist",
69
+ "esm",
70
+ "lib",
71
+ "v3",
72
+ "tests",
73
+ "keep-alive.child.js"
74
+ );
75
+ if (import_node_fs.default.existsSync(distJsPath)) {
76
+ return { command: process.execPath, args: [distJsPath] };
77
+ }
78
+ return null;
79
+ };
80
+ const childRunner = resolveChildRunner();
81
+ const DEBUG = process.env.KEEP_ALIVE_DEBUG === "1";
82
+ const VIEW_MS = Number(process.env.KEEP_ALIVE_VIEW_MS ?? "0");
83
+ const LOCAL_TIMEOUT_MS = Number(
84
+ process.env.KEEP_ALIVE_LOCAL_TIMEOUT_MS ?? "8000"
85
+ );
86
+ const BB_TIMEOUT_MS = Number(process.env.KEEP_ALIVE_BB_TIMEOUT_MS ?? "30000");
87
+ const STAY_OPEN_MS = Number(process.env.KEEP_ALIVE_STAY_OPEN_MS ?? "6000");
88
+ const ACTION_EXIT_TIMEOUT_MS = Number(
89
+ process.env.KEEP_ALIVE_ACTION_EXIT_TIMEOUT_MS ?? "3000"
90
+ );
91
+ const LOCAL_INFO_TIMEOUT_MS = Number(
92
+ process.env.KEEP_ALIVE_LOCAL_INFO_TIMEOUT_MS ?? "15000"
93
+ );
94
+ const BB_INFO_TIMEOUT_MS = Number(
95
+ process.env.KEEP_ALIVE_BB_INFO_TIMEOUT_MS ?? (process.env.CI ? "45000" : "30000")
96
+ );
97
+ const getInfoTimeoutMs = (env) => env === "BROWSERBASE" ? BB_INFO_TIMEOUT_MS : LOCAL_INFO_TIMEOUT_MS;
98
+ function debugLog(message) {
99
+ if (DEBUG) {
100
+ console.log(message);
101
+ }
102
+ }
103
+ function parseChildInfo(line) {
104
+ const prefix = "__KEEPALIVE__";
105
+ if (!line.startsWith(prefix)) return null;
106
+ try {
107
+ return JSON.parse(line.slice(prefix.length));
108
+ } catch {
109
+ return null;
110
+ }
111
+ }
112
+ async function runScenario(config) {
113
+ const payload = {
114
+ env: config.env,
115
+ keepAlive: config.keepAlive,
116
+ disableAPI: config.disableAPI,
117
+ scenario: config.kind,
118
+ apiKey: config.apiKey,
119
+ projectId: config.projectId,
120
+ debug: config.debug,
121
+ viewMs: config.viewMs
122
+ };
123
+ const encoded = `cfg:${Buffer.from(JSON.stringify(payload)).toString("base64")}`;
124
+ if (!childRunner) {
125
+ throw new Error(
126
+ "keep-alive child script not found at dist/esm/lib/v3/tests/keep-alive.child.js"
127
+ );
128
+ }
129
+ const child = (0, import_node_child_process.spawn)(childRunner.command, [...childRunner.args, encoded], {
130
+ cwd: coreDir,
131
+ env: { ...process.env },
132
+ stdio: ["ignore", "pipe", "pipe"]
133
+ });
134
+ const logs = { stdout: [], stderr: [] };
135
+ let buffer = "";
136
+ let stderr = "";
137
+ let resolved = false;
138
+ const infoTimeoutMs = getInfoTimeoutMs(config.env);
139
+ const infoPromise = new Promise((resolve, reject) => {
140
+ const timeout = setTimeout(() => {
141
+ child.kill("SIGKILL");
142
+ const stdoutDetails = logs.stdout.length > 0 ? `
143
+ Child stdout:
144
+ ${logs.stdout.join("\n")}` : "";
145
+ const details = stderr.trim();
146
+ const suffix = details ? `
147
+ Child stderr:
148
+ ${details}` : "\nChild did not emit keepAlive info.";
149
+ reject(
150
+ new Error(
151
+ `Child timed out waiting for info after ${infoTimeoutMs}ms (env=${config.env}, keepAlive=${config.keepAlive}, disableAPI=${config.disableAPI}, scenario=${config.kind}).${suffix}${stdoutDetails}`
152
+ )
153
+ );
154
+ }, infoTimeoutMs);
155
+ child.stdout.on("data", (chunk) => {
156
+ buffer += chunk.toString();
157
+ let idx = buffer.indexOf("\n");
158
+ while (idx !== -1) {
159
+ const line = buffer.slice(0, idx).trim();
160
+ buffer = buffer.slice(idx + 1);
161
+ const parsed = parseChildInfo(line);
162
+ if (parsed && !resolved) {
163
+ resolved = true;
164
+ clearTimeout(timeout);
165
+ resolve(parsed);
166
+ } else if (line.length > 0) {
167
+ logs.stdout.push(line);
168
+ debugLog(`[keep-alive-child] ${line}`);
169
+ }
170
+ idx = buffer.indexOf("\n");
171
+ }
172
+ });
173
+ child.on("exit", (code, signal) => {
174
+ if (resolved) return;
175
+ clearTimeout(timeout);
176
+ const stdoutDetails = logs.stdout.length > 0 ? `
177
+ Child stdout:
178
+ ${logs.stdout.join("\n")}` : "";
179
+ const details = stderr.trim();
180
+ const suffix = details ? `
181
+ Child stderr:
182
+ ${details}` : "\nChild exited without emitting keepAlive info.";
183
+ reject(
184
+ new Error(
185
+ `Child exited (code=${code ?? "null"}, signal=${signal ?? "null"}) before emitting keepAlive info (env=${config.env}, keepAlive=${config.keepAlive}, disableAPI=${config.disableAPI}, scenario=${config.kind}).${suffix}${stdoutDetails}`
186
+ )
187
+ );
188
+ });
189
+ child.on("error", (error) => {
190
+ if (resolved) return;
191
+ clearTimeout(timeout);
192
+ reject(error);
193
+ });
194
+ });
195
+ child.stderr.on("data", (chunk) => {
196
+ const text = chunk.toString();
197
+ stderr += text;
198
+ const trimmed = text.trim();
199
+ if (trimmed.length > 0) {
200
+ logs.stderr.push(trimmed);
201
+ debugLog(`[keep-alive-child] ${trimmed}`);
202
+ }
203
+ });
204
+ const info = await infoPromise;
205
+ return { info, child, logs };
206
+ }
207
+ async function stopChild(child) {
208
+ if (child.exitCode !== null) return;
209
+ try {
210
+ child.kill("SIGKILL");
211
+ } catch {
212
+ return;
213
+ }
214
+ await new Promise((resolve) => {
215
+ const timer = setTimeout(() => resolve(), 2e3);
216
+ child.once("exit", () => {
217
+ clearTimeout(timer);
218
+ resolve();
219
+ });
220
+ });
221
+ }
222
+ async function waitForChildExit(child, timeoutMs) {
223
+ if (child.exitCode !== null) return;
224
+ await new Promise((resolve) => {
225
+ const timer = setTimeout(() => resolve(), timeoutMs);
226
+ child.once("exit", () => {
227
+ clearTimeout(timer);
228
+ resolve();
229
+ });
230
+ });
231
+ }
232
+ async function checkLocalAlive(connectURL) {
233
+ let port = "";
234
+ try {
235
+ port = new URL(connectURL).port;
236
+ } catch {
237
+ return { alive: false, status: "INVALID_URL" };
238
+ }
239
+ if (!port) return { alive: false, status: "MISSING_PORT" };
240
+ const controller = new AbortController();
241
+ const timer = setTimeout(() => controller.abort(), 1500);
242
+ try {
243
+ const resp = await fetch(`http://127.0.0.1:${port}/json/version`, {
244
+ signal: controller.signal
245
+ });
246
+ if (!resp.ok) {
247
+ return { alive: false, status: `HTTP_${resp.status}` };
248
+ }
249
+ const json = await resp.json();
250
+ const ws = json?.webSocketDebuggerUrl;
251
+ if (!ws) {
252
+ return { alive: false, status: "MISSING_WS" };
253
+ }
254
+ if (ws !== connectURL) {
255
+ return { alive: false, status: "WS_MISMATCH" };
256
+ }
257
+ return { alive: true, status: "MATCH" };
258
+ } catch {
259
+ return { alive: false, status: "FETCH_ERROR" };
260
+ } finally {
261
+ clearTimeout(timer);
262
+ }
263
+ }
264
+ async function closeLocalBrowser(connectURL) {
265
+ await new Promise((resolve) => {
266
+ const ws = new import_ws.default(connectURL);
267
+ const timer = setTimeout(() => {
268
+ ws.terminate();
269
+ resolve();
270
+ }, 2e3);
271
+ ws.on("open", () => {
272
+ ws.send(JSON.stringify({ id: 1, method: "Browser.close" }));
273
+ });
274
+ ws.on("error", () => {
275
+ clearTimeout(timer);
276
+ resolve();
277
+ });
278
+ ws.on("close", () => {
279
+ clearTimeout(timer);
280
+ resolve();
281
+ });
282
+ });
283
+ }
284
+ async function checkBrowserbaseAlive(sessionId, apiKey) {
285
+ if (!apiKey) return { alive: false, status: "NO_API_KEY" };
286
+ const bb = new import_sdk.default({ apiKey });
287
+ try {
288
+ const snapshot = await bb.sessions.retrieve(sessionId);
289
+ if (DEBUG) {
290
+ const status2 = snapshot?.status ?? "<missing>";
291
+ debugLog(`[keep-alive] session ${sessionId} status=${status2}`);
292
+ }
293
+ const status = snapshot?.status;
294
+ return { alive: status === "RUNNING", status };
295
+ } catch (error) {
296
+ debugLog(
297
+ `[keep-alive] session ${sessionId} retrieve failed: ${String(error)}`
298
+ );
299
+ return { alive: false, status: "RETRIEVE_FAILED" };
300
+ }
301
+ }
302
+ async function endBrowserbaseSession(sessionId, apiKey, projectId) {
303
+ if (!apiKey || !projectId) return;
304
+ const bb = new import_sdk.default({ apiKey });
305
+ try {
306
+ await bb.sessions.update(sessionId, {
307
+ status: "REQUEST_RELEASE",
308
+ projectId
309
+ });
310
+ } catch {
311
+ }
312
+ }
313
+ async function assertStaysOpen(check, durationMs, intervalMs = 500) {
314
+ const start = Date.now();
315
+ const deadline = start + durationMs;
316
+ let lastStatus;
317
+ while (Date.now() < deadline) {
318
+ const result = await check();
319
+ lastStatus = result.status ?? lastStatus;
320
+ if (!result.alive) {
321
+ const elapsed = Date.now() - start;
322
+ const status = lastStatus ? ` (last status ${lastStatus})` : "";
323
+ throw new Error(
324
+ `Browser closed after ${elapsed}ms (expected ${durationMs}ms)${status}.`
325
+ );
326
+ }
327
+ await new Promise((r) => setTimeout(r, intervalMs));
328
+ }
329
+ return { durationMs: Date.now() - start, lastStatus };
330
+ }
331
+ async function waitForClosed(check, timeoutMs, intervalMs = 500) {
332
+ const start = Date.now();
333
+ let lastStatus;
334
+ while (Date.now() - start < timeoutMs) {
335
+ const result = await check();
336
+ lastStatus = result.status ?? lastStatus;
337
+ if (!result.alive) {
338
+ return { durationMs: Date.now() - start, lastStatus };
339
+ }
340
+ await new Promise((r) => setTimeout(r, intervalMs));
341
+ }
342
+ const status = lastStatus ? ` (last status ${lastStatus})` : "";
343
+ throw new Error(`Browser still alive after ${timeoutMs}ms${status}.`);
344
+ }
345
+ async function assertBrowserState(env, info, shouldStayOpen, apiKey, projectId) {
346
+ const expected = shouldStayOpen ? "open" : "closed";
347
+ if (env === "LOCAL") {
348
+ if (shouldStayOpen) {
349
+ const result3 = await assertStaysOpen(
350
+ () => checkLocalAlive(info.connectURL),
351
+ STAY_OPEN_MS
352
+ );
353
+ const outcome = {
354
+ expected,
355
+ actual: "open",
356
+ durationMs: result3.durationMs,
357
+ lastStatus: result3.lastStatus
358
+ };
359
+ await closeLocalBrowser(info.connectURL);
360
+ return outcome;
361
+ }
362
+ const result2 = await waitForClosed(
363
+ () => checkLocalAlive(info.connectURL),
364
+ LOCAL_TIMEOUT_MS
365
+ );
366
+ return {
367
+ expected,
368
+ actual: "closed",
369
+ durationMs: result2.durationMs,
370
+ lastStatus: result2.lastStatus
371
+ };
372
+ }
373
+ if (!info.sessionId) {
374
+ throw new Error("Browserbase sessionId missing");
375
+ }
376
+ if (shouldStayOpen) {
377
+ const result2 = await assertStaysOpen(
378
+ () => checkBrowserbaseAlive(info.sessionId, apiKey),
379
+ STAY_OPEN_MS,
380
+ 1e3
381
+ );
382
+ const outcome = {
383
+ expected,
384
+ actual: "open",
385
+ durationMs: result2.durationMs,
386
+ lastStatus: result2.lastStatus
387
+ };
388
+ await endBrowserbaseSession(info.sessionId, apiKey, projectId);
389
+ return outcome;
390
+ }
391
+ const result = await waitForClosed(
392
+ () => checkBrowserbaseAlive(info.sessionId, apiKey),
393
+ BB_TIMEOUT_MS,
394
+ 1e3
395
+ );
396
+ return {
397
+ expected,
398
+ actual: "closed",
399
+ durationMs: result.durationMs,
400
+ lastStatus: result.lastStatus
401
+ };
402
+ }
403
+ function dumpLogs(logs) {
404
+ if (logs.stdout.length > 0) {
405
+ console.log("[keep-alive] child stdout:");
406
+ for (const line of logs.stdout) {
407
+ console.log(` ${line}`);
408
+ }
409
+ }
410
+ if (logs.stderr.length > 0) {
411
+ console.log("[keep-alive] child stderr:");
412
+ for (const line of logs.stderr) {
413
+ console.log(` ${line}`);
414
+ }
415
+ }
416
+ }
417
+ function logCaseResult(label, envLabel, keepAlive, outcome, error) {
418
+ const prefix = `[keep-alive] ${envLabel} keepAlive=${keepAlive} ${label}`;
419
+ if (error) {
420
+ console.log(`${prefix} FAIL: ${error.message}`);
421
+ return;
422
+ }
423
+ if (!outcome) {
424
+ console.log(`${prefix} FAIL: missing outcome`);
425
+ return;
426
+ }
427
+ const status = outcome.lastStatus !== void 0 ? ` (last status ${outcome.lastStatus})` : "";
428
+ if (outcome.actual === "open") {
429
+ console.log(
430
+ `${prefix} PASS: stayed open for ${outcome.durationMs}ms${status}`
431
+ );
432
+ } else {
433
+ console.log(
434
+ `${prefix} PASS: closed after ${outcome.durationMs}ms${status}`
435
+ );
436
+ }
437
+ }
438
+ function getKeepAliveEnvConfig() {
439
+ const testEnv = import_v3_dynamic_config.v3DynamicTestConfig.env;
440
+ const apiKey = testEnv === "BROWSERBASE" ? import_v3_dynamic_config.v3DynamicTestConfig.apiKey : void 0;
441
+ const projectId = testEnv === "BROWSERBASE" ? import_v3_dynamic_config.v3DynamicTestConfig.projectId : void 0;
442
+ const hasBrowserbaseCreds = Boolean(apiKey && projectId);
443
+ return { testEnv, apiKey, projectId, hasBrowserbaseCreds };
444
+ }
445
+ function buildKeepAliveCases(testEnv) {
446
+ const scenarios = [
447
+ { kind: "unhandled", label: "unhandled rejection" },
448
+ { kind: "close", label: "stagehand.close()" },
449
+ { kind: "sigterm", label: "SIGTERM" },
450
+ { kind: "sigint", label: "SIGINT" }
451
+ ];
452
+ const environments = testEnv === "BROWSERBASE" ? [
453
+ {
454
+ env: "BROWSERBASE",
455
+ label: "bb direct ws",
456
+ disableAPI: true,
457
+ requiresBrowserbase: true
458
+ },
459
+ {
460
+ env: "BROWSERBASE",
461
+ label: "bb via api",
462
+ disableAPI: false,
463
+ requiresBrowserbase: true
464
+ }
465
+ ] : [
466
+ {
467
+ env: "LOCAL",
468
+ label: "local",
469
+ disableAPI: false,
470
+ requiresBrowserbase: false
471
+ }
472
+ ];
473
+ const cases = [];
474
+ for (const keepAlive of [true, false]) {
475
+ for (const envConfig of environments) {
476
+ for (const scenario of scenarios) {
477
+ const expectation = keepAlive ? "expect open" : "expect closed";
478
+ cases.push({
479
+ title: `${envConfig.label} keepAlive=${keepAlive} ${scenario.label} (${expectation})`,
480
+ env: envConfig.env,
481
+ envLabel: envConfig.label,
482
+ keepAlive,
483
+ disableAPI: envConfig.disableAPI,
484
+ kind: scenario.kind,
485
+ requiresBrowserbase: envConfig.requiresBrowserbase
486
+ });
487
+ }
488
+ }
489
+ }
490
+ return cases;
491
+ }
492
+ async function runKeepAliveCase(testCase, envConfig) {
493
+ let info;
494
+ let child;
495
+ let logs;
496
+ try {
497
+ ({ info, child, logs } = await runScenario({
498
+ env: testCase.env,
499
+ keepAlive: testCase.keepAlive,
500
+ disableAPI: testCase.disableAPI,
501
+ kind: testCase.kind,
502
+ debug: DEBUG,
503
+ viewMs: VIEW_MS,
504
+ apiKey: envConfig.apiKey,
505
+ projectId: envConfig.projectId
506
+ }));
507
+ } catch (error) {
508
+ logCaseResult(
509
+ testCase.title,
510
+ testCase.envLabel,
511
+ testCase.keepAlive,
512
+ void 0,
513
+ error
514
+ );
515
+ throw error;
516
+ }
517
+ if (testCase.kind === "sigterm") {
518
+ child.kill("SIGTERM");
519
+ } else if (testCase.kind === "sigint") {
520
+ child.kill("SIGINT");
521
+ }
522
+ let outcome;
523
+ let failure;
524
+ try {
525
+ if (testCase.kind === "close" || testCase.kind === "unhandled" || testCase.kind === "sigterm" || testCase.kind === "sigint") {
526
+ await waitForChildExit(child, ACTION_EXIT_TIMEOUT_MS);
527
+ }
528
+ outcome = await assertBrowserState(
529
+ testCase.env,
530
+ info,
531
+ testCase.keepAlive,
532
+ envConfig.apiKey,
533
+ envConfig.projectId
534
+ );
535
+ } catch (error) {
536
+ failure = error;
537
+ if (logs) {
538
+ dumpLogs(logs);
539
+ }
540
+ throw error;
541
+ } finally {
542
+ logCaseResult(
543
+ testCase.title,
544
+ testCase.envLabel,
545
+ testCase.keepAlive,
546
+ outcome,
547
+ failure
548
+ );
549
+ await stopChild(child);
550
+ if (testCase.env === "LOCAL" && info.connectURL) {
551
+ await closeLocalBrowser(info.connectURL);
552
+ }
553
+ if (testCase.env === "BROWSERBASE" && info.sessionId) {
554
+ await endBrowserbaseSession(
555
+ info.sessionId,
556
+ envConfig.apiKey,
557
+ envConfig.projectId
558
+ );
559
+ }
560
+ }
561
+ }
562
+ // Annotate the CommonJS export names for ESM import in node:
563
+ 0 && (module.exports = {
564
+ buildKeepAliveCases,
565
+ getKeepAliveEnvConfig,
566
+ runKeepAliveCase
567
+ });
568
+ //# sourceMappingURL=keep-alive.helpers.js.map