@browserbasehq/orca 3.0.9-alpha-4 → 3.1.0-patch.0

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 (655) hide show
  1. package/dist/esm/index.d.ts +3 -0
  2. package/dist/esm/index.js +3 -0
  3. package/dist/esm/lib/inference.d.ts +65 -0
  4. package/dist/esm/lib/inference.js +333 -0
  5. package/dist/esm/lib/inference.js.map +1 -0
  6. package/dist/esm/lib/inferenceLogUtils.d.ts +12 -0
  7. package/dist/esm/lib/inferenceLogUtils.js +92 -0
  8. package/dist/esm/lib/inferenceLogUtils.js.map +1 -0
  9. package/dist/esm/lib/logger.d.ts +69 -0
  10. package/dist/esm/lib/logger.js +323 -0
  11. package/dist/esm/lib/logger.js.map +1 -0
  12. package/dist/esm/lib/modelUtils.d.ts +14 -0
  13. package/dist/esm/lib/modelUtils.js +48 -0
  14. package/dist/esm/lib/modelUtils.js.map +1 -0
  15. package/dist/esm/lib/prompt.d.ts +14 -0
  16. package/dist/esm/lib/prompt.js +230 -0
  17. package/dist/esm/lib/prompt.js.map +1 -0
  18. package/dist/esm/lib/utils.d.ts +68 -0
  19. package/dist/esm/lib/utils.js +654 -0
  20. package/dist/esm/lib/utils.js.map +1 -0
  21. package/dist/esm/lib/v3/agent/AgentClient.d.ts +19 -0
  22. package/dist/esm/lib/v3/agent/AgentClient.js +17 -0
  23. package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -0
  24. package/dist/esm/lib/v3/agent/AgentProvider.d.ts +20 -0
  25. package/dist/esm/lib/v3/agent/AgentProvider.js +77 -0
  26. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -0
  27. package/dist/esm/lib/v3/agent/AnthropicCUAClient.d.ts +57 -0
  28. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +822 -0
  29. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -0
  30. package/dist/esm/lib/v3/agent/GoogleCUAClient.d.ts +74 -0
  31. package/dist/esm/lib/v3/agent/GoogleCUAClient.js +799 -0
  32. package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -0
  33. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.d.ts +71 -0
  34. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +770 -0
  35. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -0
  36. package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +69 -0
  37. package/dist/esm/lib/v3/agent/OpenAICUAClient.js +615 -0
  38. package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -0
  39. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +12 -0
  40. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +186 -0
  41. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -0
  42. package/dist/esm/lib/v3/agent/tools/act.d.ts +13 -0
  43. package/dist/esm/lib/v3/agent/tools/act.js +49 -0
  44. package/dist/esm/lib/v3/agent/tools/act.js.map +1 -0
  45. package/dist/esm/lib/v3/agent/tools/ariaTree.d.ts +5 -0
  46. package/dist/esm/lib/v3/agent/tools/ariaTree.js +31 -0
  47. package/dist/esm/lib/v3/agent/tools/ariaTree.js.map +1 -0
  48. package/dist/esm/lib/v3/agent/tools/click.d.ts +6 -0
  49. package/dist/esm/lib/v3/agent/tools/click.js +104 -0
  50. package/dist/esm/lib/v3/agent/tools/click.js.map +1 -0
  51. package/dist/esm/lib/v3/agent/tools/clickAndHold.d.ts +14 -0
  52. package/dist/esm/lib/v3/agent/tools/clickAndHold.js +68 -0
  53. package/dist/esm/lib/v3/agent/tools/clickAndHold.js.map +1 -0
  54. package/dist/esm/lib/v3/agent/tools/dragAndDrop.d.ts +7 -0
  55. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +105 -0
  56. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -0
  57. package/dist/esm/lib/v3/agent/tools/extract.d.ts +21 -0
  58. package/dist/esm/lib/v3/agent/tools/extract.js +93 -0
  59. package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -0
  60. package/dist/esm/lib/v3/agent/tools/fillFormVision.d.ts +12 -0
  61. package/dist/esm/lib/v3/agent/tools/fillFormVision.js +143 -0
  62. package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -0
  63. package/dist/esm/lib/v3/agent/tools/fillform.d.ts +13 -0
  64. package/dist/esm/lib/v3/agent/tools/fillform.js +56 -0
  65. package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -0
  66. package/dist/esm/lib/v3/agent/tools/goto.d.ts +12 -0
  67. package/dist/esm/lib/v3/agent/tools/goto.js +31 -0
  68. package/dist/esm/lib/v3/agent/tools/goto.js.map +1 -0
  69. package/dist/esm/lib/v3/agent/tools/index.d.ts +92 -0
  70. package/dist/esm/lib/v3/agent/tools/index.js +74 -0
  71. package/dist/esm/lib/v3/agent/tools/index.js.map +1 -0
  72. package/dist/esm/lib/v3/agent/tools/keys.d.ts +24 -0
  73. package/dist/esm/lib/v3/agent/tools/keys.js +60 -0
  74. package/dist/esm/lib/v3/agent/tools/keys.js.map +1 -0
  75. package/dist/esm/lib/v3/agent/tools/navback.d.ts +6 -0
  76. package/dist/esm/lib/v3/agent/tools/navback.js +23 -0
  77. package/dist/esm/lib/v3/agent/tools/navback.js.map +1 -0
  78. package/dist/esm/lib/v3/agent/tools/screenshot.d.ts +6 -0
  79. package/dist/esm/lib/v3/agent/tools/screenshot.js +26 -0
  80. package/dist/esm/lib/v3/agent/tools/screenshot.js.map +1 -0
  81. package/dist/esm/lib/v3/agent/tools/scroll.d.ts +19 -0
  82. package/dist/esm/lib/v3/agent/tools/scroll.js +142 -0
  83. package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -0
  84. package/dist/esm/lib/v3/agent/tools/search.d.ts +15 -0
  85. package/dist/esm/lib/v3/agent/tools/search.js +73 -0
  86. package/dist/esm/lib/v3/agent/tools/search.js.map +1 -0
  87. package/dist/esm/lib/v3/agent/tools/think.d.ts +6 -0
  88. package/dist/esm/lib/v3/agent/tools/think.js +24 -0
  89. package/dist/esm/lib/v3/agent/tools/think.js.map +1 -0
  90. package/dist/esm/lib/v3/agent/tools/type.d.ts +7 -0
  91. package/dist/esm/lib/v3/agent/tools/type.js +106 -0
  92. package/dist/esm/lib/v3/agent/tools/type.js.map +1 -0
  93. package/dist/esm/lib/v3/agent/tools/wait.d.ts +5 -0
  94. package/dist/esm/lib/v3/agent/tools/wait.js +53 -0
  95. package/dist/esm/lib/v3/agent/tools/wait.js.map +1 -0
  96. package/dist/esm/lib/v3/agent/utils/actionMapping.d.ts +3 -0
  97. package/dist/esm/lib/v3/agent/utils/actionMapping.js +100 -0
  98. package/dist/esm/lib/v3/agent/utils/actionMapping.js.map +1 -0
  99. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.d.ts +13 -0
  100. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js +28 -0
  101. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js.map +1 -0
  102. package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.d.ts +10 -0
  103. package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.js +62 -0
  104. package/dist/esm/lib/v3/agent/utils/cuaKeyMapping.js.map +1 -0
  105. package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.d.ts +25 -0
  106. package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.js +145 -0
  107. package/dist/esm/lib/v3/agent/utils/googleCustomToolHandler.js.map +1 -0
  108. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.d.ts +22 -0
  109. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +101 -0
  110. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -0
  111. package/dist/esm/lib/v3/agent/utils/imageCompression.d.ts +53 -0
  112. package/dist/esm/lib/v3/agent/utils/imageCompression.js +204 -0
  113. package/dist/esm/lib/v3/agent/utils/imageCompression.js.map +1 -0
  114. package/dist/esm/lib/v3/agent/utils/messageProcessing.d.ts +12 -0
  115. package/dist/esm/lib/v3/agent/utils/messageProcessing.js +164 -0
  116. package/dist/esm/lib/v3/agent/utils/messageProcessing.js.map +1 -0
  117. package/dist/esm/lib/v3/agent/utils/screenshotHandler.d.ts +10 -0
  118. package/dist/esm/lib/v3/agent/utils/screenshotHandler.js +26 -0
  119. package/dist/esm/lib/v3/agent/utils/screenshotHandler.js.map +1 -0
  120. package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.d.ts +26 -0
  121. package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js +79 -0
  122. package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js.map +1 -0
  123. package/dist/esm/lib/v3/agent/utils/xpath.d.ts +11 -0
  124. package/dist/esm/lib/v3/agent/utils/xpath.js +19 -0
  125. package/dist/esm/lib/v3/agent/utils/xpath.js.map +1 -0
  126. package/dist/esm/lib/v3/api.d.ts +86 -0
  127. package/dist/esm/lib/v3/api.js +484 -0
  128. package/dist/esm/lib/v3/api.js.map +1 -0
  129. package/dist/esm/lib/v3/cache/ActCache.d.ts +23 -0
  130. package/dist/esm/lib/v3/cache/ActCache.js +292 -0
  131. package/dist/esm/lib/v3/cache/ActCache.js.map +1 -0
  132. package/dist/esm/lib/v3/cache/AgentCache.d.ts +109 -0
  133. package/dist/esm/lib/v3/cache/AgentCache.js +640 -0
  134. package/dist/esm/lib/v3/cache/AgentCache.js.map +1 -0
  135. package/dist/esm/lib/v3/cache/CacheStorage.d.ts +17 -0
  136. package/dist/esm/lib/v3/cache/CacheStorage.js +98 -0
  137. package/dist/esm/lib/v3/cache/CacheStorage.js.map +1 -0
  138. package/dist/esm/lib/v3/cache/serverAgentCache.d.ts +7 -0
  139. package/dist/esm/lib/v3/cache/serverAgentCache.js +49 -0
  140. package/dist/esm/lib/v3/cache/serverAgentCache.js.map +1 -0
  141. package/dist/esm/lib/v3/cache/utils.d.ts +15 -0
  142. package/dist/esm/lib/v3/cache/utils.js +39 -0
  143. package/dist/esm/lib/v3/cache/utils.js.map +1 -0
  144. package/dist/esm/lib/v3/dom/a11yScripts/index.d.ts +11 -0
  145. package/dist/esm/lib/v3/dom/a11yScripts/index.js +117 -0
  146. package/dist/esm/lib/v3/dom/a11yScripts/index.js.map +1 -0
  147. package/dist/esm/lib/v3/dom/build/a11yScripts.generated.d.ts +16 -0
  148. package/dist/esm/lib/v3/dom/build/a11yScripts.generated.js +20 -0
  149. package/dist/esm/lib/v3/dom/build/a11yScripts.generated.js.map +1 -0
  150. package/dist/esm/lib/v3/dom/build/locatorScripts.generated.d.ts +52 -0
  151. package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js +56 -0
  152. package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js.map +1 -0
  153. package/dist/esm/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -0
  154. package/dist/esm/lib/v3/dom/build/reRenderScriptContent.js +2 -0
  155. package/dist/esm/lib/v3/dom/build/reRenderScriptContent.js.map +1 -0
  156. package/dist/esm/lib/v3/dom/build/rerender-index.js +1 -0
  157. package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.d.ts +4 -0
  158. package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.js +8 -0
  159. package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.js.map +1 -0
  160. package/dist/esm/lib/v3/dom/build/scriptV3Content.d.ts +1 -0
  161. package/dist/esm/lib/v3/dom/build/scriptV3Content.js +2 -0
  162. package/dist/esm/lib/v3/dom/build/scriptV3Content.js.map +1 -0
  163. package/dist/esm/lib/v3/dom/build/v3-index.js +1 -0
  164. package/dist/esm/lib/v3/dom/genA11yScripts.d.ts +1 -0
  165. package/dist/esm/lib/v3/dom/genA11yScripts.js +54 -0
  166. package/dist/esm/lib/v3/dom/genA11yScripts.js.map +1 -0
  167. package/dist/esm/lib/v3/dom/genDomScripts.d.ts +1 -0
  168. package/dist/esm/lib/v3/dom/genDomScripts.js +38 -0
  169. package/dist/esm/lib/v3/dom/genDomScripts.js.map +1 -0
  170. package/dist/esm/lib/v3/dom/genLocatorScripts.d.ts +1 -0
  171. package/dist/esm/lib/v3/dom/genLocatorScripts.js +51 -0
  172. package/dist/esm/lib/v3/dom/genLocatorScripts.js.map +1 -0
  173. package/dist/esm/lib/v3/dom/genScreenshotScripts.d.ts +1 -0
  174. package/dist/esm/lib/v3/dom/genScreenshotScripts.js +37 -0
  175. package/dist/esm/lib/v3/dom/genScreenshotScripts.js.map +1 -0
  176. package/dist/esm/lib/v3/dom/index.d.ts +1 -0
  177. package/dist/esm/lib/v3/dom/index.js +2 -0
  178. package/dist/esm/lib/v3/dom/index.js.map +1 -0
  179. package/dist/esm/lib/v3/dom/locatorScripts/counts.d.ts +15 -0
  180. package/dist/esm/lib/v3/dom/locatorScripts/counts.js +272 -0
  181. package/dist/esm/lib/v3/dom/locatorScripts/counts.js.map +1 -0
  182. package/dist/esm/lib/v3/dom/locatorScripts/index.d.ts +4 -0
  183. package/dist/esm/lib/v3/dom/locatorScripts/index.js +5 -0
  184. package/dist/esm/lib/v3/dom/locatorScripts/index.js.map +1 -0
  185. package/dist/esm/lib/v3/dom/locatorScripts/scripts.d.ts +37 -0
  186. package/dist/esm/lib/v3/dom/locatorScripts/scripts.js +458 -0
  187. package/dist/esm/lib/v3/dom/locatorScripts/scripts.js.map +1 -0
  188. package/dist/esm/lib/v3/dom/locatorScripts/selectors.d.ts +4 -0
  189. package/dist/esm/lib/v3/dom/locatorScripts/selectors.js +283 -0
  190. package/dist/esm/lib/v3/dom/locatorScripts/selectors.js.map +1 -0
  191. package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.d.ts +19 -0
  192. package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.js +283 -0
  193. package/dist/esm/lib/v3/dom/locatorScripts/waitForSelector.js.map +1 -0
  194. package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.d.ts +76 -0
  195. package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.js +376 -0
  196. package/dist/esm/lib/v3/dom/locatorScripts/xpathParser.js.map +1 -0
  197. package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.d.ts +9 -0
  198. package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js +196 -0
  199. package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js.map +1 -0
  200. package/dist/esm/lib/v3/dom/piercer.entry.d.ts +1 -0
  201. package/dist/esm/lib/v3/dom/piercer.entry.js +3 -0
  202. package/dist/esm/lib/v3/dom/piercer.entry.js.map +1 -0
  203. package/dist/esm/lib/v3/dom/piercer.runtime.d.ts +23 -0
  204. package/dist/esm/lib/v3/dom/piercer.runtime.js +90 -0
  205. package/dist/esm/lib/v3/dom/piercer.runtime.js.map +1 -0
  206. package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.d.ts +1 -0
  207. package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.js +3 -0
  208. package/dist/esm/lib/v3/dom/rerenderMissingShadows.entry.js.map +1 -0
  209. package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.d.ts +1 -0
  210. package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.js +40 -0
  211. package/dist/esm/lib/v3/dom/rerenderMissingShadows.runtime.js.map +1 -0
  212. package/dist/esm/lib/v3/dom/screenshotScripts/index.d.ts +1 -0
  213. package/dist/esm/lib/v3/dom/screenshotScripts/index.js +2 -0
  214. package/dist/esm/lib/v3/dom/screenshotScripts/index.js.map +1 -0
  215. package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.d.ts +8 -0
  216. package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.js +82 -0
  217. package/dist/esm/lib/v3/dom/screenshotScripts/resolveMaskRect.js.map +1 -0
  218. package/dist/esm/lib/v3/external_clients/aisdk.d.ts +11 -0
  219. package/dist/esm/lib/v3/external_clients/aisdk.js +103 -0
  220. package/dist/esm/lib/v3/external_clients/aisdk.js.map +1 -0
  221. package/dist/esm/lib/v3/external_clients/customOpenAI.d.ts +18 -0
  222. package/dist/esm/lib/v3/external_clients/customOpenAI.js +220 -0
  223. package/dist/esm/lib/v3/external_clients/customOpenAI.js.map +1 -0
  224. package/dist/esm/lib/v3/flowLogger.d.ts +139 -0
  225. package/dist/esm/lib/v3/flowLogger.js +868 -0
  226. package/dist/esm/lib/v3/flowLogger.js.map +1 -0
  227. package/dist/esm/lib/v3/handlers/actHandler.d.ts +21 -0
  228. package/dist/esm/lib/v3/handlers/actHandler.js +340 -0
  229. package/dist/esm/lib/v3/handlers/actHandler.js.map +1 -0
  230. package/dist/esm/lib/v3/handlers/extractHandler.d.ts +31 -0
  231. package/dist/esm/lib/v3/handlers/extractHandler.js +139 -0
  232. package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -0
  233. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +24 -0
  234. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +623 -0
  235. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -0
  236. package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.d.ts +2 -0
  237. package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.js +14 -0
  238. package/dist/esm/lib/v3/handlers/handlerUtils/timeoutGuard.js.map +1 -0
  239. package/dist/esm/lib/v3/handlers/observeHandler.d.ts +17 -0
  240. package/dist/esm/lib/v3/handlers/observeHandler.js +156 -0
  241. package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -0
  242. package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +32 -0
  243. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +461 -0
  244. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -0
  245. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +33 -0
  246. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +528 -0
  247. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -0
  248. package/dist/esm/lib/v3/index.d.ts +17 -0
  249. package/dist/esm/lib/v3/index.js +13 -0
  250. package/dist/esm/lib/v3/index.js.map +1 -0
  251. package/dist/esm/lib/v3/launch/browserbase.d.ts +7 -0
  252. package/dist/esm/lib/v3/launch/browserbase.js +46 -0
  253. package/dist/esm/lib/v3/launch/browserbase.js.map +1 -0
  254. package/dist/esm/lib/v3/launch/local.d.ts +15 -0
  255. package/dist/esm/lib/v3/launch/local.js +98 -0
  256. package/dist/esm/lib/v3/launch/local.js.map +1 -0
  257. package/dist/esm/lib/v3/llm/AnthropicClient.d.ts +16 -0
  258. package/dist/esm/lib/v3/llm/AnthropicClient.js +239 -0
  259. package/dist/esm/lib/v3/llm/AnthropicClient.js.map +1 -0
  260. package/dist/esm/lib/v3/llm/CerebrasClient.d.ts +17 -0
  261. package/dist/esm/lib/v3/llm/CerebrasClient.js +235 -0
  262. package/dist/esm/lib/v3/llm/CerebrasClient.js.map +1 -0
  263. package/dist/esm/lib/v3/llm/GoogleClient.d.ts +19 -0
  264. package/dist/esm/lib/v3/llm/GoogleClient.js +369 -0
  265. package/dist/esm/lib/v3/llm/GoogleClient.js.map +1 -0
  266. package/dist/esm/lib/v3/llm/GroqClient.d.ts +17 -0
  267. package/dist/esm/lib/v3/llm/GroqClient.js +236 -0
  268. package/dist/esm/lib/v3/llm/GroqClient.js.map +1 -0
  269. package/dist/esm/lib/v3/llm/LLMClient.d.ts +121 -0
  270. package/dist/esm/lib/v3/llm/LLMClient.js +23 -0
  271. package/dist/esm/lib/v3/llm/LLMClient.js.map +1 -0
  272. package/dist/esm/lib/v3/llm/LLMProvider.d.ts +13 -0
  273. package/dist/esm/lib/v3/llm/LLMProvider.js +194 -0
  274. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -0
  275. package/dist/esm/lib/v3/llm/OpenAIClient.d.ts +15 -0
  276. package/dist/esm/lib/v3/llm/OpenAIClient.js +329 -0
  277. package/dist/esm/lib/v3/llm/OpenAIClient.js.map +1 -0
  278. package/dist/esm/lib/v3/llm/aisdk.d.ts +15 -0
  279. package/dist/esm/lib/v3/llm/aisdk.js +348 -0
  280. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -0
  281. package/dist/esm/lib/v3/logger.d.ts +9 -0
  282. package/dist/esm/lib/v3/logger.js +96 -0
  283. package/dist/esm/lib/v3/logger.js.map +1 -0
  284. package/dist/esm/lib/v3/mcp/connection.d.ts +11 -0
  285. package/dist/esm/lib/v3/mcp/connection.js +49 -0
  286. package/dist/esm/lib/v3/mcp/connection.js.map +1 -0
  287. package/dist/esm/lib/v3/mcp/utils.d.ts +3 -0
  288. package/dist/esm/lib/v3/mcp/utils.js +36 -0
  289. package/dist/esm/lib/v3/mcp/utils.js.map +1 -0
  290. package/dist/esm/lib/v3/shutdown/cleanupLocal.d.ts +14 -0
  291. package/dist/esm/lib/v3/shutdown/cleanupLocal.js +30 -0
  292. package/dist/esm/lib/v3/shutdown/cleanupLocal.js.map +1 -0
  293. package/dist/esm/lib/v3/shutdown/supervisor.d.ts +9 -0
  294. package/dist/esm/lib/v3/shutdown/supervisor.js +156 -0
  295. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -0
  296. package/dist/esm/lib/v3/shutdown/supervisorClient.d.ts +15 -0
  297. package/dist/esm/lib/v3/shutdown/supervisorClient.js +97 -0
  298. package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -0
  299. package/dist/esm/lib/v3/tests/agent-abort-signal.spec.js +113 -0
  300. package/dist/esm/lib/v3/tests/agent-abort-signal.spec.js.map +7 -0
  301. package/dist/esm/lib/v3/tests/agent-cache-self-heal.spec.js +80 -0
  302. package/dist/esm/lib/v3/tests/agent-cache-self-heal.spec.js.map +7 -0
  303. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js +374 -0
  304. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js.map +7 -0
  305. package/dist/esm/lib/v3/tests/agent-experimental-validation.spec.js +357 -0
  306. package/dist/esm/lib/v3/tests/agent-experimental-validation.spec.js.map +7 -0
  307. package/dist/esm/lib/v3/tests/agent-hybrid-mode.spec.js +247 -0
  308. package/dist/esm/lib/v3/tests/agent-hybrid-mode.spec.js.map +7 -0
  309. package/dist/esm/lib/v3/tests/agent-message-continuation.spec.js +105 -0
  310. package/dist/esm/lib/v3/tests/agent-message-continuation.spec.js.map +7 -0
  311. package/dist/esm/lib/v3/tests/agent-streaming.spec.js +126 -0
  312. package/dist/esm/lib/v3/tests/agent-streaming.spec.js.map +7 -0
  313. package/dist/esm/lib/v3/tests/cdp-session-detached.spec.js +44 -0
  314. package/dist/esm/lib/v3/tests/cdp-session-detached.spec.js.map +7 -0
  315. package/dist/esm/lib/v3/tests/click-count.spec.js +112 -0
  316. package/dist/esm/lib/v3/tests/click-count.spec.js.map +7 -0
  317. package/dist/esm/lib/v3/tests/connect-to-existing-browser.spec.js +54 -0
  318. package/dist/esm/lib/v3/tests/connect-to-existing-browser.spec.js.map +7 -0
  319. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js +176 -0
  320. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js.map +7 -0
  321. package/dist/esm/lib/v3/tests/default-page-tracking.spec.js +53 -0
  322. package/dist/esm/lib/v3/tests/default-page-tracking.spec.js.map +7 -0
  323. package/dist/esm/lib/v3/tests/downloads.spec.js +58 -0
  324. package/dist/esm/lib/v3/tests/downloads.spec.js.map +7 -0
  325. package/dist/esm/lib/v3/tests/envReporter.js +57 -0
  326. package/dist/esm/lib/v3/tests/envReporter.js.map +7 -0
  327. package/dist/esm/lib/v3/tests/frame-get-location-and-click.spec.js +53 -0
  328. package/dist/esm/lib/v3/tests/frame-get-location-and-click.spec.js.map +7 -0
  329. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +447 -0
  330. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +7 -0
  331. package/dist/esm/lib/v3/tests/keep-alive.child.js +92 -0
  332. package/dist/esm/lib/v3/tests/keep-alive.child.js.map +7 -0
  333. package/dist/esm/lib/v3/tests/keep-alive.helpers.js +532 -0
  334. package/dist/esm/lib/v3/tests/keep-alive.helpers.js.map +7 -0
  335. package/dist/esm/lib/v3/tests/keep-alive.spec.js +19 -0
  336. package/dist/esm/lib/v3/tests/keep-alive.spec.js.map +7 -0
  337. package/dist/esm/lib/v3/tests/keyboard.spec.js +296 -0
  338. package/dist/esm/lib/v3/tests/keyboard.spec.js.map +7 -0
  339. package/dist/esm/lib/v3/tests/locator-backend-node-id.spec.js +159 -0
  340. package/dist/esm/lib/v3/tests/locator-backend-node-id.spec.js.map +7 -0
  341. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js +191 -0
  342. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js.map +7 -0
  343. package/dist/esm/lib/v3/tests/locator-count-iframe.spec.js +108 -0
  344. package/dist/esm/lib/v3/tests/locator-count-iframe.spec.js.map +7 -0
  345. package/dist/esm/lib/v3/tests/locator-count.spec.js +71 -0
  346. package/dist/esm/lib/v3/tests/locator-count.spec.js.map +7 -0
  347. package/dist/esm/lib/v3/tests/locator-fill.spec.js +118 -0
  348. package/dist/esm/lib/v3/tests/locator-fill.spec.js.map +7 -0
  349. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js +136 -0
  350. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js.map +7 -0
  351. package/dist/esm/lib/v3/tests/locator-nth.spec.js +157 -0
  352. package/dist/esm/lib/v3/tests/locator-nth.spec.js.map +7 -0
  353. package/dist/esm/lib/v3/tests/locator-select-option.spec.js +242 -0
  354. package/dist/esm/lib/v3/tests/locator-select-option.spec.js.map +7 -0
  355. package/dist/esm/lib/v3/tests/logger-initialization.spec.js +552 -0
  356. package/dist/esm/lib/v3/tests/logger-initialization.spec.js.map +7 -0
  357. package/dist/esm/lib/v3/tests/multi-instance-logger.spec.js +269 -0
  358. package/dist/esm/lib/v3/tests/multi-instance-logger.spec.js.map +7 -0
  359. package/dist/esm/lib/v3/tests/nested-div.spec.js +23 -0
  360. package/dist/esm/lib/v3/tests/nested-div.spec.js.map +7 -0
  361. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js +90 -0
  362. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js.map +7 -0
  363. package/dist/esm/lib/v3/tests/page-console.spec.js +56 -0
  364. package/dist/esm/lib/v3/tests/page-console.spec.js.map +7 -0
  365. package/dist/esm/lib/v3/tests/page-drag-and-drop.spec.js +418 -0
  366. package/dist/esm/lib/v3/tests/page-drag-and-drop.spec.js.map +7 -0
  367. package/dist/esm/lib/v3/tests/page-goto-response.spec.js +35 -0
  368. package/dist/esm/lib/v3/tests/page-goto-response.spec.js.map +7 -0
  369. package/dist/esm/lib/v3/tests/page-hover.spec.js +167 -0
  370. package/dist/esm/lib/v3/tests/page-hover.spec.js.map +7 -0
  371. package/dist/esm/lib/v3/tests/page-screenshot.spec.js +273 -0
  372. package/dist/esm/lib/v3/tests/page-screenshot.spec.js.map +7 -0
  373. package/dist/esm/lib/v3/tests/page-scroll.spec.js +182 -0
  374. package/dist/esm/lib/v3/tests/page-scroll.spec.js.map +7 -0
  375. package/dist/esm/lib/v3/tests/page-send-cdp.spec.js +46 -0
  376. package/dist/esm/lib/v3/tests/page-send-cdp.spec.js.map +7 -0
  377. package/dist/esm/lib/v3/tests/perform-understudy-method.spec.js +98 -0
  378. package/dist/esm/lib/v3/tests/perform-understudy-method.spec.js.map +7 -0
  379. package/dist/esm/lib/v3/tests/setinputfiles.spec.js +126 -0
  380. package/dist/esm/lib/v3/tests/setinputfiles.spec.js.map +7 -0
  381. package/dist/esm/lib/v3/tests/shadow-iframe-oopif.spec.js +134 -0
  382. package/dist/esm/lib/v3/tests/shadow-iframe-oopif.spec.js.map +7 -0
  383. package/dist/esm/lib/v3/tests/shadow-iframe-spif.spec.js +134 -0
  384. package/dist/esm/lib/v3/tests/shadow-iframe-spif.spec.js.map +7 -0
  385. package/dist/esm/lib/v3/tests/testUtils.js +31 -0
  386. package/dist/esm/lib/v3/tests/testUtils.js.map +7 -0
  387. package/dist/esm/lib/v3/tests/text-selector-innermost.spec.js +100 -0
  388. package/dist/esm/lib/v3/tests/text-selector-innermost.spec.js.map +7 -0
  389. package/dist/esm/lib/v3/tests/timeouts.spec.js +32 -0
  390. package/dist/esm/lib/v3/tests/timeouts.spec.js.map +7 -0
  391. package/dist/esm/lib/v3/tests/user-data-dir.spec.js +43 -0
  392. package/dist/esm/lib/v3/tests/user-data-dir.spec.js.map +7 -0
  393. package/dist/esm/lib/v3/tests/v3.config.js +15 -0
  394. package/dist/esm/lib/v3/tests/v3.config.js.map +7 -0
  395. package/dist/esm/lib/v3/tests/v3.dynamic.config.js +43 -0
  396. package/dist/esm/lib/v3/tests/v3.dynamic.config.js.map +7 -0
  397. package/dist/esm/lib/v3/tests/v3.playwright.config.js +98 -0
  398. package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +7 -0
  399. package/dist/esm/lib/v3/tests/wait-for-selector.spec.js +593 -0
  400. package/dist/esm/lib/v3/tests/wait-for-selector.spec.js.map +7 -0
  401. package/dist/esm/lib/v3/tests/wait-for-timeout.spec.js +97 -0
  402. package/dist/esm/lib/v3/tests/wait-for-timeout.spec.js.map +7 -0
  403. package/dist/esm/lib/v3/tests/xpath-for-location-deep.spec.js +77 -0
  404. package/dist/esm/lib/v3/tests/xpath-for-location-deep.spec.js.map +7 -0
  405. package/dist/esm/lib/v3/timeoutConfig.d.ts +2 -0
  406. package/dist/esm/lib/v3/timeoutConfig.js +27 -0
  407. package/dist/esm/lib/v3/timeoutConfig.js.map +1 -0
  408. package/dist/esm/lib/v3/types/private/agent.d.ts +6 -0
  409. package/dist/esm/lib/v3/types/private/agent.js +2 -0
  410. package/dist/esm/lib/v3/types/private/agent.js.map +1 -0
  411. package/dist/esm/lib/v3/types/private/api.d.ts +11 -0
  412. package/dist/esm/lib/v3/types/private/api.js +2 -0
  413. package/dist/esm/lib/v3/types/private/api.js.map +1 -0
  414. package/dist/esm/lib/v3/types/private/cache.d.ts +128 -0
  415. package/dist/esm/lib/v3/types/private/cache.js +2 -0
  416. package/dist/esm/lib/v3/types/private/cache.js.map +1 -0
  417. package/dist/esm/lib/v3/types/private/evaluator.d.ts +40 -0
  418. package/dist/esm/lib/v3/types/private/evaluator.js +2 -0
  419. package/dist/esm/lib/v3/types/private/evaluator.js.map +1 -0
  420. package/dist/esm/lib/v3/types/private/handlers.d.ts +38 -0
  421. package/dist/esm/lib/v3/types/private/handlers.js +16 -0
  422. package/dist/esm/lib/v3/types/private/handlers.js.map +1 -0
  423. package/dist/esm/lib/v3/types/private/index.d.ts +7 -0
  424. package/dist/esm/lib/v3/types/private/index.js +8 -0
  425. package/dist/esm/lib/v3/types/private/index.js.map +1 -0
  426. package/dist/esm/lib/v3/types/private/internal.d.ts +39 -0
  427. package/dist/esm/lib/v3/types/private/internal.js +2 -0
  428. package/dist/esm/lib/v3/types/private/internal.js.map +1 -0
  429. package/dist/esm/lib/v3/types/private/locator.d.ts +9 -0
  430. package/dist/esm/lib/v3/types/private/locator.js +2 -0
  431. package/dist/esm/lib/v3/types/private/locator.js.map +1 -0
  432. package/dist/esm/lib/v3/types/private/network.d.ts +34 -0
  433. package/dist/esm/lib/v3/types/private/network.js +3 -0
  434. package/dist/esm/lib/v3/types/private/network.js.map +1 -0
  435. package/dist/esm/lib/v3/types/private/shutdown.d.ts +31 -0
  436. package/dist/esm/lib/v3/types/private/shutdown.js +5 -0
  437. package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -0
  438. package/dist/esm/lib/v3/types/private/shutdownErrors.d.ts +12 -0
  439. package/dist/esm/lib/v3/types/private/shutdownErrors.js +22 -0
  440. package/dist/esm/lib/v3/types/private/shutdownErrors.js.map +1 -0
  441. package/dist/esm/lib/v3/types/private/snapshot.d.ts +117 -0
  442. package/dist/esm/lib/v3/types/private/snapshot.js +2 -0
  443. package/dist/esm/lib/v3/types/private/snapshot.js.map +1 -0
  444. package/dist/esm/lib/v3/types/public/agent.d.ts +595 -0
  445. package/dist/esm/lib/v3/types/public/agent.js +15 -0
  446. package/dist/esm/lib/v3/types/public/agent.js.map +1 -0
  447. package/dist/esm/lib/v3/types/public/api.d.ts +1211 -0
  448. package/dist/esm/lib/v3/types/public/api.js +915 -0
  449. package/dist/esm/lib/v3/types/public/api.js.map +1 -0
  450. package/dist/esm/lib/v3/types/public/apiErrors.d.ts +18 -0
  451. package/dist/esm/lib/v3/types/public/apiErrors.js +32 -0
  452. package/dist/esm/lib/v3/types/public/apiErrors.js.map +1 -0
  453. package/dist/esm/lib/v3/types/public/index.d.ts +12 -0
  454. package/dist/esm/lib/v3/types/public/index.js +14 -0
  455. package/dist/esm/lib/v3/types/public/index.js.map +1 -0
  456. package/dist/esm/lib/v3/types/public/locator.d.ts +9 -0
  457. package/dist/esm/lib/v3/types/public/locator.js +2 -0
  458. package/dist/esm/lib/v3/types/public/locator.js.map +1 -0
  459. package/dist/esm/lib/v3/types/public/logs.d.ts +23 -0
  460. package/dist/esm/lib/v3/types/public/logs.js +13 -0
  461. package/dist/esm/lib/v3/types/public/logs.js.map +1 -0
  462. package/dist/esm/lib/v3/types/public/methods.d.ts +56 -0
  463. package/dist/esm/lib/v3/types/public/methods.js +15 -0
  464. package/dist/esm/lib/v3/types/public/methods.js.map +1 -0
  465. package/dist/esm/lib/v3/types/public/metrics.d.ts +27 -0
  466. package/dist/esm/lib/v3/types/public/metrics.js +2 -0
  467. package/dist/esm/lib/v3/types/public/metrics.js.map +1 -0
  468. package/dist/esm/lib/v3/types/public/model.d.ts +65 -0
  469. package/dist/esm/lib/v3/types/public/model.js +2 -0
  470. package/dist/esm/lib/v3/types/public/model.js.map +1 -0
  471. package/dist/esm/lib/v3/types/public/options.d.ts +70 -0
  472. package/dist/esm/lib/v3/types/public/options.js +4 -0
  473. package/dist/esm/lib/v3/types/public/options.js.map +1 -0
  474. package/dist/esm/lib/v3/types/public/page.d.ts +18 -0
  475. package/dist/esm/lib/v3/types/public/page.js +3 -0
  476. package/dist/esm/lib/v3/types/public/page.js.map +1 -0
  477. package/dist/esm/lib/v3/types/public/screenshotTypes.d.ts +25 -0
  478. package/dist/esm/lib/v3/types/public/screenshotTypes.js +2 -0
  479. package/dist/esm/lib/v3/types/public/screenshotTypes.js.map +1 -0
  480. package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +152 -0
  481. package/dist/esm/lib/v3/types/public/sdkErrors.js +305 -0
  482. package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -0
  483. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.d.ts +15 -0
  484. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js +196 -0
  485. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js.map +1 -0
  486. package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.d.ts +8 -0
  487. package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.js +121 -0
  488. package/dist/esm/lib/v3/understudy/a11y/snapshot/activeElement.js.map +1 -0
  489. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.d.ts +77 -0
  490. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js +336 -0
  491. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -0
  492. package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.d.ts +7 -0
  493. package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js +129 -0
  494. package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js.map +1 -0
  495. package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.d.ts +46 -0
  496. package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.js +274 -0
  497. package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.js.map +1 -0
  498. package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.d.ts +24 -0
  499. package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.js +216 -0
  500. package/dist/esm/lib/v3/understudy/a11y/snapshot/focusSelectors.js.map +1 -0
  501. package/dist/esm/lib/v3/understudy/a11y/snapshot/index.d.ts +4 -0
  502. package/dist/esm/lib/v3/understudy/a11y/snapshot/index.js +5 -0
  503. package/dist/esm/lib/v3/understudy/a11y/snapshot/index.js.map +1 -0
  504. package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.d.ts +16 -0
  505. package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.js +22 -0
  506. package/dist/esm/lib/v3/understudy/a11y/snapshot/sessions.js.map +1 -0
  507. package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.d.ts +28 -0
  508. package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js +135 -0
  509. package/dist/esm/lib/v3/understudy/a11y/snapshot/treeFormatUtils.js.map +1 -0
  510. package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.d.ts +26 -0
  511. package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.js +102 -0
  512. package/dist/esm/lib/v3/understudy/a11y/snapshot/xpathUtils.js.map +1 -0
  513. package/dist/esm/lib/v3/understudy/a11yInvocation.d.ts +8 -0
  514. package/dist/esm/lib/v3/understudy/a11yInvocation.js +12 -0
  515. package/dist/esm/lib/v3/understudy/a11yInvocation.js.map +1 -0
  516. package/dist/esm/lib/v3/understudy/cdp.d.ts +69 -0
  517. package/dist/esm/lib/v3/understudy/cdp.js +251 -0
  518. package/dist/esm/lib/v3/understudy/cdp.js.map +1 -0
  519. package/dist/esm/lib/v3/understudy/consoleMessage.d.ts +22 -0
  520. package/dist/esm/lib/v3/understudy/consoleMessage.js +66 -0
  521. package/dist/esm/lib/v3/understudy/consoleMessage.js.map +1 -0
  522. package/dist/esm/lib/v3/understudy/context.d.ts +132 -0
  523. package/dist/esm/lib/v3/understudy/context.js +687 -0
  524. package/dist/esm/lib/v3/understudy/context.js.map +1 -0
  525. package/dist/esm/lib/v3/understudy/deepLocator.d.ts +87 -0
  526. package/dist/esm/lib/v3/understudy/deepLocator.js +218 -0
  527. package/dist/esm/lib/v3/understudy/deepLocator.js.map +1 -0
  528. package/dist/esm/lib/v3/understudy/executionContextRegistry.d.ts +15 -0
  529. package/dist/esm/lib/v3/understudy/executionContextRegistry.js +83 -0
  530. package/dist/esm/lib/v3/understudy/executionContextRegistry.js.map +1 -0
  531. package/dist/esm/lib/v3/understudy/fileUploadUtils.d.ts +13 -0
  532. package/dist/esm/lib/v3/understudy/fileUploadUtils.js +81 -0
  533. package/dist/esm/lib/v3/understudy/fileUploadUtils.js.map +1 -0
  534. package/dist/esm/lib/v3/understudy/frame.d.ts +69 -0
  535. package/dist/esm/lib/v3/understudy/frame.js +211 -0
  536. package/dist/esm/lib/v3/understudy/frame.js.map +1 -0
  537. package/dist/esm/lib/v3/understudy/frameLocator.d.ts +50 -0
  538. package/dist/esm/lib/v3/understudy/frameLocator.js +255 -0
  539. package/dist/esm/lib/v3/understudy/frameLocator.js.map +1 -0
  540. package/dist/esm/lib/v3/understudy/frameRegistry.d.ts +101 -0
  541. package/dist/esm/lib/v3/understudy/frameRegistry.js +298 -0
  542. package/dist/esm/lib/v3/understudy/frameRegistry.js.map +1 -0
  543. package/dist/esm/lib/v3/understudy/initScripts.d.ts +2 -0
  544. package/dist/esm/lib/v3/understudy/initScripts.js +33 -0
  545. package/dist/esm/lib/v3/understudy/initScripts.js.map +1 -0
  546. package/dist/esm/lib/v3/understudy/lifecycleWatcher.d.ts +64 -0
  547. package/dist/esm/lib/v3/understudy/lifecycleWatcher.js +245 -0
  548. package/dist/esm/lib/v3/understudy/lifecycleWatcher.js.map +1 -0
  549. package/dist/esm/lib/v3/understudy/locator.d.ts +194 -0
  550. package/dist/esm/lib/v3/understudy/locator.js +753 -0
  551. package/dist/esm/lib/v3/understudy/locator.js.map +1 -0
  552. package/dist/esm/lib/v3/understudy/locatorInvocation.d.ts +8 -0
  553. package/dist/esm/lib/v3/understudy/locatorInvocation.js +12 -0
  554. package/dist/esm/lib/v3/understudy/locatorInvocation.js.map +1 -0
  555. package/dist/esm/lib/v3/understudy/navigationResponseTracker.d.ts +84 -0
  556. package/dist/esm/lib/v3/understudy/navigationResponseTracker.js +224 -0
  557. package/dist/esm/lib/v3/understudy/navigationResponseTracker.js.map +1 -0
  558. package/dist/esm/lib/v3/understudy/networkManager.d.ts +53 -0
  559. package/dist/esm/lib/v3/understudy/networkManager.js +306 -0
  560. package/dist/esm/lib/v3/understudy/networkManager.js.map +1 -0
  561. package/dist/esm/lib/v3/understudy/page.d.ts +354 -0
  562. package/dist/esm/lib/v3/understudy/page.js +1941 -0
  563. package/dist/esm/lib/v3/understudy/page.js.map +1 -0
  564. package/dist/esm/lib/v3/understudy/piercer.d.ts +4 -0
  565. package/dist/esm/lib/v3/understudy/piercer.js +61 -0
  566. package/dist/esm/lib/v3/understudy/piercer.js.map +1 -0
  567. package/dist/esm/lib/v3/understudy/response.d.ts +137 -0
  568. package/dist/esm/lib/v3/understudy/response.js +330 -0
  569. package/dist/esm/lib/v3/understudy/response.js.map +1 -0
  570. package/dist/esm/lib/v3/understudy/screenshotUtils.d.ts +16 -0
  571. package/dist/esm/lib/v3/understudy/screenshotUtils.js +352 -0
  572. package/dist/esm/lib/v3/understudy/screenshotUtils.js.map +1 -0
  573. package/dist/esm/lib/v3/understudy/selectorResolver.d.ts +38 -0
  574. package/dist/esm/lib/v3/understudy/selectorResolver.js +296 -0
  575. package/dist/esm/lib/v3/understudy/selectorResolver.js.map +1 -0
  576. package/dist/esm/lib/v3/v3.d.ts +191 -0
  577. package/dist/esm/lib/v3/v3.js +1572 -0
  578. package/dist/esm/lib/v3/v3.js.map +1 -0
  579. package/dist/esm/lib/v3/zodCompat.d.ts +12 -0
  580. package/dist/esm/lib/v3/zodCompat.js +17 -0
  581. package/dist/esm/lib/v3/zodCompat.js.map +1 -0
  582. package/dist/esm/lib/v3Evaluator.d.ts +19 -0
  583. package/dist/esm/lib/v3Evaluator.js +210 -0
  584. package/dist/esm/lib/v3Evaluator.js.map +1 -0
  585. package/dist/esm/lib/version.d.ts +5 -0
  586. package/dist/esm/lib/version.js +6 -0
  587. package/dist/esm/lib/version.js.map +1 -0
  588. package/dist/esm/package.json +3 -0
  589. package/dist/esm/tests/agent-execution-model.test.js +139 -0
  590. package/dist/esm/tests/agent-execution-model.test.js.map +7 -0
  591. package/dist/esm/tests/browserbase-session-accessors.test.js +101 -0
  592. package/dist/esm/tests/browserbase-session-accessors.test.js.map +7 -0
  593. package/dist/esm/tests/cache-llm-resolution.test.js +187 -0
  594. package/dist/esm/tests/cache-llm-resolution.test.js.map +7 -0
  595. package/dist/esm/tests/helpers/mockCDPSession.js +27 -0
  596. package/dist/esm/tests/helpers/mockCDPSession.js.map +7 -0
  597. package/dist/esm/tests/llm-provider.test.js +57 -0
  598. package/dist/esm/tests/llm-provider.test.js.map +7 -0
  599. package/dist/esm/tests/model-deprecation.test.js +135 -0
  600. package/dist/esm/tests/model-deprecation.test.js.map +7 -0
  601. package/dist/esm/tests/model-utils.test.js +43 -0
  602. package/dist/esm/tests/model-utils.test.js.map +7 -0
  603. package/dist/esm/tests/page-snapshot.test.js +36 -0
  604. package/dist/esm/tests/page-snapshot.test.js.map +7 -0
  605. package/dist/esm/tests/public-api/export-surface.test.js +53 -0
  606. package/dist/esm/tests/public-api/export-surface.test.js.map +7 -0
  607. package/dist/esm/tests/public-api/llm-and-agents.test.js +128 -0
  608. package/dist/esm/tests/public-api/llm-and-agents.test.js.map +7 -0
  609. package/dist/esm/tests/public-api/public-error-types.test.js +71 -0
  610. package/dist/esm/tests/public-api/public-error-types.test.js.map +7 -0
  611. package/dist/esm/tests/public-api/public-types.test.js +74 -0
  612. package/dist/esm/tests/public-api/public-types.test.js.map +7 -0
  613. package/dist/esm/tests/public-api/runtime-utils.test.js +31 -0
  614. package/dist/esm/tests/public-api/runtime-utils.test.js.map +7 -0
  615. package/dist/esm/tests/public-api/schema-utils.test.js +78 -0
  616. package/dist/esm/tests/public-api/schema-utils.test.js.map +7 -0
  617. package/dist/esm/tests/public-api/timeout-error-types.test.js +81 -0
  618. package/dist/esm/tests/public-api/timeout-error-types.test.js.map +7 -0
  619. package/dist/esm/tests/public-api/tool-type-export.test.js +25 -0
  620. package/dist/esm/tests/public-api/tool-type-export.test.js.map +7 -0
  621. package/dist/esm/tests/public-api/v3-core.test.js +82 -0
  622. package/dist/esm/tests/public-api/v3-core.test.js.map +7 -0
  623. package/dist/esm/tests/safety-confirmation.test.js +134 -0
  624. package/dist/esm/tests/safety-confirmation.test.js.map +7 -0
  625. package/dist/esm/tests/snapshot-a11y-resolvers.test.js +348 -0
  626. package/dist/esm/tests/snapshot-a11y-resolvers.test.js.map +7 -0
  627. package/dist/esm/tests/snapshot-a11y-tree-utils.test.js +300 -0
  628. package/dist/esm/tests/snapshot-a11y-tree-utils.test.js.map +7 -0
  629. package/dist/esm/tests/snapshot-capture-orchestration.test.js +381 -0
  630. package/dist/esm/tests/snapshot-capture-orchestration.test.js.map +7 -0
  631. package/dist/esm/tests/snapshot-cbor.test.js +197 -0
  632. package/dist/esm/tests/snapshot-cbor.test.js.map +7 -0
  633. package/dist/esm/tests/snapshot-dom-session-builders.test.js +251 -0
  634. package/dist/esm/tests/snapshot-dom-session-builders.test.js.map +7 -0
  635. package/dist/esm/tests/snapshot-dom-tree-utils.test.js +109 -0
  636. package/dist/esm/tests/snapshot-dom-tree-utils.test.js.map +7 -0
  637. package/dist/esm/tests/snapshot-focus-selectors-utils.test.js +49 -0
  638. package/dist/esm/tests/snapshot-focus-selectors-utils.test.js.map +7 -0
  639. package/dist/esm/tests/snapshot-frame-merge.test.js +391 -0
  640. package/dist/esm/tests/snapshot-frame-merge.test.js.map +7 -0
  641. package/dist/esm/tests/snapshot-tree-format-utils.test.js +113 -0
  642. package/dist/esm/tests/snapshot-tree-format-utils.test.js.map +7 -0
  643. package/dist/esm/tests/snapshot-xpath-utils.test.js +79 -0
  644. package/dist/esm/tests/snapshot-xpath-utils.test.js.map +7 -0
  645. package/dist/esm/tests/timeout-handlers.test.js +850 -0
  646. package/dist/esm/tests/timeout-handlers.test.js.map +7 -0
  647. package/dist/esm/tests/xpath-parser.test.js +317 -0
  648. package/dist/esm/tests/xpath-parser.test.js.map +7 -0
  649. package/dist/esm/tests/xpath-resolver.test.js +73 -0
  650. package/dist/esm/tests/xpath-resolver.test.js.map +7 -0
  651. package/dist/esm/tests/zod-enum-compatibility.test.js +97 -0
  652. package/dist/esm/tests/zod-enum-compatibility.test.js.map +7 -0
  653. package/package.json +37 -24
  654. package/dist/index.d.ts +0 -4363
  655. package/dist/index.js +0 -76530
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../lib/v3/tests/wait-for-selector.spec.ts"],
4
+ "sourcesContent": ["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { closeV3 } from \"./testUtils.js\";\n\ntest.describe.configure({ mode: \"serial\" });\ntest.describe(\"Page.waitForSelector tests\", () => {\n let v3: V3;\n\n test.beforeAll(async () => {\n v3 = new V3(v3DynamicTestConfig);\n await v3.init();\n });\n\n test.beforeEach(async () => {\n const pages = v3.context.pages();\n if (pages.length === 0) {\n await v3.context.newPage(\"about:blank\");\n return;\n }\n\n const [primary, ...extras] = pages;\n for (const page of extras) {\n await page.close().catch(() => {});\n }\n\n v3.context.setActivePage(primary);\n await primary.goto(\"about:blank\", {\n waitUntil: \"load\",\n timeoutMs: 15_000,\n });\n });\n\n test.afterAll(async () => {\n await closeV3(v3);\n });\n\n test.describe(\"Basic state tests\", () => {\n test(\"resolves when element is already visible\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent('<button id=\"submit-btn\">Submit</button>'),\n );\n\n const result = await page.waitForSelector(\"#submit-btn\");\n expect(result).toBe(true);\n });\n\n test(\"resolves when element appears after delay\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n \"<div id='container'></div>\" +\n \"<script>\" +\n \"setTimeout(() => {\" +\n \" const btn = document.createElement('button');\" +\n \" btn.id = 'delayed-btn';\" +\n \" btn.textContent = 'Delayed Button';\" +\n \" document.getElementById('container').appendChild(btn);\" +\n \"}, 300);\" +\n \"</script>\",\n ),\n );\n\n const result = await page.waitForSelector(\"#delayed-btn\", {\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"state 'attached' resolves for hidden elements\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"hidden-div\" style=\"display: none;\">Hidden Content</div>',\n ),\n );\n\n const result = await page.waitForSelector(\"#hidden-div\", {\n state: \"attached\",\n });\n expect(result).toBe(true);\n });\n\n test(\"state 'visible' waits for element to become visible\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"show-later\" style=\"display: none;\">Now Visible</div>' +\n \"<script>\" +\n \"setTimeout(() => {\" +\n \" document.getElementById('show-later').style.display = 'block';\" +\n \"}, 300);\" +\n \"</script>\",\n ),\n );\n\n const result = await page.waitForSelector(\"#show-later\", {\n state: \"visible\",\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"state 'hidden' waits for element to become hidden\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"hide-later\" style=\"display: block;\">Will Hide</div>' +\n \"<script>\" +\n \"setTimeout(() => {\" +\n \" document.getElementById('hide-later').style.display = 'none';\" +\n \"}, 300);\" +\n \"</script>\",\n ),\n );\n\n const result = await page.waitForSelector(\"#hide-later\", {\n state: \"hidden\",\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"state 'detached' waits for element to be removed\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"remove-me\">Will Be Removed</div>' +\n \"<script>\" +\n \"setTimeout(() => {\" +\n \" const el = document.getElementById('remove-me');\" +\n \" el.parentNode.removeChild(el);\" +\n \"}, 300);\" +\n \"</script>\",\n ),\n );\n\n const result = await page.waitForSelector(\"#remove-me\", {\n state: \"detached\",\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"state 'detached' resolves immediately for non-existent element\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" + encodeURIComponent(\"<div>Content</div>\"),\n );\n\n const result = await page.waitForSelector(\"#does-not-exist\", {\n state: \"detached\",\n timeout: 1000,\n });\n expect(result).toBe(true);\n });\n });\n\n test.describe(\"Timeout behavior\", () => {\n test(\"throws on timeout when element never appears\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" + encodeURIComponent(\"<div>No button here</div>\"),\n );\n\n let error: Error | null = null;\n try {\n await page.waitForSelector(\"#nonexistent\", { timeout: 300 });\n } catch (e) {\n error = e as Error;\n }\n\n expect(error).not.toBeNull();\n expect(error?.message).toContain(\"Timeout\");\n expect(error?.message).toContain(\"#nonexistent\");\n });\n\n test(\"respects custom timeout duration\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" + encodeURIComponent(\"<div>Content</div>\"),\n );\n\n const startTime = Date.now();\n try {\n await page.waitForSelector(\"#nonexistent\", { timeout: 500 });\n } catch {\n // Expected to timeout\n }\n const elapsed = Date.now() - startTime;\n\n // Should timeout around 500ms (allow some margin)\n expect(elapsed).toBeGreaterThanOrEqual(450);\n expect(elapsed).toBeLessThan(2000);\n });\n });\n\n test.describe(\"CSS selector variants\", () => {\n test(\"handles complex CSS selectors\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div class=\"container\">' +\n '<form id=\"login-form\">' +\n '<button type=\"submit\">Login</button>' +\n \"</form>\" +\n \"</div>\",\n ),\n );\n\n const result = await page.waitForSelector(\n \".container #login-form button[type='submit']\",\n );\n expect(result).toBe(true);\n });\n });\n\n test.describe(\"Open shadow DOM\", () => {\n test(\"finds element inside open shadow DOM with pierceShadow: true\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"host\"></div>' +\n \"<script>\" +\n 'const host = document.getElementById(\"host\");' +\n 'const shadow = host.attachShadow({mode: \"open\"});' +\n 'shadow.innerHTML = \"<button id=\\\\\"shadow-btn\\\\\">Shadow Button</button>\";' +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n await page.waitForTimeout(100);\n\n const result = await page.waitForSelector(\"#shadow-btn\", {\n pierceShadow: true,\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"does NOT find shadow DOM element with pierceShadow: false\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"host\"></div>' +\n \"<script>\" +\n 'const host = document.getElementById(\"host\");' +\n 'const shadow = host.attachShadow({mode: \"open\"});' +\n 'shadow.innerHTML = \"<button id=\\\\\"shadow-only-btn\\\\\">Shadow Only</button>\";' +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n await page.waitForTimeout(100);\n\n let error: Error | null = null;\n try {\n await page.waitForSelector(\"#shadow-only-btn\", {\n pierceShadow: false,\n timeout: 300,\n });\n } catch (e) {\n error = e as Error;\n }\n\n expect(error).not.toBeNull();\n expect(error?.message).toContain(\"Timeout\");\n });\n\n test(\"finds element in nested open shadow DOM\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"outer-host\"></div>' +\n \"<script>\" +\n 'const outerHost = document.getElementById(\"outer-host\");' +\n 'const outerShadow = outerHost.attachShadow({mode: \"open\"});' +\n 'outerShadow.innerHTML = \"<div id=\\\\\"inner-host\\\\\"></div>\";' +\n 'const innerHost = outerShadow.getElementById(\"inner-host\");' +\n 'const innerShadow = innerHost.attachShadow({mode: \"open\"});' +\n 'innerShadow.innerHTML = \"<span id=\\\\\"deep-element\\\\\">Deep!</span>\";' +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n await page.waitForTimeout(100);\n\n const result = await page.waitForSelector(\"#deep-element\", {\n pierceShadow: true,\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n });\n\n test.describe(\"Closed shadow DOM (via piercer)\", () => {\n test(\"finds element inside closed shadow DOM via custom element\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n \"<closed-shadow-host></closed-shadow-host>\" +\n \"<script>\" +\n \"class ClosedShadowHost extends HTMLElement {\" +\n \" constructor() {\" +\n \" super();\" +\n ' const shadow = this.attachShadow({mode: \"closed\"});' +\n ' shadow.innerHTML = \"<button id=\\\\\"closed-btn\\\\\">Closed Shadow Button</button>\";' +\n \" }\" +\n \"}\" +\n \"customElements.define('closed-shadow-host', ClosedShadowHost);\" +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n await page.waitForTimeout(100);\n\n // The piercer hooks attachShadow and stores closed shadow roots\n const result = await page.waitForSelector(\"#closed-btn\", {\n pierceShadow: true,\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"finds element in nested closed shadow DOM\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n \"<outer-closed></outer-closed>\" +\n \"<script>\" +\n \"class InnerClosed extends HTMLElement {\" +\n \" constructor() {\" +\n \" super();\" +\n ' const shadow = this.attachShadow({mode: \"closed\"});' +\n ' shadow.innerHTML = \"<span id=\\\\\"deeply-closed\\\\\">Deeply Nested Closed</span>\";' +\n \" }\" +\n \"}\" +\n \"customElements.define('inner-closed', InnerClosed);\" +\n \"\" +\n \"class OuterClosed extends HTMLElement {\" +\n \" constructor() {\" +\n \" super();\" +\n ' const shadow = this.attachShadow({mode: \"closed\"});' +\n ' shadow.innerHTML = \"<inner-closed></inner-closed>\";' +\n \" }\" +\n \"}\" +\n \"customElements.define('outer-closed', OuterClosed);\" +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n await page.waitForTimeout(100);\n\n const result = await page.waitForSelector(\"#deeply-closed\", {\n pierceShadow: true,\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"finds element in mixed open/closed nested shadow DOM\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"open-host\"></div>' +\n \"<script>\" +\n // Inner closed component\n \"class ClosedInner extends HTMLElement {\" +\n \" constructor() {\" +\n \" super();\" +\n ' const shadow = this.attachShadow({mode: \"closed\"});' +\n ' shadow.innerHTML = \"<button id=\\\\\"mixed-deep-btn\\\\\">Mixed Deep Button</button>\";' +\n \" }\" +\n \"}\" +\n \"customElements.define('closed-inner', ClosedInner);\" +\n // Outer open shadow\n 'const openHost = document.getElementById(\"open-host\");' +\n 'const openShadow = openHost.attachShadow({mode: \"open\"});' +\n 'openShadow.innerHTML = \"<closed-inner></closed-inner>\";' +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n await page.waitForTimeout(100);\n\n const result = await page.waitForSelector(\"#mixed-deep-btn\", {\n pierceShadow: true,\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"waits for element to appear inside closed shadow DOM\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n \"<delayed-closed-host></delayed-closed-host>\" +\n \"<script>\" +\n \"class DelayedClosedHost extends HTMLElement {\" +\n \" constructor() {\" +\n \" super();\" +\n ' const shadow = this.attachShadow({mode: \"closed\"});' +\n ' shadow.innerHTML = \"<div id=\\\\\"container\\\\\"></div>\";' +\n \" setTimeout(() => {\" +\n ' shadow.getElementById(\"container\").innerHTML = ' +\n ' \"<button id=\\\\\"delayed-closed-btn\\\\\">Appeared!</button>\";' +\n \" }, 300);\" +\n \" }\" +\n \"}\" +\n \"customElements.define('delayed-closed-host', DelayedClosedHost);\" +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n\n const result = await page.waitForSelector(\"#delayed-closed-btn\", {\n pierceShadow: true,\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n });\n\n test.describe(\"XPath selectors\", () => {\n test(\"finds element with basic XPath\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent('<button id=\"xpath-btn\">XPath Button</button>'),\n );\n\n const result = await page.waitForSelector(\"//button[@id='xpath-btn']\", {\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"finds element with xpath= prefix\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"container\"><span class=\"target\">Target</span></div>',\n ),\n );\n\n const result = await page.waitForSelector(\n \"xpath=//span[@class='target']\",\n {\n timeout: 5000,\n },\n );\n expect(result).toBe(true);\n });\n\n test(\"waits for element to appear with XPath\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n \"<div id='container'></div>\" +\n \"<script>\" +\n \"setTimeout(() => {\" +\n ' document.getElementById(\"container\").innerHTML = ' +\n ' \"<span id=\\\\\"delayed-xpath\\\\\">Delayed XPath</span>\";' +\n \"}, 300);\" +\n \"</script>\",\n ),\n );\n\n const result = await page.waitForSelector(\"//span[@id='delayed-xpath']\", {\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"finds element in open shadow DOM with XPath\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"host\"></div>' +\n \"<script>\" +\n 'const host = document.getElementById(\"host\");' +\n 'const shadow = host.attachShadow({mode: \"open\"});' +\n 'shadow.innerHTML = \"<button id=\\\\\"shadow-xpath-btn\\\\\">Shadow XPath</button>\";' +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n await page.waitForTimeout(100);\n\n const result = await page.waitForSelector(\n \"//button[@id='shadow-xpath-btn']\",\n {\n pierceShadow: true,\n timeout: 5000,\n },\n );\n expect(result).toBe(true);\n });\n\n test(\"finds element in closed shadow DOM with XPath\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n \"<xpath-closed-host></xpath-closed-host>\" +\n \"<script>\" +\n \"class XPathClosedHost extends HTMLElement {\" +\n \" constructor() {\" +\n \" super();\" +\n ' const shadow = this.attachShadow({mode: \"closed\"});' +\n ' shadow.innerHTML = \"<span id=\\\\\"xpath-closed-target\\\\\">Closed XPath Target</span>\";' +\n \" }\" +\n \"}\" +\n \"customElements.define('xpath-closed-host', XPathClosedHost);\" +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n await page.waitForTimeout(100);\n\n const result = await page.waitForSelector(\n \"//span[@id='xpath-closed-target']\",\n {\n pierceShadow: true,\n timeout: 5000,\n },\n );\n expect(result).toBe(true);\n });\n });\n\n test.describe(\"Iframe hop notation (>>)\", () => {\n test(\"finds element inside single iframe\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<button id=\"main-btn\">Main Button</button>' +\n '<iframe id=\"my-frame\"></iframe>' +\n \"<script>\" +\n 'const frame = document.getElementById(\"my-frame\");' +\n \"const doc = frame.contentDocument;\" +\n \"doc.open();\" +\n 'doc.write(\"<button id=\\\\\"frame-btn\\\\\">Frame Button</button>\");' +\n \"doc.close();\" +\n \"</script>\",\n ),\n );\n await page.waitForTimeout(100);\n\n const result = await page.waitForSelector(\n \"iframe#my-frame >> #frame-btn\",\n {\n timeout: 5000,\n },\n );\n expect(result).toBe(true);\n });\n\n test(\"finds element through multiple iframe hops\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<iframe id=\"outer-frame\"></iframe>' +\n \"<script>\" +\n 'const outerFrame = document.getElementById(\"outer-frame\");' +\n \"const outerDoc = outerFrame.contentDocument;\" +\n \"outerDoc.open();\" +\n 'outerDoc.write(\"<iframe id=\\\\\"inner-frame\\\\\"></iframe>\");' +\n \"outerDoc.close();\" +\n \"setTimeout(() => {\" +\n ' const innerFrame = outerDoc.getElementById(\"inner-frame\");' +\n \" const innerDoc = innerFrame.contentDocument;\" +\n \" innerDoc.open();\" +\n ' innerDoc.write(\"<div id=\\\\\"nested-content\\\\\">Deeply Nested</div>\");' +\n \" innerDoc.close();\" +\n \"}, 100);\" +\n \"</script>\",\n ),\n );\n await page.waitForTimeout(300);\n\n const result = await page.waitForSelector(\n \"iframe#outer-frame >> iframe#inner-frame >> #nested-content\",\n { timeout: 5000 },\n );\n expect(result).toBe(true);\n });\n\n test(\"waits for element to appear inside iframe\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<iframe id=\"delay-frame\"></iframe>' +\n \"<script>\" +\n 'const frame = document.getElementById(\"delay-frame\");' +\n \"const doc = frame.contentDocument;\" +\n \"doc.open();\" +\n 'doc.write(\"<div id=\\\\\"container\\\\\"></div>\");' +\n \"doc.close();\" +\n \"setTimeout(() => {\" +\n ' doc.getElementById(\"container\").innerHTML = ' +\n ' \"<span id=\\\\\"delayed-in-frame\\\\\">Appeared!</span>\";' +\n \"}, 300);\" +\n \"</script>\",\n ),\n );\n\n const result = await page.waitForSelector(\n \"iframe#delay-frame >> #delayed-in-frame\",\n {\n timeout: 5000,\n },\n );\n expect(result).toBe(true);\n });\n });\n\n test.describe(\"Visibility edge cases\", () => {\n test(\"visibility: hidden is not visible\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"vis-hidden\" style=\"visibility: hidden;\">Hidden</div>',\n ),\n );\n\n // Should be attached but not visible\n const attached = await page.waitForSelector(\"#vis-hidden\", {\n state: \"attached\",\n });\n expect(attached).toBe(true);\n\n let error: Error | null = null;\n try {\n await page.waitForSelector(\"#vis-hidden\", {\n state: \"visible\",\n timeout: 200,\n });\n } catch (e) {\n error = e as Error;\n }\n expect(error).not.toBeNull();\n });\n\n test(\"opacity: 0 is not visible\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"transparent\" style=\"opacity: 0;\">Transparent</div>',\n ),\n );\n\n const attached = await page.waitForSelector(\"#transparent\", {\n state: \"attached\",\n });\n expect(attached).toBe(true);\n\n let error: Error | null = null;\n try {\n await page.waitForSelector(\"#transparent\", {\n state: \"visible\",\n timeout: 200,\n });\n } catch (e) {\n error = e as Error;\n }\n expect(error).not.toBeNull();\n });\n\n test(\"zero dimensions is not visible\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"zero-size\" style=\"width: 0; height: 0;\">Zero</div>',\n ),\n );\n\n const attached = await page.waitForSelector(\"#zero-size\", {\n state: \"attached\",\n });\n expect(attached).toBe(true);\n\n let error: Error | null = null;\n try {\n await page.waitForSelector(\"#zero-size\", {\n state: \"visible\",\n timeout: 200,\n });\n } catch (e) {\n error = e as Error;\n }\n expect(error).not.toBeNull();\n });\n\n test(\"detects visibility change via class toggle\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n \"<style>.hidden { display: none; }</style>\" +\n '<div id=\"class-toggle\" class=\"hidden\">Class Toggle</div>' +\n \"<script>\" +\n \"setTimeout(() => {\" +\n \" document.getElementById('class-toggle').classList.remove('hidden');\" +\n \"}, 300);\" +\n \"</script>\",\n ),\n );\n\n const result = await page.waitForSelector(\"#class-toggle\", {\n state: \"visible\",\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"detects visibility change via style attribute\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"style-toggle\" style=\"display: none;\">Style Toggle</div>' +\n \"<script>\" +\n \"setTimeout(() => {\" +\n \" document.getElementById('style-toggle').style.display = 'block';\" +\n \"}, 300);\" +\n \"</script>\",\n ),\n );\n\n const result = await page.waitForSelector(\"#style-toggle\", {\n state: \"visible\",\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n });\n\n test.describe(\"Dynamic DOM scenarios\", () => {\n test(\"handles rapid DOM mutations\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n \"<div id='container'></div>\" +\n \"<script>\" +\n \"let count = 0;\" +\n \"const interval = setInterval(() => {\" +\n \" count++;\" +\n \" const div = document.createElement('div');\" +\n \" div.id = 'item-' + count;\" +\n \" div.textContent = 'item';\" +\n \" document.getElementById('container').appendChild(div);\" +\n \" if (count >= 10) clearInterval(interval);\" +\n \"}, 50);\" +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n // Small delay to ensure script starts\n await page.waitForTimeout(50);\n\n const result = await page.waitForSelector(\"#item-7\", { timeout: 10000 });\n expect(result).toBe(true);\n });\n\n test(\"handles element removed and re-added\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent('<div id=\"toggle-me\">Toggle</div>'),\n );\n\n const browserTarget = (\n process.env.STAGEHAND_BROWSER_TARGET ?? \"local\"\n ).toLowerCase();\n const isBrowserbase = browserTarget === \"browserbase\";\n const removeDelayMs = isBrowserbase ? 1000 : 200;\n const addDelayMs = isBrowserbase ? 1600 : 500;\n const waitTimeoutMs = isBrowserbase ? 10000 : 5000;\n\n // Start waiting before scheduling DOM changes to avoid racey timing in CI.\n const detachedPromise = page.waitForSelector(\"#toggle-me\", {\n state: \"detached\",\n timeout: waitTimeoutMs,\n });\n await page.evaluate(\n ({ removeDelay, addDelay }) => {\n const el = document.getElementById(\"toggle-me\");\n const parent = el?.parentNode;\n if (!el || !parent) return;\n setTimeout(() => parent.removeChild(el), removeDelay);\n setTimeout(() => parent.appendChild(el), addDelay);\n },\n { removeDelay: removeDelayMs, addDelay: addDelayMs },\n );\n\n const detached = await detachedPromise;\n expect(detached).toBe(true);\n\n // Then wait for visible again\n const visible = await page.waitForSelector(\"#toggle-me\", {\n state: \"visible\",\n timeout: waitTimeoutMs,\n });\n expect(visible).toBe(true);\n });\n\n test(\"handles dynamically replaced innerHTML\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"container\">Loading...</div>' +\n \"<script>\" +\n \"setTimeout(() => {\" +\n ' document.getElementById(\"container\").innerHTML = ' +\n ' \"<button id=\\\\\"loaded-btn\\\\\">Loaded!</button>\";' +\n \"}, 300);\" +\n \"</script>\",\n ),\n );\n\n const result = await page.waitForSelector(\"#loaded-btn\", {\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"handles element created via insertAdjacentHTML\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"anchor\"></div>' +\n \"<script>\" +\n \"setTimeout(() => {\" +\n ' document.getElementById(\"anchor\").insertAdjacentHTML(' +\n ' \"afterend\", \"<div id=\\\\\"inserted\\\\\">Inserted</div>\"' +\n \" );\" +\n \"}, 300);\" +\n \"</script>\",\n ),\n );\n\n const result = await page.waitForSelector(\"#inserted\", { timeout: 5000 });\n expect(result).toBe(true);\n });\n });\n\n test.describe(\"Shadow DOM visibility changes\", () => {\n test(\"detects element becoming visible inside open shadow DOM\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"host\"></div>' +\n \"<script>\" +\n 'const host = document.getElementById(\"host\");' +\n 'const shadow = host.attachShadow({mode: \"open\"});' +\n 'shadow.innerHTML = \"<button id=\\\\\"shadow-btn\\\\\" style=\\\\\"display:none\\\\\">Shadow</button>\";' +\n \"setTimeout(() => {\" +\n ' shadow.getElementById(\"shadow-btn\").style.display = \"block\";' +\n \"}, 300);\" +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n\n const result = await page.waitForSelector(\"#shadow-btn\", {\n state: \"visible\",\n pierceShadow: true,\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n\n test(\"detects element becoming hidden inside shadow DOM\", async () => {\n const page = v3.context.pages()[0];\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n '<div id=\"host\"></div>' +\n \"<script>\" +\n 'const host = document.getElementById(\"host\");' +\n 'const shadow = host.attachShadow({mode: \"open\"});' +\n 'shadow.innerHTML = \"<button id=\\\\\"hide-shadow-btn\\\\\">Will Hide</button>\";' +\n \"setTimeout(() => {\" +\n ' shadow.getElementById(\"hide-shadow-btn\").style.display = \"none\";' +\n \"}, 300);\" +\n \"</script>\",\n ),\n { waitUntil: \"load\", timeoutMs: 30000 },\n );\n await page.waitForTimeout(100);\n\n const result = await page.waitForSelector(\"#hide-shadow-btn\", {\n state: \"hidden\",\n pierceShadow: true,\n timeout: 5000,\n });\n expect(result).toBe(true);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,97 @@
1
+ import { expect, test } from "@playwright/test";
2
+ import { V3 } from "../v3.js";
3
+ import { v3DynamicTestConfig } from "./v3.dynamic.config.js";
4
+ import { closeV3 } from "./testUtils.js";
5
+ test.describe("Page.waitForTimeout tests", () => {
6
+ let v3;
7
+ test.beforeEach(async () => {
8
+ v3 = new V3(v3DynamicTestConfig);
9
+ await v3.init();
10
+ });
11
+ test.afterEach(async () => {
12
+ await closeV3(v3);
13
+ });
14
+ test("waitForTimeout resolves after specified duration", async () => {
15
+ const page = v3.context.pages()[0];
16
+ await page.goto(
17
+ "data:text/html," + encodeURIComponent("<div>Test Page</div>")
18
+ );
19
+ const startTime = Date.now();
20
+ await page.waitForTimeout(200);
21
+ const elapsed = Date.now() - startTime;
22
+ expect(elapsed).toBeGreaterThanOrEqual(190);
23
+ });
24
+ test("waitForTimeout resolves immediately for 0ms", async () => {
25
+ const page = v3.context.pages()[0];
26
+ await page.goto(
27
+ "data:text/html," + encodeURIComponent("<div>Test Page</div>")
28
+ );
29
+ const startTime = Date.now();
30
+ await page.waitForTimeout(0);
31
+ const elapsed = Date.now() - startTime;
32
+ expect(elapsed).toBeLessThan(50);
33
+ });
34
+ test("waitForTimeout can be chained with other operations", async () => {
35
+ const page = v3.context.pages()[0];
36
+ await page.goto(
37
+ "data:text/html," + encodeURIComponent(
38
+ "<div id='counter'>0</div><script>let count = 0;setInterval(() => { count++; document.getElementById('counter').textContent = count;}, 100);</script>"
39
+ )
40
+ );
41
+ await page.waitForTimeout(350);
42
+ const text = await page.mainFrame().locator("#counter").textContent();
43
+ expect(parseInt(text ?? "0")).toBeGreaterThanOrEqual(3);
44
+ });
45
+ test("waitForTimeout works with async/await syntax", async () => {
46
+ const page = v3.context.pages()[0];
47
+ await page.goto("data:text/html," + encodeURIComponent("<div>Test</div>"));
48
+ const results = [];
49
+ results.push(1);
50
+ await page.waitForTimeout(50);
51
+ results.push(2);
52
+ await page.waitForTimeout(50);
53
+ results.push(3);
54
+ expect(results).toEqual([1, 2, 3]);
55
+ });
56
+ test("waitForTimeout allows DOM to update", async () => {
57
+ const page = v3.context.pages()[0];
58
+ await page.goto(
59
+ "data:text/html," + encodeURIComponent(
60
+ "<div id='delayed'></div><script>window.startUpdate = () => { setTimeout(() => { document.getElementById('delayed').textContent = 'Loaded'; }, 200);};</script>"
61
+ )
62
+ );
63
+ await page.evaluate(() => {
64
+ window.startUpdate();
65
+ });
66
+ await page.waitForTimeout(300);
67
+ const afterText = await page.mainFrame().locator("#delayed").textContent();
68
+ expect(afterText).toBe("Loaded");
69
+ });
70
+ test("waitForTimeout with small increments", async () => {
71
+ const page = v3.context.pages()[0];
72
+ await page.goto("data:text/html," + encodeURIComponent("<div>Test</div>"));
73
+ const startTime = Date.now();
74
+ await page.waitForTimeout(50);
75
+ await page.waitForTimeout(50);
76
+ await page.waitForTimeout(50);
77
+ await page.waitForTimeout(50);
78
+ const elapsed = Date.now() - startTime;
79
+ expect(elapsed).toBeGreaterThanOrEqual(190);
80
+ });
81
+ test("waitForTimeout does not block other async operations", async () => {
82
+ const page = v3.context.pages()[0];
83
+ await page.goto(
84
+ "data:text/html," + encodeURIComponent(
85
+ "<div id='async-test'>Initial</div><script>window.updateText = () => { document.getElementById('async-test').textContent = 'Updated';};</script>"
86
+ )
87
+ );
88
+ const timeoutPromise = page.waitForTimeout(100);
89
+ await page.evaluate(() => {
90
+ window.updateText();
91
+ });
92
+ const text = await page.mainFrame().locator("#async-test").textContent();
93
+ expect(text).toBe("Updated");
94
+ await timeoutPromise;
95
+ });
96
+ });
97
+ //# sourceMappingURL=wait-for-timeout.spec.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../lib/v3/tests/wait-for-timeout.spec.ts"],
4
+ "sourcesContent": ["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { closeV3 } from \"./testUtils.js\";\n\ntest.describe(\"Page.waitForTimeout tests\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3DynamicTestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await closeV3(v3);\n });\n\n test(\"waitForTimeout resolves after specified duration\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" + encodeURIComponent(\"<div>Test Page</div>\"),\n );\n\n const startTime = Date.now();\n await page.waitForTimeout(200);\n const elapsed = Date.now() - startTime;\n\n // Should have waited at least 200ms (allow some tolerance)\n expect(elapsed).toBeGreaterThanOrEqual(190);\n });\n\n test(\"waitForTimeout resolves immediately for 0ms\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" + encodeURIComponent(\"<div>Test Page</div>\"),\n );\n\n const startTime = Date.now();\n await page.waitForTimeout(0);\n const elapsed = Date.now() - startTime;\n\n // Should resolve nearly immediately (within 50ms tolerance)\n expect(elapsed).toBeLessThan(50);\n });\n\n test(\"waitForTimeout can be chained with other operations\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n \"<div id='counter'>0</div>\" +\n \"<script>\" +\n \"let count = 0;\" +\n \"setInterval(() => {\" +\n \" count++;\" +\n \" document.getElementById('counter').textContent = count;\" +\n \"}, 100);\" +\n \"</script>\",\n ),\n );\n\n // Wait for counter to increment\n await page.waitForTimeout(350);\n\n // Counter should have incremented at least 3 times\n const text = await page.mainFrame().locator(\"#counter\").textContent();\n expect(parseInt(text ?? \"0\")).toBeGreaterThanOrEqual(3);\n });\n\n test(\"waitForTimeout works with async/await syntax\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\"data:text/html,\" + encodeURIComponent(\"<div>Test</div>\"));\n\n const results: number[] = [];\n\n results.push(1);\n await page.waitForTimeout(50);\n results.push(2);\n await page.waitForTimeout(50);\n results.push(3);\n\n expect(results).toEqual([1, 2, 3]);\n });\n\n test(\"waitForTimeout allows DOM to update\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n \"<div id='delayed'></div>\" +\n \"<script>\" +\n \"window.startUpdate = () => {\" +\n \" setTimeout(() => {\" +\n \" document.getElementById('delayed').textContent = 'Loaded';\" +\n \" }, 200);\" +\n \"};\" +\n \"</script>\",\n ),\n );\n\n // Trigger the delayed update\n await page.evaluate(() => {\n (window as unknown as { startUpdate: () => void }).startUpdate();\n });\n\n // Wait for the timeout to allow DOM update\n await page.waitForTimeout(300);\n\n // Content should now be loaded\n const afterText = await page.mainFrame().locator(\"#delayed\").textContent();\n expect(afterText).toBe(\"Loaded\");\n });\n\n test(\"waitForTimeout with small increments\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\"data:text/html,\" + encodeURIComponent(\"<div>Test</div>\"));\n\n const startTime = Date.now();\n\n // Multiple small waits\n await page.waitForTimeout(50);\n await page.waitForTimeout(50);\n await page.waitForTimeout(50);\n await page.waitForTimeout(50);\n\n const elapsed = Date.now() - startTime;\n\n // Should have waited at least 200ms total (4 * 50ms)\n expect(elapsed).toBeGreaterThanOrEqual(190);\n });\n\n test(\"waitForTimeout does not block other async operations\", async () => {\n const page = v3.context.pages()[0];\n\n await page.goto(\n \"data:text/html,\" +\n encodeURIComponent(\n \"<div id='async-test'>Initial</div>\" +\n \"<script>\" +\n \"window.updateText = () => {\" +\n \" document.getElementById('async-test').textContent = 'Updated';\" +\n \"};\" +\n \"</script>\",\n ),\n );\n\n // Start a timeout\n const timeoutPromise = page.waitForTimeout(100);\n\n // Execute something else while waiting\n await page.evaluate(() => {\n (window as unknown as { updateText: () => void }).updateText();\n });\n\n // Verify the update happened\n const text = await page.mainFrame().locator(\"#async-test\").textContent();\n expect(text).toBe(\"Updated\");\n\n // Wait for the timeout to complete\n await timeoutPromise;\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,77 @@
1
+ import { expect, test } from "@playwright/test";
2
+ import { V3 } from "../v3.js";
3
+ import { v3DynamicTestConfig } from "./v3.dynamic.config.js";
4
+ import { resolveXpathForLocation } from "../understudy/a11y/snapshot/index.js";
5
+ import { executionContexts } from "../understudy/executionContextRegistry.js";
6
+ import { closeV3 } from "./testUtils.js";
7
+ test.describe("resolveNodeForLocationDeep", () => {
8
+ let v3;
9
+ test.beforeEach(async () => {
10
+ v3 = new V3(v3DynamicTestConfig);
11
+ await v3.init();
12
+ });
13
+ test.afterEach(async () => {
14
+ await closeV3(v3);
15
+ });
16
+ test("click resolves inside same-process iframe and returns absolute XPath", async () => {
17
+ const page = await v3.context.awaitActivePage();
18
+ await page.setViewportSize(1280, 720);
19
+ await page.goto(
20
+ "https://browserbase.github.io/stagehand-eval-sites/sites/iframe-hn/",
21
+ { waitUntil: "networkidle" }
22
+ );
23
+ await page.waitForSelector("section iframe", {
24
+ state: "attached",
25
+ timeout: 1e4
26
+ });
27
+ const frame = await page.frameLocator("section iframe").resolveFrame();
28
+ await executionContexts.waitForMainWorld(
29
+ frame.session,
30
+ frame.frameId,
31
+ 5e3
32
+ );
33
+ await page.evaluate(() => {
34
+ window.scrollTo(0, document.body.scrollHeight);
35
+ });
36
+ await frame.evaluate(() => {
37
+ window.scrollTo(0, document.body.scrollHeight);
38
+ });
39
+ await new Promise((resolve) => setTimeout(resolve, 500));
40
+ const iframeOffset = await page.evaluate(() => {
41
+ const iframe = document.querySelector("section iframe");
42
+ if (!iframe) return null;
43
+ const rect = iframe.getBoundingClientRect();
44
+ return {
45
+ left: rect.left,
46
+ top: rect.top
47
+ };
48
+ });
49
+ const linkOffsetInFrame = await frame.evaluate(() => {
50
+ const table = document.querySelector(
51
+ "center > table > tbody > tr:nth-child(3) > td > table"
52
+ );
53
+ if (!table) return null;
54
+ const row88 = table.querySelector("tbody > tr:nth-child(88)");
55
+ if (!row88) return null;
56
+ const cell3 = row88.querySelector("td:nth-child(3)");
57
+ if (!cell3) return null;
58
+ const link = cell3.querySelector("span > a");
59
+ if (!link) return null;
60
+ const rect = link.getBoundingClientRect();
61
+ return {
62
+ x: rect.left + rect.width / 2,
63
+ y: rect.top + rect.height / 2
64
+ };
65
+ });
66
+ const x = iframeOffset && linkOffsetInFrame ? iframeOffset.left + linkOffsetInFrame.x : 356;
67
+ const y = iframeOffset && linkOffsetInFrame ? iframeOffset.top + linkOffsetInFrame.y : 503;
68
+ const result = await resolveXpathForLocation(page, x, y);
69
+ console.log("=== Coordinates used:", { x, y });
70
+ console.log("=== Result:", result);
71
+ const xpath = result.absoluteXPath;
72
+ expect(xpath).toBe(
73
+ "/html[1]/body[1]/main[1]/section[3]/iframe[1]/html[1]/body[1]/center[1]/table[1]/tbody[1]/tr[3]/td[1]/table[1]/tbody[1]/tr[88]/td[3]/span[1]/a[1]"
74
+ );
75
+ });
76
+ });
77
+ //# sourceMappingURL=xpath-for-location-deep.spec.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../lib/v3/tests/xpath-for-location-deep.spec.ts"],
4
+ "sourcesContent": ["import { expect, test } from \"@playwright/test\";\nimport { V3 } from \"../v3.js\";\nimport { v3DynamicTestConfig } from \"./v3.dynamic.config.js\";\nimport { resolveXpathForLocation } from \"../understudy/a11y/snapshot/index.js\";\nimport { executionContexts } from \"../understudy/executionContextRegistry.js\";\nimport { closeV3 } from \"./testUtils.js\";\n\ntest.describe(\"resolveNodeForLocationDeep\", () => {\n let v3: V3;\n\n test.beforeEach(async () => {\n v3 = new V3(v3DynamicTestConfig);\n await v3.init();\n });\n\n test.afterEach(async () => {\n await closeV3(v3);\n });\n\n test(\"click resolves inside same-process iframe and returns absolute XPath\", async () => {\n const page = await v3.context.awaitActivePage();\n\n // Set consistent viewport size to ensure stable rendering across environments\n await page.setViewportSize(1280, 720);\n\n await page.goto(\n \"https://browserbase.github.io/stagehand-eval-sites/sites/iframe-hn/\",\n { waitUntil: \"networkidle\" },\n );\n\n await page.waitForSelector(\"section iframe\", {\n state: \"attached\",\n timeout: 10000,\n });\n const frame = await page.frameLocator(\"section iframe\").resolveFrame();\n await executionContexts.waitForMainWorld(\n frame.session,\n frame.frameId,\n 5000,\n );\n\n // scroll to the bottom of the page\n await page.evaluate(() => {\n window.scrollTo(0, document.body.scrollHeight);\n });\n\n // scroll to the bottom of the iframe\n await frame.evaluate(() => {\n window.scrollTo(0, document.body.scrollHeight);\n });\n\n // Wait a bit for the iframe content to settle after scrolling\n await new Promise((resolve) => setTimeout(resolve, 500));\n\n // Get the iframe's position in the main page\n const iframeOffset = await page.evaluate(() => {\n const iframe = document.querySelector(\"section iframe\");\n if (!iframe) return null;\n const rect = iframe.getBoundingClientRect();\n return {\n left: rect.left,\n top: rect.top,\n };\n });\n\n // Get the link's position within the iframe\n const linkOffsetInFrame = await frame.evaluate(() => {\n // Find the 88th row, 3rd column link (the one we're testing)\n const table = document.querySelector(\n \"center > table > tbody > tr:nth-child(3) > td > table\",\n );\n if (!table) return null;\n\n const row88 = table.querySelector(\"tbody > tr:nth-child(88)\");\n if (!row88) return null;\n\n const cell3 = row88.querySelector(\"td:nth-child(3)\");\n if (!cell3) return null;\n\n const link = cell3.querySelector(\"span > a\");\n if (!link) return null;\n\n const rect = link.getBoundingClientRect();\n // Return center coordinates of the link relative to iframe\n return {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n };\n });\n\n // Combine iframe offset and link offset to get page-level coordinates\n // Fallback to hardcoded coordinates if element not found (shouldn't happen)\n const x =\n iframeOffset && linkOffsetInFrame\n ? iframeOffset.left + linkOffsetInFrame.x\n : 356;\n const y =\n iframeOffset && linkOffsetInFrame\n ? iframeOffset.top + linkOffsetInFrame.y\n : 503;\n\n const result = await resolveXpathForLocation(page, x, y);\n console.log(\"=== Coordinates used:\", { x, y });\n console.log(\"=== Result:\", result);\n const xpath = result.absoluteXPath;\n expect(xpath).toBe(\n \"/html[1]/body[1]/main[1]/section[3]/iframe[1]/html[1]/body[1]/center[1]/table[1]/tbody[1]/tr[3]/td[1]/table[1]/tbody[1]/tr[88]/td[3]/span[1]/a[1]\",\n );\n });\n});\n"],
5
+ "mappings": "AAAA,SAAS,QAAQ,YAAY;AAC7B,SAAS,UAAU;AACnB,SAAS,2BAA2B;AACpC,SAAS,+BAA+B;AACxC,SAAS,yBAAyB;AAClC,SAAS,eAAe;AAExB,KAAK,SAAS,8BAA8B,MAAM;AAChD,MAAI;AAEJ,OAAK,WAAW,YAAY;AAC1B,SAAK,IAAI,GAAG,mBAAmB;AAC/B,UAAM,GAAG,KAAK;AAAA,EAChB,CAAC;AAED,OAAK,UAAU,YAAY;AACzB,UAAM,QAAQ,EAAE;AAAA,EAClB,CAAC;AAED,OAAK,wEAAwE,YAAY;AACvF,UAAM,OAAO,MAAM,GAAG,QAAQ,gBAAgB;AAG9C,UAAM,KAAK,gBAAgB,MAAM,GAAG;AAEpC,UAAM,KAAK;AAAA,MACT;AAAA,MACA,EAAE,WAAW,cAAc;AAAA,IAC7B;AAEA,UAAM,KAAK,gBAAgB,kBAAkB;AAAA,MAC3C,OAAO;AAAA,MACP,SAAS;AAAA,IACX,CAAC;AACD,UAAM,QAAQ,MAAM,KAAK,aAAa,gBAAgB,EAAE,aAAa;AACrE,UAAM,kBAAkB;AAAA,MACtB,MAAM;AAAA,MACN,MAAM;AAAA,MACN;AAAA,IACF;AAGA,UAAM,KAAK,SAAS,MAAM;AACxB,aAAO,SAAS,GAAG,SAAS,KAAK,YAAY;AAAA,IAC/C,CAAC;AAGD,UAAM,MAAM,SAAS,MAAM;AACzB,aAAO,SAAS,GAAG,SAAS,KAAK,YAAY;AAAA,IAC/C,CAAC;AAGD,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AAGvD,UAAM,eAAe,MAAM,KAAK,SAAS,MAAM;AAC7C,YAAM,SAAS,SAAS,cAAc,gBAAgB;AACtD,UAAI,CAAC,OAAQ,QAAO;AACpB,YAAM,OAAO,OAAO,sBAAsB;AAC1C,aAAO;AAAA,QACL,MAAM,KAAK;AAAA,QACX,KAAK,KAAK;AAAA,MACZ;AAAA,IACF,CAAC;AAGD,UAAM,oBAAoB,MAAM,MAAM,SAAS,MAAM;AAEnD,YAAM,QAAQ,SAAS;AAAA,QACrB;AAAA,MACF;AACA,UAAI,CAAC,MAAO,QAAO;AAEnB,YAAM,QAAQ,MAAM,cAAc,0BAA0B;AAC5D,UAAI,CAAC,MAAO,QAAO;AAEnB,YAAM,QAAQ,MAAM,cAAc,iBAAiB;AACnD,UAAI,CAAC,MAAO,QAAO;AAEnB,YAAM,OAAO,MAAM,cAAc,UAAU;AAC3C,UAAI,CAAC,KAAM,QAAO;AAElB,YAAM,OAAO,KAAK,sBAAsB;AAExC,aAAO;AAAA,QACL,GAAG,KAAK,OAAO,KAAK,QAAQ;AAAA,QAC5B,GAAG,KAAK,MAAM,KAAK,SAAS;AAAA,MAC9B;AAAA,IACF,CAAC;AAID,UAAM,IACJ,gBAAgB,oBACZ,aAAa,OAAO,kBAAkB,IACtC;AACN,UAAM,IACJ,gBAAgB,oBACZ,aAAa,MAAM,kBAAkB,IACrC;AAEN,UAAM,SAAS,MAAM,wBAAwB,MAAM,GAAG,CAAC;AACvD,YAAQ,IAAI,yBAAyB,EAAE,GAAG,EAAE,CAAC;AAC7C,YAAQ,IAAI,eAAe,MAAM;AACjC,UAAM,QAAQ,OAAO;AACrB,WAAO,KAAK,EAAE;AAAA,MACZ;AAAA,IACF;AAAA,EACF,CAAC;AACH,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ export declare function getEnvTimeoutMs(name: string): number | undefined;
2
+ export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, operation: string): Promise<T>;
@@ -0,0 +1,27 @@
1
+ import { TimeoutError } from "./types/public/sdkErrors.js";
2
+ export function getEnvTimeoutMs(name) {
3
+ const raw = process.env[name];
4
+ if (!raw)
5
+ return undefined;
6
+ const normalized = raw.trim().replace(/ms$/i, "");
7
+ const value = Number(normalized);
8
+ if (!Number.isFinite(value) || value <= 0)
9
+ return undefined;
10
+ return value;
11
+ }
12
+ export async function withTimeout(promise, timeoutMs, operation) {
13
+ let timeoutId;
14
+ const timeoutPromise = new Promise((_, reject) => {
15
+ timeoutId = setTimeout(() => {
16
+ reject(new TimeoutError(operation, timeoutMs));
17
+ }, timeoutMs);
18
+ });
19
+ try {
20
+ return await Promise.race([promise, timeoutPromise]);
21
+ }
22
+ finally {
23
+ if (timeoutId)
24
+ clearTimeout(timeoutId);
25
+ }
26
+ }
27
+ //# sourceMappingURL=timeoutConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeoutConfig.js","sourceRoot":"","sources":["../../../../lib/v3/timeoutConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAmB,EACnB,SAAiB,EACjB,SAAiB;IAEjB,IAAI,SAAqC,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IACvD,CAAC;YAAS,CAAC;QACT,IAAI,SAAS;YAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;AACH,CAAC","sourcesContent":["import { TimeoutError } from \"./types/public/sdkErrors.js\";\n\nexport function getEnvTimeoutMs(name: string): number | undefined {\n const raw = process.env[name];\n if (!raw) return undefined;\n const normalized = raw.trim().replace(/ms$/i, \"\");\n const value = Number(normalized);\n if (!Number.isFinite(value) || value <= 0) return undefined;\n return value;\n}\n\nexport async function withTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number,\n operation: string,\n): Promise<T> {\n let timeoutId: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => {\n reject(new TimeoutError(operation, timeoutMs));\n }, timeoutMs);\n });\n try {\n return await Promise.race([promise, timeoutPromise]);\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export interface ActionMappingOptions {
2
+ toolCallName: string;
3
+ toolResult: unknown;
4
+ args: Record<string, unknown>;
5
+ reasoning?: string;
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/private/agent.ts"],"names":[],"mappings":"","sourcesContent":["export interface ActionMappingOptions {\n toolCallName: string;\n toolResult: unknown;\n args: Record<string, unknown>;\n reasoning?: string;\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { Protocol } from "devtools-protocol";
2
+ export interface SerializableResponse {
3
+ requestId: string;
4
+ frameId?: string;
5
+ loaderId?: string;
6
+ response: Protocol.Network.Response;
7
+ fromServiceWorkerFlag?: boolean;
8
+ finishedSettled?: boolean;
9
+ extraInfoHeaders?: Protocol.Network.Headers | null;
10
+ extraInfoHeadersText?: string;
11
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/private/api.ts"],"names":[],"mappings":"","sourcesContent":["import type { Protocol } from \"devtools-protocol\";\n\nexport interface SerializableResponse {\n requestId: string;\n frameId?: string;\n loaderId?: string;\n response: Protocol.Network.Response;\n fromServiceWorkerFlag?: boolean;\n finishedSettled?: boolean;\n extraInfoHeaders?: Protocol.Network.Headers | null;\n extraInfoHeadersText?: string;\n}\n"]}
@@ -0,0 +1,128 @@
1
+ import type { ActOptions, ActResult, AvailableModel, Logger, AgentResult, Action, LoadState } from "../public/index.js";
2
+ import { CacheStorage } from "../../cache/CacheStorage.js";
3
+ import type { ActHandler } from "../../handlers/actHandler.js";
4
+ import type { V3Context } from "../../understudy/context.js";
5
+ import type { LLMClient } from "../../llm/LLMClient.js";
6
+ export type ActFn = (instruction: string, options?: ActOptions) => Promise<ActResult>;
7
+ export type AgentCacheContext = {
8
+ instruction: string;
9
+ startUrl: string;
10
+ options: SanitizedAgentExecuteOptions;
11
+ configSignature: string;
12
+ cacheKey: string;
13
+ };
14
+ export type AgentCacheTransferPayload = {
15
+ cacheKey: string;
16
+ entry: CachedAgentEntry;
17
+ };
18
+ export type AgentCacheDeps = {
19
+ storage: CacheStorage;
20
+ logger: Logger;
21
+ getActHandler: () => ActHandler | null;
22
+ getContext: () => V3Context | null;
23
+ getDefaultLlmClient: () => LLMClient;
24
+ getBaseModelName: () => AvailableModel;
25
+ getSystemPrompt: () => string | undefined;
26
+ domSettleTimeoutMs?: number;
27
+ act: ActFn;
28
+ bufferLatestEntry?: boolean;
29
+ };
30
+ export type ActCacheContext = {
31
+ instruction: string;
32
+ cacheKey: string;
33
+ pageUrl: string;
34
+ variableKeys: string[];
35
+ variables?: Record<string, string>;
36
+ };
37
+ export type ActCacheDeps = {
38
+ storage: CacheStorage;
39
+ logger: Logger;
40
+ getActHandler: () => ActHandler | null;
41
+ getDefaultLlmClient: () => LLMClient;
42
+ domSettleTimeoutMs?: number;
43
+ };
44
+ export type ReadJsonResult<T> = {
45
+ value: T | null;
46
+ path?: string;
47
+ error?: unknown;
48
+ };
49
+ export type WriteJsonResult = {
50
+ path?: string;
51
+ error?: unknown;
52
+ };
53
+ export interface CachedActEntry {
54
+ version: 1;
55
+ instruction: string;
56
+ url: string;
57
+ variableKeys: string[];
58
+ actions: Action[];
59
+ actionDescription?: string;
60
+ message?: string;
61
+ }
62
+ export type AgentReplayStep = AgentReplayActStep | AgentReplayFillFormStep | AgentReplayGotoStep | AgentReplayScrollStep | AgentReplayWaitStep | AgentReplayNavBackStep | AgentReplayKeysStep | {
63
+ type: string;
64
+ [key: string]: unknown;
65
+ };
66
+ export interface AgentReplayActStep {
67
+ type: "act";
68
+ instruction: string;
69
+ actions?: Action[];
70
+ actionDescription?: string;
71
+ message?: string;
72
+ timeout?: number;
73
+ }
74
+ export interface AgentReplayFillFormStep {
75
+ type: "fillForm";
76
+ fields?: Array<{
77
+ action: string;
78
+ value: string;
79
+ }>;
80
+ observeResults?: Action[];
81
+ actions?: Action[];
82
+ }
83
+ export interface AgentReplayGotoStep {
84
+ type: "goto";
85
+ url: string;
86
+ waitUntil?: LoadState;
87
+ }
88
+ export interface AgentReplayScrollStep {
89
+ type: "scroll";
90
+ deltaX?: number;
91
+ deltaY?: number;
92
+ anchor?: {
93
+ x: number;
94
+ y: number;
95
+ };
96
+ }
97
+ export interface AgentReplayWaitStep {
98
+ type: "wait";
99
+ timeMs: number;
100
+ }
101
+ export interface AgentReplayNavBackStep {
102
+ type: "navback";
103
+ waitUntil?: LoadState;
104
+ }
105
+ export interface AgentReplayKeysStep {
106
+ type: "keys";
107
+ instruction?: string;
108
+ playwrightArguments: {
109
+ method: "type" | "press";
110
+ text?: string;
111
+ keys?: string;
112
+ times?: number;
113
+ };
114
+ }
115
+ export interface SanitizedAgentExecuteOptions {
116
+ maxSteps?: number;
117
+ highlightCursor?: boolean;
118
+ }
119
+ export interface CachedAgentEntry {
120
+ version: 1;
121
+ instruction: string;
122
+ startUrl: string;
123
+ options: SanitizedAgentExecuteOptions;
124
+ configSignature: string;
125
+ steps: AgentReplayStep[];
126
+ result: AgentResult;
127
+ timestamp: string;
128
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/private/cache.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ActOptions,\n ActResult,\n AvailableModel,\n Logger,\n AgentResult,\n Action,\n LoadState,\n} from \"../public/index.js\";\nimport { CacheStorage } from \"../../cache/CacheStorage.js\";\nimport type { ActHandler } from \"../../handlers/actHandler.js\";\nimport type { V3Context } from \"../../understudy/context.js\";\nimport type { LLMClient } from \"../../llm/LLMClient.js\";\n\nexport type ActFn = (\n instruction: string,\n options?: ActOptions,\n) => Promise<ActResult>;\n\nexport type AgentCacheContext = {\n instruction: string;\n startUrl: string;\n options: SanitizedAgentExecuteOptions;\n configSignature: string;\n cacheKey: string;\n};\n\nexport type AgentCacheTransferPayload = {\n cacheKey: string;\n entry: CachedAgentEntry;\n};\n\nexport type AgentCacheDeps = {\n storage: CacheStorage;\n logger: Logger;\n getActHandler: () => ActHandler | null;\n getContext: () => V3Context | null;\n getDefaultLlmClient: () => LLMClient;\n getBaseModelName: () => AvailableModel;\n getSystemPrompt: () => string | undefined;\n domSettleTimeoutMs?: number;\n act: ActFn;\n bufferLatestEntry?: boolean;\n};\n\nexport type ActCacheContext = {\n instruction: string;\n cacheKey: string;\n pageUrl: string;\n variableKeys: string[];\n variables?: Record<string, string>;\n};\n\nexport type ActCacheDeps = {\n storage: CacheStorage;\n logger: Logger;\n getActHandler: () => ActHandler | null;\n getDefaultLlmClient: () => LLMClient;\n domSettleTimeoutMs?: number;\n};\n\nexport type ReadJsonResult<T> = {\n value: T | null;\n path?: string;\n error?: unknown;\n};\n\nexport type WriteJsonResult = {\n path?: string;\n error?: unknown;\n};\n\nexport interface CachedActEntry {\n version: 1;\n instruction: string;\n url: string;\n variableKeys: string[];\n actions: Action[];\n actionDescription?: string;\n message?: string;\n}\n\nexport type AgentReplayStep =\n | AgentReplayActStep\n | AgentReplayFillFormStep\n | AgentReplayGotoStep\n | AgentReplayScrollStep\n | AgentReplayWaitStep\n | AgentReplayNavBackStep\n | AgentReplayKeysStep\n | { type: string; [key: string]: unknown };\n\nexport interface AgentReplayActStep {\n type: \"act\";\n instruction: string;\n actions?: Action[];\n actionDescription?: string;\n message?: string;\n timeout?: number;\n}\n\nexport interface AgentReplayFillFormStep {\n type: \"fillForm\";\n fields?: Array<{ action: string; value: string }>;\n observeResults?: Action[];\n actions?: Action[];\n}\n\nexport interface AgentReplayGotoStep {\n type: \"goto\";\n url: string;\n waitUntil?: LoadState;\n}\n\nexport interface AgentReplayScrollStep {\n type: \"scroll\";\n deltaX?: number;\n deltaY?: number;\n anchor?: { x: number; y: number };\n}\n\nexport interface AgentReplayWaitStep {\n type: \"wait\";\n timeMs: number;\n}\n\nexport interface AgentReplayNavBackStep {\n type: \"navback\";\n waitUntil?: LoadState;\n}\n\nexport interface AgentReplayKeysStep {\n type: \"keys\";\n instruction?: string;\n playwrightArguments: {\n method: \"type\" | \"press\";\n text?: string;\n keys?: string;\n times?: number;\n };\n}\n\nexport interface SanitizedAgentExecuteOptions {\n maxSteps?: number;\n highlightCursor?: boolean;\n}\n\nexport interface CachedAgentEntry {\n version: 1;\n instruction: string;\n startUrl: string;\n options: SanitizedAgentExecuteOptions;\n configSignature: string;\n steps: AgentReplayStep[];\n result: AgentResult;\n timestamp: string;\n}\n"]}
@@ -0,0 +1,40 @@
1
+ export type EvaluateOptions = {
2
+ /** The question to ask about the task state */
3
+ question: string;
4
+ /** The answer to the question */
5
+ answer?: string;
6
+ /** Whether to take a screenshot of the task state, or array of screenshots to evaluate */
7
+ screenshot?: boolean | Buffer[];
8
+ /** Custom system prompt for the evaluator */
9
+ systemPrompt?: string;
10
+ /** Delay in milliseconds before taking the screenshot @default 250 */
11
+ screenshotDelayMs?: number;
12
+ /** The agent's reasoning/thought process for completing the task */
13
+ agentReasoning?: string;
14
+ };
15
+ export type BatchAskOptions = {
16
+ /** Array of questions with optional answers */
17
+ questions: Array<{
18
+ question: string;
19
+ answer?: string;
20
+ }>;
21
+ /** Whether to take a screenshot of the task state */
22
+ screenshot?: boolean;
23
+ /** Custom system prompt for the evaluator */
24
+ systemPrompt?: string;
25
+ /** Delay in milliseconds before taking the screenshot @default 1000 */
26
+ screenshotDelayMs?: number;
27
+ };
28
+ /**
29
+ * Result of an evaluation
30
+ */
31
+ export interface EvaluationResult {
32
+ /**
33
+ * The evaluation result ('YES', 'NO', or 'INVALID' if parsing failed or value was unexpected)
34
+ */
35
+ evaluation: "YES" | "NO" | "INVALID";
36
+ /**
37
+ * The reasoning behind the evaluation
38
+ */
39
+ reasoning: string;
40
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/private/evaluator.ts"],"names":[],"mappings":"","sourcesContent":["export type EvaluateOptions = {\n /** The question to ask about the task state */\n question: string;\n /** The answer to the question */\n answer?: string;\n /** Whether to take a screenshot of the task state, or array of screenshots to evaluate */\n screenshot?: boolean | Buffer[];\n /** Custom system prompt for the evaluator */\n systemPrompt?: string;\n /** Delay in milliseconds before taking the screenshot @default 250 */\n screenshotDelayMs?: number;\n /** The agent's reasoning/thought process for completing the task */\n agentReasoning?: string;\n};\n\nexport type BatchAskOptions = {\n /** Array of questions with optional answers */\n questions: Array<{\n question: string;\n answer?: string;\n }>;\n /** Whether to take a screenshot of the task state */\n screenshot?: boolean;\n /** Custom system prompt for the evaluator */\n systemPrompt?: string;\n /** Delay in milliseconds before taking the screenshot @default 1000 */\n screenshotDelayMs?: number;\n};\n\n/**\n * Result of an evaluation\n */\nexport interface EvaluationResult {\n /**\n * The evaluation result ('YES', 'NO', or 'INVALID' if parsing failed or value was unexpected)\n */\n evaluation: \"YES\" | \"NO\" | \"INVALID\";\n /**\n * The reasoning behind the evaluation\n */\n reasoning: string;\n}\n"]}