@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
@@ -1 +1 @@
1
- {"version":3,"file":"LLMProvider.js","sourceRoot":"","sources":["../../../../../lib/v3/llm/LLMProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ExperimentalNotConfiguredError,\n UnsupportedAISDKModelProviderError,\n UnsupportedModelError,\n UnsupportedModelProviderError,\n} from \"../types/public/sdkErrors.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport {\n AvailableModel,\n ClientOptions,\n ModelProvider,\n} from \"../types/public/model.js\";\nimport { AISdkClient } from \"./aisdk.js\";\nimport { AnthropicClient } from \"./AnthropicClient.js\";\nimport { CerebrasClient } from \"./CerebrasClient.js\";\nimport { GoogleClient } from \"./GoogleClient.js\";\nimport { GroqClient } from \"./GroqClient.js\";\nimport { LLMClient } from \"./LLMClient.js\";\nimport { OpenAIClient } from \"./OpenAIClient.js\";\nimport { openai, createOpenAI } from \"@ai-sdk/openai\";\nimport { bedrock, createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\";\nimport { vertex, createVertex } from \"@ai-sdk/google-vertex\";\nimport { anthropic, createAnthropic } from \"@ai-sdk/anthropic\";\nimport { google, createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { xai, createXai } from \"@ai-sdk/xai\";\nimport { azure, createAzure } from \"@ai-sdk/azure\";\nimport { groq, createGroq } from \"@ai-sdk/groq\";\nimport { cerebras, createCerebras } from \"@ai-sdk/cerebras\";\nimport { togetherai, createTogetherAI } from \"@ai-sdk/togetherai\";\nimport { mistral, createMistral } from \"@ai-sdk/mistral\";\nimport { deepseek, createDeepSeek } from \"@ai-sdk/deepseek\";\nimport { perplexity, createPerplexity } from \"@ai-sdk/perplexity\";\nimport { ollama, createOllama } from \"ollama-ai-provider-v2\";\nimport { gateway, createGateway } from \"ai\";\nimport { AISDKProvider, AISDKCustomProvider } from \"../types/public/model.js\";\n\nconst AISDKProviders: Record<string, AISDKProvider> = {\n openai,\n bedrock,\n anthropic,\n google,\n xai,\n azure,\n groq,\n cerebras,\n togetherai,\n mistral,\n deepseek,\n perplexity,\n ollama,\n vertex,\n gateway,\n};\nconst AISDKProvidersWithAPIKey: Record<string, AISDKCustomProvider> = {\n openai: createOpenAI,\n bedrock: createAmazonBedrock,\n anthropic: createAnthropic,\n google: createGoogleGenerativeAI,\n vertex: createVertex,\n xai: createXai,\n azure: createAzure,\n groq: createGroq,\n cerebras: createCerebras,\n togetherai: createTogetherAI,\n mistral: createMistral,\n deepseek: createDeepSeek,\n perplexity: createPerplexity,\n ollama: createOllama,\n gateway: createGateway,\n};\n\nconst modelToProviderMap: { [key in AvailableModel]: ModelProvider } = {\n \"gpt-4.1\": \"openai\",\n \"gpt-4.1-mini\": \"openai\",\n \"gpt-4.1-nano\": \"openai\",\n \"o4-mini\": \"openai\",\n //prettier-ignore\n \"o3\": \"openai\",\n \"o3-mini\": \"openai\",\n //prettier-ignore\n \"o1\": \"openai\",\n \"o1-mini\": \"openai\",\n \"gpt-4o\": \"openai\",\n \"gpt-4o-mini\": \"openai\",\n \"gpt-4o-2024-08-06\": \"openai\",\n \"gpt-4.5-preview\": \"openai\",\n \"o1-preview\": \"openai\",\n \"claude-3-5-sonnet-latest\": \"anthropic\",\n \"claude-3-5-sonnet-20240620\": \"anthropic\",\n \"claude-3-5-sonnet-20241022\": \"anthropic\",\n \"claude-3-7-sonnet-20250219\": \"anthropic\",\n \"claude-3-7-sonnet-latest\": \"anthropic\",\n \"cerebras-llama-3.3-70b\": \"cerebras\",\n \"cerebras-llama-3.1-8b\": \"cerebras\",\n \"groq-llama-3.3-70b-versatile\": \"groq\",\n \"groq-llama-3.3-70b-specdec\": \"groq\",\n \"moonshotai/kimi-k2-instruct\": \"groq\",\n \"gemini-1.5-flash\": \"google\",\n \"gemini-1.5-pro\": \"google\",\n \"gemini-1.5-flash-8b\": \"google\",\n \"gemini-2.0-flash-lite\": \"google\",\n \"gemini-2.0-flash\": \"google\",\n \"gemini-2.5-flash-preview-04-17\": \"google\",\n \"gemini-2.5-pro-preview-03-25\": \"google\",\n};\n\nexport function getAISDKLanguageModel(\n subProvider: string,\n subModelName: string,\n clientOptions?: ClientOptions,\n) {\n const hasValidOptions =\n clientOptions &&\n Object.values(clientOptions).some((v) => v !== undefined && v !== null);\n\n if (hasValidOptions) {\n const creator = AISDKProvidersWithAPIKey[subProvider];\n if (!creator) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProvidersWithAPIKey),\n );\n }\n const provider = creator(clientOptions);\n // Get the specific model from the provider\n return provider(subModelName);\n } else {\n const provider = AISDKProviders[subProvider];\n if (!provider) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProviders),\n );\n }\n return provider(subModelName);\n }\n}\n\nexport class LLMProvider {\n private logger: (message: LogLine) => void;\n\n constructor(logger: (message: LogLine) => void) {\n this.logger = logger;\n }\n\n getClient(\n modelName: AvailableModel,\n clientOptions?: ClientOptions,\n options?: { experimental?: boolean; disableAPI?: boolean },\n ): LLMClient {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n const subModelName = modelName.substring(firstSlashIndex + 1);\n if (\n subProvider === \"vertex\" &&\n !options?.disableAPI &&\n !options?.experimental\n ) {\n throw new ExperimentalNotConfiguredError(\"Vertex provider\");\n }\n\n const languageModel = getAISDKLanguageModel(\n subProvider,\n subModelName,\n clientOptions,\n );\n\n return new AISdkClient({\n model: languageModel,\n logger: this.logger,\n });\n }\n\n // Model name doesn't include \"/\" - this format is deprecated\n const provider = modelToProviderMap[modelName];\n if (!provider) {\n throw new UnsupportedModelError(Object.keys(modelToProviderMap));\n }\n\n this.logger({\n category: \"llm\",\n message: `Deprecation warning: Model format \"${modelName}\" is deprecated. Please use the provider/model format (e.g., \"openai/gpt-5\" or \"anthropic/claude-sonnet-4\").`,\n level: 0,\n });\n\n const availableModel = modelName as AvailableModel;\n switch (provider) {\n case \"openai\":\n return new OpenAIClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"anthropic\":\n return new AnthropicClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"cerebras\":\n return new CerebrasClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"groq\":\n return new GroqClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"google\":\n return new GoogleClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n default:\n // This default case handles unknown providers that exist in modelToProviderMap\n // but aren't implemented in the switch. This is an internal consistency issue.\n throw new UnsupportedModelProviderError([\n ...new Set(Object.values(modelToProviderMap)),\n ]);\n }\n }\n\n static getModelProvider(modelName: AvailableModel): ModelProvider {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n if (AISDKProviders[subProvider]) {\n return \"aisdk\";\n }\n }\n const provider = modelToProviderMap[modelName];\n return provider;\n }\n}\n"]}
1
+ {"version":3,"file":"LLMProvider.js","sourceRoot":"","sources":["../../../../../lib/v3/llm/LLMProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import type { LanguageModelV2Middleware } from \"@ai-sdk/provider\";\nimport {\n ExperimentalNotConfiguredError,\n UnsupportedAISDKModelProviderError,\n UnsupportedModelError,\n UnsupportedModelProviderError,\n} from \"../types/public/sdkErrors.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport {\n AvailableModel,\n ClientOptions,\n ModelProvider,\n} from \"../types/public/model.js\";\nimport { AISdkClient } from \"./aisdk.js\";\nimport { AnthropicClient } from \"./AnthropicClient.js\";\nimport { CerebrasClient } from \"./CerebrasClient.js\";\nimport { GoogleClient } from \"./GoogleClient.js\";\nimport { GroqClient } from \"./GroqClient.js\";\nimport { LLMClient } from \"./LLMClient.js\";\nimport { OpenAIClient } from \"./OpenAIClient.js\";\nimport { openai, createOpenAI } from \"@ai-sdk/openai\";\nimport { bedrock, createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\";\nimport { vertex, createVertex } from \"@ai-sdk/google-vertex\";\nimport { anthropic, createAnthropic } from \"@ai-sdk/anthropic\";\nimport { google, createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { xai, createXai } from \"@ai-sdk/xai\";\nimport { azure, createAzure } from \"@ai-sdk/azure\";\nimport { groq, createGroq } from \"@ai-sdk/groq\";\nimport { cerebras, createCerebras } from \"@ai-sdk/cerebras\";\nimport { togetherai, createTogetherAI } from \"@ai-sdk/togetherai\";\nimport { mistral, createMistral } from \"@ai-sdk/mistral\";\nimport { deepseek, createDeepSeek } from \"@ai-sdk/deepseek\";\nimport { perplexity, createPerplexity } from \"@ai-sdk/perplexity\";\nimport { ollama, createOllama } from \"ollama-ai-provider-v2\";\nimport { gateway, createGateway, wrapLanguageModel } from \"ai\";\nimport { AISDKProvider, AISDKCustomProvider } from \"../types/public/model.js\";\n\nconst AISDKProviders: Record<string, AISDKProvider> = {\n openai,\n bedrock,\n anthropic,\n google,\n xai,\n azure,\n groq,\n cerebras,\n togetherai,\n mistral,\n deepseek,\n perplexity,\n ollama,\n vertex,\n gateway,\n};\nconst AISDKProvidersWithAPIKey: Record<string, AISDKCustomProvider> = {\n openai: createOpenAI,\n bedrock: createAmazonBedrock,\n anthropic: createAnthropic,\n google: createGoogleGenerativeAI,\n vertex: createVertex,\n xai: createXai,\n azure: createAzure,\n groq: createGroq,\n cerebras: createCerebras,\n togetherai: createTogetherAI,\n mistral: createMistral,\n deepseek: createDeepSeek,\n perplexity: createPerplexity,\n ollama: createOllama,\n gateway: createGateway,\n};\n\nconst modelToProviderMap: { [key in AvailableModel]: ModelProvider } = {\n \"gpt-4.1\": \"openai\",\n \"gpt-4.1-mini\": \"openai\",\n \"gpt-4.1-nano\": \"openai\",\n \"o4-mini\": \"openai\",\n //prettier-ignore\n \"o3\": \"openai\",\n \"o3-mini\": \"openai\",\n //prettier-ignore\n \"o1\": \"openai\",\n \"o1-mini\": \"openai\",\n \"gpt-4o\": \"openai\",\n \"gpt-4o-mini\": \"openai\",\n \"gpt-4o-2024-08-06\": \"openai\",\n \"gpt-4.5-preview\": \"openai\",\n \"o1-preview\": \"openai\",\n \"cerebras-llama-3.3-70b\": \"cerebras\",\n \"cerebras-llama-3.1-8b\": \"cerebras\",\n \"groq-llama-3.3-70b-versatile\": \"groq\",\n \"groq-llama-3.3-70b-specdec\": \"groq\",\n \"moonshotai/kimi-k2-instruct\": \"groq\",\n \"gemini-1.5-flash\": \"google\",\n \"gemini-1.5-pro\": \"google\",\n \"gemini-1.5-flash-8b\": \"google\",\n \"gemini-2.0-flash-lite\": \"google\",\n \"gemini-2.0-flash\": \"google\",\n \"gemini-2.5-flash-preview-04-17\": \"google\",\n \"gemini-2.5-pro-preview-03-25\": \"google\",\n};\n\nexport function getAISDKLanguageModel(\n subProvider: string,\n subModelName: string,\n clientOptions?: ClientOptions,\n middleware?: LanguageModelV2Middleware,\n) {\n const hasValidOptions =\n clientOptions &&\n Object.values(clientOptions).some((v) => v !== undefined && v !== null);\n\n let model;\n if (hasValidOptions) {\n const creator = AISDKProvidersWithAPIKey[subProvider];\n if (!creator) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProvidersWithAPIKey),\n );\n }\n const provider = creator(clientOptions);\n model = provider(subModelName);\n } else {\n const provider = AISDKProviders[subProvider];\n if (!provider) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProviders),\n );\n }\n model = provider(subModelName);\n }\n\n if (middleware) {\n return wrapLanguageModel({ model, middleware });\n }\n return model;\n}\n\nexport class LLMProvider {\n private logger: (message: LogLine) => void;\n private middleware?: LanguageModelV2Middleware;\n\n constructor(\n logger: (message: LogLine) => void,\n middleware?: LanguageModelV2Middleware,\n ) {\n this.logger = logger;\n this.middleware = middleware;\n }\n\n getClient(\n modelName: AvailableModel,\n clientOptions?: ClientOptions,\n options?: {\n experimental?: boolean;\n disableAPI?: boolean;\n middleware?: LanguageModelV2Middleware;\n },\n ): LLMClient {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n const subModelName = modelName.substring(firstSlashIndex + 1);\n if (\n subProvider === \"vertex\" &&\n !options?.disableAPI &&\n !options?.experimental\n ) {\n throw new ExperimentalNotConfiguredError(\"Vertex provider\");\n }\n\n const effectiveMiddleware = options?.middleware ?? this.middleware;\n const languageModel = getAISDKLanguageModel(\n subProvider,\n subModelName,\n clientOptions,\n effectiveMiddleware,\n );\n\n return new AISdkClient({\n model: languageModel,\n logger: this.logger,\n });\n }\n\n // Model name doesn't include \"/\" - this format is deprecated\n const provider = modelToProviderMap[modelName];\n if (!provider) {\n throw new UnsupportedModelError(Object.keys(modelToProviderMap));\n }\n\n this.logger({\n category: \"llm\",\n message: `Deprecation warning: Model format \"${modelName}\" is deprecated. Please use the provider/model format (e.g., \"openai/gpt-5\" or \"anthropic/claude-sonnet-4\").`,\n level: 0,\n });\n\n const availableModel = modelName as AvailableModel;\n switch (provider) {\n case \"openai\":\n return new OpenAIClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"anthropic\":\n return new AnthropicClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"cerebras\":\n return new CerebrasClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"groq\":\n return new GroqClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"google\":\n return new GoogleClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n default:\n // This default case handles unknown providers that exist in modelToProviderMap\n // but aren't implemented in the switch. This is an internal consistency issue.\n throw new UnsupportedModelProviderError([\n ...new Set(Object.values(modelToProviderMap)),\n ]);\n }\n }\n\n static getModelProvider(modelName: AvailableModel): ModelProvider {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n if (AISDKProviders[subProvider]) {\n return \"aisdk\";\n }\n }\n const provider = modelToProviderMap[modelName];\n return provider;\n }\n}\n"]}
@@ -4,7 +4,7 @@ exports.AISdkClient = void 0;
4
4
  const ai_1 = require("ai");
5
5
  const uuid_1 = require("uuid");
6
6
  const LLMClient_js_1 = require("./LLMClient.js");
7
- const flowLogger_js_1 = require("../flowLogger.js");
7
+ const FlowLogger_js_1 = require("../flowlogger/FlowLogger.js");
8
8
  const zodCompat_js_1 = require("../zodCompat.js");
9
9
  class AISdkClient extends LLMClient_js_1.LLMClient {
10
10
  type = "aisdk";
@@ -112,14 +112,13 @@ class AISdkClient extends LLMClient_js_1.LLMClient {
112
112
  if (options.response_model) {
113
113
  // Log LLM request for generateObject (extract)
114
114
  const llmRequestId = (0, uuid_1.v7)();
115
- const promptPreview = (0, flowLogger_js_1.formatLlmPromptPreview)(options.messages, {
115
+ const promptSummary = (0, FlowLogger_js_1.extractLlmPromptSummary)(options.messages, {
116
116
  hasSchema: true,
117
117
  });
118
- flowLogger_js_1.SessionFileLogger.logLlmRequest({
118
+ FlowLogger_js_1.FlowLogger.logLlmRequest({
119
119
  requestId: llmRequestId,
120
120
  model: this.model.modelId,
121
- operation: "generateObject",
122
- prompt: promptPreview,
121
+ prompt: promptSummary,
123
122
  });
124
123
  // For models that don't support native structured outputs, add a prompt instruction
125
124
  if (needsPromptJsonFallback) {
@@ -152,10 +151,9 @@ You must respond in JSON format. respond WITH JSON. Do not include any other tex
152
151
  }
153
152
  catch (err) {
154
153
  // Log error response to maintain request/response pairing
155
- flowLogger_js_1.SessionFileLogger.logLlmResponse({
154
+ FlowLogger_js_1.FlowLogger.logLlmResponse({
156
155
  requestId: llmRequestId,
157
156
  model: this.model.modelId,
158
- operation: "generateObject",
159
157
  output: `[error: ${err instanceof Error ? err.message : "unknown"}]`,
160
158
  });
161
159
  if (ai_1.NoObjectGeneratedError.isInstance(err)) {
@@ -205,10 +203,9 @@ You must respond in JSON format. respond WITH JSON. Do not include any other tex
205
203
  },
206
204
  };
207
205
  // Log LLM response for generateObject
208
- flowLogger_js_1.SessionFileLogger.logLlmResponse({
206
+ FlowLogger_js_1.FlowLogger.logLlmResponse({
209
207
  requestId: llmRequestId,
210
208
  model: this.model.modelId,
211
- operation: "generateObject",
212
209
  output: JSON.stringify(objectResponse.object),
213
210
  inputTokens: objectResponse.usage.inputTokens,
214
211
  outputTokens: objectResponse.usage.outputTokens,
@@ -247,14 +244,13 @@ You must respond in JSON format. respond WITH JSON. Do not include any other tex
247
244
  // Log LLM request for generateText (act/observe)
248
245
  const llmRequestId = (0, uuid_1.v7)();
249
246
  const toolCount = Object.keys(tools).length;
250
- const promptPreview = (0, flowLogger_js_1.formatLlmPromptPreview)(options.messages, {
247
+ const promptSummary = (0, FlowLogger_js_1.extractLlmPromptSummary)(options.messages, {
251
248
  toolCount,
252
249
  });
253
- flowLogger_js_1.SessionFileLogger.logLlmRequest({
250
+ FlowLogger_js_1.FlowLogger.logLlmRequest({
254
251
  requestId: llmRequestId,
255
252
  model: this.model.modelId,
256
- operation: "generateText",
257
- prompt: promptPreview,
253
+ prompt: promptSummary,
258
254
  });
259
255
  let textResponse;
260
256
  try {
@@ -274,10 +270,9 @@ You must respond in JSON format. respond WITH JSON. Do not include any other tex
274
270
  }
275
271
  catch (err) {
276
272
  // Log error response to maintain request/response pairing
277
- flowLogger_js_1.SessionFileLogger.logLlmResponse({
273
+ FlowLogger_js_1.FlowLogger.logLlmResponse({
278
274
  requestId: llmRequestId,
279
275
  model: this.model.modelId,
280
- operation: "generateText",
281
276
  output: `[error: ${err instanceof Error ? err.message : "unknown"}]`,
282
277
  });
283
278
  throw err;
@@ -317,10 +312,9 @@ You must respond in JSON format. respond WITH JSON. Do not include any other tex
317
312
  },
318
313
  };
319
314
  // Log LLM response for generateText
320
- flowLogger_js_1.SessionFileLogger.logLlmResponse({
315
+ FlowLogger_js_1.FlowLogger.logLlmResponse({
321
316
  requestId: llmRequestId,
322
317
  model: this.model.modelId,
323
- operation: "generateText",
324
318
  output: textResponse.text ||
325
319
  (transformedToolCalls.length > 0
326
320
  ? `[${transformedToolCalls.length} tool calls]`
@@ -1 +1 @@
1
- {"version":3,"file":"aisdk.js","sourceRoot":"","sources":["../../../../../lib/v3/llm/aisdk.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CoreAssistantMessage,\n ModelMessage,\n CoreSystemMessage,\n CoreUserMessage,\n generateObject,\n generateText,\n ImagePart,\n NoObjectGeneratedError,\n TextPart,\n ToolSet,\n Tool,\n} from \"ai\";\nimport type { LanguageModelV2 } from \"@ai-sdk/provider\";\nimport { ChatCompletion } from \"openai/resources\";\nimport { v7 as uuidv7 } from \"uuid\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport { AvailableModel } from \"../types/public/model.js\";\nimport { CreateChatCompletionOptions, LLMClient } from \"./LLMClient.js\";\nimport { SessionFileLogger, formatLlmPromptPreview } from \"../flowLogger.js\";\nimport { toJsonSchema } from \"../zodCompat.js\";\n\nexport class AISdkClient extends LLMClient {\n public type = \"aisdk\" as const;\n private model: LanguageModelV2;\n private logger?: (message: LogLine) => void;\n\n constructor({\n model,\n logger,\n }: {\n model: LanguageModelV2;\n logger?: (message: LogLine) => void;\n }) {\n super(model.modelId as AvailableModel);\n this.model = model;\n this.logger = logger;\n }\n\n public getLanguageModel(): LanguageModelV2 {\n return this.model;\n }\n\n async createChatCompletion<T = ChatCompletion>({\n options,\n }: CreateChatCompletionOptions): Promise<T> {\n this.logger?.({\n category: \"aisdk\",\n message: \"creating chat completion\",\n level: 2,\n auxiliary: {\n options: {\n value: JSON.stringify({\n ...options,\n image: undefined,\n messages: options.messages.map((msg) => ({\n ...msg,\n content: Array.isArray(msg.content)\n ? msg.content.map((c) =>\n \"image_url\" in c\n ? { ...c, image_url: { url: \"[IMAGE_REDACTED]\" } }\n : c,\n )\n : msg.content,\n })),\n }),\n type: \"object\",\n },\n modelName: {\n value: this.model.modelId,\n type: \"string\",\n },\n },\n });\n\n const formattedMessages: ModelMessage[] = options.messages.map(\n (message) => {\n if (Array.isArray(message.content)) {\n if (message.role === \"system\") {\n const systemMessage: CoreSystemMessage = {\n role: \"system\",\n content: message.content\n .map((c) => (\"text\" in c ? c.text : \"\"))\n .join(\"\\n\"),\n };\n return systemMessage;\n }\n\n const contentParts = message.content.map((content) => {\n if (\"image_url\" in content) {\n const imageContent: ImagePart = {\n type: \"image\",\n image: content.image_url.url,\n };\n return imageContent;\n } else {\n const textContent: TextPart = {\n type: \"text\",\n text: content.text,\n };\n return textContent;\n }\n });\n\n if (message.role === \"user\") {\n const userMessage: CoreUserMessage = {\n role: \"user\",\n content: contentParts,\n };\n return userMessage;\n } else {\n const textOnlyParts = contentParts.map((part) => ({\n type: \"text\" as const,\n text: part.type === \"image\" ? \"[Image]\" : part.text,\n }));\n const assistantMessage: CoreAssistantMessage = {\n role: \"assistant\",\n content: textOnlyParts,\n };\n return assistantMessage;\n }\n }\n\n return {\n role: message.role,\n content: message.content,\n };\n },\n );\n\n let objectResponse: Awaited<ReturnType<typeof generateObject>>;\n const isGPT5 = this.model.modelId.includes(\"gpt-5\");\n const isCodex = this.model.modelId.includes(\"codex\");\n const usesLowReasoningEffort =\n (this.model.modelId.includes(\"gpt-5.1\") ||\n this.model.modelId.includes(\"gpt-5.2\")) &&\n !isCodex;\n // Kimi models only support temperature=1\n const isKimi = this.model.modelId.includes(\"kimi\");\n const temperature = isKimi ? 1 : options.temperature;\n\n // Models that lack native structured-output support need a prompt-based\n // JSON fallback instead of response_format: { type: \"json_schema\" }.\n const PROMPT_JSON_FALLBACK_PATTERNS = [\"deepseek\", \"kimi\", \"glm\"];\n const needsPromptJsonFallback = PROMPT_JSON_FALLBACK_PATTERNS.some((p) =>\n this.model.modelId.includes(p),\n );\n\n if (options.response_model) {\n // Log LLM request for generateObject (extract)\n const llmRequestId = uuidv7();\n const promptPreview = formatLlmPromptPreview(options.messages, {\n hasSchema: true,\n });\n SessionFileLogger.logLlmRequest({\n requestId: llmRequestId,\n model: this.model.modelId,\n operation: \"generateObject\",\n prompt: promptPreview,\n });\n\n // For models that don't support native structured outputs, add a prompt instruction\n if (needsPromptJsonFallback) {\n const parsedSchema = JSON.stringify(\n toJsonSchema(options.response_model.schema),\n );\n\n formattedMessages.push({\n role: \"user\",\n content: `Respond in this zod schema format:\\n${parsedSchema}\\n\nYou must respond in JSON format. respond WITH JSON. Do not include any other text, formatting or markdown in your output. Do not include \\`\\`\\` or \\`\\`\\`json in your response. Only the JSON object itself.`,\n });\n }\n\n try {\n objectResponse = await generateObject({\n model: this.model,\n messages: formattedMessages,\n schema: options.response_model.schema,\n temperature,\n providerOptions: isGPT5\n ? {\n openai: {\n textVerbosity: isCodex ? \"medium\" : \"low\", // codex models only support 'medium'\n reasoningEffort: isCodex\n ? \"medium\"\n : usesLowReasoningEffort\n ? \"low\"\n : \"minimal\",\n },\n }\n : undefined,\n });\n } catch (err) {\n // Log error response to maintain request/response pairing\n SessionFileLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n operation: \"generateObject\",\n output: `[error: ${err instanceof Error ? err.message : \"unknown\"}]`,\n });\n\n if (NoObjectGeneratedError.isInstance(err)) {\n this.logger?.({\n category: \"AISDK error\",\n message: err.message,\n level: 0,\n auxiliary: {\n cause: {\n value: JSON.stringify(err.cause ?? {}),\n type: \"object\",\n },\n text: {\n value: err.text ?? \"\",\n type: \"string\",\n },\n response: {\n value: JSON.stringify(err.response ?? {}),\n type: \"object\",\n },\n usage: {\n value: JSON.stringify(err.usage ?? {}),\n type: \"object\",\n },\n finishReason: {\n value: err.finishReason ?? \"unknown\",\n type: \"string\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n throw err;\n }\n throw err;\n }\n\n const result = {\n data: objectResponse.object,\n usage: {\n prompt_tokens: objectResponse.usage.inputTokens ?? 0,\n completion_tokens: objectResponse.usage.outputTokens ?? 0,\n reasoning_tokens: objectResponse.usage.reasoningTokens ?? 0,\n cached_input_tokens: objectResponse.usage.cachedInputTokens ?? 0,\n total_tokens: objectResponse.usage.totalTokens ?? 0,\n },\n } as T;\n\n // Log LLM response for generateObject\n SessionFileLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n operation: \"generateObject\",\n output: JSON.stringify(objectResponse.object),\n inputTokens: objectResponse.usage.inputTokens,\n outputTokens: objectResponse.usage.outputTokens,\n });\n\n this.logger?.({\n category: \"aisdk\",\n message: \"response\",\n level: 1,\n auxiliary: {\n response: {\n value: JSON.stringify({\n object: objectResponse.object,\n usage: objectResponse.usage,\n finishReason: objectResponse.finishReason,\n // Omit request and response properties that might contain images\n }),\n type: \"object\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n return result;\n }\n\n const tools: ToolSet = {};\n if (options.tools && options.tools.length > 0) {\n for (const tool of options.tools) {\n tools[tool.name] = {\n description: tool.description,\n inputSchema: tool.parameters,\n } as Tool;\n }\n }\n\n // Log LLM request for generateText (act/observe)\n const llmRequestId = uuidv7();\n const toolCount = Object.keys(tools).length;\n const promptPreview = formatLlmPromptPreview(options.messages, {\n toolCount,\n });\n SessionFileLogger.logLlmRequest({\n requestId: llmRequestId,\n model: this.model.modelId,\n operation: \"generateText\",\n prompt: promptPreview,\n });\n\n let textResponse: Awaited<ReturnType<typeof generateText>>;\n try {\n textResponse = await generateText({\n model: this.model,\n messages: formattedMessages,\n tools: Object.keys(tools).length > 0 ? tools : undefined,\n toolChoice:\n Object.keys(tools).length > 0\n ? options.tool_choice === \"required\"\n ? \"required\"\n : options.tool_choice === \"none\"\n ? \"none\"\n : \"auto\"\n : undefined,\n temperature,\n });\n } catch (err) {\n // Log error response to maintain request/response pairing\n SessionFileLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n operation: \"generateText\",\n output: `[error: ${err instanceof Error ? err.message : \"unknown\"}]`,\n });\n throw err;\n }\n\n // Transform AI SDK response to match LLMResponse format expected by operator handler\n const transformedToolCalls = (textResponse.toolCalls || []).map(\n (toolCall) => ({\n id:\n toolCall.toolCallId ||\n `call_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n type: \"function\",\n function: {\n name: toolCall.toolName,\n arguments: JSON.stringify(toolCall.input),\n },\n }),\n );\n\n const result = {\n id: `chatcmpl_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n object: \"chat.completion\",\n created: Math.floor(Date.now() / 1000),\n model: this.model.modelId,\n choices: [\n {\n index: 0,\n message: {\n role: \"assistant\",\n content: textResponse.text || null,\n tool_calls: transformedToolCalls,\n },\n finish_reason: textResponse.finishReason || \"stop\",\n },\n ],\n usage: {\n prompt_tokens: textResponse.usage.inputTokens ?? 0,\n completion_tokens: textResponse.usage.outputTokens ?? 0,\n reasoning_tokens: textResponse.usage.reasoningTokens ?? 0,\n cached_input_tokens: textResponse.usage.cachedInputTokens ?? 0,\n total_tokens: textResponse.usage.totalTokens ?? 0,\n },\n } as T;\n\n // Log LLM response for generateText\n SessionFileLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n operation: \"generateText\",\n output:\n textResponse.text ||\n (transformedToolCalls.length > 0\n ? `[${transformedToolCalls.length} tool calls]`\n : \"\"),\n inputTokens: textResponse.usage.inputTokens,\n outputTokens: textResponse.usage.outputTokens,\n });\n\n this.logger?.({\n category: \"aisdk\",\n message: \"response\",\n level: 2,\n auxiliary: {\n response: {\n value: JSON.stringify({\n text: textResponse.text,\n usage: textResponse.usage,\n finishReason: textResponse.finishReason,\n // Omit request and response properties that might contain images\n }),\n type: \"object\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"aisdk.js","sourceRoot":"","sources":["../../../../../lib/v3/llm/aisdk.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CoreAssistantMessage,\n ModelMessage,\n CoreSystemMessage,\n CoreUserMessage,\n generateObject,\n generateText,\n ImagePart,\n NoObjectGeneratedError,\n TextPart,\n ToolSet,\n Tool,\n} from \"ai\";\nimport type { LanguageModelV2 } from \"@ai-sdk/provider\";\nimport { ChatCompletion } from \"openai/resources\";\nimport { v7 as uuidv7 } from \"uuid\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport { AvailableModel } from \"../types/public/model.js\";\nimport { CreateChatCompletionOptions, LLMClient } from \"./LLMClient.js\";\nimport {\n FlowLogger,\n extractLlmPromptSummary,\n} from \"../flowlogger/FlowLogger.js\";\nimport { toJsonSchema } from \"../zodCompat.js\";\n\nexport class AISdkClient extends LLMClient {\n public type = \"aisdk\" as const;\n private model: LanguageModelV2;\n private logger?: (message: LogLine) => void;\n\n constructor({\n model,\n logger,\n }: {\n model: LanguageModelV2;\n logger?: (message: LogLine) => void;\n }) {\n super(model.modelId as AvailableModel);\n this.model = model;\n this.logger = logger;\n }\n\n public getLanguageModel(): LanguageModelV2 {\n return this.model;\n }\n\n async createChatCompletion<T = ChatCompletion>({\n options,\n }: CreateChatCompletionOptions): Promise<T> {\n this.logger?.({\n category: \"aisdk\",\n message: \"creating chat completion\",\n level: 2,\n auxiliary: {\n options: {\n value: JSON.stringify({\n ...options,\n image: undefined,\n messages: options.messages.map((msg) => ({\n ...msg,\n content: Array.isArray(msg.content)\n ? msg.content.map((c) =>\n \"image_url\" in c\n ? { ...c, image_url: { url: \"[IMAGE_REDACTED]\" } }\n : c,\n )\n : msg.content,\n })),\n }),\n type: \"object\",\n },\n modelName: {\n value: this.model.modelId,\n type: \"string\",\n },\n },\n });\n\n const formattedMessages: ModelMessage[] = options.messages.map(\n (message) => {\n if (Array.isArray(message.content)) {\n if (message.role === \"system\") {\n const systemMessage: CoreSystemMessage = {\n role: \"system\",\n content: message.content\n .map((c) => (\"text\" in c ? c.text : \"\"))\n .join(\"\\n\"),\n };\n return systemMessage;\n }\n\n const contentParts = message.content.map((content) => {\n if (\"image_url\" in content) {\n const imageContent: ImagePart = {\n type: \"image\",\n image: content.image_url.url,\n };\n return imageContent;\n } else {\n const textContent: TextPart = {\n type: \"text\",\n text: content.text,\n };\n return textContent;\n }\n });\n\n if (message.role === \"user\") {\n const userMessage: CoreUserMessage = {\n role: \"user\",\n content: contentParts,\n };\n return userMessage;\n } else {\n const textOnlyParts = contentParts.map((part) => ({\n type: \"text\" as const,\n text: part.type === \"image\" ? \"[Image]\" : part.text,\n }));\n const assistantMessage: CoreAssistantMessage = {\n role: \"assistant\",\n content: textOnlyParts,\n };\n return assistantMessage;\n }\n }\n\n return {\n role: message.role,\n content: message.content,\n };\n },\n );\n\n let objectResponse: Awaited<ReturnType<typeof generateObject>>;\n const isGPT5 = this.model.modelId.includes(\"gpt-5\");\n const isCodex = this.model.modelId.includes(\"codex\");\n const usesLowReasoningEffort =\n (this.model.modelId.includes(\"gpt-5.1\") ||\n this.model.modelId.includes(\"gpt-5.2\")) &&\n !isCodex;\n // Kimi models only support temperature=1\n const isKimi = this.model.modelId.includes(\"kimi\");\n const temperature = isKimi ? 1 : options.temperature;\n\n // Models that lack native structured-output support need a prompt-based\n // JSON fallback instead of response_format: { type: \"json_schema\" }.\n const PROMPT_JSON_FALLBACK_PATTERNS = [\"deepseek\", \"kimi\", \"glm\"];\n const needsPromptJsonFallback = PROMPT_JSON_FALLBACK_PATTERNS.some((p) =>\n this.model.modelId.includes(p),\n );\n\n if (options.response_model) {\n // Log LLM request for generateObject (extract)\n const llmRequestId = uuidv7();\n const promptSummary = extractLlmPromptSummary(options.messages, {\n hasSchema: true,\n });\n FlowLogger.logLlmRequest({\n requestId: llmRequestId,\n model: this.model.modelId,\n prompt: promptSummary,\n });\n\n // For models that don't support native structured outputs, add a prompt instruction\n if (needsPromptJsonFallback) {\n const parsedSchema = JSON.stringify(\n toJsonSchema(options.response_model.schema),\n );\n\n formattedMessages.push({\n role: \"user\",\n content: `Respond in this zod schema format:\\n${parsedSchema}\\n\nYou must respond in JSON format. respond WITH JSON. Do not include any other text, formatting or markdown in your output. Do not include \\`\\`\\` or \\`\\`\\`json in your response. Only the JSON object itself.`,\n });\n }\n\n try {\n objectResponse = await generateObject({\n model: this.model,\n messages: formattedMessages,\n schema: options.response_model.schema,\n temperature,\n providerOptions: isGPT5\n ? {\n openai: {\n textVerbosity: isCodex ? \"medium\" : \"low\", // codex models only support 'medium'\n reasoningEffort: isCodex\n ? \"medium\"\n : usesLowReasoningEffort\n ? \"low\"\n : \"minimal\",\n },\n }\n : undefined,\n });\n } catch (err) {\n // Log error response to maintain request/response pairing\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output: `[error: ${err instanceof Error ? err.message : \"unknown\"}]`,\n });\n\n if (NoObjectGeneratedError.isInstance(err)) {\n this.logger?.({\n category: \"AISDK error\",\n message: err.message,\n level: 0,\n auxiliary: {\n cause: {\n value: JSON.stringify(err.cause ?? {}),\n type: \"object\",\n },\n text: {\n value: err.text ?? \"\",\n type: \"string\",\n },\n response: {\n value: JSON.stringify(err.response ?? {}),\n type: \"object\",\n },\n usage: {\n value: JSON.stringify(err.usage ?? {}),\n type: \"object\",\n },\n finishReason: {\n value: err.finishReason ?? \"unknown\",\n type: \"string\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n throw err;\n }\n throw err;\n }\n\n const result = {\n data: objectResponse.object,\n usage: {\n prompt_tokens: objectResponse.usage.inputTokens ?? 0,\n completion_tokens: objectResponse.usage.outputTokens ?? 0,\n reasoning_tokens: objectResponse.usage.reasoningTokens ?? 0,\n cached_input_tokens: objectResponse.usage.cachedInputTokens ?? 0,\n total_tokens: objectResponse.usage.totalTokens ?? 0,\n },\n } as T;\n\n // Log LLM response for generateObject\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output: JSON.stringify(objectResponse.object),\n inputTokens: objectResponse.usage.inputTokens,\n outputTokens: objectResponse.usage.outputTokens,\n });\n\n this.logger?.({\n category: \"aisdk\",\n message: \"response\",\n level: 1,\n auxiliary: {\n response: {\n value: JSON.stringify({\n object: objectResponse.object,\n usage: objectResponse.usage,\n finishReason: objectResponse.finishReason,\n // Omit request and response properties that might contain images\n }),\n type: \"object\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n return result;\n }\n\n const tools: ToolSet = {};\n if (options.tools && options.tools.length > 0) {\n for (const tool of options.tools) {\n tools[tool.name] = {\n description: tool.description,\n inputSchema: tool.parameters,\n } as Tool;\n }\n }\n\n // Log LLM request for generateText (act/observe)\n const llmRequestId = uuidv7();\n const toolCount = Object.keys(tools).length;\n const promptSummary = extractLlmPromptSummary(options.messages, {\n toolCount,\n });\n FlowLogger.logLlmRequest({\n requestId: llmRequestId,\n model: this.model.modelId,\n prompt: promptSummary,\n });\n\n let textResponse: Awaited<ReturnType<typeof generateText>>;\n try {\n textResponse = await generateText({\n model: this.model,\n messages: formattedMessages,\n tools: Object.keys(tools).length > 0 ? tools : undefined,\n toolChoice:\n Object.keys(tools).length > 0\n ? options.tool_choice === \"required\"\n ? \"required\"\n : options.tool_choice === \"none\"\n ? \"none\"\n : \"auto\"\n : undefined,\n temperature,\n });\n } catch (err) {\n // Log error response to maintain request/response pairing\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output: `[error: ${err instanceof Error ? err.message : \"unknown\"}]`,\n });\n throw err;\n }\n\n // Transform AI SDK response to match LLMResponse format expected by operator handler\n const transformedToolCalls = (textResponse.toolCalls || []).map(\n (toolCall) => ({\n id:\n toolCall.toolCallId ||\n `call_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n type: \"function\",\n function: {\n name: toolCall.toolName,\n arguments: JSON.stringify(toolCall.input),\n },\n }),\n );\n\n const result = {\n id: `chatcmpl_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n object: \"chat.completion\",\n created: Math.floor(Date.now() / 1000),\n model: this.model.modelId,\n choices: [\n {\n index: 0,\n message: {\n role: \"assistant\",\n content: textResponse.text || null,\n tool_calls: transformedToolCalls,\n },\n finish_reason: textResponse.finishReason || \"stop\",\n },\n ],\n usage: {\n prompt_tokens: textResponse.usage.inputTokens ?? 0,\n completion_tokens: textResponse.usage.outputTokens ?? 0,\n reasoning_tokens: textResponse.usage.reasoningTokens ?? 0,\n cached_input_tokens: textResponse.usage.cachedInputTokens ?? 0,\n total_tokens: textResponse.usage.totalTokens ?? 0,\n },\n } as T;\n\n // Log LLM response for generateText\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output:\n textResponse.text ||\n (transformedToolCalls.length > 0\n ? `[${transformedToolCalls.length} tool calls]`\n : \"\"),\n inputTokens: textResponse.usage.inputTokens,\n outputTokens: textResponse.usage.outputTokens,\n });\n\n this.logger?.({\n category: \"aisdk\",\n message: \"response\",\n level: 2,\n auxiliary: {\n response: {\n value: JSON.stringify({\n text: textResponse.text,\n usage: textResponse.usage,\n finishReason: textResponse.finishReason,\n // Omit request and response properties that might contain images\n }),\n type: \"object\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n return result;\n }\n}\n"]}
@@ -7,7 +7,8 @@ exports.isMainModule = exports.createRequireFromCaller = exports.getPackageRootD
7
7
  /**
8
8
  * Keep this file in sync with:
9
9
  * - /packages/core/lib/v3/runtimePaths.ts
10
- * - /packages/server/scripts/runtimePaths.ts
10
+ * - /packages/server-v3/scripts/runtimePaths.ts
11
+ * - /packages/server-v4/scripts/runtimePaths.ts
11
12
  * - /packages/evals/runtimePaths.ts
12
13
  * - /packages/docs/scripts/runtimePaths.js
13
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"runtimePaths.js","sourceRoot":"","sources":["../../../../lib/v3/runtimePaths.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Keep this file in sync with:\n * - /packages/core/lib/v3/runtimePaths.ts\n * - /packages/server/scripts/runtimePaths.ts\n * - /packages/evals/runtimePaths.ts\n * - /packages/docs/scripts/runtimePaths.js\n */\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { createRequire } from \"node:module\";\n\nconst PACKAGE_SEGMENT = \"/packages/core/\";\nconst EVAL_FRAMES = new Set([\"[eval]\", \"[eval]-wrapper\"]);\nconst INTERNAL_FRAME_NAMES = new Set([\n \"readCallsites\",\n \"readCallsitePath\",\n \"resolveCallerFilePath\",\n \"getCurrentFilePath\",\n \"getCurrentDirPath\",\n \"getRepoRootDir\",\n \"getPackageRootDir\",\n \"createRequireFromCaller\",\n \"isMainModule\",\n]);\n\nconst normalizePath = (value: string): string => {\n const input = value.startsWith(\"file://\") ? fileURLToPath(value) : value;\n return path.resolve(input).replaceAll(\"\\\\\", \"/\");\n};\n\nconst readCallsites = (): NodeJS.CallSite[] => {\n const previousPrepare = Error.prepareStackTrace;\n try {\n Error.prepareStackTrace = (_, stack) => stack;\n return (\n (new Error().stack as unknown as NodeJS.CallSite[] | undefined) ?? []\n );\n } finally {\n Error.prepareStackTrace = previousPrepare;\n }\n};\n\ntype CallSiteWithScriptName = NodeJS.CallSite & {\n getScriptNameOrSourceURL?: () => string | null;\n};\n\nconst readCallsitePath = (callsite: NodeJS.CallSite): string | null => {\n const callsiteWithScript = callsite as CallSiteWithScriptName;\n const rawPath =\n callsite.getFileName() ?? callsiteWithScript.getScriptNameOrSourceURL?.();\n if (!rawPath) return null;\n if (rawPath.startsWith(\"node:\")) return null;\n if (EVAL_FRAMES.has(rawPath)) return null;\n return normalizePath(rawPath);\n};\n\nconst isInternalCallsite = (callsite: NodeJS.CallSite): boolean => {\n const functionName = callsite.getFunctionName();\n if (functionName && INTERNAL_FRAME_NAMES.has(functionName)) return true;\n\n const methodName = callsite.getMethodName();\n if (methodName && INTERNAL_FRAME_NAMES.has(methodName)) return true;\n\n const callsiteString = callsite.toString();\n for (const frameName of INTERNAL_FRAME_NAMES) {\n if (callsiteString.includes(`${frameName} (`)) return true;\n if (callsiteString.includes(`.${frameName} (`)) return true;\n }\n return false;\n};\n\nconst resolveCallerFilePath = (): string => {\n const packageCandidates: string[] = [];\n const fallbackCandidates: string[] = [];\n\n for (const callsite of readCallsites()) {\n const filePath = readCallsitePath(callsite);\n if (!filePath) continue;\n if (isInternalCallsite(callsite)) continue;\n if (filePath.includes(PACKAGE_SEGMENT)) {\n packageCandidates.push(filePath);\n continue;\n }\n fallbackCandidates.push(filePath);\n }\n\n const packageCandidate = packageCandidates[0];\n if (packageCandidate) return packageCandidate;\n\n const fallbackCandidate = fallbackCandidates[0];\n if (fallbackCandidate) return fallbackCandidate;\n\n throw new Error(\"Unable to resolve caller file path.\");\n};\n\nexport const getCurrentFilePath = (): string => resolveCallerFilePath();\n\nexport const getCurrentDirPath = (): string =>\n path.dirname(getCurrentFilePath());\n\nexport const getRepoRootDir = (): string => {\n const currentFilePath = getCurrentFilePath();\n const index = currentFilePath.lastIndexOf(PACKAGE_SEGMENT);\n if (index === -1) {\n throw new Error(\n `Unable to determine repo root from ${currentFilePath} (missing ${PACKAGE_SEGMENT}).`,\n );\n }\n return currentFilePath.slice(0, index);\n};\n\nexport const getPackageRootDir = (): string =>\n `${getRepoRootDir()}${PACKAGE_SEGMENT.slice(0, -1)}`;\n\nexport const createRequireFromCaller = () =>\n createRequire(getCurrentFilePath());\n\nexport const isMainModule = (): boolean => {\n const entryScript = process.argv.at(1);\n if (!entryScript) return false;\n return normalizePath(entryScript) === getCurrentFilePath();\n};\n"]}
1
+ {"version":3,"file":"runtimePaths.js","sourceRoot":"","sources":["../../../../lib/v3/runtimePaths.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Keep this file in sync with:\n * - /packages/core/lib/v3/runtimePaths.ts\n * - /packages/server-v3/scripts/runtimePaths.ts\n * - /packages/server-v4/scripts/runtimePaths.ts\n * - /packages/evals/runtimePaths.ts\n * - /packages/docs/scripts/runtimePaths.js\n */\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { createRequire } from \"node:module\";\n\nconst PACKAGE_SEGMENT = \"/packages/core/\";\nconst EVAL_FRAMES = new Set([\"[eval]\", \"[eval]-wrapper\"]);\nconst INTERNAL_FRAME_NAMES = new Set([\n \"readCallsites\",\n \"readCallsitePath\",\n \"resolveCallerFilePath\",\n \"getCurrentFilePath\",\n \"getCurrentDirPath\",\n \"getRepoRootDir\",\n \"getPackageRootDir\",\n \"createRequireFromCaller\",\n \"isMainModule\",\n]);\n\nconst normalizePath = (value: string): string => {\n const input = value.startsWith(\"file://\") ? fileURLToPath(value) : value;\n return path.resolve(input).replaceAll(\"\\\\\", \"/\");\n};\n\nconst readCallsites = (): NodeJS.CallSite[] => {\n const previousPrepare = Error.prepareStackTrace;\n try {\n Error.prepareStackTrace = (_, stack) => stack;\n return (\n (new Error().stack as unknown as NodeJS.CallSite[] | undefined) ?? []\n );\n } finally {\n Error.prepareStackTrace = previousPrepare;\n }\n};\n\ntype CallSiteWithScriptName = NodeJS.CallSite & {\n getScriptNameOrSourceURL?: () => string | null;\n};\n\nconst readCallsitePath = (callsite: NodeJS.CallSite): string | null => {\n const callsiteWithScript = callsite as CallSiteWithScriptName;\n const rawPath =\n callsite.getFileName() ?? callsiteWithScript.getScriptNameOrSourceURL?.();\n if (!rawPath) return null;\n if (rawPath.startsWith(\"node:\")) return null;\n if (EVAL_FRAMES.has(rawPath)) return null;\n return normalizePath(rawPath);\n};\n\nconst isInternalCallsite = (callsite: NodeJS.CallSite): boolean => {\n const functionName = callsite.getFunctionName();\n if (functionName && INTERNAL_FRAME_NAMES.has(functionName)) return true;\n\n const methodName = callsite.getMethodName();\n if (methodName && INTERNAL_FRAME_NAMES.has(methodName)) return true;\n\n const callsiteString = callsite.toString();\n for (const frameName of INTERNAL_FRAME_NAMES) {\n if (callsiteString.includes(`${frameName} (`)) return true;\n if (callsiteString.includes(`.${frameName} (`)) return true;\n }\n return false;\n};\n\nconst resolveCallerFilePath = (): string => {\n const packageCandidates: string[] = [];\n const fallbackCandidates: string[] = [];\n\n for (const callsite of readCallsites()) {\n const filePath = readCallsitePath(callsite);\n if (!filePath) continue;\n if (isInternalCallsite(callsite)) continue;\n if (filePath.includes(PACKAGE_SEGMENT)) {\n packageCandidates.push(filePath);\n continue;\n }\n fallbackCandidates.push(filePath);\n }\n\n const packageCandidate = packageCandidates[0];\n if (packageCandidate) return packageCandidate;\n\n const fallbackCandidate = fallbackCandidates[0];\n if (fallbackCandidate) return fallbackCandidate;\n\n throw new Error(\"Unable to resolve caller file path.\");\n};\n\nexport const getCurrentFilePath = (): string => resolveCallerFilePath();\n\nexport const getCurrentDirPath = (): string =>\n path.dirname(getCurrentFilePath());\n\nexport const getRepoRootDir = (): string => {\n const currentFilePath = getCurrentFilePath();\n const index = currentFilePath.lastIndexOf(PACKAGE_SEGMENT);\n if (index === -1) {\n throw new Error(\n `Unable to determine repo root from ${currentFilePath} (missing ${PACKAGE_SEGMENT}).`,\n );\n }\n return currentFilePath.slice(0, index);\n};\n\nexport const getPackageRootDir = (): string =>\n `${getRepoRootDir()}${PACKAGE_SEGMENT.slice(0, -1)}`;\n\nexport const createRequireFromCaller = () =>\n createRequire(getCurrentFilePath());\n\nexport const isMainModule = (): boolean => {\n const entryScript = process.argv.at(1);\n if (!entryScript) return false;\n return normalizePath(entryScript) === getCurrentFilePath();\n};\n"]}
@@ -110,7 +110,7 @@ const cleanupLocal = async (cfg, reason) => {
110
110
  });
111
111
  };
112
112
  const cleanupBrowserbase = async (cfg, reason) => {
113
- if (!cfg.apiKey || !cfg.projectId || !cfg.sessionId)
113
+ if (!cfg.apiKey || !cfg.sessionId)
114
114
  return;
115
115
  try {
116
116
  console.error(`[shutdown-supervisor] Ending Browserbase session ${cfg.sessionId} ` +
@@ -118,7 +118,7 @@ const cleanupBrowserbase = async (cfg, reason) => {
118
118
  const bb = new sdk_1.default({ apiKey: cfg.apiKey });
119
119
  await bb.sessions.update(cfg.sessionId, {
120
120
  status: "REQUEST_RELEASE",
121
- projectId: cfg.projectId,
121
+ ...(cfg.projectId ? { projectId: cfg.projectId } : {}),
122
122
  });
123
123
  }
124
124
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../../../lib/v3/shutdown/supervisor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shutdown supervisor process.\n *\n * This process watches a stdin lifeline. When the parent dies, stdin closes\n * and the supervisor performs best-effort cleanup:\n * - LOCAL: kill Chrome + remove temp profile\n * - STAGEHAND_API: request session release\n */\n\nimport Browserbase from \"@browserbasehq/sdk\";\nimport type { ShutdownSupervisorConfig } from \"../types/private/shutdown.js\";\nimport { cleanupLocalBrowser } from \"./cleanupLocal.js\";\n\nconst SIGKILL_POLL_MS = 250;\nconst SIGKILL_TIMEOUT_MS = 7_000;\nconst PID_POLL_INTERVAL_MS = 500;\n\n// `cleanupPromise` guarantees we execute cleanup at most once.\nlet config: ShutdownSupervisorConfig | null = null;\nlet cleanupPromise: Promise<void> | null = null;\nlet started = false;\nlet localPidKnownGone = false;\n\nconst exit = (code = 0): void => {\n try {\n process.exit(code);\n } catch {\n // ignore\n }\n};\n\n// Best-effort two-phase kill: SIGTERM first, then SIGKILL after timeout.\n// Treat only ESRCH as \"already gone\"; other errors should not imply dead.\nconst politeKill = async (pid: number): Promise<void> => {\n const isAlive = (): boolean => {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n const err = error as NodeJS.ErrnoException;\n // ESRCH = \"No such process\" (PID is already gone).\n return err.code !== \"ESRCH\";\n }\n };\n\n if (!isAlive()) return;\n try {\n process.kill(pid, \"SIGTERM\");\n } catch (error) {\n const err = error as NodeJS.ErrnoException;\n // ESRCH = process already exited; no further action needed.\n if (err.code === \"ESRCH\") return;\n }\n\n const deadline = Date.now() + SIGKILL_TIMEOUT_MS;\n while (Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, SIGKILL_POLL_MS));\n if (!isAlive()) return;\n }\n try {\n process.kill(pid, \"SIGKILL\");\n } catch {\n // best-effort\n }\n};\n\nlet pidPollTimer: NodeJS.Timeout | null = null;\n\n// Local-only fallback: if Chrome dies while parent still lives, run cleanup and exit.\nconst startPidPolling = (pid: number): void => {\n if (pidPollTimer) return;\n pidPollTimer = setInterval(() => {\n try {\n process.kill(pid, 0);\n return;\n } catch (error) {\n const err = error as NodeJS.ErrnoException;\n // Only ESRCH means the process is definitely gone.\n if (err.code !== \"ESRCH\") return;\n }\n\n localPidKnownGone = true;\n if (pidPollTimer) {\n clearInterval(pidPollTimer);\n pidPollTimer = null;\n }\n void runCleanup(\"Browser process exited\").finally(() => exit(0));\n }, PID_POLL_INTERVAL_MS);\n};\n\nconst cleanupLocal = async (\n cfg: Extract<ShutdownSupervisorConfig, { kind: \"LOCAL\" }>,\n reason: string,\n) => {\n const deletingUserDataDir = Boolean(\n cfg.createdTempProfile && !cfg.preserveUserDataDir && cfg.userDataDir,\n );\n await cleanupLocalBrowser({\n // If polling already observed ESRCH, avoid a follow-up PID kill.\n // The PID could be reused by a different process before cleanup runs.\n killChrome:\n cfg.pid && !localPidKnownGone\n ? () => {\n console.error(\n `[shutdown-supervisor] Shutting down Chrome pid=${cfg.pid} ` +\n `(reason=${reason}, deletingUserDataDir=${deletingUserDataDir})`,\n );\n return politeKill(cfg.pid);\n }\n : undefined,\n userDataDir: cfg.userDataDir,\n createdTempProfile: cfg.createdTempProfile,\n preserveUserDataDir: cfg.preserveUserDataDir,\n });\n};\n\nconst cleanupBrowserbase = async (\n cfg: Extract<ShutdownSupervisorConfig, { kind: \"STAGEHAND_API\" }>,\n reason: string,\n) => {\n if (!cfg.apiKey || !cfg.projectId || !cfg.sessionId) return;\n try {\n console.error(\n `[shutdown-supervisor] Ending Browserbase session ${cfg.sessionId} ` +\n `(reason=${reason})`,\n );\n const bb = new Browserbase({ apiKey: cfg.apiKey });\n await bb.sessions.update(cfg.sessionId, {\n status: \"REQUEST_RELEASE\",\n projectId: cfg.projectId,\n });\n } catch {\n // best-effort cleanup\n }\n};\n\n// Idempotent cleanup entrypoint used by all supervisor shutdown paths.\nconst runCleanup = (reason: string): Promise<void> => {\n if (!cleanupPromise) {\n cleanupPromise = (async () => {\n const cfg = config;\n if (!cfg) return;\n if (cfg.kind === \"LOCAL\") {\n await cleanupLocal(cfg, reason);\n return;\n }\n if (cfg.kind === \"STAGEHAND_API\") {\n await cleanupBrowserbase(cfg, reason);\n }\n })();\n }\n return cleanupPromise;\n};\n\nconst applyConfig = (nextConfig: ShutdownSupervisorConfig): void => {\n config = nextConfig;\n localPidKnownGone = false;\n if (config.kind === \"LOCAL\" && config.pid) {\n startPidPolling(config.pid);\n }\n};\n\nconst onLifelineClosed = (reason: string) => {\n void runCleanup(reason).finally(() => exit(0));\n};\n\nconst parseConfigFromArgv = (\n argv: readonly string[] = process.argv.slice(2),\n): ShutdownSupervisorConfig | null => {\n const prefix = \"--supervisor-config=\";\n const raw = argv.find((arg) => arg.startsWith(prefix))?.slice(prefix.length);\n if (!argv.includes(\"--supervisor\") || !raw) return null;\n try {\n return JSON.parse(raw) as ShutdownSupervisorConfig;\n } catch {\n return null;\n }\n};\n\nexport const runShutdownSupervisor = (\n initialConfig: ShutdownSupervisorConfig,\n): void => {\n if (started) return;\n started = true;\n applyConfig(initialConfig);\n\n // Stdin is the lifeline; losing it means parent is gone.\n try {\n process.stdin.resume();\n process.stdin.on(\"end\", () =>\n onLifelineClosed(\"Stagehand process completed\"),\n );\n process.stdin.on(\"close\", () =>\n onLifelineClosed(\"Stagehand process completed\"),\n );\n process.stdin.on(\"error\", () =>\n onLifelineClosed(\"Stagehand process crashed or was killed\"),\n );\n } catch {\n // ignore\n }\n};\n\nexport const maybeRunShutdownSupervisorFromArgv = (\n argv: readonly string[] = process.argv.slice(2),\n): boolean => {\n const parsed = parseConfigFromArgv(argv);\n if (!parsed) return false;\n runShutdownSupervisor(parsed);\n return true;\n};\n"]}
1
+ {"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../../../lib/v3/shutdown/supervisor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shutdown supervisor process.\n *\n * This process watches a stdin lifeline. When the parent dies, stdin closes\n * and the supervisor performs best-effort cleanup:\n * - LOCAL: kill Chrome + remove temp profile\n * - STAGEHAND_API: request session release\n */\n\nimport Browserbase from \"@browserbasehq/sdk\";\nimport type { ShutdownSupervisorConfig } from \"../types/private/shutdown.js\";\nimport { cleanupLocalBrowser } from \"./cleanupLocal.js\";\n\nconst SIGKILL_POLL_MS = 250;\nconst SIGKILL_TIMEOUT_MS = 7_000;\nconst PID_POLL_INTERVAL_MS = 500;\n\n// `cleanupPromise` guarantees we execute cleanup at most once.\nlet config: ShutdownSupervisorConfig | null = null;\nlet cleanupPromise: Promise<void> | null = null;\nlet started = false;\nlet localPidKnownGone = false;\n\nconst exit = (code = 0): void => {\n try {\n process.exit(code);\n } catch {\n // ignore\n }\n};\n\n// Best-effort two-phase kill: SIGTERM first, then SIGKILL after timeout.\n// Treat only ESRCH as \"already gone\"; other errors should not imply dead.\nconst politeKill = async (pid: number): Promise<void> => {\n const isAlive = (): boolean => {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n const err = error as NodeJS.ErrnoException;\n // ESRCH = \"No such process\" (PID is already gone).\n return err.code !== \"ESRCH\";\n }\n };\n\n if (!isAlive()) return;\n try {\n process.kill(pid, \"SIGTERM\");\n } catch (error) {\n const err = error as NodeJS.ErrnoException;\n // ESRCH = process already exited; no further action needed.\n if (err.code === \"ESRCH\") return;\n }\n\n const deadline = Date.now() + SIGKILL_TIMEOUT_MS;\n while (Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, SIGKILL_POLL_MS));\n if (!isAlive()) return;\n }\n try {\n process.kill(pid, \"SIGKILL\");\n } catch {\n // best-effort\n }\n};\n\nlet pidPollTimer: NodeJS.Timeout | null = null;\n\n// Local-only fallback: if Chrome dies while parent still lives, run cleanup and exit.\nconst startPidPolling = (pid: number): void => {\n if (pidPollTimer) return;\n pidPollTimer = setInterval(() => {\n try {\n process.kill(pid, 0);\n return;\n } catch (error) {\n const err = error as NodeJS.ErrnoException;\n // Only ESRCH means the process is definitely gone.\n if (err.code !== \"ESRCH\") return;\n }\n\n localPidKnownGone = true;\n if (pidPollTimer) {\n clearInterval(pidPollTimer);\n pidPollTimer = null;\n }\n void runCleanup(\"Browser process exited\").finally(() => exit(0));\n }, PID_POLL_INTERVAL_MS);\n};\n\nconst cleanupLocal = async (\n cfg: Extract<ShutdownSupervisorConfig, { kind: \"LOCAL\" }>,\n reason: string,\n) => {\n const deletingUserDataDir = Boolean(\n cfg.createdTempProfile && !cfg.preserveUserDataDir && cfg.userDataDir,\n );\n await cleanupLocalBrowser({\n // If polling already observed ESRCH, avoid a follow-up PID kill.\n // The PID could be reused by a different process before cleanup runs.\n killChrome:\n cfg.pid && !localPidKnownGone\n ? () => {\n console.error(\n `[shutdown-supervisor] Shutting down Chrome pid=${cfg.pid} ` +\n `(reason=${reason}, deletingUserDataDir=${deletingUserDataDir})`,\n );\n return politeKill(cfg.pid);\n }\n : undefined,\n userDataDir: cfg.userDataDir,\n createdTempProfile: cfg.createdTempProfile,\n preserveUserDataDir: cfg.preserveUserDataDir,\n });\n};\n\nconst cleanupBrowserbase = async (\n cfg: Extract<ShutdownSupervisorConfig, { kind: \"STAGEHAND_API\" }>,\n reason: string,\n) => {\n if (!cfg.apiKey || !cfg.sessionId) return;\n try {\n console.error(\n `[shutdown-supervisor] Ending Browserbase session ${cfg.sessionId} ` +\n `(reason=${reason})`,\n );\n const bb = new Browserbase({ apiKey: cfg.apiKey });\n await bb.sessions.update(cfg.sessionId, {\n status: \"REQUEST_RELEASE\",\n ...(cfg.projectId ? { projectId: cfg.projectId } : {}),\n } as Browserbase.Sessions.SessionUpdateParams);\n } catch {\n // best-effort cleanup\n }\n};\n\n// Idempotent cleanup entrypoint used by all supervisor shutdown paths.\nconst runCleanup = (reason: string): Promise<void> => {\n if (!cleanupPromise) {\n cleanupPromise = (async () => {\n const cfg = config;\n if (!cfg) return;\n if (cfg.kind === \"LOCAL\") {\n await cleanupLocal(cfg, reason);\n return;\n }\n if (cfg.kind === \"STAGEHAND_API\") {\n await cleanupBrowserbase(cfg, reason);\n }\n })();\n }\n return cleanupPromise;\n};\n\nconst applyConfig = (nextConfig: ShutdownSupervisorConfig): void => {\n config = nextConfig;\n localPidKnownGone = false;\n if (config.kind === \"LOCAL\" && config.pid) {\n startPidPolling(config.pid);\n }\n};\n\nconst onLifelineClosed = (reason: string) => {\n void runCleanup(reason).finally(() => exit(0));\n};\n\nconst parseConfigFromArgv = (\n argv: readonly string[] = process.argv.slice(2),\n): ShutdownSupervisorConfig | null => {\n const prefix = \"--supervisor-config=\";\n const raw = argv.find((arg) => arg.startsWith(prefix))?.slice(prefix.length);\n if (!argv.includes(\"--supervisor\") || !raw) return null;\n try {\n return JSON.parse(raw) as ShutdownSupervisorConfig;\n } catch {\n return null;\n }\n};\n\nexport const runShutdownSupervisor = (\n initialConfig: ShutdownSupervisorConfig,\n): void => {\n if (started) return;\n started = true;\n applyConfig(initialConfig);\n\n // Stdin is the lifeline; losing it means parent is gone.\n try {\n process.stdin.resume();\n process.stdin.on(\"end\", () =>\n onLifelineClosed(\"Stagehand process completed\"),\n );\n process.stdin.on(\"close\", () =>\n onLifelineClosed(\"Stagehand process completed\"),\n );\n process.stdin.on(\"error\", () =>\n onLifelineClosed(\"Stagehand process crashed or was killed\"),\n );\n } catch {\n // ignore\n }\n};\n\nexport const maybeRunShutdownSupervisorFromArgv = (\n argv: readonly string[] = process.argv.slice(2),\n): boolean => {\n const parsed = parseConfigFromArgv(argv);\n if (!parsed) return false;\n runShutdownSupervisor(parsed);\n return true;\n};\n"]}
@@ -1,2 +1,2 @@
1
1
  export declare function getEnvTimeoutMs(name: string): number | undefined;
2
- export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, operation: string): Promise<T>;
2
+ export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number | null | undefined, operation: string): Promise<T>;
@@ -14,6 +14,11 @@ function getEnvTimeoutMs(name) {
14
14
  return value;
15
15
  }
16
16
  async function withTimeout(promise, timeoutMs, operation) {
17
+ if (typeof timeoutMs !== "number" ||
18
+ !Number.isFinite(timeoutMs) ||
19
+ timeoutMs <= 0) {
20
+ return await promise;
21
+ }
17
22
  let timeoutId;
18
23
  const timeoutPromise = new Promise((_, reject) => {
19
24
  timeoutId = setTimeout(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"timeoutConfig.js","sourceRoot":"","sources":["../../../../lib/v3/timeoutConfig.ts"],"names":[],"mappings":";;AAEA,0CAOC;AAED,kCAgBC;AA3BD,8DAA2D;AAE3D,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,OAAmB,EACnB,SAAiB,EACjB,SAAiB;IAEjB,IAAI,SAAqC,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,2BAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IACvD,CAAC;YAAS,CAAC;QACT,IAAI,SAAS;YAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;AACH,CAAC","sourcesContent":["import { TimeoutError } from \"./types/public/sdkErrors.js\";\n\nexport function getEnvTimeoutMs(name: string): number | undefined {\n const raw = process.env[name];\n if (!raw) return undefined;\n const normalized = raw.trim().replace(/ms$/i, \"\");\n const value = Number(normalized);\n if (!Number.isFinite(value) || value <= 0) return undefined;\n return value;\n}\n\nexport async function withTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number,\n operation: string,\n): Promise<T> {\n let timeoutId: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => {\n reject(new TimeoutError(operation, timeoutMs));\n }, timeoutMs);\n });\n try {\n return await Promise.race([promise, timeoutPromise]);\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n }\n}\n"]}
1
+ {"version":3,"file":"timeoutConfig.js","sourceRoot":"","sources":["../../../../lib/v3/timeoutConfig.ts"],"names":[],"mappings":";;AAEA,0CAOC;AAED,kCAwBC;AAnCD,8DAA2D;AAE3D,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,OAAmB,EACnB,SAAoC,EACpC,SAAiB;IAEjB,IACE,OAAO,SAAS,KAAK,QAAQ;QAC7B,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC3B,SAAS,IAAI,CAAC,EACd,CAAC;QACD,OAAO,MAAM,OAAO,CAAC;IACvB,CAAC;IAED,IAAI,SAAqC,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,2BAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC,EAAE,SAAS,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IACvD,CAAC;YAAS,CAAC;QACT,IAAI,SAAS;YAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;AACH,CAAC","sourcesContent":["import { TimeoutError } from \"./types/public/sdkErrors.js\";\n\nexport function getEnvTimeoutMs(name: string): number | undefined {\n const raw = process.env[name];\n if (!raw) return undefined;\n const normalized = raw.trim().replace(/ms$/i, \"\");\n const value = Number(normalized);\n if (!Number.isFinite(value) || value <= 0) return undefined;\n return value;\n}\n\nexport async function withTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number | null | undefined,\n operation: string,\n): Promise<T> {\n if (\n typeof timeoutMs !== \"number\" ||\n !Number.isFinite(timeoutMs) ||\n timeoutMs <= 0\n ) {\n return await promise;\n }\n\n let timeoutId: NodeJS.Timeout | undefined;\n const timeoutPromise = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => {\n reject(new TimeoutError(operation, timeoutMs));\n }, timeoutMs);\n });\n try {\n return await Promise.race([promise, timeoutPromise]);\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n }\n}\n"]}
@@ -78,7 +78,6 @@ export interface AgentReplayFillFormStep {
78
78
  type: "fillForm";
79
79
  fields?: Array<{
80
80
  action: string;
81
- value: string;
82
81
  }>;
83
82
  observeResults?: Action[];
84
83
  actions?: Action[];
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/private/cache.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ActOptions,\n ActResult,\n AvailableModel,\n Logger,\n AgentResult,\n Action,\n LoadState,\n} from \"../public/index.js\";\nimport { CacheStorage } from \"../../cache/CacheStorage.js\";\nimport type { ActHandler } from \"../../handlers/actHandler.js\";\nimport type { V3Context } from \"../../understudy/context.js\";\nimport type { LLMClient } from \"../../llm/LLMClient.js\";\n\nexport type ActFn = (\n instruction: string,\n options?: ActOptions,\n) => Promise<ActResult>;\n\nexport type AgentCacheContext = {\n instruction: string;\n startUrl: string;\n options: SanitizedAgentExecuteOptions;\n configSignature: string;\n cacheKey: string;\n variableKeys: string[] /** Variable keys used in this execution (for cache key) */;\n /** Variable values to substitute during replay */\n variables?: Record<string, string>;\n};\n\nexport type AgentCacheTransferPayload = {\n cacheKey: string;\n entry: CachedAgentEntry;\n};\n\nexport type AgentCacheDeps = {\n storage: CacheStorage;\n logger: Logger;\n getActHandler: () => ActHandler | null;\n getContext: () => V3Context | null;\n getDefaultLlmClient: () => LLMClient;\n getBaseModelName: () => AvailableModel;\n getSystemPrompt: () => string | undefined;\n domSettleTimeoutMs?: number;\n act: ActFn;\n bufferLatestEntry?: boolean;\n};\n\nexport type ActCacheContext = {\n instruction: string;\n cacheKey: string;\n pageUrl: string;\n variableKeys: string[];\n variables?: Record<string, string>;\n};\n\nexport type ActCacheDeps = {\n storage: CacheStorage;\n logger: Logger;\n getActHandler: () => ActHandler | null;\n getDefaultLlmClient: () => LLMClient;\n domSettleTimeoutMs?: number;\n};\n\nexport type ReadJsonResult<T> = {\n value: T | null;\n path?: string;\n error?: unknown;\n};\n\nexport type WriteJsonResult = {\n path?: string;\n error?: unknown;\n};\n\nexport interface CachedActEntry {\n version: 1;\n instruction: string;\n url: string;\n variableKeys: string[];\n actions: Action[];\n actionDescription?: string;\n message?: string;\n}\n\nexport type AgentReplayStep =\n | AgentReplayActStep\n | AgentReplayFillFormStep\n | AgentReplayGotoStep\n | AgentReplayScrollStep\n | AgentReplayWaitStep\n | AgentReplayNavBackStep\n | AgentReplayKeysStep\n | { type: string; [key: string]: unknown };\n\nexport interface AgentReplayActStep {\n type: \"act\";\n instruction: string;\n actions?: Action[];\n actionDescription?: string;\n message?: string;\n timeout?: number;\n}\n\nexport interface AgentReplayFillFormStep {\n type: \"fillForm\";\n fields?: Array<{ action: string; value: string }>;\n observeResults?: Action[];\n actions?: Action[];\n}\n\nexport interface AgentReplayGotoStep {\n type: \"goto\";\n url: string;\n waitUntil?: LoadState;\n}\n\nexport interface AgentReplayScrollStep {\n type: \"scroll\";\n deltaX?: number;\n deltaY?: number;\n anchor?: { x: number; y: number };\n}\n\nexport interface AgentReplayWaitStep {\n type: \"wait\";\n timeMs: number;\n}\n\nexport interface AgentReplayNavBackStep {\n type: \"navback\";\n waitUntil?: LoadState;\n}\n\nexport interface AgentReplayKeysStep {\n type: \"keys\";\n instruction?: string;\n playwrightArguments: {\n method: \"type\" | \"press\";\n text?: string;\n keys?: string;\n times?: number;\n };\n}\n\nexport interface SanitizedAgentExecuteOptions {\n maxSteps?: number;\n highlightCursor?: boolean;\n}\n\nexport interface CachedAgentEntry {\n version: 1;\n instruction: string;\n startUrl: string;\n options: SanitizedAgentExecuteOptions;\n configSignature: string;\n steps: AgentReplayStep[];\n result: AgentResult;\n timestamp: string;\n}\n"]}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/private/cache.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ActOptions,\n ActResult,\n AvailableModel,\n Logger,\n AgentResult,\n Action,\n LoadState,\n} from \"../public/index.js\";\nimport { CacheStorage } from \"../../cache/CacheStorage.js\";\nimport type { ActHandler } from \"../../handlers/actHandler.js\";\nimport type { V3Context } from \"../../understudy/context.js\";\nimport type { LLMClient } from \"../../llm/LLMClient.js\";\n\nexport type ActFn = (\n instruction: string,\n options?: ActOptions,\n) => Promise<ActResult>;\n\nexport type AgentCacheContext = {\n instruction: string;\n startUrl: string;\n options: SanitizedAgentExecuteOptions;\n configSignature: string;\n cacheKey: string;\n variableKeys: string[] /** Variable keys used in this execution (for cache key) */;\n /** Variable values to substitute during replay */\n variables?: Record<string, string>;\n};\n\nexport type AgentCacheTransferPayload = {\n cacheKey: string;\n entry: CachedAgentEntry;\n};\n\nexport type AgentCacheDeps = {\n storage: CacheStorage;\n logger: Logger;\n getActHandler: () => ActHandler | null;\n getContext: () => V3Context | null;\n getDefaultLlmClient: () => LLMClient;\n getBaseModelName: () => AvailableModel;\n getSystemPrompt: () => string | undefined;\n domSettleTimeoutMs?: number;\n act: ActFn;\n bufferLatestEntry?: boolean;\n};\n\nexport type ActCacheContext = {\n instruction: string;\n cacheKey: string;\n pageUrl: string;\n variableKeys: string[];\n variables?: Record<string, string>;\n};\n\nexport type ActCacheDeps = {\n storage: CacheStorage;\n logger: Logger;\n getActHandler: () => ActHandler | null;\n getDefaultLlmClient: () => LLMClient;\n domSettleTimeoutMs?: number;\n};\n\nexport type ReadJsonResult<T> = {\n value: T | null;\n path?: string;\n error?: unknown;\n};\n\nexport type WriteJsonResult = {\n path?: string;\n error?: unknown;\n};\n\nexport interface CachedActEntry {\n version: 1;\n instruction: string;\n url: string;\n variableKeys: string[];\n actions: Action[];\n actionDescription?: string;\n message?: string;\n}\n\nexport type AgentReplayStep =\n | AgentReplayActStep\n | AgentReplayFillFormStep\n | AgentReplayGotoStep\n | AgentReplayScrollStep\n | AgentReplayWaitStep\n | AgentReplayNavBackStep\n | AgentReplayKeysStep\n | { type: string; [key: string]: unknown };\n\nexport interface AgentReplayActStep {\n type: \"act\";\n instruction: string;\n actions?: Action[];\n actionDescription?: string;\n message?: string;\n timeout?: number;\n}\n\nexport interface AgentReplayFillFormStep {\n type: \"fillForm\";\n fields?: Array<{ action: string }>;\n observeResults?: Action[];\n actions?: Action[];\n}\n\nexport interface AgentReplayGotoStep {\n type: \"goto\";\n url: string;\n waitUntil?: LoadState;\n}\n\nexport interface AgentReplayScrollStep {\n type: \"scroll\";\n deltaX?: number;\n deltaY?: number;\n anchor?: { x: number; y: number };\n}\n\nexport interface AgentReplayWaitStep {\n type: \"wait\";\n timeMs: number;\n}\n\nexport interface AgentReplayNavBackStep {\n type: \"navback\";\n waitUntil?: LoadState;\n}\n\nexport interface AgentReplayKeysStep {\n type: \"keys\";\n instruction?: string;\n playwrightArguments: {\n method: \"type\" | \"press\";\n text?: string;\n keys?: string;\n times?: number;\n };\n}\n\nexport interface SanitizedAgentExecuteOptions {\n maxSteps?: number;\n highlightCursor?: boolean;\n}\n\nexport interface CachedAgentEntry {\n version: 1;\n instruction: string;\n startUrl: string;\n options: SanitizedAgentExecuteOptions;\n configSignature: string;\n steps: AgentReplayStep[];\n result: AgentResult;\n timestamp: string;\n}\n"]}
@@ -11,7 +11,7 @@ export type ShutdownSupervisorConfig = {
11
11
  kind: "STAGEHAND_API";
12
12
  sessionId: string;
13
13
  apiKey: string;
14
- projectId: string;
14
+ projectId?: string;
15
15
  };
16
16
  export interface ShutdownSupervisorHandle {
17
17
  /** Best-effort signal to stop the supervisor process. */
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/private/shutdown.ts"],"names":[],"mappings":";AAAA;;GAEG","sourcesContent":["/**\n * Internal-only types for the shutdown supervisor process.\n */\n\nexport type ShutdownSupervisorConfig =\n | {\n kind: \"LOCAL\";\n pid: number;\n userDataDir?: string;\n createdTempProfile?: boolean;\n preserveUserDataDir?: boolean;\n }\n | {\n kind: \"STAGEHAND_API\";\n sessionId: string;\n apiKey: string;\n projectId: string;\n };\n\nexport interface ShutdownSupervisorHandle {\n /** Best-effort signal to stop the supervisor process. */\n stop: () => void;\n}\n"]}
1
+ {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/private/shutdown.ts"],"names":[],"mappings":";AAAA;;GAEG","sourcesContent":["/**\n * Internal-only types for the shutdown supervisor process.\n */\n\nexport type ShutdownSupervisorConfig =\n | {\n kind: \"LOCAL\";\n pid: number;\n userDataDir?: string;\n createdTempProfile?: boolean;\n preserveUserDataDir?: boolean;\n }\n | {\n kind: \"STAGEHAND_API\";\n sessionId: string;\n apiKey: string;\n projectId?: string;\n };\n\nexport interface ShutdownSupervisorHandle {\n /** Best-effort signal to stop the supervisor process. */\n stop: () => void;\n}\n"]}
@@ -275,7 +275,7 @@ export interface AgentExecuteOptionsBase {
275
275
  * - `think` - Agent reasoning/planning step
276
276
  * - `wait` - Wait for time or condition
277
277
  * - `done` - Mark task as complete
278
- * - `search` - Web search (requires BRAVE_API_KEY)
278
+ * - `search` - Web search (requires useSearch: true and BROWSERBASE_API_KEY)
279
279
  *
280
280
  * **Hybrid mode:**
281
281
  * - `click` - Click at specific coordinates
@@ -294,7 +294,7 @@ export interface AgentExecuteOptionsBase {
294
294
  * - `think` - Agent reasoning step
295
295
  * - `wait` - Wait for time/condition
296
296
  * - `done` - Mark task complete
297
- * - `search` - Web search (requires BRAVE_API_KEY)
297
+ * - `search` - Web search (requires useSearch: true and BROWSERBASE_API_KEY)
298
298
  *
299
299
  * @experimental
300
300
  * @example
@@ -350,6 +350,29 @@ export interface AgentExecuteOptionsBase {
350
350
  * ```
351
351
  */
352
352
  variables?: Variables;
353
+ /**
354
+ * Timeout in milliseconds for each agent tool call.
355
+ * If a tool call exceeds this duration, it will be aborted and
356
+ * reported back to the LLM as a timeout error so it can retry or adjust.
357
+ * For tools that call v3 methods (act, extract, fillForm, ariaTree), the
358
+ * timeout is also forwarded to the underlying v3 call for true cancellation.
359
+ * @default 45000 (45 seconds)
360
+ */
361
+ toolTimeout?: number;
362
+ /**
363
+ * Enable the web search tool powered by Browserbase Search API.
364
+ * Requires a valid Browserbase API key (BROWSERBASE_API_KEY).
365
+ * When set to true, the agent gains access to a `search` tool for web searches.
366
+ *
367
+ * @example
368
+ * ```typescript
369
+ * const result = await agent.execute({
370
+ * instruction: "Find the latest news about AI",
371
+ * useSearch: true,
372
+ * });
373
+ * ```
374
+ */
375
+ useSearch?: boolean;
353
376
  }
354
377
  /**
355
378
  * Options for non-streaming agent execution.
@@ -374,7 +397,7 @@ export interface AgentStreamExecuteOptions extends AgentExecuteOptionsBase {
374
397
  callbacks?: AgentStreamCallbacks;
375
398
  }
376
399
  export type AgentType = "openai" | "anthropic" | "google" | "microsoft" | "bedrock";
377
- export declare const AVAILABLE_CUA_MODELS: readonly ["openai/computer-use-preview", "openai/computer-use-preview-2025-03-11", "anthropic/claude-3-7-sonnet-latest", "anthropic/claude-opus-4-5-20251101", "anthropic/claude-opus-4-6", "anthropic/claude-sonnet-4-6", "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"];
400
+ export declare const AVAILABLE_CUA_MODELS: readonly ["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-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"];
378
401
  export type AvailableCuaModel = (typeof AVAILABLE_CUA_MODELS)[number];
379
402
  export interface AgentExecutionOptions<TOptions extends AgentExecuteOptions = AgentExecuteOptions> {
380
403
  options: TOptions;
@@ -631,6 +654,7 @@ export interface ScrollToolResult {
631
654
  success: boolean;
632
655
  message: string;
633
656
  scrolledPixels: number;
657
+ error?: string;
634
658
  }
635
659
  export interface ScrollVisionToolResult extends ScrollToolResult {
636
660
  screenshotBase64?: string;
@@ -639,4 +663,5 @@ export interface WaitToolResult {
639
663
  success: boolean;
640
664
  waited: number;
641
665
  screenshotBase64?: string;
666
+ error?: string;
642
667
  }
@@ -4,7 +4,6 @@ exports.AVAILABLE_CUA_MODELS = void 0;
4
4
  exports.AVAILABLE_CUA_MODELS = [
5
5
  "openai/computer-use-preview",
6
6
  "openai/computer-use-preview-2025-03-11",
7
- "anthropic/claude-3-7-sonnet-latest",
8
7
  "anthropic/claude-opus-4-5-20251101",
9
8
  "anthropic/claude-opus-4-6",
10
9
  "anthropic/claude-sonnet-4-6",