promptfoo 0.121.5 → 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.
- package/dist/src/{ListApp-BRUsT43Y.js → ListApp-DLmM02JS.js} +1 -1
- package/dist/src/{accounts-CaLNYnf7.js → accounts-Ca7WIoPY.js} +12 -7
- package/dist/src/{accounts-CLJHCDDb.js → accounts-CjFnOPmb.js} +13 -8
- package/dist/src/{accounts-BIFntVWB.cjs → accounts-CmWzeD2d.cjs} +16 -10
- package/dist/src/{accounts-bnyHT7Ju.js → accounts-DanM1wq_.js} +12 -7
- package/dist/src/{agentic-utils-BclbiXiq.js → agentic-utils-CJ0j3fBi.js} +2 -2
- package/dist/src/{agentic-utils-B5krlibj.js → agentic-utils-DDEGRV9v.js} +2 -2
- package/dist/src/{agentic-utils-D2x0wGhB.cjs → agentic-utils-DvPWSUpb.cjs} +8 -7
- package/dist/src/{agentic-utils-Ba67xmgs.js → agentic-utils-TxUEMPYS.js} +2 -2
- package/dist/src/{agents-WULPVjbH.cjs → agents-B4sRuXg3.cjs} +7 -6
- package/dist/src/{agents-DhxWMCtH.js → agents-B8q7h_ek.js} +4 -4
- package/dist/src/{agents-BGqaTDnr.js → agents-CBgJvRkB.js} +20 -9
- package/dist/src/{agents-n6vPqV3i.js → agents-CYn2n3QP.js} +4 -4
- package/dist/src/{agents-BV9yFpXX.js → agents-D-vDNFx4.js} +20 -9
- package/dist/src/{agents-BYdMl1UE.js → agents-LrHuQqr1.js} +20 -9
- package/dist/src/{agents-emVcx3yh.js → agents-QGg76OF-.js} +2 -2
- package/dist/src/{agents-DiWmQYH9.cjs → agents-eHZ9nlgA.cjs} +21 -10
- package/dist/src/{aimlapi-uPGp0Zdo.js → aimlapi-CJEbQ0o6.js} +6 -6
- package/dist/src/{aimlapi-DR4pgeiC.js → aimlapi-D5HXzZ0s.js} +6 -6
- package/dist/src/{aimlapi-BzLjZI_m.cjs → aimlapi-T6HGNxNe.cjs} +7 -7
- package/dist/src/{aimlapi-BxqK9HF_.js → aimlapi-eYv3a_DK.js} +6 -6
- package/dist/src/app/app/tsconfig.app.tsbuildinfo +1 -1
- package/dist/src/app/assets/Report-BNHJKN35.js +1 -0
- package/dist/src/app/assets/index-BnT6P6sF.js +388 -0
- package/dist/src/app/assets/index-yhM8y1PP.css +1 -0
- package/dist/src/app/assets/{scroll-timeline-D9IT_e8Z.js → scroll-timeline-RpeTwOvs.js} +1 -1
- package/dist/src/app/assets/sync-5gq6fmG4.js +4 -0
- package/dist/src/app/assets/vendor-charts-BL9OMNU7.js +36 -0
- package/dist/src/app/assets/{vendor-markdown-Ch00wnNI.js → vendor-markdown-BYsQqn7Z.js} +10 -10
- package/dist/src/app/assets/{vendor-react-CVvmk1UB.js → vendor-react-CqWgVW6T.js} +2 -2
- package/dist/src/app/assets/{vendor-utils-BnEYbx2Q.js → vendor-utils-BHPO71pu.js} +1 -1
- package/dist/src/app/index.html +6 -6
- package/dist/src/{audio-Da8U9IS5.js → audio-BqnRvcWG.js} +3 -3
- package/dist/src/{audio-BvpTOArF.js → audio-CPMtV1yR.js} +3 -3
- package/dist/src/{audio-CScmnmEB.js → audio-DyiebVB3.js} +3 -3
- package/dist/src/{audio-C0vDeS0j.cjs → audio-FnxbEnSE.cjs} +4 -4
- package/dist/src/authoritativeMarkupInjection-BZIywVjG.js +74 -0
- package/dist/src/authoritativeMarkupInjection-DyAXAsSr.js +75 -0
- package/dist/src/authoritativeMarkupInjection-F2gBw0lN.cjs +74 -0
- package/dist/src/authoritativeMarkupInjection-QEQmFS83.js +74 -0
- package/dist/src/{base-BTux96b1.js → base-CKLo890h.js} +4 -3
- package/dist/src/{base-BOMaNEes.js → base-Co80MMCi.js} +4 -3
- package/dist/src/{base-Tw6uhH8K.cjs → base-DGJW48uz.cjs} +5 -4
- package/dist/src/{base-dYsl2hmL.js → base-E9I8zXjz.js} +4 -3
- package/dist/src/bestOfN-B3wNzjSB.js +137 -0
- package/dist/src/bestOfN-BBsO41z4.js +136 -0
- package/dist/src/bestOfN-CAwmg5UL.cjs +140 -0
- package/dist/src/bestOfN-_kTi8Bxe.js +136 -0
- package/dist/src/{blobs-B95F_7vE.cjs → blobs-B0977K1O.cjs} +7 -6
- package/dist/src/{blobs-D_gg8nbm.js → blobs-CeFdPn_T.js} +2 -2
- package/dist/src/{blobs-DjLby-uP.js → blobs-DODuTK-a.js} +2 -2
- package/dist/src/{blobs-BW4U31ue.js → blobs-Dwef1Ao1.js} +2 -2
- package/dist/src/{cache-DGg-yTZG.cjs → cache-CPGUA4Yl.cjs} +135 -25
- package/dist/src/cache-Cf7b4pWE.js +3 -0
- package/dist/src/{cache-Bzttsk0X.js → cache-DIXbtkNO.js} +125 -10
- package/dist/src/{cache-BI5BY7ey.js → cache-DpPWrkTE.js} +127 -11
- package/dist/src/{cache-Cr-qWIbP.js → cache-roFAE0cI.js} +125 -10
- package/dist/src/{chat-DChSH_Es.js → chat-CUCorGiL.js} +9 -9
- package/dist/src/{chat-DH97tVV9.cjs → chat-DG1wG4w0.cjs} +6 -6
- package/dist/src/{chat-Cx_LkwvZ.js → chat-Dabu84Br.js} +11 -11
- package/dist/src/{chat-BLOdH60v.js → chat-DqUFcWI0.js} +11 -11
- package/dist/src/{chat-vYqqv1gP.cjs → chat-DxTDQ83C.cjs} +14 -13
- package/dist/src/{chat-DG2LkwLq.js → chat-GmlolEwo.js} +4 -4
- package/dist/src/{chat-aMQZw6R7.js → chat-TP8Qifkh.js} +4 -4
- package/dist/src/{chat-D9nudO9b.js → chat-iwaM5UTQ.js} +4 -4
- package/dist/src/{chatkit-B8X34dQc.js → chatkit-B6DWi70Q.js} +3 -3
- package/dist/src/{chatkit-D44VyUyB.cjs → chatkit-BYveR48_.cjs} +6 -5
- package/dist/src/{chatkit-BXu42Qwt.js → chatkit-fARZwEfV.js} +3 -3
- package/dist/src/{chatkit-CbMRoeYw.js → chatkit-lb6FK02w.js} +1 -1
- package/dist/src/{claude-agent-sdk-BzNZeZ0N.js → claude-agent-sdk-BQNp_y-F.js} +209 -64
- package/dist/src/{claude-agent-sdk-BjriSVRZ.js → claude-agent-sdk-D5Jl0SDh.js} +210 -65
- package/dist/src/{claude-agent-sdk-BRq0bbIK.cjs → claude-agent-sdk-DH416NBD.cjs} +216 -70
- package/dist/src/{claude-agent-sdk-DYv_AJ8u.js → claude-agent-sdk-x1XJ1-pU.js} +210 -65
- package/dist/src/{cloud-Da0bofJd.js → cloud-D3DiFqH6.js} +2 -2
- package/dist/src/cloud-p96PA4MH.js +3 -0
- package/dist/src/{cloudflare-ai-CXC4b1EU.js → cloudflare-ai-B6NVI3ax.js} +4 -4
- package/dist/src/{cloudflare-ai-DJv5qnyb.cjs → cloudflare-ai-CEAW-xQa.cjs} +6 -6
- package/dist/src/{cloudflare-ai-CyBoIs1Q.js → cloudflare-ai-RFSojyXG.js} +4 -4
- package/dist/src/{cloudflare-ai-DGOwgexC.js → cloudflare-ai-r4tbYmWU.js} +4 -4
- package/dist/src/{cloudflare-gateway-D-dnkzCF.js → cloudflare-gateway-BCkLouto.js} +3 -3
- package/dist/src/{cloudflare-gateway-TJkVrZlB.js → cloudflare-gateway-BaZ4insB.js} +3 -3
- package/dist/src/{cloudflare-gateway-1sAoOyft.js → cloudflare-gateway-CF-Vb-2Z.js} +3 -3
- package/dist/src/{cloudflare-gateway-DKVjkDav.cjs → cloudflare-gateway-TJMLBj6I.cjs} +5 -5
- package/dist/src/{codex-app-server-CCe0TiDc.js → codex-app-server-B8KHEiF4.js} +5 -5
- package/dist/src/{codex-app-server-VMRnjZ68.cjs → codex-app-server-CnrLBCeA.cjs} +12 -11
- package/dist/src/{codex-app-server-CCLjqCh9.js → codex-app-server-DIXZ230V.js} +4 -4
- package/dist/src/{codex-app-server-CPW1LFwh.js → codex-app-server-Dd22dC_N.js} +5 -5
- package/dist/src/{codex-sdk-BgEFQ70r.js → codex-sdk-B6Wah8Pa.js} +5 -5
- package/dist/src/codex-sdk-BGjVAk23.js +3 -0
- package/dist/src/{codex-sdk-Bd8UbO9q.cjs → codex-sdk-CFF6gUyi.cjs} +18 -10
- package/dist/src/{codex-sdk-Bzb_TqX9.js → codex-sdk-CmQABzV3.js} +3 -3
- package/dist/src/{codex-sdk-DfvDTN33.js → codex-sdk-D2d54RL8.js} +5 -5
- package/dist/src/{cometapi-B5ImDlSm.js → cometapi-Bu9B8NUY.js} +7 -7
- package/dist/src/{cometapi-CCbpHkuF.js → cometapi-CtzNCHKu.js} +7 -7
- package/dist/src/{cometapi-BgAkuYCw.cjs → cometapi-DHCDlQUI.cjs} +8 -8
- package/dist/src/{cometapi-CC7hWxmX.js → cometapi-OBILPLlu.js} +7 -7
- package/dist/src/{completion-Vq_ad618.js → completion-CO2e1_62.js} +4 -4
- package/dist/src/{completion-DtQ72Bm3.cjs → completion-CSYfl2cd.cjs} +6 -6
- package/dist/src/{completion-2iuYVxwi.js → completion-DZNxcyfG.js} +5 -5
- package/dist/src/{completion-CrD6MQ93.js → completion-sNvCLTAP.js} +5 -5
- package/dist/src/constants-BjJV0cRr.js +6 -0
- package/dist/src/constants-DH5XYLKZ.js +7 -0
- package/dist/src/constants-DZGEFLsu.js +6 -0
- package/dist/src/constants-a2kYssQk.cjs +11 -0
- package/dist/src/{createHash-4gFQpDDv.js → createHash-BtbSX3mj.js} +1 -1
- package/dist/src/{createHash-Un4Q_huE.js → createHash-CGVzWdjj.js} +1 -1
- package/dist/src/{createHash-VvBIc-AW.cjs → createHash-CSiqnK5P.cjs} +2 -2
- package/dist/src/{createHash-DPpsZgFF.js → createHash-CgRvs4Fn.js} +1 -1
- package/dist/src/crescendo-BXEJK_bi.cjs +704 -0
- package/dist/src/crescendo-CU_Y2i-m.js +702 -0
- package/dist/src/crescendo-J1Xx4_zb.js +703 -0
- package/dist/src/crescendo-QiaSLW0d.js +701 -0
- package/dist/src/custom-BJfP00Bh.js +619 -0
- package/dist/src/custom-CZVn-1-r.js +620 -0
- package/dist/src/custom-Cqia7M0D.cjs +621 -0
- package/dist/src/custom-notggYVl.js +618 -0
- package/dist/src/{docker--3qzPa-6.js → docker-4D1eL6Gq.js} +5 -5
- package/dist/src/{docker-Dorv4_Dg.js → docker-BBv1WUDu.js} +5 -5
- package/dist/src/{docker-D3AY-5F5.cjs → docker-D06JUoe2.cjs} +6 -6
- package/dist/src/{docker-DCsCDvwM.js → docker-DdJQBxK9.js} +5 -5
- package/dist/src/{embedding-DNRvZwRN.js → embedding--UZVe4_7.js} +5 -5
- package/dist/src/{embedding-BXhN5lCH.cjs → embedding-BbrwopfX.cjs} +6 -6
- package/dist/src/{embedding-ChS1ivFS.js → embedding-Bi3rxrZF.js} +5 -5
- package/dist/src/{embedding-D_bI4NDq.js → embedding-C251p1-8.js} +4 -4
- package/dist/src/{errors-DFHe4L-n.js → errors-9PcUL8BC.js} +1 -1
- package/dist/src/{esm-B_rGuPTo.cjs → esm-BIKakvNa.cjs} +8 -7
- package/dist/src/{esm-BRkfNsYs.js → esm-BTK1W7lG.js} +1 -1
- package/dist/src/{esm-BX8fwlAO.js → esm-Bexx2PFc.js} +1 -1
- package/dist/src/{eval-DJ_4A-tr.js → eval-0VRANImH.js} +19 -19
- package/dist/src/{eval-BQPLBJbw.js → eval-DscR5iOM.js} +1 -1
- package/dist/src/{evalResult-pSvGWFMo.js → evalResult-2RRJvFyB.js} +18 -11
- package/dist/src/{evalResult-Cx-8OWkb.cjs → evalResult-CvtS8h8u.cjs} +29 -11
- package/dist/src/evalResult-DqzsS6_W.js +3 -0
- package/dist/src/{evalResult-D6P5I5il.js → evalResult-eUkJv9Ko.js} +17 -10
- package/dist/src/evaluator-DNdJF1Gv.js +3 -0
- package/dist/src/{evaluator-D-UIbbYq.js → evaluator-DRoiYB2q.js} +258 -132
- package/dist/src/evaluatorHelpers-BsYP_muT.js +511 -0
- package/dist/src/evaluatorHelpers-CRqTvSux.cjs +537 -0
- package/dist/src/evaluatorHelpers-DuqFFfq7.js +510 -0
- package/dist/src/{extractor-YlZbUMsL.js → extractor-BR7XAzAL.js} +5 -5
- package/dist/src/{extractor-Dxr2J_wK.cjs → extractor-BdxEtt3J.cjs} +6 -6
- package/dist/src/{extractor-DxyiFhPk.js → extractor-CIW3iN-b.js} +5 -5
- package/dist/src/{extractor-BM3jRERL.js → extractor-CxRtnaHl.js} +5 -5
- package/dist/src/{fetch-Y5qX_kST.js → fetch-BufrQtvR.js} +90 -26
- package/dist/src/{fetch-B6ch2nU2.js → fetch-DXUnXkVU.js} +86 -26
- package/dist/src/{fetch-NuqXW1Xb.cjs → fetch-Dw4XZHjj.cjs} +115 -32
- package/dist/src/{fetch-D9xxyC1p.js → fetch-It34O8Ur.js} +90 -26
- package/dist/src/fetch-_YgGd2qv.js +3 -0
- package/dist/src/{fileExtensions-D9h-8Wxg.cjs → fileExtensions-BhdwzYaD.cjs} +24 -1
- package/dist/src/{fileExtensions-BGh-W-HT.js → fileExtensions-CXRfY3Ss.js} +12 -2
- package/dist/src/{fileExtensions-DysCsxNG.js → fileExtensions-D4GCJ67J.js} +12 -2
- package/dist/src/{formatDuration-Ch4A7G3o.js → formatDuration-CMVNrYvE.js} +1 -1
- package/dist/src/{genaiTracer-BokHC-MW.cjs → genaiTracer-14nugQQx.cjs} +14 -2
- package/dist/src/{genaiTracer-C3ZPQU60.js → genaiTracer-BPVvltoW.js} +2 -2
- package/dist/src/{genaiTracer-DxODqT9e.js → genaiTracer-D18lYzhB.js} +2 -2
- package/dist/src/{genaiTracer-CFny3gOy.js → genaiTracer-jJKYsnjc.js} +2 -2
- package/dist/src/goat-Ckd3q3AY.js +467 -0
- package/dist/src/goat-Qgurm-NP.js +466 -0
- package/dist/src/goat-ghadEDdy.js +465 -0
- package/dist/src/goat-una6pZGP.cjs +469 -0
- package/dist/src/graders-BDT7dif6.js +3 -0
- package/dist/src/{graders-CgPn32yp.js → graders-BGP99PdK.js} +1017 -84
- package/dist/src/{graders-BoUqsCEm.js → graders-BX0f2tvS.js} +1022 -84
- package/dist/src/{graders-CwrbifOo.js → graders-C0nXU_ZP.js} +1020 -82
- package/dist/src/{graders-Bw1wk_21.cjs → graders-ClrU2fnd.cjs} +1085 -128
- package/dist/src/hydra-BSNZZm2M.js +543 -0
- package/dist/src/hydra-BxdG4nkg.js +541 -0
- package/dist/src/hydra-DE4xWwyc.js +542 -0
- package/dist/src/hydra-DrJttnvw.cjs +542 -0
- package/dist/src/image-B4oBtu6J.js +443 -0
- package/dist/src/{image-Dr_3I3nK.js → image-BN-hjLL9.js} +3 -3
- package/dist/src/{image-BeWaInPF.js → image-B_fPIwdg.js} +3 -3
- package/dist/src/image-BvUAW344.js +442 -0
- package/dist/src/image-Cvjwx1uY.js +442 -0
- package/dist/src/{image-D10dNAav.cjs → image-DfVCGPbI.cjs} +4 -4
- package/dist/src/{image-qjO6FWPs.js → image-QzmydkiG.js} +3 -3
- package/dist/src/image-X0oY4350.cjs +465 -0
- package/dist/src/index.cjs +688 -313
- package/dist/src/index.d.cts +3152 -1617
- package/dist/src/index.d.ts +3151 -1616
- package/dist/src/index.js +582 -223
- package/dist/src/indirectWebPwn-02ZIghCS.js +259 -0
- package/dist/src/indirectWebPwn-BJ22AbQa.cjs +397 -0
- package/dist/src/indirectWebPwn-CbjUG0rh.js +385 -0
- package/dist/src/indirectWebPwn-CfQJt3gk.cjs +260 -0
- package/dist/src/indirectWebPwn-DBQhOjoD.js +260 -0
- package/dist/src/indirectWebPwn-OsXnKejv.js +259 -0
- package/dist/src/indirectWebPwn-tNx9OZ35.js +385 -0
- package/dist/src/indirectWebPwn-uyWdHx04.js +386 -0
- package/dist/src/inputVariables-B0qUChbV.js +467 -0
- package/dist/src/inputVariables-DUGMb9Ka.js +464 -0
- package/dist/src/inputVariables-DXFdi7AI.js +468 -0
- package/dist/src/inputVariables-Dq9W-Z3a.cjs +475 -0
- package/dist/src/{interactiveCheck-CCICw2cy.js → interactiveCheck-C4QlIuoR.js} +1 -1
- package/dist/src/{invariant-kfQ8Bu82.cjs → invariant-QtnLD03y.cjs} +1 -1
- package/dist/src/iterative-CpU6i2As.js +490 -0
- package/dist/src/iterative-DJQEQpG3.js +491 -0
- package/dist/src/iterative-DQBuWM-j.cjs +493 -0
- package/dist/src/iterative-FTS4Bz67.js +492 -0
- package/dist/src/iterativeImage-BUABMVOA.js +413 -0
- package/dist/src/iterativeImage-ByFWkxax.cjs +415 -0
- package/dist/src/iterativeImage-BzUapOUi.js +414 -0
- package/dist/src/iterativeImage-Doz8mgxF.js +413 -0
- package/dist/src/iterativeMeta-B3YiAOc8.js +386 -0
- package/dist/src/iterativeMeta-C7APE_P1.js +385 -0
- package/dist/src/iterativeMeta-CSS8M6Ds.cjs +385 -0
- package/dist/src/iterativeMeta-DgoQ7bLh.js +384 -0
- package/dist/src/iterativeTree-B5zxBBSW.js +769 -0
- package/dist/src/iterativeTree-CNyIk0Yn.js +768 -0
- package/dist/src/iterativeTree-CPMF10ve.cjs +771 -0
- package/dist/src/iterativeTree-DvZ7GBwt.js +770 -0
- package/dist/src/{knowledgeBase-Dr3Kib7F.js → knowledgeBase-BadkINlJ.js} +24 -10
- package/dist/src/{knowledgeBase-BBETc5-S.js → knowledgeBase-Bi_8sV-H.js} +23 -9
- package/dist/src/{knowledgeBase-CzAi2rUI.js → knowledgeBase-CkMljjdg.js} +24 -10
- package/dist/src/{knowledgeBase-C8qOo26M.cjs → knowledgeBase-DUh34xba.cjs} +25 -11
- package/dist/src/{litellm-DRc4qWfc.js → litellm-BKBo0jpC.js} +4 -4
- package/dist/src/{litellm-BLSiANhk.js → litellm-BXyn5kZK.js} +4 -4
- package/dist/src/{litellm-DQGo_juI.js → litellm-CNcfbCfa.js} +4 -4
- package/dist/src/{litellm-CaUmV7Mk.cjs → litellm-CtAr7bKG.cjs} +5 -5
- package/dist/src/{logger-COuQb2xB.cjs → logger-cfNpzI4o.cjs} +13 -55
- package/dist/src/{luma-ray-B-tNZzqW.js → luma-ray-BMX1iEB6.js} +5 -5
- package/dist/src/{luma-ray-CtS3OlGq.js → luma-ray-CR5TSpp4.js} +5 -5
- package/dist/src/{luma-ray-if-Ml4R9.cjs → luma-ray-D3FUc2K3.cjs} +9 -8
- package/dist/src/{luma-ray-PJJgUjOc.js → luma-ray-OEMmS1RB.js} +5 -5
- package/dist/src/main.js +704 -208
- package/dist/src/memoryPoisoning-CM83NWYl.js +107 -0
- package/dist/src/memoryPoisoning-D8h9gXJF.js +106 -0
- package/dist/src/memoryPoisoning-Dp-btinn.cjs +106 -0
- package/dist/src/memoryPoisoning-cLuCoTuJ.js +106 -0
- package/dist/src/{messages-CewuNcNS.js → messages-BabO-cX8.js} +17 -9
- package/dist/src/{messages-BnsVHUnm.cjs → messages-DBPir0TQ.cjs} +24 -15
- package/dist/src/{messages-B9dSjrNf.js → messages-DGUlSNU7.js} +18 -10
- package/dist/src/{messages-CI69Lasb.js → messages-vsE_-Lv0.js} +18 -10
- package/dist/src/{meteor-CeGo0Lu2.js → meteor--TZYICTI.js} +1 -1
- package/dist/src/{meteor-BBGcGeCa.cjs → meteor-CR226f7Z.cjs} +2 -2
- package/dist/src/{meteor-Wc_aUVvu.js → meteor-Cl_yd7rJ.js} +1 -1
- package/dist/src/{meteor-BKTM-7KS.js → meteor-Dce-_zGQ.js} +1 -1
- package/dist/src/mischievousUser-0l8GD7Dp.js +46 -0
- package/dist/src/mischievousUser-BUOP9W5r.js +46 -0
- package/dist/src/mischievousUser-frFYKxu6.js +47 -0
- package/dist/src/mischievousUser-olGgHIVR.cjs +46 -0
- package/dist/src/{modelslab-BkapYJhh.cjs → modelslab-CNV5bMSk.cjs} +7 -7
- package/dist/src/{modelslab-zpz9JcK0.js → modelslab-Cogmu4mG.js} +6 -6
- package/dist/src/{modelslab-D73OnKSx.js → modelslab-Dzst7VTU.js} +6 -6
- package/dist/src/{modelslab-BCLOtfek.js → modelslab-EyDczZ5A.js} +6 -6
- package/dist/src/{nova-reel-B8F_TK5w.js → nova-reel-BGPNBOMS.js} +5 -5
- package/dist/src/{nova-reel-Bx0NFV2f.js → nova-reel-B_5NKFu1.js} +5 -5
- package/dist/src/{nova-reel-CNGJTLtG.js → nova-reel-C4eUJGse.js} +5 -5
- package/dist/src/{nova-reel-DkT7tnoB.cjs → nova-reel-CjJRxI1X.cjs} +9 -8
- package/dist/src/{nova-sonic-BaXRN1cr.js → nova-sonic-BNGmgfFz.js} +3 -3
- package/dist/src/{nova-sonic-BeTRaFOh.js → nova-sonic-ChPlh5na.js} +2 -2
- package/dist/src/{nova-sonic-CL7Zqv0G.js → nova-sonic-CrV0iaY_.js} +3 -3
- package/dist/src/{nova-sonic-YT426juD.cjs → nova-sonic-DuOG9Aun.cjs} +5 -4
- package/dist/src/{openai-Cy1XLs0c.cjs → openai-C3uXv8wS.cjs} +2 -2
- package/dist/src/{openai-BT-JvDse.js → openai-CJrsh9n4.js} +1 -1
- package/dist/src/{openai-D4fxGvRx.js → openai-zgwBb4Ff.js} +1 -1
- package/dist/src/{openclaw-Bq7RVR3k.js → openclaw-BIHlu_36.js} +9 -8
- package/dist/src/{openclaw-DObVgpjC.js → openclaw-CF7fMido.js} +9 -8
- package/dist/src/{openclaw-DUBZP3GL.cjs → openclaw-Dphc01BY.cjs} +17 -15
- package/dist/src/{openclaw-DA8U4DsD.js → openclaw-zIJAsz3P.js} +9 -8
- package/dist/src/{opencode-sdk-BB40Wir1.js → opencode-sdk-B3vlPLsp.js} +38 -3
- package/dist/src/{opencode-sdk-ChdK7F7z.js → opencode-sdk-D05JSgMQ.js} +39 -4
- package/dist/src/{opencode-sdk-CeqiOcOU.cjs → opencode-sdk-DoY6GbWw.cjs} +45 -9
- package/dist/src/{opencode-sdk-BM1UAIv1.js → opencode-sdk-sRKYHGoI.js} +39 -4
- package/dist/src/{otlpReceiver-UYMQx3sy.js → otlpReceiver--gTpSagc.js} +119 -3
- package/dist/src/{otlpReceiver-C6thJRXi.js → otlpReceiver-B2eaKC8C.js} +118 -2
- package/dist/src/{otlpReceiver-CcdIikOu.js → otlpReceiver-BXjcRqAM.js} +119 -3
- package/dist/src/{otlpReceiver-DNSQj6bf.cjs → otlpReceiver-CvJdBGSc.cjs} +125 -7
- package/dist/src/packageParser--MWTSrPW.js +36 -0
- package/dist/src/packageParser-CgE-ziRo.js +35 -0
- package/dist/src/packageParser-QoCS1FMl.cjs +54 -0
- package/dist/src/packageParser-hwwSGnAZ.js +35 -0
- package/dist/src/processShim-BBxt7LKO.js +95 -0
- package/dist/src/processShim-BcGzU8fY.js +94 -0
- package/dist/src/processShim-C_z3aRvF.js +94 -0
- package/dist/src/processShim-DSY9BV2T.cjs +98 -0
- package/dist/src/promptLength-0qIHyhA5.js +71 -0
- package/dist/src/promptLength-4X-Wd8PG.js +72 -0
- package/dist/src/promptLength-B9nZEfO6.js +71 -0
- package/dist/src/promptLength-BbBbDHNj.cjs +94 -0
- package/dist/src/promptfoo-BDrfT30-.js +180 -0
- package/dist/src/promptfoo-Cm4hiy1Y.js +180 -0
- package/dist/src/promptfoo-Rjp-MeBb.js +181 -0
- package/dist/src/promptfoo-b-baRMj-.cjs +205 -0
- package/dist/src/prompts-BYMtqPCw.js +259 -0
- package/dist/src/prompts-C-bqE1Yp.js +260 -0
- package/dist/src/prompts-Cp_Qx5Ml.js +270 -0
- package/dist/src/prompts-DHhQsANy.js +259 -0
- package/dist/src/prompts-D_QpZ2Dm.js +271 -0
- package/dist/src/prompts-hNvWBD3z.cjs +284 -0
- package/dist/src/prompts-huDVH2CI.js +270 -0
- package/dist/src/prompts-p78Hul5i.cjs +289 -0
- package/dist/src/{providerRegistry-BESeALrr.cjs → providerRegistry-CZO_w7ue.cjs} +2 -2
- package/dist/src/{providerRegistry-DoACwqhD.js → providerRegistry-DHcFiVWX.js} +1 -1
- package/dist/src/{providerRegistry-PMsleEzs.js → providerRegistry-ReCd0sFa.js} +1 -1
- package/dist/src/{providers-DT-GtF2t.js → providers-B9KzWxAX.js} +739 -11919
- package/dist/src/{providers-DRrerKra.js → providers-BCCz6_IX.js} +813 -11944
- package/dist/src/{providers-eDShy16E.cjs → providers-BDVVIQM6.cjs} +787 -12132
- package/dist/src/{providers-Ctcc592x.js → providers-BYAn82cf.js} +1 -1
- package/dist/src/{providers-CJh7iriU.js → providers-DVYRZP4E.js} +746 -11866
- package/dist/src/{pythonUtils-C4tltmIn.js → pythonUtils-CLCgQ9tt.js} +1 -1
- package/dist/src/{pythonUtils-DNqbnRdx.js → pythonUtils-CgYxeSmO.js} +2 -2
- package/dist/src/{pythonUtils-CoLaCwNY.cjs → pythonUtils-Cokhluq3.cjs} +7 -6
- package/dist/src/{pythonUtils-DMO68Jg7.js → pythonUtils-D0BYebvX.js} +2 -2
- package/dist/src/{quiverai-Bpx6MZ7T.cjs → quiverai-BAp6iTZD.cjs} +4 -4
- package/dist/src/{quiverai-CPKhWgaT.js → quiverai-BvIhI_0l.js} +3 -3
- package/dist/src/{quiverai-BSS9a7wV.js → quiverai-CdTWPe-A.js} +3 -3
- package/dist/src/{quiverai-Bk1KrvL6.js → quiverai-Cv7rJKDz.js} +3 -3
- package/dist/src/registry-BUJrgjwv.js +124 -0
- package/dist/src/registry-DXm1t_x0.js +125 -0
- package/dist/src/registry-Dp5EqoXc.js +124 -0
- package/dist/src/registry-KCVF1CFC.cjs +124 -0
- package/dist/src/{server-ByxbqAcQ.js → remoteGeneration-B1_XsKXU.js} +16 -147
- package/dist/src/{server-gyd6d4Hc.js → remoteGeneration-COpWcmWd.js} +15 -108
- package/dist/src/{server-BEECpeGG.cjs → remoteGeneration-DS9N3pgB.cjs} +30 -119
- package/dist/src/remoteGeneration-DsaSwmG2.js +217 -0
- package/dist/src/render-BNTrbmBw.cjs +384 -0
- package/dist/src/render-CSP99NLm.js +348 -0
- package/dist/src/render-DFfDeYUK.js +347 -0
- package/dist/src/{render-nj-UaPdn.js → render-DznWrxGO.js} +2 -2
- package/dist/src/render-_6ur1fhE.js +347 -0
- package/dist/src/resourceAttributes-D1jP3kL5.js +17 -0
- package/dist/src/resourceAttributes-DQbBB--2.js +16 -0
- package/dist/src/resourceAttributes-ephgOvdR.cjs +27 -0
- package/dist/src/resourceAttributes-v6-I67fn.js +16 -0
- package/dist/src/{responses-CF-ayauu.cjs → responses-1UFFF9N_.cjs} +12 -11
- package/dist/src/{responses-B8haB-mD.js → responses-B3W2JvOQ.js} +9 -9
- package/dist/src/{responses-1ztiVYsx.js → responses-B6ktc3Ra.js} +7 -7
- package/dist/src/{responses-BiaBguAu.js → responses-URRzV8qE.js} +9 -9
- package/dist/src/rolldown-runtime-D_mwlA32.cjs +43 -0
- package/dist/src/rubyUtils-BYVlQ94c.js +3 -0
- package/dist/src/{rubyUtils-CIQFnVz4.js → rubyUtils-CXlFM2rR.js} +2 -2
- package/dist/src/{rubyUtils-BI0p46eZ.js → rubyUtils-CnlW8AYb.js} +2 -2
- package/dist/src/{rubyUtils-DoifqkiA.cjs → rubyUtils-CqUWBZAt.cjs} +16 -26
- package/dist/src/{rubyUtils-DGnoCYL2.js → rubyUtils-DdGojpfv.js} +1 -1
- package/dist/src/runtimeTransform-BJOpL9Yc.js +142 -0
- package/dist/src/runtimeTransform-Dgh_D7DU.js +143 -0
- package/dist/src/runtimeTransform-DigbjU1r.js +142 -0
- package/dist/src/runtimeTransform-ON3YYILw.cjs +147 -0
- package/dist/src/{sagemaker-ClS_NB07.js → sagemaker-CujrzP1a.js} +61 -50
- package/dist/src/{sagemaker-ljtY12VM.cjs → sagemaker-DzffAqo_.cjs} +65 -53
- package/dist/src/{sagemaker-C5T60MKf.js → sagemaker-vhtSV7JI.js} +61 -50
- package/dist/src/{sagemaker-BDLeW29y.js → sagemaker-yr1QKeBs.js} +61 -50
- package/dist/src/{scanner-nOCWNIXa.js → scanner-DS0109SS.js} +6 -6
- package/dist/src/server/index.js +4147 -449
- package/dist/src/server-B8rqV126.cjs +126 -0
- package/dist/src/server-BaLytskk.js +3 -0
- package/dist/src/server-CMJD10J4.js +107 -0
- package/dist/src/server-Ddp8GNMp.js +146 -0
- package/dist/src/server-DhMHosWj.js +182 -0
- package/dist/src/shared-7pmVZLNO.js +1334 -0
- package/dist/src/shared-9WHQ1oNE.js +1335 -0
- package/dist/src/{fileExtensions-8CjoL7vB.js → shared-BoG7qLMv.js} +12 -2
- package/dist/src/shared-D6IjElRI.js +1334 -0
- package/dist/src/shared-WkgnDkcg.cjs +1436 -0
- package/dist/src/{signal-DTtUuU3l.js → signal-CSurUUyV.js} +2 -2
- package/dist/src/simulatedUser-C9aQObBI.js +222 -0
- package/dist/src/simulatedUser-Cu601Dd4.cjs +227 -0
- package/dist/src/simulatedUser-U_qAHnuB.js +222 -0
- package/dist/src/simulatedUser-p3tACcmw.js +223 -0
- package/dist/src/{slack-Bamy_7te.js → slack-Bapo-7_8.js} +1 -1
- package/dist/src/{slack-BLlsDpfG.cjs → slack-DMC1QVEg.cjs} +3 -2
- package/dist/src/{slack-BPYLQLgb.js → slack-DTEFhrMn.js} +1 -1
- package/dist/src/{slack-4zZX1OKP.js → slack-k-_CP84Q.js} +1 -1
- package/dist/src/storage-BU4qcnOb.js +875 -0
- package/dist/src/storage-CA-v9V2v.cjs +911 -0
- package/dist/src/storage-CD-GWAdx.js +822 -0
- package/dist/src/storage-QdU-SmvD.js +834 -0
- package/dist/src/{store-2K0kDi80.cjs → store-B2NDDooM.cjs} +60 -24
- package/dist/src/{store-CPh25336.js → store-DKd5592Q.js} +50 -19
- package/dist/src/{store-BPkzEyFM.js → store-HpopRVzl.js} +50 -19
- package/dist/src/store-IbiRIF3k.js +3 -0
- package/dist/src/strategies-7CS3Alao.cjs +2360 -0
- package/dist/src/strategies-CiSeroPH.js +2331 -0
- package/dist/src/strategies-DRJjGTIY.js +2333 -0
- package/dist/src/{tables-WgdUZ8Ck.js → tables-CRSXQ2Ke.js} +2 -2
- package/dist/src/{tables-BMSOS2Gg.js → tables-CxjU7bBd.js} +2 -2
- package/dist/src/{tables-CXbaZ9y1.cjs → tables-DBIJU0WE.cjs} +6 -5
- package/dist/src/{tables-NlvH23ky.js → tables-DafUHOeh.js} +2 -2
- package/dist/src/{telemetry-DWdGHvEf.js → telemetry-00ezXr_t.js} +4 -4
- package/dist/src/telemetry-ByPqDcKC.js +3 -0
- package/dist/src/{telemetry-CEQxGnMZ.cjs → telemetry-CJ7FnCsc.cjs} +15 -9
- package/dist/src/{telemetry--iqaGyaS.js → telemetry-DmXYcJNV.js} +4 -4
- package/dist/src/{telemetry-CgdVGV8N.js → telemetry-DwX9XUN5.js} +4 -4
- package/dist/src/{text-DDQP0tuQ.js → text-CZr46tp_.js} +1 -1
- package/dist/src/{text-D4lz-Jg_.js → text-Db-Wt2u2.js} +1 -1
- package/dist/src/{text-NWvfMfkF.js → text-DwYK5EBn.js} +1 -1
- package/dist/src/{text-BiNME7QG.cjs → text-nywWsRBM.cjs} +1 -1
- package/dist/src/{tokenUsageUtils-2wIvAhB3.js → tokenUsageUtils-CDet74yk.js} +1 -1
- package/dist/src/{tokenUsageUtils-4c780gFd.js → tokenUsageUtils-CmnQ0G2m.js} +1 -1
- package/dist/src/{tokenUsageUtils-C9odhsbW.cjs → tokenUsageUtils-_B-P8IAi.cjs} +1 -1
- package/dist/src/toolAttributes-BAjwcBf0.cjs +103 -0
- package/dist/src/toolAttributes-COVgDrBG.js +87 -0
- package/dist/src/toolAttributes-DJ9ZEKXD.js +86 -0
- package/dist/src/tracingOptions-BnwKCkSB.js +221 -0
- package/dist/src/tracingOptions-Chi74lOD.js +219 -0
- package/dist/src/tracingOptions-DrbSFaKy.cjs +249 -0
- package/dist/src/tracingOptions-ji2OuXbT.js +220 -0
- package/dist/src/{transcription-84t4ALo2.js → transcription-B8uIgCYX.js} +5 -5
- package/dist/src/{transcription-Bm2emLmJ.js → transcription-CfU5loSq.js} +5 -5
- package/dist/src/{transcription-D7Q0vJsh.js → transcription-Dkd22_4K.js} +4 -4
- package/dist/src/{transcription-CZ4LG5hQ.cjs → transcription-mzuf18Mq.cjs} +9 -8
- package/dist/src/{transform-DtooZqYY.js → transform-BIMynQsA.js} +8 -8
- package/dist/src/transform-BnSTnFlp.js +187 -0
- package/dist/src/transform-BnSXWmU_2.cjs +221 -0
- package/dist/src/transform-CGt7Kt3y2.js +186 -0
- package/dist/src/transform-CrPGTsij.js +186 -0
- package/dist/src/{transform-Dg4LcO1Y.cjs → transform-DhNkAUs8.cjs} +12 -11
- package/dist/src/{transform-_DpNB4qp.js → transform-DmvYBRll.js} +8 -8
- package/dist/src/{transform-B-b6Cq-q.js → transform-EtD4jAWi.js} +8 -8
- package/dist/src/{transformersAvailability-lvCCvuPT.js → transformersAvailability-0ThtPved.js} +1 -1
- package/dist/src/transformersAvailability-BYydDE5U.js +35 -0
- package/dist/src/{transformersAvailability-rJGPccjr.js → transformersAvailability-BvyU9vDD.js} +1 -1
- package/dist/src/{transformersAvailability-B22swDxr.cjs → transformersAvailability-BytPvKUW.cjs} +1 -1
- package/dist/src/{types-BVH9hjgW.js → types-BFevViUY.js} +113 -19
- package/dist/src/{types-BDjGOq4E.js → types-BJQBBPTP.js} +113 -19
- package/dist/src/{types-CgG2rKiW.cjs → types-CxJvaY2S.cjs} +211 -28
- package/dist/src/{types-DNRZVOue.js → types-D6glLbdF.js} +125 -26
- package/dist/src/{util-DFPeFkiV.js → util--WMgw7wM.js} +28 -8
- package/dist/src/{util-C-kmRosx.js → util-5WnCSb0h.js} +9 -7
- package/dist/src/{util-A5_ZsQUn.cjs → util-BSIuSLVK.cjs} +12 -9
- package/dist/src/{util-Dub0f_ej.js → util-Bx677_k2.js} +17 -10
- package/dist/src/util-CN8om2rz.cjs +386 -0
- package/dist/src/{util-DN0-b81k.js → util-CoQWM76y.js} +28 -8
- package/dist/src/util-DNl96nNs.js +327 -0
- package/dist/src/{util-BQOCAHQC.js → util-DURocbYR.js} +46 -11
- package/dist/src/util-Df8YMvS1.js +327 -0
- package/dist/src/{util-BVXcTwXu.js → util-DiQ3QvBB.js} +28 -8
- package/dist/src/{util-3pBZZb_H.js → util-I-Rf-KaD.js} +45 -10
- package/dist/src/{util-Dpmm_dAI.cjs → util-IYzs5Y04.cjs} +33 -7
- package/dist/src/{util-BlFVL0UF.js → util-LKTmNsMQ.js} +9 -7
- package/dist/src/{util-DvpHnLt0.cjs → util-SPsvFONY.cjs} +29 -21
- package/dist/src/{util-B9CNhyac.js → util-efByNxcr.js} +9 -7
- package/dist/src/util-kDURhgJW.js +328 -0
- package/dist/src/{utils-BUMN8orw.js → utils-B0lzitHZ.js} +2 -2
- package/dist/src/{utils-kt7lv30R.js → utils-BFOh20Gb.js} +2 -2
- package/dist/src/{utils-o8S5huU2.js → utils-BGY69tk_.js} +2 -2
- package/dist/src/{utils-DkVeShIB.cjs → utils-Ve6kuJsa.cjs} +3 -3
- package/dist/src/{version-CbuBKu2U.js → version-BK20a4sw.js} +2 -2
- package/dist/src/{version-D9zu9FWB.cjs → version-BWCSaByA.cjs} +2 -2
- package/dist/src/{version-CbpiUINz.js → version-eRkNuGv8.js} +2 -2
- package/dist/src/{version-0frU0UTr.js → version-lpHV_53E.js} +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +48 -22
- package/dist/src/app/assets/Report-vjzrbgce.js +0 -1
- package/dist/src/app/assets/index-B3NQ8HTd.js +0 -385
- package/dist/src/app/assets/index-Cli2yAXv.css +0 -1
- package/dist/src/app/assets/sync-IjzpWrOE.js +0 -4
- package/dist/src/app/assets/vendor-charts-BNdH8TCw.js +0 -36
- package/dist/src/cache-BRkhlH3k.cjs +0 -3
- package/dist/src/cache-BlC6aeJ0.js +0 -3
- package/dist/src/cloud-CoD5OacT.js +0 -3
- package/dist/src/codex-sdk-1jm_qPHf.js +0 -3
- package/dist/src/codex-sdk-Danroptg.cjs +0 -2
- package/dist/src/evalResult-BBJAHAtw.cjs +0 -2
- package/dist/src/evalResult-BBK58h2B.js +0 -3
- package/dist/src/evalResult-spPqh1G_.js +0 -2
- package/dist/src/evaluator-DgLKaZk8.js +0 -3
- package/dist/src/fetch-8viavNv8.js +0 -3
- package/dist/src/graders-C84JI-m5.js +0 -2
- package/dist/src/graders-CBbd0K0Q.cjs +0 -2
- package/dist/src/graders-CbQqpHSN.js +0 -3
- package/dist/src/graders-DS42d3ZG.js +0 -2
- package/dist/src/image-BmilRNqO.js +0 -258
- package/dist/src/image-CxJoa3aW.cjs +0 -280
- package/dist/src/image-DsGRlkh7.js +0 -257
- package/dist/src/image-a_SGUobh.js +0 -257
- package/dist/src/providers-BuyzKt7C.js +0 -2
- package/dist/src/providers-C7lNVBjX.cjs +0 -3
- package/dist/src/providers-CCE2COJi2.js +0 -2
- package/dist/src/render-7uNJ2V14.js +0 -135
- package/dist/src/render-DlscvAUJ.js +0 -135
- package/dist/src/render-eui5p5mL.js +0 -136
- package/dist/src/render-tG6ir9_g.cjs +0 -165
- package/dist/src/rubyUtils-4hjGxvju.js +0 -3
- package/dist/src/rubyUtils-CO-tuszQ.cjs +0 -2
- package/dist/src/server-ByiF3qlg.js +0 -386
- package/dist/src/server-C0XKRNB_.cjs +0 -2
- package/dist/src/server-C_15p79-.js +0 -3
- package/dist/src/store-2OXm_eBY.js +0 -240
- package/dist/src/store-BELqNwvz.js +0 -3
- package/dist/src/store-uQZ4AjPe.cjs +0 -2
- package/dist/src/telemetry-DjNoC_n3.cjs +0 -2
- package/dist/src/telemetry-ZdPZc0fm.js +0 -3
- package/dist/src/transform-BQt0BeAW.js +0 -3
- package/dist/src/transform-Bq5oqC0s.cjs +0 -2
- package/dist/src/transform-C9izGX54.cjs +0 -228
- package/dist/src/transform-CwbAZ84V.js +0 -216
- package/dist/src/transform-DzCF-wqV.js +0 -213
- package/dist/src/transform-eGiUAv86.js +0 -216
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { a as logger } from "./logger-KD8JjCRJ.js";
|
|
2
2
|
import { t as getDirectory } from "./esm-B6whoAcf.js";
|
|
3
|
-
import {
|
|
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-
|
|
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-
|
|
3
|
-
import { t as getTraceStore } from "./store-
|
|
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-
|
|
581
|
+
//# sourceMappingURL=otlpReceiver-BXjcRqAM.js.map
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const
|
|
1
|
+
const require_rolldown_runtime = require("./rolldown-runtime-D_mwlA32.cjs");
|
|
2
|
+
const require_logger = require("./logger-cfNpzI4o.cjs");
|
|
3
|
+
const require_esm = require("./esm-BIKakvNa.cjs");
|
|
4
|
+
const require_store = require("./store-B2NDDooM.cjs");
|
|
5
|
+
const require_resourceAttributes = require("./resourceAttributes-ephgOvdR.cjs");
|
|
4
6
|
let path = require("path");
|
|
5
|
-
path =
|
|
7
|
+
path = require_rolldown_runtime.__toESM(path, 1);
|
|
8
|
+
let node_crypto = require("node:crypto");
|
|
9
|
+
node_crypto = require_rolldown_runtime.__toESM(node_crypto, 1);
|
|
6
10
|
let express = require("express");
|
|
7
|
-
express =
|
|
11
|
+
express = require_rolldown_runtime.__toESM(express, 1);
|
|
8
12
|
let protobufjs = require("protobufjs");
|
|
9
|
-
protobufjs =
|
|
13
|
+
protobufjs = require_rolldown_runtime.__toESM(protobufjs, 1);
|
|
10
14
|
//#region src/tracing/protobuf.ts
|
|
11
15
|
/**
|
|
12
16
|
* OTLP Protobuf decoder for trace data
|
|
@@ -85,6 +89,33 @@ async function decodeExportTraceServiceRequest(data) {
|
|
|
85
89
|
}
|
|
86
90
|
//#endregion
|
|
87
91
|
//#region src/tracing/otlpReceiver.ts
|
|
92
|
+
const LOG_EVENT_NAME_DENYLIST = new Set(["claude_code.tracing"]);
|
|
93
|
+
const LOG_SPAN_DURATION_MS = 1;
|
|
94
|
+
const MAX_BODY_AS_NAME_LENGTH = 128;
|
|
95
|
+
const SEVERITY_NUMBER_ERROR = 17;
|
|
96
|
+
const MAX_LOG_BODY_ATTR_LENGTH = 8192;
|
|
97
|
+
function truncateLogBody(value) {
|
|
98
|
+
if (typeof value !== "string") return value;
|
|
99
|
+
if (value.length <= MAX_LOG_BODY_ATTR_LENGTH) return value;
|
|
100
|
+
return `${value.slice(0, MAX_LOG_BODY_ATTR_LENGTH - 15)}... [truncated]`;
|
|
101
|
+
}
|
|
102
|
+
const BASE64_ZERO_SPAN_ID = /^A{11,12}=?$/;
|
|
103
|
+
function isZeroSpanId(id) {
|
|
104
|
+
return /^0+$/.test(id) || BASE64_ZERO_SPAN_ID.test(id);
|
|
105
|
+
}
|
|
106
|
+
function randomSpanId() {
|
|
107
|
+
return node_crypto.default.randomBytes(8).toString("hex");
|
|
108
|
+
}
|
|
109
|
+
function getStringAttribute(attributes, key) {
|
|
110
|
+
const value = attributes[key];
|
|
111
|
+
return typeof value === "string" ? value : void 0;
|
|
112
|
+
}
|
|
113
|
+
function resolveLogSpanName(attributes, bodyValue) {
|
|
114
|
+
const eventName = attributes["event.name"] ?? attributes["claude_code.event.name"];
|
|
115
|
+
if (typeof eventName === "string" && eventName.length > 0) return eventName;
|
|
116
|
+
if (typeof bodyValue === "string" && bodyValue.length > 0 && bodyValue.length <= MAX_BODY_AS_NAME_LENGTH) return bodyValue;
|
|
117
|
+
return "otel.log";
|
|
118
|
+
}
|
|
88
119
|
const SPAN_KIND_MAP = {
|
|
89
120
|
0: "unspecified",
|
|
90
121
|
1: "internal",
|
|
@@ -143,6 +174,21 @@ var OTLPReceiver = class {
|
|
|
143
174
|
limit: "10mb",
|
|
144
175
|
type: (req) => this.acceptFormats.includes("protobuf") && getRequestFormat(req.headers["content-type"]) === "protobuf"
|
|
145
176
|
}));
|
|
177
|
+
this.app.use("/v1/logs", (req, res, next) => {
|
|
178
|
+
if (req.method !== "POST") {
|
|
179
|
+
next();
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (getRequestFormat(req.headers["content-type"]) !== "json") {
|
|
183
|
+
res.status(415).json({ error: "Only application/json is supported for /v1/logs" });
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
next();
|
|
187
|
+
});
|
|
188
|
+
this.app.use("/v1/logs", express.default.json({
|
|
189
|
+
limit: "10mb",
|
|
190
|
+
type: (req) => getRequestFormat(req.headers["content-type"]) === "json"
|
|
191
|
+
}));
|
|
146
192
|
require_logger.logger.debug("[OtlpReceiver] Middleware configured for accepted OTLP formats");
|
|
147
193
|
}
|
|
148
194
|
setupRoutes() {
|
|
@@ -166,6 +212,17 @@ var OTLPReceiver = class {
|
|
|
166
212
|
this.handleProcessingError(error, res);
|
|
167
213
|
}
|
|
168
214
|
});
|
|
215
|
+
this.app.post("/v1/logs", async (req, res) => {
|
|
216
|
+
require_logger.logger.debug("[OtlpReceiver] Received logs request");
|
|
217
|
+
try {
|
|
218
|
+
const traces = this.parseOTLPLogsJSONRequest(req.body);
|
|
219
|
+
require_logger.logger.debug(`[OtlpReceiver] Parsed ${traces.length} logs into span records`);
|
|
220
|
+
if (traces.length > 0) await this.persistTraces(this.groupTraces(traces));
|
|
221
|
+
res.status(200).json({ partialSuccess: {} });
|
|
222
|
+
} catch (error) {
|
|
223
|
+
this.handleProcessingError(error, res);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
169
226
|
this.app.get("/health", (_req, res) => {
|
|
170
227
|
require_logger.logger.debug("[OtlpReceiver] Health check requested");
|
|
171
228
|
res.status(200).json({ status: "ok" });
|
|
@@ -297,6 +354,67 @@ var OTLPReceiver = class {
|
|
|
297
354
|
}
|
|
298
355
|
return traces;
|
|
299
356
|
}
|
|
357
|
+
parseOTLPLogsJSONRequest(body) {
|
|
358
|
+
const traces = [];
|
|
359
|
+
const resourceLogs = body?.resourceLogs ?? [];
|
|
360
|
+
require_logger.logger.debug(`[OtlpReceiver] Parsing logs request with ${resourceLogs.length} resource logs`);
|
|
361
|
+
for (const resourceLog of resourceLogs) {
|
|
362
|
+
const resourceAttributes = this.parseAttributes(resourceLog.resource?.attributes);
|
|
363
|
+
for (const scopeLog of resourceLog.scopeLogs ?? []) for (const log of scopeLog.logRecords ?? []) try {
|
|
364
|
+
const parsed = this.logRecordToParsedTrace(log, scopeLog, resourceAttributes);
|
|
365
|
+
if (parsed) traces.push(parsed);
|
|
366
|
+
} catch (err) {
|
|
367
|
+
require_logger.logger.warn(`[OtlpReceiver] Skipping malformed log record in scope ${scopeLog.scope?.name ?? "(unknown)"}: ${err}`);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return traces;
|
|
371
|
+
}
|
|
372
|
+
logRecordToParsedTrace(log, scopeLog, resourceAttributes) {
|
|
373
|
+
const rawTraceId = log.traceId ?? getStringAttribute(resourceAttributes, "promptfoo.trace_id");
|
|
374
|
+
if (!rawTraceId) {
|
|
375
|
+
require_logger.logger.debug(`[OtlpReceiver] Dropping log: no traceId and no ${require_resourceAttributes.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.`);
|
|
376
|
+
return null;
|
|
377
|
+
}
|
|
378
|
+
const traceId = this.convertId(rawTraceId, 32);
|
|
379
|
+
if (traceId.length !== 32 || !/^[0-9a-f]+$/.test(traceId)) {
|
|
380
|
+
require_logger.logger.debug(`[OtlpReceiver] Dropping log: invalid trace_id shape '${rawTraceId}'`);
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
const attributes = {
|
|
384
|
+
...resourceAttributes,
|
|
385
|
+
...this.parseAttributes(log.attributes),
|
|
386
|
+
"otel.scope.name": scopeLog.scope?.name,
|
|
387
|
+
"otel.scope.version": scopeLog.scope?.version,
|
|
388
|
+
"otel.log.severity_number": log.severityNumber,
|
|
389
|
+
"otel.log.severity_text": log.severityText
|
|
390
|
+
};
|
|
391
|
+
const bodyValue = log.body ? this.parseAttributeValue(log.body) : void 0;
|
|
392
|
+
const name = resolveLogSpanName(attributes, bodyValue);
|
|
393
|
+
if (LOG_EVENT_NAME_DENYLIST.has(name)) {
|
|
394
|
+
require_logger.logger.debug(`[OtlpReceiver] Dropping log: event '${name}' is in the denylist`);
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
if (bodyValue !== void 0) attributes["otel.log.body"] = truncateLogBody(bodyValue);
|
|
398
|
+
const timeNano = log.timeUnixNano ?? log.observedTimeUnixNano;
|
|
399
|
+
const startTime = timeNano ? Number(timeNano) / 1e6 : Date.now();
|
|
400
|
+
const endTime = startTime + LOG_SPAN_DURATION_MS;
|
|
401
|
+
const rawParentSpanId = !!log.spanId && !isZeroSpanId(log.spanId) ? log.spanId : getStringAttribute(resourceAttributes, require_resourceAttributes.PROMPTFOO_RESOURCE_ATTR_PARENT_SPAN_ID);
|
|
402
|
+
const parentSpanId = rawParentSpanId ? this.convertId(rawParentSpanId, 16) : void 0;
|
|
403
|
+
const severityIsError = typeof log.severityNumber === "number" && log.severityNumber >= SEVERITY_NUMBER_ERROR;
|
|
404
|
+
return {
|
|
405
|
+
traceId,
|
|
406
|
+
span: {
|
|
407
|
+
spanId: randomSpanId(),
|
|
408
|
+
parentSpanId,
|
|
409
|
+
name,
|
|
410
|
+
startTime,
|
|
411
|
+
endTime,
|
|
412
|
+
attributes,
|
|
413
|
+
statusCode: 1,
|
|
414
|
+
statusMessage: severityIsError ? log.severityText : void 0
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
}
|
|
300
418
|
async parseOTLPProtobufRequest(body) {
|
|
301
419
|
const decoded = await decodeExportTraceServiceRequest(body);
|
|
302
420
|
require_logger.logger.debug(`[OtlpReceiver] Parsing protobuf request with ${decoded.resourceSpans?.length || 0} resource spans`);
|
|
@@ -466,4 +584,4 @@ async function stopOTLPReceiver() {
|
|
|
466
584
|
exports.startOTLPReceiver = startOTLPReceiver;
|
|
467
585
|
exports.stopOTLPReceiver = stopOTLPReceiver;
|
|
468
586
|
|
|
469
|
-
//# sourceMappingURL=otlpReceiver-
|
|
587
|
+
//# sourceMappingURL=otlpReceiver-CvJdBGSc.cjs.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { i as resolvePackageEntryPoint, r as importModule } from "./esm-Bexx2PFc.js";
|
|
3
|
+
import path from "path";
|
|
4
|
+
//#region src/providers/packageParser.ts
|
|
5
|
+
function getValue(obj, path) {
|
|
6
|
+
return path.split(".").reduce((acc, key) => {
|
|
7
|
+
return acc && acc[key] !== void 0 ? acc[key] : void 0;
|
|
8
|
+
}, obj);
|
|
9
|
+
}
|
|
10
|
+
function isPackagePath(path) {
|
|
11
|
+
return typeof path === "string" && path.startsWith("package:");
|
|
12
|
+
}
|
|
13
|
+
async function loadFromPackage(packageInstancePath, basePath) {
|
|
14
|
+
const [, packageName, entityName] = packageInstancePath.split(":");
|
|
15
|
+
if (!packageName || !entityName) throw new Error(`Invalid package format: ${packageInstancePath}. Expected format: package:packageName:exportedClassOrFunction`);
|
|
16
|
+
const filePath = resolvePackageEntryPoint(packageName, path.resolve(basePath));
|
|
17
|
+
if (!filePath) throw new Error(`Package not found: ${packageName}. Make sure it's installed in ${basePath}`);
|
|
18
|
+
let module;
|
|
19
|
+
try {
|
|
20
|
+
module = await importModule(filePath);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
throw new Error(`Failed to import module: ${packageName}. Error: ${error}`);
|
|
23
|
+
}
|
|
24
|
+
const entity = getValue(module, entityName);
|
|
25
|
+
if (entity === void 0) throw new Error(`Could not find entity: ${entityName} in module: ${filePath}. Make sure the entity is exported from the package.`);
|
|
26
|
+
return entity;
|
|
27
|
+
}
|
|
28
|
+
async function parsePackageProvider(providerPath, basePath, options) {
|
|
29
|
+
const Provider = await loadFromPackage(providerPath, basePath);
|
|
30
|
+
if (typeof Provider !== "function") throw new Error(`Provider malformed: ${providerPath} must export a provider constructor. Received: ${typeof Provider}`);
|
|
31
|
+
return new Provider(options);
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { loadFromPackage as n, parsePackageProvider as r, isPackagePath as t };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=packageParser--MWTSrPW.js.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { i as resolvePackageEntryPoint, r as importModule } from "./esm-BTK1W7lG.js";
|
|
2
|
+
import path from "path";
|
|
3
|
+
//#region src/providers/packageParser.ts
|
|
4
|
+
function getValue(obj, path) {
|
|
5
|
+
return path.split(".").reduce((acc, key) => {
|
|
6
|
+
return acc && acc[key] !== void 0 ? acc[key] : void 0;
|
|
7
|
+
}, obj);
|
|
8
|
+
}
|
|
9
|
+
function isPackagePath(path) {
|
|
10
|
+
return typeof path === "string" && path.startsWith("package:");
|
|
11
|
+
}
|
|
12
|
+
async function loadFromPackage(packageInstancePath, basePath) {
|
|
13
|
+
const [, packageName, entityName] = packageInstancePath.split(":");
|
|
14
|
+
if (!packageName || !entityName) throw new Error(`Invalid package format: ${packageInstancePath}. Expected format: package:packageName:exportedClassOrFunction`);
|
|
15
|
+
const filePath = resolvePackageEntryPoint(packageName, path.resolve(basePath));
|
|
16
|
+
if (!filePath) throw new Error(`Package not found: ${packageName}. Make sure it's installed in ${basePath}`);
|
|
17
|
+
let module;
|
|
18
|
+
try {
|
|
19
|
+
module = await importModule(filePath);
|
|
20
|
+
} catch (error) {
|
|
21
|
+
throw new Error(`Failed to import module: ${packageName}. Error: ${error}`);
|
|
22
|
+
}
|
|
23
|
+
const entity = getValue(module, entityName);
|
|
24
|
+
if (entity === void 0) throw new Error(`Could not find entity: ${entityName} in module: ${filePath}. Make sure the entity is exported from the package.`);
|
|
25
|
+
return entity;
|
|
26
|
+
}
|
|
27
|
+
async function parsePackageProvider(providerPath, basePath, options) {
|
|
28
|
+
const Provider = await loadFromPackage(providerPath, basePath);
|
|
29
|
+
if (typeof Provider !== "function") throw new Error(`Provider malformed: ${providerPath} must export a provider constructor. Received: ${typeof Provider}`);
|
|
30
|
+
return new Provider(options);
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { loadFromPackage as n, parsePackageProvider as r, isPackagePath as t };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=packageParser-CgE-ziRo.js.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const require_rolldown_runtime = require("./rolldown-runtime-D_mwlA32.cjs");
|
|
2
|
+
const require_esm = require("./esm-BIKakvNa.cjs");
|
|
3
|
+
let path = require("path");
|
|
4
|
+
path = require_rolldown_runtime.__toESM(path, 1);
|
|
5
|
+
//#region src/providers/packageParser.ts
|
|
6
|
+
function getValue(obj, path$2) {
|
|
7
|
+
return path$2.split(".").reduce((acc, key) => {
|
|
8
|
+
return acc && acc[key] !== void 0 ? acc[key] : void 0;
|
|
9
|
+
}, obj);
|
|
10
|
+
}
|
|
11
|
+
function isPackagePath(path$3) {
|
|
12
|
+
return typeof path$3 === "string" && path$3.startsWith("package:");
|
|
13
|
+
}
|
|
14
|
+
async function loadFromPackage(packageInstancePath, basePath) {
|
|
15
|
+
const [, packageName, entityName] = packageInstancePath.split(":");
|
|
16
|
+
if (!packageName || !entityName) throw new Error(`Invalid package format: ${packageInstancePath}. Expected format: package:packageName:exportedClassOrFunction`);
|
|
17
|
+
const filePath = require_esm.resolvePackageEntryPoint(packageName, path.default.resolve(basePath));
|
|
18
|
+
if (!filePath) throw new Error(`Package not found: ${packageName}. Make sure it's installed in ${basePath}`);
|
|
19
|
+
let module;
|
|
20
|
+
try {
|
|
21
|
+
module = await require_esm.importModule(filePath);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
throw new Error(`Failed to import module: ${packageName}. Error: ${error}`);
|
|
24
|
+
}
|
|
25
|
+
const entity = getValue(module, entityName);
|
|
26
|
+
if (entity === void 0) throw new Error(`Could not find entity: ${entityName} in module: ${filePath}. Make sure the entity is exported from the package.`);
|
|
27
|
+
return entity;
|
|
28
|
+
}
|
|
29
|
+
async function parsePackageProvider(providerPath, basePath, options) {
|
|
30
|
+
const Provider = await loadFromPackage(providerPath, basePath);
|
|
31
|
+
if (typeof Provider !== "function") throw new Error(`Provider malformed: ${providerPath} must export a provider constructor. Received: ${typeof Provider}`);
|
|
32
|
+
return new Provider(options);
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
Object.defineProperty(exports, "isPackagePath", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function() {
|
|
38
|
+
return isPackagePath;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
Object.defineProperty(exports, "loadFromPackage", {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
get: function() {
|
|
44
|
+
return loadFromPackage;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
Object.defineProperty(exports, "parsePackageProvider", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
get: function() {
|
|
50
|
+
return parsePackageProvider;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=packageParser-QoCS1FMl.cjs.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { i as resolvePackageEntryPoint, r as importModule } from "./esm-B6whoAcf.js";
|
|
2
|
+
import path from "path";
|
|
3
|
+
//#region src/providers/packageParser.ts
|
|
4
|
+
function getValue(obj, path) {
|
|
5
|
+
return path.split(".").reduce((acc, key) => {
|
|
6
|
+
return acc && acc[key] !== void 0 ? acc[key] : void 0;
|
|
7
|
+
}, obj);
|
|
8
|
+
}
|
|
9
|
+
function isPackagePath(path) {
|
|
10
|
+
return typeof path === "string" && path.startsWith("package:");
|
|
11
|
+
}
|
|
12
|
+
async function loadFromPackage(packageInstancePath, basePath) {
|
|
13
|
+
const [, packageName, entityName] = packageInstancePath.split(":");
|
|
14
|
+
if (!packageName || !entityName) throw new Error(`Invalid package format: ${packageInstancePath}. Expected format: package:packageName:exportedClassOrFunction`);
|
|
15
|
+
const filePath = resolvePackageEntryPoint(packageName, path.resolve(basePath));
|
|
16
|
+
if (!filePath) throw new Error(`Package not found: ${packageName}. Make sure it's installed in ${basePath}`);
|
|
17
|
+
let module;
|
|
18
|
+
try {
|
|
19
|
+
module = await importModule(filePath);
|
|
20
|
+
} catch (error) {
|
|
21
|
+
throw new Error(`Failed to import module: ${packageName}. Error: ${error}`);
|
|
22
|
+
}
|
|
23
|
+
const entity = getValue(module, entityName);
|
|
24
|
+
if (entity === void 0) throw new Error(`Could not find entity: ${entityName} in module: ${filePath}. Make sure the entity is exported from the package.`);
|
|
25
|
+
return entity;
|
|
26
|
+
}
|
|
27
|
+
async function parsePackageProvider(providerPath, basePath, options) {
|
|
28
|
+
const Provider = await loadFromPackage(providerPath, basePath);
|
|
29
|
+
if (typeof Provider !== "function") throw new Error(`Provider malformed: ${providerPath} must export a provider constructor. Received: ${typeof Provider}`);
|
|
30
|
+
return new Provider(options);
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { loadFromPackage as n, parsePackageProvider as r, isPackagePath as t };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=packageParser-hwwSGnAZ.js.map
|