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

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 (495) hide show
  1. package/dist/cjs/lib/inference.d.ts +3 -1
  2. package/dist/cjs/lib/inference.js +4 -7
  3. package/dist/cjs/lib/inference.js.map +1 -1
  4. package/dist/cjs/lib/prompt.d.ts +1 -1
  5. package/dist/cjs/lib/prompt.js +24 -18
  6. package/dist/cjs/lib/prompt.js.map +1 -1
  7. package/dist/cjs/lib/utils.d.ts +1 -0
  8. package/dist/cjs/lib/utils.js +4 -0
  9. package/dist/cjs/lib/utils.js.map +1 -1
  10. package/dist/cjs/lib/v3/agent/AgentClient.d.ts +8 -0
  11. package/dist/cjs/lib/v3/agent/AgentClient.js +13 -0
  12. package/dist/cjs/lib/v3/agent/AgentClient.js.map +1 -1
  13. package/dist/cjs/lib/v3/agent/AgentProvider.js +0 -1
  14. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  15. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +6 -7
  16. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  17. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +6 -7
  18. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  19. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js +1 -0
  20. package/dist/cjs/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
  21. package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +10 -6
  22. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +107 -18
  23. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  24. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +4 -2
  25. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js +11 -12
  26. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  27. package/dist/cjs/lib/v3/agent/tools/act.d.ts +1 -1
  28. package/dist/cjs/lib/v3/agent/tools/act.js +11 -4
  29. package/dist/cjs/lib/v3/agent/tools/act.js.map +1 -1
  30. package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +8 -1
  31. package/dist/cjs/lib/v3/agent/tools/ariaTree.js +49 -22
  32. package/dist/cjs/lib/v3/agent/tools/ariaTree.js.map +1 -1
  33. package/dist/cjs/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
  34. package/dist/cjs/lib/v3/agent/tools/braveSearch.js.map +1 -0
  35. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
  36. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js +70 -0
  37. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
  38. package/dist/cjs/lib/v3/agent/tools/click.js +23 -31
  39. package/dist/cjs/lib/v3/agent/tools/click.js.map +1 -1
  40. package/dist/cjs/lib/v3/agent/tools/clickAndHold.js.map +1 -1
  41. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js +22 -30
  42. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  43. package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -2
  44. package/dist/cjs/lib/v3/agent/tools/extract.js +7 -3
  45. package/dist/cjs/lib/v3/agent/tools/extract.js.map +1 -1
  46. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js +30 -30
  47. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  48. package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +7 -2
  49. package/dist/cjs/lib/v3/agent/tools/fillform.js +56 -45
  50. package/dist/cjs/lib/v3/agent/tools/fillform.js.map +1 -1
  51. package/dist/cjs/lib/v3/agent/tools/index.d.ts +19 -3
  52. package/dist/cjs/lib/v3/agent/tools/index.js +63 -11
  53. package/dist/cjs/lib/v3/agent/tools/index.js.map +1 -1
  54. package/dist/cjs/lib/v3/agent/tools/keys.d.ts +1 -1
  55. package/dist/cjs/lib/v3/agent/tools/keys.js.map +1 -1
  56. package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +8 -0
  57. package/dist/cjs/lib/v3/agent/tools/screenshot.js +32 -15
  58. package/dist/cjs/lib/v3/agent/tools/screenshot.js.map +1 -1
  59. package/dist/cjs/lib/v3/agent/tools/scroll.js +12 -0
  60. package/dist/cjs/lib/v3/agent/tools/scroll.js.map +1 -1
  61. package/dist/cjs/lib/v3/agent/tools/type.js +23 -31
  62. package/dist/cjs/lib/v3/agent/tools/type.js.map +1 -1
  63. package/dist/cjs/lib/v3/agent/tools/wait.js +6 -0
  64. package/dist/cjs/lib/v3/agent/tools/wait.js.map +1 -1
  65. package/dist/cjs/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
  66. package/dist/cjs/lib/v3/agent/utils/captchaSolver.js +175 -0
  67. package/dist/cjs/lib/v3/agent/utils/captchaSolver.js.map +1 -0
  68. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
  69. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  70. package/dist/cjs/lib/v3/agent/utils/variables.d.ts +5 -0
  71. package/dist/cjs/lib/v3/agent/utils/variables.js +9 -0
  72. package/dist/cjs/lib/v3/agent/utils/variables.js.map +1 -1
  73. package/dist/cjs/lib/v3/api.d.ts +2 -2
  74. package/dist/cjs/lib/v3/api.js +1 -1
  75. package/dist/cjs/lib/v3/api.js.map +1 -1
  76. package/dist/cjs/lib/v3/cache/ActCache.d.ts +0 -1
  77. package/dist/cjs/lib/v3/cache/ActCache.js +2 -18
  78. package/dist/cjs/lib/v3/cache/ActCache.js.map +1 -1
  79. package/dist/cjs/lib/v3/flowlogger/EventEmitter.d.ts +7 -0
  80. package/dist/cjs/lib/v3/flowlogger/EventEmitter.js +30 -0
  81. package/dist/cjs/lib/v3/flowlogger/EventEmitter.js.map +1 -0
  82. package/dist/cjs/lib/v3/flowlogger/EventSink.d.ts +44 -0
  83. package/dist/cjs/lib/v3/flowlogger/EventSink.js +217 -0
  84. package/dist/cjs/lib/v3/flowlogger/EventSink.js.map +1 -0
  85. package/dist/cjs/lib/v3/flowlogger/EventStore.d.ts +26 -0
  86. package/dist/cjs/lib/v3/flowlogger/EventStore.js +135 -0
  87. package/dist/cjs/lib/v3/flowlogger/EventStore.js.map +1 -0
  88. package/dist/cjs/lib/v3/flowlogger/FlowLogger.d.ts +99 -0
  89. package/dist/cjs/lib/v3/flowlogger/FlowLogger.js +591 -0
  90. package/dist/cjs/lib/v3/flowlogger/FlowLogger.js.map +1 -0
  91. package/dist/cjs/lib/v3/flowlogger/prettify.d.ts +6 -0
  92. package/dist/cjs/lib/v3/flowlogger/prettify.js +395 -0
  93. package/dist/cjs/lib/v3/flowlogger/prettify.js.map +1 -0
  94. package/dist/cjs/lib/v3/handlers/actHandler.js +1 -2
  95. package/dist/cjs/lib/v3/handlers/actHandler.js.map +1 -1
  96. package/dist/cjs/lib/v3/handlers/extractHandler.js +2 -2
  97. package/dist/cjs/lib/v3/handlers/extractHandler.js.map +1 -1
  98. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js +43 -57
  99. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
  100. package/dist/cjs/lib/v3/handlers/observeHandler.js +3 -3
  101. package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -1
  102. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -5
  103. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +130 -91
  104. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  105. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
  106. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +134 -14
  107. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  108. package/dist/cjs/lib/v3/index.d.ts +2 -1
  109. package/dist/cjs/lib/v3/launch/browserbase.d.ts +1 -1
  110. package/dist/cjs/lib/v3/launch/browserbase.js +4 -9
  111. package/dist/cjs/lib/v3/launch/browserbase.js.map +1 -1
  112. package/dist/cjs/lib/v3/llm/LLMProvider.d.ts +5 -2
  113. package/dist/cjs/lib/v3/llm/LLMProvider.js +14 -11
  114. package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
  115. package/dist/cjs/lib/v3/llm/aisdk.d.ts +3 -1
  116. package/dist/cjs/lib/v3/llm/aisdk.js +24 -28
  117. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  118. package/dist/cjs/lib/v3/runtimePaths.js +2 -1
  119. package/dist/cjs/lib/v3/runtimePaths.js.map +1 -1
  120. package/dist/cjs/lib/v3/shutdown/supervisor.js +2 -2
  121. package/dist/cjs/lib/v3/shutdown/supervisor.js.map +1 -1
  122. package/dist/cjs/lib/v3/timeoutConfig.d.ts +1 -1
  123. package/dist/cjs/lib/v3/timeoutConfig.js +5 -0
  124. package/dist/cjs/lib/v3/timeoutConfig.js.map +1 -1
  125. package/dist/cjs/lib/v3/types/private/cache.d.ts +0 -1
  126. package/dist/cjs/lib/v3/types/private/cache.js.map +1 -1
  127. package/dist/cjs/lib/v3/types/private/handlers.d.ts +1 -0
  128. package/dist/cjs/lib/v3/types/private/handlers.js.map +1 -1
  129. package/dist/cjs/lib/v3/types/private/shutdown.d.ts +1 -1
  130. package/dist/cjs/lib/v3/types/private/shutdown.js.map +1 -1
  131. package/dist/cjs/lib/v3/types/public/agent.d.ts +28 -3
  132. package/dist/cjs/lib/v3/types/public/agent.js +0 -1
  133. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  134. package/dist/cjs/lib/v3/types/public/api.d.ts +27 -7
  135. package/dist/cjs/lib/v3/types/public/api.js +42 -14
  136. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  137. package/dist/cjs/lib/v3/types/public/methods.d.ts +1 -0
  138. package/dist/cjs/lib/v3/types/public/methods.js.map +1 -1
  139. package/dist/cjs/lib/v3/types/public/model.d.ts +14 -3
  140. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  141. package/dist/cjs/lib/v3/types/public/options.d.ts +8 -0
  142. package/dist/cjs/lib/v3/types/public/options.js.map +1 -1
  143. package/dist/cjs/lib/v3/types/public/variables.d.ts +7 -0
  144. package/dist/cjs/lib/v3/types/public/variables.js +22 -0
  145. package/dist/cjs/lib/v3/types/public/variables.js.map +1 -0
  146. package/dist/cjs/lib/v3/understudy/cdp.d.ts +8 -13
  147. package/dist/cjs/lib/v3/understudy/cdp.js +180 -20
  148. package/dist/cjs/lib/v3/understudy/cdp.js.map +1 -1
  149. package/dist/cjs/lib/v3/understudy/context.d.ts +1 -0
  150. package/dist/cjs/lib/v3/understudy/context.js +148 -62
  151. package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
  152. package/dist/cjs/lib/v3/understudy/frame.js +23 -6
  153. package/dist/cjs/lib/v3/understudy/frame.js.map +1 -1
  154. package/dist/cjs/lib/v3/understudy/page.d.ts +13 -0
  155. package/dist/cjs/lib/v3/understudy/page.js +85 -22
  156. package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
  157. package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +0 -1
  158. package/dist/cjs/lib/v3/understudy/screenshotUtils.js +0 -18
  159. package/dist/cjs/lib/v3/understudy/screenshotUtils.js.map +1 -1
  160. package/dist/cjs/lib/v3/v3.d.ts +26 -3
  161. package/dist/cjs/lib/v3/v3.js +250 -180
  162. package/dist/cjs/lib/v3/v3.js.map +1 -1
  163. package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js +56 -0
  164. package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
  165. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js +6 -6
  166. package/dist/cjs/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
  167. package/dist/cjs/tests/integration/cdp-session-detached.spec.js +1 -1
  168. package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +1 -1
  169. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js +56 -0
  170. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js.map +1 -0
  171. package/dist/cjs/tests/integration/context-addInitScript.spec.js +104 -11
  172. package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +1 -1
  173. package/dist/cjs/tests/integration/flowLogger.spec.d.ts +1 -0
  174. package/dist/cjs/tests/integration/flowLogger.spec.js +714 -0
  175. package/dist/cjs/tests/integration/flowLogger.spec.js.map +1 -0
  176. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
  177. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +219 -0
  178. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
  179. package/dist/cjs/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
  180. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +85 -0
  181. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +1 -0
  182. package/dist/cjs/tests/integration/page-screenshot.spec.js +1 -1
  183. package/dist/cjs/tests/integration/page-screenshot.spec.js.map +1 -1
  184. package/dist/cjs/tests/integration/testUtils.d.ts +33 -0
  185. package/dist/cjs/tests/integration/testUtils.js +144 -0
  186. package/dist/cjs/tests/integration/testUtils.js.map +1 -1
  187. package/dist/cjs/tests/integration/timeouts.spec.js +278 -0
  188. package/dist/cjs/tests/integration/timeouts.spec.js.map +1 -1
  189. package/dist/cjs/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
  190. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js +285 -0
  191. package/dist/cjs/tests/unit/agent-captcha-hooks.test.js.map +1 -0
  192. package/dist/cjs/tests/unit/agent-execution-model.test.js +25 -3
  193. package/dist/cjs/tests/unit/agent-execution-model.test.js.map +1 -1
  194. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.d.ts +1 -0
  195. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js +23 -0
  196. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js.map +1 -0
  197. package/dist/cjs/tests/unit/aisdk-reasoning-effort.test.d.ts +1 -0
  198. package/dist/cjs/tests/unit/aisdk-reasoning-effort.test.js +153 -0
  199. package/dist/cjs/tests/unit/aisdk-reasoning-effort.test.js.map +1 -0
  200. package/dist/cjs/tests/unit/api-client-observe-variables.test.d.ts +1 -0
  201. package/dist/cjs/tests/unit/api-client-observe-variables.test.js +86 -0
  202. package/dist/cjs/tests/unit/api-client-observe-variables.test.js.map +1 -0
  203. package/dist/cjs/tests/unit/api-variables-schema.test.d.ts +1 -0
  204. package/dist/cjs/tests/unit/api-variables-schema.test.js +37 -0
  205. package/dist/cjs/tests/unit/api-variables-schema.test.js.map +1 -0
  206. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js +20 -0
  207. package/dist/cjs/tests/unit/browserbase-session-accessors.test.js.map +1 -1
  208. package/dist/cjs/tests/unit/captcha-solver.test.d.ts +1 -0
  209. package/dist/cjs/tests/unit/captcha-solver.test.js +154 -0
  210. package/dist/cjs/tests/unit/captcha-solver.test.js.map +1 -0
  211. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.d.ts +1 -0
  212. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js +95 -0
  213. package/dist/cjs/tests/unit/flowlogger-capturing-cdp.test.js.map +1 -0
  214. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.d.ts +1 -0
  215. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js +43 -0
  216. package/dist/cjs/tests/unit/flowlogger-capturing-llm.test.js.map +1 -0
  217. package/dist/cjs/tests/unit/flowlogger-eventstore.test.d.ts +1 -0
  218. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js +250 -0
  219. package/dist/cjs/tests/unit/flowlogger-eventstore.test.js.map +1 -0
  220. package/dist/cjs/tests/unit/llm-middleware.test.d.ts +1 -0
  221. package/dist/cjs/tests/unit/llm-middleware.test.js +495 -0
  222. package/dist/cjs/tests/unit/llm-middleware.test.js.map +1 -0
  223. package/dist/cjs/tests/unit/model-deprecation.test.js +5 -8
  224. package/dist/cjs/tests/unit/model-deprecation.test.js.map +1 -1
  225. package/dist/cjs/tests/unit/openai-cua-client.test.d.ts +1 -0
  226. package/dist/cjs/tests/unit/openai-cua-client.test.js +71 -0
  227. package/dist/cjs/tests/unit/openai-cua-client.test.js.map +1 -0
  228. package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +1 -0
  229. package/dist/cjs/tests/unit/page-extra-http-headers.test.js +92 -0
  230. package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +1 -0
  231. package/dist/cjs/tests/unit/prompt-observe-variables.test.d.ts +1 -0
  232. package/dist/cjs/tests/unit/prompt-observe-variables.test.js +19 -0
  233. package/dist/cjs/tests/unit/prompt-observe-variables.test.js.map +1 -0
  234. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +13 -1
  235. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  236. package/dist/cjs/tests/unit/public-api/public-types.test.js.map +1 -1
  237. package/dist/cjs/tests/unit/timeout-handlers.test.js +50 -0
  238. package/dist/cjs/tests/unit/timeout-handlers.test.js.map +1 -1
  239. package/dist/esm/lib/inference.d.ts +3 -1
  240. package/dist/esm/lib/inference.js +4 -7
  241. package/dist/esm/lib/inference.js.map +1 -1
  242. package/dist/esm/lib/prompt.d.ts +1 -1
  243. package/dist/esm/lib/prompt.js +24 -18
  244. package/dist/esm/lib/prompt.js.map +1 -1
  245. package/dist/esm/lib/utils.d.ts +1 -0
  246. package/dist/esm/lib/utils.js +3 -0
  247. package/dist/esm/lib/utils.js.map +1 -1
  248. package/dist/esm/lib/v3/agent/AgentClient.d.ts +8 -0
  249. package/dist/esm/lib/v3/agent/AgentClient.js +13 -0
  250. package/dist/esm/lib/v3/agent/AgentClient.js.map +1 -1
  251. package/dist/esm/lib/v3/agent/AgentProvider.js +0 -1
  252. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  253. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +6 -7
  254. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  255. package/dist/esm/lib/v3/agent/GoogleCUAClient.js +6 -7
  256. package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  257. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js +1 -0
  258. package/dist/esm/lib/v3/agent/MicrosoftCUAClient.js.map +1 -1
  259. package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +10 -6
  260. package/dist/esm/lib/v3/agent/OpenAICUAClient.js +107 -18
  261. package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  262. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +4 -2
  263. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +11 -12
  264. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  265. package/dist/esm/lib/v3/agent/tools/act.d.ts +1 -1
  266. package/dist/esm/lib/v3/agent/tools/act.js +11 -4
  267. package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
  268. package/dist/esm/lib/v3/agent/tools/ariaTree.d.ts +8 -1
  269. package/dist/esm/lib/v3/agent/tools/ariaTree.js +49 -22
  270. package/dist/esm/lib/v3/agent/tools/ariaTree.js.map +1 -1
  271. package/dist/esm/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
  272. package/dist/esm/lib/v3/agent/tools/braveSearch.js.map +1 -0
  273. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
  274. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js +66 -0
  275. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
  276. package/dist/esm/lib/v3/agent/tools/click.js +23 -31
  277. package/dist/esm/lib/v3/agent/tools/click.js.map +1 -1
  278. package/dist/esm/lib/v3/agent/tools/clickAndHold.js.map +1 -1
  279. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +22 -30
  280. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  281. package/dist/esm/lib/v3/agent/tools/extract.d.ts +2 -2
  282. package/dist/esm/lib/v3/agent/tools/extract.js +7 -3
  283. package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
  284. package/dist/esm/lib/v3/agent/tools/fillFormVision.js +30 -30
  285. package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  286. package/dist/esm/lib/v3/agent/tools/fillform.d.ts +7 -2
  287. package/dist/esm/lib/v3/agent/tools/fillform.js +56 -45
  288. package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
  289. package/dist/esm/lib/v3/agent/tools/index.d.ts +19 -3
  290. package/dist/esm/lib/v3/agent/tools/index.js +63 -11
  291. package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
  292. package/dist/esm/lib/v3/agent/tools/keys.d.ts +1 -1
  293. package/dist/esm/lib/v3/agent/tools/keys.js.map +1 -1
  294. package/dist/esm/lib/v3/agent/tools/screenshot.d.ts +8 -0
  295. package/dist/esm/lib/v3/agent/tools/screenshot.js +32 -15
  296. package/dist/esm/lib/v3/agent/tools/screenshot.js.map +1 -1
  297. package/dist/esm/lib/v3/agent/tools/scroll.js +12 -0
  298. package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -1
  299. package/dist/esm/lib/v3/agent/tools/type.js +23 -31
  300. package/dist/esm/lib/v3/agent/tools/type.js.map +1 -1
  301. package/dist/esm/lib/v3/agent/tools/wait.js +6 -0
  302. package/dist/esm/lib/v3/agent/tools/wait.js.map +1 -1
  303. package/dist/esm/lib/v3/agent/utils/captchaSolver.d.ts +76 -0
  304. package/dist/esm/lib/v3/agent/utils/captchaSolver.js +171 -0
  305. package/dist/esm/lib/v3/agent/utils/captchaSolver.js.map +1 -0
  306. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
  307. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  308. package/dist/esm/lib/v3/agent/utils/variables.d.ts +5 -0
  309. package/dist/esm/lib/v3/agent/utils/variables.js +8 -0
  310. package/dist/esm/lib/v3/agent/utils/variables.js.map +1 -1
  311. package/dist/esm/lib/v3/api.d.ts +2 -2
  312. package/dist/esm/lib/v3/api.js +1 -1
  313. package/dist/esm/lib/v3/api.js.map +1 -1
  314. package/dist/esm/lib/v3/cache/ActCache.d.ts +0 -1
  315. package/dist/esm/lib/v3/cache/ActCache.js +2 -18
  316. package/dist/esm/lib/v3/cache/ActCache.js.map +1 -1
  317. package/dist/esm/lib/v3/flowlogger/EventEmitter.d.ts +7 -0
  318. package/dist/esm/lib/v3/flowlogger/EventEmitter.js +26 -0
  319. package/dist/esm/lib/v3/flowlogger/EventEmitter.js.map +1 -0
  320. package/dist/esm/lib/v3/flowlogger/EventSink.d.ts +44 -0
  321. package/dist/esm/lib/v3/flowlogger/EventSink.js +206 -0
  322. package/dist/esm/lib/v3/flowlogger/EventSink.js.map +1 -0
  323. package/dist/esm/lib/v3/flowlogger/EventStore.d.ts +26 -0
  324. package/dist/esm/lib/v3/flowlogger/EventStore.js +127 -0
  325. package/dist/esm/lib/v3/flowlogger/EventStore.js.map +1 -0
  326. package/dist/esm/lib/v3/flowlogger/FlowLogger.d.ts +99 -0
  327. package/dist/esm/lib/v3/flowlogger/FlowLogger.js +583 -0
  328. package/dist/esm/lib/v3/flowlogger/FlowLogger.js.map +1 -0
  329. package/dist/esm/lib/v3/flowlogger/prettify.d.ts +6 -0
  330. package/dist/esm/lib/v3/flowlogger/prettify.js +389 -0
  331. package/dist/esm/lib/v3/flowlogger/prettify.js.map +1 -0
  332. package/dist/esm/lib/v3/handlers/actHandler.js +1 -2
  333. package/dist/esm/lib/v3/handlers/actHandler.js.map +1 -1
  334. package/dist/esm/lib/v3/handlers/extractHandler.js +2 -2
  335. package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -1
  336. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +43 -57
  337. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
  338. package/dist/esm/lib/v3/handlers/observeHandler.js +3 -3
  339. package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
  340. package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +2 -5
  341. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +131 -92
  342. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  343. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +5 -0
  344. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +134 -14
  345. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  346. package/dist/esm/lib/v3/index.d.ts +2 -1
  347. package/dist/esm/lib/v3/launch/browserbase.d.ts +1 -1
  348. package/dist/esm/lib/v3/launch/browserbase.js +4 -9
  349. package/dist/esm/lib/v3/launch/browserbase.js.map +1 -1
  350. package/dist/esm/lib/v3/llm/LLMProvider.d.ts +5 -2
  351. package/dist/esm/lib/v3/llm/LLMProvider.js +15 -12
  352. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
  353. package/dist/esm/lib/v3/llm/aisdk.d.ts +3 -1
  354. package/dist/esm/lib/v3/llm/aisdk.js +24 -28
  355. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  356. package/dist/esm/lib/v3/runtimePaths.js +2 -1
  357. package/dist/esm/lib/v3/runtimePaths.js.map +1 -1
  358. package/dist/esm/lib/v3/shutdown/supervisor.js +2 -2
  359. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
  360. package/dist/esm/lib/v3/timeoutConfig.d.ts +1 -1
  361. package/dist/esm/lib/v3/timeoutConfig.js +5 -0
  362. package/dist/esm/lib/v3/timeoutConfig.js.map +1 -1
  363. package/dist/esm/lib/v3/types/private/cache.d.ts +0 -1
  364. package/dist/esm/lib/v3/types/private/cache.js.map +1 -1
  365. package/dist/esm/lib/v3/types/private/handlers.d.ts +1 -0
  366. package/dist/esm/lib/v3/types/private/handlers.js.map +1 -1
  367. package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -1
  368. package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
  369. package/dist/esm/lib/v3/types/public/agent.d.ts +28 -3
  370. package/dist/esm/lib/v3/types/public/agent.js +0 -1
  371. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  372. package/dist/esm/lib/v3/types/public/api.d.ts +27 -7
  373. package/dist/esm/lib/v3/types/public/api.js +37 -12
  374. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  375. package/dist/esm/lib/v3/types/public/methods.d.ts +1 -0
  376. package/dist/esm/lib/v3/types/public/methods.js.map +1 -1
  377. package/dist/esm/lib/v3/types/public/model.d.ts +14 -3
  378. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  379. package/dist/esm/lib/v3/types/public/options.d.ts +8 -0
  380. package/dist/esm/lib/v3/types/public/options.js.map +1 -1
  381. package/dist/esm/lib/v3/types/public/variables.d.ts +7 -0
  382. package/dist/esm/lib/v3/types/public/variables.js +19 -0
  383. package/dist/esm/lib/v3/types/public/variables.js.map +1 -0
  384. package/dist/esm/lib/v3/understudy/cdp.d.ts +8 -13
  385. package/dist/esm/lib/v3/understudy/cdp.js +181 -21
  386. package/dist/esm/lib/v3/understudy/cdp.js.map +1 -1
  387. package/dist/esm/lib/v3/understudy/context.d.ts +1 -0
  388. package/dist/esm/lib/v3/understudy/context.js +148 -62
  389. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  390. package/dist/esm/lib/v3/understudy/frame.js +23 -6
  391. package/dist/esm/lib/v3/understudy/frame.js.map +1 -1
  392. package/dist/esm/lib/v3/understudy/page.d.ts +13 -0
  393. package/dist/esm/lib/v3/understudy/page.js +87 -24
  394. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  395. package/dist/esm/lib/v3/understudy/screenshotUtils.d.ts +0 -1
  396. package/dist/esm/lib/v3/understudy/screenshotUtils.js +0 -17
  397. package/dist/esm/lib/v3/understudy/screenshotUtils.js.map +1 -1
  398. package/dist/esm/lib/v3/v3.d.ts +26 -3
  399. package/dist/esm/lib/v3/v3.js +250 -181
  400. package/dist/esm/lib/v3/v3.js.map +1 -1
  401. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.d.ts +1 -0
  402. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js +54 -0
  403. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js.map +1 -0
  404. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js +6 -6
  405. package/dist/esm/tests/integration/agent-hybrid-mode.spec.js.map +1 -1
  406. package/dist/esm/tests/integration/cdp-session-detached.spec.js +1 -1
  407. package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +1 -1
  408. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.d.ts +1 -0
  409. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js +54 -0
  410. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js.map +1 -0
  411. package/dist/esm/tests/integration/context-addInitScript.spec.js +104 -11
  412. package/dist/esm/tests/integration/context-addInitScript.spec.js.map +1 -1
  413. package/dist/esm/tests/integration/flowLogger.spec.d.ts +1 -0
  414. package/dist/esm/tests/integration/flowLogger.spec.js +712 -0
  415. package/dist/esm/tests/integration/flowLogger.spec.js.map +1 -0
  416. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
  417. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +217 -0
  418. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
  419. package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
  420. package/dist/esm/tests/integration/page-extra-http-headers.spec.js +83 -0
  421. package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +1 -0
  422. package/dist/esm/tests/integration/page-screenshot.spec.js +1 -1
  423. package/dist/esm/tests/integration/page-screenshot.spec.js.map +1 -1
  424. package/dist/esm/tests/integration/testUtils.d.ts +33 -0
  425. package/dist/esm/tests/integration/testUtils.js +138 -0
  426. package/dist/esm/tests/integration/testUtils.js.map +1 -1
  427. package/dist/esm/tests/integration/timeouts.spec.js +278 -0
  428. package/dist/esm/tests/integration/timeouts.spec.js.map +1 -1
  429. package/dist/esm/tests/unit/agent-captcha-hooks.test.d.ts +1 -0
  430. package/dist/esm/tests/unit/agent-captcha-hooks.test.js +283 -0
  431. package/dist/esm/tests/unit/agent-captcha-hooks.test.js.map +1 -0
  432. package/dist/esm/tests/unit/agent-execution-model.test.js +25 -3
  433. package/dist/esm/tests/unit/agent-execution-model.test.js.map +1 -1
  434. package/dist/esm/tests/unit/agent-system-prompt-variables.test.d.ts +1 -0
  435. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js +21 -0
  436. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js.map +1 -0
  437. package/dist/esm/tests/unit/aisdk-reasoning-effort.test.d.ts +1 -0
  438. package/dist/esm/tests/unit/aisdk-reasoning-effort.test.js +118 -0
  439. package/dist/esm/tests/unit/aisdk-reasoning-effort.test.js.map +1 -0
  440. package/dist/esm/tests/unit/api-client-observe-variables.test.d.ts +1 -0
  441. package/dist/esm/tests/unit/api-client-observe-variables.test.js +84 -0
  442. package/dist/esm/tests/unit/api-client-observe-variables.test.js.map +1 -0
  443. package/dist/esm/tests/unit/api-variables-schema.test.d.ts +1 -0
  444. package/dist/esm/tests/unit/api-variables-schema.test.js +35 -0
  445. package/dist/esm/tests/unit/api-variables-schema.test.js.map +1 -0
  446. package/dist/esm/tests/unit/browserbase-session-accessors.test.js +20 -0
  447. package/dist/esm/tests/unit/browserbase-session-accessors.test.js.map +1 -1
  448. package/dist/esm/tests/unit/captcha-solver.test.d.ts +1 -0
  449. package/dist/esm/tests/unit/captcha-solver.test.js +152 -0
  450. package/dist/esm/tests/unit/captcha-solver.test.js.map +1 -0
  451. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.d.ts +1 -0
  452. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js +93 -0
  453. package/dist/esm/tests/unit/flowlogger-capturing-cdp.test.js.map +1 -0
  454. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.d.ts +1 -0
  455. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js +41 -0
  456. package/dist/esm/tests/unit/flowlogger-capturing-llm.test.js.map +1 -0
  457. package/dist/esm/tests/unit/flowlogger-eventstore.test.d.ts +1 -0
  458. package/dist/esm/tests/unit/flowlogger-eventstore.test.js +248 -0
  459. package/dist/esm/tests/unit/flowlogger-eventstore.test.js.map +1 -0
  460. package/dist/esm/tests/unit/llm-middleware.test.d.ts +1 -0
  461. package/dist/esm/tests/unit/llm-middleware.test.js +460 -0
  462. package/dist/esm/tests/unit/llm-middleware.test.js.map +1 -0
  463. package/dist/esm/tests/unit/model-deprecation.test.js +5 -8
  464. package/dist/esm/tests/unit/model-deprecation.test.js.map +1 -1
  465. package/dist/esm/tests/unit/openai-cua-client.test.d.ts +1 -0
  466. package/dist/esm/tests/unit/openai-cua-client.test.js +69 -0
  467. package/dist/esm/tests/unit/openai-cua-client.test.js.map +1 -0
  468. package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +1 -0
  469. package/dist/esm/tests/unit/page-extra-http-headers.test.js +90 -0
  470. package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +1 -0
  471. package/dist/esm/tests/unit/prompt-observe-variables.test.d.ts +1 -0
  472. package/dist/esm/tests/unit/prompt-observe-variables.test.js +17 -0
  473. package/dist/esm/tests/unit/prompt-observe-variables.test.js.map +1 -0
  474. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +13 -1
  475. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  476. package/dist/esm/tests/unit/public-api/public-types.test.js.map +1 -1
  477. package/dist/esm/tests/unit/timeout-handlers.test.js +50 -0
  478. package/dist/esm/tests/unit/timeout-handlers.test.js.map +1 -1
  479. package/package.json +6 -4
  480. package/dist/cjs/lib/v3/agent/tools/search.js.map +0 -1
  481. package/dist/cjs/lib/v3/flowLogger.d.ts +0 -139
  482. package/dist/cjs/lib/v3/flowLogger.js +0 -881
  483. package/dist/cjs/lib/v3/flowLogger.js.map +0 -1
  484. package/dist/cjs/tests/unit/rerender-missing-shadows.test.js +0 -209
  485. package/dist/cjs/tests/unit/rerender-missing-shadows.test.js.map +0 -1
  486. package/dist/esm/lib/v3/agent/tools/search.js.map +0 -1
  487. package/dist/esm/lib/v3/flowLogger.d.ts +0 -139
  488. package/dist/esm/lib/v3/flowLogger.js +0 -868
  489. package/dist/esm/lib/v3/flowLogger.js.map +0 -1
  490. package/dist/esm/tests/unit/rerender-missing-shadows.test.js +0 -207
  491. package/dist/esm/tests/unit/rerender-missing-shadows.test.js.map +0 -1
  492. /package/dist/cjs/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
  493. /package/dist/cjs/tests/{unit/rerender-missing-shadows.test.d.ts → integration/agent-captcha-autosolve.spec.d.ts} +0 -0
  494. /package/dist/{esm/tests/unit/rerender-missing-shadows.test.d.ts → cjs/tests/integration/chrome-newtab-page-tracking.spec.d.ts} +0 -0
  495. /package/dist/esm/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../lib/prompt.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChatMessage } from \"./v3/llm/LLMClient.js\";\nimport type { Variables } from \"./v3/types/public/agent.js\";\n\nexport function buildUserInstructionsString(\n userProvidedInstructions?: string,\n): string {\n if (!userProvidedInstructions) {\n return \"\";\n }\n\n return `\\n\\n# Custom Instructions Provided by the User\n \nPlease keep the user's instructions in mind when performing actions. If the user's instructions are not relevant to the current task, ignore them.\n\nUser Instructions:\n${userProvidedInstructions}`;\n}\n\n// extract\nexport function buildExtractSystemPrompt(\n isUsingPrintExtractedDataTool: boolean = false,\n userProvidedInstructions?: string,\n): ChatMessage {\n const baseContent = `You are extracting content on behalf of a user.\n If a user asks you to extract a 'list' of information, or 'all' information, \n YOU MUST EXTRACT ALL OF THE INFORMATION THAT THE USER REQUESTS.\n \n You will be given:\n1. An instruction\n2. `;\n\n const contentDetail = `A list of DOM elements to extract from.`;\n\n const instructions = `\nPrint the exact text from the DOM elements with all symbols, characters, and endlines as is.\nPrint null or an empty string if no new information is found.\n `.trim();\n\n const toolInstructions = isUsingPrintExtractedDataTool\n ? `\nONLY print the content using the print_extracted_data tool provided.\nONLY print the content using the print_extracted_data tool provided.\n `.trim()\n : \"\";\n\n const additionalInstructions =\n \"If a user is attempting to extract links or URLs, you MUST respond with ONLY the IDs of the link elements. \\n\" +\n \"Do not attempt to extract links directly from the text unless absolutely necessary. \";\n\n const userInstructions = buildUserInstructionsString(\n userProvidedInstructions,\n );\n\n const content =\n `${baseContent}${contentDetail}\\n\\n${instructions}\\n${toolInstructions}${\n additionalInstructions ? `\\n\\n${additionalInstructions}` : \"\"\n }${userInstructions ? `\\n\\n${userInstructions}` : \"\"}`.replace(/\\s+/g, \" \");\n\n return {\n role: \"system\",\n content,\n };\n}\n\nexport function buildExtractUserPrompt(\n instruction: string,\n domElements: string,\n isUsingPrintExtractedDataTool: boolean = false,\n): ChatMessage {\n let content = `Instruction: ${instruction}\nDOM: ${domElements}`;\n\n if (isUsingPrintExtractedDataTool) {\n content += `\nONLY print the content using the print_extracted_data tool provided.\nONLY print the content using the print_extracted_data tool provided.`;\n }\n\n return {\n role: \"user\",\n content,\n };\n}\n\nconst metadataSystemPrompt = `You are an AI assistant tasked with evaluating the progress and completion status of an extraction task.\nAnalyze the extraction response and determine if the task is completed or if more information is needed.\nStrictly abide by the following criteria:\n1. Once the instruction has been satisfied by the current extraction response, ALWAYS set completion status to true and stop processing, regardless of remaining chunks.\n2. Only set completion status to false if BOTH of these conditions are true:\n - The instruction has not been satisfied yet\n - There are still chunks left to process (chunksTotal > chunksSeen)`;\n\nexport function buildMetadataSystemPrompt(): ChatMessage {\n return {\n role: \"system\",\n content: metadataSystemPrompt,\n };\n}\n\nexport function buildMetadataPrompt(\n instruction: string,\n extractionResponse: object,\n): ChatMessage {\n return {\n role: \"user\",\n content: `Instruction: ${instruction}\nExtracted content: ${JSON.stringify(extractionResponse, null, 2)}`,\n };\n}\n\n// observe\nexport function buildObserveSystemPrompt(\n userProvidedInstructions?: string,\n supportedActions?: string[],\n): ChatMessage {\n const actionsString = supportedActions?.length\n ? `\\n\\nSupported actions: ${supportedActions.join(\", \")}`\n : \"\";\n\n const observeSystemPrompt = `\nYou are helping the user automate the browser by finding elements based on what the user wants to observe in the page.\n\nYou will be given:\n1. a instruction of elements to observe\n2. a hierarchical accessibility tree showing the semantic structure of the page. The tree is a hybrid of the DOM and the accessibility tree.\n\nReturn an array of elements that match the instruction if they exist, otherwise return an empty array.\nWhen returning elements, include the appropriate method from the supported actions list.${actionsString}. When choosing non-left click actions, provide right or middle as the argument.`;\n const content = observeSystemPrompt.replace(/\\s+/g, \" \");\n\n return {\n role: \"system\",\n content: [content, buildUserInstructionsString(userProvidedInstructions)]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n };\n}\n\nexport function buildObserveUserMessage(\n instruction: string,\n domElements: string,\n): ChatMessage {\n return {\n role: \"user\",\n content: `instruction: ${instruction}\nAccessibility Tree: \\n${domElements}\\n`,\n };\n}\n\nexport function buildActSystemPrompt(\n userProvidedInstructions?: string,\n): ChatMessage {\n const actSystemPrompt = `\nYou are helping the user automate the browser by finding elements based on what action the user wants to take on the page\n\nYou will be given:\n1. a user defined instruction about what action to take\n2. a hierarchical accessibility tree showing the semantic structure of the page. The tree is a hybrid of the DOM and the accessibility tree.\n\nReturn the element that matches the instruction if it exists. Otherwise, return an empty object.`;\n const content = actSystemPrompt.replace(/\\s+/g, \" \");\n\n return {\n role: \"system\",\n content: [content, buildUserInstructionsString(userProvidedInstructions)]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n };\n}\n\nexport function buildActPrompt(\n action: string,\n supportedActions: string[],\n variables?: Variables,\n): string {\n // Base instruction\n let instruction = `Find the most relevant element to perform an action on given the following action: ${action}. \n IF AND ONLY IF the action EXPLICITLY includes the word 'dropdown' and implies choosing/selecting an option from a dropdown, ignore the 'General Instructions' section, and follow the 'Dropdown Specific Instructions' section carefully.\n \n General Instructions: \n Provide an action for this element such as ${supportedActions.join(\", \")}. Remember that to users, buttons and links look the same in most cases.\n When choosing non-left click actions, provide right or middle as the argument\n If the action is completely unrelated to a potential action to be taken on the page, return an empty object. \n ONLY return one action. If multiple actions are relevant, return the most relevant one. \n If the user is asking to scroll to a position on the page, e.g., 'halfway' or 0.75, etc, you must return the argument formatted as the correct percentage, e.g., '50%' or '75%', etc.\n If the user is asking to scroll to the next chunk/previous chunk, choose the nextChunk/prevChunk method. No arguments are required here.\n If the action implies a key press, e.g., 'press enter', 'press a', 'press space', etc., always choose the press method with the appropriate key as argument — e.g. 'a', 'Enter', 'Space'. Do not choose a click action on an on-screen keyboard. Capitalize the first character like 'Enter', 'Tab', 'Escape' only for special keys. \n \n Dropdown Specific Instructions:\n For interacting with dropdowns, there are two specific cases that you need to handle. \n \n CASE 1: the element is a 'select' element. \n - choose the selectOptionFromDropdown method,\n - set the argument to the exact text of the option that should be selected,\n - set twoStep to false.\n CASE 2: the element is NOT a 'select' element:\n - do not attempt to directly choose the element from the dropdown. You will need to click to expand the dropdown first. You will achieve this by following these instructions:\n - choose the node that most closely corresponds to the given instruction EVEN if it is a 'StaticText' element, or otherwise does not appear to be interactable. \n - choose the 'click' method\n - set twoStep to true.\n `;\n\n // Add variable names (not values) to the instruction if any\n if (variables && Object.keys(variables).length > 0) {\n const variableNames = Object.keys(variables)\n .map((key) => `%${key}%`)\n .join(\", \");\n const variablesPrompt = `The following variables are available to use in the action: ${variableNames}. Fill the argument variables with the variable name.`;\n instruction += ` ${variablesPrompt}`;\n }\n\n return instruction;\n}\n\nexport function buildStepTwoPrompt(\n originalUserAction: string,\n previousAction: string,\n supportedActions: string[],\n variables?: Variables,\n): string {\n // Base instruction\n let instruction = `\n The original user action was: ${originalUserAction}.\n You have just taken the following action which completed step 1 of 2: ${previousAction}.\n \n Now, you must find the most relevant element to perform an action on in order to complete step 2 of 2. \n \n General Instructions: \n Provide an action for this element such as ${supportedActions.join(\", \")}. Remember that to users, buttons and links look the same in most cases.\n If the action is completely unrelated to a potential action to be taken on the page, return an empty object. \n ONLY return one action. If multiple actions are relevant, return the most relevant one. \n If the user is asking to scroll to a position on the page, e.g., 'halfway' or 0.75, etc, you must return the argument formatted as the correct percentage, e.g., '50%' or '75%', etc.\n If the user is asking to scroll to the next chunk/previous chunk, choose the nextChunk/prevChunk method. No arguments are required here.\n If the action implies a key press, e.g., 'press enter', 'press a', 'press space', etc., always choose the press method with the appropriate key as argument — e.g. 'a', 'Enter', 'Space'. Do not choose a click action on an on-screen keyboard. Capitalize the first character like 'Enter', 'Tab', 'Escape' only for special keys. \n `;\n\n // Add variable names (not values) to the instruction if any\n if (variables && Object.keys(variables).length > 0) {\n const variableNames = Object.keys(variables)\n .map((key) => `%${key}%`)\n .join(\", \");\n const variablesPrompt = `The following variables are available to use in the action: ${variableNames}. Fill the argument variables with the variable name.`;\n instruction += ` ${variablesPrompt}`;\n }\n\n return instruction;\n}\n\nexport function buildOperatorSystemPrompt(goal: string): ChatMessage {\n return {\n role: \"system\",\n content: `You are a general-purpose agent whose job is to accomplish the user's goal across multiple model calls by running actions on the page.\n\nYou will be given a goal and a list of steps that have been taken so far. Your job is to determine if either the user's goal has been completed or if there are still steps that need to be taken.\n\n# Your current goal\n${goal}\n\n# CRITICAL: You MUST use the provided tools to take actions. Do not just describe what you want to do - actually call the appropriate tools.\n\n# Available tools and when to use them:\n- \\`act\\`: Use this to interact with the page (click, type, navigate, etc.)\n- \\`extract\\`: Use this to get information from the page\n- \\`goto\\`: Use this to navigate to a specific URL\n- \\`wait\\`: Use this to wait for a period of time\n- \\`navback\\`: Use this to go back to the previous page\n- \\`refresh\\`: Use this to refresh the current page\n- \\`close\\`: Use this ONLY when the task is complete or cannot be achieved\n- External tools: Use any additional tools (like search tools) as needed for your goal\n\n# Important guidelines\n1. ALWAYS use tools - never just provide text responses about what you plan to do\n2. Break down complex actions into individual atomic steps\n3. For \\`act\\` commands, use only one action at a time, such as:\n - Single click on a specific element\n - Type into a single input field\n - Select a single option\n4. Avoid combining multiple actions in one instruction\n5. If multiple actions are needed, they should be separate steps\n6. Only use \\`close\\` when the task is genuinely complete or impossible to achieve`,\n };\n}\n\nexport function buildCuaDefaultSystemPrompt(): string {\n return `You are a helpful assistant that can use a web browser.\\nDo not ask follow up questions, the user will trust your judgement. Today's date is ${new Date().toISOString().split(\"T\")[0]}.`;\n}\n\nexport function buildGoogleCUASystemPrompt(): ChatMessage {\n return {\n role: \"system\",\n content: `You are a general-purpose browser agent whose job is to accomplish the user's goal.\nToday's date is ${new Date().toISOString().split(\"T\")[0]}.\nYou have access to a search tool; however, in most cases you should operate within the page/url the user has provided. ONLY use the search tool if you're stuck or the task is impossible to complete within the current page.\nYou will be given a goal and a list of steps that have been taken so far. Avoid requesting the user for input as much as possible. Good luck!\n`,\n };\n}\n"]}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../lib/prompt.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChatMessage } from \"./v3/llm/LLMClient.js\";\nimport type { Variables } from \"./v3/types/public/agent.js\";\nimport { getVariablePromptEntries } from \"./v3/agent/utils/variables.js\";\n\nexport function buildUserInstructionsString(\n userProvidedInstructions?: string,\n): string {\n if (!userProvidedInstructions) {\n return \"\";\n }\n\n return `\\n\\n# Custom Instructions Provided by the User\n \nPlease keep the user's instructions in mind when performing actions. If the user's instructions are not relevant to the current task, ignore them.\n\nUser Instructions:\n${userProvidedInstructions}`;\n}\n\n// extract\nexport function buildExtractSystemPrompt(\n isUsingPrintExtractedDataTool: boolean = false,\n userProvidedInstructions?: string,\n): ChatMessage {\n const baseContent = `You are extracting content on behalf of a user.\n If a user asks you to extract a 'list' of information, or 'all' information, \n YOU MUST EXTRACT ALL OF THE INFORMATION THAT THE USER REQUESTS.\n \n You will be given:\n1. An instruction\n2. `;\n\n const contentDetail = `A list of DOM elements to extract from.`;\n\n const instructions = `\nPrint the exact text from the DOM elements with all symbols, characters, and endlines as is.\nPrint null or an empty string if no new information is found.\n `.trim();\n\n const toolInstructions = isUsingPrintExtractedDataTool\n ? `\nONLY print the content using the print_extracted_data tool provided.\nONLY print the content using the print_extracted_data tool provided.\n `.trim()\n : \"\";\n\n const additionalInstructions =\n \"If a user is attempting to extract links or URLs, you MUST respond with ONLY the IDs of the link elements. \\n\" +\n \"Do not attempt to extract links directly from the text unless absolutely necessary. \";\n\n const userInstructions = buildUserInstructionsString(\n userProvidedInstructions,\n );\n\n const content =\n `${baseContent}${contentDetail}\\n\\n${instructions}\\n${toolInstructions}${\n additionalInstructions ? `\\n\\n${additionalInstructions}` : \"\"\n }${userInstructions ? `\\n\\n${userInstructions}` : \"\"}`.replace(/\\s+/g, \" \");\n\n return {\n role: \"system\",\n content,\n };\n}\n\nexport function buildExtractUserPrompt(\n instruction: string,\n domElements: string,\n isUsingPrintExtractedDataTool: boolean = false,\n): ChatMessage {\n let content = `Instruction: ${instruction}\nDOM: ${domElements}`;\n\n if (isUsingPrintExtractedDataTool) {\n content += `\nONLY print the content using the print_extracted_data tool provided.\nONLY print the content using the print_extracted_data tool provided.`;\n }\n\n return {\n role: \"user\",\n content,\n };\n}\n\nconst metadataSystemPrompt = `You are an AI assistant tasked with evaluating the progress and completion status of an extraction task.\nAnalyze the extraction response and determine if the task is completed or if more information is needed.\nStrictly abide by the following criteria:\n1. Once the instruction has been satisfied by the current extraction response, ALWAYS set completion status to true and stop processing, regardless of remaining chunks.\n2. Only set completion status to false if BOTH of these conditions are true:\n - The instruction has not been satisfied yet\n - There are still chunks left to process (chunksTotal > chunksSeen)`;\n\nexport function buildMetadataSystemPrompt(): ChatMessage {\n return {\n role: \"system\",\n content: metadataSystemPrompt,\n };\n}\n\nexport function buildMetadataPrompt(\n instruction: string,\n extractionResponse: object,\n): ChatMessage {\n return {\n role: \"user\",\n content: `Instruction: ${instruction}\nExtracted content: ${JSON.stringify(extractionResponse, null, 2)}`,\n };\n}\n\n// observe\nexport function buildObserveSystemPrompt(\n userProvidedInstructions?: string,\n supportedActions?: string[],\n variables?: Variables,\n): ChatMessage {\n const actionsString = supportedActions?.length\n ? `\\n\\nSupported actions: ${supportedActions.join(\", \")}`\n : \"\";\n const variableEntries = getVariablePromptEntries(variables);\n const variablesString = variableEntries.length\n ? `\\n\\nAvailable variables: ${variableEntries\n .map(({ name, description }) => {\n return description ? `%${name}% (${description})` : `%${name}%`;\n })\n .join(\n \", \",\n )}. When an action needs a dynamic or sensitive value, return the matching %variableName% placeholder in the action arguments instead of a literal value`\n : \"\";\n\n const observeSystemPrompt = `\nYou are helping the user automate the browser by finding elements based on what the user wants to observe in the page.\n\nYou will be given:\n1. a instruction of elements to observe\n2. a hierarchical accessibility tree showing the semantic structure of the page. The tree is a hybrid of the DOM and the accessibility tree.\n\nReturn an array of elements that match the instruction if they exist, otherwise return an empty array.\nWhen returning elements, include the appropriate method from the supported actions list.${actionsString}${variablesString}. When choosing non-left click actions, provide right or middle as the argument.`;\n const content = observeSystemPrompt.replace(/\\s+/g, \" \");\n\n return {\n role: \"system\",\n content: [content, buildUserInstructionsString(userProvidedInstructions)]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n };\n}\n\nexport function buildObserveUserMessage(\n instruction: string,\n domElements: string,\n): ChatMessage {\n return {\n role: \"user\",\n content: `instruction: ${instruction}\nAccessibility Tree: \\n${domElements}\\n`,\n };\n}\n\nexport function buildActSystemPrompt(\n userProvidedInstructions?: string,\n): ChatMessage {\n const actSystemPrompt = `\nYou are helping the user automate the browser by finding elements based on what action the user wants to take on the page\n\nYou will be given:\n1. a user defined instruction about what action to take\n2. a hierarchical accessibility tree showing the semantic structure of the page. The tree is a hybrid of the DOM and the accessibility tree.\n\nReturn the element that matches the instruction if it exists. Otherwise, return an empty object.`;\n const content = actSystemPrompt.replace(/\\s+/g, \" \");\n\n return {\n role: \"system\",\n content: [content, buildUserInstructionsString(userProvidedInstructions)]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n };\n}\n\nfunction buildActVariablesPrompt(variables?: Variables): string {\n if (!variables || Object.keys(variables).length === 0) {\n return \"\";\n }\n\n const variableNames = Object.keys(variables)\n .map((key) => `%${key}%`)\n .join(\", \");\n\n return ` The user has provided the following variables to be used in the action: ${variableNames} \\n\n Note that these are the variable names/keys, and not the actual variable values. \\n\n To use the variables in the action, you must respond with the variable name inside the 'arguments' array. The variable name must be wrapped in percentage signs (eg, %variableNameHere%) so that it can be replaced with the actual variable value before the action is taken. \\n`;\n}\n\nexport function buildActPrompt(\n action: string,\n supportedActions: string[],\n variables?: Variables,\n): string {\n // Base instruction\n let instruction = `Find the most relevant element to perform an action on given the following action: ${action}. \n IF AND ONLY IF the action EXPLICITLY includes the word 'dropdown' and implies choosing/selecting an option from a dropdown, ignore the 'General Instructions' section, and follow the 'Dropdown Specific Instructions' section carefully.\n \n General Instructions: \n Provide an action for this element such as ${supportedActions.join(\", \")}. Remember that to users, buttons and links look the same in most cases.\n When choosing non-left click actions, provide right or middle as the argument\n If the action is completely unrelated to a potential action to be taken on the page, return an empty object. \n ONLY return one action. If multiple actions are relevant, return the most relevant one. \n If the user is asking to scroll to a position on the page, e.g., 'halfway' or 0.75, etc, you must return the argument formatted as the correct percentage, e.g., '50%' or '75%', etc.\n If the user is asking to scroll to the next chunk/previous chunk, choose the nextChunk/prevChunk method. No arguments are required here.\n If the action implies a key press, e.g., 'press enter', 'press a', 'press space', etc., always choose the press method with the appropriate key as argument — e.g. 'a', 'Enter', 'Space'. Do not choose a click action on an on-screen keyboard. Capitalize the first character like 'Enter', 'Tab', 'Escape' only for special keys. \n \n Dropdown Specific Instructions:\n For interacting with dropdowns, there are two specific cases that you need to handle. \n \n CASE 1: the element is a 'select' element. \n - choose the selectOptionFromDropdown method,\n - set the argument to the exact text of the option that should be selected,\n - set twoStep to false.\n CASE 2: the element is NOT a 'select' element:\n - do not attempt to directly choose the element from the dropdown. You will need to click to expand the dropdown first. You will achieve this by following these instructions:\n - choose the node that most closely corresponds to the given instruction EVEN if it is a 'StaticText' element, or otherwise does not appear to be interactable. \n - choose the 'click' method\n - set twoStep to true.\n `;\n\n instruction += buildActVariablesPrompt(variables);\n\n return instruction;\n}\n\nexport function buildStepTwoPrompt(\n originalUserAction: string,\n previousAction: string,\n supportedActions: string[],\n variables?: Variables,\n): string {\n // Base instruction\n let instruction = `\n The original user action was: ${originalUserAction}.\n You have just taken the following action which completed step 1 of 2: ${previousAction}.\n \n Now, you must find the most relevant element to perform an action on in order to complete step 2 of 2. \n \n General Instructions: \n Provide an action for this element such as ${supportedActions.join(\", \")}. Remember that to users, buttons and links look the same in most cases.\n If the action is completely unrelated to a potential action to be taken on the page, return an empty object. \n ONLY return one action. If multiple actions are relevant, return the most relevant one. \n If the user is asking to scroll to a position on the page, e.g., 'halfway' or 0.75, etc, you must return the argument formatted as the correct percentage, e.g., '50%' or '75%', etc.\n If the user is asking to scroll to the next chunk/previous chunk, choose the nextChunk/prevChunk method. No arguments are required here.\n If the action implies a key press, e.g., 'press enter', 'press a', 'press space', etc., always choose the press method with the appropriate key as argument — e.g. 'a', 'Enter', 'Space'. Do not choose a click action on an on-screen keyboard. Capitalize the first character like 'Enter', 'Tab', 'Escape' only for special keys. \n `;\n\n instruction += buildActVariablesPrompt(variables);\n\n return instruction;\n}\n\nexport function buildOperatorSystemPrompt(goal: string): ChatMessage {\n return {\n role: \"system\",\n content: `You are a general-purpose agent whose job is to accomplish the user's goal across multiple model calls by running actions on the page.\n\nYou will be given a goal and a list of steps that have been taken so far. Your job is to determine if either the user's goal has been completed or if there are still steps that need to be taken.\n\n# Your current goal\n${goal}\n\n# CRITICAL: You MUST use the provided tools to take actions. Do not just describe what you want to do - actually call the appropriate tools.\n\n# Available tools and when to use them:\n- \\`act\\`: Use this to interact with the page (click, type, navigate, etc.)\n- \\`extract\\`: Use this to get information from the page\n- \\`goto\\`: Use this to navigate to a specific URL\n- \\`wait\\`: Use this to wait for a period of time\n- \\`navback\\`: Use this to go back to the previous page\n- \\`refresh\\`: Use this to refresh the current page\n- \\`close\\`: Use this ONLY when the task is complete or cannot be achieved\n- External tools: Use any additional tools (like search tools) as needed for your goal\n\n# Important guidelines\n1. ALWAYS use tools - never just provide text responses about what you plan to do\n2. Break down complex actions into individual atomic steps\n3. For \\`act\\` commands, use only one action at a time, such as:\n - Single click on a specific element\n - Type into a single input field\n - Select a single option\n4. Avoid combining multiple actions in one instruction\n5. If multiple actions are needed, they should be separate steps\n6. Only use \\`close\\` when the task is genuinely complete or impossible to achieve`,\n };\n}\n\nexport function buildCuaDefaultSystemPrompt(): string {\n return `You are a helpful assistant that can use a web browser.\\nDo not ask follow up questions, the user will trust your judgement. Today's date is ${new Date().toISOString().split(\"T\")[0]}.`;\n}\n\nexport function buildGoogleCUASystemPrompt(): ChatMessage {\n return {\n role: \"system\",\n content: `You are a general-purpose browser agent whose job is to accomplish the user's goal.\nToday's date is ${new Date().toISOString().split(\"T\")[0]}.\nYou have access to a search tool; however, in most cases you should operate within the page/url the user has provided. ONLY use the search tool if you're stuck or the task is impossible to complete within the current page.\nYou will be given a goal and a list of steps that have been taken so far. Avoid requesting the user for input as much as possible. Good luck!\n`,\n };\n}\n"]}
@@ -46,6 +46,7 @@ export declare const providerEnvVarMap: Partial<Record<ModelProvider | string, s
46
46
  */
47
47
  export declare function loadApiKeyFromEnv(provider: string | undefined, logger: (logLine: LogLine) => void): string | undefined;
48
48
  export declare function trimTrailingTextNode(path: string | undefined): string | undefined;
49
+ export declare function toTitleCase(str: string): string;
49
50
  export interface JsonSchemaProperty {
50
51
  type: string;
51
52
  enum?: unknown[];
@@ -569,6 +569,9 @@ export function loadApiKeyFromEnv(provider, logger) {
569
569
  export function trimTrailingTextNode(path) {
570
570
  return path?.replace(/\/text\(\)(\[\d+\])?$/iu, "");
571
571
  }
572
+ export function toTitleCase(str) {
573
+ return str.replace(/\w\S*/g, (text) => text.charAt(0).toUpperCase() + text.substring(1));
574
+ }
572
575
  /**
573
576
  * Converts a JSON Schema object to a Zod schema
574
577
  * @param schema The JSON Schema object to convert
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { ZodSchemaValidationError } from \"./v3/types/public/sdkErrors.js\";\nimport { Schema, Type } from \"@google/genai\";\nimport { z, ZodTypeAny } from \"zod\";\nimport z3 from \"zod/v3\";\nimport { LogLine } from \"./v3/types/public/logs.js\";\nimport { ModelProvider } from \"./v3/types/public/model.js\";\nimport { ZodPathSegments } from \"./v3/types/private/internal.js\";\nimport type { StagehandZodSchema } from \"./v3/zodCompat.js\";\nimport { isZod4Schema } from \"./v3/zodCompat.js\";\n\nconst ID_PATTERN = /^\\d+-\\d+$/;\n\nconst zFactories = {\n v4: z,\n v3: z3 as unknown as typeof z,\n};\n\nexport function getZFactory(schema: StagehandZodSchema): typeof z {\n return isZod4Schema(schema) ? zFactories.v4 : zFactories.v3;\n}\n\nconst TYPE_NAME_MAP: Record<string, string> = {\n ZodString: \"string\",\n string: \"string\",\n ZodNumber: \"number\",\n number: \"number\",\n ZodBoolean: \"boolean\",\n boolean: \"boolean\",\n ZodObject: \"object\",\n object: \"object\",\n ZodArray: \"array\",\n array: \"array\",\n ZodUnion: \"union\",\n union: \"union\",\n ZodIntersection: \"intersection\",\n intersection: \"intersection\",\n ZodOptional: \"optional\",\n optional: \"optional\",\n ZodNullable: \"nullable\",\n nullable: \"nullable\",\n ZodLiteral: \"literal\",\n literal: \"literal\",\n ZodEnum: \"enum\",\n enum: \"enum\",\n ZodDefault: \"default\",\n default: \"default\",\n ZodEffects: \"effects\",\n effects: \"effects\",\n pipe: \"pipe\",\n};\n\nfunction getZ4Def(schema: StagehandZodSchema) {\n return (schema as SchemaInternals)._zod?.def as\n | Record<string, unknown>\n | undefined;\n}\n\nfunction getZ4Bag(schema: StagehandZodSchema) {\n return (schema as SchemaInternals)._zod?.bag as\n | Record<string, unknown>\n | undefined;\n}\n\nfunction getZ3Def(schema: StagehandZodSchema) {\n return (schema as SchemaInternals)._def as\n | Record<string, unknown>\n | undefined;\n}\n\nfunction getObjectShape(\n schema: StagehandZodSchema,\n): Record<string, StagehandZodSchema> | undefined {\n const z4Shape = getZ4Def(schema)?.shape as\n | Record<string, StagehandZodSchema>\n | undefined;\n if (z4Shape) {\n return z4Shape;\n }\n\n const z3Shape = getZ3Def(schema)?.shape;\n if (!z3Shape) {\n return undefined;\n }\n\n if (typeof z3Shape === \"function\") {\n return (z3Shape as () => Record<string, StagehandZodSchema>)();\n }\n\n return z3Shape as Record<string, StagehandZodSchema>;\n}\n\nfunction getArrayElement(\n schema: StagehandZodSchema,\n): StagehandZodSchema | undefined {\n return (getZ4Def(schema)?.element ?? getZ3Def(schema)?.type) as\n | StagehandZodSchema\n | undefined;\n}\n\nfunction getInnerType(\n schema: StagehandZodSchema,\n): StagehandZodSchema | undefined {\n return (getZ4Def(schema)?.innerType ?? getZ3Def(schema)?.innerType) as\n | StagehandZodSchema\n | undefined;\n}\n\nfunction getUnionOptions(\n schema: StagehandZodSchema,\n): StagehandZodSchema[] | undefined {\n const z4Options = getZ4Def(schema)?.options;\n if (Array.isArray(z4Options)) {\n return z4Options as StagehandZodSchema[];\n }\n const z3Options = getZ3Def(schema)?.options;\n return Array.isArray(z3Options)\n ? (z3Options as StagehandZodSchema[])\n : undefined;\n}\n\nfunction getIntersectionSides(schema: StagehandZodSchema): {\n left?: StagehandZodSchema;\n right?: StagehandZodSchema;\n} {\n const z4Def = getZ4Def(schema);\n if (z4Def?.left || z4Def?.right) {\n return {\n left: z4Def?.left as StagehandZodSchema | undefined,\n right: z4Def?.right as StagehandZodSchema | undefined,\n };\n }\n const z3Def = getZ3Def(schema);\n return {\n left: z3Def?.left as StagehandZodSchema | undefined,\n right: z3Def?.right as StagehandZodSchema | undefined,\n };\n}\n\nfunction getEnumValues(schema: StagehandZodSchema): string[] | undefined {\n const z4Entries = getZ4Def(schema)?.entries;\n if (z4Entries && typeof z4Entries === \"object\") {\n return Object.values(z4Entries as Record<string, string>);\n }\n const z3Values = getZ3Def(schema)?.values;\n return Array.isArray(z3Values) ? (z3Values as string[]) : undefined;\n}\n\nfunction getLiteralValues(schema: StagehandZodSchema): unknown[] {\n const z4Values = getZ4Def(schema)?.values;\n if (Array.isArray(z4Values)) {\n return z4Values as unknown[];\n }\n const value = getZ3Def(schema)?.value;\n return typeof value !== \"undefined\" ? [value] : [];\n}\n\nfunction getStringChecks(schema: StagehandZodSchema): unknown[] {\n const z4Checks = getZ4Def(schema)?.checks;\n if (Array.isArray(z4Checks)) {\n return z4Checks;\n }\n const z3Checks = getZ3Def(schema)?.checks;\n return Array.isArray(z3Checks) ? z3Checks : [];\n}\n\nfunction getStringFormat(schema: StagehandZodSchema): string | undefined {\n const bagFormat = getZ4Bag(schema)?.format;\n if (typeof bagFormat === \"string\") {\n return bagFormat;\n }\n const z4Format = getZ4Def(schema)?.format;\n if (typeof z4Format === \"string\") {\n return z4Format;\n }\n const z3Format = getZ3Def(schema)?.format;\n return typeof z3Format === \"string\" ? z3Format : undefined;\n}\n\nfunction getPipeEndpoints(schema: StagehandZodSchema): {\n in?: StagehandZodSchema;\n out?: StagehandZodSchema;\n} {\n const z4Def = getZ4Def(schema);\n if (z4Def?.in || z4Def?.out) {\n return {\n in: z4Def?.in as StagehandZodSchema | undefined,\n out: z4Def?.out as StagehandZodSchema | undefined,\n };\n }\n return {};\n}\n\nfunction getEffectsBaseSchema(\n schema: StagehandZodSchema,\n): StagehandZodSchema | undefined {\n return getZ3Def(schema)?.schema as StagehandZodSchema | undefined;\n}\n\ntype SchemaInternals = {\n _zod?: { def?: Record<string, unknown>; bag?: Record<string, unknown> };\n _def?: Record<string, unknown>;\n};\n\nexport function validateZodSchema(schema: StagehandZodSchema, data: unknown) {\n const result = schema.safeParse(data);\n\n if (result.success) {\n return true;\n }\n throw new ZodSchemaValidationError(data, result.error.format());\n}\n\n/**\n * Detects if the code is running in the Bun runtime environment.\n * @returns {boolean} True if running in Bun, false otherwise.\n */\nexport function isRunningInBun(): boolean {\n return (\n typeof process !== \"undefined\" &&\n typeof process.versions !== \"undefined\" &&\n \"bun\" in process.versions\n );\n}\n\n/*\n * Helper functions for converting between Gemini and Zod schemas\n */\nfunction decorateGeminiSchema(\n geminiSchema: Schema,\n zodSchema: z.ZodTypeAny,\n): Schema {\n if (geminiSchema.nullable === undefined) {\n geminiSchema.nullable = zodSchema.isOptional();\n }\n\n if (zodSchema.description) {\n geminiSchema.description = zodSchema.description;\n }\n\n return geminiSchema;\n}\n\nexport function toGeminiSchema(zodSchema: StagehandZodSchema): Schema {\n const normalizedSchema = zodSchema as z.ZodTypeAny;\n const zodType = getZodType(zodSchema);\n switch (zodType) {\n case \"array\": {\n const element = getArrayElement(zodSchema) ?? z.any();\n return decorateGeminiSchema(\n {\n type: Type.ARRAY,\n items: toGeminiSchema(element),\n },\n normalizedSchema,\n );\n }\n case \"object\": {\n const properties: Record<string, Schema> = {};\n const required: string[] = [];\n\n const shape = getObjectShape(zodSchema);\n if (shape) {\n Object.entries(shape).forEach(\n ([key, value]: [string, StagehandZodSchema]) => {\n properties[key] = toGeminiSchema(value);\n if (getZodType(value) !== \"optional\") {\n required.push(key);\n }\n },\n );\n }\n\n return decorateGeminiSchema(\n {\n type: Type.OBJECT,\n properties,\n required: required.length > 0 ? required : undefined,\n },\n normalizedSchema,\n );\n }\n case \"string\":\n return decorateGeminiSchema(\n {\n type: Type.STRING,\n },\n normalizedSchema,\n );\n case \"number\":\n return decorateGeminiSchema(\n {\n type: Type.NUMBER,\n },\n normalizedSchema,\n );\n case \"boolean\":\n return decorateGeminiSchema(\n {\n type: Type.BOOLEAN,\n },\n normalizedSchema,\n );\n case \"enum\": {\n const values = getEnumValues(zodSchema);\n return decorateGeminiSchema(\n {\n type: Type.STRING,\n enum: values,\n },\n normalizedSchema,\n );\n }\n case \"default\":\n case \"nullable\":\n case \"optional\": {\n const innerType = getInnerType(zodSchema) ?? z.any();\n const innerSchema = toGeminiSchema(innerType);\n return decorateGeminiSchema(\n {\n ...innerSchema,\n nullable: true,\n },\n normalizedSchema,\n );\n }\n case \"literal\": {\n const values = getLiteralValues(zodSchema);\n return decorateGeminiSchema(\n {\n type: Type.STRING,\n enum: values as string[],\n },\n normalizedSchema,\n );\n }\n case \"pipe\": {\n const endpoints = getPipeEndpoints(zodSchema);\n if (endpoints.in) {\n return toGeminiSchema(endpoints.in);\n }\n return decorateGeminiSchema(\n {\n type: Type.STRING,\n },\n normalizedSchema,\n );\n }\n // Standalone transforms and any unknown types fall through to default\n default:\n return decorateGeminiSchema(\n {\n type: Type.STRING,\n },\n normalizedSchema,\n );\n }\n}\n\n// Helper function to check the type of Zod schema\nexport function getZodType(schema: StagehandZodSchema): string {\n const schemaWithDef = schema as SchemaInternals & {\n _zod?: { def?: { type?: string } };\n };\n const rawType =\n (schemaWithDef._zod?.def?.type as string | undefined) ??\n (schemaWithDef._def?.typeName as string | undefined) ??\n (schemaWithDef._def?.type as string | undefined);\n\n if (!rawType) {\n return \"unknown\";\n }\n\n return TYPE_NAME_MAP[rawType] ?? rawType;\n}\n\n/**\n * Recursively traverses a given Zod schema, scanning for any fields of type `z.string().url()`.\n * For each such field, it replaces the `z.string().url()` with `z.number()`.\n *\n * This function is used internally by higher-level utilities (e.g., transforming entire object schemas)\n * and handles nested objects, arrays, unions, intersections, optionals.\n *\n * @param schema - The Zod schema to transform.\n * @param currentPath - An array of string/number keys representing the current schema path (used internally for recursion).\n * @returns A two-element tuple:\n * 1. The updated Zod schema, with any `.url()` fields replaced by `z.number()`.\n * 2. An array of {@link ZodPathSegments} objects representing each replaced field, including the path segments.\n */\nexport function transformSchema(\n schema: StagehandZodSchema,\n currentPath: Array<string | number>,\n): [StagehandZodSchema, ZodPathSegments[]] {\n if (isKind(schema, \"string\")) {\n const checks = getStringChecks(schema);\n const format = getStringFormat(schema);\n const hasUrlCheck =\n checks.some((check) => {\n const candidate = check as {\n kind?: string;\n format?: string;\n _zod?: { def?: { check?: string; format?: string } };\n };\n return (\n candidate.kind === \"url\" ||\n candidate.format === \"url\" ||\n candidate._zod?.def?.check === \"url\" ||\n candidate._zod?.def?.format === \"url\"\n );\n }) || format === \"url\";\n\n if (hasUrlCheck) {\n return [makeIdStringSchema(schema), [{ segments: [] }]];\n }\n return [schema, []];\n }\n\n if (isKind(schema, \"object\")) {\n const shape = getObjectShape(schema);\n if (!shape) {\n return [schema, []];\n }\n const newShape: Record<string, StagehandZodSchema> = {};\n const urlPaths: ZodPathSegments[] = [];\n let changed = false;\n\n for (const key of Object.keys(shape)) {\n const child = shape[key];\n const [transformedChild, childPaths] = transformSchema(child, [\n ...currentPath,\n key,\n ]);\n if (transformedChild !== child) {\n changed = true;\n }\n newShape[key] = transformedChild;\n childPaths.forEach((cp) => {\n urlPaths.push({ segments: [key, ...cp.segments] });\n });\n }\n\n if (changed) {\n const factory = getZFactory(schema);\n return [\n factory.object(newShape as Record<string, z.ZodTypeAny>),\n urlPaths,\n ];\n }\n return [schema, urlPaths];\n }\n\n if (isKind(schema, \"array\")) {\n const itemType = getArrayElement(schema);\n if (!itemType) {\n return [schema, []];\n }\n const [transformedItem, childPaths] = transformSchema(itemType, [\n ...currentPath,\n \"*\",\n ]);\n const arrayPaths: ZodPathSegments[] = childPaths.map((cp) => ({\n segments: [\"*\", ...cp.segments],\n }));\n if (transformedItem !== itemType) {\n const factory = getZFactory(schema);\n return [\n factory.array(transformedItem as unknown as z.ZodTypeAny),\n arrayPaths,\n ];\n }\n return [schema, arrayPaths];\n }\n\n if (isKind(schema, \"union\")) {\n const unionOptions = getUnionOptions(schema);\n if (!unionOptions || unionOptions.length === 0) {\n return [schema, []];\n }\n const newOptions: StagehandZodSchema[] = [];\n let changed = false;\n let allPaths: ZodPathSegments[] = [];\n\n unionOptions.forEach((option, idx) => {\n const [newOption, childPaths] = transformSchema(option, [\n ...currentPath,\n `union_${idx}`,\n ]);\n if (newOption !== option) {\n changed = true;\n }\n newOptions.push(newOption);\n allPaths = [...allPaths, ...childPaths];\n });\n\n if (changed) {\n const factory = getZFactory(schema);\n return [\n factory.union(\n newOptions as unknown as [\n z.ZodTypeAny,\n z.ZodTypeAny,\n ...z.ZodTypeAny[],\n ],\n ),\n allPaths,\n ];\n }\n return [schema, allPaths];\n }\n\n if (isKind(schema, \"intersection\")) {\n const { left, right } = getIntersectionSides(schema);\n if (!left || !right) {\n return [schema, []];\n }\n const [newLeft, leftPaths] = transformSchema(left, [\n ...currentPath,\n \"intersection_left\",\n ]);\n const [newRight, rightPaths] = transformSchema(right, [\n ...currentPath,\n \"intersection_right\",\n ]);\n const changed = newLeft !== left || newRight !== right;\n const allPaths = [...leftPaths, ...rightPaths];\n if (changed) {\n const factory = getZFactory(schema);\n return [\n factory.intersection(\n newLeft as unknown as z.ZodTypeAny,\n newRight as unknown as z.ZodTypeAny,\n ),\n allPaths,\n ];\n }\n return [schema, allPaths];\n }\n\n if (isKind(schema, \"optional\")) {\n const innerType = getInnerType(schema);\n if (!innerType) {\n return [schema, []];\n }\n const [inner, innerPaths] = transformSchema(innerType, currentPath);\n if (inner !== innerType) {\n return [\n (inner as z.ZodTypeAny).optional() as unknown as StagehandZodSchema,\n innerPaths,\n ];\n }\n return [schema, innerPaths];\n }\n\n if (isKind(schema, \"nullable\")) {\n const innerType = getInnerType(schema);\n if (!innerType) {\n return [schema, []];\n }\n const [inner, innerPaths] = transformSchema(innerType, currentPath);\n if (inner !== innerType) {\n return [\n (inner as z.ZodTypeAny).nullable() as unknown as StagehandZodSchema,\n innerPaths,\n ];\n }\n return [schema, innerPaths];\n }\n\n if (isKind(schema, \"pipe\") && isZod4Schema(schema)) {\n const { in: inSchema, out: outSchema } = getPipeEndpoints(schema);\n if (!inSchema || !outSchema) {\n return [schema, []];\n }\n\n const [newIn, inPaths] = transformSchema(inSchema, currentPath);\n const [newOut, outPaths] = transformSchema(outSchema, currentPath);\n const allPaths = [...inPaths, ...outPaths];\n\n if (newIn !== inSchema || newOut !== outSchema) {\n const result = z.pipe(\n newIn as unknown as z.ZodTypeAny,\n newOut as unknown as z.ZodTypeAny,\n ) as StagehandZodSchema;\n return [result, allPaths];\n }\n return [schema, allPaths];\n }\n\n if (isKind(schema, \"effects\")) {\n const baseSchema = getEffectsBaseSchema(schema);\n if (!baseSchema) {\n return [schema, []];\n }\n return transformSchema(baseSchema, currentPath);\n }\n\n return [schema, []];\n}\n\n/**\n * Once we get the final extracted object that has numeric IDs in place of URLs,\n * use `injectUrls` to walk the object and replace numeric IDs\n * with the real URL strings from idToUrlMapping. The `path` may include `*`\n * for array indices (indicating \"all items in the array\").\n */\nexport function injectUrls(\n obj: unknown,\n path: Array<string | number>,\n idToUrlMapping: Record<string, string>,\n): void {\n if (path.length === 0) return;\n const toId = (value: unknown): string | undefined => {\n if (typeof value === \"number\") {\n return String(value);\n }\n if (typeof value === \"string\" && ID_PATTERN.test(value)) {\n return value;\n }\n return undefined;\n };\n const [key, ...rest] = path;\n\n if (key === \"*\") {\n if (Array.isArray(obj)) {\n if (rest.length === 0) {\n for (let i = 0; i < obj.length; i += 1) {\n const id = toId(obj[i]);\n if (id !== undefined) {\n obj[i] = idToUrlMapping[id] ?? \"\";\n }\n }\n } else {\n for (const item of obj) injectUrls(item, rest, idToUrlMapping);\n }\n }\n return;\n }\n\n if (obj && typeof obj === \"object\") {\n const record = obj as Record<string | number, unknown>;\n if (path.length === 1) {\n const fieldValue = record[key];\n const id = toId(fieldValue);\n if (id !== undefined) {\n record[key] = idToUrlMapping[id] ?? \"\";\n }\n } else {\n injectUrls(record[key], rest, idToUrlMapping);\n }\n }\n}\n\n// Helper to check if a schema is of a specific type\nfunction isKind(s: StagehandZodSchema, kind: string): boolean {\n try {\n return getZodType(s) === kind;\n } catch {\n return false;\n }\n}\n\nfunction makeIdStringSchema(orig: StagehandZodSchema): StagehandZodSchema {\n const userDesc =\n (orig as unknown as { description?: string }).description ?? \"\";\n\n const base =\n \"This field must be the element-ID in the form 'frameId-backendId' \" +\n '(e.g. \"0-432\").';\n const composed =\n userDesc.trim().length > 0\n ? `${base} that follows this user-defined description: ${userDesc}`\n : base;\n\n const factory = getZFactory(orig);\n return factory.string().regex(ID_PATTERN).describe(composed);\n}\n\n/**\n * Mapping from LLM provider names to their corresponding environment variable names for API keys.\n */\nexport const providerEnvVarMap: Partial<\n Record<ModelProvider | string, string | Array<string>>\n> = {\n openai: \"OPENAI_API_KEY\",\n anthropic: \"ANTHROPIC_API_KEY\",\n google: [\"GEMINI_API_KEY\", \"GOOGLE_GENERATIVE_AI_API_KEY\", \"GOOGLE_API_KEY\"],\n vertex: \"GOOGLE_VERTEX_AI_API_KEY\",\n groq: \"GROQ_API_KEY\",\n cerebras: \"CEREBRAS_API_KEY\",\n togetherai: \"TOGETHER_AI_API_KEY\",\n mistral: \"MISTRAL_API_KEY\",\n deepseek: \"DEEPSEEK_API_KEY\",\n perplexity: \"PERPLEXITY_API_KEY\",\n azure: \"AZURE_API_KEY\",\n xai: \"XAI_API_KEY\",\n google_legacy: \"GOOGLE_API_KEY\",\n};\n\nconst providersWithoutApiKey = new Set([\"bedrock\", \"ollama\"]);\n\n/**\n * Loads an API key for a provider, checking environment variables.\n * @param provider The name of the provider (e.g., 'openai', 'anthropic')\n * @param logger Optional logger for info/error messages\n * @returns The API key if found, undefined otherwise\n */\nexport function loadApiKeyFromEnv(\n provider: string | undefined,\n logger: (logLine: LogLine) => void,\n): string | undefined {\n if (!provider) {\n return undefined;\n }\n\n const envVarName = providerEnvVarMap[provider];\n if (!envVarName) {\n if (!providersWithoutApiKey.has(provider)) {\n logger({\n category: \"init\",\n message: `No known environment variable for provider '${provider}'`,\n level: 0,\n });\n }\n return undefined;\n }\n\n const apiKeyFromEnv = Array.isArray(envVarName)\n ? envVarName\n .map((name) => process.env[name])\n .find((key) => key && key.length > 0)\n : process.env[envVarName as string];\n if (typeof apiKeyFromEnv === \"string\" && apiKeyFromEnv.length > 0) {\n return apiKeyFromEnv;\n }\n\n // Don't log - this is expected when llmClient is provided or API key will be set later\n return undefined;\n}\n\nexport function trimTrailingTextNode(\n path: string | undefined,\n): string | undefined {\n return path?.replace(/\\/text\\(\\)(\\[\\d+\\])?$/iu, \"\");\n}\n\n// TODO: move to separate types file\nexport interface JsonSchemaProperty {\n type: string;\n enum?: unknown[];\n items?: JsonSchemaProperty;\n properties?: Record<string, JsonSchemaProperty>;\n required?: string[];\n minimum?: number;\n maximum?: number;\n description?: string;\n format?: string; // JSON Schema format field (e.g., \"uri\", \"url\", \"email\", etc.)\n}\nexport interface JsonSchema extends JsonSchemaProperty {\n type: string;\n}\n\n/**\n * Converts a JSON Schema object to a Zod schema\n * @param schema The JSON Schema object to convert\n * @returns A Zod schema equivalent to the input JSON Schema\n */\nexport function jsonSchemaToZod(schema: JsonSchema): ZodTypeAny {\n switch (schema.type) {\n case \"object\":\n if (schema.properties) {\n const shape: Record<string, ZodTypeAny> = {};\n for (const key in schema.properties) {\n shape[key] = jsonSchemaToZod(schema.properties[key]);\n }\n let zodObject = z.object(shape);\n if (schema.required && Array.isArray(schema.required)) {\n const requiredFields = schema.required.reduce<Record<string, true>>(\n (acc, field) => ({ ...acc, [field]: true }),\n {},\n );\n zodObject = zodObject.partial().required(requiredFields);\n }\n if (schema.description) {\n zodObject = zodObject.describe(schema.description);\n }\n return zodObject;\n } else {\n return z.object({});\n }\n case \"array\":\n if (schema.items) {\n let zodArray = z.array(jsonSchemaToZod(schema.items));\n if (schema.description) {\n zodArray = zodArray.describe(schema.description);\n }\n return zodArray;\n } else {\n return z.array(z.any());\n }\n case \"string\": {\n if (schema.enum) {\n return z.string().refine((val) => schema.enum!.includes(val));\n }\n let zodString = z.string();\n\n // Handle JSON Schema format field\n if (schema.format === \"uri\" || schema.format === \"url\") {\n zodString = zodString.url();\n } else if (schema.format === \"email\") {\n zodString = zodString.email();\n } else if (schema.format === \"uuid\") {\n zodString = zodString.uuid();\n }\n // Add more format handlers as needed\n\n if (schema.description) {\n zodString = zodString.describe(schema.description);\n }\n return zodString;\n }\n case \"number\": {\n let zodNumber = z.number();\n if (schema.minimum !== undefined) {\n zodNumber = zodNumber.min(schema.minimum);\n }\n if (schema.maximum !== undefined) {\n zodNumber = zodNumber.max(schema.maximum);\n }\n if (schema.description) {\n zodNumber = zodNumber.describe(schema.description);\n }\n return zodNumber;\n }\n case \"boolean\": {\n let zodBoolean = z.boolean();\n if (schema.description) {\n zodBoolean = zodBoolean.describe(schema.description);\n }\n return zodBoolean;\n }\n default:\n return z.any();\n }\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { ZodSchemaValidationError } from \"./v3/types/public/sdkErrors.js\";\nimport { Schema, Type } from \"@google/genai\";\nimport { z, ZodTypeAny } from \"zod\";\nimport z3 from \"zod/v3\";\nimport { LogLine } from \"./v3/types/public/logs.js\";\nimport { ModelProvider } from \"./v3/types/public/model.js\";\nimport { ZodPathSegments } from \"./v3/types/private/internal.js\";\nimport type { StagehandZodSchema } from \"./v3/zodCompat.js\";\nimport { isZod4Schema } from \"./v3/zodCompat.js\";\n\nconst ID_PATTERN = /^\\d+-\\d+$/;\n\nconst zFactories = {\n v4: z,\n v3: z3 as unknown as typeof z,\n};\n\nexport function getZFactory(schema: StagehandZodSchema): typeof z {\n return isZod4Schema(schema) ? zFactories.v4 : zFactories.v3;\n}\n\nconst TYPE_NAME_MAP: Record<string, string> = {\n ZodString: \"string\",\n string: \"string\",\n ZodNumber: \"number\",\n number: \"number\",\n ZodBoolean: \"boolean\",\n boolean: \"boolean\",\n ZodObject: \"object\",\n object: \"object\",\n ZodArray: \"array\",\n array: \"array\",\n ZodUnion: \"union\",\n union: \"union\",\n ZodIntersection: \"intersection\",\n intersection: \"intersection\",\n ZodOptional: \"optional\",\n optional: \"optional\",\n ZodNullable: \"nullable\",\n nullable: \"nullable\",\n ZodLiteral: \"literal\",\n literal: \"literal\",\n ZodEnum: \"enum\",\n enum: \"enum\",\n ZodDefault: \"default\",\n default: \"default\",\n ZodEffects: \"effects\",\n effects: \"effects\",\n pipe: \"pipe\",\n};\n\nfunction getZ4Def(schema: StagehandZodSchema) {\n return (schema as SchemaInternals)._zod?.def as\n | Record<string, unknown>\n | undefined;\n}\n\nfunction getZ4Bag(schema: StagehandZodSchema) {\n return (schema as SchemaInternals)._zod?.bag as\n | Record<string, unknown>\n | undefined;\n}\n\nfunction getZ3Def(schema: StagehandZodSchema) {\n return (schema as SchemaInternals)._def as\n | Record<string, unknown>\n | undefined;\n}\n\nfunction getObjectShape(\n schema: StagehandZodSchema,\n): Record<string, StagehandZodSchema> | undefined {\n const z4Shape = getZ4Def(schema)?.shape as\n | Record<string, StagehandZodSchema>\n | undefined;\n if (z4Shape) {\n return z4Shape;\n }\n\n const z3Shape = getZ3Def(schema)?.shape;\n if (!z3Shape) {\n return undefined;\n }\n\n if (typeof z3Shape === \"function\") {\n return (z3Shape as () => Record<string, StagehandZodSchema>)();\n }\n\n return z3Shape as Record<string, StagehandZodSchema>;\n}\n\nfunction getArrayElement(\n schema: StagehandZodSchema,\n): StagehandZodSchema | undefined {\n return (getZ4Def(schema)?.element ?? getZ3Def(schema)?.type) as\n | StagehandZodSchema\n | undefined;\n}\n\nfunction getInnerType(\n schema: StagehandZodSchema,\n): StagehandZodSchema | undefined {\n return (getZ4Def(schema)?.innerType ?? getZ3Def(schema)?.innerType) as\n | StagehandZodSchema\n | undefined;\n}\n\nfunction getUnionOptions(\n schema: StagehandZodSchema,\n): StagehandZodSchema[] | undefined {\n const z4Options = getZ4Def(schema)?.options;\n if (Array.isArray(z4Options)) {\n return z4Options as StagehandZodSchema[];\n }\n const z3Options = getZ3Def(schema)?.options;\n return Array.isArray(z3Options)\n ? (z3Options as StagehandZodSchema[])\n : undefined;\n}\n\nfunction getIntersectionSides(schema: StagehandZodSchema): {\n left?: StagehandZodSchema;\n right?: StagehandZodSchema;\n} {\n const z4Def = getZ4Def(schema);\n if (z4Def?.left || z4Def?.right) {\n return {\n left: z4Def?.left as StagehandZodSchema | undefined,\n right: z4Def?.right as StagehandZodSchema | undefined,\n };\n }\n const z3Def = getZ3Def(schema);\n return {\n left: z3Def?.left as StagehandZodSchema | undefined,\n right: z3Def?.right as StagehandZodSchema | undefined,\n };\n}\n\nfunction getEnumValues(schema: StagehandZodSchema): string[] | undefined {\n const z4Entries = getZ4Def(schema)?.entries;\n if (z4Entries && typeof z4Entries === \"object\") {\n return Object.values(z4Entries as Record<string, string>);\n }\n const z3Values = getZ3Def(schema)?.values;\n return Array.isArray(z3Values) ? (z3Values as string[]) : undefined;\n}\n\nfunction getLiteralValues(schema: StagehandZodSchema): unknown[] {\n const z4Values = getZ4Def(schema)?.values;\n if (Array.isArray(z4Values)) {\n return z4Values as unknown[];\n }\n const value = getZ3Def(schema)?.value;\n return typeof value !== \"undefined\" ? [value] : [];\n}\n\nfunction getStringChecks(schema: StagehandZodSchema): unknown[] {\n const z4Checks = getZ4Def(schema)?.checks;\n if (Array.isArray(z4Checks)) {\n return z4Checks;\n }\n const z3Checks = getZ3Def(schema)?.checks;\n return Array.isArray(z3Checks) ? z3Checks : [];\n}\n\nfunction getStringFormat(schema: StagehandZodSchema): string | undefined {\n const bagFormat = getZ4Bag(schema)?.format;\n if (typeof bagFormat === \"string\") {\n return bagFormat;\n }\n const z4Format = getZ4Def(schema)?.format;\n if (typeof z4Format === \"string\") {\n return z4Format;\n }\n const z3Format = getZ3Def(schema)?.format;\n return typeof z3Format === \"string\" ? z3Format : undefined;\n}\n\nfunction getPipeEndpoints(schema: StagehandZodSchema): {\n in?: StagehandZodSchema;\n out?: StagehandZodSchema;\n} {\n const z4Def = getZ4Def(schema);\n if (z4Def?.in || z4Def?.out) {\n return {\n in: z4Def?.in as StagehandZodSchema | undefined,\n out: z4Def?.out as StagehandZodSchema | undefined,\n };\n }\n return {};\n}\n\nfunction getEffectsBaseSchema(\n schema: StagehandZodSchema,\n): StagehandZodSchema | undefined {\n return getZ3Def(schema)?.schema as StagehandZodSchema | undefined;\n}\n\ntype SchemaInternals = {\n _zod?: { def?: Record<string, unknown>; bag?: Record<string, unknown> };\n _def?: Record<string, unknown>;\n};\n\nexport function validateZodSchema(schema: StagehandZodSchema, data: unknown) {\n const result = schema.safeParse(data);\n\n if (result.success) {\n return true;\n }\n throw new ZodSchemaValidationError(data, result.error.format());\n}\n\n/**\n * Detects if the code is running in the Bun runtime environment.\n * @returns {boolean} True if running in Bun, false otherwise.\n */\nexport function isRunningInBun(): boolean {\n return (\n typeof process !== \"undefined\" &&\n typeof process.versions !== \"undefined\" &&\n \"bun\" in process.versions\n );\n}\n\n/*\n * Helper functions for converting between Gemini and Zod schemas\n */\nfunction decorateGeminiSchema(\n geminiSchema: Schema,\n zodSchema: z.ZodTypeAny,\n): Schema {\n if (geminiSchema.nullable === undefined) {\n geminiSchema.nullable = zodSchema.isOptional();\n }\n\n if (zodSchema.description) {\n geminiSchema.description = zodSchema.description;\n }\n\n return geminiSchema;\n}\n\nexport function toGeminiSchema(zodSchema: StagehandZodSchema): Schema {\n const normalizedSchema = zodSchema as z.ZodTypeAny;\n const zodType = getZodType(zodSchema);\n switch (zodType) {\n case \"array\": {\n const element = getArrayElement(zodSchema) ?? z.any();\n return decorateGeminiSchema(\n {\n type: Type.ARRAY,\n items: toGeminiSchema(element),\n },\n normalizedSchema,\n );\n }\n case \"object\": {\n const properties: Record<string, Schema> = {};\n const required: string[] = [];\n\n const shape = getObjectShape(zodSchema);\n if (shape) {\n Object.entries(shape).forEach(\n ([key, value]: [string, StagehandZodSchema]) => {\n properties[key] = toGeminiSchema(value);\n if (getZodType(value) !== \"optional\") {\n required.push(key);\n }\n },\n );\n }\n\n return decorateGeminiSchema(\n {\n type: Type.OBJECT,\n properties,\n required: required.length > 0 ? required : undefined,\n },\n normalizedSchema,\n );\n }\n case \"string\":\n return decorateGeminiSchema(\n {\n type: Type.STRING,\n },\n normalizedSchema,\n );\n case \"number\":\n return decorateGeminiSchema(\n {\n type: Type.NUMBER,\n },\n normalizedSchema,\n );\n case \"boolean\":\n return decorateGeminiSchema(\n {\n type: Type.BOOLEAN,\n },\n normalizedSchema,\n );\n case \"enum\": {\n const values = getEnumValues(zodSchema);\n return decorateGeminiSchema(\n {\n type: Type.STRING,\n enum: values,\n },\n normalizedSchema,\n );\n }\n case \"default\":\n case \"nullable\":\n case \"optional\": {\n const innerType = getInnerType(zodSchema) ?? z.any();\n const innerSchema = toGeminiSchema(innerType);\n return decorateGeminiSchema(\n {\n ...innerSchema,\n nullable: true,\n },\n normalizedSchema,\n );\n }\n case \"literal\": {\n const values = getLiteralValues(zodSchema);\n return decorateGeminiSchema(\n {\n type: Type.STRING,\n enum: values as string[],\n },\n normalizedSchema,\n );\n }\n case \"pipe\": {\n const endpoints = getPipeEndpoints(zodSchema);\n if (endpoints.in) {\n return toGeminiSchema(endpoints.in);\n }\n return decorateGeminiSchema(\n {\n type: Type.STRING,\n },\n normalizedSchema,\n );\n }\n // Standalone transforms and any unknown types fall through to default\n default:\n return decorateGeminiSchema(\n {\n type: Type.STRING,\n },\n normalizedSchema,\n );\n }\n}\n\n// Helper function to check the type of Zod schema\nexport function getZodType(schema: StagehandZodSchema): string {\n const schemaWithDef = schema as SchemaInternals & {\n _zod?: { def?: { type?: string } };\n };\n const rawType =\n (schemaWithDef._zod?.def?.type as string | undefined) ??\n (schemaWithDef._def?.typeName as string | undefined) ??\n (schemaWithDef._def?.type as string | undefined);\n\n if (!rawType) {\n return \"unknown\";\n }\n\n return TYPE_NAME_MAP[rawType] ?? rawType;\n}\n\n/**\n * Recursively traverses a given Zod schema, scanning for any fields of type `z.string().url()`.\n * For each such field, it replaces the `z.string().url()` with `z.number()`.\n *\n * This function is used internally by higher-level utilities (e.g., transforming entire object schemas)\n * and handles nested objects, arrays, unions, intersections, optionals.\n *\n * @param schema - The Zod schema to transform.\n * @param currentPath - An array of string/number keys representing the current schema path (used internally for recursion).\n * @returns A two-element tuple:\n * 1. The updated Zod schema, with any `.url()` fields replaced by `z.number()`.\n * 2. An array of {@link ZodPathSegments} objects representing each replaced field, including the path segments.\n */\nexport function transformSchema(\n schema: StagehandZodSchema,\n currentPath: Array<string | number>,\n): [StagehandZodSchema, ZodPathSegments[]] {\n if (isKind(schema, \"string\")) {\n const checks = getStringChecks(schema);\n const format = getStringFormat(schema);\n const hasUrlCheck =\n checks.some((check) => {\n const candidate = check as {\n kind?: string;\n format?: string;\n _zod?: { def?: { check?: string; format?: string } };\n };\n return (\n candidate.kind === \"url\" ||\n candidate.format === \"url\" ||\n candidate._zod?.def?.check === \"url\" ||\n candidate._zod?.def?.format === \"url\"\n );\n }) || format === \"url\";\n\n if (hasUrlCheck) {\n return [makeIdStringSchema(schema), [{ segments: [] }]];\n }\n return [schema, []];\n }\n\n if (isKind(schema, \"object\")) {\n const shape = getObjectShape(schema);\n if (!shape) {\n return [schema, []];\n }\n const newShape: Record<string, StagehandZodSchema> = {};\n const urlPaths: ZodPathSegments[] = [];\n let changed = false;\n\n for (const key of Object.keys(shape)) {\n const child = shape[key];\n const [transformedChild, childPaths] = transformSchema(child, [\n ...currentPath,\n key,\n ]);\n if (transformedChild !== child) {\n changed = true;\n }\n newShape[key] = transformedChild;\n childPaths.forEach((cp) => {\n urlPaths.push({ segments: [key, ...cp.segments] });\n });\n }\n\n if (changed) {\n const factory = getZFactory(schema);\n return [\n factory.object(newShape as Record<string, z.ZodTypeAny>),\n urlPaths,\n ];\n }\n return [schema, urlPaths];\n }\n\n if (isKind(schema, \"array\")) {\n const itemType = getArrayElement(schema);\n if (!itemType) {\n return [schema, []];\n }\n const [transformedItem, childPaths] = transformSchema(itemType, [\n ...currentPath,\n \"*\",\n ]);\n const arrayPaths: ZodPathSegments[] = childPaths.map((cp) => ({\n segments: [\"*\", ...cp.segments],\n }));\n if (transformedItem !== itemType) {\n const factory = getZFactory(schema);\n return [\n factory.array(transformedItem as unknown as z.ZodTypeAny),\n arrayPaths,\n ];\n }\n return [schema, arrayPaths];\n }\n\n if (isKind(schema, \"union\")) {\n const unionOptions = getUnionOptions(schema);\n if (!unionOptions || unionOptions.length === 0) {\n return [schema, []];\n }\n const newOptions: StagehandZodSchema[] = [];\n let changed = false;\n let allPaths: ZodPathSegments[] = [];\n\n unionOptions.forEach((option, idx) => {\n const [newOption, childPaths] = transformSchema(option, [\n ...currentPath,\n `union_${idx}`,\n ]);\n if (newOption !== option) {\n changed = true;\n }\n newOptions.push(newOption);\n allPaths = [...allPaths, ...childPaths];\n });\n\n if (changed) {\n const factory = getZFactory(schema);\n return [\n factory.union(\n newOptions as unknown as [\n z.ZodTypeAny,\n z.ZodTypeAny,\n ...z.ZodTypeAny[],\n ],\n ),\n allPaths,\n ];\n }\n return [schema, allPaths];\n }\n\n if (isKind(schema, \"intersection\")) {\n const { left, right } = getIntersectionSides(schema);\n if (!left || !right) {\n return [schema, []];\n }\n const [newLeft, leftPaths] = transformSchema(left, [\n ...currentPath,\n \"intersection_left\",\n ]);\n const [newRight, rightPaths] = transformSchema(right, [\n ...currentPath,\n \"intersection_right\",\n ]);\n const changed = newLeft !== left || newRight !== right;\n const allPaths = [...leftPaths, ...rightPaths];\n if (changed) {\n const factory = getZFactory(schema);\n return [\n factory.intersection(\n newLeft as unknown as z.ZodTypeAny,\n newRight as unknown as z.ZodTypeAny,\n ),\n allPaths,\n ];\n }\n return [schema, allPaths];\n }\n\n if (isKind(schema, \"optional\")) {\n const innerType = getInnerType(schema);\n if (!innerType) {\n return [schema, []];\n }\n const [inner, innerPaths] = transformSchema(innerType, currentPath);\n if (inner !== innerType) {\n return [\n (inner as z.ZodTypeAny).optional() as unknown as StagehandZodSchema,\n innerPaths,\n ];\n }\n return [schema, innerPaths];\n }\n\n if (isKind(schema, \"nullable\")) {\n const innerType = getInnerType(schema);\n if (!innerType) {\n return [schema, []];\n }\n const [inner, innerPaths] = transformSchema(innerType, currentPath);\n if (inner !== innerType) {\n return [\n (inner as z.ZodTypeAny).nullable() as unknown as StagehandZodSchema,\n innerPaths,\n ];\n }\n return [schema, innerPaths];\n }\n\n if (isKind(schema, \"pipe\") && isZod4Schema(schema)) {\n const { in: inSchema, out: outSchema } = getPipeEndpoints(schema);\n if (!inSchema || !outSchema) {\n return [schema, []];\n }\n\n const [newIn, inPaths] = transformSchema(inSchema, currentPath);\n const [newOut, outPaths] = transformSchema(outSchema, currentPath);\n const allPaths = [...inPaths, ...outPaths];\n\n if (newIn !== inSchema || newOut !== outSchema) {\n const result = z.pipe(\n newIn as unknown as z.ZodTypeAny,\n newOut as unknown as z.ZodTypeAny,\n ) as StagehandZodSchema;\n return [result, allPaths];\n }\n return [schema, allPaths];\n }\n\n if (isKind(schema, \"effects\")) {\n const baseSchema = getEffectsBaseSchema(schema);\n if (!baseSchema) {\n return [schema, []];\n }\n return transformSchema(baseSchema, currentPath);\n }\n\n return [schema, []];\n}\n\n/**\n * Once we get the final extracted object that has numeric IDs in place of URLs,\n * use `injectUrls` to walk the object and replace numeric IDs\n * with the real URL strings from idToUrlMapping. The `path` may include `*`\n * for array indices (indicating \"all items in the array\").\n */\nexport function injectUrls(\n obj: unknown,\n path: Array<string | number>,\n idToUrlMapping: Record<string, string>,\n): void {\n if (path.length === 0) return;\n const toId = (value: unknown): string | undefined => {\n if (typeof value === \"number\") {\n return String(value);\n }\n if (typeof value === \"string\" && ID_PATTERN.test(value)) {\n return value;\n }\n return undefined;\n };\n const [key, ...rest] = path;\n\n if (key === \"*\") {\n if (Array.isArray(obj)) {\n if (rest.length === 0) {\n for (let i = 0; i < obj.length; i += 1) {\n const id = toId(obj[i]);\n if (id !== undefined) {\n obj[i] = idToUrlMapping[id] ?? \"\";\n }\n }\n } else {\n for (const item of obj) injectUrls(item, rest, idToUrlMapping);\n }\n }\n return;\n }\n\n if (obj && typeof obj === \"object\") {\n const record = obj as Record<string | number, unknown>;\n if (path.length === 1) {\n const fieldValue = record[key];\n const id = toId(fieldValue);\n if (id !== undefined) {\n record[key] = idToUrlMapping[id] ?? \"\";\n }\n } else {\n injectUrls(record[key], rest, idToUrlMapping);\n }\n }\n}\n\n// Helper to check if a schema is of a specific type\nfunction isKind(s: StagehandZodSchema, kind: string): boolean {\n try {\n return getZodType(s) === kind;\n } catch {\n return false;\n }\n}\n\nfunction makeIdStringSchema(orig: StagehandZodSchema): StagehandZodSchema {\n const userDesc =\n (orig as unknown as { description?: string }).description ?? \"\";\n\n const base =\n \"This field must be the element-ID in the form 'frameId-backendId' \" +\n '(e.g. \"0-432\").';\n const composed =\n userDesc.trim().length > 0\n ? `${base} that follows this user-defined description: ${userDesc}`\n : base;\n\n const factory = getZFactory(orig);\n return factory.string().regex(ID_PATTERN).describe(composed);\n}\n\n/**\n * Mapping from LLM provider names to their corresponding environment variable names for API keys.\n */\nexport const providerEnvVarMap: Partial<\n Record<ModelProvider | string, string | Array<string>>\n> = {\n openai: \"OPENAI_API_KEY\",\n anthropic: \"ANTHROPIC_API_KEY\",\n google: [\"GEMINI_API_KEY\", \"GOOGLE_GENERATIVE_AI_API_KEY\", \"GOOGLE_API_KEY\"],\n vertex: \"GOOGLE_VERTEX_AI_API_KEY\",\n groq: \"GROQ_API_KEY\",\n cerebras: \"CEREBRAS_API_KEY\",\n togetherai: \"TOGETHER_AI_API_KEY\",\n mistral: \"MISTRAL_API_KEY\",\n deepseek: \"DEEPSEEK_API_KEY\",\n perplexity: \"PERPLEXITY_API_KEY\",\n azure: \"AZURE_API_KEY\",\n xai: \"XAI_API_KEY\",\n google_legacy: \"GOOGLE_API_KEY\",\n};\n\nconst providersWithoutApiKey = new Set([\"bedrock\", \"ollama\"]);\n\n/**\n * Loads an API key for a provider, checking environment variables.\n * @param provider The name of the provider (e.g., 'openai', 'anthropic')\n * @param logger Optional logger for info/error messages\n * @returns The API key if found, undefined otherwise\n */\nexport function loadApiKeyFromEnv(\n provider: string | undefined,\n logger: (logLine: LogLine) => void,\n): string | undefined {\n if (!provider) {\n return undefined;\n }\n\n const envVarName = providerEnvVarMap[provider];\n if (!envVarName) {\n if (!providersWithoutApiKey.has(provider)) {\n logger({\n category: \"init\",\n message: `No known environment variable for provider '${provider}'`,\n level: 0,\n });\n }\n return undefined;\n }\n\n const apiKeyFromEnv = Array.isArray(envVarName)\n ? envVarName\n .map((name) => process.env[name])\n .find((key) => key && key.length > 0)\n : process.env[envVarName as string];\n if (typeof apiKeyFromEnv === \"string\" && apiKeyFromEnv.length > 0) {\n return apiKeyFromEnv;\n }\n\n // Don't log - this is expected when llmClient is provided or API key will be set later\n return undefined;\n}\n\nexport function trimTrailingTextNode(\n path: string | undefined,\n): string | undefined {\n return path?.replace(/\\/text\\(\\)(\\[\\d+\\])?$/iu, \"\");\n}\n\nexport function toTitleCase(str: string): string {\n return str.replace(\n /\\w\\S*/g,\n (text) => text.charAt(0).toUpperCase() + text.substring(1),\n );\n}\n\n// TODO: move to separate types file\nexport interface JsonSchemaProperty {\n type: string;\n enum?: unknown[];\n items?: JsonSchemaProperty;\n properties?: Record<string, JsonSchemaProperty>;\n required?: string[];\n minimum?: number;\n maximum?: number;\n description?: string;\n format?: string; // JSON Schema format field (e.g., \"uri\", \"url\", \"email\", etc.)\n}\nexport interface JsonSchema extends JsonSchemaProperty {\n type: string;\n}\n\n/**\n * Converts a JSON Schema object to a Zod schema\n * @param schema The JSON Schema object to convert\n * @returns A Zod schema equivalent to the input JSON Schema\n */\nexport function jsonSchemaToZod(schema: JsonSchema): ZodTypeAny {\n switch (schema.type) {\n case \"object\":\n if (schema.properties) {\n const shape: Record<string, ZodTypeAny> = {};\n for (const key in schema.properties) {\n shape[key] = jsonSchemaToZod(schema.properties[key]);\n }\n let zodObject = z.object(shape);\n if (schema.required && Array.isArray(schema.required)) {\n const requiredFields = schema.required.reduce<Record<string, true>>(\n (acc, field) => ({ ...acc, [field]: true }),\n {},\n );\n zodObject = zodObject.partial().required(requiredFields);\n }\n if (schema.description) {\n zodObject = zodObject.describe(schema.description);\n }\n return zodObject;\n } else {\n return z.object({});\n }\n case \"array\":\n if (schema.items) {\n let zodArray = z.array(jsonSchemaToZod(schema.items));\n if (schema.description) {\n zodArray = zodArray.describe(schema.description);\n }\n return zodArray;\n } else {\n return z.array(z.any());\n }\n case \"string\": {\n if (schema.enum) {\n return z.string().refine((val) => schema.enum!.includes(val));\n }\n let zodString = z.string();\n\n // Handle JSON Schema format field\n if (schema.format === \"uri\" || schema.format === \"url\") {\n zodString = zodString.url();\n } else if (schema.format === \"email\") {\n zodString = zodString.email();\n } else if (schema.format === \"uuid\") {\n zodString = zodString.uuid();\n }\n // Add more format handlers as needed\n\n if (schema.description) {\n zodString = zodString.describe(schema.description);\n }\n return zodString;\n }\n case \"number\": {\n let zodNumber = z.number();\n if (schema.minimum !== undefined) {\n zodNumber = zodNumber.min(schema.minimum);\n }\n if (schema.maximum !== undefined) {\n zodNumber = zodNumber.max(schema.maximum);\n }\n if (schema.description) {\n zodNumber = zodNumber.describe(schema.description);\n }\n return zodNumber;\n }\n case \"boolean\": {\n let zodBoolean = z.boolean();\n if (schema.description) {\n zodBoolean = zodBoolean.describe(schema.description);\n }\n return zodBoolean;\n }\n default:\n return z.any();\n }\n}\n"]}
@@ -16,4 +16,12 @@ export declare abstract class AgentClient {
16
16
  abstract setCurrentUrl(url: string): void;
17
17
  abstract setScreenshotProvider(provider: () => Promise<string>): void;
18
18
  abstract setActionHandler(handler: (action: AgentAction) => Promise<void>): void;
19
+ /** Optional hook called at the top of every step in the agent loop. */
20
+ protected preStepHook?: () => Promise<void>;
21
+ setPreStepHook(handler: () => Promise<void>): void;
22
+ /**
23
+ * Optional ephemeral context note that should be sent to the next model turn.
24
+ * Clients that do not support this can ignore it.
25
+ */
26
+ addContextNote(note: string): void;
19
27
  }
@@ -13,5 +13,18 @@ export class AgentClient {
13
13
  this.userProvidedInstructions = userProvidedInstructions;
14
14
  this.clientOptions = {};
15
15
  }
16
+ /** Optional hook called at the top of every step in the agent loop. */
17
+ preStepHook;
18
+ setPreStepHook(handler) {
19
+ this.preStepHook = handler;
20
+ }
21
+ /**
22
+ * Optional ephemeral context note that should be sent to the next model turn.
23
+ * Clients that do not support this can ignore it.
24
+ */
25
+ addContextNote(note) {
26
+ void note;
27
+ // no-op by default
28
+ }
16
29
  }
17
30
  //# sourceMappingURL=AgentClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentClient.js","sourceRoot":"","sources":["../../../../../lib/v3/agent/AgentClient.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,OAAgB,WAAW;IACxB,IAAI,CAAY;IAChB,SAAS,CAAS;IAClB,aAAa,CAAgB;IAC7B,wBAAwB,CAAU;IAEzC,YACE,IAAe,EACf,SAAiB,EACjB,wBAAiC;QAEjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QACzD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;CAiBF","sourcesContent":["import {\n AgentAction,\n AgentResult,\n AgentType,\n AgentExecutionOptions,\n} from \"../types/public/agent.js\";\nimport { ClientOptions } from \"../types/public/model.js\";\n\n/**\n * Abstract base class for agent clients\n * This provides a common interface for all agent implementations\n */\nexport abstract class AgentClient {\n public type: AgentType;\n public modelName: string;\n public clientOptions: ClientOptions;\n public userProvidedInstructions?: string;\n\n constructor(\n type: AgentType,\n modelName: string,\n userProvidedInstructions?: string,\n ) {\n this.type = type;\n this.modelName = modelName;\n this.userProvidedInstructions = userProvidedInstructions;\n this.clientOptions = {};\n }\n\n abstract execute(options: AgentExecutionOptions): Promise<AgentResult>;\n\n abstract captureScreenshot(\n options?: Record<string, unknown>,\n ): Promise<unknown>;\n\n abstract setViewport(width: number, height: number): void;\n\n abstract setCurrentUrl(url: string): void;\n\n abstract setScreenshotProvider(provider: () => Promise<string>): void;\n\n abstract setActionHandler(\n handler: (action: AgentAction) => Promise<void>,\n ): void;\n}\n"]}
1
+ {"version":3,"file":"AgentClient.js","sourceRoot":"","sources":["../../../../../lib/v3/agent/AgentClient.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,OAAgB,WAAW;IACxB,IAAI,CAAY;IAChB,SAAS,CAAS;IAClB,aAAa,CAAgB;IAC7B,wBAAwB,CAAU;IAEzC,YACE,IAAe,EACf,SAAiB,EACjB,wBAAiC;QAEjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;QACzD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;IAkBD,uEAAuE;IAC7D,WAAW,CAAuB;IAE5C,cAAc,CAAC,OAA4B;QACzC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,IAAY;QACzB,KAAK,IAAI,CAAC;QACV,mBAAmB;IACrB,CAAC;CACF","sourcesContent":["import {\n AgentAction,\n AgentResult,\n AgentType,\n AgentExecutionOptions,\n} from \"../types/public/agent.js\";\nimport { ClientOptions } from \"../types/public/model.js\";\n\n/**\n * Abstract base class for agent clients\n * This provides a common interface for all agent implementations\n */\nexport abstract class AgentClient {\n public type: AgentType;\n public modelName: string;\n public clientOptions: ClientOptions;\n public userProvidedInstructions?: string;\n\n constructor(\n type: AgentType,\n modelName: string,\n userProvidedInstructions?: string,\n ) {\n this.type = type;\n this.modelName = modelName;\n this.userProvidedInstructions = userProvidedInstructions;\n this.clientOptions = {};\n }\n\n abstract execute(options: AgentExecutionOptions): Promise<AgentResult>;\n\n abstract captureScreenshot(\n options?: Record<string, unknown>,\n ): Promise<unknown>;\n\n abstract setViewport(width: number, height: number): void;\n\n abstract setCurrentUrl(url: string): void;\n\n abstract setScreenshotProvider(provider: () => Promise<string>): void;\n\n abstract setActionHandler(\n handler: (action: AgentAction) => Promise<void>,\n ): void;\n\n /** Optional hook called at the top of every step in the agent loop. */\n protected preStepHook?: () => Promise<void>;\n\n setPreStepHook(handler: () => Promise<void>): void {\n this.preStepHook = handler;\n }\n\n /**\n * Optional ephemeral context note that should be sent to the next model turn.\n * Clients that do not support this can ignore it.\n */\n addContextNote(note: string): void {\n void note;\n // no-op by default\n }\n}\n"]}
@@ -7,7 +7,6 @@ import { MicrosoftCUAClient } from "./MicrosoftCUAClient.js";
7
7
  export const modelToAgentProviderMap = {
8
8
  "computer-use-preview": "openai",
9
9
  "computer-use-preview-2025-03-11": "openai",
10
- "claude-3-7-sonnet-latest": "anthropic",
11
10
  "claude-sonnet-4-20250514": "anthropic",
12
11
  "claude-sonnet-4-5-20250929": "anthropic",
13
12
  "claude-opus-4-5-20251101": "anthropic",
@@ -1 +1 @@
1
- {"version":3,"file":"AgentProvider.js","sourceRoot":"","sources":["../../../../../lib/v3/agent/AgentProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { ToolSet } from \"ai/dist\";\nimport { AgentProviderType } from \"../types/public/agent.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport { ClientOptions } from \"../types/public/model.js\";\nimport {\n UnsupportedModelError,\n UnsupportedModelProviderError,\n} from \"../types/public/sdkErrors.js\";\nimport { AgentClient } from \"./AgentClient.js\";\nimport { AnthropicCUAClient } from \"./AnthropicCUAClient.js\";\nimport { OpenAICUAClient } from \"./OpenAICUAClient.js\";\nimport { GoogleCUAClient } from \"./GoogleCUAClient.js\";\nimport { MicrosoftCUAClient } from \"./MicrosoftCUAClient.js\";\n\n// Map model names to their provider types\nexport const modelToAgentProviderMap: Record<string, AgentProviderType> = {\n \"computer-use-preview\": \"openai\",\n \"computer-use-preview-2025-03-11\": \"openai\",\n \"claude-3-7-sonnet-latest\": \"anthropic\",\n \"claude-sonnet-4-20250514\": \"anthropic\",\n \"claude-sonnet-4-5-20250929\": \"anthropic\",\n \"claude-opus-4-5-20251101\": \"anthropic\",\n \"claude-opus-4-6\": \"anthropic\",\n \"claude-sonnet-4-6\": \"anthropic\",\n \"claude-haiku-4-5-20251001\": \"anthropic\",\n \"gemini-2.5-computer-use-preview-10-2025\": \"google\",\n \"gemini-3-flash-preview\": \"google\",\n \"gemini-3-pro-preview\": \"google\",\n \"fara-7b\": \"microsoft\",\n};\n\n/**\n * Provider for agent clients\n * This class is responsible for creating the appropriate agent client\n * based on the provider type\n */\nexport class AgentProvider {\n private logger: (message: LogLine) => void;\n\n /**\n * Create a new agent provider\n */\n constructor(logger: (message: LogLine) => void) {\n this.logger = logger;\n }\n\n getClient(\n modelName: string,\n clientOptions?: ClientOptions,\n userProvidedInstructions?: string,\n tools?: ToolSet,\n ): AgentClient {\n // Check if provider is explicitly set in clientOptions\n const explicitProvider = clientOptions?.provider as\n | AgentProviderType\n | undefined;\n const type = explicitProvider || AgentProvider.getAgentProvider(modelName);\n\n this.logger({\n category: \"agent\",\n message: `Getting agent client for type: ${type}, model: ${modelName}${explicitProvider ? \" (explicit provider)\" : \"\"}`,\n level: 2,\n });\n\n try {\n switch (type) {\n case \"openai\":\n return new OpenAICUAClient(\n type,\n modelName,\n userProvidedInstructions,\n clientOptions,\n tools,\n );\n case \"anthropic\":\n return new AnthropicCUAClient(\n type,\n modelName,\n userProvidedInstructions,\n clientOptions,\n tools,\n );\n case \"google\":\n return new GoogleCUAClient(\n type,\n modelName,\n userProvidedInstructions,\n clientOptions,\n tools,\n );\n case \"microsoft\":\n return new MicrosoftCUAClient(\n type,\n modelName,\n userProvidedInstructions,\n clientOptions,\n );\n default:\n throw new UnsupportedModelProviderError(\n [\"openai\", \"anthropic\", \"google\", \"microsoft\"],\n \"Computer Use Agent\",\n );\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.logger({\n category: \"agent\",\n message: `Error creating agent client: ${errorMessage}`,\n level: 0,\n });\n throw error;\n }\n }\n\n static getAgentProvider(modelName: string): AgentProviderType {\n const normalized = modelName.includes(\"/\")\n ? modelName.split(\"/\")[1]\n : modelName;\n\n if (normalized in modelToAgentProviderMap) {\n return modelToAgentProviderMap[normalized];\n }\n\n throw new UnsupportedModelError(\n Object.keys(modelToAgentProviderMap),\n \"Computer Use Agent\",\n );\n }\n}\n"]}
1
+ {"version":3,"file":"AgentProvider.js","sourceRoot":"","sources":["../../../../../lib/v3/agent/AgentProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { ToolSet } from \"ai/dist\";\nimport { AgentProviderType } from \"../types/public/agent.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport { ClientOptions } from \"../types/public/model.js\";\nimport {\n UnsupportedModelError,\n UnsupportedModelProviderError,\n} from \"../types/public/sdkErrors.js\";\nimport { AgentClient } from \"./AgentClient.js\";\nimport { AnthropicCUAClient } from \"./AnthropicCUAClient.js\";\nimport { OpenAICUAClient } from \"./OpenAICUAClient.js\";\nimport { GoogleCUAClient } from \"./GoogleCUAClient.js\";\nimport { MicrosoftCUAClient } from \"./MicrosoftCUAClient.js\";\n\n// Map model names to their provider types\nexport const modelToAgentProviderMap: Record<string, AgentProviderType> = {\n \"computer-use-preview\": \"openai\",\n \"computer-use-preview-2025-03-11\": \"openai\",\n \"claude-sonnet-4-20250514\": \"anthropic\",\n \"claude-sonnet-4-5-20250929\": \"anthropic\",\n \"claude-opus-4-5-20251101\": \"anthropic\",\n \"claude-opus-4-6\": \"anthropic\",\n \"claude-sonnet-4-6\": \"anthropic\",\n \"claude-haiku-4-5-20251001\": \"anthropic\",\n \"gemini-2.5-computer-use-preview-10-2025\": \"google\",\n \"gemini-3-flash-preview\": \"google\",\n \"gemini-3-pro-preview\": \"google\",\n \"fara-7b\": \"microsoft\",\n};\n\n/**\n * Provider for agent clients\n * This class is responsible for creating the appropriate agent client\n * based on the provider type\n */\nexport class AgentProvider {\n private logger: (message: LogLine) => void;\n\n /**\n * Create a new agent provider\n */\n constructor(logger: (message: LogLine) => void) {\n this.logger = logger;\n }\n\n getClient(\n modelName: string,\n clientOptions?: ClientOptions,\n userProvidedInstructions?: string,\n tools?: ToolSet,\n ): AgentClient {\n // Check if provider is explicitly set in clientOptions\n const explicitProvider = clientOptions?.provider as\n | AgentProviderType\n | undefined;\n const type = explicitProvider || AgentProvider.getAgentProvider(modelName);\n\n this.logger({\n category: \"agent\",\n message: `Getting agent client for type: ${type}, model: ${modelName}${explicitProvider ? \" (explicit provider)\" : \"\"}`,\n level: 2,\n });\n\n try {\n switch (type) {\n case \"openai\":\n return new OpenAICUAClient(\n type,\n modelName,\n userProvidedInstructions,\n clientOptions,\n tools,\n );\n case \"anthropic\":\n return new AnthropicCUAClient(\n type,\n modelName,\n userProvidedInstructions,\n clientOptions,\n tools,\n );\n case \"google\":\n return new GoogleCUAClient(\n type,\n modelName,\n userProvidedInstructions,\n clientOptions,\n tools,\n );\n case \"microsoft\":\n return new MicrosoftCUAClient(\n type,\n modelName,\n userProvidedInstructions,\n clientOptions,\n );\n default:\n throw new UnsupportedModelProviderError(\n [\"openai\", \"anthropic\", \"google\", \"microsoft\"],\n \"Computer Use Agent\",\n );\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.logger({\n category: \"agent\",\n message: `Error creating agent client: ${errorMessage}`,\n level: 0,\n });\n throw error;\n }\n }\n\n static getAgentProvider(modelName: string): AgentProviderType {\n const normalized = modelName.includes(\"/\")\n ? modelName.split(\"/\")[1]\n : modelName;\n\n if (normalized in modelToAgentProviderMap) {\n return modelToAgentProviderMap[normalized];\n }\n\n throw new UnsupportedModelError(\n Object.keys(modelToAgentProviderMap),\n \"Computer Use Agent\",\n );\n }\n}\n"]}
@@ -3,7 +3,7 @@ import Anthropic from "@anthropic-ai/sdk";
3
3
  import { AgentClient } from "./AgentClient.js";
4
4
  import { compressConversationImages } from "./utils/imageCompression.js";
5
5
  import { toJsonSchema } from "../zodCompat.js";
6
- import { SessionFileLogger, formatCuaPromptPreview, formatCuaResponsePreview, } from "../flowLogger.js";
6
+ import { FlowLogger, extractLlmCuaPromptSummary, extractLlmCuaResponseSummary, } from "../flowlogger/FlowLogger.js";
7
7
  import { v7 as uuidv7 } from "uuid";
8
8
  /**
9
9
  * Client for Anthropic's Computer Use API
@@ -84,6 +84,7 @@ export class AnthropicCUAClient extends AgentClient {
84
84
  try {
85
85
  // Execute steps until completion or max steps reached
86
86
  while (!completed && currentStep < maxSteps) {
87
+ await this.preStepHook?.();
87
88
  logger({
88
89
  category: "agent",
89
90
  message: `Executing step ${currentStep + 1}/${maxSteps}`,
@@ -398,11 +399,10 @@ export class AnthropicCUAClient extends AgentClient {
398
399
  }
399
400
  // Log LLM request
400
401
  const llmRequestId = uuidv7();
401
- SessionFileLogger.logLlmRequest({
402
+ FlowLogger.logLlmRequest({
402
403
  requestId: llmRequestId,
403
404
  model: this.modelName,
404
- operation: "CUA.getAction",
405
- prompt: formatCuaPromptPreview(messages),
405
+ prompt: extractLlmCuaPromptSummary(messages),
406
406
  });
407
407
  const startTime = Date.now();
408
408
  // Create the message using the Anthropic Messages API
@@ -416,11 +416,10 @@ export class AnthropicCUAClient extends AgentClient {
416
416
  inference_time_ms: elapsedMs,
417
417
  };
418
418
  // Log LLM response
419
- SessionFileLogger.logLlmResponse({
419
+ FlowLogger.logLlmResponse({
420
420
  requestId: llmRequestId,
421
421
  model: this.modelName,
422
- operation: "CUA.getAction",
423
- output: formatCuaResponsePreview(response.content),
422
+ output: extractLlmCuaResponseSummary(response.content),
424
423
  inputTokens: response.usage.input_tokens,
425
424
  outputTokens: response.usage.output_tokens,
426
425
  });