promptfoo 0.121.4 → 0.121.7

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 (497) hide show
  1. package/dist/src/{ListApp-DQkFNqE9.js → ListApp-DLmM02JS.js} +1 -1
  2. package/dist/src/{accounts-DhMYUUbu.js → accounts-Ca7WIoPY.js} +12 -7
  3. package/dist/src/{accounts-F9d_5sMC.js → accounts-CjFnOPmb.js} +14 -9
  4. package/dist/src/{accounts-Dy17bs4D.cjs → accounts-CmWzeD2d.cjs} +16 -10
  5. package/dist/src/{accounts-DdJ2pHMI.js → accounts-DanM1wq_.js} +13 -8
  6. package/dist/src/{agentic-utils-qFlm6zes.js → agentic-utils-CJ0j3fBi.js} +3 -3
  7. package/dist/src/{agentic-utils-w68v6_Dz.js → agentic-utils-DDEGRV9v.js} +3 -3
  8. package/dist/src/{agentic-utils-BpX5b23w.cjs → agentic-utils-DvPWSUpb.cjs} +8 -7
  9. package/dist/src/{agentic-utils-P172hM8B.js → agentic-utils-TxUEMPYS.js} +2 -2
  10. package/dist/src/{agents-BahDpe5G.cjs → agents-B4sRuXg3.cjs} +7 -6
  11. package/dist/src/{agents-pQeBEXMm.js → agents-B8q7h_ek.js} +5 -5
  12. package/dist/src/{agents-CgaMXvLM.js → agents-CBgJvRkB.js} +21 -10
  13. package/dist/src/{agents-C-R_jfzI.js → agents-CYn2n3QP.js} +4 -4
  14. package/dist/src/{agents-8FDnTriG.js → agents-D-vDNFx4.js} +21 -10
  15. package/dist/src/{agents-aYPQLf8W.js → agents-LrHuQqr1.js} +20 -9
  16. package/dist/src/{agents-DJ35I3Nt.js → agents-QGg76OF-.js} +5 -5
  17. package/dist/src/{agents-D7-HGxUj.cjs → agents-eHZ9nlgA.cjs} +21 -10
  18. package/dist/src/{aimlapi-sgYnkE54.js → aimlapi-CJEbQ0o6.js} +7 -7
  19. package/dist/src/{aimlapi-BD6J9oKt.js → aimlapi-D5HXzZ0s.js} +6 -6
  20. package/dist/src/{aimlapi-qcK4OT55.cjs → aimlapi-T6HGNxNe.cjs} +7 -7
  21. package/dist/src/{aimlapi-BCq3MHeL.js → aimlapi-eYv3a_DK.js} +7 -7
  22. package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
  23. package/dist/src/app/assets/Report-BNHJKN35.js +1 -0
  24. package/dist/src/app/assets/index-BnT6P6sF.js +388 -0
  25. package/dist/src/app/assets/index-yhM8y1PP.css +1 -0
  26. package/dist/src/app/assets/{scroll-timeline-D9IT_e8Z.js → scroll-timeline-RpeTwOvs.js} +1 -1
  27. package/dist/src/app/assets/sync-5gq6fmG4.js +4 -0
  28. package/dist/src/app/assets/vendor-charts-BL9OMNU7.js +36 -0
  29. package/dist/src/app/assets/{vendor-markdown-Ch00wnNI.js → vendor-markdown-BYsQqn7Z.js} +10 -10
  30. package/dist/src/app/assets/{vendor-react-CVvmk1UB.js → vendor-react-CqWgVW6T.js} +2 -2
  31. package/dist/src/app/assets/{vendor-utils-BnEYbx2Q.js → vendor-utils-BHPO71pu.js} +1 -1
  32. package/dist/src/app/index.html +31 -6
  33. package/dist/src/{audio-COrn8rM6.js → audio-BqnRvcWG.js} +3 -3
  34. package/dist/src/{audio-DcVKoInv.js → audio-CPMtV1yR.js} +4 -4
  35. package/dist/src/{audio-B7izf48x.js → audio-DyiebVB3.js} +4 -4
  36. package/dist/src/{audio-BQtNuYBj.cjs → audio-FnxbEnSE.cjs} +4 -4
  37. package/dist/src/authoritativeMarkupInjection-BZIywVjG.js +74 -0
  38. package/dist/src/authoritativeMarkupInjection-DyAXAsSr.js +75 -0
  39. package/dist/src/authoritativeMarkupInjection-F2gBw0lN.cjs +74 -0
  40. package/dist/src/authoritativeMarkupInjection-QEQmFS83.js +74 -0
  41. package/dist/src/{base-PYJvBE1i.js → base-CKLo890h.js} +4 -3
  42. package/dist/src/{base-fZ9wgg50.js → base-Co80MMCi.js} +5 -4
  43. package/dist/src/{base-D-670DX8.cjs → base-DGJW48uz.cjs} +5 -4
  44. package/dist/src/{base-yrI1Yal4.js → base-E9I8zXjz.js} +5 -4
  45. package/dist/src/bestOfN-B3wNzjSB.js +137 -0
  46. package/dist/src/bestOfN-BBsO41z4.js +136 -0
  47. package/dist/src/bestOfN-CAwmg5UL.cjs +140 -0
  48. package/dist/src/bestOfN-_kTi8Bxe.js +136 -0
  49. package/dist/src/{blobs-D2FAd1Q5.cjs → blobs-B0977K1O.cjs} +7 -6
  50. package/dist/src/{blobs-BCZavS8s.js → blobs-CeFdPn_T.js} +3 -3
  51. package/dist/src/{blobs-BQWqnnvL.js → blobs-DODuTK-a.js} +3 -3
  52. package/dist/src/{blobs-C-F78Kfn.js → blobs-Dwef1Ao1.js} +2 -2
  53. package/dist/src/{cache-BIyPcp5v.cjs → cache-CPGUA4Yl.cjs} +135 -25
  54. package/dist/src/cache-Cf7b4pWE.js +3 -0
  55. package/dist/src/{cache-D5NZmMiT.js → cache-DIXbtkNO.js} +125 -10
  56. package/dist/src/{cache-mb7c8hbp.js → cache-DpPWrkTE.js} +128 -12
  57. package/dist/src/{cache-C4Xb-hNb.js → cache-roFAE0cI.js} +126 -11
  58. package/dist/src/{chat-I9izLm49.js → chat-CUCorGiL.js} +12 -12
  59. package/dist/src/{chat-BPXSW8Bv.cjs → chat-DG1wG4w0.cjs} +6 -6
  60. package/dist/src/{chat-BfPaS15_.js → chat-Dabu84Br.js} +12 -12
  61. package/dist/src/{chat-Dr3DUQ0D.js → chat-DqUFcWI0.js} +12 -12
  62. package/dist/src/{chat-CclRbxGf.cjs → chat-DxTDQ83C.cjs} +14 -13
  63. package/dist/src/{chat-MKxMnZJZ.js → chat-GmlolEwo.js} +4 -4
  64. package/dist/src/{chat-0bwXjVP0.js → chat-TP8Qifkh.js} +6 -6
  65. package/dist/src/{chat-mW0ORo8G.js → chat-iwaM5UTQ.js} +6 -6
  66. package/dist/src/{chatkit-zUIVoDos.js → chatkit-B6DWi70Q.js} +4 -4
  67. package/dist/src/{chatkit-BoWoSgXl.cjs → chatkit-BYveR48_.cjs} +6 -5
  68. package/dist/src/{chatkit-Cv6AhukM.js → chatkit-fARZwEfV.js} +3 -3
  69. package/dist/src/{chatkit-CJnHRRMM.js → chatkit-lb6FK02w.js} +4 -4
  70. package/dist/src/{claude-agent-sdk-Dtq_L-Sc.js → claude-agent-sdk-BQNp_y-F.js} +212 -67
  71. package/dist/src/{claude-agent-sdk-BQNuLaAK.js → claude-agent-sdk-D5Jl0SDh.js} +212 -67
  72. package/dist/src/{claude-agent-sdk-CPJo3dBQ.cjs → claude-agent-sdk-DH416NBD.cjs} +218 -72
  73. package/dist/src/{claude-agent-sdk-nfAIcxNf.js → claude-agent-sdk-x1XJ1-pU.js} +212 -67
  74. package/dist/src/{cloud-DQZ5sVjW.js → cloud-D3DiFqH6.js} +3 -3
  75. package/dist/src/cloud-p96PA4MH.js +3 -0
  76. package/dist/src/{cloudflare-ai-BIB567w6.js → cloudflare-ai-B6NVI3ax.js} +4 -4
  77. package/dist/src/{cloudflare-ai-Dl3N9OVD.cjs → cloudflare-ai-CEAW-xQa.cjs} +6 -6
  78. package/dist/src/{cloudflare-ai-DlKr0rY7.js → cloudflare-ai-RFSojyXG.js} +6 -6
  79. package/dist/src/{cloudflare-ai-DGLte7Py.js → cloudflare-ai-r4tbYmWU.js} +6 -6
  80. package/dist/src/{cloudflare-gateway-CiIZHU0Q.js → cloudflare-gateway-BCkLouto.js} +5 -5
  81. package/dist/src/{cloudflare-gateway-DI1HNP5F.js → cloudflare-gateway-BaZ4insB.js} +3 -3
  82. package/dist/src/{cloudflare-gateway-BDZrYydE.js → cloudflare-gateway-CF-Vb-2Z.js} +5 -5
  83. package/dist/src/{cloudflare-gateway-BYDp495F.cjs → cloudflare-gateway-TJMLBj6I.cjs} +5 -5
  84. package/dist/src/codex-app-server-B8KHEiF4.js +1915 -0
  85. package/dist/src/codex-app-server-CnrLBCeA.cjs +1921 -0
  86. package/dist/src/codex-app-server-DIXZ230V.js +1915 -0
  87. package/dist/src/codex-app-server-Dd22dC_N.js +1916 -0
  88. package/dist/src/{codex-sdk-CpqiOqDO.js → codex-sdk-B6Wah8Pa.js} +6 -6
  89. package/dist/src/codex-sdk-BGjVAk23.js +3 -0
  90. package/dist/src/{codex-sdk-C2_M2pl_.cjs → codex-sdk-CFF6gUyi.cjs} +18 -10
  91. package/dist/src/{codex-sdk-Rtky3M4I.js → codex-sdk-CmQABzV3.js} +6 -6
  92. package/dist/src/{codex-sdk-CErXn7qh.js → codex-sdk-D2d54RL8.js} +5 -5
  93. package/dist/src/{cometapi-CtJ-mS8R.js → cometapi-Bu9B8NUY.js} +8 -8
  94. package/dist/src/{cometapi-DT-jlVCB.js → cometapi-CtzNCHKu.js} +7 -7
  95. package/dist/src/{cometapi-UVOryo4W.cjs → cometapi-DHCDlQUI.cjs} +8 -8
  96. package/dist/src/{cometapi-BUlt_ELa.js → cometapi-OBILPLlu.js} +8 -8
  97. package/dist/src/{completion-HUe8wDhZ.js → completion-CO2e1_62.js} +6 -6
  98. package/dist/src/{completion-BozdoXba.cjs → completion-CSYfl2cd.cjs} +6 -6
  99. package/dist/src/{completion-x0a_c2y1.js → completion-DZNxcyfG.js} +6 -6
  100. package/dist/src/{completion-Dnxn7E-j.js → completion-sNvCLTAP.js} +5 -5
  101. package/dist/src/constants-BjJV0cRr.js +6 -0
  102. package/dist/src/constants-DH5XYLKZ.js +7 -0
  103. package/dist/src/constants-DZGEFLsu.js +6 -0
  104. package/dist/src/constants-a2kYssQk.cjs +11 -0
  105. package/dist/src/{createHash-4gFQpDDv.js → createHash-BtbSX3mj.js} +1 -1
  106. package/dist/src/{createHash-CwDVU5xr.js → createHash-CGVzWdjj.js} +1 -1
  107. package/dist/src/{createHash-B7KvgoOD.cjs → createHash-CSiqnK5P.cjs} +2 -2
  108. package/dist/src/{createHash-ChI45QR1.js → createHash-CgRvs4Fn.js} +1 -1
  109. package/dist/src/crescendo-BXEJK_bi.cjs +704 -0
  110. package/dist/src/crescendo-CU_Y2i-m.js +702 -0
  111. package/dist/src/crescendo-J1Xx4_zb.js +703 -0
  112. package/dist/src/crescendo-QiaSLW0d.js +701 -0
  113. package/dist/src/custom-BJfP00Bh.js +619 -0
  114. package/dist/src/custom-CZVn-1-r.js +620 -0
  115. package/dist/src/custom-Cqia7M0D.cjs +621 -0
  116. package/dist/src/custom-notggYVl.js +618 -0
  117. package/dist/src/{docker-DCgsveLD.js → docker-4D1eL6Gq.js} +6 -6
  118. package/dist/src/{docker-ClnmCf1Z.js → docker-BBv1WUDu.js} +5 -5
  119. package/dist/src/{docker-DS4_Osau.cjs → docker-D06JUoe2.cjs} +6 -6
  120. package/dist/src/{docker-CQmlA2NU.js → docker-DdJQBxK9.js} +6 -6
  121. package/dist/src/{embedding-D3xTseo7.js → embedding--UZVe4_7.js} +6 -6
  122. package/dist/src/{embedding-I45KG3o7.cjs → embedding-BbrwopfX.cjs} +6 -6
  123. package/dist/src/{embedding-nFbumxcv.js → embedding-Bi3rxrZF.js} +5 -5
  124. package/dist/src/{embedding-DD9wa3ae.js → embedding-C251p1-8.js} +6 -6
  125. package/dist/src/{errors-Cw810C93.js → errors-9PcUL8BC.js} +1 -1
  126. package/dist/src/{esm-Dh4dOLlt.js → esm-B6whoAcf.js} +2 -2
  127. package/dist/src/{esm-CtEPLdAj.cjs → esm-BIKakvNa.cjs} +8 -7
  128. package/dist/src/{esm-C7PnfdF8.js → esm-BTK1W7lG.js} +1 -1
  129. package/dist/src/{esm-tVgYPY-f.js → esm-Bexx2PFc.js} +2 -2
  130. package/dist/src/{eval-u4UVafl6.js → eval-0VRANImH.js} +21 -21
  131. package/dist/src/{eval-CzJFfFO9.js → eval-DscR5iOM.js} +1 -1
  132. package/dist/src/{evalResult-Bgm9ZH31.js → evalResult-2RRJvFyB.js} +41 -16
  133. package/dist/src/{evalResult-KZqXl4XP.cjs → evalResult-CvtS8h8u.cjs} +51 -15
  134. package/dist/src/evalResult-DqzsS6_W.js +3 -0
  135. package/dist/src/{evalResult-D3hVYFis.js → evalResult-eUkJv9Ko.js} +40 -15
  136. package/dist/src/evaluator-DNdJF1Gv.js +3 -0
  137. package/dist/src/{evaluator-IvuDYSvQ.js → evaluator-DRoiYB2q.js} +1060 -187
  138. package/dist/src/evaluatorHelpers-BsYP_muT.js +511 -0
  139. package/dist/src/evaluatorHelpers-CRqTvSux.cjs +537 -0
  140. package/dist/src/evaluatorHelpers-DuqFFfq7.js +510 -0
  141. package/dist/src/{extractor-CAfTSraf.js → extractor-BR7XAzAL.js} +6 -6
  142. package/dist/src/{extractor-WVPOrH43.cjs → extractor-BdxEtt3J.cjs} +6 -6
  143. package/dist/src/{extractor-DNSeBVOJ.js → extractor-CIW3iN-b.js} +6 -6
  144. package/dist/src/{extractor-Dk6bRWkv.js → extractor-CxRtnaHl.js} +5 -5
  145. package/dist/src/{fetch-B0Z3Oe4k.js → fetch-BufrQtvR.js} +93 -40
  146. package/dist/src/{fetch-BEWnXrrG.js → fetch-DXUnXkVU.js} +89 -40
  147. package/dist/src/{fetch-CJU5ELPa.cjs → fetch-Dw4XZHjj.cjs} +330 -270
  148. package/dist/src/{fetch-Di00EQrc.js → fetch-It34O8Ur.js} +305 -252
  149. package/dist/src/fetch-_YgGd2qv.js +3 -0
  150. package/dist/src/{fileExtensions-bYh77CN8.cjs → fileExtensions-BhdwzYaD.cjs} +24 -1
  151. package/dist/src/{fileExtensions-DnqA1y9x.js → fileExtensions-CXRfY3Ss.js} +12 -2
  152. package/dist/src/{fileExtensions-AWa2ZML4.js → fileExtensions-D4GCJ67J.js} +12 -2
  153. package/dist/src/{formatDuration-DZzPsexs.js → formatDuration-CMVNrYvE.js} +1 -1
  154. package/dist/src/{genaiTracer-yRuxj9-L.cjs → genaiTracer-14nugQQx.cjs} +14 -2
  155. package/dist/src/{genaiTracer-DWdZ28hY.js → genaiTracer-BPVvltoW.js} +2 -2
  156. package/dist/src/{genaiTracer-XnrcgDCe.js → genaiTracer-D18lYzhB.js} +2 -2
  157. package/dist/src/{genaiTracer-COYDi-tC.js → genaiTracer-jJKYsnjc.js} +2 -2
  158. package/dist/src/goat-Ckd3q3AY.js +467 -0
  159. package/dist/src/goat-Qgurm-NP.js +466 -0
  160. package/dist/src/goat-ghadEDdy.js +465 -0
  161. package/dist/src/goat-una6pZGP.cjs +469 -0
  162. package/dist/src/graders-BDT7dif6.js +3 -0
  163. package/dist/src/{graders-eIHhRqoC.js → graders-BGP99PdK.js} +2416 -2224
  164. package/dist/src/{graders-Zy3x0zqX.js → graders-BX0f2tvS.js} +2423 -2226
  165. package/dist/src/{graders-pvbReLLn.js → graders-C0nXU_ZP.js} +1806 -1609
  166. package/dist/src/{graders--zknU_uk.cjs → graders-ClrU2fnd.cjs} +2219 -1949
  167. package/dist/src/hydra-BSNZZm2M.js +543 -0
  168. package/dist/src/hydra-BxdG4nkg.js +541 -0
  169. package/dist/src/hydra-DE4xWwyc.js +542 -0
  170. package/dist/src/hydra-DrJttnvw.cjs +542 -0
  171. package/dist/src/image-B4oBtu6J.js +443 -0
  172. package/dist/src/{image-dnoUgPrC.js → image-BN-hjLL9.js} +4 -4
  173. package/dist/src/{image-9302QVqR.js → image-B_fPIwdg.js} +3 -3
  174. package/dist/src/image-BvUAW344.js +442 -0
  175. package/dist/src/image-Cvjwx1uY.js +442 -0
  176. package/dist/src/{image-De2FBmYV.cjs → image-DfVCGPbI.cjs} +4 -4
  177. package/dist/src/{image-u7-rKnYU.js → image-QzmydkiG.js} +4 -4
  178. package/dist/src/image-X0oY4350.cjs +465 -0
  179. package/dist/src/index.cjs +1689 -558
  180. package/dist/src/index.d.cts +3270 -1624
  181. package/dist/src/index.d.ts +3270 -1624
  182. package/dist/src/index.js +1553 -438
  183. package/dist/src/indirectWebPwn-02ZIghCS.js +259 -0
  184. package/dist/src/indirectWebPwn-BJ22AbQa.cjs +397 -0
  185. package/dist/src/indirectWebPwn-CbjUG0rh.js +385 -0
  186. package/dist/src/indirectWebPwn-CfQJt3gk.cjs +260 -0
  187. package/dist/src/indirectWebPwn-DBQhOjoD.js +260 -0
  188. package/dist/src/indirectWebPwn-OsXnKejv.js +259 -0
  189. package/dist/src/indirectWebPwn-tNx9OZ35.js +385 -0
  190. package/dist/src/indirectWebPwn-uyWdHx04.js +386 -0
  191. package/dist/src/inputVariables-B0qUChbV.js +467 -0
  192. package/dist/src/inputVariables-DUGMb9Ka.js +464 -0
  193. package/dist/src/inputVariables-DXFdi7AI.js +468 -0
  194. package/dist/src/inputVariables-Dq9W-Z3a.cjs +475 -0
  195. package/dist/src/{interactiveCheck-CLERUB0c.js → interactiveCheck-C4QlIuoR.js} +2 -2
  196. package/dist/src/{invariant-BtWWVVhl.js → invariant-B2Rf6avk.js} +1 -1
  197. package/dist/src/{invariant-vgHWClmd.js → invariant-DIYf9sP1.js} +1 -1
  198. package/dist/src/{invariant-kfQ8Bu82.cjs → invariant-QtnLD03y.cjs} +1 -1
  199. package/dist/src/iterative-CpU6i2As.js +490 -0
  200. package/dist/src/iterative-DJQEQpG3.js +491 -0
  201. package/dist/src/iterative-DQBuWM-j.cjs +493 -0
  202. package/dist/src/iterative-FTS4Bz67.js +492 -0
  203. package/dist/src/iterativeImage-BUABMVOA.js +413 -0
  204. package/dist/src/iterativeImage-ByFWkxax.cjs +415 -0
  205. package/dist/src/iterativeImage-BzUapOUi.js +414 -0
  206. package/dist/src/iterativeImage-Doz8mgxF.js +413 -0
  207. package/dist/src/iterativeMeta-B3YiAOc8.js +386 -0
  208. package/dist/src/iterativeMeta-C7APE_P1.js +385 -0
  209. package/dist/src/iterativeMeta-CSS8M6Ds.cjs +385 -0
  210. package/dist/src/iterativeMeta-DgoQ7bLh.js +384 -0
  211. package/dist/src/iterativeTree-B5zxBBSW.js +769 -0
  212. package/dist/src/iterativeTree-CNyIk0Yn.js +768 -0
  213. package/dist/src/iterativeTree-CPMF10ve.cjs +771 -0
  214. package/dist/src/iterativeTree-DvZ7GBwt.js +770 -0
  215. package/dist/src/{knowledgeBase-Dgc7CBWF.js → knowledgeBase-BadkINlJ.js} +24 -10
  216. package/dist/src/{knowledgeBase-RhFPGWDc.js → knowledgeBase-Bi_8sV-H.js} +25 -11
  217. package/dist/src/{knowledgeBase-lm9RXSAm.js → knowledgeBase-CkMljjdg.js} +25 -11
  218. package/dist/src/{knowledgeBase-Bpoe_nLu.cjs → knowledgeBase-DUh34xba.cjs} +25 -11
  219. package/dist/src/{litellm-DRjpcSa7.js → litellm-BKBo0jpC.js} +5 -5
  220. package/dist/src/{litellm-C2kqjxqp.js → litellm-BXyn5kZK.js} +5 -5
  221. package/dist/src/{litellm-p37R1dzQ.js → litellm-CNcfbCfa.js} +4 -4
  222. package/dist/src/{litellm-CoyI4IAl.cjs → litellm-CtAr7bKG.cjs} +5 -5
  223. package/dist/src/{logger-DksKw1Qc.js → logger-BbY6ypFL.js} +2 -2
  224. package/dist/src/{logger-B88EkIn6.js → logger-KD8JjCRJ.js} +2 -2
  225. package/dist/src/{logger-COuQb2xB.cjs → logger-cfNpzI4o.cjs} +13 -55
  226. package/dist/src/{luma-ray-KgTCXrZC.js → luma-ray-BMX1iEB6.js} +5 -5
  227. package/dist/src/{luma-ray-B863CmuZ.js → luma-ray-CR5TSpp4.js} +5 -5
  228. package/dist/src/{luma-ray-BxVKaW2a.cjs → luma-ray-D3FUc2K3.cjs} +9 -8
  229. package/dist/src/{luma-ray-BTTLtqQ8.js → luma-ray-OEMmS1RB.js} +6 -6
  230. package/dist/src/main.js +909 -369
  231. package/dist/src/memoryPoisoning-CM83NWYl.js +107 -0
  232. package/dist/src/memoryPoisoning-D8h9gXJF.js +106 -0
  233. package/dist/src/memoryPoisoning-Dp-btinn.cjs +106 -0
  234. package/dist/src/memoryPoisoning-cLuCoTuJ.js +106 -0
  235. package/dist/src/{messages-BTQz42fn.js → messages-BabO-cX8.js} +273 -17
  236. package/dist/src/{messages-811uVVW5.cjs → messages-DBPir0TQ.cjs} +278 -18
  237. package/dist/src/{messages-zWbkLLHz.js → messages-DGUlSNU7.js} +273 -17
  238. package/dist/src/{messages-MYTQ2TWp.js → messages-vsE_-Lv0.js} +273 -17
  239. package/dist/src/{meteor-DHdzY1Ss.js → meteor--TZYICTI.js} +2 -2
  240. package/dist/src/{meteor-Co1VQ1u5.cjs → meteor-CR226f7Z.cjs} +2 -2
  241. package/dist/src/{meteor-CU5UAE-H.js → meteor-Cl_yd7rJ.js} +2 -2
  242. package/dist/src/{meteor-DuAFv6gF.js → meteor-Dce-_zGQ.js} +1 -1
  243. package/dist/src/mischievousUser-0l8GD7Dp.js +46 -0
  244. package/dist/src/mischievousUser-BUOP9W5r.js +46 -0
  245. package/dist/src/mischievousUser-frFYKxu6.js +47 -0
  246. package/dist/src/mischievousUser-olGgHIVR.cjs +46 -0
  247. package/dist/src/{modelslab-Dk1JAtVo.cjs → modelslab-CNV5bMSk.cjs} +7 -7
  248. package/dist/src/{modelslab-D0erNWKe.js → modelslab-Cogmu4mG.js} +6 -6
  249. package/dist/src/{modelslab-DIq-6y7x.js → modelslab-Dzst7VTU.js} +6 -6
  250. package/dist/src/{modelslab-wu9yi5GE.js → modelslab-EyDczZ5A.js} +7 -7
  251. package/dist/src/{nova-reel-CCFRfeRb.js → nova-reel-BGPNBOMS.js} +6 -6
  252. package/dist/src/{nova-reel-DQrm74ng.js → nova-reel-B_5NKFu1.js} +5 -5
  253. package/dist/src/{nova-reel-gr11WG7f.js → nova-reel-C4eUJGse.js} +5 -5
  254. package/dist/src/{nova-reel-CrLXVKQf.cjs → nova-reel-CjJRxI1X.cjs} +9 -8
  255. package/dist/src/{nova-sonic-BYdp-QLs.js → nova-sonic-BNGmgfFz.js} +4 -4
  256. package/dist/src/{nova-sonic-TDgrlTk7.js → nova-sonic-ChPlh5na.js} +4 -4
  257. package/dist/src/{nova-sonic-B_ZXcUJB.js → nova-sonic-CrV0iaY_.js} +3 -3
  258. package/dist/src/{nova-sonic-i5tUvXKn.cjs → nova-sonic-DuOG9Aun.cjs} +5 -4
  259. package/dist/src/{openai-DhVEmgeZ.js → openai-BMHD2Huo.js} +2 -2
  260. package/dist/src/{openai-URNyItar.cjs → openai-C3uXv8wS.cjs} +2 -2
  261. package/dist/src/{openai-Qsvz25mV.js → openai-CJrsh9n4.js} +2 -2
  262. package/dist/src/{openai-iYtrXzOX.js → openai-zgwBb4Ff.js} +1 -1
  263. package/dist/src/{openclaw-CnQ363Wi.js → openclaw-BIHlu_36.js} +10 -8
  264. package/dist/src/{openclaw-CwzlQSQX.js → openclaw-CF7fMido.js} +9 -7
  265. package/dist/src/{openclaw-wX9rtfke.cjs → openclaw-Dphc01BY.cjs} +18 -15
  266. package/dist/src/{openclaw-CLWrW03k.js → openclaw-zIJAsz3P.js} +10 -8
  267. package/dist/src/{opencode-sdk-BUu5Nevv.js → opencode-sdk-B3vlPLsp.js} +40 -5
  268. package/dist/src/{opencode-sdk-BxD8vXp_.js → opencode-sdk-D05JSgMQ.js} +40 -5
  269. package/dist/src/{opencode-sdk-BZ2idgYA.cjs → opencode-sdk-DoY6GbWw.cjs} +46 -10
  270. package/dist/src/{opencode-sdk-GI2KaAXq.js → opencode-sdk-sRKYHGoI.js} +39 -4
  271. package/dist/src/{otlpReceiver-BntK801g.js → otlpReceiver--gTpSagc.js} +120 -4
  272. package/dist/src/{otlpReceiver-DmVulbhC.js → otlpReceiver-B2eaKC8C.js} +120 -4
  273. package/dist/src/{otlpReceiver-B2z58l4e.js → otlpReceiver-BXjcRqAM.js} +119 -3
  274. package/dist/src/{otlpReceiver-BfcVq2Nq.cjs → otlpReceiver-CvJdBGSc.cjs} +125 -7
  275. package/dist/src/packageParser--MWTSrPW.js +36 -0
  276. package/dist/src/packageParser-CgE-ziRo.js +35 -0
  277. package/dist/src/packageParser-QoCS1FMl.cjs +54 -0
  278. package/dist/src/packageParser-hwwSGnAZ.js +35 -0
  279. package/dist/src/processShim-BBxt7LKO.js +95 -0
  280. package/dist/src/processShim-BcGzU8fY.js +94 -0
  281. package/dist/src/processShim-C_z3aRvF.js +94 -0
  282. package/dist/src/processShim-DSY9BV2T.cjs +98 -0
  283. package/dist/src/promptLength-0qIHyhA5.js +71 -0
  284. package/dist/src/promptLength-4X-Wd8PG.js +72 -0
  285. package/dist/src/promptLength-B9nZEfO6.js +71 -0
  286. package/dist/src/promptLength-BbBbDHNj.cjs +94 -0
  287. package/dist/src/promptfoo-BDrfT30-.js +180 -0
  288. package/dist/src/promptfoo-Cm4hiy1Y.js +180 -0
  289. package/dist/src/promptfoo-Rjp-MeBb.js +181 -0
  290. package/dist/src/promptfoo-b-baRMj-.cjs +205 -0
  291. package/dist/src/prompts-BYMtqPCw.js +259 -0
  292. package/dist/src/prompts-C-bqE1Yp.js +260 -0
  293. package/dist/src/prompts-Cp_Qx5Ml.js +270 -0
  294. package/dist/src/prompts-DHhQsANy.js +259 -0
  295. package/dist/src/prompts-D_QpZ2Dm.js +271 -0
  296. package/dist/src/prompts-hNvWBD3z.cjs +284 -0
  297. package/dist/src/prompts-huDVH2CI.js +270 -0
  298. package/dist/src/prompts-p78Hul5i.cjs +289 -0
  299. package/dist/src/{providerRegistry-CPQ_CmVO.js → providerRegistry-1gB5vtzQ.js} +2 -2
  300. package/dist/src/{providerRegistry-CQMdTmHP.cjs → providerRegistry-CZO_w7ue.cjs} +2 -2
  301. package/dist/src/{providerRegistry-Bvh8mv85.js → providerRegistry-DHcFiVWX.js} +1 -1
  302. package/dist/src/{providerRegistry-CWoPjKFZ.js → providerRegistry-ReCd0sFa.js} +2 -2
  303. package/dist/src/{providers-BV_KMZje.js → providers-B9KzWxAX.js} +10558 -21587
  304. package/dist/src/{providers-DruaQfwu.js → providers-BCCz6_IX.js} +1228 -12196
  305. package/dist/src/{providers-1eKkXBKp.cjs → providers-BDVVIQM6.cjs} +10649 -21843
  306. package/dist/src/{providers-iUt5fbAN.js → providers-BYAn82cf.js} +1 -1
  307. package/dist/src/{providers-Domz_llv.js → providers-DVYRZP4E.js} +10589 -21570
  308. package/dist/src/{pythonUtils-Cldx7huE.js → pythonUtils-CLCgQ9tt.js} +3 -3
  309. package/dist/src/{pythonUtils-CnndUbW-.js → pythonUtils-CgYxeSmO.js} +3 -3
  310. package/dist/src/{pythonUtils-tAJvvpS-.cjs → pythonUtils-Cokhluq3.cjs} +8 -7
  311. package/dist/src/{pythonUtils-C2UQ30Rz.js → pythonUtils-D0BYebvX.js} +3 -3
  312. package/dist/src/{quiverai-DFotyafY.cjs → quiverai-BAp6iTZD.cjs} +4 -4
  313. package/dist/src/{quiverai-aPPvXOgn.js → quiverai-BvIhI_0l.js} +4 -4
  314. package/dist/src/{quiverai-DR0SnIQV.js → quiverai-CdTWPe-A.js} +3 -3
  315. package/dist/src/{quiverai-CtWi6x_g.js → quiverai-Cv7rJKDz.js} +4 -4
  316. package/dist/src/registry-BUJrgjwv.js +124 -0
  317. package/dist/src/registry-DXm1t_x0.js +125 -0
  318. package/dist/src/registry-Dp5EqoXc.js +124 -0
  319. package/dist/src/registry-KCVF1CFC.cjs +124 -0
  320. package/dist/src/{server-D6Il2Sob.js → remoteGeneration-B1_XsKXU.js} +16 -108
  321. package/dist/src/{server-BSB45Nt9.js → remoteGeneration-COpWcmWd.js} +15 -146
  322. package/dist/src/{server-Dx2TyCH2.cjs → remoteGeneration-DS9N3pgB.cjs} +30 -119
  323. package/dist/src/remoteGeneration-DsaSwmG2.js +217 -0
  324. package/dist/src/render-BNTrbmBw.cjs +384 -0
  325. package/dist/src/render-CSP99NLm.js +348 -0
  326. package/dist/src/render-DFfDeYUK.js +347 -0
  327. package/dist/src/{render-CgVDrJmM.js → render-DznWrxGO.js} +2 -2
  328. package/dist/src/render-_6ur1fhE.js +347 -0
  329. package/dist/src/resourceAttributes-D1jP3kL5.js +17 -0
  330. package/dist/src/resourceAttributes-DQbBB--2.js +16 -0
  331. package/dist/src/resourceAttributes-ephgOvdR.cjs +27 -0
  332. package/dist/src/resourceAttributes-v6-I67fn.js +16 -0
  333. package/dist/src/{responses-Bi9vBuW_.cjs → responses-1UFFF9N_.cjs} +51 -16
  334. package/dist/src/{responses-DL9m8CyY.js → responses-B3W2JvOQ.js} +49 -15
  335. package/dist/src/{responses--OsX2aYW.js → responses-B6ktc3Ra.js} +49 -15
  336. package/dist/src/{responses-C-flexAY.js → responses-URRzV8qE.js} +49 -15
  337. package/dist/src/rolldown-runtime-D_mwlA32.cjs +43 -0
  338. package/dist/src/rubyUtils-BYVlQ94c.js +3 -0
  339. package/dist/src/{rubyUtils-DsGrTx8R.js → rubyUtils-CXlFM2rR.js} +3 -3
  340. package/dist/src/{rubyUtils-DVLeA2jg.js → rubyUtils-CnlW8AYb.js} +3 -3
  341. package/dist/src/{rubyUtils-B6eljPuh.cjs → rubyUtils-CqUWBZAt.cjs} +18 -27
  342. package/dist/src/{rubyUtils-CYSQEG4a.js → rubyUtils-DdGojpfv.js} +3 -3
  343. package/dist/src/runtimeTransform-BJOpL9Yc.js +142 -0
  344. package/dist/src/runtimeTransform-Dgh_D7DU.js +143 -0
  345. package/dist/src/runtimeTransform-DigbjU1r.js +142 -0
  346. package/dist/src/runtimeTransform-ON3YYILw.cjs +147 -0
  347. package/dist/src/{sagemaker-BVkaG2-l.js → sagemaker-CujrzP1a.js} +62 -51
  348. package/dist/src/{sagemaker-XnfhheQv.cjs → sagemaker-DzffAqo_.cjs} +65 -53
  349. package/dist/src/{sagemaker-D67yzMzs.js → sagemaker-vhtSV7JI.js} +62 -51
  350. package/dist/src/{sagemaker-BveBvuxm.js → sagemaker-yr1QKeBs.js} +61 -50
  351. package/dist/src/{scanner-1DqWi1Ej.js → scanner-DS0109SS.js} +7 -7
  352. package/dist/src/server/index.js +5105 -605
  353. package/dist/src/server-B8rqV126.cjs +126 -0
  354. package/dist/src/server-BaLytskk.js +3 -0
  355. package/dist/src/server-CMJD10J4.js +107 -0
  356. package/dist/src/server-Ddp8GNMp.js +146 -0
  357. package/dist/src/server-DhMHosWj.js +182 -0
  358. package/dist/src/shared-7pmVZLNO.js +1334 -0
  359. package/dist/src/shared-9WHQ1oNE.js +1335 -0
  360. package/dist/src/{fileExtensions-BArZuxsI.js → shared-BoG7qLMv.js} +12 -2
  361. package/dist/src/shared-D6IjElRI.js +1334 -0
  362. package/dist/src/shared-WkgnDkcg.cjs +1436 -0
  363. package/dist/src/{signal-CE5G3a7x.js → signal-CSurUUyV.js} +3 -3
  364. package/dist/src/simulatedUser-C9aQObBI.js +222 -0
  365. package/dist/src/simulatedUser-Cu601Dd4.cjs +227 -0
  366. package/dist/src/simulatedUser-U_qAHnuB.js +222 -0
  367. package/dist/src/simulatedUser-p3tACcmw.js +223 -0
  368. package/dist/src/{slack-DDUe-5MC.js → slack-Bapo-7_8.js} +2 -2
  369. package/dist/src/{slack-1Rhq0EoV.cjs → slack-DMC1QVEg.cjs} +3 -2
  370. package/dist/src/{slack-D5Wpy8LM.js → slack-DTEFhrMn.js} +2 -2
  371. package/dist/src/{slack-acRb0IqQ.js → slack-k-_CP84Q.js} +1 -1
  372. package/dist/src/storage-BU4qcnOb.js +875 -0
  373. package/dist/src/storage-CA-v9V2v.cjs +911 -0
  374. package/dist/src/storage-CD-GWAdx.js +822 -0
  375. package/dist/src/storage-QdU-SmvD.js +834 -0
  376. package/dist/src/{store-DAAyxcy6.cjs → store-B2NDDooM.cjs} +60 -24
  377. package/dist/src/{store-CYEy5J2D.js → store-DKd5592Q.js} +51 -20
  378. package/dist/src/{store-M0b1WfYb.js → store-HpopRVzl.js} +50 -19
  379. package/dist/src/store-IbiRIF3k.js +3 -0
  380. package/dist/src/strategies-7CS3Alao.cjs +2360 -0
  381. package/dist/src/strategies-CiSeroPH.js +2331 -0
  382. package/dist/src/strategies-DRJjGTIY.js +2333 -0
  383. package/dist/src/{tables-DQ4WU5tX.js → tables-CRSXQ2Ke.js} +2 -2
  384. package/dist/src/{tables-CsWou1Bx.js → tables-CxjU7bBd.js} +3 -3
  385. package/dist/src/{tables-DUfh1F7Z.cjs → tables-DBIJU0WE.cjs} +6 -5
  386. package/dist/src/{tables-C4CH3zRr.js → tables-DafUHOeh.js} +3 -3
  387. package/dist/src/{telemetry-CQPez_Jp.js → telemetry-00ezXr_t.js} +5 -4
  388. package/dist/src/telemetry-ByPqDcKC.js +3 -0
  389. package/dist/src/{telemetry-Dsw_faFj.cjs → telemetry-CJ7FnCsc.cjs} +18 -11
  390. package/dist/src/{telemetry-dbaJ0E98.js → telemetry-DmXYcJNV.js} +5 -4
  391. package/dist/src/{telemetry-Dvqxv3YC.js → telemetry-DwX9XUN5.js} +4 -3
  392. package/dist/src/{text-KvuD2Iko.js → text-Db-Wt2u2.js} +1 -1
  393. package/dist/src/{text-DHxdyQqT.js → text-DwYK5EBn.js} +1 -1
  394. package/dist/src/{text-BVi-cLPJ.cjs → text-nywWsRBM.cjs} +1 -1
  395. package/dist/src/{tokenUsageUtils-C-bmyHoE.js → tokenUsageUtils-BjVkdk18.js} +1 -1
  396. package/dist/src/{tokenUsageUtils-CXrvO-wA.js → tokenUsageUtils-CDet74yk.js} +1 -1
  397. package/dist/src/tokenUsageUtils-CmnQ0G2m.js +142 -0
  398. package/dist/src/{tokenUsageUtils-Bb7DkZPz.cjs → tokenUsageUtils-_B-P8IAi.cjs} +1 -1
  399. package/dist/src/toolAttributes-BAjwcBf0.cjs +103 -0
  400. package/dist/src/toolAttributes-COVgDrBG.js +87 -0
  401. package/dist/src/toolAttributes-DJ9ZEKXD.js +86 -0
  402. package/dist/src/tracingOptions-BnwKCkSB.js +221 -0
  403. package/dist/src/tracingOptions-Chi74lOD.js +219 -0
  404. package/dist/src/tracingOptions-DrbSFaKy.cjs +249 -0
  405. package/dist/src/tracingOptions-ji2OuXbT.js +220 -0
  406. package/dist/src/{transcription-DuWDupG7.js → transcription-B8uIgCYX.js} +5 -5
  407. package/dist/src/{transcription-CJspiD2c.js → transcription-CfU5loSq.js} +6 -6
  408. package/dist/src/{transcription-V2HaAmy2.js → transcription-Dkd22_4K.js} +6 -6
  409. package/dist/src/{transcription-BvjmiYB1.cjs → transcription-mzuf18Mq.cjs} +9 -8
  410. package/dist/src/{transform-lQrDE1BQ.js → transform-BIMynQsA.js} +9 -9
  411. package/dist/src/transform-BnSTnFlp.js +187 -0
  412. package/dist/src/transform-BnSXWmU_2.cjs +221 -0
  413. package/dist/src/transform-CGt7Kt3y2.js +186 -0
  414. package/dist/src/transform-CrPGTsij.js +186 -0
  415. package/dist/src/{transform-CTeuTR3S.cjs → transform-DhNkAUs8.cjs} +13 -12
  416. package/dist/src/{transform-CG0ehZNG.js → transform-DmvYBRll.js} +9 -9
  417. package/dist/src/{transform-zDhMmzwX.js → transform-EtD4jAWi.js} +9 -9
  418. package/dist/src/{transformersAvailability-CcHusyhw.js → transformersAvailability-0ThtPved.js} +1 -1
  419. package/dist/src/transformersAvailability-BYydDE5U.js +35 -0
  420. package/dist/src/{transformersAvailability-DLlROWhg.js → transformersAvailability-BvyU9vDD.js} +1 -1
  421. package/dist/src/{transformersAvailability-Cju9mHgR.cjs → transformersAvailability-BytPvKUW.cjs} +1 -1
  422. package/dist/src/{types-Dm9JM6Vb.js → types-BFevViUY.js} +115 -19
  423. package/dist/src/{types-Bgh5SOn6.js → types-BJQBBPTP.js} +115 -19
  424. package/dist/src/{types-CeaeaZdP.cjs → types-CxJvaY2S.cjs} +357 -172
  425. package/dist/src/{types-BGQDAP8i.js → types-D6glLbdF.js} +271 -170
  426. package/dist/src/{util-BYvQUPp7.js → util--WMgw7wM.js} +28 -8
  427. package/dist/src/{util-C9J8ahRn.js → util-5WnCSb0h.js} +72 -48
  428. package/dist/src/{util-CN3SrLT4.cjs → util-BSIuSLVK.cjs} +74 -49
  429. package/dist/src/{util-C8e5uydV.js → util-Bx677_k2.js} +154 -147
  430. package/dist/src/util-CN8om2rz.cjs +386 -0
  431. package/dist/src/{util-DDs-7g6-.js → util-CoQWM76y.js} +28 -8
  432. package/dist/src/util-DNl96nNs.js +327 -0
  433. package/dist/src/{util-DxWpWjhc.js → util-DURocbYR.js} +667 -507
  434. package/dist/src/util-Df8YMvS1.js +327 -0
  435. package/dist/src/{util-DvU2Pw8c.js → util-DiQ3QvBB.js} +28 -8
  436. package/dist/src/{util-oGMLA7vc.js → util-I-Rf-KaD.js} +862 -577
  437. package/dist/src/{util-olYL5C6N.cjs → util-IYzs5Y04.cjs} +33 -7
  438. package/dist/src/{util-D9TisOyk.js → util-LKTmNsMQ.js} +71 -47
  439. package/dist/src/{util-Bxn8emtE.cjs → util-SPsvFONY.cjs} +738 -582
  440. package/dist/src/{util-D3q0WQ-0.js → util-efByNxcr.js} +72 -48
  441. package/dist/src/util-kDURhgJW.js +328 -0
  442. package/dist/src/{utils-DJfvjyMj.js → utils-B0lzitHZ.js} +3 -3
  443. package/dist/src/{utils-BLJKfv0y.js → utils-BFOh20Gb.js} +3 -3
  444. package/dist/src/{utils-hXtCYanr.js → utils-BGY69tk_.js} +2 -2
  445. package/dist/src/{utils-B05gLxER.cjs → utils-Ve6kuJsa.cjs} +3 -3
  446. package/dist/src/version-BK20a4sw.js +16 -0
  447. package/dist/src/version-BWCSaByA.cjs +27 -0
  448. package/dist/src/version-eRkNuGv8.js +17 -0
  449. package/dist/src/version-lpHV_53E.js +16 -0
  450. package/dist/tsconfig.tsbuildinfo +1 -1
  451. package/package.json +56 -28
  452. package/dist/src/app/assets/Report-CQYFezYu.js +0 -1
  453. package/dist/src/app/assets/index-BXGkeMwh.css +0 -1
  454. package/dist/src/app/assets/index-BzJt18Jz.js +0 -385
  455. package/dist/src/app/assets/sync-IjzpWrOE.js +0 -4
  456. package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +0 -36
  457. package/dist/src/cache-Cr9oLMUa.js +0 -3
  458. package/dist/src/cache-DbLsVWB2.cjs +0 -3
  459. package/dist/src/cloud-Hphvo8kr.js +0 -3
  460. package/dist/src/codex-sdk-BAmYE7qy.js +0 -3
  461. package/dist/src/codex-sdk-CWEnH70W.cjs +0 -2
  462. package/dist/src/evalResult-D8MT9p0s.js +0 -3
  463. package/dist/src/evalResult-DElBuddX.js +0 -2
  464. package/dist/src/evalResult-Dvc-iucu.cjs +0 -2
  465. package/dist/src/evaluator-CVessDWe.js +0 -3
  466. package/dist/src/fetch-C7bGKDlQ.js +0 -3
  467. package/dist/src/graders-BOAzQEUe.cjs +0 -2
  468. package/dist/src/graders-D4BTsZdG2.js +0 -3
  469. package/dist/src/graders-DOJK1XpV.js +0 -2
  470. package/dist/src/graders-NAv9LcBn.js +0 -2
  471. package/dist/src/image-B5Mv-Z3h.js +0 -257
  472. package/dist/src/image-DVz2RiMF.js +0 -258
  473. package/dist/src/image-qUpPvmNZ.js +0 -257
  474. package/dist/src/image-x6KqLQl4.cjs +0 -280
  475. package/dist/src/providers-Bp4S-FvO.js +0 -2
  476. package/dist/src/providers-DV3ax9e_.cjs +0 -3
  477. package/dist/src/providers-u9Enmfok.js +0 -2
  478. package/dist/src/render-CH-62LbA.js +0 -135
  479. package/dist/src/render-CMEpfLaO.js +0 -136
  480. package/dist/src/render-DHIZ6_k8.js +0 -135
  481. package/dist/src/render-DfQSFxGE.cjs +0 -165
  482. package/dist/src/rubyUtils-D1L2d3jb.js +0 -3
  483. package/dist/src/rubyUtils-DUbq4tff.cjs +0 -2
  484. package/dist/src/server-BNYztJkh.js +0 -385
  485. package/dist/src/server-DCtHUqlp.js +0 -3
  486. package/dist/src/server-DaA2eR26.cjs +0 -2
  487. package/dist/src/store-CWOSz6D_.cjs +0 -2
  488. package/dist/src/store-DCDBhv7B.js +0 -3
  489. package/dist/src/store-Dn9HUkdW.js +0 -240
  490. package/dist/src/telemetry-C1IqxcdW.js +0 -3
  491. package/dist/src/telemetry-C4ZEa_es.cjs +0 -2
  492. package/dist/src/transform-Bbg6A8Jk.js +0 -216
  493. package/dist/src/transform-CUnzlsbn.cjs +0 -228
  494. package/dist/src/transform-DYX1_Xnh.js +0 -216
  495. package/dist/src/transform-DgKlRr73.cjs +0 -2
  496. package/dist/src/transform-M6ITAESf.js +0 -3
  497. package/dist/src/transform-UN5UGu8U.js +0 -213
@@ -0,0 +1,510 @@
1
+ import { S as getEnvBool, T as getEnvString, a as logger, k as state } from "./logger-Ct2S6Yx-.js";
2
+ import { t as invariant } from "./invariant-Ddh24eXh.js";
3
+ import { t as fetchWithProxy } from "./fetch-It34O8Ur.js";
4
+ import { a as isVideoFile, i as isJavascriptFile, n as isAudioFile, r as isImageFile } from "./fileExtensions-CXRfY3Ss.js";
5
+ import { r as importModule } from "./esm-BTK1W7lG.js";
6
+ import { i as extractVariablesFromTemplate, n as renderVarsInObject, o as getNunjucksEngine } from "./render-DFfDeYUK.js";
7
+ import { r as runPython } from "./pythonUtils-D0BYebvX.js";
8
+ import "./util-Bx677_k2.js";
9
+ import { t as telemetry } from "./telemetry-DwX9XUN5.js";
10
+ import { n as loadFromPackage, t as isPackagePath } from "./packageParser-CgE-ziRo.js";
11
+ import { o as transform } from "./transform-CGt7Kt3y2.js";
12
+ import * as fs$1 from "fs";
13
+ import * as path$1 from "path";
14
+ import yaml from "js-yaml";
15
+ //#region src/integrations/helicone.ts
16
+ const heliconeApiKey = getEnvString("HELICONE_API_KEY");
17
+ const buildFilter = (majorVersion, minorVersion) => {
18
+ const filter = {};
19
+ if (majorVersion === void 0 && minorVersion === void 0) return filter;
20
+ if (majorVersion !== void 0) filter.left = { prompts_versions: { major_version: { equals: majorVersion } } };
21
+ if (minorVersion === void 0) {
22
+ filter.operator = "and";
23
+ filter.right = "all";
24
+ } else {
25
+ if (!filter.left) {
26
+ filter.left = { prompts_versions: { minor_version: { equals: minorVersion } } };
27
+ filter.operator = "and";
28
+ filter.right = "all";
29
+ return filter;
30
+ }
31
+ filter.operator = "and";
32
+ filter.right = { prompts_versions: { minor_version: { equals: minorVersion } } };
33
+ }
34
+ return filter;
35
+ };
36
+ async function getPrompt$2(id, variables, majorVersion, minorVersion) {
37
+ const getHeliconePrompt = async (id, majorVersion, minorVersion, variables) => {
38
+ return await (await fetchWithProxy(`https://api.helicone.ai/v1/prompt/${id}/compile`, {
39
+ headers: {
40
+ Authorization: `Bearer ${heliconeApiKey}`,
41
+ "Content-Type": "application/json"
42
+ },
43
+ method: "POST",
44
+ body: JSON.stringify({
45
+ filter: buildFilter(majorVersion, minorVersion),
46
+ inputs: variables
47
+ })
48
+ })).json();
49
+ };
50
+ const heliconePrompt = await getHeliconePrompt(id, majorVersion, minorVersion, variables);
51
+ if (heliconePrompt.error) throw new Error(heliconePrompt.error);
52
+ return heliconePrompt.data?.prompt_compiled;
53
+ }
54
+ //#endregion
55
+ //#region src/integrations/langfuse.ts
56
+ const langfuseParams = {
57
+ publicKey: getEnvString("LANGFUSE_PUBLIC_KEY"),
58
+ secretKey: getEnvString("LANGFUSE_SECRET_KEY"),
59
+ baseUrl: getEnvString("LANGFUSE_HOST")
60
+ };
61
+ let langfuse;
62
+ async function getPrompt$1(id, vars, type, version, label) {
63
+ let prompt;
64
+ if (!langfuse) try {
65
+ const { Langfuse } = await import("langfuse");
66
+ langfuse = new Langfuse(langfuseParams);
67
+ } catch (_err) {
68
+ throw new Error("The langfuse package is required for Langfuse integration. Please install it with: npm install langfuse");
69
+ }
70
+ const options = label ? { label } : {};
71
+ try {
72
+ if (type === "text" || type === void 0) prompt = await langfuse.getPrompt(id, version, {
73
+ ...options,
74
+ type: "text"
75
+ });
76
+ else prompt = await langfuse.getPrompt(id, version, {
77
+ ...options,
78
+ type: "chat"
79
+ });
80
+ } catch (err) {
81
+ const error = err;
82
+ if (label) throw new Error(`Failed to fetch Langfuse prompt "${id}" with label "${label}": ${error.message || error}`);
83
+ else if (version === void 0) throw new Error(`Failed to fetch Langfuse prompt "${id}": ${error.message || error}`);
84
+ else throw new Error(`Failed to fetch Langfuse prompt "${id}" version ${version}: ${error.message || error}`);
85
+ }
86
+ const stringVars = {};
87
+ for (const [key, value] of Object.entries(vars)) stringVars[key] = typeof value === "string" ? value : JSON.stringify(value);
88
+ const compiledPrompt = prompt.compile(stringVars);
89
+ if (typeof compiledPrompt !== "string") return JSON.stringify(compiledPrompt);
90
+ return compiledPrompt;
91
+ }
92
+ //#endregion
93
+ //#region src/integrations/portkey.ts
94
+ async function getPrompt(id, variables) {
95
+ const apiKey = getEnvString("PORTKEY_API_KEY");
96
+ invariant(apiKey, "PORTKEY_API_KEY is required");
97
+ const response = await fetchWithProxy(`https://api.portkey.ai/v1/prompts/${id}/render`, {
98
+ method: "POST",
99
+ headers: {
100
+ "Content-Type": "application/json",
101
+ "x-portkey-api-key": apiKey
102
+ },
103
+ body: JSON.stringify({ variables })
104
+ });
105
+ if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
106
+ const result = await response.json();
107
+ if (!result.success) throw new Error(`Portkey error! ${JSON.stringify(result)}`);
108
+ return result.data;
109
+ }
110
+ //#endregion
111
+ //#region src/util/numeric.ts
112
+ /**
113
+ * Filters a record to only include finite numeric values, dropping strings,
114
+ * null, NaN, Infinity, arrays, objects, etc. Used to sanitize namedScores
115
+ * from untrusted sources (extension hooks) before metrics aggregation.
116
+ */
117
+ function filterFiniteScores(scores) {
118
+ const filtered = {};
119
+ for (const [key, value] of Object.entries(scores)) if (typeof value === "number" && Number.isFinite(value)) filtered[key] = value;
120
+ return filtered;
121
+ }
122
+ //#endregion
123
+ //#region src/evaluatorHelpers.ts
124
+ async function extractTextFromPDF(pdfPath) {
125
+ logger.debug(`Extracting text from PDF: ${pdfPath}`);
126
+ try {
127
+ const { PDFParse } = await import("pdf-parse");
128
+ const parser = new PDFParse({ data: fs$1.readFileSync(pdfPath) });
129
+ const result = await parser.getText();
130
+ await parser.destroy();
131
+ return result.text.trim();
132
+ } catch (error) {
133
+ if (error instanceof Error && error.message.includes("Cannot find module 'pdf-parse'")) throw new Error("pdf-parse is not installed. Please install it with: npm install pdf-parse");
134
+ throw new Error(`Failed to extract text from PDF ${pdfPath}: ${error instanceof Error ? error.message : String(error)}`);
135
+ }
136
+ }
137
+ function resolveVariables(variables, skipResolveVars, varsResolvedFromSkipped) {
138
+ let resolved;
139
+ const regex = /\{\{\s*(\w+)\s*\}\}/;
140
+ let iterations = 0;
141
+ do {
142
+ resolved = true;
143
+ for (const key of Object.keys(variables)) {
144
+ if (skipResolveVars?.includes(key) || varsResolvedFromSkipped?.has(key) || typeof variables[key] !== "string") continue;
145
+ const value = variables[key];
146
+ const match = regex.exec(value);
147
+ if (match) {
148
+ const [placeholder, varName] = match;
149
+ if (variables[varName] === void 0) {} else {
150
+ variables[key] = value.replace(placeholder, variables[varName]);
151
+ if (skipResolveVars?.includes(varName) || varsResolvedFromSkipped?.has(varName)) varsResolvedFromSkipped?.add(key);
152
+ resolved = false;
153
+ }
154
+ }
155
+ }
156
+ iterations++;
157
+ } while (!resolved && iterations < 5);
158
+ return variables;
159
+ }
160
+ function autoWrapRawIfPartialNunjucks(prompt) {
161
+ const hasPartialTag = /({%[^%]*$|{{[^}]*$|{#[^#]*$)/m.test(prompt);
162
+ const alreadyWrapped = /{\%\s*raw\s*\%}/.test(prompt) && /{\%\s*endraw\s*\%}/.test(prompt);
163
+ if (hasPartialTag && !alreadyWrapped) return `{% raw %}${prompt}{% endraw %}`;
164
+ return prompt;
165
+ }
166
+ function referencesUndefinedVariables(template, vars) {
167
+ return extractVariablesFromTemplate(template).some((variableName) => {
168
+ const rootVariableName = /^([A-Za-z_]\w*)/.exec(variableName)?.[1];
169
+ return Boolean(rootVariableName && rootVariableName !== "env" && vars[rootVariableName] === void 0);
170
+ });
171
+ }
172
+ /**
173
+ * Collects metadata about file variables in the vars object.
174
+ * @param vars The variables object containing potential file references
175
+ * @returns An object mapping variable names to their file metadata
176
+ */
177
+ function collectFileMetadata(vars) {
178
+ const fileMetadata = {};
179
+ for (const [varName, value] of Object.entries(vars)) if (typeof value === "string" && value.startsWith("file://")) {
180
+ const filePath = path$1.resolve(state.basePath || "", value.slice(7));
181
+ const fileExtension = filePath.split(".").pop() || "";
182
+ if (isImageFile(filePath)) fileMetadata[varName] = {
183
+ path: value,
184
+ type: "image",
185
+ format: fileExtension
186
+ };
187
+ else if (isVideoFile(filePath)) fileMetadata[varName] = {
188
+ path: value,
189
+ type: "video",
190
+ format: fileExtension
191
+ };
192
+ else if (isAudioFile(filePath)) fileMetadata[varName] = {
193
+ path: value,
194
+ type: "audio",
195
+ format: fileExtension
196
+ };
197
+ }
198
+ return fileMetadata;
199
+ }
200
+ /**
201
+ * Gets MIME type from file extension
202
+ *
203
+ * Supported formats:
204
+ * - JPEG/JPG (image/jpeg)
205
+ * - PNG (image/png)
206
+ * - GIF (image/gif)
207
+ * - WebP (image/webp)
208
+ * - BMP (image/bmp)
209
+ * - SVG (image/svg+xml)
210
+ * - TIFF (image/tiff)
211
+ * - ICO (image/x-icon)
212
+ * - AVIF (image/avif)
213
+ * - HEIC/HEIF (image/heic)
214
+ *
215
+ * @param extension File extension (with or without dot)
216
+ * @returns MIME type string (defaults to image/jpeg for unknown formats)
217
+ */
218
+ function getMimeTypeFromExtension(extension) {
219
+ return {
220
+ jpg: "image/jpeg",
221
+ jpeg: "image/jpeg",
222
+ png: "image/png",
223
+ gif: "image/gif",
224
+ bmp: "image/bmp",
225
+ webp: "image/webp",
226
+ svg: "image/svg+xml",
227
+ tif: "image/tiff",
228
+ tiff: "image/tiff",
229
+ ico: "image/x-icon",
230
+ avif: "image/avif",
231
+ heic: "image/heic",
232
+ heif: "image/heif"
233
+ }[extension.toLowerCase().replace(/^\./, "")] || "image/jpeg";
234
+ }
235
+ /**
236
+ * Detects MIME type from base64 magic numbers for additional accuracy
237
+ *
238
+ * Magic numbers (base64-encoded file signatures):
239
+ * - JPEG: /9j/ (0xFFD8FF)
240
+ * - PNG: iVBORw0KGgo (0x89504E47)
241
+ * - GIF: R0lGODlh or R0lGODdh (GIF87a/GIF89a)
242
+ * - WebP: UklGR (RIFF)
243
+ * - BMP: Qk0 or Qk1 (BM)
244
+ * - TIFF: SUkq or TU0A (II* or MM*)
245
+ * - ICO: AAABAA (0x00000100)
246
+ *
247
+ * @param base64Data Base64 encoded image data
248
+ * @returns MIME type string or null if format cannot be detected
249
+ */
250
+ function detectMimeFromBase64(base64Data) {
251
+ if (base64Data.startsWith("/9j/")) return "image/jpeg";
252
+ else if (base64Data.startsWith("iVBORw0KGgo")) return "image/png";
253
+ else if (base64Data.startsWith("R0lGODlh") || base64Data.startsWith("R0lGODdh")) return "image/gif";
254
+ else if (base64Data.startsWith("UklGR")) return "image/webp";
255
+ else if (base64Data.startsWith("Qk0") || base64Data.startsWith("Qk1")) return "image/bmp";
256
+ else if (base64Data.startsWith("SUkq") || base64Data.startsWith("TU0A")) return "image/tiff";
257
+ else if (base64Data.startsWith("AAABAA")) return "image/x-icon";
258
+ return null;
259
+ }
260
+ /**
261
+ * Renders a prompt template with variable substitution using Nunjucks.
262
+ *
263
+ * @param prompt - The prompt template to render
264
+ * @param vars - Variables to substitute into the template
265
+ * @param nunjucksFilters - Optional custom Nunjucks filters
266
+ * @param provider - Optional API provider for context
267
+ * @param skipRenderVars - Optional array of variable names to skip special loading and template
268
+ * rendering for. This is critical for red team testing where injection
269
+ * variables contain attack payloads (e.g., SSTI, XSS) that should NOT be
270
+ * evaluated by Promptfoo before reaching the target.
271
+ * @returns The rendered prompt string
272
+ */
273
+ async function renderPrompt(prompt, vars, nunjucksFilters, provider, skipRenderVars) {
274
+ const nunjucks = getNunjucksEngine(nunjucksFilters);
275
+ let basePrompt = prompt.raw;
276
+ for (const [varName, value] of Object.entries(vars)) {
277
+ if (skipRenderVars?.includes(varName)) continue;
278
+ if (typeof value === "string" && value.startsWith("file://")) {
279
+ const basePath = state.basePath || "";
280
+ const filePath = path$1.resolve(process.cwd(), basePath, value.slice(7));
281
+ const fileExtension = filePath.split(".").pop();
282
+ logger.debug(`Loading var ${varName} from file: ${filePath}`);
283
+ if (isJavascriptFile(filePath)) {
284
+ const javascriptOutput = await (await importModule(filePath))(varName, basePrompt, vars, provider);
285
+ if (javascriptOutput.error) throw new Error(`Error running ${filePath}: ${javascriptOutput.error}`);
286
+ if (!javascriptOutput.output) throw new Error(`Expected ${filePath} to return { output: string } but got ${javascriptOutput}`);
287
+ vars[varName] = javascriptOutput.output;
288
+ } else if (fileExtension === "py") {
289
+ const pythonScriptOutput = await runPython(filePath, "get_var", [
290
+ varName,
291
+ basePrompt,
292
+ vars
293
+ ]);
294
+ if (pythonScriptOutput.error) throw new Error(`Error running Python script ${filePath}: ${pythonScriptOutput.error}`);
295
+ if (!pythonScriptOutput.output) throw new Error(`Python script ${filePath} did not return any output`);
296
+ invariant(typeof pythonScriptOutput.output === "string", `pythonScriptOutput.output must be a string. Received: ${typeof pythonScriptOutput.output}`);
297
+ vars[varName] = pythonScriptOutput.output.trim();
298
+ } else if (fileExtension === "yaml" || fileExtension === "yml") vars[varName] = JSON.stringify(yaml.load(fs$1.readFileSync(filePath, "utf8")));
299
+ else if (fileExtension === "pdf" && !getEnvBool("PROMPTFOO_DISABLE_PDF_AS_TEXT")) {
300
+ telemetry.record("feature_used", { feature: "extract_text_from_pdf" });
301
+ vars[varName] = await extractTextFromPDF(filePath);
302
+ } else if ((isImageFile(filePath) || isVideoFile(filePath) || isAudioFile(filePath)) && !getEnvBool("PROMPTFOO_DISABLE_MULTIMEDIA_AS_BASE64")) {
303
+ const fileType = isImageFile(filePath) ? "image" : isVideoFile(filePath) ? "video" : "audio";
304
+ telemetry.record("feature_used", { feature: `load_${fileType}_as_base64` });
305
+ logger.debug(`Loading ${fileType} as base64: ${filePath}`);
306
+ try {
307
+ const base64Data = fs$1.readFileSync(filePath).toString("base64");
308
+ if (fileType === "image") {
309
+ let mimeType = getMimeTypeFromExtension(path$1.extname(filePath));
310
+ const extensionWasUnknown = !path$1.extname(filePath) || mimeType === "image/jpeg";
311
+ const detectedType = detectMimeFromBase64(base64Data);
312
+ if (detectedType) {
313
+ if (detectedType !== mimeType) {
314
+ logger.debug(`Magic number detection overriding extension-based MIME type: ${detectedType} (was ${mimeType}) for ${filePath}`);
315
+ mimeType = detectedType;
316
+ }
317
+ } else if (extensionWasUnknown) logger.warn(`Could not detect image format for ${filePath}, defaulting to image/jpeg. Supported formats: JPEG, PNG, GIF, WebP, BMP, TIFF, ICO, AVIF, HEIC, SVG`);
318
+ vars[varName] = `data:${mimeType};base64,${base64Data}`;
319
+ } else vars[varName] = base64Data;
320
+ } catch (error) {
321
+ throw new Error(`Failed to load ${fileType} ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
322
+ }
323
+ } else vars[varName] = fs$1.readFileSync(filePath, "utf8").trim();
324
+ } else if (isPackagePath(value)) {
325
+ const requiredModule = await loadFromPackage(value, state.basePath || "");
326
+ if (typeof requiredModule !== "function") throw new Error(`Variable source malformed: ${value} must export a function. Received: ${typeof requiredModule}`);
327
+ const javascriptOutput = await requiredModule(varName, basePrompt, vars, provider);
328
+ if (javascriptOutput.error) throw new Error(`Error running ${value}: ${javascriptOutput.error}`);
329
+ if (!javascriptOutput.output) throw new Error(`Expected ${value} to return { output: string } but got ${javascriptOutput}`);
330
+ vars[varName] = javascriptOutput.output;
331
+ }
332
+ }
333
+ if (prompt.function) {
334
+ const result = await prompt.function({
335
+ vars,
336
+ provider
337
+ });
338
+ if (typeof result === "string") basePrompt = result;
339
+ else if (typeof result === "object") if ("prompt" in result) {
340
+ basePrompt = typeof result.prompt === "string" ? result.prompt : JSON.stringify(result.prompt);
341
+ if (result.config) prompt.config = {
342
+ ...prompt.config || {},
343
+ ...result.config
344
+ };
345
+ } else basePrompt = JSON.stringify(result);
346
+ else throw new Error(`Prompt function must return a string or object, got ${typeof result}`);
347
+ }
348
+ for (const key of Object.keys(vars)) if (typeof vars[key] === "string" && !skipRenderVars?.includes(key)) vars[key] = vars[key].replace(/\n$/, "");
349
+ const varsResolvedFromSkipped = /* @__PURE__ */ new Set();
350
+ resolveVariables(vars, skipRenderVars, varsResolvedFromSkipped);
351
+ if (prompt.raw.startsWith("portkey://")) {
352
+ const portKeyResult = await getPrompt(prompt.raw.slice(10), vars);
353
+ return JSON.stringify(portKeyResult.messages);
354
+ } else if (prompt.raw.startsWith("langfuse://")) {
355
+ const langfusePrompt = prompt.raw.slice(11);
356
+ let helper;
357
+ let version;
358
+ let label;
359
+ let promptType = "text";
360
+ const labelMatch = langfusePrompt.match(/^(.+)@([^:@]+)(?::(.+))?$/);
361
+ const versionMatch = langfusePrompt.match(/^([^:]+):([^:]+)(?::(.+))?$/);
362
+ if (labelMatch) {
363
+ helper = labelMatch[1];
364
+ label = labelMatch[2];
365
+ if (labelMatch[3]) promptType = labelMatch[3];
366
+ } else if (versionMatch) {
367
+ helper = versionMatch[1];
368
+ const versionOrLabel = versionMatch[2];
369
+ if (/^\d+$/.test(versionOrLabel)) version = versionOrLabel;
370
+ else {
371
+ label = versionOrLabel;
372
+ if (label === "latest") version = void 0;
373
+ }
374
+ if (versionMatch[3]) promptType = versionMatch[3];
375
+ } else helper = langfusePrompt;
376
+ if (promptType !== "text" && promptType !== "chat") throw new Error(`Invalid Langfuse prompt type: ${promptType}. Must be 'text' or 'chat'.`);
377
+ return await getPrompt$1(helper, vars, promptType, version === void 0 || version === "latest" ? void 0 : Number(version), label);
378
+ } else if (prompt.raw.startsWith("helicone://")) {
379
+ const [id, version] = prompt.raw.slice(11).split(":");
380
+ const [majorVersion, minorVersion] = version ? version.split(".") : [void 0, void 0];
381
+ return await getPrompt$2(id, vars, majorVersion === void 0 ? void 0 : Number(majorVersion), minorVersion === void 0 ? void 0 : Number(minorVersion));
382
+ }
383
+ try {
384
+ if (getEnvBool("PROMPTFOO_DISABLE_JSON_AUTOESCAPE")) {
385
+ basePrompt = autoWrapRawIfPartialNunjucks(basePrompt);
386
+ return nunjucks.renderString(basePrompt, vars);
387
+ }
388
+ const parsed = JSON.parse(basePrompt);
389
+ return JSON.stringify(renderVarsInObject(parsed, vars), null, 2);
390
+ } catch {
391
+ const renderedVars = Object.fromEntries(Object.entries(vars).map(([key, value]) => {
392
+ if (typeof value !== "string" || skipRenderVars?.includes(key) || varsResolvedFromSkipped.has(key)) return [key, value];
393
+ if (referencesUndefinedVariables(value, vars)) return [key, value];
394
+ return [key, nunjucks.renderString(autoWrapRawIfPartialNunjucks(value), vars)];
395
+ }));
396
+ basePrompt = autoWrapRawIfPartialNunjucks(basePrompt);
397
+ return nunjucks.renderString(basePrompt, renderedVars);
398
+ }
399
+ }
400
+ /**
401
+ * Runs extension hooks for the given hook name and context. The hook will be called with the context object,
402
+ * and can update the context object to persist data into provider calls.
403
+ * @param extensions - An array of extension paths, or null.
404
+ * @param hookName - The name of the hook to run.
405
+ * @param context - The context object to pass to the hook. T depends on the type of the hook.
406
+ * @returns A Promise that resolves with one of the following:
407
+ * - The original context object, if no extensions are provided OR if the returned context is not valid.
408
+ * - The updated context object, if the extension hook returns a valid context object. The updated context,
409
+ * if defined, must conform to the type T; otherwise, a validation error is thrown.
410
+ */
411
+ /**
412
+ * Valid hook names that can be used to filter which hooks an extension runs for.
413
+ * If an extension specifies one of these as its function name (e.g., file://path:beforeAll),
414
+ * it will only run for that specific hook and use the NEW calling convention: (context, { hookName }).
415
+ * If an extension specifies a custom function name (e.g., file://path:myHandler),
416
+ * it will run for ALL hooks and use the LEGACY calling convention: (hookName, context).
417
+ */
418
+ const EXTENSION_HOOK_NAMES = new Set([
419
+ "beforeAll",
420
+ "beforeEach",
421
+ "afterEach",
422
+ "afterAll"
423
+ ]);
424
+ /**
425
+ * Extracts the hook name from an extension path.
426
+ * Format: file://path/to/file.js:hookName or file://path/to/file.py:hook_name
427
+ * @returns The hook name or undefined if not specified
428
+ */
429
+ function getExtensionHookName(extension) {
430
+ if (!extension.startsWith("file://")) return;
431
+ const lastColonIndex = extension.lastIndexOf(":");
432
+ if (lastColonIndex > 8) return extension.slice(lastColonIndex + 1) || void 0;
433
+ }
434
+ async function runExtensionHook(extensions, hookName, context) {
435
+ if (!extensions || !Array.isArray(extensions) || extensions.length === 0) return context;
436
+ telemetry.record("feature_used", { feature: "extension_hook" });
437
+ logger.debug(`Running ${hookName} hook with ${extensions.length} extension(s)`);
438
+ let updatedContext = { ...context };
439
+ for (const extension of extensions) {
440
+ invariant(typeof extension === "string", "extension must be a string");
441
+ const extensionHookName = getExtensionHookName(extension);
442
+ if (extensionHookName && EXTENSION_HOOK_NAMES.has(extensionHookName) && extensionHookName !== hookName) {
443
+ logger.debug(`Skipping extension ${extension} for hook ${hookName} (extension targets ${extensionHookName} only)`);
444
+ continue;
445
+ }
446
+ const useNewCallingConvention = extensionHookName && EXTENSION_HOOK_NAMES.has(extensionHookName);
447
+ logger.debug(`Running extension ${extension} for hook ${hookName} (${useNewCallingConvention ? "new" : "legacy"} convention)`);
448
+ let extensionReturnValue;
449
+ try {
450
+ if (useNewCallingConvention) extensionReturnValue = await transform(extension, updatedContext, { hookName }, false);
451
+ else extensionReturnValue = await transform(extension, hookName, updatedContext, false);
452
+ } catch (error) {
453
+ const errorMessage = error instanceof Error ? error.message : String(error);
454
+ const wrappedError = /* @__PURE__ */ new Error(`Extension hook "${hookName}" failed for ${extension}: ${errorMessage}`);
455
+ wrappedError.cause = error;
456
+ throw wrappedError;
457
+ }
458
+ if (extensionReturnValue) switch (hookName) {
459
+ case "beforeAll":
460
+ updatedContext = { suite: {
461
+ ...updatedContext.suite,
462
+ prompts: extensionReturnValue.suite.prompts,
463
+ providerPromptMap: extensionReturnValue.suite.providerPromptMap,
464
+ tests: extensionReturnValue.suite.tests,
465
+ scenarios: extensionReturnValue.suite.scenarios,
466
+ defaultTest: extensionReturnValue.suite.defaultTest,
467
+ nunjucksFilters: extensionReturnValue.suite.nunjucksFilters,
468
+ derivedMetrics: extensionReturnValue.suite.derivedMetrics,
469
+ redteam: extensionReturnValue.suite.redteam
470
+ } };
471
+ break;
472
+ case "beforeEach":
473
+ updatedContext = { test: extensionReturnValue.test };
474
+ break;
475
+ case "afterEach":
476
+ if (extensionReturnValue.result) {
477
+ const currentResult = updatedContext.result;
478
+ const mergedResponse = currentResult.response && extensionReturnValue.result.response?.metadata ? {
479
+ ...currentResult.response,
480
+ metadata: {
481
+ ...currentResult.response.metadata,
482
+ ...extensionReturnValue.result.response.metadata
483
+ }
484
+ } : currentResult.response;
485
+ const validScores = filterFiniteScores(extensionReturnValue.result.namedScores || {});
486
+ updatedContext = {
487
+ test: updatedContext.test,
488
+ result: {
489
+ ...currentResult,
490
+ namedScores: {
491
+ ...currentResult.namedScores,
492
+ ...validScores
493
+ },
494
+ metadata: {
495
+ ...currentResult.metadata,
496
+ ...extensionReturnValue.result.metadata || {}
497
+ },
498
+ response: mergedResponse
499
+ }
500
+ };
501
+ }
502
+ break;
503
+ }
504
+ }
505
+ return updatedContext;
506
+ }
507
+ //#endregion
508
+ export { filterFiniteScores as i, renderPrompt as n, runExtensionHook as r, collectFileMetadata as t };
509
+
510
+ //# sourceMappingURL=evaluatorHelpers-DuqFFfq7.js.map
@@ -1,7 +1,7 @@
1
- import { S as getEnvBool, a as logger } from "./logger-B88EkIn6.js";
2
- import { o as cloudConfig } from "./fetch-B0Z3Oe4k.js";
3
- import { c as isLoggedIntoCloud } from "./accounts-DdJ2pHMI.js";
4
- import { i as storeBlob, r as recordBlobReference } from "./blobs-BCZavS8s.js";
1
+ import { S as getEnvBool, a as logger } from "./logger-KD8JjCRJ.js";
2
+ import { l as cloudConfig } from "./fetch-BufrQtvR.js";
3
+ import { c as isLoggedIntoCloud } from "./accounts-DanM1wq_.js";
4
+ import { i as storeBlob, r as recordBlobReference } from "./blobs-CeFdPn_T.js";
5
5
  //#region src/blobs/remoteUpload.ts
6
6
  function buildRemoteUrl() {
7
7
  const baseUrl = cloudConfig.getApiHost();
@@ -25,7 +25,7 @@ async function uploadBlobRemote(buffer, mimeType, context) {
25
25
  const apiKey = cloudConfig.getApiKey();
26
26
  if (!url || !apiKey) return null;
27
27
  try {
28
- const { fetchWithProxy } = await import("./fetch-B0Z3Oe4k.js").then((n) => n.i);
28
+ const { fetchWithProxy } = await import("./fetch-BufrQtvR.js").then((n) => n.i);
29
29
  const response = await fetchWithProxy(url, {
30
30
  method: "POST",
31
31
  headers: {
@@ -371,4 +371,4 @@ async function recordExistingBlobReferences(value, context, location) {
371
371
  //#endregion
372
372
  export { isBlobStorageEnabled as n, shouldAttemptRemoteBlobUpload as r, extractAndStoreBinaryData as t };
373
373
 
374
- //# sourceMappingURL=extractor-CAfTSraf.js.map
374
+ //# sourceMappingURL=extractor-BR7XAzAL.js.map
@@ -1,7 +1,7 @@
1
- const require_logger = require("./logger-COuQb2xB.cjs");
2
- const require_fetch = require("./fetch-CJU5ELPa.cjs");
3
- const require_accounts = require("./accounts-Dy17bs4D.cjs");
4
- const require_blobs = require("./blobs-D2FAd1Q5.cjs");
1
+ const require_logger = require("./logger-cfNpzI4o.cjs");
2
+ const require_fetch = require("./fetch-Dw4XZHjj.cjs");
3
+ const require_accounts = require("./accounts-CmWzeD2d.cjs");
4
+ const require_blobs = require("./blobs-B0977K1O.cjs");
5
5
  //#region src/blobs/remoteUpload.ts
6
6
  function buildRemoteUrl() {
7
7
  const baseUrl = require_fetch.cloudConfig.getApiHost();
@@ -25,7 +25,7 @@ async function uploadBlobRemote(buffer, mimeType, context) {
25
25
  const apiKey = require_fetch.cloudConfig.getApiKey();
26
26
  if (!url || !apiKey) return null;
27
27
  try {
28
- const { fetchWithProxy } = await Promise.resolve().then(() => require("./fetch-CJU5ELPa.cjs")).then((n) => n.fetch_exports);
28
+ const { fetchWithProxy } = await Promise.resolve().then(() => require("./fetch-Dw4XZHjj.cjs")).then((n) => n.fetch_exports);
29
29
  const response = await fetchWithProxy(url, {
30
30
  method: "POST",
31
31
  headers: {
@@ -388,4 +388,4 @@ Object.defineProperty(exports, "shouldAttemptRemoteBlobUpload", {
388
388
  }
389
389
  });
390
390
 
391
- //# sourceMappingURL=extractor-WVPOrH43.cjs.map
391
+ //# sourceMappingURL=extractor-BdxEtt3J.cjs.map
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { T as getEnvBool, s as logger } from "./logger-DksKw1Qc.js";
3
- import { c as isLoggedIntoCloud } from "./accounts-F9d_5sMC.js";
4
- import { a as cloudConfig } from "./cloud-DQZ5sVjW.js";
5
- import { i as storeBlob, r as recordBlobReference } from "./blobs-BQWqnnvL.js";
2
+ import { T as getEnvBool, s as logger } from "./logger-BbY6ypFL.js";
3
+ import { c as isLoggedIntoCloud } from "./accounts-CjFnOPmb.js";
4
+ import { a as cloudConfig } from "./cloud-D3DiFqH6.js";
5
+ import { i as storeBlob, r as recordBlobReference } from "./blobs-DODuTK-a.js";
6
6
  //#region src/blobs/remoteUpload.ts
7
7
  function buildRemoteUrl() {
8
8
  const baseUrl = cloudConfig.getApiHost();
@@ -26,7 +26,7 @@ async function uploadBlobRemote(buffer, mimeType, context) {
26
26
  const apiKey = cloudConfig.getApiKey();
27
27
  if (!url || !apiKey) return null;
28
28
  try {
29
- const { fetchWithProxy } = await import("./fetch-C7bGKDlQ.js");
29
+ const { fetchWithProxy } = await import("./fetch-_YgGd2qv.js");
30
30
  const response = await fetchWithProxy(url, {
31
31
  method: "POST",
32
32
  headers: {
@@ -372,4 +372,4 @@ async function recordExistingBlobReferences(value, context, location) {
372
372
  //#endregion
373
373
  export { isBlobStorageEnabled as n, shouldAttemptRemoteBlobUpload as r, extractAndStoreBinaryData as t };
374
374
 
375
- //# sourceMappingURL=extractor-DNSeBVOJ.js.map
375
+ //# sourceMappingURL=extractor-CIW3iN-b.js.map
@@ -1,7 +1,7 @@
1
1
  import { S as getEnvBool, a as logger } from "./logger-Ct2S6Yx-.js";
2
- import { o as cloudConfig } from "./fetch-Di00EQrc.js";
3
- import { o as isLoggedIntoCloud } from "./accounts-DhMYUUbu.js";
4
- import { n as recordBlobReference, r as storeBlob } from "./blobs-C-F78Kfn.js";
2
+ import { T as cloudConfig } from "./fetch-It34O8Ur.js";
3
+ import { o as isLoggedIntoCloud } from "./accounts-Ca7WIoPY.js";
4
+ import { n as recordBlobReference, r as storeBlob } from "./blobs-Dwef1Ao1.js";
5
5
  //#region src/blobs/remoteUpload.ts
6
6
  function buildRemoteUrl() {
7
7
  const baseUrl = cloudConfig.getApiHost();
@@ -25,7 +25,7 @@ async function uploadBlobRemote(buffer, mimeType, context) {
25
25
  const apiKey = cloudConfig.getApiKey();
26
26
  if (!url || !apiKey) return null;
27
27
  try {
28
- const { fetchWithProxy } = await import("./fetch-Di00EQrc.js").then((n) => n.i);
28
+ const { fetchWithProxy } = await import("./fetch-It34O8Ur.js").then((n) => n.i);
29
29
  const response = await fetchWithProxy(url, {
30
30
  method: "POST",
31
31
  headers: {
@@ -371,4 +371,4 @@ async function recordExistingBlobReferences(value, context, location) {
371
371
  //#endregion
372
372
  export { isBlobStorageEnabled as n, shouldAttemptRemoteBlobUpload as r, extractAndStoreBinaryData as t };
373
373
 
374
- //# sourceMappingURL=extractor-Dk6bRWkv.js.map
374
+ //# sourceMappingURL=extractor-CxRtnaHl.js.map