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
@@ -1,6 +1,6 @@
1
1
  import { T as getEnvString, a as logger, k as state, t as getLogLevel } from "./logger-Ct2S6Yx-.js";
2
- import { r as importModule } from "./esm-C7PnfdF8.js";
3
- import { i as initializeAgenticCache, n as generateCacheKey, r as getCachedResponse, t as cacheResponse } from "./agentic-utils-P172hM8B.js";
2
+ import { r as importModule } from "./esm-BTK1W7lG.js";
3
+ import { i as initializeAgenticCache, n as generateCacheKey, r as getCachedResponse, t as cacheResponse } from "./agentic-utils-TxUEMPYS.js";
4
4
  import { createRequire } from "node:module";
5
5
  import fs from "fs";
6
6
  import path from "path";
@@ -57,6 +57,38 @@ function getSessionPath(sessionId) {
57
57
  sessionID: sessionId
58
58
  };
59
59
  }
60
+ /**
61
+ * Convert the user-facing object-shaped permission config into the
62
+ * rule-array shape required by the v2 `session.create.permission` API.
63
+ *
64
+ * - `{ bash: 'allow' }` → `[{ permission: 'bash', pattern: '*', action: 'allow' }]`
65
+ * - `{ bash: { 'git *': 'allow', '*': 'ask' } }` → two rules with the
66
+ * corresponding glob pattern preserved per entry.
67
+ *
68
+ * Returns `undefined` when the config has no usable entries so callers can
69
+ * omit the field entirely.
70
+ */
71
+ function convertPermissionConfigToRuleset(config) {
72
+ if (!config) return;
73
+ const rules = [];
74
+ for (const [tool, value] of Object.entries(config)) {
75
+ if (value === void 0) continue;
76
+ if (typeof value === "string") {
77
+ rules.push({
78
+ permission: tool,
79
+ pattern: "*",
80
+ action: value
81
+ });
82
+ continue;
83
+ }
84
+ if (value && typeof value === "object") for (const [pattern, action] of Object.entries(value)) rules.push({
85
+ permission: tool,
86
+ pattern,
87
+ action
88
+ });
89
+ }
90
+ return rules.length > 0 ? rules : void 0;
91
+ }
60
92
  function tryParseJson(value) {
61
93
  try {
62
94
  return JSON.stringify(JSON.parse(value));
@@ -432,7 +464,10 @@ var OpenCodeSDKProvider = class {
432
464
  buildCreateSessionParameters(config, sessionQuery) {
433
465
  if (!this.opencodeModule) throw new Error("OpenCode SDK module is not loaded");
434
466
  const createBody = { title: `promptfoo-${Date.now()}` };
435
- if (config.permission && this.opencodeModule.apiVersion === "v2") createBody.permission = config.permission;
467
+ if (config.permission && this.opencodeModule.apiVersion === "v2") {
468
+ const ruleset = convertPermissionConfigToRuleset(config.permission);
469
+ if (ruleset) createBody.permission = ruleset;
470
+ }
436
471
  if (this.opencodeModule.apiVersion === "v2") return {
437
472
  ...sessionQuery,
438
473
  ...createBody
@@ -555,4 +590,4 @@ var OpenCodeSDKProvider = class {
555
590
  //#endregion
556
591
  export { OpenCodeSDKProvider };
557
592
 
558
- //# sourceMappingURL=opencode-sdk-GI2KaAXq.js.map
593
+ //# sourceMappingURL=opencode-sdk-sRKYHGoI.js.map
@@ -1,8 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import { s as logger } from "./logger-DksKw1Qc.js";
3
- import { t as getDirectory } from "./esm-tVgYPY-f.js";
4
- import { n as getTraceStore } from "./store-CYEy5J2D.js";
2
+ import { s as logger } from "./logger-BbY6ypFL.js";
3
+ import { t as getDirectory } from "./esm-Bexx2PFc.js";
4
+ import { n as getTraceStore } from "./store-DKd5592Q.js";
5
+ import { n as PROMPTFOO_RESOURCE_ATTR_TRACE_ID, t as PROMPTFOO_RESOURCE_ATTR_PARENT_SPAN_ID } from "./resourceAttributes-D1jP3kL5.js";
5
6
  import path from "path";
7
+ import crypto from "node:crypto";
6
8
  import express from "express";
7
9
  import protobuf from "protobufjs";
8
10
  //#region src/tracing/protobuf.ts
@@ -83,6 +85,33 @@ async function decodeExportTraceServiceRequest(data) {
83
85
  }
84
86
  //#endregion
85
87
  //#region src/tracing/otlpReceiver.ts
88
+ const LOG_EVENT_NAME_DENYLIST = new Set(["claude_code.tracing"]);
89
+ const LOG_SPAN_DURATION_MS = 1;
90
+ const MAX_BODY_AS_NAME_LENGTH = 128;
91
+ const SEVERITY_NUMBER_ERROR = 17;
92
+ const MAX_LOG_BODY_ATTR_LENGTH = 8192;
93
+ function truncateLogBody(value) {
94
+ if (typeof value !== "string") return value;
95
+ if (value.length <= MAX_LOG_BODY_ATTR_LENGTH) return value;
96
+ return `${value.slice(0, MAX_LOG_BODY_ATTR_LENGTH - 15)}... [truncated]`;
97
+ }
98
+ const BASE64_ZERO_SPAN_ID = /^A{11,12}=?$/;
99
+ function isZeroSpanId(id) {
100
+ return /^0+$/.test(id) || BASE64_ZERO_SPAN_ID.test(id);
101
+ }
102
+ function randomSpanId() {
103
+ return crypto.randomBytes(8).toString("hex");
104
+ }
105
+ function getStringAttribute(attributes, key) {
106
+ const value = attributes[key];
107
+ return typeof value === "string" ? value : void 0;
108
+ }
109
+ function resolveLogSpanName(attributes, bodyValue) {
110
+ const eventName = attributes["event.name"] ?? attributes["claude_code.event.name"];
111
+ if (typeof eventName === "string" && eventName.length > 0) return eventName;
112
+ if (typeof bodyValue === "string" && bodyValue.length > 0 && bodyValue.length <= MAX_BODY_AS_NAME_LENGTH) return bodyValue;
113
+ return "otel.log";
114
+ }
86
115
  const SPAN_KIND_MAP = {
87
116
  0: "unspecified",
88
117
  1: "internal",
@@ -141,6 +170,21 @@ var OTLPReceiver = class {
141
170
  limit: "10mb",
142
171
  type: (req) => this.acceptFormats.includes("protobuf") && getRequestFormat(req.headers["content-type"]) === "protobuf"
143
172
  }));
173
+ this.app.use("/v1/logs", (req, res, next) => {
174
+ if (req.method !== "POST") {
175
+ next();
176
+ return;
177
+ }
178
+ if (getRequestFormat(req.headers["content-type"]) !== "json") {
179
+ res.status(415).json({ error: "Only application/json is supported for /v1/logs" });
180
+ return;
181
+ }
182
+ next();
183
+ });
184
+ this.app.use("/v1/logs", express.json({
185
+ limit: "10mb",
186
+ type: (req) => getRequestFormat(req.headers["content-type"]) === "json"
187
+ }));
144
188
  logger.debug("[OtlpReceiver] Middleware configured for accepted OTLP formats");
145
189
  }
146
190
  setupRoutes() {
@@ -164,6 +208,17 @@ var OTLPReceiver = class {
164
208
  this.handleProcessingError(error, res);
165
209
  }
166
210
  });
211
+ this.app.post("/v1/logs", async (req, res) => {
212
+ logger.debug("[OtlpReceiver] Received logs request");
213
+ try {
214
+ const traces = this.parseOTLPLogsJSONRequest(req.body);
215
+ logger.debug(`[OtlpReceiver] Parsed ${traces.length} logs into span records`);
216
+ if (traces.length > 0) await this.persistTraces(this.groupTraces(traces));
217
+ res.status(200).json({ partialSuccess: {} });
218
+ } catch (error) {
219
+ this.handleProcessingError(error, res);
220
+ }
221
+ });
167
222
  this.app.get("/health", (_req, res) => {
168
223
  logger.debug("[OtlpReceiver] Health check requested");
169
224
  res.status(200).json({ status: "ok" });
@@ -295,6 +350,67 @@ var OTLPReceiver = class {
295
350
  }
296
351
  return traces;
297
352
  }
353
+ parseOTLPLogsJSONRequest(body) {
354
+ const traces = [];
355
+ const resourceLogs = body?.resourceLogs ?? [];
356
+ logger.debug(`[OtlpReceiver] Parsing logs request with ${resourceLogs.length} resource logs`);
357
+ for (const resourceLog of resourceLogs) {
358
+ const resourceAttributes = this.parseAttributes(resourceLog.resource?.attributes);
359
+ for (const scopeLog of resourceLog.scopeLogs ?? []) for (const log of scopeLog.logRecords ?? []) try {
360
+ const parsed = this.logRecordToParsedTrace(log, scopeLog, resourceAttributes);
361
+ if (parsed) traces.push(parsed);
362
+ } catch (err) {
363
+ logger.warn(`[OtlpReceiver] Skipping malformed log record in scope ${scopeLog.scope?.name ?? "(unknown)"}: ${err}`);
364
+ }
365
+ }
366
+ return traces;
367
+ }
368
+ logRecordToParsedTrace(log, scopeLog, resourceAttributes) {
369
+ const rawTraceId = log.traceId ?? getStringAttribute(resourceAttributes, "promptfoo.trace_id");
370
+ if (!rawTraceId) {
371
+ logger.debug(`[OtlpReceiver] Dropping log: no traceId and no ${PROMPTFOO_RESOURCE_ATTR_TRACE_ID} resource attribute (scope=${scopeLog.scope?.name ?? "unknown"}). Ensure TRACEPARENT is propagated or OTEL_RESOURCE_ATTRIBUTES is set by the provider.`);
372
+ return null;
373
+ }
374
+ const traceId = this.convertId(rawTraceId, 32);
375
+ if (traceId.length !== 32 || !/^[0-9a-f]+$/.test(traceId)) {
376
+ logger.debug(`[OtlpReceiver] Dropping log: invalid trace_id shape '${rawTraceId}'`);
377
+ return null;
378
+ }
379
+ const attributes = {
380
+ ...resourceAttributes,
381
+ ...this.parseAttributes(log.attributes),
382
+ "otel.scope.name": scopeLog.scope?.name,
383
+ "otel.scope.version": scopeLog.scope?.version,
384
+ "otel.log.severity_number": log.severityNumber,
385
+ "otel.log.severity_text": log.severityText
386
+ };
387
+ const bodyValue = log.body ? this.parseAttributeValue(log.body) : void 0;
388
+ const name = resolveLogSpanName(attributes, bodyValue);
389
+ if (LOG_EVENT_NAME_DENYLIST.has(name)) {
390
+ logger.debug(`[OtlpReceiver] Dropping log: event '${name}' is in the denylist`);
391
+ return null;
392
+ }
393
+ if (bodyValue !== void 0) attributes["otel.log.body"] = truncateLogBody(bodyValue);
394
+ const timeNano = log.timeUnixNano ?? log.observedTimeUnixNano;
395
+ const startTime = timeNano ? Number(timeNano) / 1e6 : Date.now();
396
+ const endTime = startTime + LOG_SPAN_DURATION_MS;
397
+ const rawParentSpanId = !!log.spanId && !isZeroSpanId(log.spanId) ? log.spanId : getStringAttribute(resourceAttributes, PROMPTFOO_RESOURCE_ATTR_PARENT_SPAN_ID);
398
+ const parentSpanId = rawParentSpanId ? this.convertId(rawParentSpanId, 16) : void 0;
399
+ const severityIsError = typeof log.severityNumber === "number" && log.severityNumber >= SEVERITY_NUMBER_ERROR;
400
+ return {
401
+ traceId,
402
+ span: {
403
+ spanId: randomSpanId(),
404
+ parentSpanId,
405
+ name,
406
+ startTime,
407
+ endTime,
408
+ attributes,
409
+ statusCode: 1,
410
+ statusMessage: severityIsError ? log.severityText : void 0
411
+ }
412
+ };
413
+ }
298
414
  async parseOTLPProtobufRequest(body) {
299
415
  const decoded = await decodeExportTraceServiceRequest(body);
300
416
  logger.debug(`[OtlpReceiver] Parsing protobuf request with ${decoded.resourceSpans?.length || 0} resource spans`);
@@ -463,4 +579,4 @@ async function stopOTLPReceiver() {
463
579
  //#endregion
464
580
  export { startOTLPReceiver, stopOTLPReceiver };
465
581
 
466
- //# sourceMappingURL=otlpReceiver-BntK801g.js.map
582
+ //# sourceMappingURL=otlpReceiver--gTpSagc.js.map
@@ -1,8 +1,10 @@
1
- import { a as logger } from "./logger-B88EkIn6.js";
2
- import { t as getDirectory } from "./esm-Dh4dOLlt.js";
3
- import { t as getTraceStore } from "./store-Dn9HUkdW.js";
1
+ import { a as logger } from "./logger-KD8JjCRJ.js";
2
+ import { t as getDirectory } from "./esm-B6whoAcf.js";
3
+ import { i as getTraceStore } from "./server/index.js";
4
+ import { n as PROMPTFOO_RESOURCE_ATTR_TRACE_ID, t as PROMPTFOO_RESOURCE_ATTR_PARENT_SPAN_ID } from "./resourceAttributes-DQbBB--2.js";
4
5
  import path from "path";
5
6
  import express from "express";
7
+ import crypto from "node:crypto";
6
8
  import protobuf from "protobufjs";
7
9
  //#region src/tracing/protobuf.ts
8
10
  /**
@@ -82,6 +84,33 @@ async function decodeExportTraceServiceRequest(data) {
82
84
  }
83
85
  //#endregion
84
86
  //#region src/tracing/otlpReceiver.ts
87
+ const LOG_EVENT_NAME_DENYLIST = new Set(["claude_code.tracing"]);
88
+ const LOG_SPAN_DURATION_MS = 1;
89
+ const MAX_BODY_AS_NAME_LENGTH = 128;
90
+ const SEVERITY_NUMBER_ERROR = 17;
91
+ const MAX_LOG_BODY_ATTR_LENGTH = 8192;
92
+ function truncateLogBody(value) {
93
+ if (typeof value !== "string") return value;
94
+ if (value.length <= MAX_LOG_BODY_ATTR_LENGTH) return value;
95
+ return `${value.slice(0, MAX_LOG_BODY_ATTR_LENGTH - 15)}... [truncated]`;
96
+ }
97
+ const BASE64_ZERO_SPAN_ID = /^A{11,12}=?$/;
98
+ function isZeroSpanId(id) {
99
+ return /^0+$/.test(id) || BASE64_ZERO_SPAN_ID.test(id);
100
+ }
101
+ function randomSpanId() {
102
+ return crypto.randomBytes(8).toString("hex");
103
+ }
104
+ function getStringAttribute(attributes, key) {
105
+ const value = attributes[key];
106
+ return typeof value === "string" ? value : void 0;
107
+ }
108
+ function resolveLogSpanName(attributes, bodyValue) {
109
+ const eventName = attributes["event.name"] ?? attributes["claude_code.event.name"];
110
+ if (typeof eventName === "string" && eventName.length > 0) return eventName;
111
+ if (typeof bodyValue === "string" && bodyValue.length > 0 && bodyValue.length <= MAX_BODY_AS_NAME_LENGTH) return bodyValue;
112
+ return "otel.log";
113
+ }
85
114
  const SPAN_KIND_MAP = {
86
115
  0: "unspecified",
87
116
  1: "internal",
@@ -140,6 +169,21 @@ var OTLPReceiver = class {
140
169
  limit: "10mb",
141
170
  type: (req) => this.acceptFormats.includes("protobuf") && getRequestFormat(req.headers["content-type"]) === "protobuf"
142
171
  }));
172
+ this.app.use("/v1/logs", (req, res, next) => {
173
+ if (req.method !== "POST") {
174
+ next();
175
+ return;
176
+ }
177
+ if (getRequestFormat(req.headers["content-type"]) !== "json") {
178
+ res.status(415).json({ error: "Only application/json is supported for /v1/logs" });
179
+ return;
180
+ }
181
+ next();
182
+ });
183
+ this.app.use("/v1/logs", express.json({
184
+ limit: "10mb",
185
+ type: (req) => getRequestFormat(req.headers["content-type"]) === "json"
186
+ }));
143
187
  logger.debug("[OtlpReceiver] Middleware configured for accepted OTLP formats");
144
188
  }
145
189
  setupRoutes() {
@@ -163,6 +207,17 @@ var OTLPReceiver = class {
163
207
  this.handleProcessingError(error, res);
164
208
  }
165
209
  });
210
+ this.app.post("/v1/logs", async (req, res) => {
211
+ logger.debug("[OtlpReceiver] Received logs request");
212
+ try {
213
+ const traces = this.parseOTLPLogsJSONRequest(req.body);
214
+ logger.debug(`[OtlpReceiver] Parsed ${traces.length} logs into span records`);
215
+ if (traces.length > 0) await this.persistTraces(this.groupTraces(traces));
216
+ res.status(200).json({ partialSuccess: {} });
217
+ } catch (error) {
218
+ this.handleProcessingError(error, res);
219
+ }
220
+ });
166
221
  this.app.get("/health", (_req, res) => {
167
222
  logger.debug("[OtlpReceiver] Health check requested");
168
223
  res.status(200).json({ status: "ok" });
@@ -294,6 +349,67 @@ var OTLPReceiver = class {
294
349
  }
295
350
  return traces;
296
351
  }
352
+ parseOTLPLogsJSONRequest(body) {
353
+ const traces = [];
354
+ const resourceLogs = body?.resourceLogs ?? [];
355
+ logger.debug(`[OtlpReceiver] Parsing logs request with ${resourceLogs.length} resource logs`);
356
+ for (const resourceLog of resourceLogs) {
357
+ const resourceAttributes = this.parseAttributes(resourceLog.resource?.attributes);
358
+ for (const scopeLog of resourceLog.scopeLogs ?? []) for (const log of scopeLog.logRecords ?? []) try {
359
+ const parsed = this.logRecordToParsedTrace(log, scopeLog, resourceAttributes);
360
+ if (parsed) traces.push(parsed);
361
+ } catch (err) {
362
+ logger.warn(`[OtlpReceiver] Skipping malformed log record in scope ${scopeLog.scope?.name ?? "(unknown)"}: ${err}`);
363
+ }
364
+ }
365
+ return traces;
366
+ }
367
+ logRecordToParsedTrace(log, scopeLog, resourceAttributes) {
368
+ const rawTraceId = log.traceId ?? getStringAttribute(resourceAttributes, "promptfoo.trace_id");
369
+ if (!rawTraceId) {
370
+ logger.debug(`[OtlpReceiver] Dropping log: no traceId and no ${PROMPTFOO_RESOURCE_ATTR_TRACE_ID} resource attribute (scope=${scopeLog.scope?.name ?? "unknown"}). Ensure TRACEPARENT is propagated or OTEL_RESOURCE_ATTRIBUTES is set by the provider.`);
371
+ return null;
372
+ }
373
+ const traceId = this.convertId(rawTraceId, 32);
374
+ if (traceId.length !== 32 || !/^[0-9a-f]+$/.test(traceId)) {
375
+ logger.debug(`[OtlpReceiver] Dropping log: invalid trace_id shape '${rawTraceId}'`);
376
+ return null;
377
+ }
378
+ const attributes = {
379
+ ...resourceAttributes,
380
+ ...this.parseAttributes(log.attributes),
381
+ "otel.scope.name": scopeLog.scope?.name,
382
+ "otel.scope.version": scopeLog.scope?.version,
383
+ "otel.log.severity_number": log.severityNumber,
384
+ "otel.log.severity_text": log.severityText
385
+ };
386
+ const bodyValue = log.body ? this.parseAttributeValue(log.body) : void 0;
387
+ const name = resolveLogSpanName(attributes, bodyValue);
388
+ if (LOG_EVENT_NAME_DENYLIST.has(name)) {
389
+ logger.debug(`[OtlpReceiver] Dropping log: event '${name}' is in the denylist`);
390
+ return null;
391
+ }
392
+ if (bodyValue !== void 0) attributes["otel.log.body"] = truncateLogBody(bodyValue);
393
+ const timeNano = log.timeUnixNano ?? log.observedTimeUnixNano;
394
+ const startTime = timeNano ? Number(timeNano) / 1e6 : Date.now();
395
+ const endTime = startTime + LOG_SPAN_DURATION_MS;
396
+ const rawParentSpanId = !!log.spanId && !isZeroSpanId(log.spanId) ? log.spanId : getStringAttribute(resourceAttributes, PROMPTFOO_RESOURCE_ATTR_PARENT_SPAN_ID);
397
+ const parentSpanId = rawParentSpanId ? this.convertId(rawParentSpanId, 16) : void 0;
398
+ const severityIsError = typeof log.severityNumber === "number" && log.severityNumber >= SEVERITY_NUMBER_ERROR;
399
+ return {
400
+ traceId,
401
+ span: {
402
+ spanId: randomSpanId(),
403
+ parentSpanId,
404
+ name,
405
+ startTime,
406
+ endTime,
407
+ attributes,
408
+ statusCode: 1,
409
+ statusMessage: severityIsError ? log.severityText : void 0
410
+ }
411
+ };
412
+ }
297
413
  async parseOTLPProtobufRequest(body) {
298
414
  const decoded = await decodeExportTraceServiceRequest(body);
299
415
  logger.debug(`[OtlpReceiver] Parsing protobuf request with ${decoded.resourceSpans?.length || 0} resource spans`);
@@ -462,4 +578,4 @@ async function stopOTLPReceiver() {
462
578
  //#endregion
463
579
  export { startOTLPReceiver, stopOTLPReceiver };
464
580
 
465
- //# sourceMappingURL=otlpReceiver-DmVulbhC.js.map
581
+ //# sourceMappingURL=otlpReceiver-B2eaKC8C.js.map
@@ -1,7 +1,9 @@
1
1
  import { a as logger } from "./logger-Ct2S6Yx-.js";
2
- import { t as getDirectory } from "./esm-C7PnfdF8.js";
3
- import { t as getTraceStore } from "./store-M0b1WfYb.js";
2
+ import { t as getDirectory } from "./esm-BTK1W7lG.js";
3
+ import { t as getTraceStore } from "./store-HpopRVzl.js";
4
+ import { n as PROMPTFOO_RESOURCE_ATTR_TRACE_ID, t as PROMPTFOO_RESOURCE_ATTR_PARENT_SPAN_ID } from "./resourceAttributes-v6-I67fn.js";
4
5
  import path from "path";
6
+ import crypto from "node:crypto";
5
7
  import express from "express";
6
8
  import protobuf from "protobufjs";
7
9
  //#region src/tracing/protobuf.ts
@@ -82,6 +84,33 @@ async function decodeExportTraceServiceRequest(data) {
82
84
  }
83
85
  //#endregion
84
86
  //#region src/tracing/otlpReceiver.ts
87
+ const LOG_EVENT_NAME_DENYLIST = new Set(["claude_code.tracing"]);
88
+ const LOG_SPAN_DURATION_MS = 1;
89
+ const MAX_BODY_AS_NAME_LENGTH = 128;
90
+ const SEVERITY_NUMBER_ERROR = 17;
91
+ const MAX_LOG_BODY_ATTR_LENGTH = 8192;
92
+ function truncateLogBody(value) {
93
+ if (typeof value !== "string") return value;
94
+ if (value.length <= MAX_LOG_BODY_ATTR_LENGTH) return value;
95
+ return `${value.slice(0, MAX_LOG_BODY_ATTR_LENGTH - 15)}... [truncated]`;
96
+ }
97
+ const BASE64_ZERO_SPAN_ID = /^A{11,12}=?$/;
98
+ function isZeroSpanId(id) {
99
+ return /^0+$/.test(id) || BASE64_ZERO_SPAN_ID.test(id);
100
+ }
101
+ function randomSpanId() {
102
+ return crypto.randomBytes(8).toString("hex");
103
+ }
104
+ function getStringAttribute(attributes, key) {
105
+ const value = attributes[key];
106
+ return typeof value === "string" ? value : void 0;
107
+ }
108
+ function resolveLogSpanName(attributes, bodyValue) {
109
+ const eventName = attributes["event.name"] ?? attributes["claude_code.event.name"];
110
+ if (typeof eventName === "string" && eventName.length > 0) return eventName;
111
+ if (typeof bodyValue === "string" && bodyValue.length > 0 && bodyValue.length <= MAX_BODY_AS_NAME_LENGTH) return bodyValue;
112
+ return "otel.log";
113
+ }
85
114
  const SPAN_KIND_MAP = {
86
115
  0: "unspecified",
87
116
  1: "internal",
@@ -140,6 +169,21 @@ var OTLPReceiver = class {
140
169
  limit: "10mb",
141
170
  type: (req) => this.acceptFormats.includes("protobuf") && getRequestFormat(req.headers["content-type"]) === "protobuf"
142
171
  }));
172
+ this.app.use("/v1/logs", (req, res, next) => {
173
+ if (req.method !== "POST") {
174
+ next();
175
+ return;
176
+ }
177
+ if (getRequestFormat(req.headers["content-type"]) !== "json") {
178
+ res.status(415).json({ error: "Only application/json is supported for /v1/logs" });
179
+ return;
180
+ }
181
+ next();
182
+ });
183
+ this.app.use("/v1/logs", express.json({
184
+ limit: "10mb",
185
+ type: (req) => getRequestFormat(req.headers["content-type"]) === "json"
186
+ }));
143
187
  logger.debug("[OtlpReceiver] Middleware configured for accepted OTLP formats");
144
188
  }
145
189
  setupRoutes() {
@@ -163,6 +207,17 @@ var OTLPReceiver = class {
163
207
  this.handleProcessingError(error, res);
164
208
  }
165
209
  });
210
+ this.app.post("/v1/logs", async (req, res) => {
211
+ logger.debug("[OtlpReceiver] Received logs request");
212
+ try {
213
+ const traces = this.parseOTLPLogsJSONRequest(req.body);
214
+ logger.debug(`[OtlpReceiver] Parsed ${traces.length} logs into span records`);
215
+ if (traces.length > 0) await this.persistTraces(this.groupTraces(traces));
216
+ res.status(200).json({ partialSuccess: {} });
217
+ } catch (error) {
218
+ this.handleProcessingError(error, res);
219
+ }
220
+ });
166
221
  this.app.get("/health", (_req, res) => {
167
222
  logger.debug("[OtlpReceiver] Health check requested");
168
223
  res.status(200).json({ status: "ok" });
@@ -294,6 +349,67 @@ var OTLPReceiver = class {
294
349
  }
295
350
  return traces;
296
351
  }
352
+ parseOTLPLogsJSONRequest(body) {
353
+ const traces = [];
354
+ const resourceLogs = body?.resourceLogs ?? [];
355
+ logger.debug(`[OtlpReceiver] Parsing logs request with ${resourceLogs.length} resource logs`);
356
+ for (const resourceLog of resourceLogs) {
357
+ const resourceAttributes = this.parseAttributes(resourceLog.resource?.attributes);
358
+ for (const scopeLog of resourceLog.scopeLogs ?? []) for (const log of scopeLog.logRecords ?? []) try {
359
+ const parsed = this.logRecordToParsedTrace(log, scopeLog, resourceAttributes);
360
+ if (parsed) traces.push(parsed);
361
+ } catch (err) {
362
+ logger.warn(`[OtlpReceiver] Skipping malformed log record in scope ${scopeLog.scope?.name ?? "(unknown)"}: ${err}`);
363
+ }
364
+ }
365
+ return traces;
366
+ }
367
+ logRecordToParsedTrace(log, scopeLog, resourceAttributes) {
368
+ const rawTraceId = log.traceId ?? getStringAttribute(resourceAttributes, "promptfoo.trace_id");
369
+ if (!rawTraceId) {
370
+ logger.debug(`[OtlpReceiver] Dropping log: no traceId and no ${PROMPTFOO_RESOURCE_ATTR_TRACE_ID} resource attribute (scope=${scopeLog.scope?.name ?? "unknown"}). Ensure TRACEPARENT is propagated or OTEL_RESOURCE_ATTRIBUTES is set by the provider.`);
371
+ return null;
372
+ }
373
+ const traceId = this.convertId(rawTraceId, 32);
374
+ if (traceId.length !== 32 || !/^[0-9a-f]+$/.test(traceId)) {
375
+ logger.debug(`[OtlpReceiver] Dropping log: invalid trace_id shape '${rawTraceId}'`);
376
+ return null;
377
+ }
378
+ const attributes = {
379
+ ...resourceAttributes,
380
+ ...this.parseAttributes(log.attributes),
381
+ "otel.scope.name": scopeLog.scope?.name,
382
+ "otel.scope.version": scopeLog.scope?.version,
383
+ "otel.log.severity_number": log.severityNumber,
384
+ "otel.log.severity_text": log.severityText
385
+ };
386
+ const bodyValue = log.body ? this.parseAttributeValue(log.body) : void 0;
387
+ const name = resolveLogSpanName(attributes, bodyValue);
388
+ if (LOG_EVENT_NAME_DENYLIST.has(name)) {
389
+ logger.debug(`[OtlpReceiver] Dropping log: event '${name}' is in the denylist`);
390
+ return null;
391
+ }
392
+ if (bodyValue !== void 0) attributes["otel.log.body"] = truncateLogBody(bodyValue);
393
+ const timeNano = log.timeUnixNano ?? log.observedTimeUnixNano;
394
+ const startTime = timeNano ? Number(timeNano) / 1e6 : Date.now();
395
+ const endTime = startTime + LOG_SPAN_DURATION_MS;
396
+ const rawParentSpanId = !!log.spanId && !isZeroSpanId(log.spanId) ? log.spanId : getStringAttribute(resourceAttributes, PROMPTFOO_RESOURCE_ATTR_PARENT_SPAN_ID);
397
+ const parentSpanId = rawParentSpanId ? this.convertId(rawParentSpanId, 16) : void 0;
398
+ const severityIsError = typeof log.severityNumber === "number" && log.severityNumber >= SEVERITY_NUMBER_ERROR;
399
+ return {
400
+ traceId,
401
+ span: {
402
+ spanId: randomSpanId(),
403
+ parentSpanId,
404
+ name,
405
+ startTime,
406
+ endTime,
407
+ attributes,
408
+ statusCode: 1,
409
+ statusMessage: severityIsError ? log.severityText : void 0
410
+ }
411
+ };
412
+ }
297
413
  async parseOTLPProtobufRequest(body) {
298
414
  const decoded = await decodeExportTraceServiceRequest(body);
299
415
  logger.debug(`[OtlpReceiver] Parsing protobuf request with ${decoded.resourceSpans?.length || 0} resource spans`);
@@ -462,4 +578,4 @@ async function stopOTLPReceiver() {
462
578
  //#endregion
463
579
  export { startOTLPReceiver, stopOTLPReceiver };
464
580
 
465
- //# sourceMappingURL=otlpReceiver-B2z58l4e.js.map
581
+ //# sourceMappingURL=otlpReceiver-BXjcRqAM.js.map