@browserbasehq/orca 3.1.0-patch.4 → 3.2.0-middleware.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/dist/cjs/lib/inference.js +1 -4
  2. package/dist/cjs/lib/inference.js.map +1 -1
  3. package/dist/cjs/lib/utils.d.ts +1 -0
  4. package/dist/cjs/lib/utils.js +4 -0
  5. package/dist/cjs/lib/utils.js.map +1 -1
  6. package/dist/cjs/lib/v3/agent/AgentClient.d.ts +8 -0
  7. package/dist/cjs/lib/v3/agent/AgentClient.js +13 -0
  8. package/dist/cjs/lib/v3/agent/AgentClient.js.map +1 -1
  9. package/dist/cjs/lib/v3/agent/AgentProvider.js +0 -1
  10. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  11. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +6 -7
  12. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  13. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +6 -7
  14. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  15. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js +1 -0
  16. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
  17. package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +4 -4
  18. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +67 -8
  19. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  20. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +4 -2
  21. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js +7 -7
  22. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  23. package/dist/cjs/lib/v3/agent/tools/act.d.ts +1 -1
  24. package/dist/cjs/lib/v3/agent/tools/act.js +11 -4
  25. package/dist/cjs/lib/v3/agent/tools/act.js.map +1 -1
  26. package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +8 -1
  27. package/dist/cjs/lib/v3/agent/tools/ariaTree.js +49 -22
  28. package/dist/cjs/lib/v3/agent/tools/ariaTree.js.map +1 -1
  29. package/dist/cjs/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
  30. package/dist/cjs/lib/v3/agent/tools/braveSearch.js.map +1 -0
  31. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
  32. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js +70 -0
  33. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
  34. package/dist/cjs/lib/v3/agent/tools/click.js +23 -31
  35. package/dist/cjs/lib/v3/agent/tools/click.js.map +1 -1
  36. package/dist/cjs/lib/v3/agent/tools/clickAndHold.js.map +1 -1
  37. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js +22 -30
  38. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  39. package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -2
  40. package/dist/cjs/lib/v3/agent/tools/extract.js +7 -3
  41. package/dist/cjs/lib/v3/agent/tools/extract.js.map +1 -1
  42. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js +30 -30
  43. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  44. package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +7 -2
  45. package/dist/cjs/lib/v3/agent/tools/fillform.js +56 -45
  46. package/dist/cjs/lib/v3/agent/tools/fillform.js.map +1 -1
  47. package/dist/cjs/lib/v3/agent/tools/index.d.ts +19 -3
  48. package/dist/cjs/lib/v3/agent/tools/index.js +63 -11
  49. package/dist/cjs/lib/v3/agent/tools/index.js.map +1 -1
  50. package/dist/cjs/lib/v3/agent/tools/keys.d.ts +1 -1
  51. package/dist/cjs/lib/v3/agent/tools/keys.js.map +1 -1
  52. package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +8 -0
  53. package/dist/cjs/lib/v3/agent/tools/screenshot.js +32 -15
  54. package/dist/cjs/lib/v3/agent/tools/screenshot.js.map +1 -1
  55. package/dist/cjs/lib/v3/agent/tools/scroll.js +12 -0
  56. package/dist/cjs/lib/v3/agent/tools/scroll.js.map +1 -1
  57. package/dist/cjs/lib/v3/agent/tools/type.js +23 -31
  58. package/dist/cjs/lib/v3/agent/tools/type.js.map +1 -1
  59. package/dist/cjs/lib/v3/agent/tools/wait.js +6 -0
  60. package/dist/cjs/lib/v3/agent/tools/wait.js.map +1 -1
  61. package/dist/cjs/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
  62. package/dist/cjs/lib/v3/agent/utils/captchaSolver.js +175 -0
  63. package/dist/cjs/lib/v3/agent/utils/captchaSolver.js.map +1 -0
  64. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
  65. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  66. package/dist/cjs/lib/v3/api.d.ts +2 -2
  67. package/dist/cjs/lib/v3/api.js +1 -1
  68. package/dist/cjs/lib/v3/api.js.map +1 -1
  69. package/dist/cjs/lib/v3/cache/ActCache.d.ts +0 -1
  70. package/dist/cjs/lib/v3/cache/ActCache.js +2 -18
  71. package/dist/cjs/lib/v3/cache/ActCache.js.map +1 -1
  72. package/dist/cjs/lib/v3/flowlogger/EventEmitter.d.ts +7 -0
  73. package/dist/cjs/lib/v3/flowlogger/EventEmitter.js +30 -0
  74. package/dist/cjs/lib/v3/flowlogger/EventEmitter.js.map +1 -0
  75. package/dist/cjs/lib/v3/flowlogger/EventSink.d.ts +44 -0
  76. package/dist/cjs/lib/v3/flowlogger/EventSink.js +217 -0
  77. package/dist/cjs/lib/v3/flowlogger/EventSink.js.map +1 -0
  78. package/dist/cjs/lib/v3/flowlogger/EventStore.d.ts +26 -0
  79. package/dist/cjs/lib/v3/flowlogger/EventStore.js +135 -0
  80. package/dist/cjs/lib/v3/flowlogger/EventStore.js.map +1 -0
  81. package/dist/cjs/lib/v3/flowlogger/FlowLogger.d.ts +99 -0
  82. package/dist/cjs/lib/v3/flowlogger/FlowLogger.js +591 -0
  83. package/dist/cjs/lib/v3/flowlogger/FlowLogger.js.map +1 -0
  84. package/dist/cjs/lib/v3/flowlogger/prettify.d.ts +6 -0
  85. package/dist/cjs/lib/v3/flowlogger/prettify.js +395 -0
  86. package/dist/cjs/lib/v3/flowlogger/prettify.js.map +1 -0
  87. package/dist/cjs/lib/v3/handlers/actHandler.js +1 -2
  88. package/dist/cjs/lib/v3/handlers/actHandler.js.map +1 -1
  89. package/dist/cjs/lib/v3/handlers/extractHandler.js +2 -2
  90. package/dist/cjs/lib/v3/handlers/extractHandler.js.map +1 -1
  91. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js +43 -57
  92. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
  93. package/dist/cjs/lib/v3/handlers/observeHandler.js +1 -2
  94. package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -1
  95. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -5
  96. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +130 -91
  97. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  98. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
  99. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +134 -14
  100. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  101. package/dist/cjs/lib/v3/index.d.ts +2 -1
  102. package/dist/cjs/lib/v3/launch/browserbase.d.ts +1 -1
  103. package/dist/cjs/lib/v3/launch/browserbase.js +4 -9
  104. package/dist/cjs/lib/v3/launch/browserbase.js.map +1 -1
  105. package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +5 -2
  106. package/dist/cjs/lib/v3/llm/LLMProvider.js +13 -11
  107. package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
  108. package/dist/cjs/lib/v3/llm/aisdk.js +11 -17
  109. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  110. package/dist/cjs/lib/v3/runtimePaths.js +2 -1
  111. package/dist/cjs/lib/v3/runtimePaths.js.map +1 -1
  112. package/dist/cjs/lib/v3/shutdown/supervisor.js +2 -2
  113. package/dist/cjs/lib/v3/shutdown/supervisor.js.map +1 -1
  114. package/dist/cjs/lib/v3/timeoutConfig.d.ts +1 -1
  115. package/dist/cjs/lib/v3/timeoutConfig.js +5 -0
  116. package/dist/cjs/lib/v3/timeoutConfig.js.map +1 -1
  117. package/dist/cjs/lib/v3/types/private/cache.d.ts +0 -1
  118. package/dist/cjs/lib/v3/types/private/cache.js.map +1 -1
  119. package/dist/cjs/lib/v3/types/private/shutdown.d.ts +1 -1
  120. package/dist/cjs/lib/v3/types/private/shutdown.js.map +1 -1
  121. package/dist/cjs/lib/v3/types/public/agent.d.ts +28 -3
  122. package/dist/cjs/lib/v3/types/public/agent.js +0 -1
  123. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  124. package/dist/cjs/lib/v3/types/public/api.d.ts +7 -0
  125. package/dist/cjs/lib/v3/types/public/api.js +9 -0
  126. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  127. package/dist/cjs/lib/v3/types/public/model.d.ts +12 -3
  128. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  129. package/dist/cjs/lib/v3/types/public/options.d.ts +8 -0
  130. package/dist/cjs/lib/v3/types/public/options.js.map +1 -1
  131. package/dist/cjs/lib/v3/understudy/cdp.d.ts +8 -13
  132. package/dist/cjs/lib/v3/understudy/cdp.js +180 -20
  133. package/dist/cjs/lib/v3/understudy/cdp.js.map +1 -1
  134. package/dist/cjs/lib/v3/understudy/context.d.ts +1 -0
  135. package/dist/cjs/lib/v3/understudy/context.js +142 -60
  136. package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
  137. package/dist/cjs/lib/v3/understudy/frame.js +23 -6
  138. package/dist/cjs/lib/v3/understudy/frame.js.map +1 -1
  139. package/dist/cjs/lib/v3/understudy/page.d.ts +13 -0
  140. package/dist/cjs/lib/v3/understudy/page.js +84 -21
  141. package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
  142. package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +0 -1
  143. package/dist/cjs/lib/v3/understudy/screenshotUtils.js +0 -18
  144. package/dist/cjs/lib/v3/understudy/screenshotUtils.js.map +1 -1
  145. package/dist/cjs/lib/v3/v3.d.ts +26 -3
  146. package/dist/cjs/lib/v3/v3.js +242 -180
  147. package/dist/cjs/lib/v3/v3.js.map +1 -1
  148. package/dist/cjs/lib/version.d.ts +1 -1
  149. package/dist/cjs/lib/version.js +1 -1
  150. package/dist/cjs/lib/version.js.map +1 -1
  151. package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js +56 -0
  152. package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
  153. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +6 -6
  154. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
  155. package/dist/cjs/tests/integration/cdp-session-detached.spec.js +1 -1
  156. package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +1 -1
  157. package/dist/cjs/tests/integration/context-addInitScript.spec.js +104 -11
  158. package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +1 -1
  159. package/dist/cjs/tests/integration/flowLogger.spec.js +714 -0
  160. package/dist/cjs/tests/integration/flowLogger.spec.js.map +1 -0
  161. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
  162. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +219 -0
  163. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
  164. package/dist/cjs/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
  165. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +85 -0
  166. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +1 -0
  167. package/dist/cjs/tests/integration/page-screenshot.spec.js +1 -1
  168. package/dist/cjs/tests/integration/page-screenshot.spec.js.map +1 -1
  169. package/dist/cjs/tests/integration/testUtils.d.ts +33 -0
  170. package/dist/cjs/tests/integration/testUtils.js +144 -0
  171. package/dist/cjs/tests/integration/testUtils.js.map +1 -1
  172. package/dist/cjs/tests/integration/timeouts.spec.js +278 -0
  173. package/dist/cjs/tests/integration/timeouts.spec.js.map +1 -1
  174. package/dist/cjs/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
  175. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +285 -0
  176. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +1 -0
  177. package/dist/cjs/tests/unit/agent-execution-model.test.js +1 -1
  178. package/dist/cjs/tests/unit/agent-execution-model.test.js.map +1 -1
  179. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +20 -0
  180. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +1 -1
  181. package/dist/cjs/tests/unit/captcha-solver.test.d.ts +1 -0
  182. package/dist/cjs/tests/unit/captcha-solver.test.js +154 -0
  183. package/dist/cjs/tests/unit/captcha-solver.test.js.map +1 -0
  184. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.d.ts +1 -0
  185. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js +95 -0
  186. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js.map +1 -0
  187. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.d.ts +1 -0
  188. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js +43 -0
  189. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js.map +1 -0
  190. package/dist/cjs/tests/unit/flowlogger-eventstore.test.d.ts +1 -0
  191. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js +250 -0
  192. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +1 -0
  193. package/dist/cjs/tests/unit/llm-middleware.test.d.ts +1 -0
  194. package/dist/cjs/tests/unit/llm-middleware.test.js +495 -0
  195. package/dist/cjs/tests/unit/llm-middleware.test.js.map +1 -0
  196. package/dist/cjs/tests/unit/model-deprecation.test.js +5 -8
  197. package/dist/cjs/tests/unit/model-deprecation.test.js.map +1 -1
  198. package/dist/cjs/tests/unit/openai-cua-client.test.d.ts +1 -0
  199. package/dist/cjs/tests/unit/openai-cua-client.test.js +71 -0
  200. package/dist/cjs/tests/unit/openai-cua-client.test.js.map +1 -0
  201. package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +1 -0
  202. package/dist/cjs/tests/unit/page-extra-http-headers.test.js +92 -0
  203. package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +1 -0
  204. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +13 -1
  205. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  206. package/dist/cjs/tests/unit/public-api/public-types.test.js.map +1 -1
  207. package/dist/esm/lib/inference.js +1 -4
  208. package/dist/esm/lib/inference.js.map +1 -1
  209. package/dist/esm/lib/utils.d.ts +1 -0
  210. package/dist/esm/lib/utils.js +3 -0
  211. package/dist/esm/lib/utils.js.map +1 -1
  212. package/dist/esm/lib/v3/agent/AgentClient.d.ts +8 -0
  213. package/dist/esm/lib/v3/agent/AgentClient.js +13 -0
  214. package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -1
  215. package/dist/esm/lib/v3/agent/AgentProvider.js +0 -1
  216. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  217. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +6 -7
  218. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  219. package/dist/esm/lib/v3/agent/GoogleCUAClient.js +6 -7
  220. package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  221. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +1 -0
  222. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
  223. package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +4 -4
  224. package/dist/esm/lib/v3/agent/OpenAICUAClient.js +67 -8
  225. package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  226. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +4 -2
  227. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +7 -7
  228. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  229. package/dist/esm/lib/v3/agent/tools/act.d.ts +1 -1
  230. package/dist/esm/lib/v3/agent/tools/act.js +11 -4
  231. package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
  232. package/dist/esm/lib/v3/agent/tools/ariaTree.d.ts +8 -1
  233. package/dist/esm/lib/v3/agent/tools/ariaTree.js +49 -22
  234. package/dist/esm/lib/v3/agent/tools/ariaTree.js.map +1 -1
  235. package/dist/esm/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
  236. package/dist/esm/lib/v3/agent/tools/braveSearch.js.map +1 -0
  237. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
  238. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js +66 -0
  239. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
  240. package/dist/esm/lib/v3/agent/tools/click.js +23 -31
  241. package/dist/esm/lib/v3/agent/tools/click.js.map +1 -1
  242. package/dist/esm/lib/v3/agent/tools/clickAndHold.js.map +1 -1
  243. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +22 -30
  244. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  245. package/dist/esm/lib/v3/agent/tools/extract.d.ts +2 -2
  246. package/dist/esm/lib/v3/agent/tools/extract.js +7 -3
  247. package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
  248. package/dist/esm/lib/v3/agent/tools/fillFormVision.js +30 -30
  249. package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  250. package/dist/esm/lib/v3/agent/tools/fillform.d.ts +7 -2
  251. package/dist/esm/lib/v3/agent/tools/fillform.js +56 -45
  252. package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
  253. package/dist/esm/lib/v3/agent/tools/index.d.ts +19 -3
  254. package/dist/esm/lib/v3/agent/tools/index.js +63 -11
  255. package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
  256. package/dist/esm/lib/v3/agent/tools/keys.d.ts +1 -1
  257. package/dist/esm/lib/v3/agent/tools/keys.js.map +1 -1
  258. package/dist/esm/lib/v3/agent/tools/screenshot.d.ts +8 -0
  259. package/dist/esm/lib/v3/agent/tools/screenshot.js +32 -15
  260. package/dist/esm/lib/v3/agent/tools/screenshot.js.map +1 -1
  261. package/dist/esm/lib/v3/agent/tools/scroll.js +12 -0
  262. package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -1
  263. package/dist/esm/lib/v3/agent/tools/type.js +23 -31
  264. package/dist/esm/lib/v3/agent/tools/type.js.map +1 -1
  265. package/dist/esm/lib/v3/agent/tools/wait.js +6 -0
  266. package/dist/esm/lib/v3/agent/tools/wait.js.map +1 -1
  267. package/dist/esm/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
  268. package/dist/esm/lib/v3/agent/utils/captchaSolver.js +171 -0
  269. package/dist/esm/lib/v3/agent/utils/captchaSolver.js.map +1 -0
  270. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
  271. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  272. package/dist/esm/lib/v3/api.d.ts +2 -2
  273. package/dist/esm/lib/v3/api.js +1 -1
  274. package/dist/esm/lib/v3/api.js.map +1 -1
  275. package/dist/esm/lib/v3/cache/ActCache.d.ts +0 -1
  276. package/dist/esm/lib/v3/cache/ActCache.js +2 -18
  277. package/dist/esm/lib/v3/cache/ActCache.js.map +1 -1
  278. package/dist/esm/lib/v3/flowlogger/EventEmitter.d.ts +7 -0
  279. package/dist/esm/lib/v3/flowlogger/EventEmitter.js +26 -0
  280. package/dist/esm/lib/v3/flowlogger/EventEmitter.js.map +1 -0
  281. package/dist/esm/lib/v3/flowlogger/EventSink.d.ts +44 -0
  282. package/dist/esm/lib/v3/flowlogger/EventSink.js +206 -0
  283. package/dist/esm/lib/v3/flowlogger/EventSink.js.map +1 -0
  284. package/dist/esm/lib/v3/flowlogger/EventStore.d.ts +26 -0
  285. package/dist/esm/lib/v3/flowlogger/EventStore.js +127 -0
  286. package/dist/esm/lib/v3/flowlogger/EventStore.js.map +1 -0
  287. package/dist/esm/lib/v3/flowlogger/FlowLogger.d.ts +99 -0
  288. package/dist/esm/lib/v3/flowlogger/FlowLogger.js +583 -0
  289. package/dist/esm/lib/v3/flowlogger/FlowLogger.js.map +1 -0
  290. package/dist/esm/lib/v3/flowlogger/prettify.d.ts +6 -0
  291. package/dist/esm/lib/v3/flowlogger/prettify.js +389 -0
  292. package/dist/esm/lib/v3/flowlogger/prettify.js.map +1 -0
  293. package/dist/esm/lib/v3/handlers/actHandler.js +1 -2
  294. package/dist/esm/lib/v3/handlers/actHandler.js.map +1 -1
  295. package/dist/esm/lib/v3/handlers/extractHandler.js +2 -2
  296. package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -1
  297. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +43 -57
  298. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
  299. package/dist/esm/lib/v3/handlers/observeHandler.js +1 -2
  300. package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
  301. package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -5
  302. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +131 -92
  303. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  304. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
  305. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +134 -14
  306. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  307. package/dist/esm/lib/v3/index.d.ts +2 -1
  308. package/dist/esm/lib/v3/launch/browserbase.d.ts +1 -1
  309. package/dist/esm/lib/v3/launch/browserbase.js +4 -9
  310. package/dist/esm/lib/v3/launch/browserbase.js.map +1 -1
  311. package/dist/esm/lib/v3/llm/LLMProvider.d.ts +5 -2
  312. package/dist/esm/lib/v3/llm/LLMProvider.js +14 -12
  313. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
  314. package/dist/esm/lib/v3/llm/aisdk.js +11 -17
  315. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  316. package/dist/esm/lib/v3/runtimePaths.js +2 -1
  317. package/dist/esm/lib/v3/runtimePaths.js.map +1 -1
  318. package/dist/esm/lib/v3/shutdown/supervisor.js +2 -2
  319. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
  320. package/dist/esm/lib/v3/timeoutConfig.d.ts +1 -1
  321. package/dist/esm/lib/v3/timeoutConfig.js +5 -0
  322. package/dist/esm/lib/v3/timeoutConfig.js.map +1 -1
  323. package/dist/esm/lib/v3/types/private/cache.d.ts +0 -1
  324. package/dist/esm/lib/v3/types/private/cache.js.map +1 -1
  325. package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -1
  326. package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
  327. package/dist/esm/lib/v3/types/public/agent.d.ts +28 -3
  328. package/dist/esm/lib/v3/types/public/agent.js +0 -1
  329. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  330. package/dist/esm/lib/v3/types/public/api.d.ts +7 -0
  331. package/dist/esm/lib/v3/types/public/api.js +9 -0
  332. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  333. package/dist/esm/lib/v3/types/public/model.d.ts +12 -3
  334. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  335. package/dist/esm/lib/v3/types/public/options.d.ts +8 -0
  336. package/dist/esm/lib/v3/types/public/options.js.map +1 -1
  337. package/dist/esm/lib/v3/understudy/cdp.d.ts +8 -13
  338. package/dist/esm/lib/v3/understudy/cdp.js +181 -21
  339. package/dist/esm/lib/v3/understudy/cdp.js.map +1 -1
  340. package/dist/esm/lib/v3/understudy/context.d.ts +1 -0
  341. package/dist/esm/lib/v3/understudy/context.js +142 -60
  342. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  343. package/dist/esm/lib/v3/understudy/frame.js +23 -6
  344. package/dist/esm/lib/v3/understudy/frame.js.map +1 -1
  345. package/dist/esm/lib/v3/understudy/page.d.ts +13 -0
  346. package/dist/esm/lib/v3/understudy/page.js +86 -23
  347. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  348. package/dist/esm/lib/v3/understudy/screenshotUtils.d.ts +0 -1
  349. package/dist/esm/lib/v3/understudy/screenshotUtils.js +0 -17
  350. package/dist/esm/lib/v3/understudy/screenshotUtils.js.map +1 -1
  351. package/dist/esm/lib/v3/v3.d.ts +26 -3
  352. package/dist/esm/lib/v3/v3.js +242 -181
  353. package/dist/esm/lib/v3/v3.js.map +1 -1
  354. package/dist/esm/lib/version.d.ts +1 -1
  355. package/dist/esm/lib/version.js +1 -1
  356. package/dist/esm/lib/version.js.map +1 -1
  357. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.d.ts +1 -0
  358. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js +54 -0
  359. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
  360. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +6 -6
  361. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
  362. package/dist/esm/tests/integration/cdp-session-detached.spec.js +1 -1
  363. package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +1 -1
  364. package/dist/esm/tests/integration/context-addInitScript.spec.js +104 -11
  365. package/dist/esm/tests/integration/context-addInitScript.spec.js.map +1 -1
  366. package/dist/esm/tests/integration/flowLogger.spec.d.ts +1 -0
  367. package/dist/esm/tests/integration/flowLogger.spec.js +712 -0
  368. package/dist/esm/tests/integration/flowLogger.spec.js.map +1 -0
  369. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
  370. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +217 -0
  371. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
  372. package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
  373. package/dist/esm/tests/integration/page-extra-http-headers.spec.js +83 -0
  374. package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +1 -0
  375. package/dist/esm/tests/integration/page-screenshot.spec.js +1 -1
  376. package/dist/esm/tests/integration/page-screenshot.spec.js.map +1 -1
  377. package/dist/esm/tests/integration/testUtils.d.ts +33 -0
  378. package/dist/esm/tests/integration/testUtils.js +138 -0
  379. package/dist/esm/tests/integration/testUtils.js.map +1 -1
  380. package/dist/esm/tests/integration/timeouts.spec.js +278 -0
  381. package/dist/esm/tests/integration/timeouts.spec.js.map +1 -1
  382. package/dist/esm/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
  383. package/dist/esm/tests/unit/agent-captcha-hooks.test.js +283 -0
  384. package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +1 -0
  385. package/dist/esm/tests/unit/agent-execution-model.test.js +1 -1
  386. package/dist/esm/tests/unit/agent-execution-model.test.js.map +1 -1
  387. package/dist/esm/tests/unit/browserbase-session-accessors.test.js +20 -0
  388. package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +1 -1
  389. package/dist/esm/tests/unit/captcha-solver.test.d.ts +1 -0
  390. package/dist/esm/tests/unit/captcha-solver.test.js +152 -0
  391. package/dist/esm/tests/unit/captcha-solver.test.js.map +1 -0
  392. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.d.ts +1 -0
  393. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js +93 -0
  394. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js.map +1 -0
  395. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.d.ts +1 -0
  396. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js +41 -0
  397. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js.map +1 -0
  398. package/dist/esm/tests/unit/flowlogger-eventstore.test.d.ts +1 -0
  399. package/dist/esm/tests/unit/flowlogger-eventstore.test.js +248 -0
  400. package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +1 -0
  401. package/dist/esm/tests/unit/llm-middleware.test.d.ts +1 -0
  402. package/dist/esm/tests/unit/llm-middleware.test.js +460 -0
  403. package/dist/esm/tests/unit/llm-middleware.test.js.map +1 -0
  404. package/dist/esm/tests/unit/model-deprecation.test.js +5 -8
  405. package/dist/esm/tests/unit/model-deprecation.test.js.map +1 -1
  406. package/dist/esm/tests/unit/openai-cua-client.test.d.ts +1 -0
  407. package/dist/esm/tests/unit/openai-cua-client.test.js +69 -0
  408. package/dist/esm/tests/unit/openai-cua-client.test.js.map +1 -0
  409. package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +1 -0
  410. package/dist/esm/tests/unit/page-extra-http-headers.test.js +90 -0
  411. package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +1 -0
  412. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +13 -1
  413. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  414. package/dist/esm/tests/unit/public-api/public-types.test.js.map +1 -1
  415. package/package.json +5 -3
  416. package/dist/cjs/lib/v3/agent/tools/search.js.map +0 -1
  417. package/dist/cjs/lib/v3/flowLogger.d.ts +0 -139
  418. package/dist/cjs/lib/v3/flowLogger.js +0 -881
  419. package/dist/cjs/lib/v3/flowLogger.js.map +0 -1
  420. package/dist/cjs/tests/unit/rerender-missing-shadows.test.js +0 -209
  421. package/dist/cjs/tests/unit/rerender-missing-shadows.test.js.map +0 -1
  422. package/dist/esm/lib/v3/agent/tools/search.js.map +0 -1
  423. package/dist/esm/lib/v3/flowLogger.d.ts +0 -139
  424. package/dist/esm/lib/v3/flowLogger.js +0 -868
  425. package/dist/esm/lib/v3/flowLogger.js.map +0 -1
  426. package/dist/esm/tests/unit/rerender-missing-shadows.test.js +0 -207
  427. package/dist/esm/tests/unit/rerender-missing-shadows.test.js.map +0 -1
  428. /package/dist/cjs/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
  429. /package/dist/cjs/tests/{unit/rerender-missing-shadows.test.d.ts → integration/agent-captcha-autosolve.spec.d.ts} +0 -0
  430. /package/dist/{esm/tests/unit/rerender-missing-shadows.test.d.ts → cjs/tests/integration/flowLogger.spec.d.ts} +0 -0
  431. /package/dist/esm/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
@@ -71,7 +71,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
71
71
  };
72
72
  Object.defineProperty(exports, "__esModule", { value: true });
73
73
  exports.V3 = void 0;
74
- const events_1 = require("events");
74
+ exports.resolveModelConfiguration = resolveModelConfiguration;
75
75
  const fs_1 = __importDefault(require("fs"));
76
76
  const os_1 = __importDefault(require("os"));
77
77
  const path_1 = __importDefault(require("path"));
@@ -89,6 +89,7 @@ const extractHandler_js_1 = require("./handlers/extractHandler.js");
89
89
  const observeHandler_js_1 = require("./handlers/observeHandler.js");
90
90
  const v3AgentHandler_js_1 = require("./handlers/v3AgentHandler.js");
91
91
  const v3CuaAgentHandler_js_1 = require("./handlers/v3CuaAgentHandler.js");
92
+ const captchaSolver_js_1 = require("./agent/utils/captchaSolver.js");
92
93
  const browserbase_js_1 = require("./launch/browserbase.js");
93
94
  const local_js_1 = require("./launch/local.js");
94
95
  const LLMProvider_js_1 = require("./llm/LLMProvider.js");
@@ -102,11 +103,14 @@ const modelUtils_js_2 = require("../modelUtils.js");
102
103
  const api_js_1 = require("./api.js");
103
104
  const validateExperimentalFeatures_js_1 = require("./agent/utils/validateExperimentalFeatures.js");
104
105
  const variables_js_1 = require("./agent/utils/variables.js");
105
- const flowLogger_js_1 = require("./flowLogger.js");
106
+ const FlowLogger_js_1 = require("./flowlogger/FlowLogger.js");
107
+ const EventEmitter_js_1 = require("./flowlogger/EventEmitter.js");
108
+ const EventStore_js_1 = require("./flowlogger/EventStore.js");
106
109
  const timeoutGuard_js_1 = require("./handlers/handlerUtils/timeoutGuard.js");
107
110
  const sdkErrors_js_1 = require("./types/public/sdkErrors.js");
108
111
  const DEFAULT_MODEL_NAME = "openai/gpt-4.1-mini";
109
112
  const DEFAULT_VIEWPORT = { width: 1288, height: 711 };
113
+ const DEFAULT_AGENT_TOOL_TIMEOUT_MS = 45000;
110
114
  function resolveModelConfiguration(model) {
111
115
  if (!model) {
112
116
  return { modelName: DEFAULT_MODEL_NAME };
@@ -115,13 +119,14 @@ function resolveModelConfiguration(model) {
115
119
  return { modelName: model };
116
120
  }
117
121
  if (model && typeof model === "object") {
118
- const { modelName, ...clientOptions } = model;
122
+ const { modelName, middleware, ...clientOptions } = model;
119
123
  if (!modelName) {
120
124
  throw new index_js_1.StagehandInvalidArgumentError("model.modelName is required when providing client options.");
121
125
  }
122
126
  return {
123
127
  modelName,
124
128
  clientOptions: clientOptions,
129
+ middleware,
125
130
  };
126
131
  }
127
132
  return { modelName: DEFAULT_MODEL_NAME };
@@ -149,9 +154,15 @@ let V3 = (() => {
149
154
  return class V3 {
150
155
  static {
151
156
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
152
- _act_decorators = [(0, flowLogger_js_1.logStagehandStep)("Stagehand.act", "ACT")];
153
- _extract_decorators = [(0, flowLogger_js_1.logStagehandStep)("Stagehand.extract", "EXTRACT")];
154
- _observe_decorators = [(0, flowLogger_js_1.logStagehandStep)("Stagehand.observe", "OBSERVE")];
157
+ _act_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({
158
+ eventType: "StagehandAct",
159
+ })];
160
+ _extract_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({
161
+ eventType: "StagehandExtract",
162
+ })];
163
+ _observe_decorators = [FlowLogger_js_1.FlowLogger.wrapWithLogging({
164
+ eventType: "StagehandObserve",
165
+ })];
155
166
  __esDecorate(this, null, _act_decorators, { kind: "method", name: "act", static: false, private: false, access: { has: obj => "act" in obj, get: obj => obj.act }, metadata: _metadata }, null, _instanceExtraInitializers);
156
167
  __esDecorate(this, null, _extract_decorators, { kind: "method", name: "extract", static: false, private: false, access: { has: obj => "extract" in obj, get: obj => obj.extract }, metadata: _metadata }, null, _instanceExtraInitializers);
157
168
  __esDecorate(this, null, _observe_decorators, { kind: "method", name: "observe", static: false, private: false, access: { has: obj => "observe" in obj, get: obj => obj.observe }, metadata: _metadata }, null, _instanceExtraInitializers);
@@ -168,7 +179,7 @@ let V3 = (() => {
168
179
  * Event bus for internal communication.
169
180
  * Emits events like 'screenshot' when screenshots are captured during agent execution.
170
181
  */
171
- bus = new events_1.EventEmitter();
182
+ bus = new EventEmitter_js_1.EventEmitterWithWildcardSupport();
172
183
  modelName;
173
184
  modelClientOptions;
174
185
  llmProvider;
@@ -193,6 +204,15 @@ let V3 = (() => {
193
204
  get isBrowserbase() {
194
205
  return this.state.kind === "BROWSERBASE";
195
206
  }
207
+ /**
208
+ * Returns true if captcha auto-solving is enabled on Browserbase.
209
+ * Defaults to true when not explicitly set to false.
210
+ */
211
+ get isCaptchaAutoSolveEnabled() {
212
+ return (this.isBrowserbase &&
213
+ this.opts.browserbaseSessionCreateParams?.browserSettings
214
+ ?.solveCaptchas !== false);
215
+ }
196
216
  /**
197
217
  * Returns true if advancedStealth is enabled in Browserbase settings.
198
218
  */
@@ -236,6 +256,9 @@ let V3 = (() => {
236
256
  stagehandLogger;
237
257
  _history = [];
238
258
  instanceId;
259
+ sessionId;
260
+ eventStore;
261
+ flowLoggerContext;
239
262
  static _processGuardsInstalled = false;
240
263
  static _instances = new Set();
241
264
  cacheStorage;
@@ -275,6 +298,7 @@ let V3 = (() => {
275
298
  this.externalLogger = opts.logger;
276
299
  this.verbose = opts.verbose ?? 1;
277
300
  this.instanceId = (0, uuid_1.v7)();
301
+ this.sessionId = opts.sessionId ?? this.instanceId;
278
302
  this.keepAlive =
279
303
  opts.keepAlive ?? opts.browserbaseSessionCreateParams?.keepAlive;
280
304
  // Create per-instance StagehandLogger (handles usePino, verbose, externalLogger)
@@ -306,11 +330,11 @@ let V3 = (() => {
306
330
  catch {
307
331
  // ignore
308
332
  }
309
- const { modelName, clientOptions } = resolveModelConfiguration(opts.model);
333
+ const { modelName, clientOptions, middleware } = resolveModelConfiguration(opts.model);
310
334
  this.modelName = modelName;
311
335
  this.experimental = opts.experimental ?? false;
312
336
  this.logInferenceToFile = opts.logInferenceToFile ?? false;
313
- this.llmProvider = new LLMProvider_js_1.LLMProvider(this.logger);
337
+ this.llmProvider = new LLMProvider_js_1.LLMProvider(this.logger, middleware);
314
338
  this.domSettleTimeoutMs = opts.domSettleTimeout;
315
339
  this.disableAPI = opts.disableAPI ?? false;
316
340
  const baseClientOptions = clientOptions
@@ -367,8 +391,21 @@ let V3 = (() => {
367
391
  act: this.act.bind(this),
368
392
  });
369
393
  this.opts = opts;
370
- // Initialize session file logger
371
- flowLogger_js_1.SessionFileLogger.init(this.instanceId, opts);
394
+ // FlowLogger always gets a per-instance session context and shared event
395
+ // bus. The attached EventStore decides which sinks are active:
396
+ // `BROWSERBASE_FLOW_LOGS=1` enables pretty stderr output,
397
+ // and `BROWSERBASE_CONFIG_DIR` enables the pretty/jsonl file sinks for this session.
398
+ this.eventStore = new EventStore_js_1.EventStore(this.sessionId, opts);
399
+ this.flowLoggerContext = FlowLogger_js_1.FlowLogger.init(this.sessionId, this.bus);
400
+ // Flow event pipeline:
401
+ // FlowLogger -> this.bus -> this.eventStore -> configured sinks/query history.
402
+ // V3 owns the bus for this session. EventStore is not another bus; it just
403
+ // receives already-emitted FlowEvents here, then fans them out to sinks and
404
+ // keeps the queryable per-session history used by /v4/log, parent/ancestor lookups, and tests.
405
+ // `on()` stores a strong reference to the handler, so the EventStore
406
+ // stays alive until this bus is garbage-collected with the rest of the V3
407
+ // object graph.
408
+ this.bus.on("*", this.eventStore.emit);
372
409
  // Track instance for global process guard handling
373
410
  V3._instances.add(this);
374
411
  }
@@ -398,15 +435,18 @@ let V3 = (() => {
398
435
  }
399
436
  let modelName;
400
437
  let clientOptions;
438
+ let perCallMiddleware;
401
439
  if (typeof model === "string") {
402
440
  modelName = model;
403
441
  }
404
442
  else {
405
- const { modelName: overrideModelName, ...rest } = model;
443
+ const { modelName: overrideModelName, middleware, ...rest } = model;
406
444
  modelName = overrideModelName;
407
445
  clientOptions = rest;
446
+ perCallMiddleware = middleware;
408
447
  }
409
448
  if (modelName === this.modelName &&
449
+ !perCallMiddleware &&
410
450
  (!clientOptions || Object.keys(clientOptions).length === 0)) {
411
451
  return this.llmClient;
412
452
  }
@@ -431,7 +471,11 @@ let V3 = (() => {
431
471
  if (cached) {
432
472
  return cached;
433
473
  }
434
- const client = this.llmProvider.getClient(modelName, mergedOptions, { experimental: this.experimental, disableAPI: this.disableAPI });
474
+ const client = this.llmProvider.getClient(modelName, mergedOptions, {
475
+ experimental: this.experimental,
476
+ disableAPI: this.disableAPI,
477
+ middleware: perCallMiddleware,
478
+ });
435
479
  this.overrideLlmClients.set(cacheKey, client);
436
480
  return client;
437
481
  }
@@ -591,6 +635,13 @@ let V3 = (() => {
591
635
  }
592
636
  }
593
637
  const lbo = this.opts.localBrowserLaunchOptions ?? {};
638
+ if (lbo.cdpHeaders && !lbo.cdpUrl) {
639
+ this.logger({
640
+ category: "init",
641
+ message: "`cdpHeaders` was provided but `cdpUrl` is not set — cdpHeaders will be ignored. Set `cdpUrl` to connect to an existing browser via CDP.",
642
+ level: 2,
643
+ });
644
+ }
594
645
  // If a CDP URL is provided, attach instead of launching.
595
646
  if (lbo.cdpUrl) {
596
647
  this.logger({
@@ -600,10 +651,9 @@ let V3 = (() => {
600
651
  });
601
652
  this.ctx = await context_js_1.V3Context.create(lbo.cdpUrl, {
602
653
  env: "LOCAL",
654
+ cdpHeaders: lbo.cdpHeaders,
603
655
  });
604
- const logCtx = flowLogger_js_1.SessionFileLogger.getContext();
605
- this.ctx.conn.cdpLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpCallEvent(info, logCtx);
606
- this.ctx.conn.cdpEventLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpMessageEvent(info, logCtx);
656
+ this.ctx.conn.flowLoggerContext = this.flowLoggerContext;
607
657
  this.ctx.conn.onTransportClosed(this._onCdpClosed);
608
658
  this.state = {
609
659
  kind: "LOCAL",
@@ -699,9 +749,7 @@ let V3 = (() => {
699
749
  env: "LOCAL",
700
750
  localBrowserLaunchOptions: lbo,
701
751
  });
702
- const logCtx = flowLogger_js_1.SessionFileLogger.getContext();
703
- this.ctx.conn.cdpLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpCallEvent(info, logCtx);
704
- this.ctx.conn.cdpEventLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpMessageEvent(info, logCtx);
752
+ this.ctx.conn.flowLoggerContext = this.flowLoggerContext;
705
753
  this.ctx.conn.onTransportClosed(this._onCdpClosed);
706
754
  this.state = {
707
755
  kind: "LOCAL",
@@ -728,9 +776,6 @@ let V3 = (() => {
728
776
  }
729
777
  if (this.opts.env === "BROWSERBASE") {
730
778
  const { apiKey, projectId } = this.requireBrowserbaseCreds();
731
- if (!apiKey || !projectId) {
732
- throw new index_js_1.MissingEnvironmentVariableError("BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID", "Browserbase environment");
733
- }
734
779
  this.logger({
735
780
  category: "init",
736
781
  message: "Starting browserbase session",
@@ -739,9 +784,13 @@ let V3 = (() => {
739
784
  const baseSessionParams = this.opts.browserbaseSessionCreateParams ?? {};
740
785
  const resolvedKeepAlive = this.keepAlive;
741
786
  const keepAlive = this.keepAlive === true;
742
- const effectiveSessionParams = resolvedKeepAlive !== undefined
743
- ? { ...baseSessionParams, keepAlive: resolvedKeepAlive }
744
- : baseSessionParams;
787
+ let effectiveSessionParams = baseSessionParams;
788
+ if (resolvedKeepAlive !== undefined) {
789
+ effectiveSessionParams = {
790
+ ...baseSessionParams,
791
+ keepAlive: resolvedKeepAlive,
792
+ };
793
+ }
745
794
  if (!this.disableAPI && !this.experimental) {
746
795
  this.apiClient = new api_js_1.StagehandAPIClient({
747
796
  apiKey,
@@ -749,18 +798,20 @@ let V3 = (() => {
749
798
  logger: this.logger,
750
799
  serverCache: this.opts.serverCache,
751
800
  });
801
+ const { projectId: overrideProjectId, browserSettings, userMetadata, ...restSessionParams } = effectiveSessionParams;
802
+ const resolvedProjectId = overrideProjectId ?? projectId;
752
803
  const createSessionPayload = {
753
- projectId: effectiveSessionParams.projectId ?? projectId,
754
- ...effectiveSessionParams,
804
+ ...(resolvedProjectId ? { projectId: resolvedProjectId } : {}),
805
+ ...restSessionParams,
755
806
  browserSettings: {
756
- ...(effectiveSessionParams.browserSettings ?? {}),
757
- viewport: effectiveSessionParams.browserSettings?.viewport ?? {
807
+ ...(browserSettings ?? {}),
808
+ viewport: browserSettings?.viewport ?? {
758
809
  width: 1288,
759
810
  height: 711,
760
811
  },
761
812
  },
762
813
  userMetadata: {
763
- ...(effectiveSessionParams.userMetadata ?? {}),
814
+ ...(userMetadata ?? {}),
764
815
  stagehand: "true",
765
816
  },
766
817
  };
@@ -784,9 +835,7 @@ let V3 = (() => {
784
835
  env: "BROWSERBASE",
785
836
  apiClient: this.apiClient,
786
837
  });
787
- const logCtx = flowLogger_js_1.SessionFileLogger.getContext();
788
- this.ctx.conn.cdpLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpCallEvent(info, logCtx);
789
- this.ctx.conn.cdpEventLogger = (info) => flowLogger_js_1.SessionFileLogger.logCdpMessageEvent(info, logCtx);
838
+ this.ctx.conn.flowLoggerContext = this.flowLoggerContext;
790
839
  this.ctx.conn.onTransportClosed(this._onCdpClosed);
791
840
  this.state = { kind: "BROWSERBASE", sessionId, ws, bb };
792
841
  this.browserbaseSessionId = sessionId;
@@ -908,10 +957,7 @@ let V3 = (() => {
908
957
  });
909
958
  }
910
959
  else {
911
- const effectiveTimeoutMs = typeof options?.timeout === "number" && options.timeout > 0
912
- ? options.timeout
913
- : undefined;
914
- const ensureTimeRemaining = (0, timeoutGuard_js_1.createTimeoutGuard)(effectiveTimeoutMs, (ms) => new sdkErrors_js_1.ActTimeoutError(ms));
960
+ const ensureTimeRemaining = (0, timeoutGuard_js_1.createTimeoutGuard)(options?.timeout, (ms) => new sdkErrors_js_1.ActTimeoutError(ms));
915
961
  actResult = await this.actHandler.takeDeterministicAction({ ...input, selector }, v3Page, this.domSettleTimeoutMs, this.resolveLlmClient(options?.model), ensureTimeRemaining, options?.variables);
916
962
  }
917
963
  // history: record ObserveResult-based act call
@@ -1132,7 +1178,7 @@ let V3 = (() => {
1132
1178
  try {
1133
1179
  // Close session file logger
1134
1180
  try {
1135
- await flowLogger_js_1.SessionFileLogger.close();
1181
+ await FlowLogger_js_1.FlowLogger.close(this.flowLoggerContext);
1136
1182
  }
1137
1183
  catch {
1138
1184
  // ignore
@@ -1168,6 +1214,12 @@ let V3 = (() => {
1168
1214
  catch {
1169
1215
  // ignore
1170
1216
  }
1217
+ try {
1218
+ await this.eventStore.destroy();
1219
+ }
1220
+ catch {
1221
+ // ignore
1222
+ }
1171
1223
  try {
1172
1224
  this.bus.removeAllListeners();
1173
1225
  }
@@ -1181,6 +1233,13 @@ let V3 = (() => {
1181
1233
  V3._instances.delete(this);
1182
1234
  }
1183
1235
  }
1236
+ /**
1237
+ * Resolves the Browserbase API key from options or environment variables.
1238
+ * Returns undefined if no key is found (does not throw).
1239
+ */
1240
+ get browserbaseApiKey() {
1241
+ return this.opts.apiKey || process_1.default.env.BROWSERBASE_API_KEY;
1242
+ }
1184
1243
  /** Guard: ensure Browserbase credentials exist in options. */
1185
1244
  requireBrowserbaseCreds() {
1186
1245
  let { apiKey, projectId } = this.opts;
@@ -1190,17 +1249,13 @@ let V3 = (() => {
1190
1249
  if (!projectId)
1191
1250
  projectId =
1192
1251
  process_1.default.env.BROWSERBASE_PROJECT_ID ?? process_1.default.env.BB_PROJECT_ID;
1193
- if (!apiKey || !projectId) {
1194
- const missing = [];
1195
- if (!apiKey)
1196
- missing.push("BROWSERBASE_API_KEY");
1197
- if (!projectId)
1198
- missing.push("BROWSERBASE_PROJECT_ID");
1199
- throw new index_js_1.MissingEnvironmentVariableError(missing.join(", "), "Browserbase");
1252
+ if (!apiKey) {
1253
+ throw new index_js_1.MissingEnvironmentVariableError("BROWSERBASE_API_KEY", "Browserbase");
1200
1254
  }
1201
1255
  // Cache resolved values back into opts for consistency
1202
1256
  this.opts.apiKey = apiKey;
1203
- this.opts.projectId = projectId;
1257
+ if (projectId)
1258
+ this.opts.projectId = projectId;
1204
1259
  // Informational log
1205
1260
  this.logger({
1206
1261
  category: "init",
@@ -1342,10 +1397,16 @@ let V3 = (() => {
1342
1397
  ? this.resolveLlmClient(options.model)
1343
1398
  : this.llmClient;
1344
1399
  const resolvedExecutionModel = options?.executionModel ?? options?.model;
1345
- const handler = new v3AgentHandler_js_1.V3AgentHandler(this, this.logger, agentLlmClient, resolvedExecutionModel, options?.systemPrompt, tools, options?.mode);
1400
+ const handler = new v3AgentHandler_js_1.V3AgentHandler(this, this.logger, agentLlmClient, resolvedExecutionModel, options?.systemPrompt, tools, options?.mode, this.isCaptchaAutoSolveEnabled);
1346
1401
  const resolvedOptions = typeof instructionOrOptions === "string"
1347
- ? { instruction: instructionOrOptions }
1348
- : instructionOrOptions;
1402
+ ? {
1403
+ instruction: instructionOrOptions,
1404
+ toolTimeout: DEFAULT_AGENT_TOOL_TIMEOUT_MS,
1405
+ }
1406
+ : {
1407
+ ...instructionOrOptions,
1408
+ toolTimeout: instructionOrOptions.toolTimeout ?? DEFAULT_AGENT_TOOL_TIMEOUT_MS,
1409
+ };
1349
1410
  const callbacksWithSafety = resolvedOptions.callbacks;
1350
1411
  if (callbacksWithSafety?.onSafetyConfirmation) {
1351
1412
  throw new index_js_1.StagehandInvalidArgumentError('onSafetyConfirmation callback is only supported when using mode: "cua" agents.');
@@ -1425,145 +1486,59 @@ let V3 = (() => {
1425
1486
  throw new index_js_1.CuaModelRequiredError(index_js_1.AVAILABLE_CUA_MODELS);
1426
1487
  }
1427
1488
  const agentConfigSignature = this.agentCache.buildConfigSignature(options);
1428
- return {
1429
- execute: async (instructionOrOptions) => (0, logger_js_2.withInstanceLogContext)(this.instanceId, async () => {
1430
- (0, validateExperimentalFeatures_js_1.validateExperimentalFeatures)({
1431
- isExperimental: this.experimental,
1432
- agentConfig: options,
1433
- executeOptions: typeof instructionOrOptions === "object"
1434
- ? instructionOrOptions
1435
- : null,
1436
- });
1437
- flowLogger_js_1.SessionFileLogger.logAgentTaskStarted({
1438
- invocation: "Agent.execute",
1439
- args: [instructionOrOptions],
1440
- });
1441
- const tools = options?.integrations
1442
- ? await (0, utils_js_2.resolveTools)(options.integrations, options.tools)
1443
- : (options?.tools ?? {});
1444
- const handler = new v3CuaAgentHandler_js_1.V3CuaAgentHandler(this, this.logger, {
1445
- modelName,
1446
- clientOptions,
1447
- userProvidedInstructions: options.systemPrompt ??
1448
- `You are a helpful assistant that can use a web browser.\nDo not ask follow up questions, the user will trust your judgement.`,
1449
- }, tools);
1450
- const resolvedOptions = typeof instructionOrOptions === "string"
1451
- ? { instruction: instructionOrOptions }
1452
- : instructionOrOptions;
1453
- if (resolvedOptions.page) {
1454
- const normalizedPage = await this.normalizeToV3Page(resolvedOptions.page);
1455
- this.ctx.setActivePage(normalizedPage);
1456
- }
1457
- const instruction = resolvedOptions.instruction.trim();
1458
- const sanitizedOptions = this.agentCache.sanitizeExecuteOptions(resolvedOptions);
1459
- const cacheVariables = (0, variables_js_1.flattenVariables)(resolvedOptions.variables);
1460
- let cacheContext = null;
1461
- if (this.agentCache.shouldAttemptCache(instruction)) {
1462
- const startPage = await this.ctx.awaitActivePage();
1463
- cacheContext = await this.agentCache.prepareContext({
1464
- instruction,
1465
- options: sanitizedOptions,
1466
- configSignature: agentConfigSignature,
1467
- page: startPage,
1468
- variables: cacheVariables,
1469
- });
1470
- if (cacheContext) {
1471
- const replayed = await this.agentCache.tryReplay(cacheContext);
1472
- if (replayed) {
1473
- flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted({ cacheHit: true });
1474
- return replayed;
1475
- }
1476
- }
1477
- }
1478
- let agentSteps = [];
1479
- const shouldRecordLocally = !!cacheContext && (!this.apiClient || this.experimental);
1480
- if (shouldRecordLocally) {
1481
- this.beginAgentReplayRecording();
1482
- }
1483
- let result;
1484
- try {
1485
- if (this.apiClient && !this.experimental) {
1486
- const page = await this.ctx.awaitActivePage();
1487
- result = await this.apiClient.agentExecute(options, resolvedOptions, page.mainFrameId(), !!cacheContext);
1488
- if (cacheContext) {
1489
- const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
1490
- await this.agentCache.storeTransferredEntry(transferredEntry);
1491
- }
1492
- }
1493
- else {
1494
- result = await handler.execute(instructionOrOptions);
1495
- }
1496
- if (shouldRecordLocally) {
1497
- agentSteps = this.endAgentReplayRecording();
1498
- }
1499
- if (shouldRecordLocally &&
1500
- cacheContext &&
1501
- result.success &&
1502
- agentSteps.length > 0) {
1503
- await this.agentCache.store(cacheContext, agentSteps, result);
1504
- }
1505
- return result;
1506
- }
1507
- catch (err) {
1508
- if (shouldRecordLocally)
1509
- this.discardAgentReplayRecording();
1510
- throw err;
1511
- }
1512
- finally {
1513
- if (shouldRecordLocally) {
1514
- this.discardAgentReplayRecording();
1515
- }
1516
- flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted();
1517
- }
1518
- }),
1519
- };
1520
- }
1521
- // Default: AISDK tools-based agent
1522
- const agentConfigSignature = this.agentCache.buildConfigSignature(options);
1523
- const isStreaming = options?.stream ?? false;
1524
- return {
1525
- execute: async (instructionOrOptions) => (0, logger_js_2.withInstanceLogContext)(this.instanceId, async () => {
1489
+ const execute = async (instructionOrOptions) => (0, logger_js_2.withInstanceLogContext)(this.instanceId, async () => {
1526
1490
  (0, validateExperimentalFeatures_js_1.validateExperimentalFeatures)({
1527
1491
  isExperimental: this.experimental,
1528
1492
  agentConfig: options,
1529
1493
  executeOptions: typeof instructionOrOptions === "object"
1530
1494
  ? instructionOrOptions
1531
1495
  : null,
1532
- isStreaming,
1533
1496
  });
1534
- flowLogger_js_1.SessionFileLogger.logAgentTaskStarted({
1535
- invocation: "Agent.execute",
1536
- args: [instructionOrOptions],
1537
- });
1538
- // Streaming mode
1539
- if (isStreaming) {
1540
- const { handler, resolvedOptions, cacheContext, llmClient } = await this.prepareAgentExecution(options, instructionOrOptions, agentConfigSignature);
1497
+ const tools = options?.integrations
1498
+ ? await (0, utils_js_2.resolveTools)(options.integrations, options.tools)
1499
+ : (options?.tools ?? {});
1500
+ const handler = new v3CuaAgentHandler_js_1.V3CuaAgentHandler(this, this.logger, {
1501
+ modelName,
1502
+ clientOptions,
1503
+ userProvidedInstructions: (options.systemPrompt ??
1504
+ `You are a helpful assistant that can use a web browser.\nDo not ask follow up questions, the user will trust your judgement.`) +
1505
+ (this.isCaptchaAutoSolveEnabled
1506
+ ? captchaSolver_js_1.CAPTCHA_CUA_SYSTEM_PROMPT_NOTE
1507
+ : ""),
1508
+ }, tools);
1509
+ const resolvedOptions = typeof instructionOrOptions === "string"
1510
+ ? {
1511
+ instruction: instructionOrOptions,
1512
+ toolTimeout: DEFAULT_AGENT_TOOL_TIMEOUT_MS,
1513
+ }
1514
+ : {
1515
+ ...instructionOrOptions,
1516
+ toolTimeout: instructionOrOptions.toolTimeout ??
1517
+ DEFAULT_AGENT_TOOL_TIMEOUT_MS,
1518
+ };
1519
+ if (resolvedOptions.page) {
1520
+ const normalizedPage = await this.normalizeToV3Page(resolvedOptions.page);
1521
+ this.ctx.setActivePage(normalizedPage);
1522
+ }
1523
+ const instruction = resolvedOptions.instruction.trim();
1524
+ const sanitizedOptions = this.agentCache.sanitizeExecuteOptions(resolvedOptions);
1525
+ const cacheVariables = (0, variables_js_1.flattenVariables)(resolvedOptions.variables);
1526
+ let cacheContext = null;
1527
+ if (this.agentCache.shouldAttemptCache(instruction)) {
1528
+ const startPage = await this.ctx.awaitActivePage();
1529
+ cacheContext = await this.agentCache.prepareContext({
1530
+ instruction,
1531
+ options: sanitizedOptions,
1532
+ configSignature: agentConfigSignature,
1533
+ page: startPage,
1534
+ variables: cacheVariables,
1535
+ });
1541
1536
  if (cacheContext) {
1542
- const replayed = await this.agentCache.tryReplayAsStream(cacheContext, llmClient);
1537
+ const replayed = await this.agentCache.tryReplay(cacheContext);
1543
1538
  if (replayed) {
1544
- flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted({ cacheHit: true });
1545
1539
  return replayed;
1546
1540
  }
1547
1541
  }
1548
- const streamResult = await handler.stream(resolvedOptions);
1549
- if (cacheContext) {
1550
- const wrappedStream = this.agentCache.wrapStreamForCaching(cacheContext, streamResult, () => this.beginAgentReplayRecording(), () => this.endAgentReplayRecording(), () => this.discardAgentReplayRecording());
1551
- // Log completion when stream is returned (stream completes asynchronously)
1552
- flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted();
1553
- return wrappedStream;
1554
- }
1555
- // Log completion when stream is returned (stream completes asynchronously)
1556
- flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted();
1557
- return streamResult;
1558
- }
1559
- // Non-streaming mode (default)
1560
- const { handler, resolvedOptions, cacheContext, llmClient } = await this.prepareAgentExecution(options, instructionOrOptions, agentConfigSignature);
1561
- if (cacheContext) {
1562
- const replayed = await this.agentCache.tryReplay(cacheContext, llmClient);
1563
- if (replayed) {
1564
- flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted({ cacheHit: true });
1565
- return replayed;
1566
- }
1567
1542
  }
1568
1543
  let agentSteps = [];
1569
1544
  const shouldRecordLocally = !!cacheContext && (!this.apiClient || this.experimental);
@@ -1574,14 +1549,14 @@ let V3 = (() => {
1574
1549
  try {
1575
1550
  if (this.apiClient && !this.experimental) {
1576
1551
  const page = await this.ctx.awaitActivePage();
1577
- result = await this.apiClient.agentExecute(options ?? {}, resolvedOptions, page.mainFrameId(), !!cacheContext);
1552
+ result = await this.apiClient.agentExecute(options, resolvedOptions, page.mainFrameId(), !!cacheContext);
1578
1553
  if (cacheContext) {
1579
1554
  const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
1580
1555
  await this.agentCache.storeTransferredEntry(transferredEntry);
1581
1556
  }
1582
1557
  }
1583
1558
  else {
1584
- result = await handler.execute(resolvedOptions);
1559
+ result = await handler.execute(instructionOrOptions);
1585
1560
  }
1586
1561
  if (shouldRecordLocally) {
1587
1562
  agentSteps = this.endAgentReplayRecording();
@@ -1603,9 +1578,96 @@ let V3 = (() => {
1603
1578
  if (shouldRecordLocally) {
1604
1579
  this.discardAgentReplayRecording();
1605
1580
  }
1606
- flowLogger_js_1.SessionFileLogger.logAgentTaskCompleted();
1607
1581
  }
1608
- }),
1582
+ });
1583
+ return {
1584
+ execute: FlowLogger_js_1.FlowLogger.wrapWithLogging({
1585
+ eventType: "AgentExecute",
1586
+ context: this.flowLoggerContext,
1587
+ })(execute),
1588
+ };
1589
+ }
1590
+ // Default: AISDK tools-based agent
1591
+ const agentConfigSignature = this.agentCache.buildConfigSignature(options);
1592
+ const isStreaming = options?.stream ?? false;
1593
+ const execute = async (instructionOrOptions) => (0, logger_js_2.withInstanceLogContext)(this.instanceId, async () => {
1594
+ (0, validateExperimentalFeatures_js_1.validateExperimentalFeatures)({
1595
+ isExperimental: this.experimental,
1596
+ agentConfig: options,
1597
+ executeOptions: typeof instructionOrOptions === "object"
1598
+ ? instructionOrOptions
1599
+ : null,
1600
+ isStreaming,
1601
+ });
1602
+ // Streaming mode
1603
+ if (isStreaming) {
1604
+ const { handler, resolvedOptions, cacheContext, llmClient } = await this.prepareAgentExecution(options, instructionOrOptions, agentConfigSignature);
1605
+ if (cacheContext) {
1606
+ const replayed = await this.agentCache.tryReplayAsStream(cacheContext, llmClient);
1607
+ if (replayed) {
1608
+ return replayed;
1609
+ }
1610
+ }
1611
+ const streamResult = await handler.stream(resolvedOptions);
1612
+ if (cacheContext) {
1613
+ const wrappedStream = this.agentCache.wrapStreamForCaching(cacheContext, streamResult, () => this.beginAgentReplayRecording(), () => this.endAgentReplayRecording(), () => this.discardAgentReplayRecording());
1614
+ return wrappedStream;
1615
+ }
1616
+ return streamResult;
1617
+ }
1618
+ // Non-streaming mode (default)
1619
+ const { handler, resolvedOptions, cacheContext, llmClient } = await this.prepareAgentExecution(options, instructionOrOptions, agentConfigSignature);
1620
+ if (cacheContext) {
1621
+ const replayed = await this.agentCache.tryReplay(cacheContext, llmClient);
1622
+ if (replayed) {
1623
+ return replayed;
1624
+ }
1625
+ }
1626
+ let agentSteps = [];
1627
+ const shouldRecordLocally = !!cacheContext && (!this.apiClient || this.experimental);
1628
+ if (shouldRecordLocally) {
1629
+ this.beginAgentReplayRecording();
1630
+ }
1631
+ let result;
1632
+ try {
1633
+ if (this.apiClient && !this.experimental) {
1634
+ const page = await this.ctx.awaitActivePage();
1635
+ result = await this.apiClient.agentExecute(options ?? {}, resolvedOptions, page.mainFrameId(), !!cacheContext);
1636
+ if (cacheContext) {
1637
+ const transferredEntry = this.apiClient.consumeLatestAgentCacheEntry();
1638
+ await this.agentCache.storeTransferredEntry(transferredEntry);
1639
+ }
1640
+ }
1641
+ else {
1642
+ result = await handler.execute(resolvedOptions);
1643
+ }
1644
+ if (shouldRecordLocally) {
1645
+ agentSteps = this.endAgentReplayRecording();
1646
+ }
1647
+ if (shouldRecordLocally &&
1648
+ cacheContext &&
1649
+ result.success &&
1650
+ agentSteps.length > 0) {
1651
+ await this.agentCache.store(cacheContext, agentSteps, result);
1652
+ }
1653
+ return result;
1654
+ }
1655
+ catch (err) {
1656
+ if (shouldRecordLocally)
1657
+ this.discardAgentReplayRecording();
1658
+ throw err;
1659
+ }
1660
+ finally {
1661
+ if (shouldRecordLocally) {
1662
+ this.discardAgentReplayRecording();
1663
+ }
1664
+ }
1665
+ });
1666
+ return {
1667
+ execute: FlowLogger_js_1.FlowLogger.wrapWithLogging({
1668
+ eventType: "AgentExecute",
1669
+ context: this.flowLoggerContext,
1670
+ })(execute),
1609
1671
  };
1610
1672
  }
1611
1673
  };