@browserbasehq/orca 3.5.0-vertex-test → 3.6.0-gemini-cua

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 (290) hide show
  1. package/README.md +7 -15
  2. package/dist/cjs/lib/utils.d.ts +8 -0
  3. package/dist/cjs/lib/utils.js +31 -0
  4. package/dist/cjs/lib/utils.js.map +1 -1
  5. package/dist/cjs/lib/v3/agent/AgentProvider.js +5 -3
  6. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  7. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +10 -8
  8. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  9. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +124 -28
  10. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  11. package/dist/cjs/lib/v3/agent/utils/captureAriaTreeProbe.d.ts +35 -0
  12. package/dist/cjs/lib/v3/agent/utils/captureAriaTreeProbe.js +38 -0
  13. package/dist/cjs/lib/v3/agent/utils/captureAriaTreeProbe.js.map +1 -0
  14. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +10 -1
  15. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  16. package/dist/cjs/lib/v3/agent/utils/postStepProbeEvidence.d.ts +19 -0
  17. package/dist/cjs/lib/v3/agent/utils/postStepProbeEvidence.js +54 -0
  18. package/dist/cjs/lib/v3/agent/utils/postStepProbeEvidence.js.map +1 -0
  19. package/dist/cjs/lib/v3/agent/utils/toolOutputEvidence.d.ts +2 -0
  20. package/dist/cjs/lib/v3/agent/utils/toolOutputEvidence.js +62 -0
  21. package/dist/cjs/lib/v3/agent/utils/toolOutputEvidence.js.map +1 -0
  22. package/dist/cjs/lib/v3/agent/utils/wrapEvidenceCallback.d.ts +3 -0
  23. package/dist/cjs/lib/v3/agent/utils/wrapEvidenceCallback.js +25 -0
  24. package/dist/cjs/lib/v3/agent/utils/wrapEvidenceCallback.js.map +1 -0
  25. package/dist/cjs/lib/v3/api.d.ts +1 -0
  26. package/dist/cjs/lib/v3/api.js +37 -16
  27. package/dist/cjs/lib/v3/api.js.map +1 -1
  28. package/dist/cjs/lib/v3/cache/ActCache.js +1 -1
  29. package/dist/cjs/lib/v3/cache/ActCache.js.map +1 -1
  30. package/dist/cjs/lib/v3/cache/utils.d.ts +7 -0
  31. package/dist/cjs/lib/v3/cache/utils.js +19 -0
  32. package/dist/cjs/lib/v3/cache/utils.js.map +1 -1
  33. package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.d.ts +24 -24
  34. package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.js +24 -24
  35. package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.js.map +1 -1
  36. package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.js +79 -10
  37. package/dist/cjs/lib/v3/dom/locatorScripts/xpathResolver.js.map +1 -1
  38. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +3 -1
  39. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +108 -16
  40. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  41. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +11 -0
  42. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +119 -5
  43. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  44. package/dist/cjs/lib/v3/index.d.ts +13 -1
  45. package/dist/cjs/lib/v3/index.js +19 -1
  46. package/dist/cjs/lib/v3/index.js.map +1 -1
  47. package/dist/cjs/lib/v3/launch/local.js +1 -0
  48. package/dist/cjs/lib/v3/launch/local.js.map +1 -1
  49. package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +3 -0
  50. package/dist/cjs/lib/v3/llm/LLMProvider.js +45 -3
  51. package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
  52. package/dist/cjs/lib/v3/llm/aisdk.js +4 -0
  53. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  54. package/dist/cjs/lib/v3/llm/anthropicOptions.d.ts +57 -0
  55. package/dist/cjs/lib/v3/llm/anthropicOptions.js +115 -0
  56. package/dist/cjs/lib/v3/llm/anthropicOptions.js.map +1 -0
  57. package/dist/cjs/lib/v3/types/public/agent.d.ts +8 -2
  58. package/dist/cjs/lib/v3/types/public/agent.js +3 -0
  59. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  60. package/dist/cjs/lib/v3/types/public/agentEvidenceEvents.d.ts +85 -0
  61. package/dist/cjs/lib/v3/types/public/agentEvidenceEvents.js +15 -0
  62. package/dist/cjs/lib/v3/types/public/agentEvidenceEvents.js.map +1 -0
  63. package/dist/cjs/lib/v3/types/public/api.d.ts +925 -182
  64. package/dist/cjs/lib/v3/types/public/api.js +138 -20
  65. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  66. package/dist/cjs/lib/v3/types/public/clipboard.d.ts +15 -0
  67. package/dist/cjs/lib/v3/types/public/clipboard.js +3 -0
  68. package/dist/cjs/lib/v3/types/public/clipboard.js.map +1 -0
  69. package/dist/cjs/lib/v3/types/public/index.d.ts +2 -0
  70. package/dist/cjs/lib/v3/types/public/index.js +2 -0
  71. package/dist/cjs/lib/v3/types/public/index.js.map +1 -1
  72. package/dist/cjs/lib/v3/types/public/model.d.ts +33 -8
  73. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  74. package/dist/cjs/lib/v3/types/public/page.d.ts +29 -0
  75. package/dist/cjs/lib/v3/types/public/page.js.map +1 -1
  76. package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +3 -0
  77. package/dist/cjs/lib/v3/types/public/sdkErrors.js +8 -2
  78. package/dist/cjs/lib/v3/types/public/sdkErrors.js.map +1 -1
  79. package/dist/cjs/lib/v3/understudy/clipboard.d.ts +24 -0
  80. package/dist/cjs/lib/v3/understudy/clipboard.js +166 -0
  81. package/dist/cjs/lib/v3/understudy/clipboard.js.map +1 -0
  82. package/dist/cjs/lib/v3/understudy/context.d.ts +3 -0
  83. package/dist/cjs/lib/v3/understudy/context.js +15 -0
  84. package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
  85. package/dist/cjs/lib/v3/understudy/page.d.ts +23 -1
  86. package/dist/cjs/lib/v3/understudy/page.js +283 -0
  87. package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
  88. package/dist/cjs/lib/v3/v3.js +19 -7
  89. package/dist/cjs/lib/v3/v3.js.map +1 -1
  90. package/dist/cjs/lib/v3/verifier/errorTaxonomy.d.ts +35 -0
  91. package/dist/cjs/lib/v3/verifier/errorTaxonomy.js +291 -0
  92. package/dist/cjs/lib/v3/verifier/errorTaxonomy.js.map +1 -0
  93. package/dist/cjs/lib/v3/verifier/evidence.d.ts +44 -0
  94. package/dist/cjs/lib/v3/verifier/evidence.js +432 -0
  95. package/dist/cjs/lib/v3/verifier/evidence.js.map +1 -0
  96. package/dist/cjs/lib/v3/verifier/evidenceNormalization.d.ts +7 -0
  97. package/dist/cjs/lib/v3/verifier/evidenceNormalization.js +100 -0
  98. package/dist/cjs/lib/v3/verifier/evidenceNormalization.js.map +1 -0
  99. package/dist/cjs/lib/v3/verifier/index.d.ts +6 -0
  100. package/dist/cjs/lib/v3/verifier/index.js +16 -0
  101. package/dist/cjs/lib/v3/verifier/index.js.map +1 -0
  102. package/dist/cjs/lib/v3/verifier/prompts/batchedRelevance.d.ts +21 -0
  103. package/dist/cjs/lib/v3/verifier/prompts/batchedRelevance.js +71 -0
  104. package/dist/cjs/lib/v3/verifier/prompts/batchedRelevance.js.map +1 -0
  105. package/dist/cjs/lib/v3/verifier/prompts/firstPointOfFailure.d.ts +3 -0
  106. package/dist/cjs/lib/v3/verifier/prompts/firstPointOfFailure.js +166 -0
  107. package/dist/cjs/lib/v3/verifier/prompts/firstPointOfFailure.js.map +1 -0
  108. package/dist/cjs/lib/v3/verifier/prompts/fusedJudgment.d.ts +35 -0
  109. package/dist/cjs/lib/v3/verifier/prompts/fusedJudgment.js +158 -0
  110. package/dist/cjs/lib/v3/verifier/prompts/fusedJudgment.js.map +1 -0
  111. package/dist/cjs/lib/v3/verifier/prompts/fusedOutcome.d.ts +26 -0
  112. package/dist/cjs/lib/v3/verifier/prompts/fusedOutcome.js +137 -0
  113. package/dist/cjs/lib/v3/verifier/prompts/fusedOutcome.js.map +1 -0
  114. package/dist/cjs/lib/v3/verifier/prompts/index.d.ts +8 -0
  115. package/dist/cjs/lib/v3/verifier/prompts/index.js +22 -0
  116. package/dist/cjs/lib/v3/verifier/prompts/index.js.map +1 -0
  117. package/dist/cjs/lib/v3/verifier/prompts/perCriterionScore.d.ts +23 -0
  118. package/dist/cjs/lib/v3/verifier/prompts/perCriterionScore.js +77 -0
  119. package/dist/cjs/lib/v3/verifier/prompts/perCriterionScore.js.map +1 -0
  120. package/dist/cjs/lib/v3/verifier/prompts/render.d.ts +23 -0
  121. package/dist/cjs/lib/v3/verifier/prompts/render.js +45 -0
  122. package/dist/cjs/lib/v3/verifier/prompts/render.js.map +1 -0
  123. package/dist/cjs/lib/v3/verifier/prompts/rubricGeneration.d.ts +16 -0
  124. package/dist/cjs/lib/v3/verifier/prompts/rubricGeneration.js +321 -0
  125. package/dist/cjs/lib/v3/verifier/prompts/rubricGeneration.js.map +1 -0
  126. package/dist/cjs/lib/v3/verifier/prompts/taskValidity.d.ts +1 -0
  127. package/dist/cjs/lib/v3/verifier/prompts/taskValidity.js +116 -0
  128. package/dist/cjs/lib/v3/verifier/prompts/taskValidity.js.map +1 -0
  129. package/dist/cjs/lib/v3/verifier/rubricVerifier.d.ts +91 -0
  130. package/dist/cjs/lib/v3/verifier/rubricVerifier.js +1645 -0
  131. package/dist/cjs/lib/v3/verifier/rubricVerifier.js.map +1 -0
  132. package/dist/cjs/lib/v3/verifier/trajectory.d.ts +50 -0
  133. package/dist/cjs/lib/v3/verifier/trajectory.js +316 -0
  134. package/dist/cjs/lib/v3/verifier/trajectory.js.map +1 -0
  135. package/dist/cjs/lib/v3/verifier/types.d.ts +429 -0
  136. package/dist/cjs/lib/v3/verifier/types.js +3 -0
  137. package/dist/cjs/lib/v3/verifier/types.js.map +1 -0
  138. package/dist/cjs/lib/v3Evaluator.d.ts +14 -4
  139. package/dist/cjs/lib/v3Evaluator.js +189 -1
  140. package/dist/cjs/lib/v3Evaluator.js.map +1 -1
  141. package/dist/cjs/lib/v3LegacyEvaluator.js +5 -1
  142. package/dist/cjs/lib/v3LegacyEvaluator.js.map +1 -1
  143. package/dist/cjs/lib/version.d.ts +1 -1
  144. package/dist/cjs/lib/version.js +1 -1
  145. package/dist/cjs/lib/version.js.map +1 -1
  146. package/dist/esm/lib/utils.d.ts +8 -0
  147. package/dist/esm/lib/utils.js +28 -0
  148. package/dist/esm/lib/utils.js.map +1 -1
  149. package/dist/esm/lib/v3/agent/AgentProvider.js +5 -3
  150. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  151. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +10 -8
  152. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  153. package/dist/esm/lib/v3/agent/GoogleCUAClient.js +124 -28
  154. package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  155. package/dist/esm/lib/v3/agent/utils/captureAriaTreeProbe.d.ts +35 -0
  156. package/dist/esm/lib/v3/agent/utils/captureAriaTreeProbe.js +35 -0
  157. package/dist/esm/lib/v3/agent/utils/captureAriaTreeProbe.js.map +1 -0
  158. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +10 -1
  159. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  160. package/dist/esm/lib/v3/agent/utils/postStepProbeEvidence.d.ts +19 -0
  161. package/dist/esm/lib/v3/agent/utils/postStepProbeEvidence.js +50 -0
  162. package/dist/esm/lib/v3/agent/utils/postStepProbeEvidence.js.map +1 -0
  163. package/dist/esm/lib/v3/agent/utils/toolOutputEvidence.d.ts +2 -0
  164. package/dist/esm/lib/v3/agent/utils/toolOutputEvidence.js +59 -0
  165. package/dist/esm/lib/v3/agent/utils/toolOutputEvidence.js.map +1 -0
  166. package/dist/esm/lib/v3/agent/utils/wrapEvidenceCallback.d.ts +3 -0
  167. package/dist/esm/lib/v3/agent/utils/wrapEvidenceCallback.js +22 -0
  168. package/dist/esm/lib/v3/agent/utils/wrapEvidenceCallback.js.map +1 -0
  169. package/dist/esm/lib/v3/api.d.ts +1 -0
  170. package/dist/esm/lib/v3/api.js +38 -17
  171. package/dist/esm/lib/v3/api.js.map +1 -1
  172. package/dist/esm/lib/v3/cache/ActCache.js +2 -2
  173. package/dist/esm/lib/v3/cache/ActCache.js.map +1 -1
  174. package/dist/esm/lib/v3/cache/utils.d.ts +7 -0
  175. package/dist/esm/lib/v3/cache/utils.js +18 -0
  176. package/dist/esm/lib/v3/cache/utils.js.map +1 -1
  177. package/dist/esm/lib/v3/dom/build/locatorScripts.generated.d.ts +24 -24
  178. package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js +24 -24
  179. package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js.map +1 -1
  180. package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js +79 -10
  181. package/dist/esm/lib/v3/dom/locatorScripts/xpathResolver.js.map +1 -1
  182. package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +3 -1
  183. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +108 -16
  184. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  185. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +11 -0
  186. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +119 -5
  187. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  188. package/dist/esm/lib/v3/index.d.ts +13 -1
  189. package/dist/esm/lib/v3/index.js +10 -0
  190. package/dist/esm/lib/v3/index.js.map +1 -1
  191. package/dist/esm/lib/v3/launch/local.js +1 -0
  192. package/dist/esm/lib/v3/launch/local.js.map +1 -1
  193. package/dist/esm/lib/v3/llm/LLMProvider.d.ts +3 -0
  194. package/dist/esm/lib/v3/llm/LLMProvider.js +44 -3
  195. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
  196. package/dist/esm/lib/v3/llm/aisdk.js +4 -0
  197. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  198. package/dist/esm/lib/v3/llm/anthropicOptions.d.ts +57 -0
  199. package/dist/esm/lib/v3/llm/anthropicOptions.js +106 -0
  200. package/dist/esm/lib/v3/llm/anthropicOptions.js.map +1 -0
  201. package/dist/esm/lib/v3/types/public/agent.d.ts +8 -2
  202. package/dist/esm/lib/v3/types/public/agent.js +3 -0
  203. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  204. package/dist/esm/lib/v3/types/public/agentEvidenceEvents.d.ts +85 -0
  205. package/dist/esm/lib/v3/types/public/agentEvidenceEvents.js +14 -0
  206. package/dist/esm/lib/v3/types/public/agentEvidenceEvents.js.map +1 -0
  207. package/dist/esm/lib/v3/types/public/api.d.ts +925 -182
  208. package/dist/esm/lib/v3/types/public/api.js +136 -18
  209. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  210. package/dist/esm/lib/v3/types/public/clipboard.d.ts +15 -0
  211. package/dist/esm/lib/v3/types/public/clipboard.js +2 -0
  212. package/dist/esm/lib/v3/types/public/clipboard.js.map +1 -0
  213. package/dist/esm/lib/v3/types/public/index.d.ts +2 -0
  214. package/dist/esm/lib/v3/types/public/index.js +2 -0
  215. package/dist/esm/lib/v3/types/public/index.js.map +1 -1
  216. package/dist/esm/lib/v3/types/public/model.d.ts +33 -8
  217. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  218. package/dist/esm/lib/v3/types/public/page.d.ts +29 -0
  219. package/dist/esm/lib/v3/types/public/page.js.map +1 -1
  220. package/dist/esm/lib/v3/types/public/sdkErrors.d.ts +3 -0
  221. package/dist/esm/lib/v3/types/public/sdkErrors.js +5 -0
  222. package/dist/esm/lib/v3/types/public/sdkErrors.js.map +1 -1
  223. package/dist/esm/lib/v3/understudy/clipboard.d.ts +24 -0
  224. package/dist/esm/lib/v3/understudy/clipboard.js +163 -0
  225. package/dist/esm/lib/v3/understudy/clipboard.js.map +1 -0
  226. package/dist/esm/lib/v3/understudy/context.d.ts +3 -0
  227. package/dist/esm/lib/v3/understudy/context.js +15 -0
  228. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  229. package/dist/esm/lib/v3/understudy/page.d.ts +23 -1
  230. package/dist/esm/lib/v3/understudy/page.js +284 -1
  231. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  232. package/dist/esm/lib/v3/v3.js +20 -8
  233. package/dist/esm/lib/v3/v3.js.map +1 -1
  234. package/dist/esm/lib/v3/verifier/errorTaxonomy.d.ts +35 -0
  235. package/dist/esm/lib/v3/verifier/errorTaxonomy.js +285 -0
  236. package/dist/esm/lib/v3/verifier/errorTaxonomy.js.map +1 -0
  237. package/dist/esm/lib/v3/verifier/evidence.d.ts +44 -0
  238. package/dist/esm/lib/v3/verifier/evidence.js +393 -0
  239. package/dist/esm/lib/v3/verifier/evidence.js.map +1 -0
  240. package/dist/esm/lib/v3/verifier/evidenceNormalization.d.ts +7 -0
  241. package/dist/esm/lib/v3/verifier/evidenceNormalization.js +93 -0
  242. package/dist/esm/lib/v3/verifier/evidenceNormalization.js.map +1 -0
  243. package/dist/esm/lib/v3/verifier/index.d.ts +6 -0
  244. package/dist/esm/lib/v3/verifier/index.js +3 -0
  245. package/dist/esm/lib/v3/verifier/index.js.map +1 -0
  246. package/dist/esm/lib/v3/verifier/prompts/batchedRelevance.d.ts +21 -0
  247. package/dist/esm/lib/v3/verifier/prompts/batchedRelevance.js +68 -0
  248. package/dist/esm/lib/v3/verifier/prompts/batchedRelevance.js.map +1 -0
  249. package/dist/esm/lib/v3/verifier/prompts/firstPointOfFailure.d.ts +3 -0
  250. package/dist/esm/lib/v3/verifier/prompts/firstPointOfFailure.js +162 -0
  251. package/dist/esm/lib/v3/verifier/prompts/firstPointOfFailure.js.map +1 -0
  252. package/dist/esm/lib/v3/verifier/prompts/fusedJudgment.d.ts +35 -0
  253. package/dist/esm/lib/v3/verifier/prompts/fusedJudgment.js +155 -0
  254. package/dist/esm/lib/v3/verifier/prompts/fusedJudgment.js.map +1 -0
  255. package/dist/esm/lib/v3/verifier/prompts/fusedOutcome.d.ts +26 -0
  256. package/dist/esm/lib/v3/verifier/prompts/fusedOutcome.js +134 -0
  257. package/dist/esm/lib/v3/verifier/prompts/fusedOutcome.js.map +1 -0
  258. package/dist/esm/lib/v3/verifier/prompts/index.d.ts +8 -0
  259. package/dist/esm/lib/v3/verifier/prompts/index.js +9 -0
  260. package/dist/esm/lib/v3/verifier/prompts/index.js.map +1 -0
  261. package/dist/esm/lib/v3/verifier/prompts/perCriterionScore.d.ts +23 -0
  262. package/dist/esm/lib/v3/verifier/prompts/perCriterionScore.js +74 -0
  263. package/dist/esm/lib/v3/verifier/prompts/perCriterionScore.js.map +1 -0
  264. package/dist/esm/lib/v3/verifier/prompts/render.d.ts +23 -0
  265. package/dist/esm/lib/v3/verifier/prompts/render.js +41 -0
  266. package/dist/esm/lib/v3/verifier/prompts/render.js.map +1 -0
  267. package/dist/esm/lib/v3/verifier/prompts/rubricGeneration.d.ts +16 -0
  268. package/dist/esm/lib/v3/verifier/prompts/rubricGeneration.js +318 -0
  269. package/dist/esm/lib/v3/verifier/prompts/rubricGeneration.js.map +1 -0
  270. package/dist/esm/lib/v3/verifier/prompts/taskValidity.d.ts +1 -0
  271. package/dist/esm/lib/v3/verifier/prompts/taskValidity.js +113 -0
  272. package/dist/esm/lib/v3/verifier/prompts/taskValidity.js.map +1 -0
  273. package/dist/esm/lib/v3/verifier/rubricVerifier.d.ts +91 -0
  274. package/dist/esm/lib/v3/verifier/rubricVerifier.js +1640 -0
  275. package/dist/esm/lib/v3/verifier/rubricVerifier.js.map +1 -0
  276. package/dist/esm/lib/v3/verifier/trajectory.d.ts +50 -0
  277. package/dist/esm/lib/v3/verifier/trajectory.js +273 -0
  278. package/dist/esm/lib/v3/verifier/trajectory.js.map +1 -0
  279. package/dist/esm/lib/v3/verifier/types.d.ts +429 -0
  280. package/dist/esm/lib/v3/verifier/types.js +2 -0
  281. package/dist/esm/lib/v3/verifier/types.js.map +1 -0
  282. package/dist/esm/lib/v3Evaluator.d.ts +14 -4
  283. package/dist/esm/lib/v3Evaluator.js +189 -1
  284. package/dist/esm/lib/v3Evaluator.js.map +1 -1
  285. package/dist/esm/lib/v3LegacyEvaluator.js +5 -1
  286. package/dist/esm/lib/v3LegacyEvaluator.js.map +1 -1
  287. package/dist/esm/lib/version.d.ts +1 -1
  288. package/dist/esm/lib/version.js +1 -1
  289. package/dist/esm/lib/version.js.map +1 -1
  290. package/package.json +18 -12
@@ -7,6 +7,9 @@ const GoogleCUAClient_js_1 = require("../agent/GoogleCUAClient.js");
7
7
  const OpenAICUAClient_js_1 = require("../agent/OpenAICUAClient.js");
8
8
  const cuaKeyMapping_js_1 = require("../agent/utils/cuaKeyMapping.js");
9
9
  const xpath_js_1 = require("../agent/utils/xpath.js");
10
+ const postStepProbeEvidence_js_1 = require("../agent/utils/postStepProbeEvidence.js");
11
+ const wrapEvidenceCallback_js_1 = require("../agent/utils/wrapEvidenceCallback.js");
12
+ const toolOutputEvidence_js_1 = require("../agent/utils/toolOutputEvidence.js");
10
13
  const methods_js_1 = require("../types/public/methods.js");
11
14
  const FlowLogger_js_1 = require("../flowlogger/FlowLogger.js");
12
15
  const utils_js_1 = require("../../utils.js");
@@ -23,6 +26,8 @@ class V3CuaAgentHandler {
23
26
  captchaSolver = null;
24
27
  captchaClickGuardRemaining = 0;
25
28
  currentInstruction = "";
29
+ lastAgentScreenshotUrl;
30
+ evidenceCallback;
26
31
  constructor(v3, logger, options, tools) {
27
32
  this.v3 = v3;
28
33
  this.logger = logger;
@@ -48,6 +53,7 @@ class V3CuaAgentHandler {
48
53
  this.ensureNotClosed();
49
54
  const page = await this.v3.context.awaitActivePage();
50
55
  const screenshotBuffer = await page.screenshot({ fullPage: false });
56
+ await this.emitCuaScreenshot(screenshotBuffer, page.url());
51
57
  return screenshotBuffer.toString("base64"); // base64 png
52
58
  });
53
59
  // Provide action executor
@@ -79,7 +85,12 @@ class V3CuaAgentHandler {
79
85
  const defaultDelay = 500;
80
86
  const waitBetween = this.options.clientOptions?.waitBetweenActions ||
81
87
  defaultDelay;
88
+ // Skip logging for screenshot actions - they're no-ops; the CUA client
89
+ // takes its own screenshot via screenshotProvider between API turns.
90
+ // Computed outside the try so the catch can still record a failed step.
91
+ const shouldLog = action.type !== "screenshot";
82
92
  try {
93
+ let executionResult;
83
94
  // Try to inject cursor before each action if enabled
84
95
  if (this.highlightCursor) {
85
96
  try {
@@ -90,11 +101,8 @@ class V3CuaAgentHandler {
90
101
  }
91
102
  }
92
103
  await new Promise((r) => setTimeout(r, 300));
93
- // Skip logging for screenshot actions - they're no-ops; the CUA client
94
- // takes its own screenshot via screenshotProvider between API turns.
95
- const shouldLog = action.type !== "screenshot";
96
104
  if (shouldLog) {
97
- await FlowLogger_js_1.FlowLogger.runWithLogging({
105
+ executionResult = await FlowLogger_js_1.FlowLogger.runWithLogging({
98
106
  eventType: `V3Cua${(0, utils_js_1.toTitleCase)(action.type)}`, // e.g. "V3CuaClick"
99
107
  data: {
100
108
  target: this.computePointerTarget(action),
@@ -102,9 +110,12 @@ class V3CuaAgentHandler {
102
110
  }, async (loggedAction) => await this.executeAction(loggedAction), [action]);
103
111
  }
104
112
  else {
105
- await this.executeAction(action);
113
+ executionResult = await this.executeAction(action);
106
114
  }
107
115
  action.timestamp = Date.now();
116
+ if (shouldLog && this.evidenceCallback) {
117
+ await this.emitCuaActionStep(action, (0, toolOutputEvidence_js_1.inferToolOutput)(executionResult ?? { success: true }));
118
+ }
108
119
  await new Promise((r) => setTimeout(r, waitBetween));
109
120
  }
110
121
  catch (error) {
@@ -114,6 +125,29 @@ class V3CuaAgentHandler {
114
125
  message: `Error executing action ${action.type}: ${msg}`,
115
126
  level: 0,
116
127
  });
128
+ // Record the failed action as an ok:false step (with a best-effort
129
+ // post-failure probe, since a throwing action can still partially
130
+ // mutate the page) before rethrowing — otherwise the failure is
131
+ // dropped from the persisted trajectory. Evidence emission must never
132
+ // mask the original action error.
133
+ if (shouldLog && this.evidenceCallback) {
134
+ try {
135
+ await this.emitCuaActionStep(action, {
136
+ ok: false,
137
+ result: undefined,
138
+ error: msg,
139
+ });
140
+ }
141
+ catch (evidenceError) {
142
+ this.logger({
143
+ category: "agent",
144
+ message: `Failed to record failed-action evidence: ${evidenceError instanceof Error
145
+ ? evidenceError.message
146
+ : String(evidenceError)}`,
147
+ level: 1,
148
+ });
149
+ }
150
+ }
117
151
  throw error;
118
152
  }
119
153
  });
@@ -131,6 +165,8 @@ class V3CuaAgentHandler {
131
165
  ? { instruction: optionsOrInstruction }
132
166
  : optionsOrInstruction;
133
167
  this.setSafetyConfirmationHandler(options.callbacks?.onSafetyConfirmation);
168
+ this.evidenceCallback = (0, wrapEvidenceCallback_js_1.wrapEvidenceCallback)(options.callbacks?.onEvidence, this.logger);
169
+ this.lastAgentScreenshotUrl = undefined;
134
170
  this.highlightCursor = options.highlightCursor !== false;
135
171
  this.currentInstruction = options.instruction;
136
172
  // Redirect if blank
@@ -179,8 +215,30 @@ class V3CuaAgentHandler {
179
215
  let result;
180
216
  try {
181
217
  result = await this.agent.execute({ options, logger: this.logger });
218
+ if (this.evidenceCallback) {
219
+ let finalUrl = "";
220
+ try {
221
+ finalUrl = (await this.v3.context.awaitActivePage()).url();
222
+ }
223
+ catch {
224
+ finalUrl = this.lastAgentScreenshotUrl ?? "";
225
+ }
226
+ const observation = await (0, postStepProbeEvidence_js_1.captureProbeEvidence)({
227
+ v3: this.v3,
228
+ url: finalUrl,
229
+ logger: this.logger,
230
+ warningMessage: "Warning: CUA final probe failed",
231
+ });
232
+ await this.evidenceCallback({
233
+ type: "final_answer",
234
+ message: result.message,
235
+ output: result.output,
236
+ observation,
237
+ });
238
+ }
182
239
  }
183
240
  finally {
241
+ this.evidenceCallback = undefined;
184
242
  this.captchaSolver?.dispose();
185
243
  this.captchaSolver = null;
186
244
  }
@@ -543,6 +601,8 @@ class V3CuaAgentHandler {
543
601
  const page = await this.v3.context.awaitActivePage();
544
602
  const screenshotBuffer = await page.screenshot({ fullPage: false });
545
603
  const currentUrl = page.url();
604
+ // Mirror the same buffer the CUA client receives as agent evidence.
605
+ await this.emitCuaScreenshot(screenshotBuffer, currentUrl);
546
606
  return await this.agentClient.captureScreenshot({
547
607
  base64Image: screenshotBuffer.toString("base64"),
548
608
  currentUrl,
@@ -630,6 +690,60 @@ class V3CuaAgentHandler {
630
690
  return false;
631
691
  }
632
692
  }
693
+ /**
694
+ * Emit a pre-action CUA screenshot — the exact buffer the model received
695
+ * as input. Tier-1 evidence (agent-mirrored); the tier-2 probe is taken
696
+ * separately in emitCuaActionStep after the action runs, so the recorder
697
+ * can compare what the model saw against what the page actually showed
698
+ * once the keystrokes/clicks landed.
699
+ */
700
+ async emitCuaScreenshot(screenshot, url) {
701
+ if (!this.evidenceCallback)
702
+ return;
703
+ this.lastAgentScreenshotUrl = url;
704
+ await this.evidenceCallback({
705
+ type: "screenshot",
706
+ screenshot,
707
+ url,
708
+ evidenceRole: "agent",
709
+ });
710
+ }
711
+ async emitCuaActionStep(action, toolOutput) {
712
+ let pageUrl = typeof action.pageUrl === "string"
713
+ ? action.pageUrl
714
+ : (this.lastAgentScreenshotUrl ?? "");
715
+ try {
716
+ pageUrl = (await this.v3.context.awaitActivePage()).url();
717
+ }
718
+ catch {
719
+ // Keep the best pre-action URL fallback.
720
+ }
721
+ const actionArgs = Object.fromEntries(Object.entries(action).filter(([key]) => key !== "screenshot" && key !== "timestamp"));
722
+ const reasoning = typeof action.reasoning === "string"
723
+ ? action.reasoning
724
+ : typeof action.action === "string"
725
+ ? action.action
726
+ : "";
727
+ await this.evidenceCallback?.({
728
+ type: "step_finished",
729
+ actionName: String(action.type),
730
+ actionArgs,
731
+ reasoning,
732
+ toolOutput,
733
+ });
734
+ // Post-action tier-2 probe. The pre-action screenshot from
735
+ // screenshotProvider is what the model SAW; this one shows what the
736
+ // page actually LOOKS LIKE after the action ran. Without this the
737
+ // verifier has no visual evidence that keystrokes/clicks landed, and
738
+ // has to trust the action history alone.
739
+ await (0, postStepProbeEvidence_js_1.emitPostStepProbeEvidence)({
740
+ v3: this.v3,
741
+ url: pageUrl,
742
+ evidenceCallback: this.evidenceCallback,
743
+ logger: this.logger,
744
+ warningMessage: "Warning: CUA post-action probe failed",
745
+ });
746
+ }
633
747
  async injectCursor() {
634
748
  try {
635
749
  const page = await this.v3.context.awaitActivePage();
@@ -1 +1 @@
1
- {"version":3,"file":"v3CuaAgentHandler.js","sourceRoot":"","sources":["../../../../../lib/v3/handlers/v3CuaAgentHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { computeActiveElementXpath } from \"../understudy/a11y/snapshot/index.js\";\nimport { V3 } from \"../v3.js\";\nimport { ToolSet } from \"ai\";\nimport { AgentClient } from \"../agent/AgentClient.js\";\nimport { AgentProvider } from \"../agent/AgentProvider.js\";\nimport { GoogleCUAClient } from \"../agent/GoogleCUAClient.js\";\nimport { OpenAICUAClient } from \"../agent/OpenAICUAClient.js\";\nimport { mapKeyToPlaywright } from \"../agent/utils/cuaKeyMapping.js\";\nimport { ensureXPath } from \"../agent/utils/xpath.js\";\nimport {\n ActionExecutionResult,\n AgentAction,\n AgentExecuteOptions,\n AgentHandlerOptions,\n AgentResult,\n SafetyConfirmationHandler,\n} from \"../types/public/agent.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport { type Action, V3FunctionName } from \"../types/public/methods.js\";\nimport { FlowLogger } from \"../flowlogger/FlowLogger.js\";\nimport { toTitleCase } from \"../../utils.js\";\nimport { StagehandClosedError } from \"../types/public/sdkErrors.js\";\nimport {\n CaptchaSolver,\n CAPTCHA_SOLVED_MSG,\n CAPTCHA_ERRORED_MSG,\n} from \"../agent/utils/captchaSolver.js\";\n\nexport class V3CuaAgentHandler {\n private v3: V3;\n private agent: AgentClient;\n private provider: AgentProvider;\n private logger: (message: LogLine) => void;\n private agentClient: AgentClient;\n private options: AgentHandlerOptions;\n private highlightCursor: boolean;\n private captchaSolver: CaptchaSolver | null = null;\n private captchaClickGuardRemaining = 0;\n private currentInstruction = \"\";\n\n constructor(\n v3: V3,\n logger: (message: LogLine) => void,\n options: AgentHandlerOptions,\n tools?: ToolSet,\n ) {\n this.v3 = v3;\n this.logger = logger;\n this.options = options;\n\n this.provider = new AgentProvider(logger);\n const client = this.provider.getClient(\n options.modelName,\n options.clientOptions || {},\n options.userProvidedInstructions,\n tools,\n );\n this.agentClient = client;\n this.setupAgentClient();\n this.agent = client;\n }\n\n /**\n * Ensures the V3 context is still available (not closed).\n * Throws StagehandClosedError if stagehand.close() was called.\n */\n private ensureNotClosed(): void {\n if (!this.v3.context) {\n throw new StagehandClosedError();\n }\n }\n\n private setupAgentClient(): void {\n // Provide screenshots to the agent client\n this.agentClient.setScreenshotProvider(async () => {\n this.ensureNotClosed();\n const page = await this.v3.context.awaitActivePage();\n const screenshotBuffer = await page.screenshot({ fullPage: false });\n return screenshotBuffer.toString(\"base64\"); // base64 png\n });\n\n // Provide action executor\n this.agentClient.setActionHandler(async (action) => {\n this.ensureNotClosed();\n\n // Wait for captcha solver to finish before executing action\n if (this.captchaSolver) {\n if (this.captchaSolver.isSolving()) {\n this.logger({\n category: \"agent\",\n message:\n \"Captcha detected — waiting for Browserbase to solve it before continuing\",\n level: 1,\n });\n }\n await this.captchaSolver.waitIfSolving();\n this.handleCaptchaSolveResult(this.captchaSolver.consumeSolveResult());\n }\n\n action.pageUrl = (await this.v3.context.awaitActivePage()).url();\n if (await this.shouldSkipSolvedCaptchaInteraction(action)) {\n this.captchaClickGuardRemaining = Math.max(\n 0,\n this.captchaClickGuardRemaining - 1,\n );\n this.agentClient.addContextNote(\n `The captcha has already been solved automatically. Do not click the captcha checkbox, widget, or challenge again. Continue with the original task outside the captcha area. Original task: ${this.currentInstruction}`,\n );\n this.logger({\n category: \"agent\",\n message:\n \"Skipped click on solved captcha widget — injected follow-up guidance\",\n level: 1,\n });\n return;\n }\n\n const defaultDelay = 500;\n const waitBetween =\n (this.options.clientOptions?.waitBetweenActions as number) ||\n defaultDelay;\n try {\n // Try to inject cursor before each action if enabled\n if (this.highlightCursor) {\n try {\n await this.injectCursor();\n } catch {\n // Ignore cursor injection failures\n }\n }\n await new Promise((r) => setTimeout(r, 300));\n // Skip logging for screenshot actions - they're no-ops; the CUA client\n // takes its own screenshot via screenshotProvider between API turns.\n const shouldLog = action.type !== \"screenshot\";\n if (shouldLog) {\n await FlowLogger.runWithLogging(\n {\n eventType: `V3Cua${toTitleCase(action.type)}`, // e.g. \"V3CuaClick\"\n data: {\n target: this.computePointerTarget(action),\n },\n },\n async (loggedAction: typeof action) =>\n await this.executeAction(loggedAction),\n [action],\n );\n } else {\n await this.executeAction(action);\n }\n\n action.timestamp = Date.now();\n\n await new Promise((r) => setTimeout(r, waitBetween));\n } catch (error) {\n const msg = (error as Error)?.message ?? String(error);\n this.logger({\n category: \"agent\",\n message: `Error executing action ${action.type}: ${msg}`,\n level: 0,\n });\n throw error;\n }\n });\n\n void this.updateClientViewport();\n void this.updateClientUrl();\n }\n\n setSafetyConfirmationHandler(handler?: SafetyConfirmationHandler): void {\n if (\n this.agentClient instanceof GoogleCUAClient ||\n this.agentClient instanceof OpenAICUAClient\n ) {\n this.agentClient.setSafetyConfirmationHandler(handler);\n }\n }\n\n async execute(\n optionsOrInstruction: AgentExecuteOptions | string,\n ): Promise<AgentResult> {\n const options =\n typeof optionsOrInstruction === \"string\"\n ? { instruction: optionsOrInstruction }\n : optionsOrInstruction;\n\n this.setSafetyConfirmationHandler(options.callbacks?.onSafetyConfirmation);\n\n this.highlightCursor = options.highlightCursor !== false;\n this.currentInstruction = options.instruction;\n\n // Redirect if blank\n const page = await this.v3.context.awaitActivePage();\n const currentUrl = page.url();\n if (!currentUrl || currentUrl === \"about:blank\") {\n this.logger({\n category: \"agent\",\n message: `Page URL is empty. Navigating to https://www.google.com ...`,\n level: 1,\n });\n await page.goto(\"https://www.google.com\", { waitUntil: \"load\" });\n }\n\n // Set up captcha solver for Browserbase environments\n if (this.v3.isCaptchaAutoSolveEnabled) {\n this.captchaSolver = new CaptchaSolver();\n this.captchaSolver.init(() => this.v3.context.awaitActivePage());\n\n // Block the CUA agent loop before each step while a captcha is being solved\n this.agentClient.setPreStepHook(async () => {\n if (this.captchaSolver?.isSolving()) {\n this.logger({\n category: \"agent\",\n message:\n \"Captcha detected — waiting for Browserbase to solve it before continuing\",\n level: 1,\n });\n }\n await this.captchaSolver?.waitIfSolving();\n this.handleCaptchaSolveResult(this.captchaSolver?.consumeSolveResult());\n });\n }\n\n if (this.highlightCursor) {\n try {\n await this.injectCursor();\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.logger({\n category: \"agent\",\n message: `Warning: Failed to inject cursor: ${errorMessage}. Continuing with execution.`,\n level: 1,\n });\n // Continue execution even if cursor injection fails\n }\n }\n\n const start = Date.now();\n let result: AgentResult;\n try {\n result = await this.agent.execute({ options, logger: this.logger });\n } finally {\n this.captchaSolver?.dispose();\n this.captchaSolver = null;\n }\n const inferenceTimeMs = Date.now() - start;\n if (result.usage) {\n this.v3.updateMetrics(\n V3FunctionName.AGENT,\n result.usage.input_tokens,\n result.usage.output_tokens,\n result.usage.reasoning_tokens ?? 0,\n result.usage.cached_input_tokens ?? 0,\n inferenceTimeMs,\n );\n }\n return result;\n }\n\n private async executeAction(\n action: AgentAction,\n ): Promise<ActionExecutionResult> {\n const page = await this.v3.context.awaitActivePage();\n const recording = this.v3.isAgentReplayActive();\n switch (action.type) {\n case \"click\": {\n const { x, y, button = \"left\", clickCount } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: (button as \"left\" | \"right\" | \"middle\") ?? \"left\",\n clickCount: (clickCount as number) ?? 1,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"click\", x, y),\n method: \"click\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n button: (button as \"left\" | \"right\" | \"middle\") ?? \"left\",\n clickCount: (clickCount as number) ?? 1,\n });\n }\n return { success: true };\n }\n case \"double_click\":\n case \"doubleClick\": {\n const { x, y } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 2,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"double click\", x, y),\n method: \"doubleClick\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 2,\n });\n }\n return { success: true };\n }\n case \"triple_click\":\n case \"tripleClick\": {\n const { x, y } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 3,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"triple click\", x, y),\n method: \"tripleClick\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n clickCount: 3,\n });\n }\n return { success: true };\n }\n case \"type\": {\n const { text } = action;\n await page.type(String(text ?? \"\"));\n if (recording) {\n const xpath = await computeActiveElementXpath(page);\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describeTypeAction(String(text ?? \"\")),\n method: \"type\",\n arguments: [String(text ?? \"\")],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n }\n return { success: true };\n }\n case \"keypress\": {\n const { keys } = action;\n const keyList = Array.isArray(keys) ? keys : [keys];\n const stagehandActions: Action[] = [];\n for (const rawKey of keyList) {\n const mapped = mapKeyToPlaywright(String(rawKey ?? \"\"));\n await page.keyPress(mapped);\n if (recording) {\n stagehandActions.push({\n selector: \"xpath=/html\",\n description: `press ${mapped}`,\n method: \"press\",\n arguments: [mapped],\n });\n }\n }\n if (recording && stagehandActions.length > 0) {\n this.recordCuaActStep(\n action,\n stagehandActions,\n stagehandActions\n .map((a) => a.description)\n .filter(Boolean)\n .join(\", \") || \"keypress\",\n );\n }\n return { success: true };\n }\n case \"scroll\": {\n const { x, y, scroll_x = 0, scroll_y = 0 } = action;\n await page.scroll(\n (x as number) ?? 0,\n (y as number) ?? 0,\n (scroll_x as number) ?? 0,\n (scroll_y as number) ?? 0,\n );\n this.v3.recordAgentReplayStep({\n type: \"scroll\",\n deltaX: Number(scroll_x ?? 0),\n deltaY: Number(scroll_y ?? 0),\n anchor:\n typeof x === \"number\" && typeof y === \"number\"\n ? { x: Math.round(x), y: Math.round(y) }\n : undefined,\n });\n return { success: true };\n }\n case \"drag\": {\n const { path } = action;\n if (Array.isArray(path) && path.length >= 2) {\n const start = path[0];\n const end = path[path.length - 1];\n if (recording) {\n const xps = await page.dragAndDrop(start.x, start.y, end.x, end.y, {\n steps: Math.min(20, Math.max(5, path.length)),\n delay: 10,\n returnXpath: true,\n });\n const [fromXpath, toXpath] = (xps as [string, string]) || [\"\", \"\"];\n const from = ensureXPath(fromXpath);\n const to = ensureXPath(toXpath);\n if (from && to) {\n const stagehandAction: Action = {\n selector: from,\n description: this.describeDragAction(),\n method: \"dragAndDrop\",\n arguments: [to],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.dragAndDrop(start.x, start.y, end.x, end.y, {\n steps: Math.min(20, Math.max(5, path.length)),\n delay: 10,\n });\n }\n }\n return { success: true };\n }\n case \"move\": {\n const { x, y } = action;\n if (typeof x === \"number\" && typeof y === \"number\") {\n if (recording) {\n const xpath = await page.hover(x, y, { returnXpath: true });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"hover\", x, y),\n method: \"hover\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.hover(x, y);\n }\n }\n return { success: true };\n }\n case \"wait\": {\n const time = action?.timeMs ?? 1000;\n await new Promise((r) => setTimeout(r, time));\n if (time > 0 && recording) {\n this.v3.recordAgentReplayStep({ type: \"wait\", timeMs: Number(time) });\n }\n return { success: true };\n }\n case \"screenshot\": {\n // No-op - the CUA client captures a screenshot itself after each\n // computer_call (or batch of actions) for the next request.\n return { success: true };\n }\n case \"goto\": {\n const { url } = action;\n await page.goto(String(url ?? \"\"), { waitUntil: \"load\" });\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"goto\",\n url: String(url ?? \"\"),\n });\n }\n return { success: true };\n }\n case \"back\": {\n await page.goBack();\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"back\",\n });\n }\n return { success: true };\n }\n case \"forward\": {\n await page.goForward();\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"forward\",\n });\n }\n return { success: true };\n }\n case \"open_web_browser\": {\n // Browser is already open, this is a no-op\n return { success: true };\n }\n case \"custom_tool\": {\n // Custom tools are handled by the agent client directly\n return { success: true };\n }\n default:\n this.logger({\n category: \"agent\",\n message: `Unknown action type: ${String(action.type)}`,\n level: 1,\n });\n return {\n success: false,\n error: `Unknown action ${String(action.type)}`,\n };\n }\n }\n\n // helper to make pointer target human-readable for logging\n private computePointerTarget(action: AgentAction): string | undefined {\n return typeof action.x === \"number\" && typeof action.y === \"number\"\n ? `(${action.x}, ${action.y})`\n : typeof action.selector === \"string\"\n ? action.selector\n : typeof action.input === \"string\"\n ? action.input\n : typeof action.description === \"string\"\n ? action.description\n : undefined;\n }\n\n private describePointerAction(kind: string, x: unknown, y: unknown): string {\n const nx = Number(x);\n const ny = Number(y);\n if (Number.isFinite(nx) && Number.isFinite(ny)) {\n return `${kind} at (${Math.round(nx)}, ${Math.round(ny)})`;\n }\n return kind;\n }\n\n private describeTypeAction(text: string): string {\n const snippet = text.length > 30 ? `${text.slice(0, 27)}...` : text;\n return `type \"${snippet}\"`;\n }\n\n private describeDragAction(): string {\n return \"drag and drop\";\n }\n\n private buildInstructionFallback(\n agentAction: AgentAction,\n fallback: string,\n ): string {\n const raw =\n (typeof agentAction.action === \"string\" && agentAction.action.trim()) ||\n (typeof agentAction.reasoning === \"string\" &&\n agentAction.reasoning.trim());\n return raw && raw.length > 0 ? raw : fallback;\n }\n\n private recordCuaActStep(\n agentAction: AgentAction,\n stagehandActions: Action[],\n fallback: string,\n ): void {\n if (!stagehandActions.length) return;\n const instruction = this.buildInstructionFallback(agentAction, fallback);\n const description = stagehandActions[0]?.description || instruction;\n const actions = stagehandActions.map((act) => ({\n ...act,\n description: act.description || description,\n }));\n this.v3.recordAgentReplayStep({\n type: \"act\",\n instruction,\n actions,\n actionDescription: description,\n message:\n typeof agentAction.reasoning === \"string\" &&\n agentAction.reasoning.trim().length > 0\n ? agentAction.reasoning.trim()\n : undefined,\n });\n }\n\n private async updateClientViewport(): Promise<void> {\n try {\n // For Google CUA, use configured viewport for coordinate normalization\n // Browserbase managed fingerprinting uses a fixed 1288x711 fallback.\n if (this.agentClient instanceof GoogleCUAClient) {\n const dims = this.v3.isVerified\n ? { width: 1288, height: 711 }\n : this.v3.configuredViewport;\n this.agentClient.setViewport(dims.width, dims.height);\n } else {\n // For other clients, use actual window dimensions\n const page = await this.v3.context.awaitActivePage();\n const { w, h } = await page.mainFrame().evaluate<{\n w: number;\n h: number;\n }>(\"({ w: window.innerWidth, h: window.innerHeight })\");\n if (w && h) this.agentClient.setViewport(w, h);\n }\n } catch {\n //\n }\n }\n\n private async updateClientUrl(): Promise<void> {\n try {\n const page = await this.v3.context.awaitActivePage();\n const url = page.url();\n this.agentClient.setCurrentUrl(url);\n } catch {\n //\n }\n }\n\n async captureAndSendScreenshot(): Promise<unknown> {\n this.logger({\n category: \"agent\",\n message: \"Capturing screenshot\",\n level: 1,\n });\n try {\n const page = await this.v3.context.awaitActivePage();\n const screenshotBuffer = await page.screenshot({ fullPage: false });\n\n const currentUrl = page.url();\n return await this.agentClient.captureScreenshot({\n base64Image: screenshotBuffer.toString(\"base64\"),\n currentUrl,\n });\n } catch (e) {\n this.logger({\n category: \"agent\",\n message: `Error capturing screenshot: ${String((e as Error)?.message ?? e)}`,\n level: 0,\n });\n return null;\n }\n }\n\n private handleCaptchaSolveResult(result?: {\n solved: boolean;\n errored: boolean;\n }): void {\n if (!result) return;\n\n if (result.solved) {\n this.captchaClickGuardRemaining = 3;\n this.agentClient.addContextNote(CAPTCHA_SOLVED_MSG);\n this.logger({\n category: \"agent\",\n message: \"Captcha solved — continuing with task\",\n level: 1,\n });\n }\n\n if (result.errored) {\n this.captchaClickGuardRemaining = 0;\n this.agentClient.addContextNote(CAPTCHA_ERRORED_MSG);\n this.logger({\n category: \"agent\",\n message: \"Captcha solver failed or errored\",\n level: 1,\n });\n }\n }\n\n private async shouldSkipSolvedCaptchaInteraction(\n action: AgentAction,\n ): Promise<boolean> {\n if (this.captchaClickGuardRemaining <= 0) {\n return false;\n }\n\n if (action.type !== \"click\") {\n return false;\n }\n\n const x = action.x;\n const y = action.y;\n if (typeof x !== \"number\" || typeof y !== \"number\") {\n return false;\n }\n\n try {\n const page = await this.v3.context.awaitActivePage();\n const boxes = await page.evaluate<\n Array<{ left: number; top: number; right: number; bottom: number }>\n >(() => {\n const selectors = [\n 'iframe[title*=\"reCAPTCHA\"]',\n 'iframe[src*=\"recaptcha\"]',\n 'iframe[src*=\"hcaptcha\"]',\n 'iframe[src*=\"turnstile\"]',\n \".g-recaptcha\",\n \"[data-sitekey]\",\n '[class*=\"captcha\"]',\n '[id*=\"captcha\"]',\n ];\n\n const seen = new Set<Element>();\n const bounds: Array<{\n left: number;\n top: number;\n right: number;\n bottom: number;\n }> = [];\n\n for (const selector of selectors) {\n for (const element of document.querySelectorAll(selector)) {\n if (seen.has(element)) continue;\n seen.add(element);\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) continue;\n bounds.push({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n });\n }\n }\n\n return bounds;\n });\n\n return boxes.some(\n (box) =>\n x >= box.left && x <= box.right && y >= box.top && y <= box.bottom,\n );\n } catch {\n return false;\n }\n }\n\n private async injectCursor(): Promise<void> {\n try {\n const page = await this.v3.context.awaitActivePage();\n await page.enableCursorOverlay();\n } catch {\n // Best-effort only\n }\n }\n}\n"]}
1
+ {"version":3,"file":"v3CuaAgentHandler.js","sourceRoot":"","sources":["../../../../../lib/v3/handlers/v3CuaAgentHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { computeActiveElementXpath } from \"../understudy/a11y/snapshot/index.js\";\nimport { V3 } from \"../v3.js\";\nimport { ToolSet } from \"ai\";\nimport { AgentClient } from \"../agent/AgentClient.js\";\nimport { AgentProvider } from \"../agent/AgentProvider.js\";\nimport { GoogleCUAClient } from \"../agent/GoogleCUAClient.js\";\nimport { OpenAICUAClient } from \"../agent/OpenAICUAClient.js\";\nimport { mapKeyToPlaywright } from \"../agent/utils/cuaKeyMapping.js\";\nimport { ensureXPath } from \"../agent/utils/xpath.js\";\nimport {\n captureProbeEvidence,\n emitPostStepProbeEvidence,\n} from \"../agent/utils/postStepProbeEvidence.js\";\nimport { wrapEvidenceCallback } from \"../agent/utils/wrapEvidenceCallback.js\";\nimport { inferToolOutput } from \"../agent/utils/toolOutputEvidence.js\";\nimport {\n ActionExecutionResult,\n AgentAction,\n AgentExecuteOptions,\n AgentHandlerOptions,\n AgentResult,\n SafetyConfirmationHandler,\n} from \"../types/public/agent.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport type {\n AgentEvidenceCallback,\n AgentStepFinishedEvent,\n} from \"../types/public/agentEvidenceEvents.js\";\nimport { type Action, V3FunctionName } from \"../types/public/methods.js\";\nimport { FlowLogger } from \"../flowlogger/FlowLogger.js\";\nimport { toTitleCase } from \"../../utils.js\";\nimport { StagehandClosedError } from \"../types/public/sdkErrors.js\";\nimport {\n CaptchaSolver,\n CAPTCHA_SOLVED_MSG,\n CAPTCHA_ERRORED_MSG,\n} from \"../agent/utils/captchaSolver.js\";\n\nexport class V3CuaAgentHandler {\n private v3: V3;\n private agent: AgentClient;\n private provider: AgentProvider;\n private logger: (message: LogLine) => void;\n private agentClient: AgentClient;\n private options: AgentHandlerOptions;\n private highlightCursor: boolean;\n private captchaSolver: CaptchaSolver | null = null;\n private captchaClickGuardRemaining = 0;\n private currentInstruction = \"\";\n private lastAgentScreenshotUrl?: string;\n private evidenceCallback?: AgentEvidenceCallback;\n\n constructor(\n v3: V3,\n logger: (message: LogLine) => void,\n options: AgentHandlerOptions,\n tools?: ToolSet,\n ) {\n this.v3 = v3;\n this.logger = logger;\n this.options = options;\n\n this.provider = new AgentProvider(logger);\n const client = this.provider.getClient(\n options.modelName,\n options.clientOptions || {},\n options.userProvidedInstructions,\n tools,\n );\n this.agentClient = client;\n this.setupAgentClient();\n this.agent = client;\n }\n\n /**\n * Ensures the V3 context is still available (not closed).\n * Throws StagehandClosedError if stagehand.close() was called.\n */\n private ensureNotClosed(): void {\n if (!this.v3.context) {\n throw new StagehandClosedError();\n }\n }\n\n private setupAgentClient(): void {\n // Provide screenshots to the agent client\n this.agentClient.setScreenshotProvider(async () => {\n this.ensureNotClosed();\n const page = await this.v3.context.awaitActivePage();\n const screenshotBuffer = await page.screenshot({ fullPage: false });\n\n await this.emitCuaScreenshot(screenshotBuffer, page.url());\n\n return screenshotBuffer.toString(\"base64\"); // base64 png\n });\n\n // Provide action executor\n this.agentClient.setActionHandler(async (action) => {\n this.ensureNotClosed();\n\n // Wait for captcha solver to finish before executing action\n if (this.captchaSolver) {\n if (this.captchaSolver.isSolving()) {\n this.logger({\n category: \"agent\",\n message:\n \"Captcha detected — waiting for Browserbase to solve it before continuing\",\n level: 1,\n });\n }\n await this.captchaSolver.waitIfSolving();\n this.handleCaptchaSolveResult(this.captchaSolver.consumeSolveResult());\n }\n\n action.pageUrl = (await this.v3.context.awaitActivePage()).url();\n if (await this.shouldSkipSolvedCaptchaInteraction(action)) {\n this.captchaClickGuardRemaining = Math.max(\n 0,\n this.captchaClickGuardRemaining - 1,\n );\n this.agentClient.addContextNote(\n `The captcha has already been solved automatically. Do not click the captcha checkbox, widget, or challenge again. Continue with the original task outside the captcha area. Original task: ${this.currentInstruction}`,\n );\n this.logger({\n category: \"agent\",\n message:\n \"Skipped click on solved captcha widget — injected follow-up guidance\",\n level: 1,\n });\n return;\n }\n\n const defaultDelay = 500;\n const waitBetween =\n (this.options.clientOptions?.waitBetweenActions as number) ||\n defaultDelay;\n // Skip logging for screenshot actions - they're no-ops; the CUA client\n // takes its own screenshot via screenshotProvider between API turns.\n // Computed outside the try so the catch can still record a failed step.\n const shouldLog = action.type !== \"screenshot\";\n try {\n let executionResult: ActionExecutionResult | undefined;\n // Try to inject cursor before each action if enabled\n if (this.highlightCursor) {\n try {\n await this.injectCursor();\n } catch {\n // Ignore cursor injection failures\n }\n }\n await new Promise((r) => setTimeout(r, 300));\n if (shouldLog) {\n executionResult = await FlowLogger.runWithLogging(\n {\n eventType: `V3Cua${toTitleCase(action.type)}`, // e.g. \"V3CuaClick\"\n data: {\n target: this.computePointerTarget(action),\n },\n },\n async (loggedAction: typeof action) =>\n await this.executeAction(loggedAction),\n [action],\n );\n } else {\n executionResult = await this.executeAction(action);\n }\n\n action.timestamp = Date.now();\n if (shouldLog && this.evidenceCallback) {\n await this.emitCuaActionStep(\n action,\n inferToolOutput(executionResult ?? { success: true }),\n );\n }\n\n await new Promise((r) => setTimeout(r, waitBetween));\n } catch (error) {\n const msg = (error as Error)?.message ?? String(error);\n this.logger({\n category: \"agent\",\n message: `Error executing action ${action.type}: ${msg}`,\n level: 0,\n });\n // Record the failed action as an ok:false step (with a best-effort\n // post-failure probe, since a throwing action can still partially\n // mutate the page) before rethrowing — otherwise the failure is\n // dropped from the persisted trajectory. Evidence emission must never\n // mask the original action error.\n if (shouldLog && this.evidenceCallback) {\n try {\n await this.emitCuaActionStep(action, {\n ok: false,\n result: undefined,\n error: msg,\n });\n } catch (evidenceError) {\n this.logger({\n category: \"agent\",\n message: `Failed to record failed-action evidence: ${\n evidenceError instanceof Error\n ? evidenceError.message\n : String(evidenceError)\n }`,\n level: 1,\n });\n }\n }\n throw error;\n }\n });\n\n void this.updateClientViewport();\n void this.updateClientUrl();\n }\n\n setSafetyConfirmationHandler(handler?: SafetyConfirmationHandler): void {\n if (\n this.agentClient instanceof GoogleCUAClient ||\n this.agentClient instanceof OpenAICUAClient\n ) {\n this.agentClient.setSafetyConfirmationHandler(handler);\n }\n }\n\n async execute(\n optionsOrInstruction: AgentExecuteOptions | string,\n ): Promise<AgentResult> {\n const options =\n typeof optionsOrInstruction === \"string\"\n ? { instruction: optionsOrInstruction }\n : optionsOrInstruction;\n\n this.setSafetyConfirmationHandler(options.callbacks?.onSafetyConfirmation);\n this.evidenceCallback = wrapEvidenceCallback(\n options.callbacks?.onEvidence,\n this.logger,\n );\n this.lastAgentScreenshotUrl = undefined;\n\n this.highlightCursor = options.highlightCursor !== false;\n this.currentInstruction = options.instruction;\n\n // Redirect if blank\n const page = await this.v3.context.awaitActivePage();\n const currentUrl = page.url();\n if (!currentUrl || currentUrl === \"about:blank\") {\n this.logger({\n category: \"agent\",\n message: `Page URL is empty. Navigating to https://www.google.com ...`,\n level: 1,\n });\n await page.goto(\"https://www.google.com\", { waitUntil: \"load\" });\n }\n\n // Set up captcha solver for Browserbase environments\n if (this.v3.isCaptchaAutoSolveEnabled) {\n this.captchaSolver = new CaptchaSolver();\n this.captchaSolver.init(() => this.v3.context.awaitActivePage());\n\n // Block the CUA agent loop before each step while a captcha is being solved\n this.agentClient.setPreStepHook(async () => {\n if (this.captchaSolver?.isSolving()) {\n this.logger({\n category: \"agent\",\n message:\n \"Captcha detected — waiting for Browserbase to solve it before continuing\",\n level: 1,\n });\n }\n await this.captchaSolver?.waitIfSolving();\n this.handleCaptchaSolveResult(this.captchaSolver?.consumeSolveResult());\n });\n }\n\n if (this.highlightCursor) {\n try {\n await this.injectCursor();\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.logger({\n category: \"agent\",\n message: `Warning: Failed to inject cursor: ${errorMessage}. Continuing with execution.`,\n level: 1,\n });\n // Continue execution even if cursor injection fails\n }\n }\n\n const start = Date.now();\n let result: AgentResult;\n try {\n result = await this.agent.execute({ options, logger: this.logger });\n if (this.evidenceCallback) {\n let finalUrl = \"\";\n try {\n finalUrl = (await this.v3.context.awaitActivePage()).url();\n } catch {\n finalUrl = this.lastAgentScreenshotUrl ?? \"\";\n }\n const observation = await captureProbeEvidence({\n v3: this.v3,\n url: finalUrl,\n logger: this.logger,\n warningMessage: \"Warning: CUA final probe failed\",\n });\n await this.evidenceCallback({\n type: \"final_answer\",\n message: result.message,\n output: result.output,\n observation,\n });\n }\n } finally {\n this.evidenceCallback = undefined;\n this.captchaSolver?.dispose();\n this.captchaSolver = null;\n }\n const inferenceTimeMs = Date.now() - start;\n if (result.usage) {\n this.v3.updateMetrics(\n V3FunctionName.AGENT,\n result.usage.input_tokens,\n result.usage.output_tokens,\n result.usage.reasoning_tokens ?? 0,\n result.usage.cached_input_tokens ?? 0,\n inferenceTimeMs,\n );\n }\n return result;\n }\n\n private async executeAction(\n action: AgentAction,\n ): Promise<ActionExecutionResult> {\n const page = await this.v3.context.awaitActivePage();\n const recording = this.v3.isAgentReplayActive();\n switch (action.type) {\n case \"click\": {\n const { x, y, button = \"left\", clickCount } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: (button as \"left\" | \"right\" | \"middle\") ?? \"left\",\n clickCount: (clickCount as number) ?? 1,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"click\", x, y),\n method: \"click\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n button: (button as \"left\" | \"right\" | \"middle\") ?? \"left\",\n clickCount: (clickCount as number) ?? 1,\n });\n }\n return { success: true };\n }\n case \"double_click\":\n case \"doubleClick\": {\n const { x, y } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 2,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"double click\", x, y),\n method: \"doubleClick\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 2,\n });\n }\n return { success: true };\n }\n case \"triple_click\":\n case \"tripleClick\": {\n const { x, y } = action;\n if (recording) {\n const xpath = await page.click(x as number, y as number, {\n button: \"left\",\n clickCount: 3,\n returnXpath: true,\n });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"triple click\", x, y),\n method: \"tripleClick\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.click(x as number, y as number, {\n clickCount: 3,\n });\n }\n return { success: true };\n }\n case \"type\": {\n const { text } = action;\n await page.type(String(text ?? \"\"));\n if (recording) {\n const xpath = await computeActiveElementXpath(page);\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describeTypeAction(String(text ?? \"\")),\n method: \"type\",\n arguments: [String(text ?? \"\")],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n }\n return { success: true };\n }\n case \"keypress\": {\n const { keys } = action;\n const keyList = Array.isArray(keys) ? keys : [keys];\n const stagehandActions: Action[] = [];\n for (const rawKey of keyList) {\n const mapped = mapKeyToPlaywright(String(rawKey ?? \"\"));\n await page.keyPress(mapped);\n if (recording) {\n stagehandActions.push({\n selector: \"xpath=/html\",\n description: `press ${mapped}`,\n method: \"press\",\n arguments: [mapped],\n });\n }\n }\n if (recording && stagehandActions.length > 0) {\n this.recordCuaActStep(\n action,\n stagehandActions,\n stagehandActions\n .map((a) => a.description)\n .filter(Boolean)\n .join(\", \") || \"keypress\",\n );\n }\n return { success: true };\n }\n case \"scroll\": {\n const { x, y, scroll_x = 0, scroll_y = 0 } = action;\n await page.scroll(\n (x as number) ?? 0,\n (y as number) ?? 0,\n (scroll_x as number) ?? 0,\n (scroll_y as number) ?? 0,\n );\n this.v3.recordAgentReplayStep({\n type: \"scroll\",\n deltaX: Number(scroll_x ?? 0),\n deltaY: Number(scroll_y ?? 0),\n anchor:\n typeof x === \"number\" && typeof y === \"number\"\n ? { x: Math.round(x), y: Math.round(y) }\n : undefined,\n });\n return { success: true };\n }\n case \"drag\": {\n const { path } = action;\n if (Array.isArray(path) && path.length >= 2) {\n const start = path[0];\n const end = path[path.length - 1];\n if (recording) {\n const xps = await page.dragAndDrop(start.x, start.y, end.x, end.y, {\n steps: Math.min(20, Math.max(5, path.length)),\n delay: 10,\n returnXpath: true,\n });\n const [fromXpath, toXpath] = (xps as [string, string]) || [\"\", \"\"];\n const from = ensureXPath(fromXpath);\n const to = ensureXPath(toXpath);\n if (from && to) {\n const stagehandAction: Action = {\n selector: from,\n description: this.describeDragAction(),\n method: \"dragAndDrop\",\n arguments: [to],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.dragAndDrop(start.x, start.y, end.x, end.y, {\n steps: Math.min(20, Math.max(5, path.length)),\n delay: 10,\n });\n }\n }\n return { success: true };\n }\n case \"move\": {\n const { x, y } = action;\n if (typeof x === \"number\" && typeof y === \"number\") {\n if (recording) {\n const xpath = await page.hover(x, y, { returnXpath: true });\n const normalized = ensureXPath(xpath);\n if (normalized) {\n const stagehandAction: Action = {\n selector: normalized,\n description: this.describePointerAction(\"hover\", x, y),\n method: \"hover\",\n arguments: [],\n };\n this.recordCuaActStep(\n action,\n [stagehandAction],\n stagehandAction.description,\n );\n }\n } else {\n await page.hover(x, y);\n }\n }\n return { success: true };\n }\n case \"wait\": {\n const time = action?.timeMs ?? 1000;\n await new Promise((r) => setTimeout(r, time));\n if (time > 0 && recording) {\n this.v3.recordAgentReplayStep({ type: \"wait\", timeMs: Number(time) });\n }\n return { success: true };\n }\n case \"screenshot\": {\n // No-op - the CUA client captures a screenshot itself after each\n // computer_call (or batch of actions) for the next request.\n return { success: true };\n }\n case \"goto\": {\n const { url } = action;\n await page.goto(String(url ?? \"\"), { waitUntil: \"load\" });\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"goto\",\n url: String(url ?? \"\"),\n });\n }\n return { success: true };\n }\n case \"back\": {\n await page.goBack();\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"back\",\n });\n }\n return { success: true };\n }\n case \"forward\": {\n await page.goForward();\n if (recording) {\n this.v3.recordAgentReplayStep({\n type: \"forward\",\n });\n }\n return { success: true };\n }\n case \"open_web_browser\": {\n // Browser is already open, this is a no-op\n return { success: true };\n }\n case \"custom_tool\": {\n // Custom tools are handled by the agent client directly\n return { success: true };\n }\n default:\n this.logger({\n category: \"agent\",\n message: `Unknown action type: ${String(action.type)}`,\n level: 1,\n });\n return {\n success: false,\n error: `Unknown action ${String(action.type)}`,\n };\n }\n }\n\n // helper to make pointer target human-readable for logging\n private computePointerTarget(action: AgentAction): string | undefined {\n return typeof action.x === \"number\" && typeof action.y === \"number\"\n ? `(${action.x}, ${action.y})`\n : typeof action.selector === \"string\"\n ? action.selector\n : typeof action.input === \"string\"\n ? action.input\n : typeof action.description === \"string\"\n ? action.description\n : undefined;\n }\n\n private describePointerAction(kind: string, x: unknown, y: unknown): string {\n const nx = Number(x);\n const ny = Number(y);\n if (Number.isFinite(nx) && Number.isFinite(ny)) {\n return `${kind} at (${Math.round(nx)}, ${Math.round(ny)})`;\n }\n return kind;\n }\n\n private describeTypeAction(text: string): string {\n const snippet = text.length > 30 ? `${text.slice(0, 27)}...` : text;\n return `type \"${snippet}\"`;\n }\n\n private describeDragAction(): string {\n return \"drag and drop\";\n }\n\n private buildInstructionFallback(\n agentAction: AgentAction,\n fallback: string,\n ): string {\n const raw =\n (typeof agentAction.action === \"string\" && agentAction.action.trim()) ||\n (typeof agentAction.reasoning === \"string\" &&\n agentAction.reasoning.trim());\n return raw && raw.length > 0 ? raw : fallback;\n }\n\n private recordCuaActStep(\n agentAction: AgentAction,\n stagehandActions: Action[],\n fallback: string,\n ): void {\n if (!stagehandActions.length) return;\n const instruction = this.buildInstructionFallback(agentAction, fallback);\n const description = stagehandActions[0]?.description || instruction;\n const actions = stagehandActions.map((act) => ({\n ...act,\n description: act.description || description,\n }));\n this.v3.recordAgentReplayStep({\n type: \"act\",\n instruction,\n actions,\n actionDescription: description,\n message:\n typeof agentAction.reasoning === \"string\" &&\n agentAction.reasoning.trim().length > 0\n ? agentAction.reasoning.trim()\n : undefined,\n });\n }\n\n private async updateClientViewport(): Promise<void> {\n try {\n // For Google CUA, use configured viewport for coordinate normalization\n // Browserbase managed fingerprinting uses a fixed 1288x711 fallback.\n if (this.agentClient instanceof GoogleCUAClient) {\n const dims = this.v3.isVerified\n ? { width: 1288, height: 711 }\n : this.v3.configuredViewport;\n this.agentClient.setViewport(dims.width, dims.height);\n } else {\n // For other clients, use actual window dimensions\n const page = await this.v3.context.awaitActivePage();\n const { w, h } = await page.mainFrame().evaluate<{\n w: number;\n h: number;\n }>(\"({ w: window.innerWidth, h: window.innerHeight })\");\n if (w && h) this.agentClient.setViewport(w, h);\n }\n } catch {\n //\n }\n }\n\n private async updateClientUrl(): Promise<void> {\n try {\n const page = await this.v3.context.awaitActivePage();\n const url = page.url();\n this.agentClient.setCurrentUrl(url);\n } catch {\n //\n }\n }\n\n async captureAndSendScreenshot(): Promise<unknown> {\n this.logger({\n category: \"agent\",\n message: \"Capturing screenshot\",\n level: 1,\n });\n try {\n const page = await this.v3.context.awaitActivePage();\n const screenshotBuffer = await page.screenshot({ fullPage: false });\n\n const currentUrl = page.url();\n\n // Mirror the same buffer the CUA client receives as agent evidence.\n await this.emitCuaScreenshot(screenshotBuffer, currentUrl);\n\n return await this.agentClient.captureScreenshot({\n base64Image: screenshotBuffer.toString(\"base64\"),\n currentUrl,\n });\n } catch (e) {\n this.logger({\n category: \"agent\",\n message: `Error capturing screenshot: ${String((e as Error)?.message ?? e)}`,\n level: 0,\n });\n return null;\n }\n }\n\n private handleCaptchaSolveResult(result?: {\n solved: boolean;\n errored: boolean;\n }): void {\n if (!result) return;\n\n if (result.solved) {\n this.captchaClickGuardRemaining = 3;\n this.agentClient.addContextNote(CAPTCHA_SOLVED_MSG);\n this.logger({\n category: \"agent\",\n message: \"Captcha solved — continuing with task\",\n level: 1,\n });\n }\n\n if (result.errored) {\n this.captchaClickGuardRemaining = 0;\n this.agentClient.addContextNote(CAPTCHA_ERRORED_MSG);\n this.logger({\n category: \"agent\",\n message: \"Captcha solver failed or errored\",\n level: 1,\n });\n }\n }\n\n private async shouldSkipSolvedCaptchaInteraction(\n action: AgentAction,\n ): Promise<boolean> {\n if (this.captchaClickGuardRemaining <= 0) {\n return false;\n }\n\n if (action.type !== \"click\") {\n return false;\n }\n\n const x = action.x;\n const y = action.y;\n if (typeof x !== \"number\" || typeof y !== \"number\") {\n return false;\n }\n\n try {\n const page = await this.v3.context.awaitActivePage();\n const boxes = await page.evaluate<\n Array<{ left: number; top: number; right: number; bottom: number }>\n >(() => {\n const selectors = [\n 'iframe[title*=\"reCAPTCHA\"]',\n 'iframe[src*=\"recaptcha\"]',\n 'iframe[src*=\"hcaptcha\"]',\n 'iframe[src*=\"turnstile\"]',\n \".g-recaptcha\",\n \"[data-sitekey]\",\n '[class*=\"captcha\"]',\n '[id*=\"captcha\"]',\n ];\n\n const seen = new Set<Element>();\n const bounds: Array<{\n left: number;\n top: number;\n right: number;\n bottom: number;\n }> = [];\n\n for (const selector of selectors) {\n for (const element of document.querySelectorAll(selector)) {\n if (seen.has(element)) continue;\n seen.add(element);\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) continue;\n bounds.push({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n });\n }\n }\n\n return bounds;\n });\n\n return boxes.some(\n (box) =>\n x >= box.left && x <= box.right && y >= box.top && y <= box.bottom,\n );\n } catch {\n return false;\n }\n }\n\n /**\n * Emit a pre-action CUA screenshot — the exact buffer the model received\n * as input. Tier-1 evidence (agent-mirrored); the tier-2 probe is taken\n * separately in emitCuaActionStep after the action runs, so the recorder\n * can compare what the model saw against what the page actually showed\n * once the keystrokes/clicks landed.\n */\n private async emitCuaScreenshot(\n screenshot: Buffer,\n url: string,\n ): Promise<void> {\n if (!this.evidenceCallback) return;\n this.lastAgentScreenshotUrl = url;\n await this.evidenceCallback({\n type: \"screenshot\",\n screenshot,\n url,\n evidenceRole: \"agent\",\n });\n }\n\n private async emitCuaActionStep(\n action: AgentAction,\n toolOutput: AgentStepFinishedEvent[\"toolOutput\"],\n ): Promise<void> {\n let pageUrl =\n typeof action.pageUrl === \"string\"\n ? action.pageUrl\n : (this.lastAgentScreenshotUrl ?? \"\");\n try {\n pageUrl = (await this.v3.context.awaitActivePage()).url();\n } catch {\n // Keep the best pre-action URL fallback.\n }\n\n const actionArgs = Object.fromEntries(\n Object.entries(action).filter(\n ([key]) => key !== \"screenshot\" && key !== \"timestamp\",\n ),\n );\n const reasoning =\n typeof action.reasoning === \"string\"\n ? action.reasoning\n : typeof action.action === \"string\"\n ? action.action\n : \"\";\n\n await this.evidenceCallback?.({\n type: \"step_finished\",\n actionName: String(action.type),\n actionArgs,\n reasoning,\n toolOutput,\n });\n\n // Post-action tier-2 probe. The pre-action screenshot from\n // screenshotProvider is what the model SAW; this one shows what the\n // page actually LOOKS LIKE after the action ran. Without this the\n // verifier has no visual evidence that keystrokes/clicks landed, and\n // has to trust the action history alone.\n await emitPostStepProbeEvidence({\n v3: this.v3,\n url: pageUrl,\n evidenceCallback: this.evidenceCallback,\n logger: this.logger,\n warningMessage: \"Warning: CUA post-action probe failed\",\n });\n }\n\n private async injectCursor(): Promise<void> {\n try {\n const page = await this.v3.context.awaitActivePage();\n await page.enableCursorOverlay();\n } catch {\n // Best-effort only\n }\n }\n}\n"]}
@@ -8,6 +8,7 @@ import { V3Evaluator } from "../v3Evaluator.js";
8
8
  import { tool } from "ai";
9
9
  import { getAISDKLanguageModel } from "./llm/LLMProvider.js";
10
10
  import { __internalCreateInMemoryAgentCacheHandle } from "./cache/serverAgentCache.js";
11
+ import { buildAgentEvidenceFromStepFinished, loadTrajectoryFromDisk, mergeAgentEvidence, nextResultFilename, normalizeRubric, redactInlineImagePayloads, shouldPersistTrajectory, writeTrajectoryDir } from "./verifier/index.js";
11
12
  export { V3 } from "./v3.js";
12
13
  export { V3 as Stagehand } from "./v3.js";
13
14
  export * from "./types/public/index.js";
@@ -19,6 +20,8 @@ export { isZod4Schema, isZod3Schema, toJsonSchema } from "./zodCompat.js";
19
20
  export { connectToMCPServer } from "./mcp/connection.js";
20
21
  export { V3Evaluator } from "../v3Evaluator.js";
21
22
  export type { V3EvaluatorBackend, V3EvaluatorConstructorOptions, V3EvaluatorOptions, } from "../v3Evaluator.js";
23
+ export type { Trajectory, TrajectoryStep, TrajectoryStatus, TrajectoryUsage, TaskSpec, Rubric, RubricCriterion, AgentEvidence, AgentEvidenceModality, CanonicalEvidence, CanonicalScreenshot, CanonicalTextEvidence, ErrorTaxonomyCategory, ErrorTaxonomySubCategory, EvidenceLoadOptions, EvidenceLoadResult, ProbeEvidence, ParseFailureStepNumbersOptions, ToolOutput, Verifier, VerifierConfig, EvaluationResult, RubricVerifierOptions, CriterionScore, FirstPointOfFailure, TaskValidity, VerifierFinding, VerifierRawSteps, } from "./verifier/index.js";
24
+ export { buildAgentEvidenceFromStepFinished, loadTrajectoryFromDisk, mergeAgentEvidence, nextResultFilename, normalizeRubric, redactInlineImagePayloads, shouldPersistTrajectory, writeTrajectoryDir, } from "./verifier/index.js";
22
25
  export { tool } from "ai";
23
26
  export { getAISDKLanguageModel } from "./llm/LLMProvider.js";
24
27
  export { __internalCreateInMemoryAgentCacheHandle } from "./cache/serverAgentCache.js";
@@ -51,6 +54,14 @@ declare const StagehandDefault: {
51
54
  toJsonSchema: typeof toJsonSchema;
52
55
  connectToMCPServer: (serverConfig: string | URL | import("./mcp/connection.js").StdioServerConfig | import("./mcp/connection.js").ConnectToMCPServerOptions) => Promise<import("@modelcontextprotocol/sdk/client/index.js").Client>;
53
56
  V3Evaluator: typeof V3Evaluator;
57
+ buildAgentEvidenceFromStepFinished: typeof buildAgentEvidenceFromStepFinished;
58
+ loadTrajectoryFromDisk: typeof loadTrajectoryFromDisk;
59
+ mergeAgentEvidence: typeof mergeAgentEvidence;
60
+ nextResultFilename: typeof nextResultFilename;
61
+ normalizeRubric: typeof normalizeRubric;
62
+ redactInlineImagePayloads: typeof redactInlineImagePayloads;
63
+ shouldPersistTrajectory: typeof shouldPersistTrajectory;
64
+ writeTrajectoryDir: typeof writeTrajectoryDir;
54
65
  tool: typeof tool;
55
66
  getAISDKLanguageModel: typeof getAISDKLanguageModel;
56
67
  __internalCreateInMemoryAgentCacheHandle: typeof __internalCreateInMemoryAgentCacheHandle;
@@ -58,7 +69,7 @@ declare const StagehandDefault: {
58
69
  Api: typeof PublicApi.Api;
59
70
  AISdkClient: typeof PublicApi.AISdkClient;
60
71
  CustomOpenAIClient: typeof PublicApi.CustomOpenAIClient;
61
- AVAILABLE_CUA_MODELS: readonly ["openai/gpt-5.4", "openai/gpt-5.4-mini", "openai/gpt-5.5", "openai/computer-use-preview", "openai/computer-use-preview-2025-03-11", "anthropic/claude-opus-4-5-20251101", "anthropic/claude-opus-4-6", "anthropic/claude-sonnet-4-6", "anthropic/claude-haiku-4-5", "anthropic/claude-haiku-4-5-20251001", "anthropic/claude-sonnet-4-20250514", "anthropic/claude-sonnet-4-5-20250929", "google/gemini-2.5-computer-use-preview-10-2025", "google/gemini-3-flash-preview", "google/gemini-3-pro-preview", "microsoft/fara-7b"];
72
+ AVAILABLE_CUA_MODELS: readonly ["openai/gpt-5.4", "openai/gpt-5.4-mini", "openai/gpt-5.5", "openai/computer-use-preview", "openai/computer-use-preview-2025-03-11", "anthropic/claude-opus-4-5-20251101", "anthropic/claude-opus-4-6", "anthropic/claude-opus-4-8", "anthropic/claude-sonnet-4-6", "anthropic/claude-haiku-4-5", "anthropic/claude-haiku-4-5-20251001", "anthropic/claude-sonnet-4-20250514", "anthropic/claude-sonnet-4-5-20250929", "anthropic/claude-fable-5", "google/gemini-2.5-computer-use-preview-10-2025", "google/gemini-3-flash-preview", "google/gemini-3.5-flash", "google/gemini-3-pro-preview", "microsoft/fara-7b"];
62
73
  StagehandAPIError: typeof PublicApi.StagehandAPIError;
63
74
  StagehandAPIUnauthorizedError: typeof PublicApi.StagehandAPIUnauthorizedError;
64
75
  StagehandHttpError: typeof PublicApi.StagehandHttpError;
@@ -112,6 +123,7 @@ declare const StagehandDefault: {
112
123
  UnsupportedModelError: typeof PublicApi.UnsupportedModelError;
113
124
  UnsupportedModelProviderError: typeof PublicApi.UnsupportedModelProviderError;
114
125
  UnsupportedAISDKModelProviderError: typeof PublicApi.UnsupportedAISDKModelProviderError;
126
+ StagehandUnsupportedBrowserFeatureError: typeof PublicApi.StagehandUnsupportedBrowserFeatureError;
115
127
  InvalidAISDKModelFormatError: typeof PublicApi.InvalidAISDKModelFormatError;
116
128
  StagehandNotInitializedError: typeof PublicApi.StagehandNotInitializedError;
117
129
  BrowserbaseSessionNotFoundError: typeof PublicApi.BrowserbaseSessionNotFoundError;
@@ -36,7 +36,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
36
36
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.__internalMaybeRunShutdownSupervisorFromArgv = exports.__internalCreateInMemoryAgentCacheHandle = exports.getAISDKLanguageModel = exports.tool = exports.V3Evaluator = exports.connectToMCPServer = exports.toJsonSchema = exports.isZod3Schema = exports.isZod4Schema = exports.jsonSchemaToZod = exports.trimTrailingTextNode = exports.loadApiKeyFromEnv = exports.providerEnvVarMap = exports.injectUrls = exports.transformSchema = exports.getZodType = exports.toGeminiSchema = exports.isRunningInBun = exports.validateZodSchema = exports.modelToAgentProviderMap = exports.AgentProvider = exports.LLMClient = exports.AnnotatedScreenshotText = exports.Stagehand = exports.V3 = void 0;
39
+ exports.__internalMaybeRunShutdownSupervisorFromArgv = exports.__internalCreateInMemoryAgentCacheHandle = exports.getAISDKLanguageModel = exports.tool = exports.writeTrajectoryDir = exports.shouldPersistTrajectory = exports.redactInlineImagePayloads = exports.normalizeRubric = exports.nextResultFilename = exports.mergeAgentEvidence = exports.loadTrajectoryFromDisk = exports.buildAgentEvidenceFromStepFinished = exports.V3Evaluator = exports.connectToMCPServer = exports.toJsonSchema = exports.isZod3Schema = exports.isZod4Schema = exports.jsonSchemaToZod = exports.trimTrailingTextNode = exports.loadApiKeyFromEnv = exports.providerEnvVarMap = exports.injectUrls = exports.transformSchema = exports.getZodType = exports.toGeminiSchema = exports.isRunningInBun = exports.validateZodSchema = exports.modelToAgentProviderMap = exports.AgentProvider = exports.LLMClient = exports.AnnotatedScreenshotText = exports.Stagehand = exports.V3 = void 0;
40
40
  const PublicApi = __importStar(require("./types/public/index.js"));
41
41
  const v3_js_1 = require("./v3.js");
42
42
  const LLMClient_js_1 = require("./llm/LLMClient.js");
@@ -49,6 +49,7 @@ const ai_1 = require("ai");
49
49
  const LLMProvider_js_1 = require("./llm/LLMProvider.js");
50
50
  const serverAgentCache_js_1 = require("./cache/serverAgentCache.js");
51
51
  const supervisor_js_1 = require("./shutdown/supervisor.js");
52
+ const index_js_1 = require("./verifier/index.js");
52
53
  var v3_js_2 = require("./v3.js");
53
54
  Object.defineProperty(exports, "V3", { enumerable: true, get: function () { return v3_js_2.V3; } });
54
55
  var v3_js_3 = require("./v3.js");
@@ -79,6 +80,15 @@ var connection_js_2 = require("./mcp/connection.js");
79
80
  Object.defineProperty(exports, "connectToMCPServer", { enumerable: true, get: function () { return connection_js_2.connectToMCPServer; } });
80
81
  var v3Evaluator_js_2 = require("../v3Evaluator.js");
81
82
  Object.defineProperty(exports, "V3Evaluator", { enumerable: true, get: function () { return v3Evaluator_js_2.V3Evaluator; } });
83
+ var index_js_2 = require("./verifier/index.js");
84
+ Object.defineProperty(exports, "buildAgentEvidenceFromStepFinished", { enumerable: true, get: function () { return index_js_2.buildAgentEvidenceFromStepFinished; } });
85
+ Object.defineProperty(exports, "loadTrajectoryFromDisk", { enumerable: true, get: function () { return index_js_2.loadTrajectoryFromDisk; } });
86
+ Object.defineProperty(exports, "mergeAgentEvidence", { enumerable: true, get: function () { return index_js_2.mergeAgentEvidence; } });
87
+ Object.defineProperty(exports, "nextResultFilename", { enumerable: true, get: function () { return index_js_2.nextResultFilename; } });
88
+ Object.defineProperty(exports, "normalizeRubric", { enumerable: true, get: function () { return index_js_2.normalizeRubric; } });
89
+ Object.defineProperty(exports, "redactInlineImagePayloads", { enumerable: true, get: function () { return index_js_2.redactInlineImagePayloads; } });
90
+ Object.defineProperty(exports, "shouldPersistTrajectory", { enumerable: true, get: function () { return index_js_2.shouldPersistTrajectory; } });
91
+ Object.defineProperty(exports, "writeTrajectoryDir", { enumerable: true, get: function () { return index_js_2.writeTrajectoryDir; } });
82
92
  var ai_2 = require("ai");
83
93
  Object.defineProperty(exports, "tool", { enumerable: true, get: function () { return ai_2.tool; } });
84
94
  var LLMProvider_js_2 = require("./llm/LLMProvider.js");
@@ -110,6 +120,14 @@ const StagehandDefault = {
110
120
  toJsonSchema: zodCompat_js_1.toJsonSchema,
111
121
  connectToMCPServer: connection_js_1.connectToMCPServer,
112
122
  V3Evaluator: v3Evaluator_js_1.V3Evaluator,
123
+ buildAgentEvidenceFromStepFinished: index_js_1.buildAgentEvidenceFromStepFinished,
124
+ loadTrajectoryFromDisk: index_js_1.loadTrajectoryFromDisk,
125
+ mergeAgentEvidence: index_js_1.mergeAgentEvidence,
126
+ nextResultFilename: index_js_1.nextResultFilename,
127
+ normalizeRubric: index_js_1.normalizeRubric,
128
+ redactInlineImagePayloads: index_js_1.redactInlineImagePayloads,
129
+ shouldPersistTrajectory: index_js_1.shouldPersistTrajectory,
130
+ writeTrajectoryDir: index_js_1.writeTrajectoryDir,
113
131
  tool: ai_1.tool,
114
132
  getAISDKLanguageModel: LLMProvider_js_1.getAISDKLanguageModel,
115
133
  __internalCreateInMemoryAgentCacheHandle: serverAgentCache_js_1.__internalCreateInMemoryAgentCacheHandle,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/v3/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mEAAqD;AACrD,mCAA6B;AAC7B,qDAAwE;AACxE,+DAGkC;AAClC,0CAWqB;AACrB,iDAA0E;AAC1E,uDAAyD;AACzD,sDAAgD;AAChD,2BAA0B;AAC1B,yDAA6D;AAC7D,qEAAuF;AACvF,4DAA8E;AAE9E,iCAA6B;AAApB,2FAAA,EAAE,OAAA;AACX,iCAA0C;AAAjC,kGAAA,EAAE,OAAa;AAExB,0DAAwC;AACxC,mDAAwE;AAA/D,uHAAA,uBAAuB,OAAA;AAAE,yGAAA,SAAS,OAAA;AAE3C,6DAGkC;AAFhC,iHAAA,aAAa,OAAA;AACb,2HAAA,uBAAuB,OAAA;AAUzB,wCAWqB;AAVnB,6GAAA,iBAAiB,OAAA;AACjB,0GAAA,cAAc,OAAA;AACd,0GAAA,cAAc,OAAA;AACd,sGAAA,UAAU,OAAA;AACV,2GAAA,eAAe,OAAA;AACf,sGAAA,UAAU,OAAA;AACV,6GAAA,iBAAiB,OAAA;AACjB,6GAAA,iBAAiB,OAAA;AACjB,gHAAA,oBAAoB,OAAA;AACpB,2GAAA,eAAe,OAAA;AAEjB,+CAA0E;AAAjE,4GAAA,YAAY,OAAA;AAAE,4GAAA,YAAY,OAAA;AAAE,4GAAA,YAAY,OAAA;AAEjD,qDAAyD;AAAhD,mHAAA,kBAAkB,OAAA;AAC3B,oDAAgD;AAAvC,6GAAA,WAAW,OAAA;AAMpB,yBAA0B;AAAjB,0FAAA,IAAI,OAAA;AACb,uDAA6D;AAApD,uHAAA,qBAAqB,OAAA;AAC9B,mEAAuF;AAA9E,+IAAA,wCAAwC,OAAA;AACjD,0DAA8H;AAArH,6IAAA,kCAAkC,OAAgD;AAwB3F,MAAM,gBAAgB,GAAG;IACvB,GAAG,SAAS;IACZ,EAAE,EAAF,UAAE;IACF,SAAS,EAAE,UAAE;IACb,uBAAuB,EAAvB,sCAAuB;IACvB,SAAS,EAAT,wBAAS;IACT,aAAa,EAAb,gCAAa;IACb,uBAAuB,EAAvB,0CAAuB;IACvB,iBAAiB,EAAjB,4BAAiB;IACjB,cAAc,EAAd,yBAAc;IACd,cAAc,EAAd,yBAAc;IACd,UAAU,EAAV,qBAAU;IACV,eAAe,EAAf,0BAAe;IACf,UAAU,EAAV,qBAAU;IACV,iBAAiB,EAAjB,4BAAiB;IACjB,iBAAiB,EAAjB,4BAAiB;IACjB,oBAAoB,EAApB,+BAAoB;IACpB,eAAe,EAAf,0BAAe;IACf,YAAY,EAAZ,2BAAY;IACZ,YAAY,EAAZ,2BAAY;IACZ,YAAY,EAAZ,2BAAY;IACZ,kBAAkB,EAAlB,kCAAkB;IAClB,WAAW,EAAX,4BAAW;IACX,IAAI,EAAJ,SAAI;IACJ,qBAAqB,EAArB,sCAAqB;IACrB,wCAAwC,EAAxC,8DAAwC;IACxC,4CAA4C,EAC1C,kDAAkC;CACrC,CAAC;AAEF,kBAAe,gBAAgB,CAAC","sourcesContent":["import * as PublicApi from \"./types/public/index.js\";\nimport { V3 } from \"./v3.js\";\nimport { AnnotatedScreenshotText, LLMClient } from \"./llm/LLMClient.js\";\nimport {\n AgentProvider,\n modelToAgentProviderMap,\n} from \"./agent/AgentProvider.js\";\nimport {\n validateZodSchema,\n isRunningInBun,\n toGeminiSchema,\n getZodType,\n transformSchema,\n injectUrls,\n providerEnvVarMap,\n loadApiKeyFromEnv,\n trimTrailingTextNode,\n jsonSchemaToZod,\n} from \"../utils.js\";\nimport { isZod4Schema, isZod3Schema, toJsonSchema } from \"./zodCompat.js\";\nimport { connectToMCPServer } from \"./mcp/connection.js\";\nimport { V3Evaluator } from \"../v3Evaluator.js\";\nimport { tool } from \"ai\";\nimport { getAISDKLanguageModel } from \"./llm/LLMProvider.js\";\nimport { __internalCreateInMemoryAgentCacheHandle } from \"./cache/serverAgentCache.js\";\nimport { maybeRunShutdownSupervisorFromArgv } from \"./shutdown/supervisor.js\";\n\nexport { V3 } from \"./v3.js\";\nexport { V3 as Stagehand } from \"./v3.js\";\n\nexport * from \"./types/public/index.js\";\nexport { AnnotatedScreenshotText, LLMClient } from \"./llm/LLMClient.js\";\n\nexport {\n AgentProvider,\n modelToAgentProviderMap,\n} from \"./agent/AgentProvider.js\";\nexport type {\n AgentTools,\n AgentToolTypesMap,\n AgentUITools,\n AgentToolCall,\n AgentToolResult,\n} from \"./agent/tools/index.js\";\n\nexport {\n validateZodSchema,\n isRunningInBun,\n toGeminiSchema,\n getZodType,\n transformSchema,\n injectUrls,\n providerEnvVarMap,\n loadApiKeyFromEnv,\n trimTrailingTextNode,\n jsonSchemaToZod,\n} from \"../utils.js\";\nexport { isZod4Schema, isZod3Schema, toJsonSchema } from \"./zodCompat.js\";\n\nexport { connectToMCPServer } from \"./mcp/connection.js\";\nexport { V3Evaluator } from \"../v3Evaluator.js\";\nexport type {\n V3EvaluatorBackend,\n V3EvaluatorConstructorOptions,\n V3EvaluatorOptions,\n} from \"../v3Evaluator.js\";\nexport { tool } from \"ai\";\nexport { getAISDKLanguageModel } from \"./llm/LLMProvider.js\";\nexport { __internalCreateInMemoryAgentCacheHandle } from \"./cache/serverAgentCache.js\";\nexport { maybeRunShutdownSupervisorFromArgv as __internalMaybeRunShutdownSupervisorFromArgv } from \"./shutdown/supervisor.js\";\nexport type { ServerAgentCacheHandle } from \"./cache/serverAgentCache.js\";\n\nexport type {\n ChatMessage,\n ChatMessageContent,\n ChatMessageImageContent,\n ChatMessageTextContent,\n ChatCompletionOptions,\n LLMResponse,\n CreateChatCompletionOptions,\n LLMUsage,\n LLMParsedResponse,\n} from \"./llm/LLMClient.js\";\n\nexport type {\n StagehandZodSchema,\n StagehandZodObject,\n InferStagehandSchema,\n JsonSchemaDocument,\n} from \"./zodCompat.js\";\n\nexport type { JsonSchema, JsonSchemaProperty } from \"../utils.js\";\n\nconst StagehandDefault = {\n ...PublicApi,\n V3,\n Stagehand: V3,\n AnnotatedScreenshotText,\n LLMClient,\n AgentProvider,\n modelToAgentProviderMap,\n validateZodSchema,\n isRunningInBun,\n toGeminiSchema,\n getZodType,\n transformSchema,\n injectUrls,\n providerEnvVarMap,\n loadApiKeyFromEnv,\n trimTrailingTextNode,\n jsonSchemaToZod,\n isZod4Schema,\n isZod3Schema,\n toJsonSchema,\n connectToMCPServer,\n V3Evaluator,\n tool,\n getAISDKLanguageModel,\n __internalCreateInMemoryAgentCacheHandle,\n __internalMaybeRunShutdownSupervisorFromArgv:\n maybeRunShutdownSupervisorFromArgv,\n};\n\nexport default StagehandDefault;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/v3/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mEAAqD;AACrD,mCAA6B;AAC7B,qDAAwE;AACxE,+DAGkC;AAClC,0CAWqB;AACrB,iDAA0E;AAC1E,uDAAyD;AACzD,sDAAgD;AAChD,2BAA0B;AAC1B,yDAA6D;AAC7D,qEAAuF;AACvF,4DAA8E;AAC9E,kDAS6B;AAE7B,iCAA6B;AAApB,2FAAA,EAAE,OAAA;AACX,iCAA0C;AAAjC,kGAAA,EAAE,OAAa;AAExB,0DAAwC;AACxC,mDAAwE;AAA/D,uHAAA,uBAAuB,OAAA;AAAE,yGAAA,SAAS,OAAA;AAE3C,6DAGkC;AAFhC,iHAAA,aAAa,OAAA;AACb,2HAAA,uBAAuB,OAAA;AAUzB,wCAWqB;AAVnB,6GAAA,iBAAiB,OAAA;AACjB,0GAAA,cAAc,OAAA;AACd,0GAAA,cAAc,OAAA;AACd,sGAAA,UAAU,OAAA;AACV,2GAAA,eAAe,OAAA;AACf,sGAAA,UAAU,OAAA;AACV,6GAAA,iBAAiB,OAAA;AACjB,6GAAA,iBAAiB,OAAA;AACjB,gHAAA,oBAAoB,OAAA;AACpB,2GAAA,eAAe,OAAA;AAEjB,+CAA0E;AAAjE,4GAAA,YAAY,OAAA;AAAE,4GAAA,YAAY,OAAA;AAAE,4GAAA,YAAY,OAAA;AAEjD,qDAAyD;AAAhD,mHAAA,kBAAkB,OAAA;AAC3B,oDAAgD;AAAvC,6GAAA,WAAW,OAAA;AAoCpB,gDAS6B;AAR3B,8HAAA,kCAAkC,OAAA;AAClC,kHAAA,sBAAsB,OAAA;AACtB,8GAAA,kBAAkB,OAAA;AAClB,8GAAA,kBAAkB,OAAA;AAClB,2GAAA,eAAe,OAAA;AACf,qHAAA,yBAAyB,OAAA;AACzB,mHAAA,uBAAuB,OAAA;AACvB,8GAAA,kBAAkB,OAAA;AAEpB,yBAA0B;AAAjB,0FAAA,IAAI,OAAA;AACb,uDAA6D;AAApD,uHAAA,qBAAqB,OAAA;AAC9B,mEAAuF;AAA9E,+IAAA,wCAAwC,OAAA;AACjD,0DAA8H;AAArH,6IAAA,kCAAkC,OAAgD;AAwB3F,MAAM,gBAAgB,GAAG;IACvB,GAAG,SAAS;IACZ,EAAE,EAAF,UAAE;IACF,SAAS,EAAE,UAAE;IACb,uBAAuB,EAAvB,sCAAuB;IACvB,SAAS,EAAT,wBAAS;IACT,aAAa,EAAb,gCAAa;IACb,uBAAuB,EAAvB,0CAAuB;IACvB,iBAAiB,EAAjB,4BAAiB;IACjB,cAAc,EAAd,yBAAc;IACd,cAAc,EAAd,yBAAc;IACd,UAAU,EAAV,qBAAU;IACV,eAAe,EAAf,0BAAe;IACf,UAAU,EAAV,qBAAU;IACV,iBAAiB,EAAjB,4BAAiB;IACjB,iBAAiB,EAAjB,4BAAiB;IACjB,oBAAoB,EAApB,+BAAoB;IACpB,eAAe,EAAf,0BAAe;IACf,YAAY,EAAZ,2BAAY;IACZ,YAAY,EAAZ,2BAAY;IACZ,YAAY,EAAZ,2BAAY;IACZ,kBAAkB,EAAlB,kCAAkB;IAClB,WAAW,EAAX,4BAAW;IACX,kCAAkC,EAAlC,6CAAkC;IAClC,sBAAsB,EAAtB,iCAAsB;IACtB,kBAAkB,EAAlB,6BAAkB;IAClB,kBAAkB,EAAlB,6BAAkB;IAClB,eAAe,EAAf,0BAAe;IACf,yBAAyB,EAAzB,oCAAyB;IACzB,uBAAuB,EAAvB,kCAAuB;IACvB,kBAAkB,EAAlB,6BAAkB;IAClB,IAAI,EAAJ,SAAI;IACJ,qBAAqB,EAArB,sCAAqB;IACrB,wCAAwC,EAAxC,8DAAwC;IACxC,4CAA4C,EAC1C,kDAAkC;CACrC,CAAC;AAEF,kBAAe,gBAAgB,CAAC","sourcesContent":["import * as PublicApi from \"./types/public/index.js\";\nimport { V3 } from \"./v3.js\";\nimport { AnnotatedScreenshotText, LLMClient } from \"./llm/LLMClient.js\";\nimport {\n AgentProvider,\n modelToAgentProviderMap,\n} from \"./agent/AgentProvider.js\";\nimport {\n validateZodSchema,\n isRunningInBun,\n toGeminiSchema,\n getZodType,\n transformSchema,\n injectUrls,\n providerEnvVarMap,\n loadApiKeyFromEnv,\n trimTrailingTextNode,\n jsonSchemaToZod,\n} from \"../utils.js\";\nimport { isZod4Schema, isZod3Schema, toJsonSchema } from \"./zodCompat.js\";\nimport { connectToMCPServer } from \"./mcp/connection.js\";\nimport { V3Evaluator } from \"../v3Evaluator.js\";\nimport { tool } from \"ai\";\nimport { getAISDKLanguageModel } from \"./llm/LLMProvider.js\";\nimport { __internalCreateInMemoryAgentCacheHandle } from \"./cache/serverAgentCache.js\";\nimport { maybeRunShutdownSupervisorFromArgv } from \"./shutdown/supervisor.js\";\nimport {\n buildAgentEvidenceFromStepFinished,\n loadTrajectoryFromDisk,\n mergeAgentEvidence,\n nextResultFilename,\n normalizeRubric,\n redactInlineImagePayloads,\n shouldPersistTrajectory,\n writeTrajectoryDir,\n} from \"./verifier/index.js\";\n\nexport { V3 } from \"./v3.js\";\nexport { V3 as Stagehand } from \"./v3.js\";\n\nexport * from \"./types/public/index.js\";\nexport { AnnotatedScreenshotText, LLMClient } from \"./llm/LLMClient.js\";\n\nexport {\n AgentProvider,\n modelToAgentProviderMap,\n} from \"./agent/AgentProvider.js\";\nexport type {\n AgentTools,\n AgentToolTypesMap,\n AgentUITools,\n AgentToolCall,\n AgentToolResult,\n} from \"./agent/tools/index.js\";\n\nexport {\n validateZodSchema,\n isRunningInBun,\n toGeminiSchema,\n getZodType,\n transformSchema,\n injectUrls,\n providerEnvVarMap,\n loadApiKeyFromEnv,\n trimTrailingTextNode,\n jsonSchemaToZod,\n} from \"../utils.js\";\nexport { isZod4Schema, isZod3Schema, toJsonSchema } from \"./zodCompat.js\";\n\nexport { connectToMCPServer } from \"./mcp/connection.js\";\nexport { V3Evaluator } from \"../v3Evaluator.js\";\nexport type {\n V3EvaluatorBackend,\n V3EvaluatorConstructorOptions,\n V3EvaluatorOptions,\n} from \"../v3Evaluator.js\";\nexport type {\n Trajectory,\n TrajectoryStep,\n TrajectoryStatus,\n TrajectoryUsage,\n TaskSpec,\n Rubric,\n RubricCriterion,\n AgentEvidence,\n AgentEvidenceModality,\n CanonicalEvidence,\n CanonicalScreenshot,\n CanonicalTextEvidence,\n ErrorTaxonomyCategory,\n ErrorTaxonomySubCategory,\n EvidenceLoadOptions,\n EvidenceLoadResult,\n ProbeEvidence,\n ParseFailureStepNumbersOptions,\n ToolOutput,\n Verifier,\n VerifierConfig,\n EvaluationResult,\n RubricVerifierOptions,\n CriterionScore,\n FirstPointOfFailure,\n TaskValidity,\n VerifierFinding,\n VerifierRawSteps,\n} from \"./verifier/index.js\";\nexport {\n buildAgentEvidenceFromStepFinished,\n loadTrajectoryFromDisk,\n mergeAgentEvidence,\n nextResultFilename,\n normalizeRubric,\n redactInlineImagePayloads,\n shouldPersistTrajectory,\n writeTrajectoryDir,\n} from \"./verifier/index.js\";\nexport { tool } from \"ai\";\nexport { getAISDKLanguageModel } from \"./llm/LLMProvider.js\";\nexport { __internalCreateInMemoryAgentCacheHandle } from \"./cache/serverAgentCache.js\";\nexport { maybeRunShutdownSupervisorFromArgv as __internalMaybeRunShutdownSupervisorFromArgv } from \"./shutdown/supervisor.js\";\nexport type { ServerAgentCacheHandle } from \"./cache/serverAgentCache.js\";\n\nexport type {\n ChatMessage,\n ChatMessageContent,\n ChatMessageImageContent,\n ChatMessageTextContent,\n ChatCompletionOptions,\n LLMResponse,\n CreateChatCompletionOptions,\n LLMUsage,\n LLMParsedResponse,\n} from \"./llm/LLMClient.js\";\n\nexport type {\n StagehandZodSchema,\n StagehandZodObject,\n InferStagehandSchema,\n JsonSchemaDocument,\n} from \"./zodCompat.js\";\n\nexport type { JsonSchema, JsonSchemaProperty } from \"../utils.js\";\n\nconst StagehandDefault = {\n ...PublicApi,\n V3,\n Stagehand: V3,\n AnnotatedScreenshotText,\n LLMClient,\n AgentProvider,\n modelToAgentProviderMap,\n validateZodSchema,\n isRunningInBun,\n toGeminiSchema,\n getZodType,\n transformSchema,\n injectUrls,\n providerEnvVarMap,\n loadApiKeyFromEnv,\n trimTrailingTextNode,\n jsonSchemaToZod,\n isZod4Schema,\n isZod3Schema,\n toJsonSchema,\n connectToMCPServer,\n V3Evaluator,\n buildAgentEvidenceFromStepFinished,\n loadTrajectoryFromDisk,\n mergeAgentEvidence,\n nextResultFilename,\n normalizeRubric,\n redactInlineImagePayloads,\n shouldPersistTrajectory,\n writeTrajectoryDir,\n tool,\n getAISDKLanguageModel,\n __internalCreateInMemoryAgentCacheHandle,\n __internalMaybeRunShutdownSupervisorFromArgv:\n maybeRunShutdownSupervisorFromArgv,\n};\n\nexport default StagehandDefault;\n"]}
@@ -13,6 +13,7 @@ const STAGEHAND_DEFAULT_FLAGS = [
13
13
  "--no-default-browser-check",
14
14
  "--disable-dev-shm-usage",
15
15
  "--site-per-process",
16
+ "--enable-features=WebMCPTesting,DevToolsWebMCPSupport",
16
17
  ];
17
18
  async function launchLocalChrome(opts) {
18
19
  const connectTimeoutMs = opts.connectTimeoutMs ?? 15_000;