promptfoo 0.125.0 → 0.125.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (869) hide show
  1. package/README.md +3 -3
  2. package/dist/src/accounts-BOxNYxVN.js +229 -0
  3. package/dist/src/accounts-BezXLdAW.cjs +276 -0
  4. package/dist/src/accounts-CPISMNlh.js +227 -0
  5. package/dist/src/accounts-vJBPs89d.js +222 -0
  6. package/dist/src/agentWorkspace-Bom7SpF2.js +592 -0
  7. package/dist/src/agentWorkspace-CEomAcws.cjs +619 -0
  8. package/dist/src/agentWorkspace-DPtMLrlI.js +593 -0
  9. package/dist/src/agentWorkspace-DkAeEYLz.js +592 -0
  10. package/dist/src/agentic-utils-121v7mJo.js +197 -0
  11. package/dist/src/agentic-utils-CBWD_rcd.cjs +237 -0
  12. package/dist/src/agentic-utils-D8wyQwPG.js +198 -0
  13. package/dist/src/agentic-utils-EP1QkQCs.js +197 -0
  14. package/dist/src/agents-Br3ah8iA.js +778 -0
  15. package/dist/src/agents-C5wj_UTv.js +777 -0
  16. package/dist/src/agents-C9Efp4mC.js +266 -0
  17. package/dist/src/agents-CQYwaVCO.js +267 -0
  18. package/dist/src/agents-CjCd4Vo8.js +777 -0
  19. package/dist/src/agents-DRWiCHYz.js +266 -0
  20. package/dist/src/agents-F2rhx0iL.cjs +266 -0
  21. package/dist/src/agents-RTYyy69h.cjs +777 -0
  22. package/dist/src/agents-api-CY72O86e.js +711 -0
  23. package/dist/src/agents-api-CsSsC21b.js +710 -0
  24. package/dist/src/agents-api-DN-ibDc8.js +710 -0
  25. package/dist/src/agents-api-cNDsCCv1.cjs +710 -0
  26. package/dist/src/ai.studio-Bj6Dyi6o.js +2 -0
  27. package/dist/src/ai.studio-C-e0LzyW.js +369 -0
  28. package/dist/src/ai.studio-CR8M6Aqf.cjs +391 -0
  29. package/dist/src/ai.studio-YKk7F0tv.js +374 -0
  30. package/dist/src/aimlapi-BGunsuTu.js +30 -0
  31. package/dist/src/aimlapi-BkzcfBsL.js +29 -0
  32. package/dist/src/aimlapi-DXFcEdP8.js +28 -0
  33. package/dist/src/aimlapi-r-8iCcAw.cjs +29 -0
  34. package/dist/src/anthropicMessages-7-YNRgQR.js +114 -0
  35. package/dist/src/anthropicMessages-C8m9Whrd.cjs +114 -0
  36. package/dist/src/anthropicMessages-DS1vXD0f.js +115 -0
  37. package/dist/src/anthropicMessages-DmvGkz-0.js +114 -0
  38. package/dist/src/app/assets/index-CrdXWTXm.js +392 -0
  39. package/dist/src/app/browser-inventory.json +4 -4
  40. package/dist/src/app/index.html +1 -1
  41. package/dist/src/audio-BLgFgyw-.cjs +104 -0
  42. package/dist/src/audio-C2sibT7Q.js +104 -0
  43. package/dist/src/audio-DXEXb03H.js +104 -0
  44. package/dist/src/audio-TkvojpwO.js +105 -0
  45. package/dist/src/authoritativeMarkupInjection-BAT9B-Wj.js +79 -0
  46. package/dist/src/authoritativeMarkupInjection-B_yHETKT.js +78 -0
  47. package/dist/src/authoritativeMarkupInjection-BfjecQ3Q.cjs +78 -0
  48. package/dist/src/authoritativeMarkupInjection-D-hDKrhD.js +78 -0
  49. package/dist/src/aws-B_9unI_-.js +1149 -0
  50. package/dist/src/aws-D0FY3qkc.js +2433 -0
  51. package/dist/src/aws-Dh1-a90n.js +2433 -0
  52. package/dist/src/aws-qskKGczY.cjs +2454 -0
  53. package/dist/src/base-CaWlBkVz.js +462 -0
  54. package/dist/src/base-CcViNwVs.js +255 -0
  55. package/dist/src/base-CsVbPJkU.cjs +467 -0
  56. package/dist/src/base-DNK9py25.js +255 -0
  57. package/dist/src/base-DlH5tjEZ.js +463 -0
  58. package/dist/src/base-DyLOZ_iX.js +256 -0
  59. package/dist/src/base-RRYXfG7l.cjs +305 -0
  60. package/dist/src/base-oXVgvtVn.js +462 -0
  61. package/dist/src/bedrock-BP17ZXbR.cjs +2 -0
  62. package/dist/src/bedrock-CsjM1dOt.js +1300 -0
  63. package/dist/src/bedrock-CzPwj8GO.js +1 -0
  64. package/dist/src/bedrock-eGXZw8oh.js +1 -0
  65. package/dist/src/bedrock-tSWjmXdj.js +2 -0
  66. package/dist/src/bestOfN-BQ93nUKV.js +160 -0
  67. package/dist/src/bestOfN-ByGGwlcb.cjs +161 -0
  68. package/dist/src/bestOfN-CbP7csHr.js +159 -0
  69. package/dist/src/bestOfN-xn6i2Xs2.js +159 -0
  70. package/dist/src/cache-CHq9hPz9.js +2 -0
  71. package/dist/src/cache-D-9eZN3I.js +754 -0
  72. package/dist/src/cache-DSm6t1MZ.js +741 -0
  73. package/dist/src/cache-DeF5zIEN.js +782 -0
  74. package/dist/src/cache-iG87oYan.cjs +856 -0
  75. package/dist/src/cerebras-CTtM4yMH.js +98 -0
  76. package/dist/src/cerebras-CogcJ3ce.cjs +97 -0
  77. package/dist/src/cerebras-DmkRypTh.js +97 -0
  78. package/dist/src/cerebras-GUp0B8JY.js +97 -0
  79. package/dist/src/chat-B4ihd3fw.js +226 -0
  80. package/dist/src/chat-B9cAQ_rS.js +227 -0
  81. package/dist/src/chat-BU7EB4R-.cjs +76 -0
  82. package/dist/src/chat-C8yxJ2-s.cjs +226 -0
  83. package/dist/src/chat-ClTFM3qq.js +934 -0
  84. package/dist/src/chat-Cnq0Is68.js +123 -0
  85. package/dist/src/chat-CwrurR57.cjs +987 -0
  86. package/dist/src/chat-D0lsojPv.js +124 -0
  87. package/dist/src/chat-D7_8yFIx.js +76 -0
  88. package/dist/src/chat-DCoETlLG.js +226 -0
  89. package/dist/src/chat-DHE7xaTR.js +76 -0
  90. package/dist/src/chat-DmhT6rz2.cjs +123 -0
  91. package/dist/src/chat-DvfMe8KI.js +123 -0
  92. package/dist/src/chat-DwP5kVnl.js +935 -0
  93. package/dist/src/chat-MB7U-QE2.js +77 -0
  94. package/dist/src/chat-zCWuBKAj.js +934 -0
  95. package/dist/src/claude-agent-sdk-23bIVI75.js +999 -0
  96. package/dist/src/claude-agent-sdk-BACpnIJi.cjs +1005 -0
  97. package/dist/src/claude-agent-sdk-BlYlmcEr.js +999 -0
  98. package/dist/src/claude-agent-sdk-Cr-jqJZl.js +1000 -0
  99. package/dist/src/client-BktbiPx9.cjs +357 -0
  100. package/dist/src/client-CjztEBmW.js +351 -0
  101. package/dist/src/client-mRs2UvH9.js +351 -0
  102. package/dist/src/client-uCz0ydjC.js +352 -0
  103. package/dist/src/cloud-BtYF555L.js +2 -0
  104. package/dist/src/cloud-CVSUEmAy.js +287 -0
  105. package/dist/src/cloud-D7Ifb-Fl.js +599 -0
  106. package/dist/src/cloud-DB5oK5NX.cjs +666 -0
  107. package/dist/src/cloud-ecu989Em.js +657 -0
  108. package/dist/src/cloud-ramjGURF.js +599 -0
  109. package/dist/src/cloudflare-ai-BfDkIjO8.js +133 -0
  110. package/dist/src/cloudflare-ai-D9HaXz1M.js +134 -0
  111. package/dist/src/cloudflare-ai-HrD5WUK8.js +132 -0
  112. package/dist/src/cloudflare-ai-Qdj8aKP2.cjs +133 -0
  113. package/dist/src/cloudflare-gateway-C81uKETQ.js +276 -0
  114. package/dist/src/cloudflare-gateway-CX5Z9X0k.js +276 -0
  115. package/dist/src/cloudflare-gateway-DW-og8gb.js +277 -0
  116. package/dist/src/cloudflare-gateway-iRyXo9n2.cjs +276 -0
  117. package/dist/src/codex-app-server-BFIrSgdy.js +2155 -0
  118. package/dist/src/codex-app-server-By1eDVD4.js +2 -0
  119. package/dist/src/codex-app-server-DKsF4qmY.js +2156 -0
  120. package/dist/src/codex-app-server-n7n4uZzC.cjs +2162 -0
  121. package/dist/src/codex-app-server-xAoELVxu.js +2155 -0
  122. package/dist/src/codex-sdk-C2ZLxa6r.js +1552 -0
  123. package/dist/src/codex-sdk-CzG02tQt.cjs +1588 -0
  124. package/dist/src/codex-sdk-DNxAOhiV.js +2 -0
  125. package/dist/src/codex-sdk-DT3aQezK.js +1557 -0
  126. package/dist/src/codex-sdk-pw9DpcJP.js +1557 -0
  127. package/dist/src/codex-security-B0bLmXJF.js +406 -0
  128. package/dist/src/codex-security-BhYs-3iY.js +406 -0
  129. package/dist/src/codex-security-DQcOfxYW.js +407 -0
  130. package/dist/src/codex-security-DsCWr6GZ.cjs +411 -0
  131. package/dist/src/cometapi-B16asPLX.cjs +55 -0
  132. package/dist/src/cometapi-MgTbZA_H.js +53 -0
  133. package/dist/src/cometapi-i33vKzPV.js +55 -0
  134. package/dist/src/cometapi-wK2UWK0X.js +56 -0
  135. package/dist/src/compatible-COj8ZCy9.js +24 -0
  136. package/dist/src/compatible-CRSsIUGb.cjs +24 -0
  137. package/dist/src/compatible-Dy1vCcNF.js +25 -0
  138. package/dist/src/compatible-aUItQrpk.js +24 -0
  139. package/dist/src/completion-Bn7COFMk.js +119 -0
  140. package/dist/src/completion-Bub2N48b.js +118 -0
  141. package/dist/src/completion-Cf2G9OlM.cjs +123 -0
  142. package/dist/src/conversationScoring-BiTYJ9MD.js +374 -0
  143. package/dist/src/conversationScoring-CKL47uIu.js +373 -0
  144. package/dist/src/conversationScoring-DCvQKp6k.cjs +398 -0
  145. package/dist/src/conversationScoring-DLNJtDZI.js +373 -0
  146. package/dist/src/crescendo-5iLk9WiJ.cjs +734 -0
  147. package/dist/src/crescendo-B5ylG7kW.js +733 -0
  148. package/dist/src/crescendo-BD7k6TIx.js +730 -0
  149. package/dist/src/crescendo-DqO2Ch0P.js +732 -0
  150. package/dist/src/custom-8rv_aG2K.js +617 -0
  151. package/dist/src/custom-BOtrIHFN.js +619 -0
  152. package/dist/src/custom-BvN8seCs.cjs +620 -0
  153. package/dist/src/custom-Cld9v_Y4.js +618 -0
  154. package/dist/src/dataUrl-BdHUey2l.cjs +3187 -0
  155. package/dist/src/dataUrl-DBMifX6C.js +3133 -0
  156. package/dist/src/dataUrl-DUSr-ZvI.js +2868 -0
  157. package/dist/src/decisions-CLazADTw.js +516 -0
  158. package/dist/src/decisions-D5X93awq.js +515 -0
  159. package/dist/src/decisions-DmaeArEn.js +515 -0
  160. package/dist/src/decisions-DyQJyHJz.cjs +514 -0
  161. package/dist/src/docker-C9NYQFeu.js +94 -0
  162. package/dist/src/docker-CGq3mMol.cjs +94 -0
  163. package/dist/src/docker-DOm7nmpl.js +95 -0
  164. package/dist/src/docker-skFN-Kfo.js +93 -0
  165. package/dist/src/embedding-0UbzkTk9.js +82 -0
  166. package/dist/src/embedding-DTrSDt7k.cjs +86 -0
  167. package/dist/src/embedding-j2ORNl5H.js +81 -0
  168. package/dist/src/envoy-BvS8XTQO.js +60 -0
  169. package/dist/src/envoy-Cn6Hzw0e.js +60 -0
  170. package/dist/src/envoy-DC3KWcUY.cjs +60 -0
  171. package/dist/src/envoy-DetHjo5B.js +61 -0
  172. package/dist/src/eval-Cer9dPe9.js +1920 -0
  173. package/dist/src/eval-CytYmI2Z.js +2 -0
  174. package/dist/src/evalResult-DzOq5wt9.js +1300 -0
  175. package/dist/src/evaluator-BxCmvGtv.js +10578 -0
  176. package/dist/src/evaluator-Ct7YDELm.js +2 -0
  177. package/dist/src/evaluatorHelpers-B_AwIrsl.js +600 -0
  178. package/dist/src/evaluatorHelpers-D1Tpc7gd.js +601 -0
  179. package/dist/src/evaluatorHelpers-DRR3rLq0.cjs +622 -0
  180. package/dist/src/fetch-B5KxZuKu.js +1559 -0
  181. package/dist/src/fetch-BG_Jl7ty.js +1556 -0
  182. package/dist/src/fetch-BKlgUg08.cjs +1853 -0
  183. package/dist/src/fetch-C9Fsja0R.js +2 -0
  184. package/dist/src/fetch-CM7P8KWA.cjs +14 -0
  185. package/dist/src/fetch-D0FkIB3G.js +9 -0
  186. package/dist/src/fetch-RXHsZF-J.js +1280 -0
  187. package/dist/src/fetch-rSECy8jR.js +10 -0
  188. package/dist/src/functionCallbackUtils-BB9tmf6a.cjs +262 -0
  189. package/dist/src/functionCallbackUtils-BXk2iY01.js +246 -0
  190. package/dist/src/functionCallbackUtils-B_cYp7P5.js +245 -0
  191. package/dist/src/functionCallbackUtils-BfXnPo0o.js +245 -0
  192. package/dist/src/gemini-image-BXLMADDz.js +471 -0
  193. package/dist/src/gemini-image-BYUZyEUx.js +472 -0
  194. package/dist/src/gemini-image-DSt1QubZ.cjs +471 -0
  195. package/dist/src/gemini-image-DdNDMiZ_.js +471 -0
  196. package/dist/src/goat-9b-uU_k6.js +514 -0
  197. package/dist/src/goat-BCJuiDd0.js +515 -0
  198. package/dist/src/goat-CmAHbemm.js +512 -0
  199. package/dist/src/goat-DdOTdyoS.cjs +515 -0
  200. package/dist/src/goblin-Bp5C5lyb.js +22 -0
  201. package/dist/src/goblin-Dmr7GItI.js +23 -0
  202. package/dist/src/goblin-DpM8wxlf.cjs +22 -0
  203. package/dist/src/goblin-cJyH6Pq-.js +22 -0
  204. package/dist/src/google-B6eaPAbE.js +142 -0
  205. package/dist/src/google-D-FStdN6.cjs +142 -0
  206. package/dist/src/google-DAC7BsCW.js +142 -0
  207. package/dist/src/google-Id18H0Va.js +143 -0
  208. package/dist/src/graders-BjNQWkaB.js +2 -0
  209. package/dist/src/graders-CqdIp_vl.js +15470 -0
  210. package/dist/src/hydra-6Ouh74DE.js +610 -0
  211. package/dist/src/hydra-BHjhZnLB.cjs +612 -0
  212. package/dist/src/hydra-BL6k2REV.js +2 -0
  213. package/dist/src/hydra-BWUc0o67.js +613 -0
  214. package/dist/src/hydra-CUkEOLKw.js +612 -0
  215. package/dist/src/image-B6hG_xhb.js +481 -0
  216. package/dist/src/image-BFaq7Krd.cjs +209 -0
  217. package/dist/src/image-Bql5C0N9.cjs +504 -0
  218. package/dist/src/image-BtZfI2pT.js +163 -0
  219. package/dist/src/image-CIM4oN7Z.cjs +163 -0
  220. package/dist/src/image-CbAl7Jpu.js +209 -0
  221. package/dist/src/image-CiYm_yFw.js +209 -0
  222. package/dist/src/image-DCMNvBiV.js +163 -0
  223. package/dist/src/image-DL7pIuUZ.js +210 -0
  224. package/dist/src/image-ey0kxF8o.js +164 -0
  225. package/dist/src/image-smgIk3rE.js +482 -0
  226. package/dist/src/index.cjs +27 -27
  227. package/dist/src/index.d.cts +8 -8
  228. package/dist/src/index.js +27 -27
  229. package/dist/src/indirectWebPwn-B_-UpWY5.js +285 -0
  230. package/dist/src/indirectWebPwn-Cz3SLiEq.js +434 -0
  231. package/dist/src/indirectWebPwn-D2s8zGiM.cjs +463 -0
  232. package/dist/src/indirectWebPwn-DXbj2wGu.cjs +285 -0
  233. package/dist/src/indirectWebPwn-D_4H44E6.js +285 -0
  234. package/dist/src/indirectWebPwn-L044SrpV.js +434 -0
  235. package/dist/src/indirectWebPwn-cnmvdavH.js +435 -0
  236. package/dist/src/indirectWebPwn-zUBzsqTt.js +286 -0
  237. package/dist/src/interactions-Bu3oVQ-j.js +850 -0
  238. package/dist/src/interactions-CND010Lh.cjs +850 -0
  239. package/dist/src/interactions-DAx7tqUz.js +851 -0
  240. package/dist/src/interactions-DPkIumeh.js +850 -0
  241. package/dist/src/iterative-BO4JRnpG.js +545 -0
  242. package/dist/src/iterative-CAK-k9rz.js +548 -0
  243. package/dist/src/iterative-CDgHc0xO.cjs +549 -0
  244. package/dist/src/iterative-CXJlHLl9.js +547 -0
  245. package/dist/src/iterativeImage-BEdGKSmh.cjs +419 -0
  246. package/dist/src/iterativeImage-BfL0QZw5.js +417 -0
  247. package/dist/src/iterativeImage-C9KhnibC.js +417 -0
  248. package/dist/src/iterativeImage-btjkOfWG.js +418 -0
  249. package/dist/src/iterativeMeta-B5Bdw6QA.js +437 -0
  250. package/dist/src/iterativeMeta-C3mI4gpT.js +440 -0
  251. package/dist/src/iterativeMeta-Co2BKyqS.cjs +439 -0
  252. package/dist/src/iterativeMeta-DD8ihRWD.js +439 -0
  253. package/dist/src/iterativeTree-AMi4GV2O.js +878 -0
  254. package/dist/src/iterativeTree-C8FJOEje.cjs +879 -0
  255. package/dist/src/iterativeTree-CvrY1f2Z.js +877 -0
  256. package/dist/src/iterativeTree-bPtESmaD.js +876 -0
  257. package/dist/src/knowledgeBase-Cf5871e3.js +163 -0
  258. package/dist/src/knowledgeBase-D2PQhqLH.js +164 -0
  259. package/dist/src/knowledgeBase-DpoMw1IH.cjs +163 -0
  260. package/dist/src/knowledgeBase-npGFl763.js +163 -0
  261. package/dist/src/litellm-BBB5DQdt.cjs +146 -0
  262. package/dist/src/litellm-Bo43ow7r.js +145 -0
  263. package/dist/src/litellm-CaU8CMLS.js +146 -0
  264. package/dist/src/litellm-wY7Unh8o.js +147 -0
  265. package/dist/src/live-5g2w-M-E.js +891 -0
  266. package/dist/src/live-BfaXsDyD.cjs +891 -0
  267. package/dist/src/live-C1xewnGD.js +2 -0
  268. package/dist/src/live-DaF7nYy5.js +892 -0
  269. package/dist/src/live-lp3urLUw.js +891 -0
  270. package/dist/src/luma-ray-B7zvKGVG.js +309 -0
  271. package/dist/src/luma-ray-DCf5fnrz.cjs +309 -0
  272. package/dist/src/luma-ray-DepBcn6z.js +309 -0
  273. package/dist/src/luma-ray-XQC4M1pt.js +310 -0
  274. package/dist/src/main.js +26 -26
  275. package/dist/src/mantleChat-7xm95vSV.js +154 -0
  276. package/dist/src/mantleChat-CXhAs5RD.js +155 -0
  277. package/dist/src/mantleChat-CcE-zjfj.cjs +154 -0
  278. package/dist/src/mantleChat-Cpefl7Zm.js +154 -0
  279. package/dist/src/mcp-B0V0ikdM.js +84 -0
  280. package/dist/src/mcp-CV2k2gwj.js +85 -0
  281. package/dist/src/memoryPoisoning-BC5FQQWZ.js +111 -0
  282. package/dist/src/memoryPoisoning-BDwrtZKX.js +111 -0
  283. package/dist/src/memoryPoisoning-BFemS_FF.js +112 -0
  284. package/dist/src/memoryPoisoning-DRs2rbVV.cjs +111 -0
  285. package/dist/src/messages-Bc5oZoAJ.js +1128 -0
  286. package/dist/src/messages-BkaH8fRW.js +1127 -0
  287. package/dist/src/messages-CoHlziS5.js +1127 -0
  288. package/dist/src/messages-Cv_m6kYs.cjs +1161 -0
  289. package/dist/src/mischievousUser-BcyFxrqJ.js +51 -0
  290. package/dist/src/mischievousUser-BlhOQSd2.js +52 -0
  291. package/dist/src/mischievousUser-BuQiKE8D.js +51 -0
  292. package/dist/src/mischievousUser-ChIOk6cT.cjs +51 -0
  293. package/dist/src/modelslab-BXIWBTgX.js +171 -0
  294. package/dist/src/modelslab-ChVsUiaJ.js +170 -0
  295. package/dist/src/modelslab-DZ6BFlDv.js +170 -0
  296. package/dist/src/modelslab-DhRr-vyo.cjs +170 -0
  297. package/dist/src/nova-reel-BL8DrN4_.js +272 -0
  298. package/dist/src/nova-reel-BiOMUm5q.cjs +272 -0
  299. package/dist/src/nova-reel-CTsya1hV.js +273 -0
  300. package/dist/src/nova-reel-kgBY4Svd.js +272 -0
  301. package/dist/src/nova-sonic-CaSSA3Jq.cjs +374 -0
  302. package/dist/src/nova-sonic-DLpmoGsR.js +375 -0
  303. package/dist/src/nova-sonic-DwWc4SoN.js +374 -0
  304. package/dist/src/nova-sonic-qnReTaXm.js +374 -0
  305. package/dist/src/novita-B5mAt3Ui.js +114 -0
  306. package/dist/src/novita-D57vCjDD.js +116 -0
  307. package/dist/src/novita-ITRtG8IJ.js +115 -0
  308. package/dist/src/novita-Rh3T13YO.cjs +115 -0
  309. package/dist/src/nscale-8V7iZ_pI.js +210 -0
  310. package/dist/src/nscale-BQnMv4pH.cjs +209 -0
  311. package/dist/src/nscale-BWZXHZVF.js +209 -0
  312. package/dist/src/nscale-BqrHiUqU.js +207 -0
  313. package/dist/src/openaiResponses-BMtGTu8R.js +317 -0
  314. package/dist/src/openaiResponses-CvcI_viE.js +318 -0
  315. package/dist/src/openaiResponses-DYPZEMX1.cjs +318 -0
  316. package/dist/src/openaiResponses-DZTg1-kb.js +319 -0
  317. package/dist/src/openclaw-BeKuig4g.js +1338 -0
  318. package/dist/src/openclaw-COkdQ83y.js +1337 -0
  319. package/dist/src/openclaw-CSoX_HQ5.cjs +1344 -0
  320. package/dist/src/openclaw-DJlhPGCb.js +1336 -0
  321. package/dist/src/opencode-sdk-BEJftEs6.cjs +1018 -0
  322. package/dist/src/opencode-sdk-DMvBB3V7.js +1013 -0
  323. package/dist/src/opencode-sdk-Df7hMjLO.js +1012 -0
  324. package/dist/src/opencode-sdk-bQp5Xf3W.js +1012 -0
  325. package/dist/src/openinterpreter-B3GgVZjK.js +431 -0
  326. package/dist/src/openinterpreter-BiGcU-HN.cjs +435 -0
  327. package/dist/src/openinterpreter-Buj2l3Eh.js +432 -0
  328. package/dist/src/openinterpreter-C3_Cg5b_.js +431 -0
  329. package/dist/src/pricing-0Pampf0q.cjs +999 -0
  330. package/dist/src/pricing-B8VdhEhY.js +976 -0
  331. package/dist/src/pricing-CtLA-rKA.js +976 -0
  332. package/dist/src/promptfoo-4OkHtH9P.cjs +341 -0
  333. package/dist/src/promptfoo-Bhpm7sH6.js +286 -0
  334. package/dist/src/promptfoo-BqV8ogVA.js +285 -0
  335. package/dist/src/promptfoo-S1Q9OHk_.js +286 -0
  336. package/dist/src/providers-B5zs1ZRv.js +24437 -0
  337. package/dist/src/providers-Cd6CJh6m.js +2 -0
  338. package/dist/src/providers-CpJlgHET.js +24039 -0
  339. package/dist/src/providers-CzvLvK6G.cjs +24180 -0
  340. package/dist/src/quiverai-1E_IvLHn.js +325 -0
  341. package/dist/src/quiverai-BXH004Vv.js +325 -0
  342. package/dist/src/quiverai-Ccya2z8Y.cjs +325 -0
  343. package/dist/src/quiverai-Cez57oe-.js +326 -0
  344. package/dist/src/registry-3zX_M9Ik.js +131 -0
  345. package/dist/src/registry-AuCrKTvS.js +132 -0
  346. package/dist/src/registry-CxXWKtQG.js +131 -0
  347. package/dist/src/registry-DG3o66JQ.cjs +131 -0
  348. package/dist/src/remoteGeneration-CAtvamG6.js +370 -0
  349. package/dist/src/remoteGeneration-CF225pDl.cjs +482 -0
  350. package/dist/src/remoteGeneration-DtnqocnL.js +370 -0
  351. package/dist/src/remoteGeneration-g3KvW-sP.js +371 -0
  352. package/dist/src/responses-BMbaUXQI.js +1098 -0
  353. package/dist/src/responses-B_TOSof-.js +1099 -0
  354. package/dist/src/responses-v-yANwTA.cjs +1109 -0
  355. package/dist/src/runtimeTransform-BBZv-oUZ.js +156 -0
  356. package/dist/src/runtimeTransform-DT2v5ovW.js +156 -0
  357. package/dist/src/runtimeTransform-GXXEIXdS.cjs +161 -0
  358. package/dist/src/runtimeTransform-JTwBQc-P.js +157 -0
  359. package/dist/src/sagemaker-B8D0L4rj.cjs +716 -0
  360. package/dist/src/sagemaker-CR2_AGdB.js +713 -0
  361. package/dist/src/sagemaker-Cd9qSQUV.js +714 -0
  362. package/dist/src/sagemaker-mKlltN4p.js +713 -0
  363. package/dist/src/scanner-PG_8lh8r.js +1971 -0
  364. package/dist/src/server/index.js +55 -55
  365. package/dist/src/server-Bmh7sd9F.js +155 -0
  366. package/dist/src/server-C7b8z6aC.js +63 -0
  367. package/dist/src/server-CAcovgtL.js +2 -0
  368. package/dist/src/server-CuuMfKlh.cjs +74 -0
  369. package/dist/src/server-DMPCj9jy.js +189 -0
  370. package/dist/src/session-BksXvRH_.cjs +69 -0
  371. package/dist/src/session-DOxUjqGQ.js +63 -0
  372. package/dist/src/session-Dujsc-b9.js +62 -0
  373. package/dist/src/session-VjtIxREd.js +62 -0
  374. package/dist/src/shared-Bkyz_7e5.cjs +2185 -0
  375. package/dist/src/shared-DDJg8ycC.js +1929 -0
  376. package/dist/src/shared-Dh3yfRBd.js +1927 -0
  377. package/dist/src/shared-tfPT8Tna.js +1928 -0
  378. package/dist/src/simulatedUser-6JdkyL3k.cjs +252 -0
  379. package/dist/src/simulatedUser-CFr2mr3M.js +248 -0
  380. package/dist/src/simulatedUser-DjwwUqx-.js +247 -0
  381. package/dist/src/slack-C_gIYiUs.js +144 -0
  382. package/dist/src/slack-DhNbz9CM.cjs +144 -0
  383. package/dist/src/slack-Dm2iI1zu.js +145 -0
  384. package/dist/src/strategies-BIY-bNul.js +2248 -0
  385. package/dist/src/strategies-C1KQQj9G.cjs +2420 -0
  386. package/dist/src/strategies-DM_3mReG.js +2385 -0
  387. package/dist/src/telemetry-BhMTibZO.js +2 -0
  388. package/dist/src/telemetry-C04d25BM.cjs +216 -0
  389. package/dist/src/telemetry-CIqy4fSC.js +201 -0
  390. package/dist/src/telemetry-CXozp_6C.js +205 -0
  391. package/dist/src/telemetry-g7PkBxmY.js +205 -0
  392. package/dist/src/togetherai-BvCim68-.js +50 -0
  393. package/dist/src/togetherai-CWyDCA9m.cjs +49 -0
  394. package/dist/src/togetherai-CeSE31vK.js +49 -0
  395. package/dist/src/togetherai-_2W0URf8.js +48 -0
  396. package/dist/src/traceContext-Brw3Oe41.js +1016 -0
  397. package/dist/src/traceContext-DpAYv27G.js +1015 -0
  398. package/dist/src/traceContext-KSqhzZI2.cjs +1032 -0
  399. package/dist/src/transcription-BySopazW.js +175 -0
  400. package/dist/src/transcription-DO4UPkRI.cjs +178 -0
  401. package/dist/src/transcription-RJGBa-pC.js +176 -0
  402. package/dist/src/transcription-fZenF3G5.js +175 -0
  403. package/dist/src/transform-BzhRc5z2.js +125 -0
  404. package/dist/src/transform-CPQu05u6.cjs +154 -0
  405. package/dist/src/transform-DAED8imp.js +126 -0
  406. package/dist/src/transform-DIOIQDmM.js +125 -0
  407. package/dist/src/typesafe-ByE0Kxfg.js +253 -0
  408. package/dist/src/typesafe-CFqGFY34.js +253 -0
  409. package/dist/src/typesafe-DCWIw-CP.cjs +253 -0
  410. package/dist/src/typesafe-DyHFV5Qk.js +254 -0
  411. package/dist/src/util-BHkj9joz.js +2049 -0
  412. package/dist/src/util-CICwIpmu.cjs +934 -0
  413. package/dist/src/util-CePiY2xZ.js +286 -0
  414. package/dist/src/util-CgT3uf4p.js +743 -0
  415. package/dist/src/util-Cj9drvOY.js +1770 -0
  416. package/dist/src/util-ClJRjlQA.cjs +357 -0
  417. package/dist/src/util-Cxf8VF2M.js +395 -0
  418. package/dist/src/util-D7RdV7rS.js +395 -0
  419. package/dist/src/util-DMNFhk47.js +351 -0
  420. package/dist/src/util-DNzh3M0z.js +396 -0
  421. package/dist/src/util-Df7rfMGb.cjs +2305 -0
  422. package/dist/src/util-Kf0KnG_6.js +2051 -0
  423. package/dist/src/util-LEbeiYw_.js +743 -0
  424. package/dist/src/util-WH8CgVs4.js +352 -0
  425. package/dist/src/util-cx6Xw8Lw.cjs +478 -0
  426. package/dist/src/util-qzBqirBH.js +2050 -0
  427. package/dist/src/vertex-CBAMfRz3.js +854 -0
  428. package/dist/src/vertex-CMP2IpN9.js +2 -0
  429. package/dist/src/vertex-CZ5YOotT.js +848 -0
  430. package/dist/src/vertex-DNsh1F1M.cjs +871 -0
  431. package/dist/src/vertexLive-BTXYj3-F.js +55 -0
  432. package/dist/src/vertexLive-Ba_LAqEF.cjs +55 -0
  433. package/dist/src/vertexLive-DM4sFaaj.js +56 -0
  434. package/dist/src/vertexLive-JqZOw7HC.js +55 -0
  435. package/dist/src/video-BY7Q2Gii.cjs +706 -0
  436. package/dist/src/video-CYElP-CK.js +703 -0
  437. package/dist/src/video-C_AdEDH0.js +702 -0
  438. package/dist/src/video-DGvjQ_4j.js +702 -0
  439. package/package.json +1 -1
  440. package/dist/src/accounts-Dpb43yde.cjs +0 -276
  441. package/dist/src/accounts-GKrO1olH.js +0 -229
  442. package/dist/src/accounts-e4FGOsji.js +0 -227
  443. package/dist/src/accounts-sUiEJfkB.js +0 -222
  444. package/dist/src/agentWorkspace-B8A_wuMR.cjs +0 -619
  445. package/dist/src/agentWorkspace-DSPIscXR.js +0 -593
  446. package/dist/src/agentWorkspace-DxUqd-XK.js +0 -592
  447. package/dist/src/agentWorkspace-n0uOJXhD.js +0 -592
  448. package/dist/src/agentic-utils-9bCj4twQ.js +0 -197
  449. package/dist/src/agentic-utils-CyCLuLoj.js +0 -197
  450. package/dist/src/agentic-utils-D23qtOlx.cjs +0 -237
  451. package/dist/src/agentic-utils-DuBMMNCw.js +0 -198
  452. package/dist/src/agents-6hDRNoYD.js +0 -777
  453. package/dist/src/agents-B8w2o7Sc.cjs +0 -777
  454. package/dist/src/agents-Ck0NXl7v.js +0 -777
  455. package/dist/src/agents-CwT3B1qB.js +0 -778
  456. package/dist/src/agents-DOLjfOEq.js +0 -266
  457. package/dist/src/agents-OcF9hq--.js +0 -267
  458. package/dist/src/agents-api-CnZZt8bn.cjs +0 -710
  459. package/dist/src/agents-api-D04u3bmL.js +0 -711
  460. package/dist/src/agents-api-DWw0_Vio.js +0 -710
  461. package/dist/src/agents-api-IWHEwp8i.js +0 -710
  462. package/dist/src/agents-mHt2Mh9O.cjs +0 -266
  463. package/dist/src/agents-sICccZCA.js +0 -266
  464. package/dist/src/ai.studio-Ci4rypDT.js +0 -2
  465. package/dist/src/ai.studio-KkQ6KaHa.js +0 -369
  466. package/dist/src/ai.studio-gSXK2cGI.js +0 -374
  467. package/dist/src/ai.studio-nQF_B4DH.cjs +0 -391
  468. package/dist/src/aimlapi-BeSk5BDV.js +0 -30
  469. package/dist/src/aimlapi-CzNUhdKu.cjs +0 -29
  470. package/dist/src/aimlapi-DCkazDPI.js +0 -29
  471. package/dist/src/aimlapi-WeH5B6K1.js +0 -28
  472. package/dist/src/anthropicMessages-AcNWTpYO.js +0 -115
  473. package/dist/src/anthropicMessages-BUtvzbpL.js +0 -114
  474. package/dist/src/anthropicMessages-DTWhZDCd.js +0 -114
  475. package/dist/src/anthropicMessages-lGVnSgyx.cjs +0 -114
  476. package/dist/src/app/assets/index-CyEI5aDN.js +0 -392
  477. package/dist/src/audio-BE_Duiu1.js +0 -104
  478. package/dist/src/audio-CiUd00k2.cjs +0 -104
  479. package/dist/src/audio-Dop6omna.js +0 -105
  480. package/dist/src/audio-EZNTInr_.js +0 -104
  481. package/dist/src/authoritativeMarkupInjection-BUqH6hNk.js +0 -78
  482. package/dist/src/authoritativeMarkupInjection-BmbJdJO0.cjs +0 -78
  483. package/dist/src/authoritativeMarkupInjection-Cpz12Y3w.js +0 -78
  484. package/dist/src/authoritativeMarkupInjection-W4XfcH91.js +0 -79
  485. package/dist/src/aws-B2Jqbnet.js +0 -2433
  486. package/dist/src/aws-DHtuUIzQ.js +0 -1149
  487. package/dist/src/aws-DLqXP6wY.js +0 -2433
  488. package/dist/src/aws-DfduhmwL.cjs +0 -2454
  489. package/dist/src/base-B9L2Xvpc.js +0 -255
  490. package/dist/src/base-BTZnIsuH.cjs +0 -305
  491. package/dist/src/base-BhaWNQPJ.js +0 -462
  492. package/dist/src/base-Br-G_Xou.js +0 -256
  493. package/dist/src/base-Bzo8hiUS.cjs +0 -467
  494. package/dist/src/base-C82fd2jq.js +0 -463
  495. package/dist/src/base-CRdQwC1W.js +0 -462
  496. package/dist/src/base-CjGwZNOQ.js +0 -255
  497. package/dist/src/bedrock-BdMru_ro.js +0 -1300
  498. package/dist/src/bedrock-CBUmfLX1.cjs +0 -2
  499. package/dist/src/bedrock-DBDxBaF9.js +0 -2
  500. package/dist/src/bedrock-DDrECM21.js +0 -1
  501. package/dist/src/bedrock-DVwkgvRS.js +0 -1
  502. package/dist/src/bestOfN-AKF5beq4.js +0 -159
  503. package/dist/src/bestOfN-C1UIVGJV.js +0 -160
  504. package/dist/src/bestOfN-DlkETbXy.cjs +0 -161
  505. package/dist/src/bestOfN-XIfEgU-g.js +0 -159
  506. package/dist/src/cache-BZaVoKaA.js +0 -2
  507. package/dist/src/cache-CEYhFUsH.js +0 -741
  508. package/dist/src/cache-Cbw1zH6q.js +0 -782
  509. package/dist/src/cache-CdaZNb75.js +0 -754
  510. package/dist/src/cache-DpuIzPxh.cjs +0 -856
  511. package/dist/src/cerebras-Bpn6FPkJ.js +0 -97
  512. package/dist/src/cerebras-CqJ0BRCJ.cjs +0 -97
  513. package/dist/src/cerebras-D4ILa_TY.js +0 -97
  514. package/dist/src/cerebras-DR8uc7ee.js +0 -98
  515. package/dist/src/chat-B7PZfaYp.cjs +0 -987
  516. package/dist/src/chat-BVuSjdEb.js +0 -227
  517. package/dist/src/chat-BsaZRjXN.js +0 -76
  518. package/dist/src/chat-C5liqe3Y.js +0 -226
  519. package/dist/src/chat-C9hyHf5B.js +0 -124
  520. package/dist/src/chat-CFLalAck.js +0 -226
  521. package/dist/src/chat-CN8JGrHu.js +0 -76
  522. package/dist/src/chat-CaHBBpCb.js +0 -123
  523. package/dist/src/chat-CcbLSghx.js +0 -123
  524. package/dist/src/chat-CoSN6sr2.js +0 -934
  525. package/dist/src/chat-CsJRFX8a.cjs +0 -226
  526. package/dist/src/chat-DFoZLvO_.js +0 -934
  527. package/dist/src/chat-DiLQvL7r.js +0 -77
  528. package/dist/src/chat-F6qVSDk3.cjs +0 -123
  529. package/dist/src/chat-Oq4FaJgI.cjs +0 -76
  530. package/dist/src/chat-knMfQUKz.js +0 -935
  531. package/dist/src/claude-agent-sdk-CJkOLpnI.js +0 -999
  532. package/dist/src/claude-agent-sdk-Ckn76PRD.js +0 -999
  533. package/dist/src/claude-agent-sdk-DX0gTr11.cjs +0 -1005
  534. package/dist/src/claude-agent-sdk-LMeikxoR.js +0 -1000
  535. package/dist/src/client-BFf1r6Z8.js +0 -352
  536. package/dist/src/client-CdXyDdDi.js +0 -351
  537. package/dist/src/client-DV8XMu7i.js +0 -351
  538. package/dist/src/client-iEXtOBKW.cjs +0 -357
  539. package/dist/src/cloud-B02qcpjf.js +0 -2
  540. package/dist/src/cloud-BlHP-g1v.cjs +0 -666
  541. package/dist/src/cloud-C9BI4isF.js +0 -287
  542. package/dist/src/cloud-CTTLNdvj.js +0 -657
  543. package/dist/src/cloud-D5X5yQ_d.js +0 -599
  544. package/dist/src/cloud-QxPkpsHA.js +0 -599
  545. package/dist/src/cloudflare-ai-DRTRT1fc.js +0 -132
  546. package/dist/src/cloudflare-ai-DgaXapAV.cjs +0 -133
  547. package/dist/src/cloudflare-ai-DkuJXijS.js +0 -134
  548. package/dist/src/cloudflare-ai-wy9QCHku.js +0 -133
  549. package/dist/src/cloudflare-gateway-9cAN8g29.cjs +0 -276
  550. package/dist/src/cloudflare-gateway-BVFMD292.js +0 -277
  551. package/dist/src/cloudflare-gateway-BuUI4p6I.js +0 -276
  552. package/dist/src/cloudflare-gateway-TlYHizbW.js +0 -276
  553. package/dist/src/codex-app-server-BPz_feug.cjs +0 -2162
  554. package/dist/src/codex-app-server-C9noXM9C.js +0 -2155
  555. package/dist/src/codex-app-server-CEmD-Y5U.js +0 -2
  556. package/dist/src/codex-app-server-DZolc18r.js +0 -2156
  557. package/dist/src/codex-app-server-Dd0A37nO.js +0 -2155
  558. package/dist/src/codex-sdk-BbxjBvBk.cjs +0 -1588
  559. package/dist/src/codex-sdk-BpXeIs-_.js +0 -1557
  560. package/dist/src/codex-sdk-BtQp5X0f.js +0 -1552
  561. package/dist/src/codex-sdk-CH0v9Bk1.js +0 -2
  562. package/dist/src/codex-sdk-CgrN7JB8.js +0 -1557
  563. package/dist/src/codex-security-B5fENNUr.js +0 -406
  564. package/dist/src/codex-security-C6uuJx-y.cjs +0 -411
  565. package/dist/src/codex-security-CifWtZR_.js +0 -407
  566. package/dist/src/codex-security-Kg2bOEKy.js +0 -406
  567. package/dist/src/cometapi-BFpIDLIx.js +0 -55
  568. package/dist/src/cometapi-C6O2PIrN.js +0 -56
  569. package/dist/src/cometapi-D5Yupc6F.js +0 -53
  570. package/dist/src/cometapi-DzgIwJzJ.cjs +0 -55
  571. package/dist/src/compatible-0jhmVfOp.js +0 -25
  572. package/dist/src/compatible-DdtwWdJi.cjs +0 -24
  573. package/dist/src/compatible-Di4nR3sU.js +0 -24
  574. package/dist/src/compatible-iJKLWdnf.js +0 -24
  575. package/dist/src/completion-B0_hVUDG.js +0 -119
  576. package/dist/src/completion-BdI6v0-Q.cjs +0 -123
  577. package/dist/src/completion-CWcJscwv.js +0 -118
  578. package/dist/src/conversationScoring-99EOPJRa.js +0 -373
  579. package/dist/src/conversationScoring-BIq4J0Cq.js +0 -374
  580. package/dist/src/conversationScoring-DARyeATr.cjs +0 -398
  581. package/dist/src/conversationScoring-DS48t4Hb.js +0 -373
  582. package/dist/src/crescendo-CebvXIu4.js +0 -730
  583. package/dist/src/crescendo-CxrLS0oo.js +0 -732
  584. package/dist/src/crescendo-DZQXBSkj.js +0 -733
  585. package/dist/src/crescendo-wjEx68uD.cjs +0 -734
  586. package/dist/src/custom-BiQ-aUNw.cjs +0 -620
  587. package/dist/src/custom-ByyB5Z93.js +0 -619
  588. package/dist/src/custom-C5jOevNb.js +0 -617
  589. package/dist/src/custom-CCrsCz8o.js +0 -618
  590. package/dist/src/dataUrl-C9J7wz9H.js +0 -3133
  591. package/dist/src/dataUrl-CGsBT7UZ.cjs +0 -3187
  592. package/dist/src/dataUrl-CzKvvWNO.js +0 -2868
  593. package/dist/src/decisions-BTusXCUx.cjs +0 -514
  594. package/dist/src/decisions-BYtL9edD.js +0 -515
  595. package/dist/src/decisions-jYix_gCF.js +0 -515
  596. package/dist/src/decisions-nxxfHRAN.js +0 -516
  597. package/dist/src/docker-DDIv4zkg.js +0 -93
  598. package/dist/src/docker-DVLp_5OG.js +0 -94
  599. package/dist/src/docker-INm9w0SY.cjs +0 -94
  600. package/dist/src/docker-sGuoCul_.js +0 -95
  601. package/dist/src/embedding-CAhqLLrR.js +0 -82
  602. package/dist/src/embedding-D94GAsti.cjs +0 -86
  603. package/dist/src/embedding-zb4MAzQy.js +0 -81
  604. package/dist/src/envoy-BMPszwEa.cjs +0 -60
  605. package/dist/src/envoy-Bp-s39_8.js +0 -60
  606. package/dist/src/envoy-BswDt-Ou.js +0 -61
  607. package/dist/src/envoy-rVbYcV80.js +0 -60
  608. package/dist/src/eval-B1-XfrC7.js +0 -2
  609. package/dist/src/eval-pC4qCvLw.js +0 -1920
  610. package/dist/src/evalResult-CzjCb5bd.js +0 -1300
  611. package/dist/src/evaluator-CNq2K7J_.js +0 -10578
  612. package/dist/src/evaluator-LtfxdxEu.js +0 -2
  613. package/dist/src/evaluatorHelpers-C5J0NYpQ.js +0 -601
  614. package/dist/src/evaluatorHelpers-DcdCglCs.cjs +0 -622
  615. package/dist/src/evaluatorHelpers-Rvb88W6B.js +0 -600
  616. package/dist/src/fetch-5HtnNhHg.js +0 -1556
  617. package/dist/src/fetch-BCwjoIFd.js +0 -1559
  618. package/dist/src/fetch-BhfUnKen.js +0 -1280
  619. package/dist/src/fetch-C08w4vVl.js +0 -9
  620. package/dist/src/fetch-DBxy8Tlb.cjs +0 -14
  621. package/dist/src/fetch-DYte6oQX.cjs +0 -1853
  622. package/dist/src/fetch-ElpfcAVG.js +0 -10
  623. package/dist/src/fetch-lM1OIaSt.js +0 -2
  624. package/dist/src/functionCallbackUtils-BCAdWfHO.js +0 -246
  625. package/dist/src/functionCallbackUtils-BYq9qOhG.js +0 -245
  626. package/dist/src/functionCallbackUtils-ByWkmVud.cjs +0 -262
  627. package/dist/src/functionCallbackUtils-D_C_JaFd.js +0 -245
  628. package/dist/src/gemini-image-CAlwaJhZ.js +0 -471
  629. package/dist/src/gemini-image-DJoVoOnZ.cjs +0 -471
  630. package/dist/src/gemini-image-Waio-9Xx.js +0 -472
  631. package/dist/src/gemini-image-vbY6Ftbf.js +0 -471
  632. package/dist/src/goat-BWbtyY9c.js +0 -512
  633. package/dist/src/goat-CXzzeCOQ.cjs +0 -515
  634. package/dist/src/goat-CfgvzSgZ.js +0 -514
  635. package/dist/src/goat-DLeoIHBp.js +0 -515
  636. package/dist/src/goblin-CmfCfwqk.cjs +0 -22
  637. package/dist/src/goblin-CtcaORRH.js +0 -22
  638. package/dist/src/goblin-DF6DDhM-.js +0 -22
  639. package/dist/src/goblin-Nai0xxBV.js +0 -23
  640. package/dist/src/google-ClpkLtKL.cjs +0 -142
  641. package/dist/src/google-CrFgKu9k.js +0 -143
  642. package/dist/src/google-Dj_EIBqS.js +0 -142
  643. package/dist/src/google-e4-vARv6.js +0 -142
  644. package/dist/src/graders-BN1IIa71.js +0 -15470
  645. package/dist/src/graders-C5sCfSP5.js +0 -2
  646. package/dist/src/hydra-B7RfXVBK.js +0 -2
  647. package/dist/src/hydra-C1cFN-Jg.js +0 -613
  648. package/dist/src/hydra-CK6Uc1ia.js +0 -612
  649. package/dist/src/hydra-Dg65rAP_.js +0 -610
  650. package/dist/src/hydra-Fqx8l_Xu.cjs +0 -612
  651. package/dist/src/image-BdlUDAtp.js +0 -163
  652. package/dist/src/image-C-KwEhwt.cjs +0 -163
  653. package/dist/src/image-C76fp6NK.cjs +0 -209
  654. package/dist/src/image-D75ehv3D.js +0 -482
  655. package/dist/src/image-DKtc5v5W.js +0 -209
  656. package/dist/src/image-DT_xOkJY.js +0 -163
  657. package/dist/src/image-DVpdllEE.js +0 -209
  658. package/dist/src/image-DXZ8AzMf.js +0 -481
  659. package/dist/src/image-DZl_1mvy.js +0 -164
  660. package/dist/src/image-DcTD7Ak0.cjs +0 -504
  661. package/dist/src/image-ndxEvBKB.js +0 -210
  662. package/dist/src/indirectWebPwn-70WA5x_q.js +0 -435
  663. package/dist/src/indirectWebPwn-BRVyd3qV.cjs +0 -463
  664. package/dist/src/indirectWebPwn-BsJVsu0q.js +0 -285
  665. package/dist/src/indirectWebPwn-Cw6yJu0i.js +0 -285
  666. package/dist/src/indirectWebPwn-D-PhJzo4.js +0 -286
  667. package/dist/src/indirectWebPwn-DRPHt2I8.js +0 -434
  668. package/dist/src/indirectWebPwn-DXtfFhd9.cjs +0 -285
  669. package/dist/src/indirectWebPwn-DvpNouzc.js +0 -434
  670. package/dist/src/interactions-5ixfW7Cl.js +0 -850
  671. package/dist/src/interactions-BOUzfmg1.cjs +0 -850
  672. package/dist/src/interactions-CSSXcGNc.js +0 -851
  673. package/dist/src/interactions-WB_sgkN0.js +0 -850
  674. package/dist/src/iterative-BShRNqjC.cjs +0 -549
  675. package/dist/src/iterative-BcW_ELtB.js +0 -548
  676. package/dist/src/iterative-BpHbHz8B.js +0 -547
  677. package/dist/src/iterative-YcchP12d.js +0 -545
  678. package/dist/src/iterativeImage-BMFE5Hl7.cjs +0 -419
  679. package/dist/src/iterativeImage-CkSaYLMY.js +0 -417
  680. package/dist/src/iterativeImage-DAEUlQX_.js +0 -418
  681. package/dist/src/iterativeImage-DeUSkEnj.js +0 -417
  682. package/dist/src/iterativeMeta-DbdaKdEO.cjs +0 -439
  683. package/dist/src/iterativeMeta-DcF9JWEK.js +0 -437
  684. package/dist/src/iterativeMeta-DkfPqWIC.js +0 -439
  685. package/dist/src/iterativeMeta-DkrpnVSs.js +0 -440
  686. package/dist/src/iterativeTree-CEMY1FhE.cjs +0 -879
  687. package/dist/src/iterativeTree-Cv5W4tX9.js +0 -877
  688. package/dist/src/iterativeTree-DGvomd3M.js +0 -876
  689. package/dist/src/iterativeTree-KbtC2Mkz.js +0 -878
  690. package/dist/src/knowledgeBase-AYRXn4wO.js +0 -163
  691. package/dist/src/knowledgeBase-BNqQfx01.js +0 -163
  692. package/dist/src/knowledgeBase-C0IaCCVs.js +0 -164
  693. package/dist/src/knowledgeBase-C2uj6wK4.cjs +0 -163
  694. package/dist/src/litellm-CN1ScAwZ.js +0 -147
  695. package/dist/src/litellm-CTjwiKSa.js +0 -146
  696. package/dist/src/litellm-Cd4Nj5ue.js +0 -145
  697. package/dist/src/litellm-DMqLpEBg.cjs +0 -146
  698. package/dist/src/live-Bt50-InO.cjs +0 -891
  699. package/dist/src/live-Bu2ujadG.js +0 -2
  700. package/dist/src/live-C3M52i3p.js +0 -891
  701. package/dist/src/live-CRfHMO3B.js +0 -892
  702. package/dist/src/live-iCIpO14m.js +0 -891
  703. package/dist/src/luma-ray-B8eHC4c8.cjs +0 -309
  704. package/dist/src/luma-ray-BIvkPw0s.js +0 -309
  705. package/dist/src/luma-ray-ChsiBxMA.js +0 -309
  706. package/dist/src/luma-ray-DAvKrInz.js +0 -310
  707. package/dist/src/mantleChat-5YeEXAZI.js +0 -154
  708. package/dist/src/mantleChat-D--mW3hl.js +0 -154
  709. package/dist/src/mantleChat-DHP3siNg.cjs +0 -154
  710. package/dist/src/mantleChat-wBfAX46o.js +0 -155
  711. package/dist/src/mcp-49jlEcTQ.js +0 -85
  712. package/dist/src/mcp-__PIz81I.js +0 -84
  713. package/dist/src/memoryPoisoning-Chxge74M.js +0 -111
  714. package/dist/src/memoryPoisoning-QH6NCUVE.js +0 -112
  715. package/dist/src/memoryPoisoning-tCxZt8Nz.js +0 -111
  716. package/dist/src/memoryPoisoning-ymrRItRR.cjs +0 -111
  717. package/dist/src/messages-BE_eZ7NA.js +0 -1127
  718. package/dist/src/messages-Bo638ShI.js +0 -1127
  719. package/dist/src/messages-BzR0-NQ1.js +0 -1128
  720. package/dist/src/messages-Cbg5Pfd0.cjs +0 -1161
  721. package/dist/src/mischievousUser-BtED2Z5Z.cjs +0 -51
  722. package/dist/src/mischievousUser-KqSOjrDJ.js +0 -51
  723. package/dist/src/mischievousUser-YMD41YNZ.js +0 -51
  724. package/dist/src/mischievousUser-zBxlNdCu.js +0 -52
  725. package/dist/src/modelslab-B8gZxtfE.js +0 -171
  726. package/dist/src/modelslab-C7bmVpTB.js +0 -170
  727. package/dist/src/modelslab-CCeQCTZg.js +0 -170
  728. package/dist/src/modelslab-CvBJGv7y.cjs +0 -170
  729. package/dist/src/nova-reel-BOEWsEKA.cjs +0 -272
  730. package/dist/src/nova-reel-BtyBXq5M.js +0 -273
  731. package/dist/src/nova-reel-C1eF3-EE.js +0 -272
  732. package/dist/src/nova-reel-YhgrxEKT.js +0 -272
  733. package/dist/src/nova-sonic-BaERP20w.js +0 -374
  734. package/dist/src/nova-sonic-CxgM3O-P.cjs +0 -374
  735. package/dist/src/nova-sonic-DJS22fC3.js +0 -375
  736. package/dist/src/nova-sonic-DwvwHyRX.js +0 -374
  737. package/dist/src/novita-D1l2tG0O.js +0 -116
  738. package/dist/src/novita-D84VM3v0.cjs +0 -115
  739. package/dist/src/novita-DGInvwfR.js +0 -115
  740. package/dist/src/novita-vXHkXhTg.js +0 -114
  741. package/dist/src/nscale-CU0Ldr00.js +0 -209
  742. package/dist/src/nscale-ClfKlQeM.cjs +0 -209
  743. package/dist/src/nscale-DxaVnF0x.js +0 -210
  744. package/dist/src/nscale-_poVxIrO.js +0 -207
  745. package/dist/src/openaiResponses-CJGsneNj.js +0 -317
  746. package/dist/src/openaiResponses-CKSl5Sdg.js +0 -319
  747. package/dist/src/openaiResponses-DC8rzFUc.js +0 -318
  748. package/dist/src/openaiResponses-rMHIA3dV.cjs +0 -318
  749. package/dist/src/openclaw-CCbvsNFW.cjs +0 -1344
  750. package/dist/src/openclaw-CZw1lCDZ.js +0 -1336
  751. package/dist/src/openclaw-ChFLgC-a.js +0 -1338
  752. package/dist/src/openclaw-DrPMoRrH.js +0 -1337
  753. package/dist/src/opencode-sdk-2EfIDhFp.cjs +0 -1018
  754. package/dist/src/opencode-sdk-CHw3F845.js +0 -1013
  755. package/dist/src/opencode-sdk-D0EGGxvy.js +0 -1012
  756. package/dist/src/opencode-sdk-jSS7NI2Q.js +0 -1012
  757. package/dist/src/openinterpreter-CY622xHC.js +0 -431
  758. package/dist/src/openinterpreter-DATyhuhP.js +0 -432
  759. package/dist/src/openinterpreter-DDUMyIf1.js +0 -431
  760. package/dist/src/openinterpreter-s5Tz6Lid.cjs +0 -435
  761. package/dist/src/pricing-C498twd2.js +0 -976
  762. package/dist/src/pricing-DBd_bMIh.cjs +0 -999
  763. package/dist/src/pricing-ISrMCskv.js +0 -976
  764. package/dist/src/promptfoo-6p0WG2ih.js +0 -286
  765. package/dist/src/promptfoo-BQRfgNs_.js +0 -285
  766. package/dist/src/promptfoo-Bqo88z20.cjs +0 -341
  767. package/dist/src/promptfoo-Cq5AVI3I.js +0 -286
  768. package/dist/src/providers-ATbeMX5E.cjs +0 -24180
  769. package/dist/src/providers-B7F1FiNI.js +0 -2
  770. package/dist/src/providers-DazIw8mI.js +0 -24039
  771. package/dist/src/providers-QvGlNAD0.js +0 -24437
  772. package/dist/src/quiverai-BPlNcLkV.cjs +0 -325
  773. package/dist/src/quiverai-By99-YmJ.js +0 -325
  774. package/dist/src/quiverai-CmmByDqo.js +0 -325
  775. package/dist/src/quiverai-HZkoJJqw.js +0 -326
  776. package/dist/src/registry-BLTnTfjT.cjs +0 -131
  777. package/dist/src/registry-BMC-COHT.js +0 -132
  778. package/dist/src/registry-C8UZtmBp.js +0 -131
  779. package/dist/src/registry-CfwEUYXG.js +0 -131
  780. package/dist/src/remoteGeneration-Bgg6kC5V.js +0 -370
  781. package/dist/src/remoteGeneration-CKJFE960.cjs +0 -482
  782. package/dist/src/remoteGeneration-DaxwJDKv.js +0 -370
  783. package/dist/src/remoteGeneration-vHMGVKr1.js +0 -371
  784. package/dist/src/responses-BvnyIHrq.js +0 -1099
  785. package/dist/src/responses-CERAgvf-.js +0 -1098
  786. package/dist/src/responses-CwgjeuOg.cjs +0 -1109
  787. package/dist/src/runtimeTransform-3RF9Avyg.cjs +0 -161
  788. package/dist/src/runtimeTransform-C51Z5j4H.js +0 -156
  789. package/dist/src/runtimeTransform-CKE_Iyv8.js +0 -157
  790. package/dist/src/runtimeTransform-Cs11xJpj.js +0 -156
  791. package/dist/src/sagemaker-BJ4dOCxE.js +0 -713
  792. package/dist/src/sagemaker-Bt3JUAWq.js +0 -714
  793. package/dist/src/sagemaker-QVKyLgLF.cjs +0 -716
  794. package/dist/src/sagemaker-l3IB8iTs.js +0 -713
  795. package/dist/src/scanner-DGjIiTZ1.js +0 -1971
  796. package/dist/src/server-BNaLZH6u.js +0 -63
  797. package/dist/src/server-CBMuQul3.js +0 -189
  798. package/dist/src/server-CMKKIzKv.cjs +0 -74
  799. package/dist/src/server-CN2IS9Cs.js +0 -155
  800. package/dist/src/server-ua4cqbjC.js +0 -2
  801. package/dist/src/session-CQIjq_HZ.cjs +0 -69
  802. package/dist/src/session-FTlg8sEu.js +0 -62
  803. package/dist/src/session-GBQXtPWp.js +0 -63
  804. package/dist/src/session-_0-rTdwY.js +0 -62
  805. package/dist/src/shared-BtuO-OAM.js +0 -1927
  806. package/dist/src/shared-Ci78wTZX.js +0 -1928
  807. package/dist/src/shared-Dd3rimdM.js +0 -1929
  808. package/dist/src/shared-KAjFxRre.cjs +0 -2185
  809. package/dist/src/simulatedUser--OjW6xCx.js +0 -247
  810. package/dist/src/simulatedUser-D0-slRye.cjs +0 -252
  811. package/dist/src/simulatedUser-D1Kh_cwA.js +0 -248
  812. package/dist/src/slack-BX0FUevO.js +0 -144
  813. package/dist/src/slack-CcwXFiJE.cjs +0 -144
  814. package/dist/src/slack-CnfqKfXp.js +0 -145
  815. package/dist/src/strategies-2ntcK4tN.js +0 -2248
  816. package/dist/src/strategies-DZIW7Zcs.js +0 -2385
  817. package/dist/src/strategies-YRDF2j-N.cjs +0 -2420
  818. package/dist/src/telemetry-CL8CVA4p.js +0 -205
  819. package/dist/src/telemetry-Cix90qqz.js +0 -201
  820. package/dist/src/telemetry-CkmlqTjV.js +0 -205
  821. package/dist/src/telemetry-DQH7l5bb.js +0 -2
  822. package/dist/src/telemetry-DUCXc1-r.cjs +0 -216
  823. package/dist/src/togetherai-3yUt5Ck7.js +0 -49
  824. package/dist/src/togetherai-BJUByLwt.cjs +0 -49
  825. package/dist/src/togetherai-Bh6KZkmd.js +0 -50
  826. package/dist/src/togetherai-DDl9yk3b.js +0 -48
  827. package/dist/src/traceContext-BiJVppjT.cjs +0 -1032
  828. package/dist/src/traceContext-CKKluULP.js +0 -1016
  829. package/dist/src/traceContext-D3Sk8fO-.js +0 -1015
  830. package/dist/src/transcription-BoVQKIVz.js +0 -175
  831. package/dist/src/transcription-Bs5u8780.js +0 -175
  832. package/dist/src/transcription-Dl654d1p.cjs +0 -178
  833. package/dist/src/transcription-VEvhM1Fu.js +0 -176
  834. package/dist/src/transform-BAbkGpvl.js +0 -125
  835. package/dist/src/transform-C_j4hUH8.js +0 -126
  836. package/dist/src/transform-Da86hs4M.cjs +0 -154
  837. package/dist/src/transform-_i1raQNo.js +0 -125
  838. package/dist/src/typesafe-CKXBeh82.cjs +0 -253
  839. package/dist/src/typesafe-D3VaGeNm.js +0 -253
  840. package/dist/src/typesafe-DYM-SFNH.js +0 -253
  841. package/dist/src/typesafe-LXmSbw8F.js +0 -254
  842. package/dist/src/util-41rb0XHX.js +0 -743
  843. package/dist/src/util-B0WlHYFM.js +0 -2049
  844. package/dist/src/util-BD1R_PsR.js +0 -1770
  845. package/dist/src/util-BLbM_ItC.js +0 -395
  846. package/dist/src/util-C72P0iIa.js +0 -352
  847. package/dist/src/util-C7MpGlJ6.cjs +0 -2305
  848. package/dist/src/util-CCtqagKc.js +0 -286
  849. package/dist/src/util-CM2Ec_uY.js +0 -2051
  850. package/dist/src/util-CSSAWO8v.js +0 -351
  851. package/dist/src/util-CkQc-fx3.cjs +0 -934
  852. package/dist/src/util-DcOlFTFa.cjs +0 -478
  853. package/dist/src/util-DluGTGVB.js +0 -395
  854. package/dist/src/util-PfQ60chz.js +0 -743
  855. package/dist/src/util-f14-CPij.js +0 -396
  856. package/dist/src/util-l9pXX3Eu.cjs +0 -357
  857. package/dist/src/util-o_BnlYqS.js +0 -2050
  858. package/dist/src/vertex-B_-gQgzc.js +0 -2
  859. package/dist/src/vertex-CU4gqoYa.js +0 -854
  860. package/dist/src/vertex-DZ42UHb3.js +0 -848
  861. package/dist/src/vertex-DsYQJA0T.cjs +0 -871
  862. package/dist/src/vertexLive-BvIaHKGB.js +0 -55
  863. package/dist/src/vertexLive-CTULqNx7.js +0 -56
  864. package/dist/src/vertexLive-DjJ_YQBe.cjs +0 -55
  865. package/dist/src/vertexLive-STUGcteB.js +0 -55
  866. package/dist/src/video-CAQGmtEV.js +0 -703
  867. package/dist/src/video-_FSTWlwX.js +0 -702
  868. package/dist/src/video-aBPJPWdt.js +0 -702
  869. package/dist/src/video-gDjkWv5m.cjs +0 -706
@@ -0,0 +1,1336 @@
1
+ import { U as getConfigDirectoryPath, o as logger } from "./logger-Gff7RMNF.js";
2
+ import { X as VERSION, t as fetchWithProxy } from "./fetch-B5KxZuKu.js";
3
+ import { a as getRequestTimeoutMs, l as modelNameFromProviderPath } from "./shared-BBI-NXjW.js";
4
+ import { t as resolveProviderEnv } from "./env-zrgUcH6g.js";
5
+ import { n as sha256 } from "./createHash-D7vud8fe.js";
6
+ import { t as OpenAiChatCompletionProvider } from "./chat-ClTFM3qq.js";
7
+ import { A as OpenAiEmbeddingProvider, k as OpenAiResponsesProvider } from "./server/index.js";
8
+ import fs from "fs";
9
+ import path from "path";
10
+ import os from "os";
11
+ import crypto from "crypto";
12
+ import WebSocket from "ws";
13
+ import JSON5 from "json5";
14
+ //#region src/providers/openclaw/device-auth.ts
15
+ const DEFAULT_CLIENT_DIR = "openclaw";
16
+ const DEFAULT_DEVICE_IDENTITY_FILE = "device-identity.json";
17
+ const DEFAULT_DEVICE_AUTH_FILE = "device-auth.json";
18
+ function defaultOpenClawClientPath(fileName) {
19
+ return path.join(getConfigDirectoryPath(true), DEFAULT_CLIENT_DIR, fileName);
20
+ }
21
+ function getDefaultOpenClawDeviceIdentityPath() {
22
+ return defaultOpenClawClientPath(DEFAULT_DEVICE_IDENTITY_FILE);
23
+ }
24
+ function getDefaultOpenClawDeviceAuthPath() {
25
+ return defaultOpenClawClientPath(DEFAULT_DEVICE_AUTH_FILE);
26
+ }
27
+ function ensureParentDirectory(filePath) {
28
+ fs.mkdirSync(path.dirname(filePath), {
29
+ recursive: true,
30
+ mode: 448
31
+ });
32
+ }
33
+ function writeJsonSecure(filePath, value) {
34
+ ensureParentDirectory(filePath);
35
+ fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, {
36
+ encoding: "utf-8",
37
+ mode: 384
38
+ });
39
+ fs.chmodSync(filePath, 384);
40
+ }
41
+ function parseJsonObject(raw) {
42
+ try {
43
+ const parsed = JSON.parse(raw);
44
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : void 0;
45
+ } catch (err) {
46
+ logger.debug("[OpenClaw Device Auth] Failed to parse JSON", {
47
+ err,
48
+ rawLength: raw.length,
49
+ rawPreview: raw.slice(0, 100)
50
+ });
51
+ return;
52
+ }
53
+ }
54
+ function normalizeDeviceMetadataValue(value) {
55
+ const trimmed = value?.trim();
56
+ if (!trimmed) return "";
57
+ return trimmed.replace(/[A-Z]/g, (letter) => letter.toLowerCase());
58
+ }
59
+ function normalizeScopes$1(scopes) {
60
+ const seen = /* @__PURE__ */ new Set();
61
+ for (const scope of scopes || []) {
62
+ const trimmed = scope.trim();
63
+ if (trimmed) seen.add(trimmed);
64
+ }
65
+ if (seen.has("operator.admin")) {
66
+ seen.add("operator.read");
67
+ seen.add("operator.write");
68
+ } else if (seen.has("operator.write")) seen.add("operator.read");
69
+ return Array.from(seen).sort();
70
+ }
71
+ function publicKeyBase64UrlFromPem(publicKeyPem) {
72
+ const publicKey = crypto.createPublicKey(publicKeyPem);
73
+ const jwk = publicKey.export({ format: "jwk" });
74
+ if (typeof jwk.x === "string" && jwk.x.trim()) return jwk.x;
75
+ const der = publicKey.export({
76
+ type: "spki",
77
+ format: "der"
78
+ });
79
+ return Buffer.from(der.subarray(Math.max(0, der.length - 32))).toString("base64url");
80
+ }
81
+ function deriveDeviceId(publicKeyPem) {
82
+ return sha256(Buffer.from(publicKeyBase64UrlFromPem(publicKeyPem), "base64url"));
83
+ }
84
+ function isValidIdentity(identity) {
85
+ try {
86
+ const publicKeyFromPrivateKey = crypto.createPublicKey(identity.privateKeyPem).export({
87
+ type: "spki",
88
+ format: "pem"
89
+ });
90
+ return identity.deviceId === deriveDeviceId(identity.publicKeyPem) && publicKeyBase64UrlFromPem(identity.publicKeyPem) === publicKeyBase64UrlFromPem(publicKeyFromPrivateKey);
91
+ } catch {
92
+ return false;
93
+ }
94
+ }
95
+ function parseIdentity(raw) {
96
+ const parsed = parseJsonObject(raw);
97
+ const identity = {
98
+ deviceId: typeof parsed?.deviceId === "string" ? parsed.deviceId : "",
99
+ publicKeyPem: typeof parsed?.publicKeyPem === "string" ? parsed.publicKeyPem : "",
100
+ privateKeyPem: typeof parsed?.privateKeyPem === "string" ? parsed.privateKeyPem : ""
101
+ };
102
+ return isValidIdentity(identity) ? identity : void 0;
103
+ }
104
+ function createDeviceIdentity() {
105
+ const keyPair = crypto.generateKeyPairSync("ed25519", {
106
+ publicKeyEncoding: {
107
+ type: "spki",
108
+ format: "pem"
109
+ },
110
+ privateKeyEncoding: {
111
+ type: "pkcs8",
112
+ format: "pem"
113
+ }
114
+ });
115
+ const publicKeyPem = keyPair.publicKey;
116
+ return {
117
+ deviceId: deriveDeviceId(publicKeyPem),
118
+ publicKeyPem,
119
+ privateKeyPem: keyPair.privateKey
120
+ };
121
+ }
122
+ function loadOrCreateOpenClawDeviceIdentity(filePath) {
123
+ const identityPath = filePath || getDefaultOpenClawDeviceIdentityPath();
124
+ try {
125
+ if (fs.existsSync(identityPath)) {
126
+ const identity = parseIdentity(fs.readFileSync(identityPath, "utf-8"));
127
+ if (identity) return identity;
128
+ }
129
+ } catch (err) {
130
+ logger.warn("[OpenClaw Device Auth] Failed to read device identity; generating new identity", {
131
+ err,
132
+ identityPath
133
+ });
134
+ }
135
+ const identity = createDeviceIdentity();
136
+ try {
137
+ writeJsonSecure(identityPath, identity);
138
+ } catch (err) {
139
+ logger.warn("[OpenClaw Device Auth] Failed to persist device identity", {
140
+ err,
141
+ identityPath
142
+ });
143
+ }
144
+ return identity;
145
+ }
146
+ function buildOpenClawDeviceAuthPayloadV3(params) {
147
+ return [
148
+ "v3",
149
+ params.deviceId,
150
+ params.clientId,
151
+ params.clientMode,
152
+ params.role,
153
+ params.scopes.join(","),
154
+ String(params.signedAtMs),
155
+ params.token ?? "",
156
+ params.nonce,
157
+ normalizeDeviceMetadataValue(params.platform),
158
+ normalizeDeviceMetadataValue(params.deviceFamily)
159
+ ].join("|");
160
+ }
161
+ function signOpenClawDevicePayload(privateKeyPem, payload) {
162
+ return crypto.sign(null, Buffer.from(payload), privateKeyPem).toString("base64url");
163
+ }
164
+ function buildSignedOpenClawDevice(params) {
165
+ const signedAt = params.nowMs ?? Date.now();
166
+ const payload = buildOpenClawDeviceAuthPayloadV3({
167
+ deviceId: params.identity.deviceId,
168
+ clientId: params.clientId,
169
+ clientMode: params.clientMode,
170
+ role: params.role,
171
+ scopes: params.scopes,
172
+ signedAtMs: signedAt,
173
+ token: params.token,
174
+ nonce: params.nonce,
175
+ platform: params.platform,
176
+ deviceFamily: params.deviceFamily
177
+ });
178
+ return {
179
+ id: params.identity.deviceId,
180
+ publicKey: publicKeyBase64UrlFromPem(params.identity.publicKeyPem),
181
+ signature: signOpenClawDevicePayload(params.identity.privateKeyPem, payload),
182
+ signedAt,
183
+ nonce: params.nonce
184
+ };
185
+ }
186
+ function parseDeviceAuthStore(raw) {
187
+ const parsed = parseJsonObject(raw);
188
+ if (!parsed || parsed.version !== 1 || typeof parsed.deviceId !== "string") return;
189
+ const tokens = {};
190
+ const rawTokens = parsed.tokens && typeof parsed.tokens === "object" && !Array.isArray(parsed.tokens) ? parsed.tokens : {};
191
+ for (const [role, tokenRecord] of Object.entries(rawTokens)) {
192
+ if (!tokenRecord || typeof tokenRecord !== "object" || Array.isArray(tokenRecord)) continue;
193
+ const record = tokenRecord;
194
+ if (typeof record.token !== "string" || !record.token.trim()) continue;
195
+ tokens[role] = {
196
+ token: record.token,
197
+ role: typeof record.role === "string" ? record.role : role,
198
+ scopes: Array.isArray(record.scopes) ? normalizeScopes$1(record.scopes.filter((scope) => typeof scope === "string")) : [],
199
+ updatedAtMs: typeof record.updatedAtMs === "number" ? record.updatedAtMs : 0
200
+ };
201
+ }
202
+ return {
203
+ version: 1,
204
+ deviceId: parsed.deviceId,
205
+ tokens
206
+ };
207
+ }
208
+ function readDeviceAuthStore(filePath) {
209
+ try {
210
+ if (!fs.existsSync(filePath)) return;
211
+ return parseDeviceAuthStore(fs.readFileSync(filePath, "utf-8"));
212
+ } catch (err) {
213
+ logger.debug("[OpenClaw Device Auth] Failed to read device auth store", {
214
+ err,
215
+ filePath
216
+ });
217
+ return;
218
+ }
219
+ }
220
+ function loadOpenClawDeviceAuthToken(params) {
221
+ const store = readDeviceAuthStore(params.filePath || getDefaultOpenClawDeviceAuthPath());
222
+ if (!store || store.deviceId !== params.deviceId) return;
223
+ const role = params.role.trim();
224
+ const tokenRecord = store.tokens[role];
225
+ const token = tokenRecord?.token.trim();
226
+ return token ? {
227
+ ...tokenRecord,
228
+ token
229
+ } : void 0;
230
+ }
231
+ function storeOpenClawDeviceAuthToken(params) {
232
+ const token = params.token.trim();
233
+ const role = params.role.trim();
234
+ if (!token || !role) return;
235
+ const authPath = params.filePath || getDefaultOpenClawDeviceAuthPath();
236
+ const existing = readDeviceAuthStore(authPath);
237
+ const store = existing && existing.deviceId === params.deviceId ? existing : {
238
+ version: 1,
239
+ deviceId: params.deviceId,
240
+ tokens: {}
241
+ };
242
+ store.tokens[role] = {
243
+ token,
244
+ role,
245
+ scopes: normalizeScopes$1(params.scopes),
246
+ updatedAtMs: Date.now()
247
+ };
248
+ try {
249
+ writeJsonSecure(authPath, store);
250
+ } catch (err) {
251
+ logger.warn("[OpenClaw Device Auth] Failed to persist device auth token", {
252
+ err,
253
+ authPath
254
+ });
255
+ }
256
+ }
257
+ function clearOpenClawDeviceAuthToken(params) {
258
+ const authPath = params.filePath || getDefaultOpenClawDeviceAuthPath();
259
+ const store = readDeviceAuthStore(authPath);
260
+ if (!store || store.deviceId !== params.deviceId) return;
261
+ delete store.tokens[params.role.trim()];
262
+ try {
263
+ writeJsonSecure(authPath, store);
264
+ } catch (err) {
265
+ logger.warn("[OpenClaw Device Auth] Failed to clear device auth token", {
266
+ err,
267
+ authPath
268
+ });
269
+ }
270
+ }
271
+ //#endregion
272
+ //#region src/providers/openclaw/shared.ts
273
+ const DEFAULT_GATEWAY_PORT = 18789;
274
+ const DEFAULT_GATEWAY_HOST = "127.0.0.1";
275
+ /**
276
+ * Cached config to avoid re-reading the file multiple times during provider init.
277
+ */
278
+ let cachedConfig;
279
+ let cachedConfigPath;
280
+ function resolveConfigPath(env) {
281
+ return resolveProviderEnv(env, ["OPENCLAW_CONFIG_PATH"])?.value || path.join(os.homedir(), ".openclaw", "openclaw.json");
282
+ }
283
+ function normalizeGatewayUrl(url, transport) {
284
+ const trimmed = url.trim();
285
+ if (!trimmed) return;
286
+ if (transport === "http") {
287
+ if (trimmed.startsWith("wss://")) return `https://${trimmed.slice(6)}`;
288
+ if (trimmed.startsWith("ws://")) return `http://${trimmed.slice(5)}`;
289
+ return trimmed;
290
+ }
291
+ if (trimmed.startsWith("https://")) return `wss://${trimmed.slice(8)}`;
292
+ if (trimmed.startsWith("http://")) return `ws://${trimmed.slice(7)}`;
293
+ return trimmed;
294
+ }
295
+ function resolveGatewayHost(gatewayConfig) {
296
+ const bind = gatewayConfig?.bind?.trim();
297
+ const customBindHost = gatewayConfig?.customBindHost?.trim();
298
+ if (!bind || bind === "auto" || bind === "loopback" || bind === "lan" || bind === "tailnet" || bind === "0.0.0.0" || bind === "::" || bind === "127.0.0.1" || bind === "localhost" || bind === "::1") return DEFAULT_GATEWAY_HOST;
299
+ if (bind === "custom") {
300
+ if (!customBindHost || customBindHost === "0.0.0.0" || customBindHost === "::" || customBindHost === "127.0.0.1" || customBindHost === "localhost" || customBindHost === "::1") return DEFAULT_GATEWAY_HOST;
301
+ return customBindHost;
302
+ }
303
+ return bind;
304
+ }
305
+ function buildLocalGatewayUrl(gatewayConfig, transport, portOverride) {
306
+ const scheme = transport === "ws" ? gatewayConfig?.tls?.enabled ? "wss" : "ws" : gatewayConfig?.tls?.enabled ? "https" : "http";
307
+ const port = portOverride ?? gatewayConfig?.port ?? 18789;
308
+ return `${scheme}://${resolveGatewayHost(gatewayConfig)}:${port}`;
309
+ }
310
+ function resolveGatewayUrlFromConfig(openclawConfig, transport, portOverride) {
311
+ const gatewayConfig = openclawConfig?.gateway;
312
+ if (!gatewayConfig) return;
313
+ if (gatewayConfig.mode === "remote") {
314
+ const remoteUrl = normalizeGatewayUrl(gatewayConfig.remote?.url ?? "", transport);
315
+ if (remoteUrl) return remoteUrl;
316
+ }
317
+ return buildLocalGatewayUrl(gatewayConfig, transport, portOverride);
318
+ }
319
+ function resolveGatewayPortOverride(env) {
320
+ const trimmedPort = (resolveProviderEnv(env, ["OPENCLAW_GATEWAY_PORT"])?.value)?.trim();
321
+ if (!trimmedPort || !/^\d+$/.test(trimmedPort)) return;
322
+ const parsedPort = Number(trimmedPort);
323
+ return Number.isInteger(parsedPort) && parsedPort > 0 && parsedPort <= 65535 ? parsedPort : void 0;
324
+ }
325
+ function toAuthSecret(kind, value) {
326
+ if (typeof value !== "string") return;
327
+ const trimmed = value?.trim();
328
+ return trimmed ? {
329
+ kind,
330
+ value: trimmed
331
+ } : void 0;
332
+ }
333
+ function resolveAuthSecretFromConfig(openclawConfig) {
334
+ const gatewayConfig = openclawConfig?.gateway;
335
+ const authMode = gatewayConfig?.auth?.mode?.trim();
336
+ const preferRemoteCredentials = gatewayConfig?.mode === "remote";
337
+ const localToken = toAuthSecret("token", gatewayConfig?.auth?.token);
338
+ const localPassword = toAuthSecret("password", gatewayConfig?.auth?.password);
339
+ const remoteToken = toAuthSecret("token", gatewayConfig?.remote?.token);
340
+ const remotePassword = toAuthSecret("password", gatewayConfig?.remote?.password);
341
+ if (preferRemoteCredentials) {
342
+ if (authMode === "password") return remotePassword || localPassword || remoteToken || localToken;
343
+ if (authMode === "token") return remoteToken || localToken || remotePassword || localPassword;
344
+ return remoteToken || remotePassword || localToken || localPassword;
345
+ }
346
+ if (authMode === "password") return localPassword || remotePassword || localToken || remoteToken;
347
+ if (authMode === "token") return localToken || remoteToken || localPassword || remotePassword;
348
+ return localToken || localPassword || remoteToken || remotePassword;
349
+ }
350
+ /**
351
+ * Read and parse the active OpenClaw configuration file.
352
+ * Results are cached based on file modification time.
353
+ * Returns undefined if the file doesn't exist or can't be parsed.
354
+ */
355
+ function readOpenClawConfig(env) {
356
+ const configPath = resolveConfigPath(env);
357
+ try {
358
+ if (!fs.existsSync(configPath)) return;
359
+ const mtime = fs.statSync(configPath).mtimeMs;
360
+ if (cachedConfig && cachedConfigPath === configPath && cachedConfig.mtime === mtime) return cachedConfig.config;
361
+ const raw = fs.readFileSync(configPath, "utf-8");
362
+ const config = JSON5.parse(raw);
363
+ cachedConfig = {
364
+ config,
365
+ mtime
366
+ };
367
+ cachedConfigPath = configPath;
368
+ return config;
369
+ } catch (err) {
370
+ logger.warn(`Failed to read OpenClaw config at ${configPath}`, { err });
371
+ return;
372
+ }
373
+ }
374
+ /**
375
+ * Auto-detect the OpenClaw gateway URL from config, env overrides, or the active config file.
376
+ */
377
+ function resolveGatewayUrl(config, env) {
378
+ return resolveGatewayTransportUrl(config, env, "http");
379
+ }
380
+ function resolveGatewayWsUrl(config, env) {
381
+ return resolveGatewayTransportUrl(config, env, "ws");
382
+ }
383
+ function resolveGatewayTransportUrl(config, env, transport) {
384
+ const configUrl = config?.gateway_url?.trim();
385
+ if (configUrl) return normalizeGatewayUrl(configUrl, transport) || configUrl;
386
+ const trimmedEnvUrl = (resolveProviderEnv(env, ["OPENCLAW_GATEWAY_URL", "CLAWDBOT_GATEWAY_URL"])?.value)?.trim();
387
+ if (trimmedEnvUrl) return normalizeGatewayUrl(trimmedEnvUrl, transport) || trimmedEnvUrl;
388
+ const portOverride = resolveGatewayPortOverride(env);
389
+ const resolvedUrl = resolveGatewayUrlFromConfig(readOpenClawConfig(env), transport, portOverride);
390
+ if (resolvedUrl) return resolvedUrl;
391
+ return `${transport === "ws" ? "ws" : "http"}://${DEFAULT_GATEWAY_HOST}:${portOverride ?? 18789}`;
392
+ }
393
+ function resolveAuthSecret(config, env) {
394
+ if (config?.auth_token) return {
395
+ kind: "token",
396
+ value: config.auth_token
397
+ };
398
+ if (config?.auth_password) return {
399
+ kind: "password",
400
+ value: config.auth_password
401
+ };
402
+ const auth = resolveProviderEnv(env, [
403
+ "OPENCLAW_GATEWAY_TOKEN",
404
+ "CLAWDBOT_GATEWAY_TOKEN",
405
+ "OPENCLAW_GATEWAY_PASSWORD",
406
+ "CLAWDBOT_GATEWAY_PASSWORD"
407
+ ]);
408
+ if (auth) return {
409
+ kind: auth.name.endsWith("_TOKEN") ? "token" : "password",
410
+ value: auth.value
411
+ };
412
+ return resolveAuthSecretFromConfig(readOpenClawConfig(env));
413
+ }
414
+ /**
415
+ * Auto-detect the OpenClaw gateway bearer secret from config, env overrides, or the active
416
+ * config file. OpenClaw accepts either a token or password as the HTTP bearer secret.
417
+ */
418
+ function resolveAuthToken(config, env) {
419
+ return resolveAuthSecret(config, env)?.value;
420
+ }
421
+ /**
422
+ * Normalize an explicit OpenClaw agent selector to the optional agent id used downstream.
423
+ * Only the canonical slash-form default alias is implicit. Colon-form compatibility aliases
424
+ * still name explicit agents, including valid agents named `default` or `openclaw`.
425
+ */
426
+ function normalizeOpenClawAgentId(agentId) {
427
+ const trimmedAgentId = agentId?.trim() ?? "";
428
+ if (!trimmedAgentId) return;
429
+ const lowerAgentId = trimmedAgentId.toLowerCase();
430
+ if (lowerAgentId === "openclaw/default") return;
431
+ if (lowerAgentId.startsWith("openclaw/")) return trimmedAgentId.slice(9).trim() || trimmedAgentId;
432
+ if (lowerAgentId.startsWith("openclaw:")) return trimmedAgentId.slice(9).trim() || trimmedAgentId;
433
+ if (lowerAgentId.startsWith("agent:")) return trimmedAgentId.slice(6).trim() || trimmedAgentId;
434
+ return trimmedAgentId;
435
+ }
436
+ /**
437
+ * Build the canonical OpenClaw model id for OpenAI-compatible endpoints.
438
+ */
439
+ function buildOpenClawModelName(agentId) {
440
+ const normalizedAgentId = normalizeOpenClawAgentId(agentId);
441
+ return normalizedAgentId ? `openclaw/${normalizedAgentId}` : "openclaw";
442
+ }
443
+ function normalizeHeaderValue(value) {
444
+ return value?.trim() || void 0;
445
+ }
446
+ /**
447
+ * Scope an unqualified session key to an explicit agent. OpenClaw canonicalizes unscoped keys
448
+ * under the configured default agent, so explicit agents must carry their scope in the key.
449
+ */
450
+ function buildOpenClawSessionKey(agentId, sessionKey) {
451
+ const trimmedSessionKey = sessionKey.trim();
452
+ const trimmedAgentId = agentId?.trim();
453
+ if (!trimmedSessionKey) return trimmedSessionKey;
454
+ if (trimmedSessionKey.startsWith(":")) throw new Error(`OpenClaw session key "${trimmedSessionKey}" must include a non-empty session ID`);
455
+ if (trimmedSessionKey.toLowerCase().startsWith("agent:")) {
456
+ const sessionKeyParts = trimmedSessionKey.split(":");
457
+ const scopedAgentId = sessionKeyParts[1]?.trim();
458
+ if (!scopedAgentId || !sessionKeyParts[2]?.trim()) throw new Error(`OpenClaw session key "${trimmedSessionKey}" must use the form "agent:<agent-id>:<session-id>"`);
459
+ if (trimmedAgentId && scopedAgentId.toLowerCase() !== trimmedAgentId.toLowerCase()) throw new Error(`OpenClaw session key targets agent "${scopedAgentId}" but the provider targets "${trimmedAgentId}"`);
460
+ return trimmedSessionKey;
461
+ }
462
+ const lowerSessionKey = trimmedSessionKey.toLowerCase();
463
+ if (lowerSessionKey === "global" || lowerSessionKey === "unknown") return trimmedSessionKey;
464
+ if (!trimmedAgentId) return trimmedSessionKey;
465
+ return `agent:${trimmedAgentId}:${trimmedSessionKey}`;
466
+ }
467
+ /**
468
+ * Build OpenClaw request context headers shared by HTTP-compatible endpoints.
469
+ */
470
+ function buildOpenClawContextHeaders(config) {
471
+ const headers = {};
472
+ const backendModel = normalizeHeaderValue(config?.backend_model || config?.model_override);
473
+ const messageChannel = normalizeHeaderValue(config?.message_channel);
474
+ const accountId = normalizeHeaderValue(config?.account_id);
475
+ const scopes = config?.scopes?.map((scope) => scope.trim()).filter(Boolean).join(",");
476
+ if (backendModel) headers["x-openclaw-model"] = backendModel;
477
+ if (messageChannel) headers["x-openclaw-message-channel"] = messageChannel;
478
+ if (accountId) headers["x-openclaw-account-id"] = accountId;
479
+ if (scopes) headers["x-openclaw-scopes"] = scopes;
480
+ return headers;
481
+ }
482
+ function resolveOpenClawBillingModelName(config) {
483
+ const backendModel = normalizeHeaderValue(config?.backend_model || config?.model_override);
484
+ if (!backendModel) return;
485
+ return backendModel.startsWith("openai/") ? backendModel.slice(7) : backendModel;
486
+ }
487
+ /**
488
+ * Build common OpenClaw headers for agent-id, session-key, and request context.
489
+ * Note: thinking_level is only supported by the WS Agent provider and is
490
+ * passed as an RPC param there, not as an HTTP header.
491
+ */
492
+ function buildOpenClawHeaders(agentId, config) {
493
+ const headers = {};
494
+ const contextHeaders = buildOpenClawContextHeaders(config);
495
+ const generatedContextHeaderNames = new Set(Object.keys(contextHeaders).map((name) => name.toLowerCase()));
496
+ let headerSessionKey;
497
+ for (const [name, value] of Object.entries(config?.headers ?? {})) {
498
+ const normalizedName = name.toLowerCase();
499
+ if (normalizedName === "x-openclaw-agent-id" || normalizedName === "x-openclaw-agent") continue;
500
+ if (normalizedName === "x-openclaw-session-key") {
501
+ headerSessionKey = value;
502
+ continue;
503
+ }
504
+ if (generatedContextHeaderNames.has(normalizedName)) continue;
505
+ headers[name] = value;
506
+ }
507
+ if (agentId) headers["x-openclaw-agent-id"] = agentId;
508
+ const sessionKey = config?.session_key ?? headerSessionKey;
509
+ if (sessionKey?.trim()) headers["x-openclaw-session-key"] = buildOpenClawSessionKey(agentId, sessionKey);
510
+ return {
511
+ ...headers,
512
+ ...contextHeaders
513
+ };
514
+ }
515
+ function buildOpenClawCallContext(context) {
516
+ const passthrough = context?.prompt?.config?.passthrough;
517
+ if (!context?.prompt?.config || !passthrough || typeof passthrough !== "object" || Array.isArray(passthrough) || !("model" in passthrough)) return context;
518
+ return {
519
+ ...context,
520
+ prompt: {
521
+ ...context.prompt,
522
+ config: {
523
+ ...context.prompt.config,
524
+ passthrough: Object.fromEntries(Object.entries(passthrough).filter(([name]) => name !== "model"))
525
+ }
526
+ }
527
+ };
528
+ }
529
+ /**
530
+ * Build provider options for OpenAI-compatible OpenClaw providers (chat, responses).
531
+ * Resolves gateway URL, auth token, and merges OpenClaw-specific headers.
532
+ */
533
+ function buildOpenClawProviderOptions(agentId, providerOptions) {
534
+ const config = providerOptions.config || {};
535
+ const env = providerOptions.env;
536
+ const gatewayUrl = resolveGatewayUrl(config, env);
537
+ const authToken = resolveAuthToken(config, env);
538
+ const passthrough = config.passthrough;
539
+ const sanitizedPassthrough = passthrough && typeof passthrough === "object" && !Array.isArray(passthrough) ? Object.fromEntries(Object.entries(passthrough).filter(([name]) => name !== "model")) : passthrough;
540
+ return {
541
+ ...providerOptions,
542
+ config: {
543
+ ...config,
544
+ ...passthrough === void 0 ? {} : { passthrough: sanitizedPassthrough },
545
+ apiBaseUrl: `${gatewayUrl}/v1`,
546
+ ...authToken && { apiKey: authToken },
547
+ apiKeyRequired: false,
548
+ headers: buildOpenClawHeaders(agentId, config)
549
+ }
550
+ };
551
+ }
552
+ //#endregion
553
+ //#region src/providers/openclaw/agent.ts
554
+ const MIN_OPENCLAW_PROTOCOL_VERSION = 3;
555
+ const MAX_OPENCLAW_PROTOCOL_VERSION = 4;
556
+ const CLIENT_ID = "gateway-client";
557
+ const CLIENT_MODE = "cli";
558
+ const CLIENT_ROLE = "operator";
559
+ const DEFAULT_SCOPES = ["operator.read", "operator.write"];
560
+ function normalizeScopes(scopes) {
561
+ const seen = /* @__PURE__ */ new Set();
562
+ const normalized = [];
563
+ for (const scope of scopes || []) {
564
+ const trimmed = scope.trim();
565
+ if (trimmed && !seen.has(trimmed)) {
566
+ seen.add(trimmed);
567
+ normalized.push(trimmed);
568
+ }
569
+ }
570
+ return normalized;
571
+ }
572
+ function getStringArray(value) {
573
+ if (!Array.isArray(value)) return;
574
+ const strings = value.filter((item) => typeof item === "string");
575
+ return strings.length > 0 ? strings : void 0;
576
+ }
577
+ function stripRetryMarker(result) {
578
+ const { retryWithDeviceToken: _retryWithDeviceToken, ...providerResponse } = result;
579
+ return providerResponse;
580
+ }
581
+ /**
582
+ * OpenClaw WebSocket Agent Provider
583
+ *
584
+ * Custom provider that uses the native OpenClaw WS RPC protocol to invoke agents.
585
+ * Supports full streaming with event accumulation.
586
+ *
587
+ * Protocol flow:
588
+ * 1. Open WS connection to gateway
589
+ * 2. Receive connect.challenge event → send signed connect request
590
+ * 3. Receive connect response → persist device token and send agent request
591
+ * 4. Receive agent accepted response → send agent.wait
592
+ * 5. Accumulate streaming "agent" events (assistant text/delta, lifecycle errors, error streams)
593
+ * 6. Resolve on agent.wait response
594
+ *
595
+ * Usage:
596
+ * openclaw:agent - configured default agent
597
+ * openclaw:agent:main - explicit agent ID
598
+ * openclaw:agent:my-agent - custom agent ID
599
+ */
600
+ var OpenClawAgentProvider = class {
601
+ agentId;
602
+ gatewayUrl;
603
+ authKind;
604
+ authSecret;
605
+ openclawConfig;
606
+ timeoutMs;
607
+ scopes;
608
+ hasExplicitScopes;
609
+ activeConnections = /* @__PURE__ */ new Set();
610
+ constructor(agentId, providerOptions = {}) {
611
+ this.agentId = normalizeOpenClawAgentId(agentId);
612
+ this.openclawConfig = providerOptions.config || {};
613
+ const env = providerOptions.env;
614
+ this.gatewayUrl = resolveGatewayWsUrl(this.openclawConfig, env);
615
+ const authSecret = resolveAuthSecret(this.openclawConfig, env);
616
+ this.authKind = authSecret?.kind;
617
+ this.authSecret = authSecret?.value;
618
+ this.timeoutMs = this.openclawConfig.timeoutMs ?? getRequestTimeoutMs();
619
+ this.scopes = normalizeScopes(this.openclawConfig.scopes);
620
+ this.hasExplicitScopes = this.scopes.length > 0;
621
+ if (!this.hasExplicitScopes) this.scopes = [...DEFAULT_SCOPES];
622
+ }
623
+ id() {
624
+ return this.agentId ? `openclaw:agent:${this.agentId}` : "openclaw:agent";
625
+ }
626
+ toString() {
627
+ return `[OpenClaw Agent Provider ${this.agentId ?? "default"}]`;
628
+ }
629
+ toJSON() {
630
+ return { provider: this.id() };
631
+ }
632
+ async cleanup() {
633
+ for (const ws of this.activeConnections) ws.close();
634
+ this.activeConnections.clear();
635
+ }
636
+ async callApi(prompt) {
637
+ let sessionKey = this.openclawConfig.session_key?.trim() || `promptfoo-${crypto.randomUUID()}`;
638
+ if (sessionKey.toLowerCase() === "unknown") {
639
+ if (!this.agentId) throw new Error("OpenClaw WS requires an explicit agent for session_key \"unknown\". Select openclaw:agent:<agent-id>, use another session key, or omit session_key.");
640
+ sessionKey = `agent:${this.agentId}:${sessionKey}`;
641
+ } else if (sessionKey.toLowerCase() === "global" && this.agentId && this.agentId.toLowerCase() !== "main") sessionKey = `agent:${this.agentId}:${sessionKey}`;
642
+ sessionKey = buildOpenClawSessionKey(this.agentId, sessionKey);
643
+ const firstResult = await this.callApiOnce(prompt, sessionKey);
644
+ if (firstResult.retryWithDeviceToken) {
645
+ const retryDeviceToken = this.resolveDeviceTokenForRetry();
646
+ if (retryDeviceToken) return stripRetryMarker(await this.callApiOnce(prompt, sessionKey, retryDeviceToken));
647
+ }
648
+ return stripRetryMarker(firstResult);
649
+ }
650
+ callApiOnce(prompt, sessionKey, retryDeviceToken) {
651
+ return new Promise((resolve) => {
652
+ const wsHeaders = this.buildWebSocketHeaders();
653
+ const ws = wsHeaders ? new WebSocket(this.gatewayUrl, { headers: wsHeaders }) : new WebSocket(this.gatewayUrl);
654
+ this.activeConnections.add(ws);
655
+ let resolved = false;
656
+ let timeout;
657
+ const finish = (result, closeSocket = true) => {
658
+ if (resolved) return;
659
+ resolved = true;
660
+ clearTimeout(timeout);
661
+ this.activeConnections.delete(ws);
662
+ if (closeSocket) ws.close();
663
+ resolve(result);
664
+ };
665
+ const state = {
666
+ agentRequestId: crypto.randomUUID(),
667
+ waitRequestId: crypto.randomUUID(),
668
+ idempotencyKey: crypto.randomUUID(),
669
+ lastText: "",
670
+ lastError: "",
671
+ connected: false,
672
+ prompt,
673
+ sessionKey,
674
+ ws,
675
+ finish,
676
+ retryDeviceToken
677
+ };
678
+ timeout = setTimeout(() => {
679
+ finish({ error: `OpenClaw agent request timed out after ${this.timeoutMs}ms` });
680
+ }, this.timeoutMs);
681
+ ws.on("error", (err) => {
682
+ finish({ error: `OpenClaw WebSocket error: ${err.message}` });
683
+ });
684
+ ws.on("close", () => {
685
+ this.activeConnections.delete(ws);
686
+ if (!resolved) finish({ error: "OpenClaw WebSocket connection closed unexpectedly" }, false);
687
+ });
688
+ ws.on("message", (data) => {
689
+ const frame = this.parseFrame(data);
690
+ if (frame) this.handleFrame(frame, state);
691
+ });
692
+ });
693
+ }
694
+ parseFrame(data) {
695
+ try {
696
+ const frame = JSON.parse(data.toString());
697
+ logger.debug("[OpenClaw Agent] Frame received", {
698
+ type: frame.type,
699
+ event: frame.event,
700
+ id: frame.id,
701
+ ok: frame.ok,
702
+ payloadStatus: frame.payload && typeof frame.payload.status === "string" ? frame.payload.status : void 0,
703
+ payloadStream: frame.payload && typeof frame.payload.stream === "string" ? frame.payload.stream : void 0
704
+ });
705
+ return frame;
706
+ } catch {
707
+ logger.debug("[OpenClaw Agent] Failed to parse WS frame");
708
+ return;
709
+ }
710
+ }
711
+ handleFrame(frame, state) {
712
+ try {
713
+ if (frame.type === "event" && frame.event === "connect.challenge") {
714
+ this.handleConnectChallenge(frame, state);
715
+ return;
716
+ }
717
+ if (frame.type === "res" && !state.connected) {
718
+ this.handleConnectResponse(frame, state);
719
+ return;
720
+ }
721
+ if (frame.type === "res" && frame.id === state.agentRequestId) {
722
+ this.handleAgentAccepted(frame, state);
723
+ return;
724
+ }
725
+ if (frame.type === "event" && frame.event === "agent") {
726
+ this.handleAgentEvent(frame, state);
727
+ return;
728
+ }
729
+ if (frame.type === "res" && frame.id === state.waitRequestId) this.handleAgentWaitResponse(frame, state);
730
+ } catch (err) {
731
+ state.finish({ error: `OpenClaw WebSocket error: ${err instanceof Error ? err.message : String(err)}` });
732
+ }
733
+ }
734
+ handleConnectChallenge(frame, state) {
735
+ state.connectAuthState = this.buildConnectAuthState(state.retryDeviceToken);
736
+ this.sendJson(state.ws, {
737
+ type: "req",
738
+ id: crypto.randomUUID(),
739
+ method: "connect",
740
+ params: this.buildConnectParams(frame, state.connectAuthState)
741
+ });
742
+ }
743
+ handleConnectResponse(frame, state) {
744
+ if (!frame.ok) {
745
+ this.clearStoredDeviceTokenOnFailure(state.connectAuthState, frame.error);
746
+ state.finish({
747
+ error: this.formatConnectError(frame.error),
748
+ retryWithDeviceToken: !state.retryDeviceToken && this.shouldRetryConnectWithDeviceToken(frame.error)
749
+ });
750
+ return;
751
+ }
752
+ state.connected = true;
753
+ this.storeDeviceTokenFromHello(frame.payload, state.connectAuthState);
754
+ this.sendJson(state.ws, {
755
+ type: "req",
756
+ id: state.agentRequestId,
757
+ method: "agent",
758
+ params: this.buildAgentRequestParams(state)
759
+ });
760
+ }
761
+ buildAgentRequestParams(state) {
762
+ return {
763
+ message: state.prompt,
764
+ ...this.agentId && { agentId: this.agentId },
765
+ idempotencyKey: state.idempotencyKey,
766
+ sessionKey: state.sessionKey,
767
+ ...this.openclawConfig.message_channel && { channel: this.openclawConfig.message_channel },
768
+ ...this.openclawConfig.account_id && { accountId: this.openclawConfig.account_id },
769
+ ...this.openclawConfig.thinking_level && { thinking: this.openclawConfig.thinking_level },
770
+ ...this.openclawConfig.extra_system_prompt && { extraSystemPrompt: this.openclawConfig.extra_system_prompt }
771
+ };
772
+ }
773
+ handleAgentAccepted(frame, state) {
774
+ if (!frame.ok) {
775
+ state.finish({ error: `OpenClaw agent error: ${frame.error?.message || "unknown error"}` });
776
+ return;
777
+ }
778
+ const payload = frame.payload;
779
+ state.runId = typeof payload?.runId === "string" && payload.runId.trim() ? payload.runId : void 0;
780
+ if (!state.runId) {
781
+ logger.warn("[OpenClaw Agent] Missing runId in accepted response", {
782
+ agentId: this.agentId,
783
+ payload
784
+ });
785
+ state.finish({ error: "OpenClaw agent error: gateway accepted request without a runId" });
786
+ return;
787
+ }
788
+ this.sendJson(state.ws, {
789
+ type: "req",
790
+ id: state.waitRequestId,
791
+ method: "agent.wait",
792
+ params: {
793
+ runId: state.runId,
794
+ timeoutMs: this.timeoutMs
795
+ }
796
+ });
797
+ }
798
+ handleAgentEvent(frame, state) {
799
+ const payload = frame.payload;
800
+ if (payload?.runId && state.runId && payload.runId !== state.runId) return;
801
+ if (payload?.stream === "lifecycle" && payload.data?.phase === "error") {
802
+ state.lastError = payload.data.error || "OpenClaw agent lifecycle error";
803
+ return;
804
+ }
805
+ if (payload?.stream === "error") {
806
+ state.lastError = payload.data?.error || payload.data?.reason || "OpenClaw agent stream error";
807
+ return;
808
+ }
809
+ if (payload?.stream !== "assistant") return;
810
+ if (typeof payload?.data?.text === "string") {
811
+ state.lastText = payload.data.text;
812
+ state.lastError = "";
813
+ return;
814
+ }
815
+ if (typeof payload?.data?.delta === "string") {
816
+ state.lastText += payload.data.delta;
817
+ state.lastError = "";
818
+ }
819
+ }
820
+ handleAgentWaitResponse(frame, state) {
821
+ if (!frame.ok) {
822
+ state.finish({ error: `OpenClaw agent error: ${frame.error?.message || "unknown error"}` });
823
+ return;
824
+ }
825
+ const payload = frame.payload;
826
+ if (payload?.status === "error") {
827
+ state.finish({ error: `OpenClaw agent error: ${payload.error || "unknown error"}` });
828
+ return;
829
+ }
830
+ if (payload?.status === "timeout") {
831
+ state.finish({ error: `OpenClaw agent error: timed out waiting for run ${state.runId}` });
832
+ return;
833
+ }
834
+ const finalText = typeof payload?.output === "string" ? payload.output : typeof payload?.text === "string" ? payload.text : void 0;
835
+ if (state.lastText || finalText) {
836
+ state.finish({ output: state.lastText || finalText });
837
+ return;
838
+ }
839
+ if (state.lastError) {
840
+ state.finish({ error: `OpenClaw agent error: ${state.lastError}` });
841
+ return;
842
+ }
843
+ state.finish({ output: "No output from agent" });
844
+ }
845
+ sendJson(ws, payload) {
846
+ ws.send(JSON.stringify(payload));
847
+ }
848
+ buildWebSocketHeaders() {
849
+ const headers = {
850
+ ...this.openclawConfig.headers || {},
851
+ ...this.openclawConfig.ws_headers || {}
852
+ };
853
+ return Object.keys(headers).length > 0 ? headers : void 0;
854
+ }
855
+ buildConnectAuthState(retryDeviceToken) {
856
+ const deviceIdentity = this.loadDeviceIdentity();
857
+ const storedOrConfiguredDeviceToken = deviceIdentity ? this.resolveDeviceTokenForConnect(deviceIdentity) : void 0;
858
+ const deviceToken = retryDeviceToken || storedOrConfiguredDeviceToken;
859
+ if (retryDeviceToken) return {
860
+ auth: { deviceToken: retryDeviceToken.token },
861
+ deviceIdentity,
862
+ deviceTokenSource: retryDeviceToken.source,
863
+ kind: "deviceToken",
864
+ scopes: this.resolveScopesForDeviceToken(retryDeviceToken),
865
+ signatureToken: retryDeviceToken.token
866
+ };
867
+ if (this.authSecret && this.authKind) return {
868
+ auth: this.authKind === "password" ? { password: this.authSecret } : { token: this.authSecret },
869
+ deviceIdentity,
870
+ kind: this.authKind,
871
+ scopes: this.scopes,
872
+ signatureToken: this.authKind === "token" ? this.authSecret : null
873
+ };
874
+ if (deviceToken) return {
875
+ auth: { deviceToken: deviceToken.token },
876
+ deviceIdentity,
877
+ deviceTokenSource: deviceToken.source,
878
+ kind: "deviceToken",
879
+ scopes: this.resolveScopesForDeviceToken(deviceToken),
880
+ signatureToken: deviceToken.token
881
+ };
882
+ return {
883
+ deviceIdentity,
884
+ kind: "none",
885
+ scopes: this.scopes,
886
+ signatureToken: null
887
+ };
888
+ }
889
+ buildConnectParams(frame, authState) {
890
+ const nonce = this.extractChallengeNonce(frame);
891
+ const params = {
892
+ minProtocol: MIN_OPENCLAW_PROTOCOL_VERSION,
893
+ maxProtocol: MAX_OPENCLAW_PROTOCOL_VERSION,
894
+ client: {
895
+ id: CLIENT_ID,
896
+ displayName: "promptfoo",
897
+ version: VERSION,
898
+ platform: process.platform,
899
+ ...this.openclawConfig.device_family && { deviceFamily: this.openclawConfig.device_family },
900
+ mode: CLIENT_MODE
901
+ },
902
+ role: CLIENT_ROLE,
903
+ scopes: authState.scopes,
904
+ caps: [],
905
+ commands: [],
906
+ permissions: {},
907
+ ...authState.auth && { auth: authState.auth }
908
+ };
909
+ const device = this.buildSignedDevice(authState, nonce, frame.payload?.ts);
910
+ if (device) params.device = device;
911
+ return params;
912
+ }
913
+ buildSignedDevice(authState, nonce, challengeTimestamp) {
914
+ if (!authState.deviceIdentity || this.openclawConfig.disable_device_auth) return;
915
+ if (typeof challengeTimestamp !== "number" || !Number.isSafeInteger(challengeTimestamp) || challengeTimestamp < 0) throw new Error("Invalid OpenClaw connect challenge timestamp");
916
+ try {
917
+ return buildSignedOpenClawDevice({
918
+ identity: authState.deviceIdentity,
919
+ clientId: CLIENT_ID,
920
+ clientMode: CLIENT_MODE,
921
+ role: CLIENT_ROLE,
922
+ scopes: authState.scopes,
923
+ nonce,
924
+ nowMs: challengeTimestamp,
925
+ token: authState.signatureToken,
926
+ platform: process.platform,
927
+ deviceFamily: this.openclawConfig.device_family
928
+ });
929
+ } catch (err) {
930
+ logger.warn("[OpenClaw Agent] Failed to sign device identity; connecting without device auth", { err });
931
+ return;
932
+ }
933
+ }
934
+ loadDeviceIdentity() {
935
+ if (this.openclawConfig.disable_device_auth) return;
936
+ try {
937
+ return loadOrCreateOpenClawDeviceIdentity(this.openclawConfig.device_identity_path);
938
+ } catch (err) {
939
+ logger.warn("[OpenClaw Agent] Failed to load device identity", { err });
940
+ return;
941
+ }
942
+ }
943
+ resolveDeviceTokenForConnect(deviceIdentity) {
944
+ const configDeviceToken = this.openclawConfig.device_token?.trim();
945
+ if (configDeviceToken) return {
946
+ token: configDeviceToken,
947
+ scopes: this.scopes,
948
+ source: "config"
949
+ };
950
+ const storedDeviceToken = loadOpenClawDeviceAuthToken({
951
+ deviceId: deviceIdentity.deviceId,
952
+ role: CLIENT_ROLE,
953
+ filePath: this.openclawConfig.device_auth_path
954
+ });
955
+ if (!storedDeviceToken?.token) return;
956
+ return {
957
+ token: storedDeviceToken.token,
958
+ scopes: this.hasExplicitScopes ? this.scopes : storedDeviceToken.scopes,
959
+ source: "stored"
960
+ };
961
+ }
962
+ resolveDeviceTokenForRetry() {
963
+ const identity = this.loadDeviceIdentity();
964
+ if (!identity) return;
965
+ const deviceToken = this.resolveDeviceTokenForConnect(identity);
966
+ return deviceToken ? {
967
+ ...deviceToken,
968
+ source: "retry"
969
+ } : void 0;
970
+ }
971
+ resolveScopesForDeviceToken(deviceToken) {
972
+ if (this.hasExplicitScopes) return this.scopes;
973
+ return normalizeScopes([...this.scopes, ...deviceToken.scopes || []]);
974
+ }
975
+ storeDeviceTokenFromHello(payload, authState) {
976
+ if (!authState?.deviceIdentity) return;
977
+ const authPayload = payload?.auth && typeof payload.auth === "object" && !Array.isArray(payload.auth) ? payload.auth : void 0;
978
+ const deviceToken = typeof authPayload?.deviceToken === "string" ? authPayload.deviceToken : "";
979
+ if (!deviceToken.trim()) return;
980
+ const scopes = getStringArray(authPayload?.scopes) || authState.scopes;
981
+ const role = typeof authPayload?.role === "string" && authPayload.role.trim() ? authPayload.role : CLIENT_ROLE;
982
+ storeOpenClawDeviceAuthToken({
983
+ deviceId: authState.deviceIdentity.deviceId,
984
+ role,
985
+ token: deviceToken,
986
+ scopes,
987
+ filePath: this.openclawConfig.device_auth_path
988
+ });
989
+ }
990
+ clearStoredDeviceTokenOnFailure(authState, error) {
991
+ if (!authState?.deviceIdentity || authState.kind !== "deviceToken" || authState.deviceTokenSource === "config") return;
992
+ const detailCode = this.getConnectErrorDetailCode(error);
993
+ const topLevelCode = error?.code;
994
+ if (detailCode !== "AUTH_DEVICE_TOKEN_MISMATCH" && topLevelCode !== "AUTH_DEVICE_TOKEN_MISMATCH") return;
995
+ clearOpenClawDeviceAuthToken({
996
+ deviceId: authState.deviceIdentity.deviceId,
997
+ role: CLIENT_ROLE,
998
+ filePath: this.openclawConfig.device_auth_path
999
+ });
1000
+ }
1001
+ extractChallengeNonce(frame) {
1002
+ const nonce = frame.payload?.nonce;
1003
+ return typeof nonce === "string" ? nonce : "";
1004
+ }
1005
+ getConnectErrorDetailCode(error) {
1006
+ return error?.details?.code || error?.code;
1007
+ }
1008
+ shouldRetryConnectWithDeviceToken(error) {
1009
+ const detailCode = this.getConnectErrorDetailCode(error);
1010
+ const recommendedNextStep = error?.details?.recommendedNextStep;
1011
+ return detailCode === "AUTH_TOKEN_MISMATCH" || error?.details?.canRetryWithDeviceToken === true || recommendedNextStep === "retry_with_device_token";
1012
+ }
1013
+ formatConnectError(error) {
1014
+ const message = error?.message || "unknown error";
1015
+ const detailCode = this.getConnectErrorDetailCode(error);
1016
+ return detailCode && !message.includes(detailCode) ? `OpenClaw connect failed: ${message} (${detailCode})` : `OpenClaw connect failed: ${message}`;
1017
+ }
1018
+ };
1019
+ //#endregion
1020
+ //#region src/providers/openclaw/chat.ts
1021
+ /**
1022
+ * OpenClaw chat provider extends OpenAI chat completion provider.
1023
+ *
1024
+ * OpenClaw exposes an OpenAI-compatible HTTP API at /v1/chat/completions.
1025
+ * This provider auto-detects gateway URL and bearer auth from:
1026
+ * 1. Explicit config (gateway_url, auth_token, auth_password)
1027
+ * 2. Environment variables (OPENCLAW_GATEWAY_URL, OPENCLAW_GATEWAY_TOKEN, OPENCLAW_GATEWAY_PASSWORD)
1028
+ * 3. The active OpenClaw config file (OPENCLAW_CONFIG_PATH or ~/.openclaw/openclaw.json),
1029
+ * including gateway.remote.url and gateway.tls.enabled
1030
+ *
1031
+ * Usage:
1032
+ * openclaw - configured default agent
1033
+ * openclaw:main - specific agent
1034
+ * openclaw:coding-agent - named agent
1035
+ */
1036
+ var OpenClawChatProvider = class extends OpenAiChatCompletionProvider {
1037
+ agentId;
1038
+ constructor(agentId, providerOptions = {}) {
1039
+ const normalizedAgentId = normalizeOpenClawAgentId(agentId);
1040
+ super(buildOpenClawModelName(normalizedAgentId), buildOpenClawProviderOptions(normalizedAgentId, providerOptions));
1041
+ this.agentId = normalizedAgentId;
1042
+ }
1043
+ id() {
1044
+ return this.agentId ? `openclaw:${this.agentId}` : "openclaw";
1045
+ }
1046
+ toString() {
1047
+ return `[OpenClaw Provider ${this.agentId ?? "default"}]`;
1048
+ }
1049
+ getApiUrlDefault() {
1050
+ return `http://${DEFAULT_GATEWAY_HOST}:${DEFAULT_GATEWAY_PORT}/v1`;
1051
+ }
1052
+ getApiKey() {
1053
+ return this.config.apiKey;
1054
+ }
1055
+ getApiUrl() {
1056
+ return this.config.apiBaseUrl || this.getApiUrlDefault();
1057
+ }
1058
+ async getOpenAiBody(prompt, context, callApiOptions) {
1059
+ const result = await super.getOpenAiBody(prompt, buildOpenClawCallContext(context), callApiOptions);
1060
+ return {
1061
+ ...result,
1062
+ body: {
1063
+ ...result.body,
1064
+ model: this.modelName
1065
+ },
1066
+ config: {
1067
+ ...result.config,
1068
+ headers: buildOpenClawHeaders(this.agentId, result.config)
1069
+ }
1070
+ };
1071
+ }
1072
+ getGenAISystem() {
1073
+ return "openclaw";
1074
+ }
1075
+ getBillingModelName(config) {
1076
+ return resolveOpenClawBillingModelName(config) || this.modelName;
1077
+ }
1078
+ };
1079
+ //#endregion
1080
+ //#region src/providers/openclaw/embedding.ts
1081
+ /**
1082
+ * OpenClaw embedding provider extends the OpenAI-compatible embeddings provider.
1083
+ *
1084
+ * The OpenClaw gateway accepts agent-target model ids at /v1/embeddings and
1085
+ * optionally accepts x-openclaw-model as the backend embedding-model override.
1086
+ */
1087
+ var OpenClawEmbeddingProvider = class extends OpenAiEmbeddingProvider {
1088
+ agentId;
1089
+ constructor(agentId, providerOptions = {}) {
1090
+ const normalizedAgentId = normalizeOpenClawAgentId(agentId);
1091
+ super(buildOpenClawModelName(normalizedAgentId), buildOpenClawProviderOptions(normalizedAgentId, providerOptions));
1092
+ this.agentId = normalizedAgentId;
1093
+ }
1094
+ id() {
1095
+ return this.agentId ? `openclaw:embedding:${this.agentId}` : "openclaw:embedding";
1096
+ }
1097
+ toString() {
1098
+ return `[OpenClaw Embedding Provider ${this.agentId ?? "default"}]`;
1099
+ }
1100
+ getApiUrlDefault() {
1101
+ return `http://${DEFAULT_GATEWAY_HOST}:${DEFAULT_GATEWAY_PORT}/v1`;
1102
+ }
1103
+ getApiKey() {
1104
+ return this.config.apiKey;
1105
+ }
1106
+ getApiUrl() {
1107
+ return this.config.apiBaseUrl || this.getApiUrlDefault();
1108
+ }
1109
+ getBillingModelName() {
1110
+ return resolveOpenClawBillingModelName(this.config) || this.modelName;
1111
+ }
1112
+ };
1113
+ //#endregion
1114
+ //#region src/providers/openclaw/responses.ts
1115
+ function inferHiddenCachedInputTokensFromOpenClawUsage(usage) {
1116
+ const inputTokens = usage?.input_tokens;
1117
+ const outputTokens = usage?.output_tokens;
1118
+ const totalTokens = usage?.total_tokens;
1119
+ if (typeof inputTokens !== "number" || typeof outputTokens !== "number" || typeof totalTokens !== "number") return 0;
1120
+ return Math.max(totalTokens - inputTokens - outputTokens, 0);
1121
+ }
1122
+ /**
1123
+ * OpenClaw Responses API Provider
1124
+ *
1125
+ * Extends OpenAI Responses API provider with OpenClaw-specific configuration.
1126
+ * Routes through the OpenClaw gateway's /v1/responses endpoint.
1127
+ *
1128
+ * Requires `gateway.http.endpoints.responses.enabled=true` in OpenClaw config.
1129
+ *
1130
+ * Usage:
1131
+ * openclaw:responses - configured default agent
1132
+ * openclaw:responses:main - explicit agent ID
1133
+ * openclaw:responses:X - custom agent ID
1134
+ */
1135
+ var OpenClawResponsesProvider = class extends OpenAiResponsesProvider {
1136
+ agentId;
1137
+ constructor(agentId, providerOptions = {}) {
1138
+ const normalizedAgentId = normalizeOpenClawAgentId(agentId);
1139
+ super(buildOpenClawModelName(normalizedAgentId), buildOpenClawProviderOptions(normalizedAgentId, providerOptions));
1140
+ this.agentId = normalizedAgentId;
1141
+ }
1142
+ id() {
1143
+ return this.agentId ? `openclaw:responses:${this.agentId}` : "openclaw:responses";
1144
+ }
1145
+ toString() {
1146
+ return `[OpenClaw Responses Provider ${this.agentId ?? "default"}]`;
1147
+ }
1148
+ getApiUrlDefault() {
1149
+ return `http://${DEFAULT_GATEWAY_HOST}:${DEFAULT_GATEWAY_PORT}/v1`;
1150
+ }
1151
+ getApiKey() {
1152
+ return this.config.apiKey;
1153
+ }
1154
+ getApiUrl() {
1155
+ return this.config.apiBaseUrl || this.getApiUrlDefault();
1156
+ }
1157
+ getBillingModelName(config) {
1158
+ return resolveOpenClawBillingModelName(config) || this.modelName;
1159
+ }
1160
+ getBillingUsage(data, _config) {
1161
+ const usage = data.usage;
1162
+ const inferredCachedTokens = inferHiddenCachedInputTokensFromOpenClawUsage(usage);
1163
+ if (inferredCachedTokens <= 0) return usage;
1164
+ return {
1165
+ ...usage,
1166
+ input_tokens: (usage?.input_tokens ?? 0) + inferredCachedTokens,
1167
+ input_tokens_details: {
1168
+ ...usage?.input_tokens_details,
1169
+ cached_tokens: inferredCachedTokens
1170
+ }
1171
+ };
1172
+ }
1173
+ applyBilling(result, data, config, cached) {
1174
+ const usage = data.usage;
1175
+ const inferredCachedTokens = inferHiddenCachedInputTokensFromOpenClawUsage(usage);
1176
+ if (inferredCachedTokens <= 0) return super.applyBilling(result, data, config, cached);
1177
+ const adjustedResult = {
1178
+ ...result,
1179
+ tokenUsage: result.tokenUsage ? {
1180
+ ...result.tokenUsage,
1181
+ prompt: (result.tokenUsage.prompt ?? 0) + inferredCachedTokens,
1182
+ completionDetails: {
1183
+ ...result.tokenUsage.completionDetails,
1184
+ cacheReadInputTokens: inferredCachedTokens
1185
+ }
1186
+ } : result.tokenUsage
1187
+ };
1188
+ return super.applyBilling(adjustedResult, data, config, cached);
1189
+ }
1190
+ async getOpenAiBody(prompt, context, callApiOptions) {
1191
+ const result = await super.getOpenAiBody(prompt, buildOpenClawCallContext(context), callApiOptions);
1192
+ if ("text" in result.body) delete result.body.text;
1193
+ return {
1194
+ ...result,
1195
+ body: {
1196
+ ...result.body,
1197
+ model: this.modelName
1198
+ },
1199
+ config: {
1200
+ ...result.config,
1201
+ headers: buildOpenClawHeaders(this.agentId, result.config)
1202
+ }
1203
+ };
1204
+ }
1205
+ };
1206
+ //#endregion
1207
+ //#region src/providers/openclaw/tools.ts
1208
+ /**
1209
+ * OpenClaw Tool Invoke Provider
1210
+ *
1211
+ * Simple HTTP provider for direct tool invocation via POST /tools/invoke.
1212
+ * The tool name is extracted from the provider path:
1213
+ * openclaw:tools:sessions_list → tool="sessions_list"
1214
+ *
1215
+ * The prompt is parsed as JSON for tool arguments. If it's not valid JSON,
1216
+ * it's passed as a single `input` argument.
1217
+ *
1218
+ * Usage:
1219
+ * openclaw:tools:sessions_list - invoke the sessions_list tool
1220
+ * openclaw:tools:session_status - invoke the session_status tool
1221
+ *
1222
+ * Optional config:
1223
+ * action - tool sub-action, forwarded as body.action
1224
+ * dry_run - dry-run hint, forwarded as body.dryRun
1225
+ */
1226
+ var OpenClawToolInvokeProvider = class {
1227
+ toolName;
1228
+ gatewayUrl;
1229
+ authToken;
1230
+ openclawConfig;
1231
+ timeoutMs;
1232
+ constructor(toolName, providerOptions = {}) {
1233
+ this.toolName = toolName;
1234
+ this.openclawConfig = providerOptions.config || {};
1235
+ const env = providerOptions.env;
1236
+ this.gatewayUrl = resolveGatewayUrl(this.openclawConfig, env);
1237
+ this.authToken = resolveAuthToken(this.openclawConfig, env);
1238
+ this.timeoutMs = this.openclawConfig.timeoutMs ?? getRequestTimeoutMs();
1239
+ }
1240
+ id() {
1241
+ return `openclaw:tools:${this.toolName}`;
1242
+ }
1243
+ toString() {
1244
+ return `[OpenClaw Tool Provider ${this.toolName}]`;
1245
+ }
1246
+ toJSON() {
1247
+ return { provider: this.id() };
1248
+ }
1249
+ async callApi(prompt) {
1250
+ let args;
1251
+ try {
1252
+ args = JSON.parse(prompt);
1253
+ } catch {
1254
+ args = { input: prompt };
1255
+ }
1256
+ const url = `${this.gatewayUrl}/tools/invoke`;
1257
+ const headers = {
1258
+ "Content-Type": "application/json",
1259
+ ...this.openclawConfig.headers || {},
1260
+ ...buildOpenClawContextHeaders(this.openclawConfig)
1261
+ };
1262
+ if (this.authToken) headers["Authorization"] = `Bearer ${this.authToken}`;
1263
+ const body = {
1264
+ tool: this.toolName,
1265
+ ...this.openclawConfig.action && { action: this.openclawConfig.action },
1266
+ args,
1267
+ ...typeof this.openclawConfig.dry_run === "boolean" && { dryRun: this.openclawConfig.dry_run },
1268
+ ...this.openclawConfig.session_key && { sessionKey: this.openclawConfig.session_key }
1269
+ };
1270
+ logger.debug(`[OpenClaw Tool] POST ${url}`, {
1271
+ tool: this.toolName,
1272
+ args
1273
+ });
1274
+ try {
1275
+ const controller = new AbortController();
1276
+ const fetchTimeout = setTimeout(() => controller.abort(), this.timeoutMs);
1277
+ const response = await fetchWithProxy(url, {
1278
+ method: "POST",
1279
+ headers,
1280
+ body: JSON.stringify(body),
1281
+ signal: controller.signal
1282
+ }).finally(() => clearTimeout(fetchTimeout));
1283
+ if (!response.ok) {
1284
+ const text = await response.text();
1285
+ return { error: `OpenClaw tool invoke failed (${response.status}): ${text}` };
1286
+ }
1287
+ const data = await response.json();
1288
+ if (data.ok) return { output: typeof data.result === "string" ? data.result : JSON.stringify(data.result) };
1289
+ if (typeof data.error === "string") return { error: data.error };
1290
+ return { error: data.error?.message || data.error?.type || data.error?.code || "Unknown tool error" };
1291
+ } catch (err) {
1292
+ return { error: `OpenClaw tool invoke error: ${err instanceof Error ? err.message : String(err)}` };
1293
+ }
1294
+ }
1295
+ };
1296
+ //#endregion
1297
+ //#region src/providers/openclaw/index.ts
1298
+ /**
1299
+ * Create an OpenClaw provider from a provider path string.
1300
+ *
1301
+ * Routing:
1302
+ * openclaw → OpenClawChatProvider(default agent)
1303
+ * openclaw:main → OpenClawChatProvider('main')
1304
+ * openclaw:my-agent → OpenClawChatProvider('my-agent')
1305
+ * openclaw:responses → OpenClawResponsesProvider(default agent)
1306
+ * openclaw:responses:X → OpenClawResponsesProvider('X')
1307
+ * openclaw:embedding → OpenClawEmbeddingProvider(default agent)
1308
+ * openclaw:embedding:X → OpenClawEmbeddingProvider('X')
1309
+ * openclaw:embeddings → OpenClawEmbeddingProvider(default agent)
1310
+ * openclaw:embeddings:X → OpenClawEmbeddingProvider('X')
1311
+ * openclaw:agent → OpenClawAgentProvider(default agent)
1312
+ * openclaw:agent:X → OpenClawAgentProvider('X')
1313
+ * openclaw:tools:sessions_list → OpenClawToolInvokeProvider('sessions_list')
1314
+ */
1315
+ function createOpenClawProvider(providerPath, providerOptions = {}, env) {
1316
+ const splits = providerPath.split(":");
1317
+ const keyword = splits[1];
1318
+ const opts = {
1319
+ ...providerOptions,
1320
+ env
1321
+ };
1322
+ const modelName = modelNameFromProviderPath(providerPath, 2);
1323
+ if (keyword === "responses") return new OpenClawResponsesProvider(modelName, opts);
1324
+ if (keyword === "embedding" || keyword === "embeddings") return new OpenClawEmbeddingProvider(modelName, opts);
1325
+ if (keyword === "agent") return new OpenClawAgentProvider(modelName, opts);
1326
+ if (keyword === "tools") {
1327
+ const toolName = splits.slice(2).join(":");
1328
+ if (!toolName) throw new Error("OpenClaw tools provider requires a tool name: openclaw:tools:<tool-name>");
1329
+ return new OpenClawToolInvokeProvider(toolName, opts);
1330
+ }
1331
+ return new OpenClawChatProvider(splits.length > 1 ? splits.slice(1).join(":") || void 0 : void 0, opts);
1332
+ }
1333
+ //#endregion
1334
+ export { createOpenClawProvider };
1335
+
1336
+ //# sourceMappingURL=openclaw-DJlhPGCb.js.map