@browserbasehq/orca 3.1.0-patch.4 → 3.2.0-preview.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 (297) hide show
  1. package/dist/cjs/lib/inference.js +1 -4
  2. package/dist/cjs/lib/inference.js.map +1 -1
  3. package/dist/cjs/lib/utils.d.ts +1 -0
  4. package/dist/cjs/lib/utils.js +4 -0
  5. package/dist/cjs/lib/utils.js.map +1 -1
  6. package/dist/cjs/lib/v3/agent/AgentProvider.js +0 -1
  7. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  8. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js +4 -6
  9. package/dist/cjs/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  10. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +4 -6
  11. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  12. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +4 -6
  13. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  14. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.d.ts +2 -0
  15. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js +2 -2
  16. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  17. package/dist/cjs/lib/v3/agent/tools/act.d.ts +1 -1
  18. package/dist/cjs/lib/v3/agent/tools/act.js +20 -4
  19. package/dist/cjs/lib/v3/agent/tools/act.js.map +1 -1
  20. package/dist/cjs/lib/v3/agent/tools/ariaTree.d.ts +8 -1
  21. package/dist/cjs/lib/v3/agent/tools/ariaTree.js +60 -22
  22. package/dist/cjs/lib/v3/agent/tools/ariaTree.js.map +1 -1
  23. package/dist/cjs/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
  24. package/dist/cjs/lib/v3/agent/tools/braveSearch.js.map +1 -0
  25. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
  26. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js +70 -0
  27. package/dist/cjs/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
  28. package/dist/cjs/lib/v3/agent/tools/click.js +23 -31
  29. package/dist/cjs/lib/v3/agent/tools/click.js.map +1 -1
  30. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js +22 -30
  31. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  32. package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -2
  33. package/dist/cjs/lib/v3/agent/tools/extract.js +16 -3
  34. package/dist/cjs/lib/v3/agent/tools/extract.js.map +1 -1
  35. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js +30 -30
  36. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  37. package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +7 -1
  38. package/dist/cjs/lib/v3/agent/tools/fillform.js +60 -37
  39. package/dist/cjs/lib/v3/agent/tools/fillform.js.map +1 -1
  40. package/dist/cjs/lib/v3/agent/tools/index.d.ts +19 -3
  41. package/dist/cjs/lib/v3/agent/tools/index.js +12 -8
  42. package/dist/cjs/lib/v3/agent/tools/index.js.map +1 -1
  43. package/dist/cjs/lib/v3/agent/tools/screenshot.d.ts +8 -0
  44. package/dist/cjs/lib/v3/agent/tools/screenshot.js +32 -15
  45. package/dist/cjs/lib/v3/agent/tools/screenshot.js.map +1 -1
  46. package/dist/cjs/lib/v3/agent/tools/scroll.js +12 -0
  47. package/dist/cjs/lib/v3/agent/tools/scroll.js.map +1 -1
  48. package/dist/cjs/lib/v3/agent/tools/type.js +23 -31
  49. package/dist/cjs/lib/v3/agent/tools/type.js.map +1 -1
  50. package/dist/cjs/lib/v3/agent/tools/wait.js +6 -0
  51. package/dist/cjs/lib/v3/agent/tools/wait.js.map +1 -1
  52. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
  53. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  54. package/dist/cjs/lib/v3/api.d.ts +2 -2
  55. package/dist/cjs/lib/v3/api.js +1 -1
  56. package/dist/cjs/lib/v3/api.js.map +1 -1
  57. package/dist/cjs/lib/v3/cache/ActCache.d.ts +0 -1
  58. package/dist/cjs/lib/v3/cache/ActCache.js +2 -18
  59. package/dist/cjs/lib/v3/cache/ActCache.js.map +1 -1
  60. package/dist/cjs/lib/v3/eventStore.d.ts +41 -0
  61. package/dist/cjs/lib/v3/eventStore.js +375 -0
  62. package/dist/cjs/lib/v3/eventStore.js.map +1 -0
  63. package/dist/cjs/lib/v3/flowLogger.d.ts +62 -103
  64. package/dist/cjs/lib/v3/flowLogger.js +362 -773
  65. package/dist/cjs/lib/v3/flowLogger.js.map +1 -1
  66. package/dist/cjs/lib/v3/handlers/actHandler.js +1 -2
  67. package/dist/cjs/lib/v3/handlers/actHandler.js.map +1 -1
  68. package/dist/cjs/lib/v3/handlers/extractHandler.js +2 -2
  69. package/dist/cjs/lib/v3/handlers/extractHandler.js.map +1 -1
  70. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js +21 -33
  71. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
  72. package/dist/cjs/lib/v3/handlers/observeHandler.js +1 -2
  73. package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -1
  74. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +0 -4
  75. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +23 -48
  76. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  77. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +10 -12
  78. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  79. package/dist/cjs/lib/v3/index.d.ts +2 -1
  80. package/dist/cjs/lib/v3/launch/browserbase.d.ts +1 -1
  81. package/dist/cjs/lib/v3/launch/browserbase.js +4 -9
  82. package/dist/cjs/lib/v3/launch/browserbase.js.map +1 -1
  83. package/dist/cjs/lib/v3/llm/LLMProvider.js +0 -5
  84. package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
  85. package/dist/cjs/lib/v3/llm/aisdk.js +10 -16
  86. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  87. package/dist/cjs/lib/v3/runtimePaths.js +2 -1
  88. package/dist/cjs/lib/v3/runtimePaths.js.map +1 -1
  89. package/dist/cjs/lib/v3/shutdown/supervisor.js +2 -2
  90. package/dist/cjs/lib/v3/shutdown/supervisor.js.map +1 -1
  91. package/dist/cjs/lib/v3/timeoutConfig.d.ts +1 -1
  92. package/dist/cjs/lib/v3/timeoutConfig.js +5 -0
  93. package/dist/cjs/lib/v3/timeoutConfig.js.map +1 -1
  94. package/dist/cjs/lib/v3/types/private/shutdown.d.ts +1 -1
  95. package/dist/cjs/lib/v3/types/private/shutdown.js.map +1 -1
  96. package/dist/cjs/lib/v3/types/public/agent.d.ts +28 -3
  97. package/dist/cjs/lib/v3/types/public/agent.js +0 -1
  98. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  99. package/dist/cjs/lib/v3/types/public/api.d.ts +3 -0
  100. package/dist/cjs/lib/v3/types/public/api.js +1 -0
  101. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  102. package/dist/cjs/lib/v3/types/public/model.d.ts +4 -2
  103. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  104. package/dist/cjs/lib/v3/types/public/options.d.ts +6 -0
  105. package/dist/cjs/lib/v3/types/public/options.js.map +1 -1
  106. package/dist/cjs/lib/v3/understudy/cdp.d.ts +8 -13
  107. package/dist/cjs/lib/v3/understudy/cdp.js +137 -17
  108. package/dist/cjs/lib/v3/understudy/cdp.js.map +1 -1
  109. package/dist/cjs/lib/v3/understudy/context.d.ts +1 -0
  110. package/dist/cjs/lib/v3/understudy/context.js +142 -60
  111. package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
  112. package/dist/cjs/lib/v3/understudy/frame.js +23 -6
  113. package/dist/cjs/lib/v3/understudy/frame.js.map +1 -1
  114. package/dist/cjs/lib/v3/understudy/page.d.ts +13 -0
  115. package/dist/cjs/lib/v3/understudy/page.js +88 -20
  116. package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
  117. package/dist/cjs/lib/v3/understudy/screenshotUtils.d.ts +0 -1
  118. package/dist/cjs/lib/v3/understudy/screenshotUtils.js +0 -18
  119. package/dist/cjs/lib/v3/understudy/screenshotUtils.js.map +1 -1
  120. package/dist/cjs/lib/v3/v3.d.ts +10 -0
  121. package/dist/cjs/lib/v3/v3.js +210 -172
  122. package/dist/cjs/lib/v3/v3.js.map +1 -1
  123. package/dist/cjs/tests/integration/cdp-session-detached.spec.js +1 -1
  124. package/dist/cjs/tests/integration/cdp-session-detached.spec.js.map +1 -1
  125. package/dist/cjs/tests/integration/context-addInitScript.spec.js +104 -11
  126. package/dist/cjs/tests/integration/context-addInitScript.spec.js.map +1 -1
  127. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js +219 -0
  128. package/dist/cjs/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
  129. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js +85 -0
  130. package/dist/cjs/tests/integration/page-extra-http-headers.spec.js.map +1 -0
  131. package/dist/cjs/tests/integration/page-screenshot.spec.js +1 -1
  132. package/dist/cjs/tests/integration/page-screenshot.spec.js.map +1 -1
  133. package/dist/cjs/tests/integration/timeouts.spec.js +168 -0
  134. package/dist/cjs/tests/integration/timeouts.spec.js.map +1 -1
  135. package/dist/cjs/tests/unit/model-deprecation.test.js +5 -8
  136. package/dist/cjs/tests/unit/model-deprecation.test.js.map +1 -1
  137. package/dist/cjs/tests/unit/page-extra-http-headers.test.d.ts +1 -0
  138. package/dist/cjs/tests/unit/page-extra-http-headers.test.js +92 -0
  139. package/dist/cjs/tests/unit/page-extra-http-headers.test.js.map +1 -0
  140. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +13 -1
  141. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  142. package/dist/cjs/tests/unit/public-api/public-types.test.js.map +1 -1
  143. package/dist/esm/lib/inference.js +1 -4
  144. package/dist/esm/lib/inference.js.map +1 -1
  145. package/dist/esm/lib/utils.d.ts +1 -0
  146. package/dist/esm/lib/utils.js +3 -0
  147. package/dist/esm/lib/utils.js.map +1 -1
  148. package/dist/esm/lib/v3/agent/AgentProvider.js +0 -1
  149. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  150. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js +5 -7
  151. package/dist/esm/lib/v3/agent/AnthropicCUAClient.js.map +1 -1
  152. package/dist/esm/lib/v3/agent/GoogleCUAClient.js +5 -7
  153. package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  154. package/dist/esm/lib/v3/agent/OpenAICUAClient.js +5 -7
  155. package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  156. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.d.ts +2 -0
  157. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +2 -2
  158. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  159. package/dist/esm/lib/v3/agent/tools/act.d.ts +1 -1
  160. package/dist/esm/lib/v3/agent/tools/act.js +20 -4
  161. package/dist/esm/lib/v3/agent/tools/act.js.map +1 -1
  162. package/dist/esm/lib/v3/agent/tools/ariaTree.d.ts +8 -1
  163. package/dist/esm/lib/v3/agent/tools/ariaTree.js +60 -22
  164. package/dist/esm/lib/v3/agent/tools/ariaTree.js.map +1 -1
  165. package/dist/esm/lib/v3/agent/tools/{search.js → braveSearch.js} +1 -1
  166. package/dist/esm/lib/v3/agent/tools/braveSearch.js.map +1 -0
  167. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.d.ts +13 -0
  168. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js +66 -0
  169. package/dist/esm/lib/v3/agent/tools/browserbaseSearch.js.map +1 -0
  170. package/dist/esm/lib/v3/agent/tools/click.js +23 -31
  171. package/dist/esm/lib/v3/agent/tools/click.js.map +1 -1
  172. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +22 -30
  173. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  174. package/dist/esm/lib/v3/agent/tools/extract.d.ts +2 -2
  175. package/dist/esm/lib/v3/agent/tools/extract.js +16 -3
  176. package/dist/esm/lib/v3/agent/tools/extract.js.map +1 -1
  177. package/dist/esm/lib/v3/agent/tools/fillFormVision.js +30 -30
  178. package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  179. package/dist/esm/lib/v3/agent/tools/fillform.d.ts +7 -1
  180. package/dist/esm/lib/v3/agent/tools/fillform.js +60 -37
  181. package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
  182. package/dist/esm/lib/v3/agent/tools/index.d.ts +19 -3
  183. package/dist/esm/lib/v3/agent/tools/index.js +12 -8
  184. package/dist/esm/lib/v3/agent/tools/index.js.map +1 -1
  185. package/dist/esm/lib/v3/agent/tools/screenshot.d.ts +8 -0
  186. package/dist/esm/lib/v3/agent/tools/screenshot.js +32 -15
  187. package/dist/esm/lib/v3/agent/tools/screenshot.js.map +1 -1
  188. package/dist/esm/lib/v3/agent/tools/scroll.js +12 -0
  189. package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -1
  190. package/dist/esm/lib/v3/agent/tools/type.js +23 -31
  191. package/dist/esm/lib/v3/agent/tools/type.js.map +1 -1
  192. package/dist/esm/lib/v3/agent/tools/wait.js +6 -0
  193. package/dist/esm/lib/v3/agent/tools/wait.js.map +1 -1
  194. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +4 -0
  195. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  196. package/dist/esm/lib/v3/api.d.ts +2 -2
  197. package/dist/esm/lib/v3/api.js +1 -1
  198. package/dist/esm/lib/v3/api.js.map +1 -1
  199. package/dist/esm/lib/v3/cache/ActCache.d.ts +0 -1
  200. package/dist/esm/lib/v3/cache/ActCache.js +2 -18
  201. package/dist/esm/lib/v3/cache/ActCache.js.map +1 -1
  202. package/dist/esm/lib/v3/eventStore.d.ts +41 -0
  203. package/dist/esm/lib/v3/eventStore.js +363 -0
  204. package/dist/esm/lib/v3/eventStore.js.map +1 -0
  205. package/dist/esm/lib/v3/flowLogger.d.ts +62 -103
  206. package/dist/esm/lib/v3/flowLogger.js +356 -762
  207. package/dist/esm/lib/v3/flowLogger.js.map +1 -1
  208. package/dist/esm/lib/v3/handlers/actHandler.js +1 -2
  209. package/dist/esm/lib/v3/handlers/actHandler.js.map +1 -1
  210. package/dist/esm/lib/v3/handlers/extractHandler.js +2 -2
  211. package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -1
  212. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +22 -34
  213. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
  214. package/dist/esm/lib/v3/handlers/observeHandler.js +1 -2
  215. package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
  216. package/dist/esm/lib/v3/handlers/v3AgentHandler.d.ts +0 -4
  217. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +25 -50
  218. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  219. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +11 -13
  220. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  221. package/dist/esm/lib/v3/index.d.ts +2 -1
  222. package/dist/esm/lib/v3/launch/browserbase.d.ts +1 -1
  223. package/dist/esm/lib/v3/launch/browserbase.js +4 -9
  224. package/dist/esm/lib/v3/launch/browserbase.js.map +1 -1
  225. package/dist/esm/lib/v3/llm/LLMProvider.js +0 -5
  226. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
  227. package/dist/esm/lib/v3/llm/aisdk.js +11 -17
  228. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  229. package/dist/esm/lib/v3/runtimePaths.js +2 -1
  230. package/dist/esm/lib/v3/runtimePaths.js.map +1 -1
  231. package/dist/esm/lib/v3/shutdown/supervisor.js +2 -2
  232. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
  233. package/dist/esm/lib/v3/timeoutConfig.d.ts +1 -1
  234. package/dist/esm/lib/v3/timeoutConfig.js +5 -0
  235. package/dist/esm/lib/v3/timeoutConfig.js.map +1 -1
  236. package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -1
  237. package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
  238. package/dist/esm/lib/v3/types/public/agent.d.ts +28 -3
  239. package/dist/esm/lib/v3/types/public/agent.js +0 -1
  240. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  241. package/dist/esm/lib/v3/types/public/api.d.ts +3 -0
  242. package/dist/esm/lib/v3/types/public/api.js +1 -0
  243. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  244. package/dist/esm/lib/v3/types/public/model.d.ts +4 -2
  245. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  246. package/dist/esm/lib/v3/types/public/options.d.ts +6 -0
  247. package/dist/esm/lib/v3/types/public/options.js.map +1 -1
  248. package/dist/esm/lib/v3/understudy/cdp.d.ts +8 -13
  249. package/dist/esm/lib/v3/understudy/cdp.js +138 -18
  250. package/dist/esm/lib/v3/understudy/cdp.js.map +1 -1
  251. package/dist/esm/lib/v3/understudy/context.d.ts +1 -0
  252. package/dist/esm/lib/v3/understudy/context.js +142 -60
  253. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  254. package/dist/esm/lib/v3/understudy/frame.js +23 -6
  255. package/dist/esm/lib/v3/understudy/frame.js.map +1 -1
  256. package/dist/esm/lib/v3/understudy/page.d.ts +13 -0
  257. package/dist/esm/lib/v3/understudy/page.js +91 -23
  258. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  259. package/dist/esm/lib/v3/understudy/screenshotUtils.d.ts +0 -1
  260. package/dist/esm/lib/v3/understudy/screenshotUtils.js +0 -17
  261. package/dist/esm/lib/v3/understudy/screenshotUtils.js.map +1 -1
  262. package/dist/esm/lib/v3/v3.d.ts +10 -0
  263. package/dist/esm/lib/v3/v3.js +211 -173
  264. package/dist/esm/lib/v3/v3.js.map +1 -1
  265. package/dist/esm/tests/integration/cdp-session-detached.spec.js +1 -1
  266. package/dist/esm/tests/integration/cdp-session-detached.spec.js.map +1 -1
  267. package/dist/esm/tests/integration/context-addInitScript.spec.js +104 -11
  268. package/dist/esm/tests/integration/context-addInitScript.spec.js.map +1 -1
  269. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.d.ts +1 -0
  270. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js +217 -0
  271. package/dist/esm/tests/integration/iframe-ctx-addInitScript-race.spec.js.map +1 -0
  272. package/dist/esm/tests/integration/page-extra-http-headers.spec.d.ts +1 -0
  273. package/dist/esm/tests/integration/page-extra-http-headers.spec.js +83 -0
  274. package/dist/esm/tests/integration/page-extra-http-headers.spec.js.map +1 -0
  275. package/dist/esm/tests/integration/page-screenshot.spec.js +1 -1
  276. package/dist/esm/tests/integration/page-screenshot.spec.js.map +1 -1
  277. package/dist/esm/tests/integration/timeouts.spec.js +168 -0
  278. package/dist/esm/tests/integration/timeouts.spec.js.map +1 -1
  279. package/dist/esm/tests/unit/model-deprecation.test.js +5 -8
  280. package/dist/esm/tests/unit/model-deprecation.test.js.map +1 -1
  281. package/dist/esm/tests/unit/page-extra-http-headers.test.d.ts +1 -0
  282. package/dist/esm/tests/unit/page-extra-http-headers.test.js +90 -0
  283. package/dist/esm/tests/unit/page-extra-http-headers.test.js.map +1 -0
  284. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +13 -1
  285. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  286. package/dist/esm/tests/unit/public-api/public-types.test.js.map +1 -1
  287. package/package.json +2 -2
  288. package/dist/cjs/lib/v3/agent/tools/search.js.map +0 -1
  289. package/dist/cjs/tests/unit/rerender-missing-shadows.test.js +0 -209
  290. package/dist/cjs/tests/unit/rerender-missing-shadows.test.js.map +0 -1
  291. package/dist/esm/lib/v3/agent/tools/search.js.map +0 -1
  292. package/dist/esm/tests/unit/rerender-missing-shadows.test.js +0 -207
  293. package/dist/esm/tests/unit/rerender-missing-shadows.test.js.map +0 -1
  294. /package/dist/cjs/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
  295. /package/dist/cjs/tests/{unit/rerender-missing-shadows.test.d.ts → integration/iframe-ctx-addInitScript-race.spec.d.ts} +0 -0
  296. /package/dist/{esm/tests/unit/rerender-missing-shadows.test.d.ts → cjs/tests/integration/page-extra-http-headers.spec.d.ts} +0 -0
  297. /package/dist/esm/lib/v3/agent/tools/{search.d.ts → braveSearch.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"llm-and-agents.test.js","sourceRoot":"","sources":["../../../../../tests/unit/public-api/llm-and-agents.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, expectTypeOf, it } from \"vitest\";\nimport * as Stagehand from \"@browserbasehq/stagehand\";\n\ndescribe(\"LLM and Agents public API types\", () => {\n describe(\"AISdkClient\", () => {\n type AISdkClientInstance = InstanceType<typeof Stagehand.AISdkClient>;\n\n it(\"is exported\", () => {\n expect(Stagehand.AISdkClient).toBeDefined();\n });\n\n it(\"extends LLMClient\", () => {\n expectTypeOf<AISdkClientInstance>().toExtend<Stagehand.LLMClient>();\n });\n\n it(\"constructor accepts model parameter\", () => {\n // AISdkClient constructor takes { model: LanguageModelV2 }\n type CtorParams = ConstructorParameters<typeof Stagehand.AISdkClient>;\n expectTypeOf<CtorParams[\"length\"]>().toEqualTypeOf<1>();\n });\n });\n\n describe(\"AVAILABLE_CUA_MODELS\", () => {\n const expectedModels = [\n \"openai/computer-use-preview\",\n \"openai/computer-use-preview-2025-03-11\",\n \"anthropic/claude-3-7-sonnet-latest\",\n \"anthropic/claude-opus-4-5-20251101\",\n \"anthropic/claude-opus-4-6\",\n \"anthropic/claude-sonnet-4-6\",\n \"anthropic/claude-haiku-4-5-20251001\",\n \"anthropic/claude-sonnet-4-20250514\",\n \"anthropic/claude-sonnet-4-5-20250929\",\n \"google/gemini-2.5-computer-use-preview-10-2025\",\n \"google/gemini-3-flash-preview\",\n \"google/gemini-3-pro-preview\",\n \"microsoft/fara-7b\",\n ] as const;\n\n it(\"AvailableCuaModel matches the known literals\", () => {\n expectTypeOf<Stagehand.AvailableCuaModel>().toEqualTypeOf<\n (typeof expectedModels)[number]\n >();\n void expectedModels; // Mark as used to satisfy ESLint\n });\n });\n\n describe(\"AgentProvider\", () => {\n type AgentProviderInstance = InstanceType<typeof Stagehand.AgentProvider>;\n\n it(\"is exported\", () => {\n expect(Stagehand.AgentProvider).toBeDefined();\n });\n\n it(\"has getClient method\", () => {\n expectTypeOf<AgentProviderInstance[\"getClient\"]>().toBeCallableWith(\n \"test-model\",\n );\n });\n\n it(\"constructor accepts logger parameter\", () => {\n expectTypeOf<\n ConstructorParameters<typeof Stagehand.AgentProvider>\n >().toEqualTypeOf<[(message: Stagehand.LogLine) => void]>();\n });\n });\n\n describe(\"AnnotatedScreenshotText\", () => {\n type ExpectedAnnotatedScreenshotText = string;\n\n it(\"is a string literal\", () => {\n expectTypeOf<\n typeof Stagehand.AnnotatedScreenshotText\n >().toExtend<ExpectedAnnotatedScreenshotText>();\n });\n });\n\n describe(\"ConsoleMessage\", () => {\n type ExpectedShape = {\n type: () => string;\n text: () => string;\n args: () => unknown[];\n location: () => {\n url?: string;\n lineNumber?: number;\n columnNumber?: number;\n };\n page: () => unknown;\n timestamp: () => number | undefined;\n raw: () => unknown;\n toString: () => string;\n };\n\n type ConsoleMessageInstance = InstanceType<typeof Stagehand.ConsoleMessage>;\n\n it(\"has correct public interface shape\", () => {\n expectTypeOf<ConsoleMessageInstance>().toExtend<ExpectedShape>();\n });\n });\n\n describe(\"AgentClient\", () => {\n type AgentProviderInstance = InstanceType<typeof Stagehand.AgentProvider>;\n type GetClientReturn = ReturnType<AgentProviderInstance[\"getClient\"]>;\n\n it(\"getClient returns object with expected methods\", () => {\n type ExpectedShape = {\n execute: (\n options: Stagehand.AgentExecutionOptions,\n ) => Promise<Stagehand.AgentResult>;\n captureScreenshot: (\n options?: Record<string, unknown>,\n ) => Promise<unknown>;\n setViewport: (width: number, height: number) => void;\n setCurrentUrl: (url: string) => void;\n setScreenshotProvider: (provider: () => Promise<string>) => void;\n setActionHandler: (\n handler: (action: Stagehand.AgentAction) => Promise<void>,\n ) => void;\n };\n expectTypeOf<GetClientReturn>().toExtend<ExpectedShape>();\n });\n });\n\n describe(\"LLMClient\", () => {\n type ExpectedShape = {\n type: \"openai\" | \"anthropic\" | \"cerebras\" | \"groq\" | (string & {});\n modelName: Stagehand.AvailableModel | (string & {});\n hasVision: boolean;\n clientOptions: Stagehand.ClientOptions;\n userProvidedInstructions?: string;\n };\n\n type ExpectedCtorParams = [Stagehand.AvailableModel, string?];\n\n type ExpectedBasicOptions = {\n options: {\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string | Array<unknown>;\n }>;\n };\n logger: (message: unknown) => void;\n retries?: number;\n };\n\n type ExpectedWithResponseModel = ExpectedBasicOptions & {\n options: ExpectedBasicOptions[\"options\"] & {\n response_model: {\n name: string;\n schema: Stagehand.StagehandZodSchema;\n };\n };\n };\n\n type LLMClientInstance = InstanceType<typeof Stagehand.LLMClient>;\n\n it(\"has correct public interface shape\", () => {\n expectTypeOf<LLMClientInstance>().toExtend<ExpectedShape>();\n });\n\n it(\"constructor parameters match expected signature\", () => {\n expectTypeOf<\n ConstructorParameters<typeof Stagehand.LLMClient>\n >().toEqualTypeOf<ExpectedCtorParams>();\n });\n\n it(\"createChatCompletion can be called with basic options\", () => {\n expectTypeOf<\n LLMClientInstance[\"createChatCompletion\"]\n >().toBeCallableWith({\n options: {\n messages: [\n {\n role: \"user\",\n content: \"Hello\",\n },\n ],\n },\n logger: () => {},\n } satisfies ExpectedBasicOptions);\n });\n\n it(\"createChatCompletion can be called with response_model\", () => {\n const mockSchema = {} as Stagehand.StagehandZodSchema;\n expectTypeOf<\n LLMClientInstance[\"createChatCompletion\"]\n >().toBeCallableWith({\n options: {\n messages: [\n {\n role: \"user\",\n content: \"Extract data\",\n },\n ],\n response_model: {\n name: \"extracted\",\n schema: mockSchema,\n },\n },\n logger: () => {},\n } satisfies ExpectedWithResponseModel);\n });\n\n it(\"createChatCompletion supports generic return type\", () => {\n type Result = { custom: string };\n type ExpectedSignature = (\n options: Stagehand.CreateChatCompletionOptions,\n ) => Promise<Result>;\n\n expectTypeOf<\n LLMClientInstance[\"createChatCompletion\"]\n >().toExtend<ExpectedSignature>();\n });\n\n it(\"has additional methods\", () => {\n // These methods exist on LLMClient but have complex signatures from the 'ai' library\n // We verify they exist by checking they're functions\n expectTypeOf<LLMClientInstance[\"generateText\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"generateObject\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"streamText\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"streamObject\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"generateImage\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"embed\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"embedMany\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"transcribe\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"generateSpeech\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n });\n });\n\n describe(\"modelToAgentProviderMap\", () => {\n type ExpectedModelToAgentProviderMap = Record<\n string,\n Stagehand.AgentProviderType\n >;\n\n it(\"only stores valid provider types\", () => {\n expectTypeOf<\n typeof Stagehand.modelToAgentProviderMap\n >().toExtend<ExpectedModelToAgentProviderMap>();\n });\n });\n\n describe(\"Response\", () => {\n type ExpectedShape = {\n url: () => string;\n status: () => number;\n statusText: () => string;\n ok: () => boolean;\n frame: () => unknown;\n fromServiceWorker: () => boolean;\n securityDetails: () => Promise<unknown>;\n serverAddr: () => Promise<unknown>;\n headers: () => Record<string, string>;\n allHeaders: () => Promise<Record<string, string>>;\n headerValue: (name: string) => Promise<string | null>;\n headerValues: (name: string) => Promise<string[]>;\n headersArray: () => Promise<Array<{ name: string; value: string }>>;\n body: () => Promise<Buffer>;\n text: () => Promise<string>;\n json: <T = unknown>() => Promise<T>;\n finished: () => Promise<null | Error>;\n markFinished: (error: Error | null) => void;\n applyExtraInfo: (info: unknown) => void;\n };\n\n type ResponseInstance = InstanceType<typeof Stagehand.Response>;\n\n it(\"has correct public interface shape\", () => {\n expectTypeOf<ResponseInstance>().toExtend<ExpectedShape>();\n });\n });\n});\n"]}
1
+ {"version":3,"file":"llm-and-agents.test.js","sourceRoot":"","sources":["../../../../../tests/unit/public-api/llm-and-agents.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, expectTypeOf, it } from \"vitest\";\nimport * as Stagehand from \"@browserbasehq/stagehand\";\n\ndescribe(\"LLM and Agents public API types\", () => {\n describe(\"ModelConfiguration\", () => {\n it(\"accepts Vertex headers in model config\", () => {\n const googleConfig = {\n modelName: \"google/gemini-3-flash-preview\",\n project: \"test-project\",\n location: \"global\",\n headers: {\n \"X-Goog-Priority\": \"high\",\n },\n } satisfies Stagehand.ModelConfiguration;\n\n void googleConfig;\n });\n });\n\n describe(\"AISdkClient\", () => {\n type AISdkClientInstance = InstanceType<typeof Stagehand.AISdkClient>;\n\n it(\"is exported\", () => {\n expect(Stagehand.AISdkClient).toBeDefined();\n });\n\n it(\"extends LLMClient\", () => {\n expectTypeOf<AISdkClientInstance>().toExtend<Stagehand.LLMClient>();\n });\n\n it(\"constructor accepts model parameter\", () => {\n // AISdkClient constructor takes { model: LanguageModelV2 }\n type CtorParams = ConstructorParameters<typeof Stagehand.AISdkClient>;\n expectTypeOf<CtorParams[\"length\"]>().toEqualTypeOf<1>();\n });\n });\n\n describe(\"AVAILABLE_CUA_MODELS\", () => {\n const expectedModels = [\n \"openai/computer-use-preview\",\n \"openai/computer-use-preview-2025-03-11\",\n \"anthropic/claude-opus-4-5-20251101\",\n \"anthropic/claude-opus-4-6\",\n \"anthropic/claude-sonnet-4-6\",\n \"anthropic/claude-haiku-4-5-20251001\",\n \"anthropic/claude-sonnet-4-20250514\",\n \"anthropic/claude-sonnet-4-5-20250929\",\n \"google/gemini-2.5-computer-use-preview-10-2025\",\n \"google/gemini-3-flash-preview\",\n \"google/gemini-3-pro-preview\",\n \"microsoft/fara-7b\",\n ] as const;\n\n it(\"AvailableCuaModel matches the known literals\", () => {\n expectTypeOf<Stagehand.AvailableCuaModel>().toEqualTypeOf<\n (typeof expectedModels)[number]\n >();\n void expectedModels; // Mark as used to satisfy ESLint\n });\n });\n\n describe(\"AgentProvider\", () => {\n type AgentProviderInstance = InstanceType<typeof Stagehand.AgentProvider>;\n\n it(\"is exported\", () => {\n expect(Stagehand.AgentProvider).toBeDefined();\n });\n\n it(\"has getClient method\", () => {\n expectTypeOf<AgentProviderInstance[\"getClient\"]>().toBeCallableWith(\n \"test-model\",\n );\n });\n\n it(\"constructor accepts logger parameter\", () => {\n expectTypeOf<\n ConstructorParameters<typeof Stagehand.AgentProvider>\n >().toEqualTypeOf<[(message: Stagehand.LogLine) => void]>();\n });\n });\n\n describe(\"AnnotatedScreenshotText\", () => {\n type ExpectedAnnotatedScreenshotText = string;\n\n it(\"is a string literal\", () => {\n expectTypeOf<\n typeof Stagehand.AnnotatedScreenshotText\n >().toExtend<ExpectedAnnotatedScreenshotText>();\n });\n });\n\n describe(\"ConsoleMessage\", () => {\n type ExpectedShape = {\n type: () => string;\n text: () => string;\n args: () => unknown[];\n location: () => {\n url?: string;\n lineNumber?: number;\n columnNumber?: number;\n };\n page: () => unknown;\n timestamp: () => number | undefined;\n raw: () => unknown;\n toString: () => string;\n };\n\n type ConsoleMessageInstance = InstanceType<typeof Stagehand.ConsoleMessage>;\n\n it(\"has correct public interface shape\", () => {\n expectTypeOf<ConsoleMessageInstance>().toExtend<ExpectedShape>();\n });\n });\n\n describe(\"AgentClient\", () => {\n type AgentProviderInstance = InstanceType<typeof Stagehand.AgentProvider>;\n type GetClientReturn = ReturnType<AgentProviderInstance[\"getClient\"]>;\n\n it(\"getClient returns object with expected methods\", () => {\n type ExpectedShape = {\n execute: (\n options: Stagehand.AgentExecutionOptions,\n ) => Promise<Stagehand.AgentResult>;\n captureScreenshot: (\n options?: Record<string, unknown>,\n ) => Promise<unknown>;\n setViewport: (width: number, height: number) => void;\n setCurrentUrl: (url: string) => void;\n setScreenshotProvider: (provider: () => Promise<string>) => void;\n setActionHandler: (\n handler: (action: Stagehand.AgentAction) => Promise<void>,\n ) => void;\n };\n expectTypeOf<GetClientReturn>().toExtend<ExpectedShape>();\n });\n });\n\n describe(\"LLMClient\", () => {\n type ExpectedShape = {\n type: \"openai\" | \"anthropic\" | \"cerebras\" | \"groq\" | (string & {});\n modelName: Stagehand.AvailableModel | (string & {});\n hasVision: boolean;\n clientOptions: Stagehand.ClientOptions;\n userProvidedInstructions?: string;\n };\n\n type ExpectedCtorParams = [Stagehand.AvailableModel, string?];\n\n type ExpectedBasicOptions = {\n options: {\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string | Array<unknown>;\n }>;\n };\n logger: (message: unknown) => void;\n retries?: number;\n };\n\n type ExpectedWithResponseModel = ExpectedBasicOptions & {\n options: ExpectedBasicOptions[\"options\"] & {\n response_model: {\n name: string;\n schema: Stagehand.StagehandZodSchema;\n };\n };\n };\n\n type LLMClientInstance = InstanceType<typeof Stagehand.LLMClient>;\n\n it(\"has correct public interface shape\", () => {\n expectTypeOf<LLMClientInstance>().toExtend<ExpectedShape>();\n });\n\n it(\"constructor parameters match expected signature\", () => {\n expectTypeOf<\n ConstructorParameters<typeof Stagehand.LLMClient>\n >().toEqualTypeOf<ExpectedCtorParams>();\n });\n\n it(\"createChatCompletion can be called with basic options\", () => {\n expectTypeOf<\n LLMClientInstance[\"createChatCompletion\"]\n >().toBeCallableWith({\n options: {\n messages: [\n {\n role: \"user\",\n content: \"Hello\",\n },\n ],\n },\n logger: () => {},\n } satisfies ExpectedBasicOptions);\n });\n\n it(\"createChatCompletion can be called with response_model\", () => {\n const mockSchema = {} as Stagehand.StagehandZodSchema;\n expectTypeOf<\n LLMClientInstance[\"createChatCompletion\"]\n >().toBeCallableWith({\n options: {\n messages: [\n {\n role: \"user\",\n content: \"Extract data\",\n },\n ],\n response_model: {\n name: \"extracted\",\n schema: mockSchema,\n },\n },\n logger: () => {},\n } satisfies ExpectedWithResponseModel);\n });\n\n it(\"createChatCompletion supports generic return type\", () => {\n type Result = { custom: string };\n type ExpectedSignature = (\n options: Stagehand.CreateChatCompletionOptions,\n ) => Promise<Result>;\n\n expectTypeOf<\n LLMClientInstance[\"createChatCompletion\"]\n >().toExtend<ExpectedSignature>();\n });\n\n it(\"has additional methods\", () => {\n // These methods exist on LLMClient but have complex signatures from the 'ai' library\n // We verify they exist by checking they're functions\n expectTypeOf<LLMClientInstance[\"generateText\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"generateObject\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"streamText\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"streamObject\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"generateImage\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"embed\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"embedMany\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"transcribe\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"generateSpeech\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n });\n });\n\n describe(\"modelToAgentProviderMap\", () => {\n type ExpectedModelToAgentProviderMap = Record<\n string,\n Stagehand.AgentProviderType\n >;\n\n it(\"only stores valid provider types\", () => {\n expectTypeOf<\n typeof Stagehand.modelToAgentProviderMap\n >().toExtend<ExpectedModelToAgentProviderMap>();\n });\n });\n\n describe(\"Response\", () => {\n type ExpectedShape = {\n url: () => string;\n status: () => number;\n statusText: () => string;\n ok: () => boolean;\n frame: () => unknown;\n fromServiceWorker: () => boolean;\n securityDetails: () => Promise<unknown>;\n serverAddr: () => Promise<unknown>;\n headers: () => Record<string, string>;\n allHeaders: () => Promise<Record<string, string>>;\n headerValue: (name: string) => Promise<string | null>;\n headerValues: (name: string) => Promise<string[]>;\n headersArray: () => Promise<Array<{ name: string; value: string }>>;\n body: () => Promise<Buffer>;\n text: () => Promise<string>;\n json: <T = unknown>() => Promise<T>;\n finished: () => Promise<null | Error>;\n markFinished: (error: Error | null) => void;\n applyExtraInfo: (info: unknown) => void;\n };\n\n type ResponseInstance = InstanceType<typeof Stagehand.Response>;\n\n it(\"has correct public interface shape\", () => {\n expectTypeOf<ResponseInstance>().toExtend<ExpectedShape>();\n });\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"public-types.test.js","sourceRoot":"","sources":["../../../../../tests/unit/public-api/public-types.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expectTypeOf, it } from \"vitest\";\nimport * as Stagehand from \"@browserbasehq/stagehand\";\n\n// Type-level manifest of all expected exported types\n// Since these types don't exist at runtime, we currently need to manually add new publicly exported types\n// to this list ourselves - it's not automatically going to catch changes like our export-surface.test.ts does.\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype ExpectedExportedTypes = {\n // Types from model.ts\n AvailableModel: Stagehand.AvailableModel;\n AvailableCuaModel: Stagehand.AvailableCuaModel;\n ModelProvider: Stagehand.ModelProvider;\n ClientOptions: Stagehand.ClientOptions;\n ModelConfiguration: Stagehand.ModelConfiguration;\n AnthropicJsonSchemaObject: Stagehand.AnthropicJsonSchemaObject;\n AISDKProvider: Stagehand.AISDKProvider;\n AISDKCustomProvider: Stagehand.AISDKCustomProvider;\n LLMTool: Stagehand.LLMTool;\n // Types from methods.ts\n ActOptions: Stagehand.ActOptions;\n ActResult: Stagehand.ActResult;\n ExtractResult: Stagehand.ExtractResult<Stagehand.StagehandZodSchema>;\n Action: Stagehand.Action;\n HistoryEntry: Stagehand.HistoryEntry;\n ExtractOptions: Stagehand.ExtractOptions;\n ObserveOptions: Stagehand.ObserveOptions;\n ObserveResult: Stagehand.ObserveResult;\n V3FunctionName: Stagehand.V3FunctionName;\n // Types from agent.ts\n Tool: Stagehand.Tool;\n AgentAction: Stagehand.AgentAction;\n AgentResult: Stagehand.AgentResult;\n AgentExecuteOptions: Stagehand.AgentExecuteOptions;\n AgentType: Stagehand.AgentType;\n AgentExecutionOptions: Stagehand.AgentExecutionOptions<Stagehand.AgentExecuteOptions>;\n AgentHandlerOptions: Stagehand.AgentHandlerOptions;\n ActionExecutionResult: Stagehand.ActionExecutionResult;\n ToolUseItem: Stagehand.ToolUseItem;\n AnthropicMessage: Stagehand.AnthropicMessage;\n AnthropicContentBlock: Stagehand.AnthropicContentBlock;\n AnthropicTextBlock: Stagehand.AnthropicTextBlock;\n AnthropicToolResult: Stagehand.AnthropicToolResult;\n ResponseItem: Stagehand.ResponseItem;\n ComputerCallItem: Stagehand.ComputerCallItem;\n FunctionCallItem: Stagehand.FunctionCallItem;\n ResponseInputItem: Stagehand.ResponseInputItem;\n AgentInstance: Stagehand.AgentInstance;\n AgentProviderType: Stagehand.AgentProviderType;\n AgentModelConfig: Stagehand.AgentModelConfig;\n AgentConfig: Stagehand.AgentConfig;\n AgentToolMode: Stagehand.AgentToolMode;\n VariableValue: Stagehand.VariableValue;\n Variables: Stagehand.Variables;\n AgentCallbacks: Stagehand.AgentCallbacks;\n AgentExecuteCallbacks: Stagehand.AgentExecuteCallbacks;\n AgentStreamCallbacks: Stagehand.AgentStreamCallbacks;\n AgentExecuteOptionsBase: Stagehand.AgentExecuteOptionsBase;\n AgentStreamExecuteOptions: Stagehand.AgentStreamExecuteOptions;\n ModelMessage: Stagehand.ModelMessage;\n // Types from agent/tools\n AgentTools: Stagehand.AgentTools;\n AgentToolTypesMap: Stagehand.AgentToolTypesMap;\n AgentUITools: Stagehand.AgentUITools;\n AgentToolCall: Stagehand.AgentToolCall;\n AgentToolResult: Stagehand.AgentToolResult;\n // Types from logs.ts\n LogLevel: Stagehand.LogLevel;\n LogLine: Stagehand.LogLine;\n Logger: Stagehand.Logger;\n // Types from metrics.ts\n StagehandMetrics: Stagehand.StagehandMetrics;\n // Types from options.ts\n V3Env: Stagehand.V3Env;\n LocalBrowserLaunchOptions: Stagehand.LocalBrowserLaunchOptions;\n V3Options: Stagehand.V3Options;\n // Types from page.ts\n AnyPage: Stagehand.AnyPage;\n Page: Stagehand.Page;\n PlaywrightPage: Stagehand.PlaywrightPage;\n PatchrightPage: Stagehand.PatchrightPage;\n PuppeteerPage: Stagehand.PuppeteerPage;\n ConsoleListener: Stagehand.ConsoleListener;\n LoadState: Stagehand.LoadState;\n // Types from LLMClient.ts\n ChatMessage: Stagehand.ChatMessage;\n ChatMessageContent: Stagehand.ChatMessageContent;\n ChatMessageImageContent: Stagehand.ChatMessageImageContent;\n ChatMessageTextContent: Stagehand.ChatMessageTextContent;\n ChatCompletionOptions: Stagehand.ChatCompletionOptions;\n LLMResponse: Stagehand.LLMResponse;\n CreateChatCompletionOptions: Stagehand.CreateChatCompletionOptions;\n LLMUsage: Stagehand.LLMUsage;\n LLMParsedResponse: Stagehand.LLMParsedResponse<Record<string, unknown>>;\n // Types from zodCompat.ts\n StagehandZodSchema: Stagehand.StagehandZodSchema;\n StagehandZodObject: Stagehand.StagehandZodObject;\n InferStagehandSchema: Stagehand.InferStagehandSchema<Stagehand.StagehandZodSchema>;\n JsonSchemaDocument: Stagehand.JsonSchemaDocument;\n // Types from utils.ts\n JsonSchema: Stagehand.JsonSchema;\n JsonSchemaProperty: Stagehand.JsonSchemaProperty;\n // Types from cookies.ts\n Cookie: Stagehand.Cookie;\n CookieParam: Stagehand.CookieParam;\n ClearCookieOptions: Stagehand.ClearCookieOptions;\n};\n\ndescribe(\"Stagehand public API types\", () => {\n describe(\"AnyPage\", () => {\n type ExpectedAnyPage =\n | Stagehand.PlaywrightPage\n | Stagehand.PuppeteerPage\n | Stagehand.PatchrightPage\n | Stagehand.Page;\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AnyPage>().toEqualTypeOf<ExpectedAnyPage>();\n });\n });\n\n describe(\"ActOptions\", () => {\n type ExpectedActOptions = {\n model?: Stagehand.ModelConfiguration;\n variables?: Stagehand.Variables;\n timeout?: number;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ActOptions>().toEqualTypeOf<ExpectedActOptions>();\n });\n });\n\n describe(\"ActResult\", () => {\n type ExpectedActResult = {\n success: boolean;\n message: string;\n actionDescription: string;\n actions: Stagehand.Action[];\n cacheStatus?: \"HIT\" | \"MISS\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ActResult>().toEqualTypeOf<ExpectedActResult>();\n });\n });\n\n describe(\"ExtractOptions\", () => {\n type ExpectedExtractOptions = {\n model?: Stagehand.ModelConfiguration;\n timeout?: number;\n selector?: string;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ExtractOptions>().toEqualTypeOf<ExpectedExtractOptions>();\n });\n });\n\n describe(\"ObserveOptions\", () => {\n type ExpectedObserveOptions = {\n model?: Stagehand.ModelConfiguration;\n timeout?: number;\n selector?: string;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ObserveOptions>().toEqualTypeOf<ExpectedObserveOptions>();\n });\n });\n\n describe(\"ObserveResult\", () => {\n it(\"is an Action array with optional cacheStatus\", () => {\n expectTypeOf<Stagehand.ObserveResult>().toExtend<Stagehand.Action[]>();\n expectTypeOf<Stagehand.ObserveResult[\"cacheStatus\"]>().toEqualTypeOf<\n \"HIT\" | \"MISS\" | undefined\n >();\n });\n });\n\n describe(\"Action\", () => {\n type ExpectedAction = {\n selector: string;\n description: string;\n method?: string;\n arguments?: string[];\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.Action>().toEqualTypeOf<ExpectedAction>();\n });\n });\n\n describe(\"AgentAction\", () => {\n // AgentAction is a separate type from Action, not an extension\n // It has additional fields like type, reasoning, taskCompleted, etc.\n it(\"has type field\", () => {\n type TestAction = { type: string } & Stagehand.AgentAction;\n expectTypeOf<TestAction[\"type\"]>().toEqualTypeOf<string>();\n });\n });\n\n describe(\"AgentExecuteOptions\", () => {\n type ExpectedAgentExecuteOptions = {\n instruction: string;\n maxSteps?: number;\n page?: Stagehand.AnyPage;\n highlightCursor?: boolean;\n messages?: Stagehand.ModelMessage[];\n signal?: AbortSignal;\n excludeTools?: string[];\n output?: Stagehand.StagehandZodObject;\n callbacks?: Stagehand.AgentExecuteCallbacks;\n variables?: Stagehand.Variables;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentExecuteOptions>().toEqualTypeOf<ExpectedAgentExecuteOptions>();\n });\n });\n\n describe(\"AgentStreamExecuteOptions\", () => {\n type ExpectedAgentStreamExecuteOptions = {\n instruction: string;\n maxSteps?: number;\n page?: Stagehand.AnyPage;\n highlightCursor?: boolean;\n messages?: Stagehand.ModelMessage[];\n signal?: AbortSignal;\n excludeTools?: string[];\n output?: Stagehand.StagehandZodObject;\n callbacks?: Stagehand.AgentStreamCallbacks;\n variables?: Stagehand.Variables;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentStreamExecuteOptions>().toEqualTypeOf<ExpectedAgentStreamExecuteOptions>();\n });\n });\n\n describe(\"AgentExecutionOptions\", () => {\n type ExpectedAgentExecutionOptions<T = Stagehand.AgentExecuteOptions> = {\n options: T;\n logger: (message: Stagehand.LogLine) => void;\n retries?: number;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<\n Stagehand.AgentExecutionOptions<Stagehand.AgentExecuteOptions>\n >().toEqualTypeOf<\n ExpectedAgentExecutionOptions<Stagehand.AgentExecuteOptions>\n >();\n });\n });\n\n describe(\"AgentResult\", () => {\n type ExpectedAgentResult = {\n success: boolean;\n message: string;\n actions: Stagehand.AgentAction[];\n completed: boolean;\n metadata?: Record<string, unknown>;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n reasoning_tokens?: number;\n cached_input_tokens?: number;\n inference_time_ms: number;\n };\n messages?: Stagehand.ModelMessage[];\n output?: Record<string, unknown>;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentResult>().toEqualTypeOf<ExpectedAgentResult>();\n });\n });\n\n describe(\"AgentConfig\", () => {\n type ExpectedAgentConfig = {\n systemPrompt?: string;\n integrations?: (unknown | string)[];\n tools?: unknown;\n cua?: boolean;\n model?: string | Stagehand.AgentModelConfig<string>;\n executionModel?: string | Stagehand.AgentModelConfig<string>;\n stream?: boolean;\n mode?: Stagehand.AgentToolMode;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentConfig>().toExtend<ExpectedAgentConfig>();\n });\n });\n\n describe(\"AgentToolMode\", () => {\n type ExpectedAgentToolMode = \"dom\" | \"hybrid\" | \"cua\";\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentToolMode>().toEqualTypeOf<ExpectedAgentToolMode>();\n });\n });\n\n describe(\"HistoryEntry\", () => {\n type ExpectedHistoryEntry = {\n method: \"act\" | \"extract\" | \"observe\" | \"navigate\" | \"agent\";\n parameters: unknown;\n result: unknown;\n timestamp: string;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.HistoryEntry>().toEqualTypeOf<ExpectedHistoryEntry>();\n });\n });\n\n describe(\"Cookie\", () => {\n type ExpectedCookie = {\n name: string;\n value: string;\n domain: string;\n path: string;\n expires: number;\n httpOnly: boolean;\n secure: boolean;\n sameSite: \"Strict\" | \"Lax\" | \"None\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.Cookie>().toEqualTypeOf<ExpectedCookie>();\n });\n });\n\n describe(\"CookieParam\", () => {\n type ExpectedCookieParam = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n expires?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.CookieParam>().toEqualTypeOf<ExpectedCookieParam>();\n });\n });\n\n describe(\"ClearCookieOptions\", () => {\n type ExpectedClearCookieOptions = {\n name?: string | RegExp;\n domain?: string | RegExp;\n path?: string | RegExp;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ClearCookieOptions>().toEqualTypeOf<ExpectedClearCookieOptions>();\n });\n });\n});\n"]}
1
+ {"version":3,"file":"public-types.test.js","sourceRoot":"","sources":["../../../../../tests/unit/public-api/public-types.test.ts"],"names":[],"mappings":";;AAAA,mCAAoD;AA4GpD,IAAA,iBAAQ,EAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,IAAA,iBAAQ,EAAC,SAAS,EAAE,GAAG,EAAE;QAOvB,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAAqB,CAAC,aAAa,EAAmB,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,YAAY,EAAE,GAAG,EAAE;QAS1B,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAAwB,CAAC,aAAa,EAAsB,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;QASzB,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAAuB,CAAC,aAAa,EAAqB,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;QAS9B,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAA4B,CAAC,aAAa,EAA0B,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;QAS9B,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAA4B,CAAC,aAAa,EAA0B,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,IAAA,qBAAY,GAA2B,CAAC,QAAQ,EAAsB,CAAC;YACvE,IAAA,qBAAY,GAA0C,CAAC,aAAa,EAEjE,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,QAAQ,EAAE,GAAG,EAAE;QAQtB,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAAoB,CAAC,aAAa,EAAkB,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,+DAA+D;QAC/D,qEAAqE;QACrE,IAAA,WAAE,EAAC,gBAAgB,EAAE,GAAG,EAAE;YAExB,IAAA,qBAAY,GAAsB,CAAC,aAAa,EAAU,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,qBAAqB,EAAE,GAAG,EAAE;QAgBnC,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAAiC,CAAC,aAAa,EAA+B,CAAC;QAC7F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,2BAA2B,EAAE,GAAG,EAAE;QAgBzC,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAAuC,CAAC,aAAa,EAAqC,CAAC;QACzG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,uBAAuB,EAAE,GAAG,EAAE;QAOrC,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAET,CAAC,aAAa,EAEd,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,aAAa,EAAE,GAAG,EAAE;QAkB3B,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAAyB,CAAC,aAAa,EAAuB,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,aAAa,EAAE,GAAG,EAAE;QAY3B,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAAyB,CAAC,QAAQ,EAAuB,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;QAG7B,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAA2B,CAAC,aAAa,EAAyB,CAAC;QACjF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;QAQ5B,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAA0B,CAAC,aAAa,EAAwB,CAAC;QAC/E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,QAAQ,EAAE,GAAG,EAAE;QAYtB,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAAoB,CAAC,aAAa,EAAkB,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,aAAa,EAAE,GAAG,EAAE;QAa3B,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAAyB,CAAC,aAAa,EAAuB,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;QAOlC,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,IAAA,qBAAY,GAAgC,CAAC,aAAa,EAA8B,CAAC;QAC3F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expectTypeOf, it } from \"vitest\";\nimport * as Stagehand from \"@browserbasehq/stagehand\";\n\n// Type-level manifest of all expected exported types\n// Since these types don't exist at runtime, we currently need to manually add new publicly exported types\n// to this list ourselves - it's not automatically going to catch changes like our export-surface.test.ts does.\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype ExpectedExportedTypes = {\n // Types from model.ts\n AvailableModel: Stagehand.AvailableModel;\n AvailableCuaModel: Stagehand.AvailableCuaModel;\n ModelProvider: Stagehand.ModelProvider;\n ClientOptions: Stagehand.ClientOptions;\n ModelConfiguration: Stagehand.ModelConfiguration;\n AnthropicJsonSchemaObject: Stagehand.AnthropicJsonSchemaObject;\n AISDKProvider: Stagehand.AISDKProvider;\n AISDKCustomProvider: Stagehand.AISDKCustomProvider;\n LLMTool: Stagehand.LLMTool;\n // Types from methods.ts\n ActOptions: Stagehand.ActOptions;\n ActResult: Stagehand.ActResult;\n ExtractResult: Stagehand.ExtractResult<Stagehand.StagehandZodSchema>;\n Action: Stagehand.Action;\n HistoryEntry: Stagehand.HistoryEntry;\n ExtractOptions: Stagehand.ExtractOptions;\n ObserveOptions: Stagehand.ObserveOptions;\n ObserveResult: Stagehand.ObserveResult;\n V3FunctionName: Stagehand.V3FunctionName;\n // Types from agent.ts\n Tool: Stagehand.Tool;\n AgentAction: Stagehand.AgentAction;\n AgentResult: Stagehand.AgentResult;\n AgentExecuteOptions: Stagehand.AgentExecuteOptions;\n AgentType: Stagehand.AgentType;\n AgentExecutionOptions: Stagehand.AgentExecutionOptions<Stagehand.AgentExecuteOptions>;\n AgentHandlerOptions: Stagehand.AgentHandlerOptions;\n ActionExecutionResult: Stagehand.ActionExecutionResult;\n ToolUseItem: Stagehand.ToolUseItem;\n AnthropicMessage: Stagehand.AnthropicMessage;\n AnthropicContentBlock: Stagehand.AnthropicContentBlock;\n AnthropicTextBlock: Stagehand.AnthropicTextBlock;\n AnthropicToolResult: Stagehand.AnthropicToolResult;\n ResponseItem: Stagehand.ResponseItem;\n ComputerCallItem: Stagehand.ComputerCallItem;\n FunctionCallItem: Stagehand.FunctionCallItem;\n ResponseInputItem: Stagehand.ResponseInputItem;\n AgentInstance: Stagehand.AgentInstance;\n AgentProviderType: Stagehand.AgentProviderType;\n AgentModelConfig: Stagehand.AgentModelConfig;\n AgentConfig: Stagehand.AgentConfig;\n AgentToolMode: Stagehand.AgentToolMode;\n VariableValue: Stagehand.VariableValue;\n Variables: Stagehand.Variables;\n AgentCallbacks: Stagehand.AgentCallbacks;\n AgentExecuteCallbacks: Stagehand.AgentExecuteCallbacks;\n AgentStreamCallbacks: Stagehand.AgentStreamCallbacks;\n AgentExecuteOptionsBase: Stagehand.AgentExecuteOptionsBase;\n AgentStreamExecuteOptions: Stagehand.AgentStreamExecuteOptions;\n ModelMessage: Stagehand.ModelMessage;\n // Types from agent/tools\n AgentTools: Stagehand.AgentTools;\n AgentToolTypesMap: Stagehand.AgentToolTypesMap;\n AgentUITools: Stagehand.AgentUITools;\n AgentToolCall: Stagehand.AgentToolCall;\n AgentToolResult: Stagehand.AgentToolResult;\n // Types from logs.ts\n LogLevel: Stagehand.LogLevel;\n LogLine: Stagehand.LogLine;\n Logger: Stagehand.Logger;\n // Types from metrics.ts\n StagehandMetrics: Stagehand.StagehandMetrics;\n // Types from options.ts\n V3Env: Stagehand.V3Env;\n LocalBrowserLaunchOptions: Stagehand.LocalBrowserLaunchOptions;\n V3Options: Stagehand.V3Options;\n // Types from page.ts\n AnyPage: Stagehand.AnyPage;\n Page: Stagehand.Page;\n PlaywrightPage: Stagehand.PlaywrightPage;\n PatchrightPage: Stagehand.PatchrightPage;\n PuppeteerPage: Stagehand.PuppeteerPage;\n ConsoleListener: Stagehand.ConsoleListener;\n LoadState: Stagehand.LoadState;\n // Types from LLMClient.ts\n ChatMessage: Stagehand.ChatMessage;\n ChatMessageContent: Stagehand.ChatMessageContent;\n ChatMessageImageContent: Stagehand.ChatMessageImageContent;\n ChatMessageTextContent: Stagehand.ChatMessageTextContent;\n ChatCompletionOptions: Stagehand.ChatCompletionOptions;\n LLMResponse: Stagehand.LLMResponse;\n CreateChatCompletionOptions: Stagehand.CreateChatCompletionOptions;\n LLMUsage: Stagehand.LLMUsage;\n LLMParsedResponse: Stagehand.LLMParsedResponse<Record<string, unknown>>;\n // Types from zodCompat.ts\n StagehandZodSchema: Stagehand.StagehandZodSchema;\n StagehandZodObject: Stagehand.StagehandZodObject;\n InferStagehandSchema: Stagehand.InferStagehandSchema<Stagehand.StagehandZodSchema>;\n JsonSchemaDocument: Stagehand.JsonSchemaDocument;\n // Types from utils.ts\n JsonSchema: Stagehand.JsonSchema;\n JsonSchemaProperty: Stagehand.JsonSchemaProperty;\n // Types from cookies.ts\n Cookie: Stagehand.Cookie;\n CookieParam: Stagehand.CookieParam;\n ClearCookieOptions: Stagehand.ClearCookieOptions;\n};\n\ndescribe(\"Stagehand public API types\", () => {\n describe(\"AnyPage\", () => {\n type ExpectedAnyPage =\n | Stagehand.PlaywrightPage\n | Stagehand.PuppeteerPage\n | Stagehand.PatchrightPage\n | Stagehand.Page;\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AnyPage>().toEqualTypeOf<ExpectedAnyPage>();\n });\n });\n\n describe(\"ActOptions\", () => {\n type ExpectedActOptions = {\n model?: Stagehand.ModelConfiguration;\n variables?: Stagehand.Variables;\n timeout?: number;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ActOptions>().toEqualTypeOf<ExpectedActOptions>();\n });\n });\n\n describe(\"ActResult\", () => {\n type ExpectedActResult = {\n success: boolean;\n message: string;\n actionDescription: string;\n actions: Stagehand.Action[];\n cacheStatus?: \"HIT\" | \"MISS\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ActResult>().toEqualTypeOf<ExpectedActResult>();\n });\n });\n\n describe(\"ExtractOptions\", () => {\n type ExpectedExtractOptions = {\n model?: Stagehand.ModelConfiguration;\n timeout?: number;\n selector?: string;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ExtractOptions>().toEqualTypeOf<ExpectedExtractOptions>();\n });\n });\n\n describe(\"ObserveOptions\", () => {\n type ExpectedObserveOptions = {\n model?: Stagehand.ModelConfiguration;\n timeout?: number;\n selector?: string;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ObserveOptions>().toEqualTypeOf<ExpectedObserveOptions>();\n });\n });\n\n describe(\"ObserveResult\", () => {\n it(\"is an Action array with optional cacheStatus\", () => {\n expectTypeOf<Stagehand.ObserveResult>().toExtend<Stagehand.Action[]>();\n expectTypeOf<Stagehand.ObserveResult[\"cacheStatus\"]>().toEqualTypeOf<\n \"HIT\" | \"MISS\" | undefined\n >();\n });\n });\n\n describe(\"Action\", () => {\n type ExpectedAction = {\n selector: string;\n description: string;\n method?: string;\n arguments?: string[];\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.Action>().toEqualTypeOf<ExpectedAction>();\n });\n });\n\n describe(\"AgentAction\", () => {\n // AgentAction is a separate type from Action, not an extension\n // It has additional fields like type, reasoning, taskCompleted, etc.\n it(\"has type field\", () => {\n type TestAction = { type: string } & Stagehand.AgentAction;\n expectTypeOf<TestAction[\"type\"]>().toEqualTypeOf<string>();\n });\n });\n\n describe(\"AgentExecuteOptions\", () => {\n type ExpectedAgentExecuteOptions = {\n instruction: string;\n maxSteps?: number;\n page?: Stagehand.AnyPage;\n highlightCursor?: boolean;\n messages?: Stagehand.ModelMessage[];\n signal?: AbortSignal;\n excludeTools?: string[];\n output?: Stagehand.StagehandZodObject;\n callbacks?: Stagehand.AgentExecuteCallbacks;\n variables?: Stagehand.Variables;\n toolTimeout?: number;\n useSearch?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentExecuteOptions>().toEqualTypeOf<ExpectedAgentExecuteOptions>();\n });\n });\n\n describe(\"AgentStreamExecuteOptions\", () => {\n type ExpectedAgentStreamExecuteOptions = {\n instruction: string;\n maxSteps?: number;\n page?: Stagehand.AnyPage;\n highlightCursor?: boolean;\n messages?: Stagehand.ModelMessage[];\n signal?: AbortSignal;\n excludeTools?: string[];\n output?: Stagehand.StagehandZodObject;\n callbacks?: Stagehand.AgentStreamCallbacks;\n variables?: Stagehand.Variables;\n toolTimeout?: number;\n useSearch?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentStreamExecuteOptions>().toEqualTypeOf<ExpectedAgentStreamExecuteOptions>();\n });\n });\n\n describe(\"AgentExecutionOptions\", () => {\n type ExpectedAgentExecutionOptions<T = Stagehand.AgentExecuteOptions> = {\n options: T;\n logger: (message: Stagehand.LogLine) => void;\n retries?: number;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<\n Stagehand.AgentExecutionOptions<Stagehand.AgentExecuteOptions>\n >().toEqualTypeOf<\n ExpectedAgentExecutionOptions<Stagehand.AgentExecuteOptions>\n >();\n });\n });\n\n describe(\"AgentResult\", () => {\n type ExpectedAgentResult = {\n success: boolean;\n message: string;\n actions: Stagehand.AgentAction[];\n completed: boolean;\n metadata?: Record<string, unknown>;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n reasoning_tokens?: number;\n cached_input_tokens?: number;\n inference_time_ms: number;\n };\n messages?: Stagehand.ModelMessage[];\n output?: Record<string, unknown>;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentResult>().toEqualTypeOf<ExpectedAgentResult>();\n });\n });\n\n describe(\"AgentConfig\", () => {\n type ExpectedAgentConfig = {\n systemPrompt?: string;\n integrations?: (unknown | string)[];\n tools?: unknown;\n cua?: boolean;\n model?: string | Stagehand.AgentModelConfig<string>;\n executionModel?: string | Stagehand.AgentModelConfig<string>;\n stream?: boolean;\n mode?: Stagehand.AgentToolMode;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentConfig>().toExtend<ExpectedAgentConfig>();\n });\n });\n\n describe(\"AgentToolMode\", () => {\n type ExpectedAgentToolMode = \"dom\" | \"hybrid\" | \"cua\";\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentToolMode>().toEqualTypeOf<ExpectedAgentToolMode>();\n });\n });\n\n describe(\"HistoryEntry\", () => {\n type ExpectedHistoryEntry = {\n method: \"act\" | \"extract\" | \"observe\" | \"navigate\" | \"agent\";\n parameters: unknown;\n result: unknown;\n timestamp: string;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.HistoryEntry>().toEqualTypeOf<ExpectedHistoryEntry>();\n });\n });\n\n describe(\"Cookie\", () => {\n type ExpectedCookie = {\n name: string;\n value: string;\n domain: string;\n path: string;\n expires: number;\n httpOnly: boolean;\n secure: boolean;\n sameSite: \"Strict\" | \"Lax\" | \"None\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.Cookie>().toEqualTypeOf<ExpectedCookie>();\n });\n });\n\n describe(\"CookieParam\", () => {\n type ExpectedCookieParam = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n expires?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.CookieParam>().toEqualTypeOf<ExpectedCookieParam>();\n });\n });\n\n describe(\"ClearCookieOptions\", () => {\n type ExpectedClearCookieOptions = {\n name?: string | RegExp;\n domain?: string | RegExp;\n path?: string | RegExp;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ClearCookieOptions>().toEqualTypeOf<ExpectedClearCookieOptions>();\n });\n });\n});\n"]}
@@ -4,10 +4,7 @@ import { buildActSystemPrompt, buildExtractSystemPrompt, buildExtractUserPrompt,
4
4
  import { appendSummary, writeTimestampedTxtFile } from "./inferenceLogUtils.js";
5
5
  import { SupportedUnderstudyAction } from "./v3/types/private/handlers.js";
6
6
  function withLlmTimeout(promise, operation) {
7
- const timeoutMs = getEnvTimeoutMs("LLM_MAX_MS");
8
- if (!timeoutMs)
9
- return promise;
10
- return withTimeout(promise, timeoutMs, `LLM ${operation}`);
7
+ return withTimeout(promise, getEnvTimeoutMs("LLM_MAX_MS"), `LLM ${operation}`);
11
8
  }
12
9
  export async function extract({ instruction, domElements, schema, llmClient, logger, userProvidedInstructions, logInferenceToFile = false, }) {
13
10
  const metadataSchema = z.object({
@@ -1 +1 @@
1
- {"version":3,"file":"inference.js","sourceRoot":"","sources":["../../../lib/inference.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { LogLine } from \"./v3/types/public/logs.js\";\nimport { ChatMessage, LLMClient } from \"./v3/llm/LLMClient.js\";\nimport { getEnvTimeoutMs, withTimeout } from \"./v3/timeoutConfig.js\";\nimport {\n buildActSystemPrompt,\n buildExtractSystemPrompt,\n buildExtractUserPrompt,\n buildMetadataPrompt,\n buildMetadataSystemPrompt,\n buildObserveSystemPrompt,\n buildObserveUserMessage,\n} from \"./prompt.js\";\nimport { appendSummary, writeTimestampedTxtFile } from \"./inferenceLogUtils.js\";\nimport type {\n InferStagehandSchema,\n StagehandZodObject,\n} from \"./v3/zodCompat.js\";\nimport { SupportedUnderstudyAction } from \"./v3/types/private/handlers.js\";\n\n// Re-export for backward compatibility\nexport type { LLMParsedResponse, LLMUsage } from \"./v3/llm/LLMClient.js\";\n\nfunction withLlmTimeout<T>(promise: Promise<T>, operation: string): Promise<T> {\n const timeoutMs = getEnvTimeoutMs(\"LLM_MAX_MS\");\n if (!timeoutMs) return promise;\n return withTimeout(promise, timeoutMs, `LLM ${operation}`);\n}\n\nexport async function extract<T extends StagehandZodObject>({\n instruction,\n domElements,\n schema,\n llmClient,\n logger,\n userProvidedInstructions,\n logInferenceToFile = false,\n}: {\n instruction: string;\n domElements: string;\n schema: T;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n}) {\n const metadataSchema = z.object({\n progress: z\n .string()\n .describe(\n \"progress of what has been extracted so far, as concise as possible\",\n ),\n completed: z\n .boolean()\n .describe(\n \"true if the goal is now accomplished. Use this conservatively, only when sure that the goal has been completed.\",\n ),\n });\n\n type ExtractionResponse = InferStagehandSchema<T>;\n type MetadataResponse = z.infer<typeof metadataSchema>;\n\n const isUsingAnthropic = llmClient.type === \"anthropic\";\n const isGPT5 = llmClient.modelName.includes(\"gpt-5\"); // TODO: remove this as we update support for gpt-5 configuration options\n\n const extractCallMessages: ChatMessage[] = [\n buildExtractSystemPrompt(isUsingAnthropic, userProvidedInstructions),\n buildExtractUserPrompt(instruction, domElements, isUsingAnthropic),\n ];\n\n let extractCallFile = \"\";\n let extractCallTimestamp = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"extract_call\",\n {\n modelCall: \"extract\",\n messages: extractCallMessages,\n },\n );\n extractCallFile = fileName;\n extractCallTimestamp = timestamp;\n }\n\n const extractStartTime = Date.now();\n const extractionResponse = await withLlmTimeout(\n llmClient.createChatCompletion<ExtractionResponse>({\n options: {\n messages: extractCallMessages,\n response_model: {\n schema,\n name: \"Extraction\",\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n }),\n \"extract\",\n );\n const extractEndTime = Date.now();\n\n const { data: extractedData, usage: extractUsage } = extractionResponse;\n\n let extractResponseFile: string;\n if (logInferenceToFile) {\n const { fileName } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"extract_response\",\n {\n modelResponse: \"extract\",\n rawResponse: extractedData,\n },\n );\n extractResponseFile = fileName;\n\n appendSummary(\"extract\", {\n extract_inference_type: \"extract\",\n timestamp: extractCallTimestamp,\n LLM_input_file: extractCallFile,\n LLM_output_file: extractResponseFile,\n prompt_tokens: extractUsage?.prompt_tokens ?? 0,\n completion_tokens: extractUsage?.completion_tokens ?? 0,\n reasoning_tokens: extractUsage?.reasoning_tokens ?? 0,\n cached_input_tokens: extractUsage?.cached_input_tokens ?? 0,\n inference_time_ms: extractEndTime - extractStartTime,\n });\n }\n\n const metadataCallMessages: ChatMessage[] = [\n buildMetadataSystemPrompt(),\n buildMetadataPrompt(instruction, extractedData),\n ];\n\n let metadataCallFile = \"\";\n let metadataCallTimestamp = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"metadata_call\",\n {\n modelCall: \"metadata\",\n messages: metadataCallMessages,\n },\n );\n metadataCallFile = fileName;\n metadataCallTimestamp = timestamp;\n }\n\n const metadataStartTime = Date.now();\n const metadataResponse = await withLlmTimeout(\n llmClient.createChatCompletion<MetadataResponse>({\n options: {\n messages: metadataCallMessages,\n response_model: {\n name: \"Metadata\",\n schema: metadataSchema,\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n }),\n \"extract metadata\",\n );\n const metadataEndTime = Date.now();\n\n const {\n data: {\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n usage: metadataResponseUsage,\n } = metadataResponse;\n\n let metadataResponseFile: string;\n if (logInferenceToFile) {\n const { fileName } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"metadata_response\",\n {\n modelResponse: \"metadata\",\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n );\n metadataResponseFile = fileName;\n\n appendSummary(\"extract\", {\n extract_inference_type: \"metadata\",\n timestamp: metadataCallTimestamp,\n LLM_input_file: metadataCallFile,\n LLM_output_file: metadataResponseFile,\n prompt_tokens: metadataResponseUsage?.prompt_tokens ?? 0,\n completion_tokens: metadataResponseUsage?.completion_tokens ?? 0,\n reasoning_tokens: metadataResponseUsage?.reasoning_tokens ?? 0,\n cached_input_tokens: metadataResponseUsage?.cached_input_tokens ?? 0,\n inference_time_ms: metadataEndTime - metadataStartTime,\n });\n }\n\n const totalPromptTokens =\n (extractUsage?.prompt_tokens ?? 0) +\n (metadataResponseUsage?.prompt_tokens ?? 0);\n\n const totalCompletionTokens =\n (extractUsage?.completion_tokens ?? 0) +\n (metadataResponseUsage?.completion_tokens ?? 0);\n\n const totalInferenceTimeMs =\n extractEndTime - extractStartTime + (metadataEndTime - metadataStartTime);\n const totalReasoningTokens =\n (extractUsage?.reasoning_tokens ?? 0) +\n (metadataResponseUsage?.reasoning_tokens ?? 0);\n const totalCachedInputTokens =\n (extractUsage?.cached_input_tokens ?? 0) +\n (metadataResponseUsage?.cached_input_tokens ?? 0);\n\n return {\n ...extractedData,\n metadata: {\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n prompt_tokens: totalPromptTokens,\n completion_tokens: totalCompletionTokens,\n reasoning_tokens: totalReasoningTokens,\n cached_input_tokens: totalCachedInputTokens,\n inference_time_ms: totalInferenceTimeMs,\n };\n}\n\nexport async function observe({\n instruction,\n domElements,\n llmClient,\n userProvidedInstructions,\n logger,\n logInferenceToFile = false,\n supportedActions,\n}: {\n instruction: string;\n domElements: string;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n supportedActions?: string[];\n}) {\n const isGPT5 = llmClient.modelName.includes(\"gpt-5\"); // TODO: remove this as we update support for gpt-5 configuration options\n\n const observeSchema = z.object({\n elements: z\n .array(\n z.object({\n elementId: z\n .string()\n .regex(/^\\d+-\\d+$/)\n .describe(\n \"the ID string associated with the element. Never include surrounding square brackets. This field must follow the format of 'number-number'.\",\n ),\n description: z\n .string()\n .describe(\n \"a description of the accessible element and its purpose\",\n ),\n method: z\n .enum(\n // Use Object.values() for Zod v3 compatibility - z.enum() in v3 doesn't accept TypeScript enums directly\n Object.values(SupportedUnderstudyAction) as unknown as readonly [\n string,\n ...string[],\n ],\n )\n .describe(\n `the candidate method/action to interact with the element. Select one of the available Understudy interaction methods.`,\n ),\n arguments: z.array(\n z\n .string()\n .describe(\n \"the arguments to pass to the method. For example, for a click, the arguments are empty, but for a fill, the arguments are the value to fill in.\",\n ),\n ),\n }),\n )\n .describe(\"an array of accessible elements that match the instruction\"),\n });\n\n type ObserveResponse = z.infer<typeof observeSchema>;\n\n const messages: ChatMessage[] = [\n buildObserveSystemPrompt(userProvidedInstructions, supportedActions),\n buildObserveUserMessage(instruction, domElements),\n ];\n\n let callTimestamp = \"\";\n let callFile = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n `observe_summary`,\n `observe_call`,\n {\n modelCall: \"observe\",\n messages,\n },\n );\n callFile = fileName;\n callTimestamp = timestamp;\n }\n\n const start = Date.now();\n const rawResponse = await llmClient.createChatCompletion<ObserveResponse>({\n options: {\n messages,\n response_model: {\n schema: observeSchema,\n name: \"Observation\",\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n });\n const end = Date.now();\n const usageTimeMs = end - start;\n\n const { data: observeData, usage: observeUsage } = rawResponse;\n const promptTokens = observeUsage?.prompt_tokens ?? 0;\n const completionTokens = observeUsage?.completion_tokens ?? 0;\n const reasoningTokens = observeUsage?.reasoning_tokens ?? 0;\n const cachedInputTokens = observeUsage?.cached_input_tokens ?? 0;\n\n let responseFile: string;\n if (logInferenceToFile) {\n const { fileName: responseFileName } = writeTimestampedTxtFile(\n `observe_summary`,\n `observe_response`,\n {\n modelResponse: \"observe\",\n rawResponse: observeData,\n },\n );\n responseFile = responseFileName;\n\n appendSummary(\"observe\", {\n [`observe_inference_type`]: \"observe\",\n timestamp: callTimestamp,\n LLM_input_file: callFile,\n LLM_output_file: responseFile,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n });\n }\n\n const parsedElements =\n observeData.elements?.map((el) => {\n const base = {\n elementId: el.elementId,\n description: String(el.description),\n method: String(el.method),\n arguments: el.arguments,\n };\n return base;\n }) ?? [];\n\n return {\n elements: parsedElements,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n };\n}\n\nexport async function act({\n instruction,\n domElements,\n llmClient,\n userProvidedInstructions,\n logger,\n logInferenceToFile = false,\n}: {\n instruction: string;\n domElements: string;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n}) {\n const isGPT5 = llmClient.modelName.includes(\"gpt-5\"); // TODO: remove this as we update support for gpt-5 configuration options\n\n const actSchema = z.object({\n elementId: z\n .string()\n .regex(/^\\d+-\\d+$/)\n .describe(\n \"the ID string associated with the element. Never include surrounding square brackets. This field must follow the format of 'number-number'.\",\n ),\n description: z\n .string()\n .describe(\"a description of the accessible element and its purpose\"),\n method: z\n .enum(\n // Use Object.values() for Zod v3 compatibility - z.enum() in v3 doesn't accept TypeScript enums directly\n Object.values(SupportedUnderstudyAction) as unknown as readonly [\n string,\n ...string[],\n ],\n )\n .describe(\n \"the candidate method/action to interact with the element. Select one of the available Understudy interaction methods.\",\n ),\n arguments: z.array(\n z\n .string()\n .describe(\n \"the arguments to pass to the method. For example, for a click, the arguments are empty, but for a fill, the arguments are the value to fill in.\",\n ),\n ),\n twoStep: z.boolean(),\n });\n\n type ActResponse = z.infer<typeof actSchema>;\n\n const messages: ChatMessage[] = [\n buildActSystemPrompt(userProvidedInstructions),\n buildObserveUserMessage(instruction, domElements),\n ];\n\n let callTimestamp = \"\";\n let callFile = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n `act_summary`,\n `act_call`,\n {\n modelCall: \"act\",\n messages,\n },\n );\n callFile = fileName;\n callTimestamp = timestamp;\n }\n\n const start = Date.now();\n const rawResponse = await llmClient.createChatCompletion<ActResponse>({\n options: {\n messages,\n response_model: {\n schema: actSchema,\n name: \"act\",\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n });\n const end = Date.now();\n const usageTimeMs = end - start;\n\n const { data: actData, usage: actUsage } = rawResponse;\n const promptTokens = actUsage?.prompt_tokens ?? 0;\n const completionTokens = actUsage?.completion_tokens ?? 0;\n const reasoningTokens = actUsage?.reasoning_tokens ?? 0;\n const cachedInputTokens = actUsage?.cached_input_tokens ?? 0;\n\n let responseFile: string;\n if (logInferenceToFile) {\n const { fileName: responseFileName } = writeTimestampedTxtFile(\n `act_summary`,\n `act_response`,\n {\n modelResponse: \"act\",\n rawResponse: actData,\n },\n );\n responseFile = responseFileName;\n\n appendSummary(\"act\", {\n [`act_inference_type`]: \"act\",\n timestamp: callTimestamp,\n LLM_input_file: callFile,\n LLM_output_file: responseFile,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n });\n }\n\n const parsedElement = {\n elementId: actData.elementId,\n description: String(actData.description),\n method: String(actData.method),\n arguments: actData.arguments,\n };\n\n return {\n element: parsedElement,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n twoStep: actData.twoStep,\n };\n}\n"]}
1
+ {"version":3,"file":"inference.js","sourceRoot":"","sources":["../../../lib/inference.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { LogLine } from \"./v3/types/public/logs.js\";\nimport { ChatMessage, LLMClient } from \"./v3/llm/LLMClient.js\";\nimport { getEnvTimeoutMs, withTimeout } from \"./v3/timeoutConfig.js\";\nimport {\n buildActSystemPrompt,\n buildExtractSystemPrompt,\n buildExtractUserPrompt,\n buildMetadataPrompt,\n buildMetadataSystemPrompt,\n buildObserveSystemPrompt,\n buildObserveUserMessage,\n} from \"./prompt.js\";\nimport { appendSummary, writeTimestampedTxtFile } from \"./inferenceLogUtils.js\";\nimport type {\n InferStagehandSchema,\n StagehandZodObject,\n} from \"./v3/zodCompat.js\";\nimport { SupportedUnderstudyAction } from \"./v3/types/private/handlers.js\";\n\n// Re-export for backward compatibility\nexport type { LLMParsedResponse, LLMUsage } from \"./v3/llm/LLMClient.js\";\n\nfunction withLlmTimeout<T>(promise: Promise<T>, operation: string): Promise<T> {\n return withTimeout(\n promise,\n getEnvTimeoutMs(\"LLM_MAX_MS\"),\n `LLM ${operation}`,\n );\n}\n\nexport async function extract<T extends StagehandZodObject>({\n instruction,\n domElements,\n schema,\n llmClient,\n logger,\n userProvidedInstructions,\n logInferenceToFile = false,\n}: {\n instruction: string;\n domElements: string;\n schema: T;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n}) {\n const metadataSchema = z.object({\n progress: z\n .string()\n .describe(\n \"progress of what has been extracted so far, as concise as possible\",\n ),\n completed: z\n .boolean()\n .describe(\n \"true if the goal is now accomplished. Use this conservatively, only when sure that the goal has been completed.\",\n ),\n });\n\n type ExtractionResponse = InferStagehandSchema<T>;\n type MetadataResponse = z.infer<typeof metadataSchema>;\n\n const isUsingAnthropic = llmClient.type === \"anthropic\";\n const isGPT5 = llmClient.modelName.includes(\"gpt-5\"); // TODO: remove this as we update support for gpt-5 configuration options\n\n const extractCallMessages: ChatMessage[] = [\n buildExtractSystemPrompt(isUsingAnthropic, userProvidedInstructions),\n buildExtractUserPrompt(instruction, domElements, isUsingAnthropic),\n ];\n\n let extractCallFile = \"\";\n let extractCallTimestamp = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"extract_call\",\n {\n modelCall: \"extract\",\n messages: extractCallMessages,\n },\n );\n extractCallFile = fileName;\n extractCallTimestamp = timestamp;\n }\n\n const extractStartTime = Date.now();\n const extractionResponse = await withLlmTimeout(\n llmClient.createChatCompletion<ExtractionResponse>({\n options: {\n messages: extractCallMessages,\n response_model: {\n schema,\n name: \"Extraction\",\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n }),\n \"extract\",\n );\n const extractEndTime = Date.now();\n\n const { data: extractedData, usage: extractUsage } = extractionResponse;\n\n let extractResponseFile: string;\n if (logInferenceToFile) {\n const { fileName } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"extract_response\",\n {\n modelResponse: \"extract\",\n rawResponse: extractedData,\n },\n );\n extractResponseFile = fileName;\n\n appendSummary(\"extract\", {\n extract_inference_type: \"extract\",\n timestamp: extractCallTimestamp,\n LLM_input_file: extractCallFile,\n LLM_output_file: extractResponseFile,\n prompt_tokens: extractUsage?.prompt_tokens ?? 0,\n completion_tokens: extractUsage?.completion_tokens ?? 0,\n reasoning_tokens: extractUsage?.reasoning_tokens ?? 0,\n cached_input_tokens: extractUsage?.cached_input_tokens ?? 0,\n inference_time_ms: extractEndTime - extractStartTime,\n });\n }\n\n const metadataCallMessages: ChatMessage[] = [\n buildMetadataSystemPrompt(),\n buildMetadataPrompt(instruction, extractedData),\n ];\n\n let metadataCallFile = \"\";\n let metadataCallTimestamp = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"metadata_call\",\n {\n modelCall: \"metadata\",\n messages: metadataCallMessages,\n },\n );\n metadataCallFile = fileName;\n metadataCallTimestamp = timestamp;\n }\n\n const metadataStartTime = Date.now();\n const metadataResponse = await withLlmTimeout(\n llmClient.createChatCompletion<MetadataResponse>({\n options: {\n messages: metadataCallMessages,\n response_model: {\n name: \"Metadata\",\n schema: metadataSchema,\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n }),\n \"extract metadata\",\n );\n const metadataEndTime = Date.now();\n\n const {\n data: {\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n usage: metadataResponseUsage,\n } = metadataResponse;\n\n let metadataResponseFile: string;\n if (logInferenceToFile) {\n const { fileName } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"metadata_response\",\n {\n modelResponse: \"metadata\",\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n );\n metadataResponseFile = fileName;\n\n appendSummary(\"extract\", {\n extract_inference_type: \"metadata\",\n timestamp: metadataCallTimestamp,\n LLM_input_file: metadataCallFile,\n LLM_output_file: metadataResponseFile,\n prompt_tokens: metadataResponseUsage?.prompt_tokens ?? 0,\n completion_tokens: metadataResponseUsage?.completion_tokens ?? 0,\n reasoning_tokens: metadataResponseUsage?.reasoning_tokens ?? 0,\n cached_input_tokens: metadataResponseUsage?.cached_input_tokens ?? 0,\n inference_time_ms: metadataEndTime - metadataStartTime,\n });\n }\n\n const totalPromptTokens =\n (extractUsage?.prompt_tokens ?? 0) +\n (metadataResponseUsage?.prompt_tokens ?? 0);\n\n const totalCompletionTokens =\n (extractUsage?.completion_tokens ?? 0) +\n (metadataResponseUsage?.completion_tokens ?? 0);\n\n const totalInferenceTimeMs =\n extractEndTime - extractStartTime + (metadataEndTime - metadataStartTime);\n const totalReasoningTokens =\n (extractUsage?.reasoning_tokens ?? 0) +\n (metadataResponseUsage?.reasoning_tokens ?? 0);\n const totalCachedInputTokens =\n (extractUsage?.cached_input_tokens ?? 0) +\n (metadataResponseUsage?.cached_input_tokens ?? 0);\n\n return {\n ...extractedData,\n metadata: {\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n prompt_tokens: totalPromptTokens,\n completion_tokens: totalCompletionTokens,\n reasoning_tokens: totalReasoningTokens,\n cached_input_tokens: totalCachedInputTokens,\n inference_time_ms: totalInferenceTimeMs,\n };\n}\n\nexport async function observe({\n instruction,\n domElements,\n llmClient,\n userProvidedInstructions,\n logger,\n logInferenceToFile = false,\n supportedActions,\n}: {\n instruction: string;\n domElements: string;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n supportedActions?: string[];\n}) {\n const isGPT5 = llmClient.modelName.includes(\"gpt-5\"); // TODO: remove this as we update support for gpt-5 configuration options\n\n const observeSchema = z.object({\n elements: z\n .array(\n z.object({\n elementId: z\n .string()\n .regex(/^\\d+-\\d+$/)\n .describe(\n \"the ID string associated with the element. Never include surrounding square brackets. This field must follow the format of 'number-number'.\",\n ),\n description: z\n .string()\n .describe(\n \"a description of the accessible element and its purpose\",\n ),\n method: z\n .enum(\n // Use Object.values() for Zod v3 compatibility - z.enum() in v3 doesn't accept TypeScript enums directly\n Object.values(SupportedUnderstudyAction) as unknown as readonly [\n string,\n ...string[],\n ],\n )\n .describe(\n `the candidate method/action to interact with the element. Select one of the available Understudy interaction methods.`,\n ),\n arguments: z.array(\n z\n .string()\n .describe(\n \"the arguments to pass to the method. For example, for a click, the arguments are empty, but for a fill, the arguments are the value to fill in.\",\n ),\n ),\n }),\n )\n .describe(\"an array of accessible elements that match the instruction\"),\n });\n\n type ObserveResponse = z.infer<typeof observeSchema>;\n\n const messages: ChatMessage[] = [\n buildObserveSystemPrompt(userProvidedInstructions, supportedActions),\n buildObserveUserMessage(instruction, domElements),\n ];\n\n let callTimestamp = \"\";\n let callFile = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n `observe_summary`,\n `observe_call`,\n {\n modelCall: \"observe\",\n messages,\n },\n );\n callFile = fileName;\n callTimestamp = timestamp;\n }\n\n const start = Date.now();\n const rawResponse = await llmClient.createChatCompletion<ObserveResponse>({\n options: {\n messages,\n response_model: {\n schema: observeSchema,\n name: \"Observation\",\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n });\n const end = Date.now();\n const usageTimeMs = end - start;\n\n const { data: observeData, usage: observeUsage } = rawResponse;\n const promptTokens = observeUsage?.prompt_tokens ?? 0;\n const completionTokens = observeUsage?.completion_tokens ?? 0;\n const reasoningTokens = observeUsage?.reasoning_tokens ?? 0;\n const cachedInputTokens = observeUsage?.cached_input_tokens ?? 0;\n\n let responseFile: string;\n if (logInferenceToFile) {\n const { fileName: responseFileName } = writeTimestampedTxtFile(\n `observe_summary`,\n `observe_response`,\n {\n modelResponse: \"observe\",\n rawResponse: observeData,\n },\n );\n responseFile = responseFileName;\n\n appendSummary(\"observe\", {\n [`observe_inference_type`]: \"observe\",\n timestamp: callTimestamp,\n LLM_input_file: callFile,\n LLM_output_file: responseFile,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n });\n }\n\n const parsedElements =\n observeData.elements?.map((el) => {\n const base = {\n elementId: el.elementId,\n description: String(el.description),\n method: String(el.method),\n arguments: el.arguments,\n };\n return base;\n }) ?? [];\n\n return {\n elements: parsedElements,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n };\n}\n\nexport async function act({\n instruction,\n domElements,\n llmClient,\n userProvidedInstructions,\n logger,\n logInferenceToFile = false,\n}: {\n instruction: string;\n domElements: string;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n}) {\n const isGPT5 = llmClient.modelName.includes(\"gpt-5\"); // TODO: remove this as we update support for gpt-5 configuration options\n\n const actSchema = z.object({\n elementId: z\n .string()\n .regex(/^\\d+-\\d+$/)\n .describe(\n \"the ID string associated with the element. Never include surrounding square brackets. This field must follow the format of 'number-number'.\",\n ),\n description: z\n .string()\n .describe(\"a description of the accessible element and its purpose\"),\n method: z\n .enum(\n // Use Object.values() for Zod v3 compatibility - z.enum() in v3 doesn't accept TypeScript enums directly\n Object.values(SupportedUnderstudyAction) as unknown as readonly [\n string,\n ...string[],\n ],\n )\n .describe(\n \"the candidate method/action to interact with the element. Select one of the available Understudy interaction methods.\",\n ),\n arguments: z.array(\n z\n .string()\n .describe(\n \"the arguments to pass to the method. For example, for a click, the arguments are empty, but for a fill, the arguments are the value to fill in.\",\n ),\n ),\n twoStep: z.boolean(),\n });\n\n type ActResponse = z.infer<typeof actSchema>;\n\n const messages: ChatMessage[] = [\n buildActSystemPrompt(userProvidedInstructions),\n buildObserveUserMessage(instruction, domElements),\n ];\n\n let callTimestamp = \"\";\n let callFile = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n `act_summary`,\n `act_call`,\n {\n modelCall: \"act\",\n messages,\n },\n );\n callFile = fileName;\n callTimestamp = timestamp;\n }\n\n const start = Date.now();\n const rawResponse = await llmClient.createChatCompletion<ActResponse>({\n options: {\n messages,\n response_model: {\n schema: actSchema,\n name: \"act\",\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n });\n const end = Date.now();\n const usageTimeMs = end - start;\n\n const { data: actData, usage: actUsage } = rawResponse;\n const promptTokens = actUsage?.prompt_tokens ?? 0;\n const completionTokens = actUsage?.completion_tokens ?? 0;\n const reasoningTokens = actUsage?.reasoning_tokens ?? 0;\n const cachedInputTokens = actUsage?.cached_input_tokens ?? 0;\n\n let responseFile: string;\n if (logInferenceToFile) {\n const { fileName: responseFileName } = writeTimestampedTxtFile(\n `act_summary`,\n `act_response`,\n {\n modelResponse: \"act\",\n rawResponse: actData,\n },\n );\n responseFile = responseFileName;\n\n appendSummary(\"act\", {\n [`act_inference_type`]: \"act\",\n timestamp: callTimestamp,\n LLM_input_file: callFile,\n LLM_output_file: responseFile,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n });\n }\n\n const parsedElement = {\n elementId: actData.elementId,\n description: String(actData.description),\n method: String(actData.method),\n arguments: actData.arguments,\n };\n\n return {\n element: parsedElement,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n twoStep: actData.twoStep,\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":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAU,IAAI,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAc,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,QAAQ,CAAC;AAKxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,UAAU,GAAG,WAAW,CAAC;AAE/B,MAAM,UAAU,GAAG;IACjB,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,EAAyB;CAC9B,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,MAA0B;IACpD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,aAAa,GAA2B;IAC5C,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,OAAO;IACd,eAAe,EAAE,cAAc;IAC/B,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,UAAU;IACvB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,UAAU;IACvB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,SAAS,QAAQ,CAAC,MAA0B;IAC1C,OAAQ,MAA0B,CAAC,IAAI,EAAE,GAE5B,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,MAA0B;IAC1C,OAAQ,MAA0B,CAAC,IAAI,EAAE,GAE5B,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,MAA0B;IAC1C,OAAQ,MAA0B,CAAC,IAEtB,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CACrB,MAA0B;IAE1B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,KAErB,CAAC;IACd,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,OAAQ,OAAoD,EAAE,CAAC;IACjE,CAAC;IAED,OAAO,OAA6C,CAAC;AACvD,CAAC;AAED,SAAS,eAAe,CACtB,MAA0B;IAE1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAE9C,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CACnB,MAA0B;IAE1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAErD,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACtB,MAA0B;IAE1B,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAiC,CAAC;IAC3C,CAAC;IACD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7B,CAAC,CAAE,SAAkC;QACrC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA0B;IAItD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;QAChC,OAAO;YACL,IAAI,EAAE,KAAK,EAAE,IAAsC;YACnD,KAAK,EAAE,KAAK,EAAE,KAAuC;SACtD,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,IAAsC;QACnD,KAAK,EAAE,KAAK,EAAE,KAAuC;KACtD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAA0B;IAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC5C,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,SAAmC,CAAC,CAAC;IAC5D,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,QAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA0B;IAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAqB,CAAC;IAC/B,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IACtC,OAAO,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,eAAe,CAAC,MAA0B;IACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,eAAe,CAAC,MAA0B;IACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC3C,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1C,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1C,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA0B;IAIlD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,KAAK,EAAE,EAAE,IAAI,KAAK,EAAE,GAAG,EAAE,CAAC;QAC5B,OAAO;YACL,EAAE,EAAE,KAAK,EAAE,EAAoC;YAC/C,GAAG,EAAE,KAAK,EAAE,GAAqC;SAClD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAA0B;IAE1B,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAwC,CAAC;AACpE,CAAC;AAOD,MAAM,UAAU,iBAAiB,CAAC,MAA0B,EAAE,IAAa;IACzE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,OAAO,CAAC,QAAQ,KAAK,WAAW;QACvC,KAAK,IAAI,OAAO,CAAC,QAAQ,CAC1B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAC3B,YAAoB,EACpB,SAAuB;IAEvB,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACxC,YAAY,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1B,YAAY,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;IACnD,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAA6B;IAC1D,MAAM,gBAAgB,GAAG,SAAyB,CAAC;IACnD,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACtD,OAAO,oBAAoB,CACzB;gBACE,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;aAC/B,EACD,gBAAgB,CACjB,CAAC;QACJ,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,UAAU,GAA2B,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;YAE9B,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAC3B,CAAC,CAAC,GAAG,EAAE,KAAK,CAA+B,EAAE,EAAE;oBAC7C,UAAU,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;oBACxC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,UAAU,EAAE,CAAC;wBACrC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC,CACF,CAAC;YACJ,CAAC;YAED,OAAO,oBAAoB,CACzB;gBACE,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,UAAU;gBACV,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;aACrD,EACD,gBAAgB,CACjB,CAAC;QACJ,CAAC;QACD,KAAK,QAAQ;YACX,OAAO,oBAAoB,CACzB;gBACE,IAAI,EAAE,IAAI,CAAC,MAAM;aAClB,EACD,gBAAgB,CACjB,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,oBAAoB,CACzB;gBACE,IAAI,EAAE,IAAI,CAAC,MAAM;aAClB,EACD,gBAAgB,CACjB,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,oBAAoB,CACzB;gBACE,IAAI,EAAE,IAAI,CAAC,OAAO;aACnB,EACD,gBAAgB,CACjB,CAAC;QACJ,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;YACxC,OAAO,oBAAoB,CACzB;gBACE,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,IAAI,EAAE,MAAM;aACb,EACD,gBAAgB,CACjB,CAAC;QACJ,CAAC;QACD,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACrD,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YAC9C,OAAO,oBAAoB,CACzB;gBACE,GAAG,WAAW;gBACd,QAAQ,EAAE,IAAI;aACf,EACD,gBAAgB,CACjB,CAAC;QACJ,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAC3C,OAAO,oBAAoB,CACzB;gBACE,IAAI,EAAE,IAAI,CAAC,MAAM;gBACjB,IAAI,EAAE,MAAkB;aACzB,EACD,gBAAgB,CACjB,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,oBAAoB,CACzB;gBACE,IAAI,EAAE,IAAI,CAAC,MAAM;aAClB,EACD,gBAAgB,CACjB,CAAC;QACJ,CAAC;QACD,sEAAsE;QACtE;YACE,OAAO,oBAAoB,CACzB;gBACE,IAAI,EAAE,IAAI,CAAC,MAAM;aAClB,EACD,gBAAgB,CACjB,CAAC;IACN,CAAC;AACH,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,UAAU,CAAC,MAA0B;IACnD,MAAM,aAAa,GAAG,MAErB,CAAC;IACF,MAAM,OAAO,GACV,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,IAA2B;QACpD,aAAa,CAAC,IAAI,EAAE,QAA+B;QACnD,aAAa,CAAC,IAAI,EAAE,IAA2B,CAAC;IAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAC7B,MAA0B,EAC1B,WAAmC;IAEnC,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,WAAW,GACf,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,MAAM,SAAS,GAAG,KAIjB,CAAC;YACF,OAAO,CACL,SAAS,CAAC,IAAI,KAAK,KAAK;gBACxB,SAAS,CAAC,MAAM,KAAK,KAAK;gBAC1B,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,KAAK;gBACpC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,KAAK,CACtC,CAAC;QACJ,CAAC,CAAC,IAAI,MAAM,KAAK,KAAK,CAAC;QAEzB,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,QAAQ,GAAuC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE;gBAC5D,GAAG,WAAW;gBACd,GAAG;aACJ,CAAC,CAAC;YACH,IAAI,gBAAgB,KAAK,KAAK,EAAE,CAAC;gBAC/B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC;YACjC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;gBACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO;gBACL,OAAO,CAAC,MAAM,CAAC,QAAwC,CAAC;gBACxD,QAAQ;aACT,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,QAAQ,EAAE;YAC9D,GAAG,WAAW;YACd,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,UAAU,GAAsB,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5D,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;SAChC,CAAC,CAAC,CAAC;QACJ,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO;gBACL,OAAO,CAAC,KAAK,CAAC,eAA0C,CAAC;gBACzD,UAAU;aACX,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,QAAQ,GAAsB,EAAE,CAAC;QAErC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACnC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE;gBACtD,GAAG,WAAW;gBACd,SAAS,GAAG,EAAE;aACf,CAAC,CAAC;YACH,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACzB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3B,QAAQ,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO;gBACL,OAAO,CAAC,KAAK,CACX,UAIC,CACF;gBACD,QAAQ;aACT,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;QACnC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE;YACjD,GAAG,WAAW;YACd,mBAAmB;SACpB,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE;YACpD,GAAG,WAAW;YACd,oBAAoB;SACrB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC;QACvD,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC;QAC/C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO;gBACL,OAAO,CAAC,YAAY,CAClB,OAAkC,EAClC,QAAmC,CACpC;gBACD,QAAQ;aACT,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACpE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO;gBACJ,KAAsB,CAAC,QAAQ,EAAmC;gBACnE,UAAU;aACX,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACpE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO;gBACJ,KAAsB,CAAC,QAAQ,EAAmC;gBACnE,UAAU;aACX,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC;QAE3C,IAAI,KAAK,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CACnB,KAAgC,EAChC,MAAiC,CACZ,CAAC;YACxB,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,GAAY,EACZ,IAA4B,EAC5B,cAAsC;IAEtC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,IAAI,GAAG,CAAC,KAAc,EAAsB,EAAE;QAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAE5B,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;wBACrB,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;oBACpC,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,IAAI,IAAI,GAAG;oBAAE,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,GAAuC,CAAC;QACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5B,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;AACH,CAAC;AAED,oDAAoD;AACpD,SAAS,MAAM,CAAC,CAAqB,EAAE,IAAY;IACjD,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAwB;IAClD,MAAM,QAAQ,GACX,IAA4C,CAAC,WAAW,IAAI,EAAE,CAAC;IAElE,MAAM,IAAI,GACR,oEAAoE;QACpE,iBAAiB,CAAC;IACpB,MAAM,QAAQ,GACZ,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACxB,CAAC,CAAC,GAAG,IAAI,gDAAgD,QAAQ,EAAE;QACnE,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAE1B;IACF,MAAM,EAAE,gBAAgB;IACxB,SAAS,EAAE,mBAAmB;IAC9B,MAAM,EAAE,CAAC,gBAAgB,EAAE,8BAA8B,EAAE,gBAAgB,CAAC;IAC5E,MAAM,EAAE,0BAA0B;IAClC,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,kBAAkB;IAC5B,UAAU,EAAE,qBAAqB;IACjC,OAAO,EAAE,iBAAiB;IAC1B,QAAQ,EAAE,kBAAkB;IAC5B,UAAU,EAAE,oBAAoB;IAChC,KAAK,EAAE,eAAe;IACtB,GAAG,EAAE,aAAa;IAClB,aAAa,EAAE,gBAAgB;CAChC,CAAC;AAEF,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA4B,EAC5B,MAAkC;IAElC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC;gBACL,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,+CAA+C,QAAQ,GAAG;gBACnE,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7C,CAAC,CAAC,UAAU;aACP,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aAChC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAoB,CAAC,CAAC;IACtC,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,uFAAuF;IACvF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAwB;IAExB,OAAO,IAAI,EAAE,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,CAAC,OAAO,CAChB,QAAQ,EACR,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAC3D,CAAC;AACJ,CAAC;AAkBD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAkB;IAChD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,MAAM,KAAK,GAA+B,EAAE,CAAC;gBAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACpC,KAAK,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvD,CAAC;gBACD,IAAI,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACtD,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAC3C,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAC3C,EAAE,CACH,CAAC;oBACF,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAC3D,CAAC;gBACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACvB,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACrD,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;QACH,KAAK,OAAO;YACV,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACvB,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACnD,CAAC;gBACD,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAE3B,kCAAkC;YAClC,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACvD,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;YAC9B,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBACrC,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YAChC,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpC,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;YACD,qCAAqC;YAErC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,UAAU,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD;YACE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC","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"]}
@@ -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"]}