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,1552 @@
1
+ #!/usr/bin/env node
2
+ import { C as sanitizeObject, c as logger, d as REDACTED, lt as state, tt as getProcessEnv, v as normalizeFieldName } from "./logger-pCNnmVuz.js";
3
+ import { A as isDefinitiveBillingCode, C as HttpRateLimitError, D as formatRateLimitErrorMessage, S as HARD_QUOTA_ERROR_CODES, j as isHardQuotaCode } from "./fetch-RXHsZF-J.js";
4
+ import { a as importModule, o as resolvePackageEntryPoint, r as getDirectory } from "./esm-B4NX_h4K.js";
5
+ import { n as renderVarsInObject } from "./render-DdqOpT1Z.js";
6
+ import { t as getPackageVersion } from "./packageVersion-CVhzH1IZ.js";
7
+ import { n as resolveProviderApiKey } from "./credentials-DPd2q2su.js";
8
+ import { t as providerRegistry } from "./providerRegistry-wn1xUT6S.js";
9
+ import { n as PROMPTFOO_RESOURCE_ATTR_TRACE_ID, t as PROMPTFOO_RESOURCE_ATTR_PARENT_SPAN_ID } from "./resourceAttributes-Cixq2go1.js";
10
+ import { a as closeTurnSpan, d as openTurnSpan, h as withGenAISpan, r as addActiveSpanRoleAttribute, t as GenAIAttributes, u as getTraceparent } from "./genaiTracer-j8OXa5Va.js";
11
+ import { o as resolveAgenticWorkingDir } from "./agentic-utils-D8wyQwPG.js";
12
+ import { n as createAbortError, t as AgenticRunQueue } from "./agenticRunQueue-uZH2IBa8.js";
13
+ import { n as clearRepositoryEnv, t as assertIsolatedWorkingDir } from "./agentWorkspace-DPtMLrlI.js";
14
+ import { i as calculateOpenAIUsageCostFromTokenUsage } from "./billing-DgWl52i7.js";
15
+ import "./codex-runtime-fnxb2Qa-.js";
16
+ import { a as COMMON_OPTIONAL_PROCESS_ENV_KEYS, c as applyApiKeyToCliEnv, d as getCodexTraceEndpoint, f as getCodexTraceProtocol, i as getCodexSkillRootPrefixes, l as shouldInjectApiKey, m as withCodexTraceExporter, n as extractCodexSkillPathCandidates, o as findGitRepositoryRoot, r as getCodexSkillMetadataFields, s as getMinimalProcessEnv, t as buildCodexSkillMetadata, u as usesCustomModelProvider } from "./codexSkillMetadata-DsnQdvr_.js";
17
+ import path from "node:path";
18
+ import fs from "node:fs";
19
+ import { z as z$1 } from "zod";
20
+ import fs$1 from "fs";
21
+ import path$1 from "path";
22
+ import dedent from "dedent";
23
+ import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
24
+ import semverSatisfies from "semver/functions/satisfies.js";
25
+ import crypto from "crypto";
26
+ import { execFile, spawn } from "node:child_process";
27
+ import semver from "semver";
28
+ //#region src/providers/openai/codexCliCompatibility.ts
29
+ const CODEX_SDK_PACKAGE = "@openai/codex-sdk";
30
+ const CODEX_CLI_PACKAGE = "@openai/codex";
31
+ const CODEX_SDK_DOCS_URL = "https://www.promptfoo.dev/docs/providers/openai-codex-sdk/";
32
+ const CODEX_VERSION_PATTERN = /\bcodex-cli(?:-exec)?\s+v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)/;
33
+ const VERSION_PROBE_TIMEOUT_MS = 1e4;
34
+ const VERSION_PROBE_MAX_OUTPUT_BYTES = 1048576;
35
+ const VERSION_PROBE_MAX_STATUS_BYTES = 8192;
36
+ const VERSION_PROBE_SUPERVISOR = `
37
+ const { writeSync } = require('node:fs');
38
+ let child;
39
+ let stopping = false;
40
+ let finalized = false;
41
+ let commandExit;
42
+ const finalize = (result) => {
43
+ if (finalized) return;
44
+ finalized = true;
45
+ try {
46
+ writeSync(3, JSON.stringify(result));
47
+ } catch {
48
+ // The owning process may already have closed its end of the status pipe.
49
+ } finally {
50
+ process.kill(-process.pid, 'SIGKILL');
51
+ }
52
+ };
53
+ const finish = (result) => {
54
+ if (stopping) return;
55
+ stopping = true;
56
+ if (!child || child.pid === undefined || commandExit) return finalize(result);
57
+
58
+ // Keep the direct CLI's reaper alive until its exit has been collected. Do
59
+ // not wait for close: descendants can retain its output pipes until group cleanup.
60
+ child.once('exit', () => finalize(result));
61
+ const terminationFailed = (error) => {
62
+ if (error.code === 'ESRCH') return; // Its exit notification may still be pending.
63
+ finalize({ error: (result.error ?? 'Could not finish Codex CLI version command') +
64
+ '; could not terminate the direct CLI process' });
65
+ };
66
+ child.on('error', terminationFailed);
67
+ try {
68
+ child.kill('SIGKILL');
69
+ } catch (error) {
70
+ terminationFailed(error);
71
+ }
72
+ };
73
+ const timeout = () => finish(commandExit ?? { error: 'Codex CLI version check timed out after ${VERSION_PROBE_TIMEOUT_MS}ms' });
74
+ process.once('SIGTERM', timeout);
75
+ process.stdin.once('end', () => finish({ error: 'Codex CLI version check owner disconnected' }));
76
+ process.stdin.once('error', () => finish({ error: 'Codex CLI version check owner channel failed' }));
77
+ const outputFailed = () => finish({ error: 'Could not capture Codex CLI version output' });
78
+ process.stdout.once('error', outputFailed);
79
+ process.stderr.once('error', outputFailed);
80
+ const { spawn } = require('node:child_process');
81
+ const { createInterface } = require('node:readline');
82
+ let deadline = setTimeout(timeout, ${VERSION_PROBE_TIMEOUT_MS});
83
+ createInterface({ input: process.stdin }).once('line', (line) => {
84
+ if (stopping) return;
85
+ let options;
86
+ try {
87
+ options = JSON.parse(line);
88
+ } catch {
89
+ return finish({ error: 'Codex CLI version check initialization failed' });
90
+ }
91
+ // process.ppid is a startup snapshot, so check the known owner as well as EOF.
92
+ try {
93
+ process.kill(options.ownerPid, 0);
94
+ } catch {
95
+ return finish({ error: 'Codex CLI version check owner exited before initialization' });
96
+ }
97
+ if (Date.now() >= options.deadlineAt) return timeout();
98
+ clearTimeout(deadline);
99
+ deadline = setTimeout(timeout, options.deadlineAt - Date.now());
100
+ try {
101
+ const { NODE_CHANNEL_FD, NODE_CHANNEL_SERIALIZATION_MODE, ...env } = options.env;
102
+ child = spawn(options.command, ['exec', '--experimental-json', '--version'], {
103
+ env,
104
+ stdio: ['ignore', 'pipe', 'pipe'],
105
+ });
106
+ child.stdout.once('error', outputFailed);
107
+ child.stderr.once('error', outputFailed);
108
+ child.stdout.pipe(process.stdout, { end: false });
109
+ child.stderr.pipe(process.stderr, { end: false });
110
+ child.once('error', () => finish({ error: 'Could not start Codex CLI version command' }));
111
+ child.once('exit', (code, signal) => { commandExit = { code, signal }; });
112
+ child.once('close', (code, signal) => {
113
+ // Descendants can finish writing after the launcher exits. Drain both
114
+ // capture pipes and forwarding queues before ending the owned group.
115
+ const result = commandExit ?? { code, signal };
116
+ let pending = 2;
117
+ const flushed = (error) => {
118
+ if (error) outputFailed();
119
+ else if (--pending === 0) finish(result);
120
+ };
121
+ try {
122
+ process.stdout.write('', flushed);
123
+ process.stderr.write('', flushed);
124
+ } catch {
125
+ outputFailed();
126
+ }
127
+ });
128
+ } catch {
129
+ // Spawn/JSON diagnostics can include environment values. Keep these private.
130
+ finish({ error: 'Could not start Codex CLI version command' });
131
+ }
132
+ });
133
+ `;
134
+ var CodexCliCompatibilityError = class extends Error {
135
+ name = "CodexCliCompatibilityError";
136
+ };
137
+ function getSupportedCliVersion(sdkEntryPoint) {
138
+ let directory = path.dirname(sdkEntryPoint);
139
+ while (true) {
140
+ const manifestPath = path.join(directory, "package.json");
141
+ if (fs.existsSync(manifestPath)) {
142
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
143
+ if (manifest.name === CODEX_SDK_PACKAGE) {
144
+ const version = manifest.dependencies?.[CODEX_CLI_PACKAGE];
145
+ if (!version || !semver.valid(version)) throw new Error(`${CODEX_SDK_PACKAGE} does not declare an exact ${CODEX_CLI_PACKAGE} version`);
146
+ return version;
147
+ }
148
+ }
149
+ const parent = path.dirname(directory);
150
+ if (parent === directory) throw new Error(`Could not find ${CODEX_SDK_PACKAGE}/package.json for ${sdkEntryPoint}`);
151
+ directory = parent;
152
+ }
153
+ }
154
+ /** Stop the trusted supervisor, or the direct Windows CLI process tree. */
155
+ async function terminateProbe(child) {
156
+ if (process.platform !== "win32") {
157
+ child.stdin?.end();
158
+ return;
159
+ }
160
+ const pid = child.pid;
161
+ if (pid === void 0) return;
162
+ if (child.exitCode !== null || child.signalCode !== null) return;
163
+ const hostWindowsDir = process.env.SystemRoot;
164
+ if (!hostWindowsDir || !/^[a-z]:[\\/]/i.test(hostWindowsDir) || hostWindowsDir.includes("\0")) {
165
+ child.kill("SIGKILL");
166
+ throw new Error("Cannot locate the Windows system directory for Codex version cleanup");
167
+ }
168
+ const windowsDir = path.win32.normalize(hostWindowsDir);
169
+ const systemDir = path.win32.join(windowsDir, "System32");
170
+ try {
171
+ await new Promise((resolve, reject) => {
172
+ execFile(path.win32.join(systemDir, "taskkill.exe"), [
173
+ "/pid",
174
+ String(pid),
175
+ "/t",
176
+ "/f"
177
+ ], {
178
+ windowsHide: true,
179
+ timeout: 1e3,
180
+ killSignal: "SIGKILL",
181
+ cwd: systemDir,
182
+ env: {
183
+ SystemRoot: windowsDir,
184
+ WINDIR: windowsDir,
185
+ PATH: systemDir
186
+ }
187
+ }, (error) => {
188
+ if (error && child.exitCode === null && child.signalCode === null) reject(error);
189
+ else resolve();
190
+ });
191
+ });
192
+ } catch (error) {
193
+ if (child.exitCode === null && child.signalCode === null) child.kill("SIGKILL");
194
+ throw error;
195
+ }
196
+ }
197
+ function parseProbeStatus(status) {
198
+ const result = JSON.parse(status);
199
+ if (result && typeof result === "object") {
200
+ const keys = Object.keys(result);
201
+ if (keys.length === 1 && "error" in result && typeof result.error === "string" && result.error.length > 0) return { error: result.error };
202
+ if (keys.length === 2 && "code" in result && "signal" in result && (typeof result.code === "number" && Number.isInteger(result.code) && result.code >= 0 && result.code <= 255 && result.signal === null || result.code === null && typeof result.signal === "string" && result.signal.length > 0)) return {
203
+ code: result.code,
204
+ signal: result.signal
205
+ };
206
+ }
207
+ throw new Error("Invalid Codex CLI version check status");
208
+ }
209
+ function runVersionProbe(options) {
210
+ options.signal?.throwIfAborted();
211
+ return new Promise((resolve, reject) => {
212
+ const deadlineAt = Date.now() + VERSION_PROBE_TIMEOUT_MS;
213
+ const supervised = process.platform !== "win32";
214
+ let initialization;
215
+ if (supervised) try {
216
+ initialization = `${JSON.stringify({
217
+ command: options.codexPathOverride,
218
+ env: options.env,
219
+ ownerPid: process.pid,
220
+ deadlineAt
221
+ })}\n`;
222
+ } catch {
223
+ throw new Error("Codex CLI version check initialization failed");
224
+ }
225
+ const child = supervised ? spawn(process.execPath, [
226
+ "--input-type=commonjs",
227
+ "--eval",
228
+ VERSION_PROBE_SUPERVISOR
229
+ ], {
230
+ env: {},
231
+ detached: true,
232
+ stdio: [
233
+ "pipe",
234
+ "pipe",
235
+ "pipe",
236
+ "pipe"
237
+ ]
238
+ }) : spawn(options.codexPathOverride, [
239
+ "exec",
240
+ "--experimental-json",
241
+ "--version"
242
+ ], {
243
+ env: options.env,
244
+ windowsHide: true,
245
+ stdio: [
246
+ "ignore",
247
+ "pipe",
248
+ "pipe"
249
+ ]
250
+ });
251
+ const stdout = [];
252
+ const stderr = [];
253
+ let stdoutBytes = 0;
254
+ let stderrBytes = 0;
255
+ let failure;
256
+ let termination;
257
+ let commandExit;
258
+ let deadlineReached = false;
259
+ const stop = (error) => {
260
+ failure ??= error;
261
+ termination ??= terminateProbe(child).catch((cleanupError) => {
262
+ failure = cleanupError instanceof Error ? cleanupError : new Error(String(cleanupError));
263
+ }).finally(() => {
264
+ child.stdout?.destroy();
265
+ child.stderr?.destroy();
266
+ });
267
+ };
268
+ const timeout = setTimeout(() => {
269
+ if (supervised) {
270
+ deadlineReached = true;
271
+ child.kill("SIGTERM");
272
+ return;
273
+ }
274
+ if (!supervised && commandExit) {
275
+ child.stdout?.destroy();
276
+ child.stderr?.destroy();
277
+ return;
278
+ }
279
+ stop(/* @__PURE__ */ new Error(`Codex CLI version check timed out after ${VERSION_PROBE_TIMEOUT_MS}ms`));
280
+ }, Math.max(0, deadlineAt - Date.now()));
281
+ const onAbort = () => stop(new DOMException("Codex compatibility check aborted", "AbortError"));
282
+ if (!supervised) child.once("exit", (code, signal) => {
283
+ commandExit = {
284
+ code,
285
+ signal
286
+ };
287
+ });
288
+ child.stdout?.on("data", (chunk) => {
289
+ stdoutBytes += chunk.length;
290
+ if (stdoutBytes > VERSION_PROBE_MAX_OUTPUT_BYTES) stop(/* @__PURE__ */ new Error("Codex CLI version stdout exceeded the maximum buffer length"));
291
+ else if (!failure) stdout.push(chunk);
292
+ });
293
+ child.stderr?.on("data", (chunk) => {
294
+ stderrBytes += chunk.length;
295
+ if (stderrBytes > VERSION_PROBE_MAX_OUTPUT_BYTES) stop(/* @__PURE__ */ new Error("Codex CLI version stderr exceeded the maximum buffer length"));
296
+ else if (!failure) stderr.push(chunk);
297
+ });
298
+ child.once("error", stop);
299
+ child.stdin?.on("error", () => stop(/* @__PURE__ */ new Error("Codex CLI version check owner channel failed")));
300
+ if (supervised) {
301
+ const statusPipe = child.stdio[3];
302
+ const status = [];
303
+ let statusBytes = 0;
304
+ let statusRead = false;
305
+ const invalidStatus = () => {
306
+ if (statusRead) return;
307
+ statusRead = true;
308
+ failure ??= /* @__PURE__ */ new Error(deadlineReached ? `Codex CLI version check timed out after ${VERSION_PROBE_TIMEOUT_MS}ms` : "Codex CLI version supervisor exited without a valid command status");
309
+ termination = Promise.resolve().then(() => {
310
+ if (child.pid !== void 0) try {
311
+ process.kill(-child.pid, "SIGKILL");
312
+ } catch (error) {
313
+ if (error.code !== "ESRCH") throw error;
314
+ }
315
+ }).catch((error) => {
316
+ failure = error instanceof Error ? error : /* @__PURE__ */ new Error("Codex version probe cleanup failed");
317
+ }).finally(() => {
318
+ child.stdout?.destroy();
319
+ child.stderr?.destroy();
320
+ });
321
+ };
322
+ statusPipe?.on("data", (chunk) => {
323
+ statusBytes += chunk.length;
324
+ if (statusBytes > VERSION_PROBE_MAX_STATUS_BYTES) stop(/* @__PURE__ */ new Error("Codex CLI version check status exceeded the maximum buffer length"));
325
+ else status.push(chunk);
326
+ });
327
+ statusPipe?.once("error", invalidStatus);
328
+ statusPipe?.once("end", () => {
329
+ if (statusRead) return;
330
+ try {
331
+ if (statusBytes > VERSION_PROBE_MAX_STATUS_BYTES) throw new Error("Oversized status");
332
+ const result = parseProbeStatus(Buffer.concat(status).toString("utf8"));
333
+ statusRead = true;
334
+ if ("error" in result) failure ??= new Error(result.error);
335
+ else commandExit = result;
336
+ } catch {
337
+ invalidStatus();
338
+ }
339
+ });
340
+ child.stdin?.write(initialization);
341
+ }
342
+ child.once("close", async (code, signal) => {
343
+ clearTimeout(timeout);
344
+ options.signal?.removeEventListener("abort", onAbort);
345
+ try {
346
+ await (termination ?? (supervised ? void 0 : terminateProbe(child)));
347
+ } catch (error) {
348
+ failure = error instanceof Error ? error : new Error(String(error));
349
+ }
350
+ const exit = commandExit ?? (supervised ? void 0 : {
351
+ code,
352
+ signal
353
+ });
354
+ if (failure) reject(failure);
355
+ else if (exit?.code === 0) resolve(`${Buffer.concat(stdout).toString("utf8")}\n${Buffer.concat(stderr).toString("utf8")}`);
356
+ else reject(/* @__PURE__ */ new Error(`Codex CLI version check exited with ${exit?.signal ?? exit?.code ?? "no command status"}: ${Buffer.concat(stderr).toString("utf8")}`));
357
+ });
358
+ options.signal?.addEventListener("abort", onAbort, { once: true });
359
+ if (options.signal?.aborted) onAbort();
360
+ });
361
+ }
362
+ async function runCompatibilityCheck(options) {
363
+ let supportedVersion;
364
+ try {
365
+ supportedVersion = getSupportedCliVersion(options.sdkEntryPoint);
366
+ } catch (error) {
367
+ const message = error instanceof Error ? error.message : String(error);
368
+ throw new CodexCliCompatibilityError(`Could not verify Codex CLI compatibility for ${options.codexPathOverride}: ${message}. For more information, see: ${CODEX_SDK_DOCS_URL}`);
369
+ }
370
+ let output;
371
+ try {
372
+ output = await runVersionProbe(options);
373
+ } catch (error) {
374
+ if (options.signal?.aborted) throw new DOMException("Codex compatibility check aborted", "AbortError");
375
+ const message = error instanceof Error ? error.message : String(error);
376
+ throw new CodexCliCompatibilityError(`Could not verify Codex CLI compatibility for ${options.codexPathOverride}: ${message}. For more information, see: ${CODEX_SDK_DOCS_URL}`);
377
+ }
378
+ const version = CODEX_VERSION_PATTERN.exec(output)?.[1];
379
+ if (!version || !semver.valid(version) || semver.compareBuild(version, supportedVersion) !== 0) throw new CodexCliCompatibilityError(`${CODEX_SDK_PACKAGE} supports Codex CLI/event schema ${supportedVersion}, but ${options.codexPathOverride} reports ${version ?? "an unknown version"}. For more information, see: ${CODEX_SDK_DOCS_URL}`);
380
+ }
381
+ function checkCodexCliCompatibility(options) {
382
+ return runCompatibilityCheck(options);
383
+ }
384
+ //#endregion
385
+ //#region src/providers/openai/codex-sdk.ts
386
+ function appendPromptfooResourceAttrs(existing, traceId, parentSpanId) {
387
+ const traceKey = PROMPTFOO_RESOURCE_ATTR_TRACE_ID;
388
+ const parentSpanKey = PROMPTFOO_RESOURCE_ATTR_PARENT_SPAN_ID;
389
+ const incoming = `${traceKey}=${traceId},${parentSpanKey}=${parentSpanId}`;
390
+ if (!existing) return incoming;
391
+ const cleaned = existing.split(",").map((pair) => pair.trim()).filter((pair) => pair.length > 0 && !pair.startsWith(`${traceKey}=`) && !pair.startsWith(`${parentSpanKey}=`)).join(",");
392
+ return cleaned.length > 0 ? `${cleaned},${incoming}` : incoming;
393
+ }
394
+ const ZERO_TRACE_ID = "00000000000000000000000000000000";
395
+ const ZERO_SPAN_ID = "0000000000000000";
396
+ function isValidTraceparent(traceparent) {
397
+ if (!traceparent) return false;
398
+ const [, traceId, spanId] = traceparent.split("-");
399
+ return Boolean(traceId && spanId && traceId !== ZERO_TRACE_ID && spanId !== ZERO_SPAN_ID);
400
+ }
401
+ const CodexCliEnvValueSchema = z$1.union([
402
+ z$1.string(),
403
+ z$1.number(),
404
+ z$1.boolean()
405
+ ]).transform(String);
406
+ const OpenAICodexSDKConfigShape = {
407
+ basePath: z$1.string().optional(),
408
+ prefix: z$1.string().optional(),
409
+ suffix: z$1.string().optional(),
410
+ provider: z$1.unknown().optional(),
411
+ linkedTargetId: z$1.string().optional(),
412
+ apiKey: z$1.string().min(1).optional(),
413
+ base_url: z$1.string().min(1).optional(),
414
+ maxRetries: z$1.number().int().nonnegative().optional(),
415
+ working_dir: z$1.string().min(1).optional(),
416
+ copy_working_dir: z$1.union([z$1.boolean(), z$1.enum(["git", "copy"])]).optional(),
417
+ additional_directories: z$1.array(z$1.string().min(1)).optional(),
418
+ skip_git_repo_check: z$1.boolean().optional(),
419
+ codex_path_override: z$1.string().min(1).optional(),
420
+ skip_codex_version_check: z$1.boolean().optional(),
421
+ model: z$1.string().min(1).optional(),
422
+ model_provider: z$1.string().min(1).optional(),
423
+ sandbox_mode: z$1.enum([
424
+ "read-only",
425
+ "workspace-write",
426
+ "danger-full-access"
427
+ ]).optional(),
428
+ model_reasoning_effort: z$1.enum([
429
+ "minimal",
430
+ "low",
431
+ "medium",
432
+ "high",
433
+ "xhigh",
434
+ "max",
435
+ "ultra"
436
+ ]).optional(),
437
+ network_access_enabled: z$1.boolean().optional(),
438
+ web_search_enabled: z$1.boolean().optional(),
439
+ web_search_mode: z$1.enum([
440
+ "disabled",
441
+ "cached",
442
+ "live"
443
+ ]).optional(),
444
+ collaboration_mode: z$1.enum(["coding", "plan"]).optional(),
445
+ approval_policy: z$1.enum([
446
+ "never",
447
+ "on-request",
448
+ "on-failure",
449
+ "untrusted"
450
+ ]).optional(),
451
+ thread_id: z$1.string().min(1).optional(),
452
+ persist_threads: z$1.boolean().optional(),
453
+ thread_pool_size: z$1.number().int().positive().optional(),
454
+ output_schema: z$1.record(z$1.string(), z$1.unknown()).optional(),
455
+ cli_env: z$1.record(z$1.string(), CodexCliEnvValueSchema).optional(),
456
+ inherit_process_env: z$1.boolean().optional(),
457
+ enable_streaming: z$1.boolean().optional(),
458
+ deep_tracing: z$1.boolean().optional(),
459
+ cli_config: z$1.record(z$1.string(), z$1.unknown()).optional()
460
+ };
461
+ const OpenAICodexSDKConfigSchema = z$1.object(OpenAICodexSDKConfigShape).strict();
462
+ const OpenAICodexSDKMergedPromptConfigSchema = z$1.object(OpenAICodexSDKConfigShape).strip();
463
+ function parseCodexConfig(config, options = {}) {
464
+ const schema = options.stripUnknownKeys ? OpenAICodexSDKMergedPromptConfigSchema : OpenAICodexSDKConfigSchema;
465
+ try {
466
+ return schema.parse(config ?? {});
467
+ } catch (error) {
468
+ if (error instanceof z$1.ZodError) {
469
+ const issues = error.issues.map((issue) => {
470
+ return `${issue.path.length > 0 ? issue.path.join(".") : "(root)"}: ${issue.message}`;
471
+ }).join("; ");
472
+ throw new Error(`Invalid OpenAI Codex SDK config: ${issues}`);
473
+ }
474
+ throw error;
475
+ }
476
+ }
477
+ const CODEX_RATE_LIMIT_CODES = ["rate_limit_exceeded", ...HARD_QUOTA_ERROR_CODES];
478
+ const CODEX_DEFAULT_RATE_LIMIT_WAIT_MS = 6e4;
479
+ const CODEX_RATE_LIMIT_PATTERNS = [
480
+ /\b429\b/,
481
+ /\brate[\s_-]*limit(?:ed|ing| reached| exceeded)?\b/i,
482
+ /\btoo many requests\b/i,
483
+ /\btokens per (?:minute|min)\b/i,
484
+ /\brequests per (?:minute|min)\b/i,
485
+ /\bexceeded your current quota\b/i
486
+ ];
487
+ function extractCodexRateLimitCode(message) {
488
+ const lowerMessage = message.toLowerCase();
489
+ const billingCode = CODEX_RATE_LIMIT_CODES.find((code) => isDefinitiveBillingCode(code) && lowerMessage.includes(code));
490
+ if (billingCode) return billingCode;
491
+ if (/\bno credits remaining\b/i.test(message)) return "credit_balance_exhausted";
492
+ const explicitCode = CODEX_RATE_LIMIT_CODES.find((code) => lowerMessage.includes(code));
493
+ if (explicitCode) return explicitCode;
494
+ if (/\bexceeded your current quota\b/i.test(message) || /\bcheck your plan and billing details\b/i.test(message)) return "insufficient_quota";
495
+ }
496
+ function extractCodexRetryAfterMs(message) {
497
+ const match = message.match(/\b(?:please\s+)?(?:try\s+again\s+in|retry(?:\s+again)?\s+(?:after|in))\s+(\d+(?:\.\d+)?)\s*(milliseconds?|ms|seconds?|secs?|s|minutes?|mins?|m)\b/i);
498
+ if (!match) return;
499
+ const amount = Number(match[1]);
500
+ if (!Number.isFinite(amount) || amount < 0) return;
501
+ const unit = match[2].toLowerCase();
502
+ const multiplier = unit.startsWith("m") && unit !== "ms" && !unit.startsWith("milli") ? 6e4 : unit.startsWith("s") ? 1e3 : 1;
503
+ return Math.ceil(amount * multiplier);
504
+ }
505
+ function buildCodexRateLimitResponse(error, message) {
506
+ const errorRecord = typeof error === "object" && error !== null ? error : void 0;
507
+ const status = typeof errorRecord?.status === "number" ? errorRecord.status : typeof errorRecord?.statusCode === "number" ? errorRecord.statusCode : void 0;
508
+ const rawCode = typeof errorRecord?.code === "string" ? errorRecord.code.toLowerCase() : void 0;
509
+ const rawType = typeof errorRecord?.type === "string" ? errorRecord.type.toLowerCase() : void 0;
510
+ const code = rawCode && CODEX_RATE_LIMIT_CODES.some((knownCode) => knownCode === rawCode) ? rawCode : extractCodexRateLimitCode(message);
511
+ if (status !== 429 && code === void 0 && !isHardQuotaCode(rawType) && !CODEX_RATE_LIMIT_PATTERNS.some((pattern) => pattern.test(message))) return;
512
+ const retryAfterMs = extractCodexRetryAfterMs(message);
513
+ const rateLimitError = new HttpRateLimitError({
514
+ status: status ?? 429,
515
+ retryAfterMs,
516
+ code: code ?? rawCode,
517
+ type: rawType
518
+ });
519
+ const schedulerRetryAfterMs = rateLimitError.kind === "rate_limit" ? retryAfterMs ?? CODEX_DEFAULT_RATE_LIMIT_WAIT_MS : void 0;
520
+ const headers = schedulerRetryAfterMs === void 0 ? {} : { "retry-after-ms": String(schedulerRetryAfterMs) };
521
+ return {
522
+ error: formatRateLimitErrorMessage(rateLimitError, message),
523
+ metadata: {
524
+ rateLimitKind: rateLimitError.kind,
525
+ http: {
526
+ status: rateLimitError.status,
527
+ statusText: rateLimitError.statusText,
528
+ headers
529
+ }
530
+ }
531
+ };
532
+ }
533
+ const CODEX_SDK_VERSION_RANGE = "^0.156.1";
534
+ function resolveCodexSdkPackage() {
535
+ const basePaths = [
536
+ state.basePath ? path$1.resolve(state.basePath) : void 0,
537
+ process.cwd(),
538
+ path$1.resolve(getDirectory(), ".."),
539
+ path$1.resolve(getDirectory(), "../..")
540
+ ].filter((candidate) => Boolean(candidate));
541
+ for (const basePath of new Set(basePaths)) {
542
+ const entryPoint = resolvePackageEntryPoint("@openai/codex-sdk", basePath);
543
+ if (entryPoint) return entryPoint;
544
+ }
545
+ return null;
546
+ }
547
+ async function loadCodexSDK() {
548
+ const codexPath = resolveCodexSdkPackage();
549
+ if (!codexPath) throw new Error(dedent`The @openai/codex-sdk package is required but not installed.
550
+
551
+ To use the OpenAI Codex SDK provider, install it with:
552
+ npm install promptfoo @openai/codex-sdk@${CODEX_SDK_VERSION_RANGE}
553
+
554
+ Requires Node.js >=22.22.0.
555
+
556
+ For more information, see: https://www.promptfoo.dev/docs/providers/openai-codex-sdk/`);
557
+ const version = getPackageVersion("@openai/codex-sdk", codexPath);
558
+ if (!version || !semverSatisfies(version, "^0.156.1")) throw new Error(`The OpenAI Codex SDK provider requires @openai/codex-sdk@${CODEX_SDK_VERSION_RANGE} (found ${version ?? "unknown"}). Install it with: npm install promptfoo @openai/codex-sdk@${CODEX_SDK_VERSION_RANGE}`);
559
+ try {
560
+ return {
561
+ entryPoint: codexPath,
562
+ module: await importModule(codexPath)
563
+ };
564
+ } catch (err) {
565
+ logger.error(`Failed to load OpenAI Codex SDK: ${err}`);
566
+ if (err.stack) logger.error(err.stack);
567
+ throw new Error(dedent`Failed to load @openai/codex-sdk.
568
+
569
+ The package was found but could not be loaded. This may be due to:
570
+ - Incompatible Node.js version (requires Node.js >=22.22.0)
571
+ - Corrupted installation
572
+
573
+ Try reinstalling:
574
+ npm install promptfoo @openai/codex-sdk@${CODEX_SDK_VERSION_RANGE}
575
+
576
+ For more information, see: https://www.promptfoo.dev/docs/providers/openai-codex-sdk/`);
577
+ }
578
+ }
579
+ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
580
+ cleanupGeneration = 0;
581
+ static OPENAI_MODELS = [
582
+ "gpt-6-astra",
583
+ "gpt-6-sol",
584
+ "gpt-6-luna",
585
+ "gpt-5.6-sol",
586
+ "gpt-5.6-terra",
587
+ "gpt-5.6-luna",
588
+ "gpt-5.5",
589
+ "gpt-5.5-pro",
590
+ "gpt-5.4",
591
+ "gpt-5.4-pro",
592
+ "gpt-5.4-mini",
593
+ "gpt-5.3-codex",
594
+ "gpt-5.3-codex-spark",
595
+ "gpt-5.2",
596
+ "gpt-5-codex-mini",
597
+ "gpt-5"
598
+ ];
599
+ config;
600
+ env;
601
+ apiKey;
602
+ providerId = "openai:codex-sdk";
603
+ codexSdk;
604
+ codexInstances = /* @__PURE__ */ new Map();
605
+ threads = /* @__PURE__ */ new Map();
606
+ threadRunQueues = new AgenticRunQueue("Codex thread turn wait aborted");
607
+ deepTracingWarningShown = false;
608
+ ignoredProviderEnvWarningShown = false;
609
+ omittedProcessEnvWarningShown = false;
610
+ compatibilitySkipWarningShown = false;
611
+ compatibilityChecks = /* @__PURE__ */ new Map();
612
+ constructor(options = {}) {
613
+ const { config, env, id } = options;
614
+ this.config = parseCodexConfig(config);
615
+ this.env = env;
616
+ this.apiKey = this.getApiKey();
617
+ this.providerId = id ?? this.providerId;
618
+ providerRegistry.register(this);
619
+ if (this.config.model && !usesCustomModelProvider(this.config) && !OpenAICodexSDKProvider.OPENAI_MODELS.includes(this.config.model)) logger.warn(`Using unknown model for OpenAI Codex SDK: ${this.config.model}`);
620
+ }
621
+ id() {
622
+ return this.providerId;
623
+ }
624
+ getApiKey(config = this.config) {
625
+ return resolveProviderApiKey(config, this.env, ["OPENAI_API_KEY", "CODEX_API_KEY"]);
626
+ }
627
+ requiresApiKey() {
628
+ return false;
629
+ }
630
+ toString() {
631
+ return "[OpenAI Codex SDK Provider]";
632
+ }
633
+ /**
634
+ * Safely tear down a Codex instance by calling its cleanup method
635
+ * (destroy, cleanup, or close -- whichever is available).
636
+ */
637
+ async destroyInstance(instance) {
638
+ if (typeof instance.destroy === "function") await instance.destroy();
639
+ else if (typeof instance.cleanup === "function") await instance.cleanup();
640
+ else if (typeof instance.close === "function") await instance.close();
641
+ }
642
+ async cleanup() {
643
+ this.cleanupGeneration++;
644
+ providerRegistry.unregister(this);
645
+ const compatibilityChecks = [...this.compatibilityChecks.entries()];
646
+ for (const [controller] of compatibilityChecks) controller.abort(createAbortError("Codex compatibility check interrupted by cleanup"));
647
+ const instances = [...this.codexInstances.values()];
648
+ this.codexInstances.clear();
649
+ this.threads.clear();
650
+ this.threadRunQueues.clear();
651
+ for (const instance of instances) try {
652
+ await this.destroyInstance(instance);
653
+ } catch (error) {
654
+ logger.warn("[CodexSDK] Error during cleanup", { error });
655
+ }
656
+ if (compatibilityChecks.length > 0) await Promise.allSettled(compatibilityChecks.map(([, pending]) => pending));
657
+ }
658
+ async shutdown() {
659
+ await this.cleanup();
660
+ }
661
+ prepareEnvironment(config, traceparent, apiKey = this.getApiKey(config)) {
662
+ const inheritProcessEnv = config.inherit_process_env === true;
663
+ const cliEnv = Object.fromEntries(Object.entries(config.cli_env ?? {}).map(([key, value]) => [key, String(value)]));
664
+ const env = {
665
+ ...inheritProcessEnv ? getProcessEnv() : getMinimalProcessEnv(),
666
+ ...cliEnv
667
+ };
668
+ const ignoredProviderEnvKeys = Object.keys(this.env ?? {}).filter((key) => key !== "OPENAI_API_KEY" && key !== "CODEX_API_KEY" && !(key in (config.cli_env ?? {}))).sort();
669
+ if (ignoredProviderEnvKeys.length > 0 && !this.ignoredProviderEnvWarningShown) {
670
+ logger.warn("[CodexSDK] Ignoring promptfoo-level env overrides for the Codex CLI process. Move these keys into config.cli_env if Codex shell commands need them.", { envKeys: ignoredProviderEnvKeys });
671
+ this.ignoredProviderEnvWarningShown = true;
672
+ }
673
+ if (!inheritProcessEnv && !this.omittedProcessEnvWarningShown) {
674
+ const omittedProcessEnvKeys = this.getOmittedOptionalProcessEnvKeys(config, env);
675
+ if (omittedProcessEnvKeys.length > 0) {
676
+ logger.warn("[CodexSDK] Optional Codex CLI process env vars are not inherited by default. Move these keys into config.cli_env or set inherit_process_env: true if Codex CLI commands need them.", { envKeys: omittedProcessEnvKeys });
677
+ this.omittedProcessEnvWarningShown = true;
678
+ }
679
+ }
680
+ const sortedEnv = {};
681
+ for (const key of Object.keys(env).sort()) if (env[key] !== void 0) sortedEnv[key] = env[key];
682
+ applyApiKeyToCliEnv(sortedEnv, config, apiKey);
683
+ if (config.deep_tracing) {
684
+ if (!sortedEnv.OTEL_EXPORTER_OTLP_ENDPOINT) sortedEnv.OTEL_EXPORTER_OTLP_ENDPOINT = getCodexTraceEndpoint();
685
+ if (!sortedEnv.OTEL_EXPORTER_OTLP_PROTOCOL) sortedEnv.OTEL_EXPORTER_OTLP_PROTOCOL = getCodexTraceProtocol();
686
+ if (!sortedEnv.OTEL_SERVICE_NAME) sortedEnv.OTEL_SERVICE_NAME = "codex-cli";
687
+ if (!sortedEnv.OTEL_TRACES_EXPORTER) sortedEnv.OTEL_TRACES_EXPORTER = "otlp";
688
+ if (traceparent) {
689
+ sortedEnv.TRACEPARENT = traceparent;
690
+ const [, tpTraceId, tpSpanId] = traceparent.split("-");
691
+ if (tpTraceId && tpSpanId) sortedEnv.OTEL_RESOURCE_ATTRIBUTES = appendPromptfooResourceAttrs(sortedEnv.OTEL_RESOURCE_ATTRIBUTES, tpTraceId, tpSpanId);
692
+ }
693
+ logger.debug("[CodexSDK] Injecting OTEL config for deep tracing", {
694
+ traceparent: traceparent || "(none - CLI will start own trace)",
695
+ endpoint: sortedEnv.OTEL_EXPORTER_OTLP_ENDPOINT,
696
+ userConfigured: {
697
+ endpoint: !!env.OTEL_EXPORTER_OTLP_ENDPOINT,
698
+ protocol: !!env.OTEL_EXPORTER_OTLP_PROTOCOL,
699
+ serviceName: !!env.OTEL_SERVICE_NAME
700
+ }
701
+ });
702
+ } else delete sortedEnv.TRACEPARENT;
703
+ return sortedEnv;
704
+ }
705
+ getOmittedOptionalProcessEnvKeys(config, env) {
706
+ const shouldWarnForSshEnv = config.network_access_enabled === true || config.web_search_enabled === true || config.web_search_mode === "live";
707
+ return COMMON_OPTIONAL_PROCESS_ENV_KEYS.filter((key) => typeof process.env[key] === "string" && !(key in env) && (shouldWarnForSshEnv || key !== "SSH_AUTH_SOCK" && key !== "GIT_SSH_COMMAND"));
708
+ }
709
+ getResolvedCliConfig(config, env = {}) {
710
+ if (!config.cli_config && !config.collaboration_mode && !config.model_provider && !config.deep_tracing) return;
711
+ const cliConfig = {
712
+ ...config.cli_config ?? {},
713
+ ...config.model_provider ? { model_provider: config.model_provider } : {},
714
+ ...config.collaboration_mode ? { collaboration_mode: config.collaboration_mode } : {}
715
+ };
716
+ return withCodexTraceExporter(cliConfig, env, config.deep_tracing === true);
717
+ }
718
+ getSkillRootPrefixes(env, workingDir) {
719
+ const resolvedWorkingDir = workingDir ? path$1.resolve(workingDir).replace(/\\/g, "/") : void 0;
720
+ return getCodexSkillRootPrefixes({
721
+ codexHome: env.CODEX_HOME,
722
+ gitRepositoryRoot: resolvedWorkingDir ? this.findGitRepositoryRoot(resolvedWorkingDir) : void 0,
723
+ homeDir: env.HOME || env.USERPROFILE || process.env.HOME || process.env.USERPROFILE,
724
+ workingDir: resolvedWorkingDir
725
+ });
726
+ }
727
+ buildSkillMetadata(items, skillRootPrefixes = []) {
728
+ return buildCodexSkillMetadata(items, skillRootPrefixes, {
729
+ getCommand: (item) => item?.type === "command_execution" && typeof item.command === "string" && item.command.trim() ? item.command : void 0,
730
+ isSuccessfulCommand: (item) => this.isSuccessfulCommandExecution(item)
731
+ });
732
+ }
733
+ isSuccessfulCommandExecution(item) {
734
+ if (item?.type !== "command_execution") return false;
735
+ if (typeof item.status === "string" && item.status !== "completed") return false;
736
+ if (typeof item.exit_code === "number" && item.exit_code !== 0) return false;
737
+ return true;
738
+ }
739
+ validateWorkingDirectory(workingDir, skipGitCheck = false) {
740
+ let stats;
741
+ try {
742
+ stats = fs$1.statSync(workingDir);
743
+ } catch (err) {
744
+ throw new Error(`Working directory ${workingDir} does not exist or isn't accessible: ${err.message}`);
745
+ }
746
+ if (!stats.isDirectory()) throw new Error(`Working directory ${workingDir} is not a directory`);
747
+ if (!skipGitCheck && !this.isInsideGitRepository(workingDir)) throw new Error(dedent`Working directory ${workingDir} is not inside a Git repository.
748
+
749
+ Codex requires a Git repository by default to prevent unrecoverable errors.
750
+
751
+ To bypass this check, set skip_git_repo_check: true in your provider config.`);
752
+ }
753
+ isInsideGitRepository(workingDir) {
754
+ return this.findGitRepositoryRoot(workingDir) !== void 0;
755
+ }
756
+ findGitRepositoryRoot(workingDir) {
757
+ return findGitRepositoryRoot(workingDir);
758
+ }
759
+ /**
760
+ * Build Codex constructor options from provider config.
761
+ * Used when creating both local (deep-tracing) and cached instances.
762
+ */
763
+ buildCodexOptions(env, config, apiKey = this.getApiKey(config)) {
764
+ const cliConfig = this.getResolvedCliConfig(config, env);
765
+ return {
766
+ env,
767
+ ...shouldInjectApiKey(config, apiKey) ? { apiKey } : {},
768
+ ...config.codex_path_override ? { codexPathOverride: config.codex_path_override } : {},
769
+ ...config.base_url ? { baseUrl: config.base_url } : {},
770
+ ...cliConfig ? { config: cliConfig } : {}
771
+ };
772
+ }
773
+ buildThreadOptions(config) {
774
+ return {
775
+ workingDirectory: config.working_dir,
776
+ skipGitRepoCheck: config.skip_git_repo_check ?? false,
777
+ ...config.model ? { model: config.model } : {},
778
+ ...config.additional_directories?.length ? { additionalDirectories: config.additional_directories } : {},
779
+ ...config.sandbox_mode ? { sandboxMode: config.sandbox_mode } : {},
780
+ ...config.model_reasoning_effort ? { modelReasoningEffort: config.model_reasoning_effort } : {},
781
+ ...config.network_access_enabled === void 0 ? {} : { networkAccessEnabled: config.network_access_enabled },
782
+ ...config.web_search_mode ? { webSearchMode: config.web_search_mode } : {},
783
+ ...config.web_search_enabled !== void 0 && !config.web_search_mode ? { webSearchEnabled: config.web_search_enabled } : {},
784
+ ...config.approval_policy ? { approvalPolicy: config.approval_policy } : {}
785
+ };
786
+ }
787
+ async getOrCreateThread(config, cacheKey, instanceKey, instance) {
788
+ const threadOptions = this.buildThreadOptions(config);
789
+ if (config.deep_tracing) return instance.startThread(threadOptions);
790
+ if (config.thread_id) {
791
+ const threadIdCacheKey = this.getExplicitThreadCacheKey(config, instanceKey);
792
+ const cached = this.threads.get(threadIdCacheKey);
793
+ if (cached) return cached;
794
+ const thread = instance.resumeThread(config.thread_id, threadOptions);
795
+ if (config.persist_threads) {
796
+ const explicitThreadCachePrefix = this.getExplicitThreadCachePrefix(config);
797
+ for (const cacheKey of this.threads.keys()) if (cacheKey !== threadIdCacheKey && cacheKey.startsWith(explicitThreadCachePrefix)) this.threads.delete(cacheKey);
798
+ this.threads.set(threadIdCacheKey, thread);
799
+ }
800
+ return thread;
801
+ }
802
+ if (config.persist_threads && cacheKey) {
803
+ const cached = this.threads.get(cacheKey);
804
+ if (cached) return cached;
805
+ const poolSize = config.thread_pool_size ?? 1;
806
+ if (this.threads.size >= poolSize) {
807
+ const oldestKey = this.threads.keys().next().value;
808
+ if (oldestKey) this.threads.delete(oldestKey);
809
+ }
810
+ }
811
+ const thread = instance.startThread(threadOptions);
812
+ if (config.persist_threads && cacheKey) this.threads.set(cacheKey, thread);
813
+ return thread;
814
+ }
815
+ async runStreaming(thread, prompt, runOptions, callOptions, skillRootPrefixes = []) {
816
+ const { events } = await thread.runStreamed(prompt, runOptions);
817
+ const tracer = trace.getTracer("promptfoo.codex-sdk");
818
+ const state = this.createCodexStreamingState(prompt);
819
+ try {
820
+ for await (const event of events) {
821
+ const eventTime = Date.now();
822
+ if (callOptions?.abortSignal?.aborted) throw createAbortError("OpenAI Codex SDK call aborted");
823
+ this.handleStreamingEvent(event, state, tracer, eventTime, skillRootPrefixes);
824
+ state.lastEventTime = eventTime;
825
+ }
826
+ if (!state.turnCompleted) {
827
+ if (state.lastStreamError) {
828
+ if (!state.activeTurnSpan) this.startTurnSpan(state, tracer, state.lastEventTime);
829
+ this.endTurnSpan(state, state.lastEventTime, void 0, state.lastStreamError);
830
+ throw new Error(`Codex stream ended after error: ${state.lastStreamError}`);
831
+ }
832
+ throw new Error("Codex stream ended before turn completion");
833
+ }
834
+ } finally {
835
+ this.endUnclosedStreamingSpans(state);
836
+ }
837
+ return this.buildStreamingTurnResult(state);
838
+ }
839
+ createCodexStreamingState(prompt) {
840
+ return {
841
+ items: [],
842
+ usage: void 0,
843
+ turnCompleted: false,
844
+ lastStreamError: void 0,
845
+ activeSpans: /* @__PURE__ */ new Map(),
846
+ itemStartTimes: /* @__PURE__ */ new Map(),
847
+ lastEventTime: Date.now(),
848
+ reasoningTexts: [],
849
+ conversationMessages: [{
850
+ role: "user",
851
+ content: this.formatPromptInputForTrace(prompt)
852
+ }],
853
+ turnCount: 0,
854
+ activeTurnSpan: void 0,
855
+ activeTurnIndex: 0
856
+ };
857
+ }
858
+ handleStreamingEvent(event, state, tracer, eventTime, skillRootPrefixes) {
859
+ switch (event.type) {
860
+ case "item.started":
861
+ this.handleStreamingItemStarted(event, state, tracer, eventTime);
862
+ return;
863
+ case "item.completed":
864
+ this.handleStreamingItemCompleted(event, state, tracer, eventTime, skillRootPrefixes);
865
+ return;
866
+ case "item.updated":
867
+ this.handleStreamingItemUpdated(event, state, skillRootPrefixes);
868
+ return;
869
+ case "turn.completed":
870
+ state.usage = event.usage;
871
+ state.turnCompleted = true;
872
+ if (!state.activeTurnSpan) this.startTurnSpan(state, tracer, state.lastEventTime);
873
+ this.endTurnSpan(state, eventTime, event.usage);
874
+ logger.debug("Codex turn completed", { usage: state.usage });
875
+ return;
876
+ case "turn.failed": {
877
+ const errorMsg = event.error?.message || "Turn failed";
878
+ if (!state.activeTurnSpan) this.startTurnSpan(state, tracer, state.lastEventTime);
879
+ this.endTurnSpan(state, eventTime, void 0, errorMsg);
880
+ logger.error("Codex turn failed", { error: errorMsg });
881
+ const previousStreamError = state.lastStreamError && state.lastStreamError !== errorMsg ? ` Previous stream error: ${state.lastStreamError}` : "";
882
+ throw new Error(`Codex turn failed: ${errorMsg}${previousStreamError}`);
883
+ }
884
+ case "error": {
885
+ const errorMsg = typeof event.message === "string" && event.message ? event.message : "Stream failed";
886
+ state.lastStreamError = errorMsg;
887
+ logger.debug("Codex stream error event received; waiting for terminal event", { error: errorMsg });
888
+ return;
889
+ }
890
+ case "thread.started": return;
891
+ case "turn.started":
892
+ this.startTurnSpan(state, tracer, eventTime);
893
+ return;
894
+ default: logger.debug("Codex unknown event type", { type: event.type });
895
+ }
896
+ }
897
+ handleStreamingItemStarted(event, state, tracer, eventTime) {
898
+ const item = event.item;
899
+ if (!item) {
900
+ logger.warn("Codex item.started event missing item", { event });
901
+ return;
902
+ }
903
+ if (!state.activeTurnSpan) this.startTurnSpan(state, tracer, eventTime);
904
+ if (!item.id) {
905
+ logger.debug("Codex item.started without id, will create span at completion", { type: item.type });
906
+ return;
907
+ }
908
+ const itemId = String(item.id);
909
+ const span = this.startStreamingItemSpan(tracer, item, itemId, void 0, state.activeTurnIndex > 0 ? state.activeTurnIndex : void 0);
910
+ state.activeSpans.set(itemId, span);
911
+ state.itemStartTimes.set(itemId, eventTime);
912
+ logger.debug("Codex item started", {
913
+ itemId,
914
+ type: item.type
915
+ });
916
+ }
917
+ handleStreamingItemCompleted(event, state, tracer, eventTime, skillRootPrefixes) {
918
+ const item = event.item;
919
+ if (!item) {
920
+ logger.warn("Codex item.completed event missing item", { event });
921
+ return;
922
+ }
923
+ if (!state.activeTurnSpan) this.startTurnSpan(state, tracer, state.lastEventTime);
924
+ const itemId = item.id ? String(item.id) : crypto.randomUUID();
925
+ state.items.push(item);
926
+ this.collectStreamingItemText(item, state);
927
+ const span = state.activeSpans.get(itemId) ?? this.startStreamingItemSpan(tracer, item, itemId, state.lastEventTime, state.activeTurnIndex > 0 ? state.activeTurnIndex : void 0);
928
+ const hadStartEvent = state.activeSpans.has(itemId);
929
+ const startTime = state.itemStartTimes.get(itemId) ?? state.lastEventTime;
930
+ const durationMs = eventTime - startTime;
931
+ this.applyStreamingCompletionAttributes(span, item, skillRootPrefixes, eventTime, startTime, hadStartEvent);
932
+ span.end();
933
+ state.activeSpans.delete(itemId);
934
+ state.itemStartTimes.delete(itemId);
935
+ logger.debug("Codex item completed", {
936
+ itemId,
937
+ type: item.type,
938
+ durationMs
939
+ });
940
+ }
941
+ handleStreamingItemUpdated(event, state, skillRootPrefixes) {
942
+ const item = event.item;
943
+ if (item?.id) {
944
+ const itemId = String(item.id);
945
+ const span = state.activeSpans.get(itemId);
946
+ if (span) this.setStreamingCompletionAttributes(span, item, skillRootPrefixes);
947
+ }
948
+ logger.debug("Codex item updated", {
949
+ itemId: item?.id,
950
+ type: item?.type
951
+ });
952
+ }
953
+ startStreamingItemSpan(tracer, item, itemId, startTime, turnIndex) {
954
+ return tracer.startSpan(this.getSpanNameForItem(item), {
955
+ kind: SpanKind.INTERNAL,
956
+ ...startTime === void 0 ? {} : { startTime },
957
+ attributes: addActiveSpanRoleAttribute({
958
+ "codex.item.id": itemId,
959
+ "codex.item.type": item.type,
960
+ ...startTime === void 0 ? {} : { "codex.timing.estimated": true },
961
+ ...typeof turnIndex === "number" ? { "gen_ai.turn.index": turnIndex } : {},
962
+ ...this.getAttributesForItem(item)
963
+ })
964
+ });
965
+ }
966
+ startTurnSpan(state, tracer, eventTime) {
967
+ openTurnSpan(state, {
968
+ tracer,
969
+ eventTime,
970
+ system: "openai",
971
+ logLabel: "CodexSDK"
972
+ });
973
+ }
974
+ endTurnSpan(state, eventTime, usage, errorMessage) {
975
+ const attributes = {};
976
+ if (usage) {
977
+ const inputTokens = usage.input_tokens ?? usage.inputTokens;
978
+ const outputTokens = usage.output_tokens ?? usage.outputTokens;
979
+ const cachedTokens = usage.cached_input_tokens ?? usage.cachedInputTokens;
980
+ const cacheWriteTokens = usage.cache_write_input_tokens ?? usage.cacheWriteInputTokens;
981
+ const reasoningTokens = usage.reasoning_output_tokens ?? usage.reasoningOutputTokens;
982
+ if (typeof inputTokens === "number") attributes["gen_ai.usage.input_tokens"] = inputTokens;
983
+ if (typeof outputTokens === "number") attributes["gen_ai.usage.output_tokens"] = outputTokens;
984
+ if (typeof cachedTokens === "number") attributes[GenAIAttributes.USAGE_CACHE_READ_INPUT_TOKENS] = cachedTokens;
985
+ if (typeof cacheWriteTokens === "number") attributes[GenAIAttributes.USAGE_CACHE_CREATION_INPUT_TOKENS] = cacheWriteTokens;
986
+ if (typeof reasoningTokens === "number") attributes[GenAIAttributes.USAGE_REASONING_OUTPUT_TOKENS] = reasoningTokens;
987
+ }
988
+ closeTurnSpan(state, {
989
+ eventTime,
990
+ attributes,
991
+ errorMessage,
992
+ logLabel: "CodexSDK"
993
+ });
994
+ }
995
+ collectStreamingItemText(item, state) {
996
+ if (item.type === "reasoning" && typeof item.text === "string") {
997
+ const sanitizedReasoning = this.sanitizeTraceText(item.text, "Codex reasoning trace event");
998
+ if (sanitizedReasoning) state.reasoningTexts.push(sanitizedReasoning);
999
+ }
1000
+ if (item.type === "agent_message" && typeof item.text === "string") state.conversationMessages.push({
1001
+ role: "assistant",
1002
+ content: this.sanitizeTraceText(item.text, "Codex agent message trace event") ?? ""
1003
+ });
1004
+ }
1005
+ applyStreamingCompletionAttributes(span, item, skillRootPrefixes, eventTime, startTime, hadStartEvent) {
1006
+ this.setStreamingCompletionAttributes(span, item, skillRootPrefixes);
1007
+ span.setAttribute("codex.duration_ms", eventTime - startTime);
1008
+ span.setAttribute("codex.had_start_event", hadStartEvent);
1009
+ this.addStreamingSpanEvents(span, item);
1010
+ this.setStreamingSpanStatus(span, item);
1011
+ }
1012
+ setStreamingCompletionAttributes(span, item, skillRootPrefixes) {
1013
+ const completionAttrs = this.getCompletionAttributesForItem(item, skillRootPrefixes);
1014
+ for (const [key, value] of Object.entries(completionAttrs)) span.setAttribute(key, value);
1015
+ }
1016
+ addStreamingSpanEvents(span, item) {
1017
+ if (item.type === "reasoning" && typeof item.text === "string") span.addEvent("reasoning", { "codex.reasoning.text": this.sanitizeTraceText(item.text, "Codex reasoning span event") ?? "" });
1018
+ if (item.type === "agent_message" && typeof item.text === "string") span.addEvent("message", { "codex.message.text": this.sanitizeTraceText(item.text, "Codex agent message span event") ?? "" });
1019
+ if (item.type === "command_execution" && typeof item.aggregated_output === "string") span.addEvent("output", { "codex.command.output": this.sanitizeTraceText(item.aggregated_output, "Codex command output span event") ?? "" });
1020
+ }
1021
+ setStreamingSpanStatus(span, item) {
1022
+ if (!this.isStreamingItemError(item)) {
1023
+ span.setStatus({ code: SpanStatusCode.OK });
1024
+ return;
1025
+ }
1026
+ span.setStatus({
1027
+ code: SpanStatusCode.ERROR,
1028
+ message: this.getStreamingItemErrorMessage(item)
1029
+ });
1030
+ }
1031
+ isStreamingItemError(item) {
1032
+ return item.status === "failed" || item.type === "error" || item.error !== void 0 || item.type === "command_execution" && typeof item.exit_code === "number" && item.exit_code !== 0;
1033
+ }
1034
+ getStreamingItemErrorMessage(item) {
1035
+ return (typeof item.message === "string" ? item.message : null) || (typeof item.error?.message === "string" ? item.error.message : null) || (item.type === "command_execution" && item.exit_code !== 0 ? `Command exited with code ${item.exit_code}` : null) || "Item failed";
1036
+ }
1037
+ endUnclosedStreamingSpans(state) {
1038
+ for (const [itemId, span] of state.activeSpans) {
1039
+ logger.warn("Codex item span not properly closed", { itemId });
1040
+ span.setStatus({
1041
+ code: SpanStatusCode.ERROR,
1042
+ message: "Span not properly closed"
1043
+ });
1044
+ span.end();
1045
+ }
1046
+ state.activeSpans.clear();
1047
+ state.itemStartTimes.clear();
1048
+ closeTurnSpan(state, {
1049
+ errorMessage: "Turn span not properly closed",
1050
+ logLabel: "CodexSDK"
1051
+ });
1052
+ }
1053
+ buildStreamingTurnResult(state) {
1054
+ return {
1055
+ finalResponse: [...state.items.filter((item) => item.type === "agent_message")].reverse().find((item) => typeof item.text === "string")?.text ?? "",
1056
+ items: state.items,
1057
+ usage: state.usage,
1058
+ reasoningTexts: state.reasoningTexts,
1059
+ conversationMessages: state.conversationMessages
1060
+ };
1061
+ }
1062
+ parsePromptInput(prompt) {
1063
+ let parsedPrompt;
1064
+ try {
1065
+ parsedPrompt = JSON.parse(prompt);
1066
+ } catch {
1067
+ return prompt;
1068
+ }
1069
+ if (!Array.isArray(parsedPrompt) || parsedPrompt.length === 0 || !parsedPrompt.every((item) => this.isCodexPromptInputItem(item))) return prompt;
1070
+ return parsedPrompt;
1071
+ }
1072
+ isCodexPromptInputItem(item) {
1073
+ if (!item || typeof item !== "object" || Array.isArray(item)) return false;
1074
+ const keys = Object.keys(item);
1075
+ if ("type" in item && item.type === "text") return keys.length === 2 && keys.includes("type") && "text" in item && typeof item.text === "string";
1076
+ if ("type" in item && item.type === "local_image") return keys.length === 2 && keys.includes("type") && "path" in item && typeof item.path === "string";
1077
+ return false;
1078
+ }
1079
+ formatPromptInputForTrace(prompt) {
1080
+ if (typeof prompt === "string") return prompt;
1081
+ return prompt.map((item) => item.type === "text" ? item.text : `[local_image: ${item.path}]`).join("\n");
1082
+ }
1083
+ /**
1084
+ * Get a descriptive span name for a Codex item
1085
+ */
1086
+ getSpanNameForItem(item) {
1087
+ switch (item.type) {
1088
+ case "command_execution": return `exec ${typeof item.command === "string" ? item.command.split(" ")[0] || "command" : "command"}`;
1089
+ case "file_change": return `file ${item.changes?.[0]?.kind || "change"}`;
1090
+ case "mcp_tool_call": return `mcp ${typeof item.server === "string" ? item.server : "unknown"}/${typeof item.tool === "string" ? item.tool : "unknown"}`;
1091
+ case "agent_message": return "agent response";
1092
+ case "reasoning": return "reasoning";
1093
+ case "web_search": return `search "${typeof item.query === "string" ? (this.sanitizeTraceText(item.query, "Codex web search span name") ?? "").slice(0, 30) : ""}"`;
1094
+ case "todo_list": return "todo update";
1095
+ case "error": return "error";
1096
+ case "collaboration_tool_call": return `collab ${typeof item.tool === "string" ? item.tool : "unknown"}`;
1097
+ case "spawn_agent": return `spawn ${typeof item.role === "string" ? item.role : "agent"}`;
1098
+ case "send_input": return "send input";
1099
+ case "agent_wait": return "wait";
1100
+ default: return `codex.${item.type || "unknown"}`;
1101
+ }
1102
+ }
1103
+ /**
1104
+ * Get attributes for a Codex item at start
1105
+ */
1106
+ getSkillTraceAttributes(item, skillRootPrefixes = [], options = {}) {
1107
+ if (item?.type !== "command_execution") return {};
1108
+ if (options.requireSuccessfulCommand && !this.isSuccessfulCommandExecution(item)) return {};
1109
+ const command = typeof item.command === "string" && item.command.trim() ? item.command : void 0;
1110
+ const skillCandidates = /* @__PURE__ */ new Map();
1111
+ if (command) for (const skill of extractCodexSkillPathCandidates(command, skillRootPrefixes)) skillCandidates.set(skill.path, skill);
1112
+ if (skillCandidates.size === 0) return {};
1113
+ const skills = Array.from(skillCandidates.values());
1114
+ const attrs = {
1115
+ "promptfoo.skill.count": skills.length,
1116
+ "promptfoo.skill.names": skills.map((skill) => skill.name).join(","),
1117
+ "promptfoo.skill.paths": skills.map((skill) => skill.path).join(",")
1118
+ };
1119
+ if (skills.length === 1) {
1120
+ attrs["promptfoo.skill.name"] = skills[0].name;
1121
+ attrs["promptfoo.skill.path"] = skills[0].path;
1122
+ }
1123
+ return attrs;
1124
+ }
1125
+ getAttributesForItem(item) {
1126
+ const attrs = {};
1127
+ switch (item.type) {
1128
+ case "command_execution":
1129
+ if (typeof item.command === "string") attrs["codex.command"] = this.sanitizeTraceText(item.command, "Codex command trace attribute") ?? "";
1130
+ break;
1131
+ case "mcp_tool_call":
1132
+ if (typeof item.server === "string") attrs["codex.mcp.server"] = item.server;
1133
+ if (typeof item.tool === "string") {
1134
+ attrs["gen_ai.operation.name"] = "execute_tool";
1135
+ attrs["gen_ai.tool.name"] = item.tool;
1136
+ attrs["codex.mcp.tool"] = item.tool;
1137
+ }
1138
+ {
1139
+ const serializedArgs = this.serializeItemValue(item.arguments ?? item.args ?? item.input);
1140
+ if (serializedArgs) attrs["codex.mcp.input"] = serializedArgs;
1141
+ }
1142
+ break;
1143
+ case "web_search":
1144
+ if (typeof item.query === "string") attrs["codex.search.query"] = this.sanitizeTraceText(item.query, "Codex web search query trace attribute") ?? "";
1145
+ break;
1146
+ case "collaboration_tool_call":
1147
+ if (typeof item.tool === "string") {
1148
+ attrs["gen_ai.operation.name"] = "execute_tool";
1149
+ attrs["gen_ai.tool.name"] = item.tool;
1150
+ attrs["codex.collab.tool"] = item.tool;
1151
+ }
1152
+ if (typeof item.target_thread_id === "string") attrs["codex.collab.target_thread"] = item.target_thread_id;
1153
+ break;
1154
+ case "spawn_agent":
1155
+ if (typeof item.role === "string") attrs["codex.collab.role"] = item.role;
1156
+ if (typeof item.thread_id === "string") attrs["codex.collab.spawned_thread"] = item.thread_id;
1157
+ break;
1158
+ case "send_input": if (typeof item.target_thread_id === "string") attrs["codex.collab.target_thread"] = item.target_thread_id;
1159
+ }
1160
+ return attrs;
1161
+ }
1162
+ serializeItemValue(value) {
1163
+ if (typeof value === "string") {
1164
+ const trimmed = value.trim();
1165
+ if (!trimmed) return;
1166
+ try {
1167
+ return JSON.stringify(this.redactTracePii(sanitizeObject(JSON.parse(trimmed))));
1168
+ } catch {
1169
+ return this.redactTracePii(sanitizeObject(trimmed, { context: "Codex MCP trace input" }));
1170
+ }
1171
+ }
1172
+ if (value === void 0 || value === null) return;
1173
+ try {
1174
+ return JSON.stringify(this.redactTracePii(sanitizeObject(value, { context: "Codex MCP trace input" })));
1175
+ } catch {
1176
+ return;
1177
+ }
1178
+ }
1179
+ sanitizeTraceText(value, context) {
1180
+ const sanitized = this.redactTracePii(sanitizeObject(value, { context }));
1181
+ if (typeof sanitized === "string") return sanitized;
1182
+ if (sanitized === void 0 || sanitized === null) return;
1183
+ try {
1184
+ return JSON.stringify(sanitized);
1185
+ } catch {
1186
+ return;
1187
+ }
1188
+ }
1189
+ redactTracePii(value) {
1190
+ if (typeof value === "string") return value.replace(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi, REDACTED).replace(/\b(?:sk-(?:proj-)?[A-Za-z0-9_-]{20,}|sk-ant-[A-Za-z0-9_-]{20,}|AKIA[A-Z0-9]{16}|AIza[A-Za-z0-9_-]{35}|Bearer\s+[A-Za-z0-9._~+/-]{20,}|Basic\s+[A-Za-z0-9+/=]{20,})\b/g, REDACTED).replace(/\b(api[_-]?key|token|password|secret|authorization|auth)\s*([=:])(\s*)(["']?)[^\s"'`]+(\4)/gi, (_match, key, separator, spacing, quote) => `${key}${separator}${spacing}${quote}${REDACTED}${quote}`);
1191
+ if (Array.isArray(value)) return value.map((item) => this.redactTracePii(item));
1192
+ if (value && typeof value === "object") return Object.fromEntries(Object.entries(value).map(([key, entryValue]) => [key, normalizeFieldName(key).includes("email") ? REDACTED : this.redactTracePii(entryValue)]));
1193
+ return value;
1194
+ }
1195
+ /**
1196
+ * Get attributes for a Codex item at completion
1197
+ */
1198
+ getCompletionAttributesForItem(item, skillRootPrefixes = []) {
1199
+ const attrs = {};
1200
+ switch (item.type) {
1201
+ case "command_execution":
1202
+ if (typeof item.exit_code === "number") attrs["codex.exit_code"] = item.exit_code;
1203
+ if (typeof item.status === "string") attrs["codex.status"] = item.status;
1204
+ if (typeof item.aggregated_output === "string") attrs["codex.output"] = this.sanitizeTraceText(item.aggregated_output, "Codex command output trace attribute") ?? "";
1205
+ Object.assign(attrs, this.getSkillTraceAttributes(item, skillRootPrefixes, { requireSuccessfulCommand: true }));
1206
+ break;
1207
+ case "file_change":
1208
+ if (typeof item.status === "string") attrs["codex.status"] = item.status;
1209
+ if (Array.isArray(item.changes) && item.changes.length) {
1210
+ attrs["codex.files_changed"] = item.changes.length;
1211
+ attrs["codex.files"] = item.changes.map((c) => typeof c?.path === "string" ? c.path : "").filter(Boolean).join(", ");
1212
+ }
1213
+ break;
1214
+ case "mcp_tool_call":
1215
+ if (typeof item.status === "string") attrs["codex.status"] = item.status;
1216
+ if (typeof item.error?.message === "string") attrs["codex.error"] = this.sanitizeTraceText(item.error.message, "Codex MCP error trace attribute") ?? "";
1217
+ {
1218
+ const serializedArgs = this.serializeItemValue(item.arguments ?? item.args ?? item.input);
1219
+ if (serializedArgs) attrs["codex.mcp.input"] = serializedArgs;
1220
+ }
1221
+ break;
1222
+ case "agent_message":
1223
+ if (typeof item.text === "string") attrs["codex.message"] = this.sanitizeTraceText(item.text, "Codex agent message trace attribute") ?? "";
1224
+ break;
1225
+ case "reasoning":
1226
+ if (typeof item.text === "string") attrs["codex.reasoning"] = this.sanitizeTraceText(item.text, "Codex reasoning trace attribute") ?? "";
1227
+ break;
1228
+ case "error": if (typeof item.message === "string") attrs["codex.error"] = this.sanitizeTraceText(item.message, "Codex error trace attribute") ?? "";
1229
+ }
1230
+ return attrs;
1231
+ }
1232
+ generateInstanceKey(env, config) {
1233
+ const keyData = {
1234
+ env,
1235
+ base_url: config.base_url,
1236
+ cli_config: this.getResolvedCliConfig(config, env),
1237
+ codex_path_override: config.codex_path_override
1238
+ };
1239
+ return `openai:codex-sdk:instance:${crypto.createHash("sha256").update(JSON.stringify(keyData)).digest("hex")}`;
1240
+ }
1241
+ generateCacheKey(config, prompt, instanceKey) {
1242
+ const keyData = {
1243
+ instanceKey,
1244
+ working_dir: config.working_dir,
1245
+ additional_directories: config.additional_directories,
1246
+ model: config.model,
1247
+ output_schema: config.output_schema,
1248
+ sandbox_mode: config.sandbox_mode,
1249
+ model_reasoning_effort: config.model_reasoning_effort,
1250
+ network_access_enabled: config.network_access_enabled,
1251
+ web_search_enabled: config.web_search_enabled,
1252
+ web_search_mode: config.web_search_mode,
1253
+ approval_policy: config.approval_policy,
1254
+ prompt
1255
+ };
1256
+ return `openai:codex-sdk:${crypto.createHash("sha256").update(JSON.stringify(keyData)).digest("hex")}`;
1257
+ }
1258
+ getThreadRunQueueKey(config, cacheKey) {
1259
+ if (config.deep_tracing) return;
1260
+ if (config.thread_id) return `explicit:${this.getExplicitThreadIdentity(config)}`;
1261
+ if (config.persist_threads && cacheKey) return cacheKey;
1262
+ }
1263
+ getExplicitThreadCacheKey(config, instanceKey) {
1264
+ const variant = crypto.createHash("sha256").update(JSON.stringify({
1265
+ instanceKey,
1266
+ threadOptions: this.buildThreadOptions(config)
1267
+ })).digest("hex");
1268
+ return `${this.getExplicitThreadCachePrefix(config)}${variant}`;
1269
+ }
1270
+ getExplicitThreadCachePrefix(config) {
1271
+ return `explicit:${this.getExplicitThreadIdentity(config)}:`;
1272
+ }
1273
+ getExplicitThreadIdentity(config) {
1274
+ return crypto.createHash("sha256").update(config.thread_id ?? "").digest("hex");
1275
+ }
1276
+ async callApi(prompt, context, callOptions) {
1277
+ const cleanupGeneration = this.cleanupGeneration;
1278
+ const mergedConfig = {
1279
+ ...this.config,
1280
+ ...context?.prompt?.config
1281
+ };
1282
+ delete mergedConfig.provider;
1283
+ const config = renderVarsInObject(mergedConfig, context?.vars);
1284
+ const inIsolatedWorkspace = assertIsolatedWorkingDir(config);
1285
+ const requestedModel = typeof config.model === "string" && config.model ? config.model : void 0;
1286
+ return withGenAISpan(this.buildCodexSpanContext(prompt, context, requestedModel), () => this.callApiInternal(prompt, context, callOptions, config, inIsolatedWorkspace, cleanupGeneration), (response) => this.extractCodexSpanResult(response, requestedModel));
1287
+ }
1288
+ buildCodexSpanContext(prompt, context, requestedModel) {
1289
+ return {
1290
+ system: "openai",
1291
+ operationName: "invoke_agent",
1292
+ model: requestedModel ?? "Codex",
1293
+ agentName: "Codex",
1294
+ providerId: this.id(),
1295
+ evalId: context?.evaluationId || context?.test?.metadata?.evaluationId,
1296
+ testIndex: typeof context?.test?.vars?.__testIdx === "number" ? context.test.vars.__testIdx : void 0,
1297
+ promptLabel: context?.prompt?.label,
1298
+ traceparent: context?.traceparent,
1299
+ requestBody: prompt
1300
+ };
1301
+ }
1302
+ extractCodexSpanResult(response, requestedModel) {
1303
+ const result = {};
1304
+ if (response.tokenUsage) result.tokenUsage = response.tokenUsage;
1305
+ if (response.sessionId) result.responseId = response.sessionId;
1306
+ if (response.cached !== void 0) result.cacheHit = response.cached;
1307
+ if (requestedModel) result.responseModel = requestedModel;
1308
+ this.setCodexSpanResponseBody(result, response.output);
1309
+ this.setCodexSpanRawAttributes(result, response.raw);
1310
+ return result;
1311
+ }
1312
+ setCodexSpanResponseBody(result, output) {
1313
+ if (output === void 0) return;
1314
+ try {
1315
+ result.responseBody = typeof output === "string" ? output : JSON.stringify(output);
1316
+ } catch {
1317
+ result.responseBody = "[unable to serialize output]";
1318
+ }
1319
+ }
1320
+ setCodexSpanRawAttributes(result, raw) {
1321
+ if (!raw) return;
1322
+ try {
1323
+ const rawData = typeof raw === "string" ? JSON.parse(raw) : raw;
1324
+ if (rawData.reasoningTexts?.length > 0) result.additionalAttributes = {
1325
+ ...result.additionalAttributes,
1326
+ "codex.reasoning.count": rawData.reasoningTexts.length,
1327
+ "codex.reasoning.summary": rawData.reasoningTexts.join("\n---\n").slice(0, 2e3)
1328
+ };
1329
+ if (rawData.conversationMessages?.length > 0) result.additionalAttributes = {
1330
+ ...result.additionalAttributes,
1331
+ "codex.conversation.message_count": rawData.conversationMessages.length
1332
+ };
1333
+ if (rawData.items?.length > 0) result.additionalAttributes = {
1334
+ ...result.additionalAttributes,
1335
+ "codex.items.total": rawData.items.length,
1336
+ "codex.items.breakdown": JSON.stringify(this.getCodexItemCounts(rawData.items))
1337
+ };
1338
+ } catch {}
1339
+ }
1340
+ getCodexItemCounts(items) {
1341
+ const itemCounts = {};
1342
+ for (const item of items) itemCounts[item.type] = (itemCounts[item.type] || 0) + 1;
1343
+ return itemCounts;
1344
+ }
1345
+ /**
1346
+ * Internal implementation of callApi without tracing wrapper.
1347
+ * Context is available for future use (e.g., _context?.vars for template rendering,
1348
+ * _context?.bustCache for cache control, _context?.debug for debug mode).
1349
+ */
1350
+ async callApiInternal(prompt, context, callOptions, rawConfig, inIsolatedWorkspace, cleanupGeneration) {
1351
+ let config;
1352
+ try {
1353
+ config = parseCodexConfig(rawConfig, { stripUnknownKeys: true });
1354
+ } catch (error) {
1355
+ const errorMessage = error instanceof Error ? error.message : String(error);
1356
+ logger.error("Error calling OpenAI Codex SDK", { error: errorMessage });
1357
+ return { error: `Error calling OpenAI Codex SDK: ${errorMessage}` };
1358
+ }
1359
+ const activeTraceparent = getTraceparent();
1360
+ const currentTraceparent = isValidTraceparent(activeTraceparent) ? activeTraceparent : context?.traceparent;
1361
+ const apiKey = this.getApiKey(config);
1362
+ const workingDirectory = resolveAgenticWorkingDir(config.working_dir, state.basePath) ?? process.cwd();
1363
+ const additionalDirectories = config.additional_directories?.map((directory) => resolveAgenticWorkingDir(directory, state.basePath) ?? directory);
1364
+ const resolvedConfig = {
1365
+ ...config,
1366
+ working_dir: workingDirectory,
1367
+ ...additionalDirectories ? { additional_directories: additionalDirectories } : {}
1368
+ };
1369
+ const env = this.prepareEnvironment(resolvedConfig, currentTraceparent, apiKey);
1370
+ if (inIsolatedWorkspace) clearRepositoryEnv(env);
1371
+ const skillRootPrefixes = this.getSkillRootPrefixes(env, resolvedConfig.working_dir);
1372
+ const promptInput = this.parsePromptInput(prompt);
1373
+ if (apiKey) logger.debug("[CodexSDK] Using explicit API credentials from promptfoo config/environment");
1374
+ else logger.debug("[CodexSDK] No explicit API credentials configured; deferring auth resolution to Codex SDK login state");
1375
+ if (callOptions?.abortSignal?.aborted) return { error: "OpenAI Codex SDK call aborted before it started" };
1376
+ let localInstance = void 0;
1377
+ let useLocalInstance = false;
1378
+ let cacheKey = void 0;
1379
+ try {
1380
+ this.validateWorkingDirectory(resolvedConfig.working_dir, resolvedConfig.skip_git_repo_check);
1381
+ const codexInstance = await this.getCodexInstanceForTurn(env, resolvedConfig, apiKey, cleanupGeneration, callOptions?.abortSignal);
1382
+ const activeInstance = codexInstance.activeInstance;
1383
+ localInstance = codexInstance.localInstance;
1384
+ useLocalInstance = codexInstance.useLocalInstance;
1385
+ const promptCacheBasis = context?.prompt?.raw ?? prompt;
1386
+ cacheKey = this.generateCacheKey(resolvedConfig, promptCacheBasis, codexInstance.instanceKey);
1387
+ const { turn, sessionId } = await this.executeCodexTurn(activeInstance, codexInstance.instanceKey, cacheKey, promptInput, resolvedConfig, callOptions, skillRootPrefixes, cleanupGeneration);
1388
+ return this.buildCodexProviderResponse(turn, sessionId, skillRootPrefixes, resolvedConfig);
1389
+ } catch (error) {
1390
+ if (error instanceof Error && error.name === "AbortError" || callOptions?.abortSignal?.aborted) {
1391
+ logger.warn("OpenAI Codex SDK call aborted");
1392
+ return { error: "OpenAI Codex SDK call aborted" };
1393
+ }
1394
+ if (error instanceof CodexCliCompatibilityError) return { error: `Error calling OpenAI Codex SDK: ${error.message}` };
1395
+ const errorMessage = error instanceof Error ? error.message : String(error);
1396
+ logger.error("Error calling OpenAI Codex SDK", { error: errorMessage });
1397
+ return buildCodexRateLimitResponse(error, errorMessage) ?? { error: `Error calling OpenAI Codex SDK: ${errorMessage}` };
1398
+ } finally {
1399
+ await this.cleanupCodexTurn(resolvedConfig, cacheKey, useLocalInstance, localInstance);
1400
+ }
1401
+ }
1402
+ buildCodexRunOptions(config, callOptions) {
1403
+ return {
1404
+ ...config.output_schema ? { outputSchema: config.output_schema } : {},
1405
+ ...callOptions?.abortSignal ? { signal: callOptions.abortSignal } : {}
1406
+ };
1407
+ }
1408
+ async getCodexInstanceForTurn(env, resolvedConfig, apiKey, cleanupGeneration, abortSignal) {
1409
+ if (!this.codexSdk) this.codexSdk = await loadCodexSDK();
1410
+ const codexSdk = this.codexSdk;
1411
+ if (cleanupGeneration !== this.cleanupGeneration) throw new Error("Codex SDK call was interrupted by cleanup");
1412
+ await this.ensureCodexCompatibility(env, resolvedConfig, codexSdk.entryPoint, abortSignal);
1413
+ if (cleanupGeneration !== this.cleanupGeneration) throw new Error("Codex SDK call was interrupted by cleanup");
1414
+ providerRegistry.register(this);
1415
+ const stableEnv = { ...env };
1416
+ delete stableEnv.TRACEPARENT;
1417
+ const instanceKey = this.generateInstanceKey(stableEnv, resolvedConfig);
1418
+ if (resolvedConfig.deep_tracing) {
1419
+ this.warnOnceForDeepTracingThreadOptions(resolvedConfig);
1420
+ const localInstance = new codexSdk.module.Codex(this.buildCodexOptions(env, resolvedConfig, apiKey));
1421
+ return {
1422
+ activeInstance: localInstance,
1423
+ instanceKey,
1424
+ localInstance,
1425
+ useLocalInstance: true
1426
+ };
1427
+ }
1428
+ let activeInstance = this.codexInstances.get(instanceKey);
1429
+ if (!activeInstance) {
1430
+ activeInstance = new codexSdk.module.Codex(this.buildCodexOptions(env, resolvedConfig, apiKey));
1431
+ this.codexInstances.set(instanceKey, activeInstance);
1432
+ }
1433
+ return {
1434
+ activeInstance,
1435
+ instanceKey,
1436
+ localInstance: void 0,
1437
+ useLocalInstance: false
1438
+ };
1439
+ }
1440
+ async ensureCodexCompatibility(env, resolvedConfig, sdkEntryPoint, abortSignal) {
1441
+ const codexPathOverride = resolvedConfig.codex_path_override;
1442
+ if (!codexPathOverride) return;
1443
+ if (resolvedConfig.skip_codex_version_check) {
1444
+ if (!this.compatibilitySkipWarningShown) {
1445
+ logger.warn("[CodexSDK] Skipping custom Codex binary version compatibility check by explicit configuration.", { codexPathOverride });
1446
+ this.compatibilitySkipWarningShown = true;
1447
+ }
1448
+ return;
1449
+ }
1450
+ const preflightEnv = { ...env };
1451
+ delete preflightEnv.CODEX_API_KEY;
1452
+ delete preflightEnv.OPENAI_API_KEY;
1453
+ delete preflightEnv.TRACEPARENT;
1454
+ delete preflightEnv.OTEL_RESOURCE_ATTRIBUTES;
1455
+ if (abortSignal?.aborted) throw createAbortError("Codex compatibility check aborted");
1456
+ const controller = new AbortController();
1457
+ const signal = abortSignal ? AbortSignal.any([abortSignal, controller.signal]) : controller.signal;
1458
+ const compatibilityCheck = Promise.resolve().then(() => checkCodexCliCompatibility({
1459
+ sdkEntryPoint,
1460
+ codexPathOverride,
1461
+ env: preflightEnv,
1462
+ signal
1463
+ }));
1464
+ this.compatibilityChecks.set(controller, compatibilityCheck);
1465
+ try {
1466
+ await compatibilityCheck;
1467
+ } finally {
1468
+ this.compatibilityChecks.delete(controller);
1469
+ }
1470
+ }
1471
+ warnOnceForDeepTracingThreadOptions(resolvedConfig) {
1472
+ if (this.deepTracingWarningShown || !resolvedConfig.persist_threads && !resolvedConfig.thread_id && (resolvedConfig.thread_pool_size ?? 0) <= 1) return;
1473
+ logger.warn("[CodexSDK] deep_tracing is incompatible with thread persistence. Thread options (persist_threads, thread_id, thread_pool_size) are ignored when deep_tracing is enabled.");
1474
+ this.deepTracingWarningShown = true;
1475
+ }
1476
+ async executeCodexTurn(activeInstance, instanceKey, cacheKey, promptInput, resolvedConfig, callOptions, skillRootPrefixes, cleanupGeneration) {
1477
+ const queueKey = this.getThreadRunQueueKey(resolvedConfig, cacheKey);
1478
+ const runOptions = this.buildCodexRunOptions(resolvedConfig, callOptions);
1479
+ return this.threadRunQueues.run(queueKey, callOptions?.abortSignal, async () => {
1480
+ if (cleanupGeneration !== this.cleanupGeneration) throw new Error("Codex SDK call was interrupted by cleanup");
1481
+ const thread = await this.getOrCreateThread(resolvedConfig, cacheKey, instanceKey, activeInstance);
1482
+ if (cleanupGeneration !== this.cleanupGeneration) throw new Error("Codex SDK call was interrupted by cleanup");
1483
+ return {
1484
+ turn: resolvedConfig.enable_streaming ? await this.runStreaming(thread, promptInput, runOptions, callOptions, skillRootPrefixes) : await thread.run(promptInput, runOptions),
1485
+ sessionId: thread.id || "unknown"
1486
+ };
1487
+ });
1488
+ }
1489
+ buildCodexProviderResponse(turn, sessionId, skillRootPrefixes, resolvedConfig) {
1490
+ const output = turn.finalResponse || "";
1491
+ const tokenUsage = this.buildCodexTokenUsage(turn.usage);
1492
+ logger.debug("OpenAI Codex SDK response", {
1493
+ output,
1494
+ usage: turn.usage
1495
+ });
1496
+ return {
1497
+ output,
1498
+ tokenUsage,
1499
+ cost: this.calculateCodexResponseCost(tokenUsage, this.getCodexBillingModelName(resolvedConfig), Boolean(resolvedConfig.codex_path_override)),
1500
+ metadata: this.buildCodexResponseMetadata(turn.items, skillRootPrefixes),
1501
+ raw: JSON.stringify(turn),
1502
+ sessionId
1503
+ };
1504
+ }
1505
+ buildCodexResponseMetadata(items, skillRootPrefixes) {
1506
+ const skillMetadata = this.buildSkillMetadata(items, skillRootPrefixes);
1507
+ if (!skillMetadata) return;
1508
+ return getCodexSkillMetadataFields(skillMetadata);
1509
+ }
1510
+ buildCodexTokenUsage(turnUsage) {
1511
+ if (!turnUsage) return;
1512
+ const reasoningTokens = turnUsage.reasoning_output_tokens;
1513
+ const cacheWriteTokens = turnUsage.cache_write_input_tokens;
1514
+ const hasCompletionDetails = typeof reasoningTokens === "number" || typeof cacheWriteTokens === "number";
1515
+ return {
1516
+ prompt: turnUsage.input_tokens,
1517
+ completion: turnUsage.output_tokens,
1518
+ total: turnUsage.input_tokens + turnUsage.output_tokens,
1519
+ cached: turnUsage.cached_input_tokens || 0,
1520
+ ...hasCompletionDetails ? { completionDetails: {
1521
+ ...typeof reasoningTokens === "number" ? { reasoning: reasoningTokens } : {},
1522
+ ...typeof cacheWriteTokens === "number" ? { cacheCreationInputTokens: cacheWriteTokens } : {}
1523
+ } } : {}
1524
+ };
1525
+ }
1526
+ calculateCodexResponseCost(tokenUsage, model, usesCustomCodexBinary) {
1527
+ const normalizedModel = model?.replace(/^bedrock:/, "");
1528
+ if (usesCustomCodexBinary && normalizedModel?.startsWith("gpt-5.6")) {
1529
+ const cacheWriteTokens = tokenUsage?.completionDetails?.cacheCreationInputTokens;
1530
+ if (typeof cacheWriteTokens !== "number" || !Number.isFinite(cacheWriteTokens) || cacheWriteTokens <= 0) return;
1531
+ }
1532
+ return calculateOpenAIUsageCostFromTokenUsage(model, tokenUsage);
1533
+ }
1534
+ getCodexBillingModelName(config) {
1535
+ const cliConfigProvider = config.cli_config?.model_provider;
1536
+ if ((config.model_provider ?? (typeof cliConfigProvider === "string" ? cliConfigProvider : void 0))?.trim().toLowerCase() === "amazon-bedrock" && config.model !== void 0 && /^openai\.gpt-5\.6(?:-|$)/.test(config.model)) return `bedrock:${config.model.slice(7)}`;
1537
+ return config.model;
1538
+ }
1539
+ async cleanupCodexTurn(resolvedConfig, cacheKey, useLocalInstance, localInstance) {
1540
+ if (!resolvedConfig.deep_tracing && !resolvedConfig.persist_threads && !resolvedConfig.thread_id && cacheKey) this.threads.delete(cacheKey);
1541
+ if (!useLocalInstance || !localInstance) return;
1542
+ try {
1543
+ await this.destroyInstance(localInstance);
1544
+ } catch (cleanupError) {
1545
+ logger.debug("[CodexSDK] Error cleaning up local instance", { error: cleanupError });
1546
+ }
1547
+ }
1548
+ };
1549
+ //#endregion
1550
+ export { OpenAICodexSDKProvider as n, resolveCodexSdkPackage as r, CODEX_SDK_VERSION_RANGE as t };
1551
+
1552
+ //# sourceMappingURL=codex-sdk-C2ZLxa6r.js.map