promptfoo 0.120.27 → 0.121.2
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/README.md +1 -1
- package/dist/src/{ListApp-8WOe2nT6.js → ListApp-Du7YVwj5.js} +2 -4
- package/dist/src/accounts-B0pgC1oV.js +206 -0
- package/dist/src/{accounts-DVINui-2.js → accounts-Bm2D8Db9.js} +39 -34
- package/dist/src/{accounts-CPDRAMND.js → accounts-CiBLOnA7.js} +38 -33
- package/dist/src/{accounts-Fl2J3_Fu.cjs → accounts-gtkH-5KX.cjs} +77 -78
- package/dist/src/{agentic-utils-D922n6mm.js → agentic-utils-DS1g3GLF.js} +9 -10
- package/dist/src/{agents-BcsN_BgB.js → agents-9qiOy0ho.js} +16 -12
- package/dist/src/{agents-BXLmVsxR.js → agents-CBr9A01V.js} +37 -37
- package/dist/src/{agents-pMfppv9Z.js → agents-CmvBq8LV.js} +16 -18
- package/dist/src/{agents-hqgSV-3o.js → agents-D__IdAlg.js} +39 -40
- package/dist/src/{agents-BO2n8Z0d.cjs → agents-DbRtpYxR.cjs} +37 -40
- package/dist/src/{agents-BdUTAwi-.js → agents-DgF2zDag.js} +37 -42
- package/dist/src/{agents-DgJf2-ez.cjs → agents-Di9DKPzn.cjs} +16 -17
- package/dist/src/{agents-DNvSH78i.js → agents-cLXA8a_8.js} +17 -19
- package/dist/src/{aimlapi-DtgPI0nE.js → aimlapi-B4rcnZgv.js} +15 -17
- package/dist/src/{aimlapi-BE_Tg9Fl.cjs → aimlapi-BvlNH0gr.cjs} +15 -16
- package/dist/src/{aimlapi-DOib86oE.js → aimlapi-CnkC2HqE.js} +16 -18
- package/dist/src/{aimlapi-DTPACCB1.js → aimlapi-DHJU_kcV.js} +15 -4
- package/dist/src/app/assets/index-4LKxG2CG.js +439 -0
- package/dist/src/app/assets/{index-NCn4eVBv.css → index-C3zcsZFQ.css} +1 -1
- package/dist/src/app/assets/vendor-charts-BnDWwBlI.js +36 -0
- package/dist/src/app/index.html +3 -3
- package/dist/src/app/tsconfig.app.tsbuildinfo +1 -1
- package/dist/src/{audio-BnRUGAm_.js → audio-Bkv46et0.js} +6 -5
- package/dist/src/{audio-Cwo68yZS.cjs → audio-CGMyULza.cjs} +6 -7
- package/dist/src/{audio-MSRki4JU.js → audio-ClI_AFre.js} +6 -8
- package/dist/src/{audio-BRYU0BFo.js → audio-Dz3z7s3J.js} +7 -9
- package/dist/src/{base-pGVmXNl4.cjs → base-CGrhspbK.cjs} +36 -38
- package/dist/src/{base-h961VXYk.js → base-CpjcHe4e.js} +11 -13
- package/dist/src/base-DLKtKMFh.js +193 -0
- package/dist/src/{base-XB2tDJrB.js → base-Dy1V8--Z.js} +11 -13
- package/dist/src/blobs-BDbfYdrJ.js +236 -0
- package/dist/src/{blobs-CR5C4Ihh.js → blobs-CBO20krR.js} +9 -12
- package/dist/src/{blobs-BM_e6hCa.js → blobs-CMHN0Qcz.js} +9 -12
- package/dist/src/{blobs-B-KQAFhX.cjs → blobs-D23XLin-.cjs} +34 -37
- package/dist/src/{cache-jsiwsAJv.js → cache-BVeDlD87.js} +132 -117
- package/dist/src/{cache-CIpsoBZR.js → cache-C4Nxf52C.js} +132 -118
- package/dist/src/cache-CeUpFm3M.cjs +5 -0
- package/dist/src/{cache-BTVYfbka.cjs → cache-Dh5WtQps.cjs} +182 -168
- package/dist/src/cache-i1P6crbO.js +756 -0
- package/dist/src/cache-n-RCJ-hL.js +6 -0
- package/dist/src/{chat-BcPjZXIp.js → chat-BiKyneZl.js} +45 -46
- package/dist/src/{chat-D31K7C4u.cjs → chat-C1Qst7jL.cjs} +20 -21
- package/dist/src/{chat-B84t99NW.js → chat-C2jrdPMx.js} +20 -9
- package/dist/src/{chat-BE44YOc6.cjs → chat-CgF-J-Jj.cjs} +65 -66
- package/dist/src/{chat-DwWifjxi.js → chat-CzkrVDfz.js} +20 -22
- package/dist/src/chat-DJIw17u0.js +766 -0
- package/dist/src/{chat-CcUCysjU.js → chat-DqxYYtWA.js} +45 -46
- package/dist/src/{chat-DZM2GUHO.js → chat-qmatte1u.js} +21 -23
- package/dist/src/{chatkit-D67HS_0b.js → chatkit-65VXf5SR.js} +58 -58
- package/dist/src/{chatkit-DAB_qfzI.js → chatkit-Be-Q-a9F.js} +58 -60
- package/dist/src/{chatkit-Biqb_wsD.js → chatkit-BxFvW8KY.js} +58 -60
- package/dist/src/{chatkit-PGG4ZYIn.cjs → chatkit-DKyPi1Gs.cjs} +58 -60
- package/dist/src/chunk-DEq-mXcV.js +15 -0
- package/dist/src/chunk-DRamLcfz.js +16 -0
- package/dist/src/{claude-agent-sdk-SVM6AdBu.js → claude-agent-sdk-Apiy0iaz.js} +31 -31
- package/dist/src/{claude-agent-sdk-C-IOTPfo.js → claude-agent-sdk-D2bJee9S.js} +31 -29
- package/dist/src/{claude-agent-sdk-C9SiaQub.cjs → claude-agent-sdk-D9Z5Pr9X.cjs} +31 -28
- package/dist/src/{claude-agent-sdk-CiluSyW1.js → claude-agent-sdk-DfCoW0E6.js} +33 -20
- package/dist/src/cloud-BBh91EUK.js +4 -0
- package/dist/src/{cloud-CZ-q9Ier.js → cloud-C0dlstV_.js} +7 -9
- package/dist/src/{cloudflare-ai-BahKHyhh.js → cloudflare-ai-8TDxHR0x.js} +16 -18
- package/dist/src/{cloudflare-ai-v_qZD6_q.js → cloudflare-ai-BxAGvfju.js} +17 -19
- package/dist/src/{cloudflare-ai-Dfahv5SY.cjs → cloudflare-ai-CknbZ5LJ.cjs} +16 -17
- package/dist/src/{cloudflare-ai-Dxyt50Nl.js → cloudflare-ai-g7PB6VHR.js} +16 -4
- package/dist/src/{cloudflare-gateway-Bi_FpOFy.js → cloudflare-gateway-B9HWA5wf.js} +23 -23
- package/dist/src/{cloudflare-gateway-BPWoZIzJ.cjs → cloudflare-gateway-BSnDmHYo.cjs} +21 -22
- package/dist/src/{cloudflare-gateway-C0guUNwk.js → cloudflare-gateway-CKDb4dJ8.js} +26 -14
- package/dist/src/{cloudflare-gateway-btS7h1OZ.js → cloudflare-gateway-CP9QEWYS.js} +21 -25
- package/dist/src/{codex-sdk-DSxAnbfT.js → codex-sdk-C6UMlxwV.js} +28 -29
- package/dist/src/{codex-sdk-IYVi9fuM.js → codex-sdk-DUwKWezN.js} +28 -27
- package/dist/src/{codex-sdk-DulY0ZRq.js → codex-sdk-GGAw0qbD.js} +28 -29
- package/dist/src/{codex-sdk-DFKMtAyf.cjs → codex-sdk-fAO0c3yA.cjs} +28 -29
- package/dist/src/{cometapi-DzrR3SR_.js → cometapi-BL9yvj_f.js} +16 -4
- package/dist/src/{cometapi-DIO64tf4.cjs → cometapi-C4xSqeID.cjs} +21 -22
- package/dist/src/{cometapi-C9EEpJzT.js → cometapi-CUQq3H_a.js} +21 -24
- package/dist/src/{cometapi-DkNBMk0G.js → cometapi-DFNiKmSz.js} +17 -19
- package/dist/src/{completion-CG29bfKX.js → completion-5MzrpJxT.js} +11 -13
- package/dist/src/{completion-CCRT4kX1.cjs → completion-CM6oK8PS.cjs} +21 -23
- package/dist/src/{completion-Bgf1VJoq.js → completion-DZ083F31.js} +11 -13
- package/dist/src/completion-qRoZAYRB.js +120 -0
- package/dist/src/{createHash-Dw_iLu31.js → createHash-CTQmL3G2.js} +2 -3
- package/dist/src/{createHash-CYQy4YeL.cjs → createHash-CfZSc0b4.cjs} +13 -14
- package/dist/src/{createHash-CJcfskIZ.js → createHash-Da8fMwqB.js} +2 -3
- package/dist/src/createHash-DmPQkvBh.js +15 -0
- package/dist/src/{docker-D-ayp2FW.js → docker-Bb5dcxr8.js} +18 -20
- package/dist/src/{docker-B81N0t4e.js → docker-BvfL2BrW.js} +19 -21
- package/dist/src/{docker-DNcLR4Ig.cjs → docker-DcF2pRrj.cjs} +18 -19
- package/dist/src/{docker-egERKxCF.js → docker-ExVyLp0S.js} +18 -7
- package/dist/src/entrypoint.js +2 -3
- package/dist/src/{errors-DnGCbnx8.js → errors-P6ll7XSJ.js} +2 -2
- package/dist/src/{esm-B9dPm_BF.js → esm-C03C-mv3.js} +17 -20
- package/dist/src/{esm-D2pZ87fL.js → esm-CaIwzWR5.js} +18 -21
- package/dist/src/esm-Cd1AjG1D.js +379 -0
- package/dist/src/{esm-Ct-Joyue.cjs → esm-CnNt7sI4.cjs} +47 -49
- package/dist/src/eval-B3r2CVXr.js +15 -0
- package/dist/src/{eval-C-Nr6wX_.js → eval-Dg2nG4v2.js} +47 -54
- package/dist/src/evalResult-5xwYnECe.js +12 -0
- package/dist/src/evalResult-71lY93Kj.cjs +10 -0
- package/dist/src/{evalResult-DXMWJ3sx.js → evalResult-BBRNtX4I.js} +10 -11
- package/dist/src/{evalResult-4BzI2tmj.js → evalResult-BDMqrapS.js} +16 -12
- package/dist/src/evalResult-Dx5P5cIv.js +10 -0
- package/dist/src/{evalResult-CX8wQecI.cjs → evalResult-fuaI8HkH.cjs} +20 -21
- package/dist/src/{evaluator-8aGyV12L.js → evaluator-BhoWwp5b.js} +211 -235
- package/dist/src/evaluator-Jx6bRZV6.js +36 -0
- package/dist/src/{extractor-V5x_m1i0.js → extractor-C0EVHewb.js} +22 -24
- package/dist/src/extractor-D25qpmGX.js +374 -0
- package/dist/src/{extractor-CD5yKL-G.js → extractor-DReVID0K.js} +22 -24
- package/dist/src/{extractor-C031XmTA.cjs → extractor-pYLLi3wS.cjs} +37 -39
- package/dist/src/{fetch-BmbD-v1L.cjs → fetch-BPkYtG8K.cjs} +244 -277
- package/dist/src/fetch-BxNb_Lp3.js +5 -0
- package/dist/src/{fetch-D3OHf-lV.js → fetch-Cwxnd8zz.js} +36 -44
- package/dist/src/{fetch-CXZI9RRr.js → fetch-Dxpd4_sr.js} +23 -35
- package/dist/src/fetch-HaqdX7U1.js +780 -0
- package/dist/src/{fileExtensions-ePDqouxn.js → fileExtensions-DnqA1y9x.js} +2 -2
- package/dist/src/{fileExtensions-BpuMmaFL.js → fileExtensions-Ds-foDzt.js} +2 -2
- package/dist/src/fileExtensions-LcDYkU4v.js +85 -0
- package/dist/src/{fileExtensions-DkJYkWUy.cjs → fileExtensions-bYh77CN8.cjs} +27 -28
- package/dist/src/{formatDuration-CdevI3An.js → formatDuration-DgBVMN65.js} +2 -2
- package/dist/src/{genaiTracer-Ce19n68P.js → genaiTracer-70Z8BIuV.js} +2 -3
- package/dist/src/{genaiTracer-CqNnnXrE.js → genaiTracer-C1rxGO8Q.js} +2 -3
- package/dist/src/genaiTracer-D3fD9dNV.js +256 -0
- package/dist/src/{genaiTracer-Dres3qrN.cjs → genaiTracer-DN4dQywX.cjs} +13 -14
- package/dist/src/{graders--1y2u9HO.js → graders-BTeBGqjJ.js} +349 -397
- package/dist/src/graders-B_pgMLS2.js +34 -0
- package/dist/src/{graders-DTeBrzWp.js → graders-Bj_Odv7c.js} +349 -397
- package/dist/src/graders-DErokPDO.cjs +32 -0
- package/dist/src/graders-DP7KFFo-.js +13466 -0
- package/dist/src/graders-DR_uNe54.js +32 -0
- package/dist/src/{graders-DohM2dir.cjs → graders-DU49_J8Y.cjs} +684 -732
- package/dist/src/graders-w3176Wz-.js +32 -0
- package/dist/src/{image-B0U4Hqll.js → image-B02ogr_b.js} +7 -9
- package/dist/src/{image-DmE-niFE.js → image-B0h9VEMc.js} +6 -5
- package/dist/src/{image-CuKHuccK.cjs → image-BLmROtN3.cjs} +29 -30
- package/dist/src/{image-DNEIf_aI.js → image-Bb4vWQLM.js} +6 -8
- package/dist/src/{image-DpKl2F15.cjs → image-C1madmKh.cjs} +6 -7
- package/dist/src/{image-C3wHC9_h.js → image-CHfWvljl.js} +9 -10
- package/dist/src/{image-O1u4bCFg.js → image-DS-o-0ph.js} +9 -10
- package/dist/src/image-Dpxa1Jt6.js +257 -0
- package/dist/src/index.cjs +615 -695
- package/dist/src/index.d.cts +271 -7
- package/dist/src/index.d.ts +271 -3
- package/dist/src/index.js +580 -664
- package/dist/src/{interactiveCheck-Bxj1Swex.js → interactiveCheck-BgLZUIt3.js} +7 -8
- package/dist/src/{invariant-DT20jrBd.js → invariant-BtWWVVhl.js} +2 -2
- package/dist/src/{invariant-1pAf2CD1.js → invariant-Ddh24eXh.js} +2 -2
- package/dist/src/{invariant-CKcJAQ6M.cjs → invariant-kfQ8Bu82.cjs} +7 -8
- package/dist/src/invariant-vgHWClmd.js +25 -0
- package/dist/src/{knowledgeBase-CEzQobWX.js → knowledgeBase-B3OoKIej.js} +14 -9
- package/dist/src/{knowledgeBase-Be_zyW4L.js → knowledgeBase-CYTLHOt1.js} +16 -16
- package/dist/src/{knowledgeBase-BZ41IFwq.js → knowledgeBase-D33Ty2l6.js} +14 -18
- package/dist/src/{knowledgeBase-D-5BMXlr.cjs → knowledgeBase-DOO_BM9b.cjs} +14 -15
- package/dist/src/{litellm-DnbRJ2if.js → litellm-AaeZcZQF.js} +18 -19
- package/dist/src/{litellm-hUSNM_M2.cjs → litellm-I_hbp_dc.cjs} +17 -17
- package/dist/src/{litellm-CRDqPhNI.js → litellm-NbjknEh6.js} +17 -18
- package/dist/src/{litellm-9vR8zpfU.js → litellm-TrljxD9G.js} +17 -5
- package/dist/src/{logger-CG1uZPbQ.js → logger-CT3IKMKA.js} +10 -29
- package/dist/src/{logger-B7sBeGa0.cjs → logger-Cp1GPUjj.cjs} +152 -180
- package/dist/src/logger-DLcq4dWf.js +713 -0
- package/dist/src/{logger-LSBxlt7a.js → logger-KkObSCzq.js} +13 -31
- package/dist/src/{luma-ray-4blv9iZ2.js → luma-ray-BS2_tY8L.js} +22 -21
- package/dist/src/{luma-ray-drvgdpP9.js → luma-ray-DDsjcgZZ.js} +20 -13
- package/dist/src/{luma-ray-Hm3d6VJE.cjs → luma-ray-Due0n7di.cjs} +20 -21
- package/dist/src/{luma-ray-B2__8lYH.js → luma-ray-f6I2fft-.js} +20 -23
- package/dist/src/main.js +1170 -1321
- package/dist/src/{messages-Uee41Mj5.js → messages-BS17jdMx.js} +22 -24
- package/dist/src/{messages-XhiwCbi4.cjs → messages-Bs1kC7P4.cjs} +32 -34
- package/dist/src/{messages-CGPPidQr.js → messages-D0lx5qK7.js} +22 -24
- package/dist/src/messages-ZJk778GH.js +240 -0
- package/dist/src/{meteor-BYykdXrV.js → meteor-44VjEACX.js} +3 -4
- package/dist/src/{meteor-CsopaHrH.js → meteor-D-SotUw9.js} +3 -4
- package/dist/src/{meteor-e-E-2vVl.cjs → meteor-DLZZ3osF.cjs} +3 -4
- package/dist/src/{meteor-C8lGP6P4.js → meteor-DUiCJRC-.js} +3 -4
- package/dist/src/{modelslab-yKz-ZNB4.js → modelslab-Bmni6skY.js} +17 -10
- package/dist/src/{modelslab-E9gO-bYd.js → modelslab-Bx9IrZfS.js} +18 -20
- package/dist/src/{modelslab-lUVW0cmB.cjs → modelslab-CoUX6Jc_.cjs} +17 -18
- package/dist/src/{modelslab-ClBkr8_9.js → modelslab-DRb74SP4.js} +17 -19
- package/dist/src/{nova-reel-Dk8jNpId.js → nova-reel-BfPq-0Yk.js} +20 -13
- package/dist/src/{nova-reel-D8CuO6QH.cjs → nova-reel-C_QM18Xn.cjs} +20 -21
- package/dist/src/{nova-reel-u2eF2Cxm.js → nova-reel-D_W1tjMH.js} +22 -21
- package/dist/src/{nova-reel-P9bwvtYX.js → nova-reel-bgjxilYW.js} +20 -23
- package/dist/src/{nova-sonic-CK2rAiKi.js → nova-sonic-CFb5GYhg.js} +30 -26
- package/dist/src/{nova-sonic-BaqWlkds.js → nova-sonic-DIGQNR07.js} +30 -31
- package/dist/src/{nova-sonic-yZapPLv7.js → nova-sonic-De1HW5fD.js} +31 -32
- package/dist/src/{nova-sonic-Ds1C-dpm.cjs → nova-sonic-zfcljeRp.cjs} +30 -31
- package/dist/src/{openai-DUFopMrH.cjs → openai-Cuif0GEt.cjs} +8 -9
- package/dist/src/{openai-PblZ3jUE.js → openai-DElQ-fPX.js} +3 -4
- package/dist/src/{openai-CcN1B8Sb.js → openai-DhbB7eWK.js} +3 -4
- package/dist/src/openai-j-sE2O7r.js +44 -0
- package/dist/src/{openclaw-B6qqDr_u.cjs → openclaw-CSugPYAr.cjs} +188 -130
- package/dist/src/{openclaw-A-3_loM7.js → openclaw-DiSz3I5L.js} +180 -109
- package/dist/src/{openclaw-a3lylB-V.js → openclaw-DuvJKEW5.js} +178 -124
- package/dist/src/{openclaw-COn6QzDi.js → openclaw-tiVYRtr-.js} +178 -122
- package/dist/src/opencode-sdk-0j6rTWNb.js +562 -0
- package/dist/src/opencode-sdk-B3CWY9h_.js +560 -0
- package/dist/src/opencode-sdk-BL764Jdi.cjs +564 -0
- package/dist/src/opencode-sdk-C2y6UkP2.js +560 -0
- package/dist/src/{otlpReceiver-oyf5wLGC.js → otlpReceiver-C99PPb48.js} +53 -51
- package/dist/src/{otlpReceiver-lXsYVbpj.cjs → otlpReceiver-CGq6LspY.cjs} +53 -55
- package/dist/src/{otlpReceiver-94URx7UW.js → otlpReceiver-CdNBdbsk.js} +53 -55
- package/dist/src/{otlpReceiver-BmmTiMjA.js → otlpReceiver-D89fR-rC.js} +53 -55
- package/dist/src/{providerRegistry-Cq_JK_CJ.js → providerRegistry-B0RUOLI_.js} +7 -8
- package/dist/src/{providerRegistry-DSSHjMKf.js → providerRegistry-CD8MEar9.js} +7 -8
- package/dist/src/{providerRegistry-CvHEVJad.cjs → providerRegistry-Civky8Ar.cjs} +12 -13
- package/dist/src/providerRegistry-DM8rZYol.js +45 -0
- package/dist/src/providers-B7V0njNs.js +32 -0
- package/dist/src/providers-BEwbhv0X.js +30 -0
- package/dist/src/{providers-Iil64vk9.js → providers-BlqUifFg.js} +1543 -1676
- package/dist/src/providers-CH3C7zf7.js +30 -0
- package/dist/src/{providers-DHbjzW2e.cjs → providers-CgKOSgTR.cjs} +1896 -2029
- package/dist/src/providers-D8lF1sqW.js +33246 -0
- package/dist/src/{providers-BnFpbY_s.js → providers-Dk_6ocUX.js} +1536 -1669
- package/dist/src/providers-zyB6k_38.cjs +31 -0
- package/dist/src/{pythonUtils-CcT5LH1M.js → pythonUtils-C3py6GC1.js} +18 -19
- package/dist/src/{pythonUtils-DBbuI3QJ.cjs → pythonUtils-CTU3Y3lw.cjs} +42 -43
- package/dist/src/{pythonUtils-hZ8LeQLv.js → pythonUtils-D5nxkQ0P.js} +18 -19
- package/dist/src/pythonUtils-D6fwaDSg.js +249 -0
- package/dist/src/{quiverai-BuI0tE39.js → quiverai-BbOUOn2L.js} +8 -7
- package/dist/src/{quiverai-DCGSZt4U.js → quiverai-CIaELU_m.js} +8 -10
- package/dist/src/{quiverai-DiMVJQDz.cjs → quiverai-PdShCPox.cjs} +8 -9
- package/dist/src/{quiverai-fQNkExW4.js → quiverai-uH-dcTIr.js} +9 -11
- package/dist/src/{render-Dj1smHEb.js → render-Drod8m7K.js} +4 -5
- package/dist/src/responses-CB2jwoAr.js +660 -0
- package/dist/src/{responses-ghR3IOfy.cjs → responses-D8SBTL64.cjs} +39 -42
- package/dist/src/{responses-DOAFFENS.js → responses-DIR9Ud3j.js} +24 -27
- package/dist/src/{responses-CxzoQoBe.js → responses-WNGNYe3K.js} +24 -27
- package/dist/src/rubyUtils-BUHu6PhO.js +5 -0
- package/dist/src/{rubyUtils-CwbGmgYN.js → rubyUtils-BUVePouc.js} +27 -20
- package/dist/src/rubyUtils-BcuGX77l.js +222 -0
- package/dist/src/{rubyUtils-DudlFZed.js → rubyUtils-Boc4HZzX.js} +18 -19
- package/dist/src/rubyUtils-CP42kMvq.cjs +4 -0
- package/dist/src/{rubyUtils-C8MhKGHb.cjs → rubyUtils-DhCAlxZr.cjs} +48 -50
- package/dist/src/{sagemaker-gmskuyre.js → sagemaker-CNBxx5CJ.js} +75 -70
- package/dist/src/{sagemaker-CcxhlOAR.js → sagemaker-CemTFp2h.js} +75 -79
- package/dist/src/{sagemaker-77zbJ2Q2.cjs → sagemaker-Cl28mZU2.cjs} +75 -76
- package/dist/src/{sagemaker-DuM71dVU.js → sagemaker-YSyBXQQh.js} +77 -77
- package/dist/src/{scanner-DJYiSXQj.js → scanner-BsBlNXNn.js} +100 -121
- package/dist/src/server/index.js +5520 -67427
- package/dist/src/{server-B5v33lvE.cjs → server-C_7Ax-hA.cjs} +57 -67
- package/dist/src/{server-BJ4m4f1D.js → server-CqzrVGpF.js} +26 -29
- package/dist/src/server-CuxBbeSY.js +229 -0
- package/dist/src/server-DA4Cyrrq.js +7 -0
- package/dist/src/server-Dulb-4-K.cjs +5 -0
- package/dist/src/{server-RV_i_YX5.js → server-VWgWb00X.js} +19 -24
- package/dist/src/{signal-BW33JuId.js → signal-4U3mfRvL.js} +9 -11
- package/dist/src/{slack-DEURelTy.cjs → slack-BmVAVGaK.cjs} +7 -8
- package/dist/src/{slack-BQYeW9L3.js → slack-DCUPTzS2.js} +8 -8
- package/dist/src/{slack-BB6yuZzp.js → slack-DOdy_kyv.js} +7 -8
- package/dist/src/{slack-2pRrhhgJ.js → slack-DXMKtA-f.js} +7 -9
- package/dist/src/store-CXGFv4aR.js +228 -0
- package/dist/src/store-CXS-Q_91.js +6 -0
- package/dist/src/{store-D7CgQzAR.cjs → store-DLlFCC4h.cjs} +44 -45
- package/dist/src/{store-DJNsD1iC.js → store-DXilxTl-.js} +40 -36
- package/dist/src/{store-s3SftUwF.js → store-Dim__MDd.js} +34 -35
- package/dist/src/store-eYkaKMwq.cjs +5 -0
- package/dist/src/{tables-DfTsNN7X.js → tables-6YKwjN9-.js} +19 -21
- package/dist/src/tables-DLJPUdUE.js +288 -0
- package/dist/src/{tables-BKTmd6u7.cjs → tables-DPi7wKeM.cjs} +89 -91
- package/dist/src/{tables-DMegD0Xf.js → tables-gftXzE9I.js} +21 -23
- package/dist/src/telemetry-BpMfhthR.cjs +5 -0
- package/dist/src/{telemetry--WAdAfVi.js → telemetry-CMrFgtPB.js} +11 -13
- package/dist/src/telemetry-Cps3mIU-.js +171 -0
- package/dist/src/{telemetry-DQgVBCAb.cjs → telemetry-DaX14Chu.cjs} +21 -24
- package/dist/src/{telemetry-BedSm-bZ.js → telemetry-Dthj_BbD.js} +17 -14
- package/dist/src/telemetry-Dw38hanS.js +7 -0
- package/dist/src/{text-oiSbwSOI.js → text-B_UCRPp2.js} +2 -2
- package/dist/src/{text-oKzCBnK6.cjs → text-CW1cyrwj.cjs} +12 -13
- package/dist/src/{text-B_IrO4GZ.js → text-Db-Wt2u2.js} +2 -2
- package/dist/src/text-TIv0QYnd.js +22 -0
- package/dist/src/{tokenUsageUtils-FZd5O_4A.js → tokenUsageUtils-BDGe-iyI.js} +2 -2
- package/dist/src/{tokenUsageUtils-DmZSD2eU.js → tokenUsageUtils-DflFMjS0.js} +2 -2
- package/dist/src/tokenUsageUtils-NYT-WKS6.js +138 -0
- package/dist/src/{tokenUsageUtils-CXhxVj72.cjs → tokenUsageUtils-bVa1ga6f.cjs} +32 -33
- package/dist/src/{transcription-mYS9vd5v.js → transcription-BNYURcXg.js} +14 -7
- package/dist/src/{transcription-X2-B4vkX.js → transcription-B_OdaHp7.js} +14 -16
- package/dist/src/{transcription-BO1AHegO.cjs → transcription-NLVG9MT1.cjs} +14 -15
- package/dist/src/{transcription-lzBLiTFJ.js → transcription-s6A-bNrZ.js} +15 -17
- package/dist/src/{transform-B1Hi5lWS.cjs → transform-CzK1Q0zl.cjs} +24 -26
- package/dist/src/{transform-DeGlxb0D.js → transform-D5HsjduX.js} +39 -47
- package/dist/src/{transform-CYDILYDe.js → transform-DECvGmzp.js} +15 -13
- package/dist/src/transform-DTGDnAzW.js +6 -0
- package/dist/src/{transform-BEgStbHK.js → transform-DilY9wbS.js} +10 -12
- package/dist/src/{transform-D5PjiWiZ.cjs → transform-DuHvhZpj.cjs} +179 -187
- package/dist/src/transform-aa6tmVpZ.js +216 -0
- package/dist/src/transform-m3qNw4KP.cjs +5 -0
- package/dist/src/transform-uAytVuyX.js +1506 -0
- package/dist/src/{transform-Dfl89yi4.js → transform-vNucnNr0.js} +39 -47
- package/dist/src/{transformersAvailability-SZnTS3pJ.js → transformersAvailability-CEVM2GNQ.js} +2 -2
- package/dist/src/{transformersAvailability-D-glmEy7.cjs → transformersAvailability-CwayUSlh.cjs} +2 -3
- package/dist/src/{transformersAvailability-CjeFXhuJ.js → transformersAvailability-D6c6ROpT.js} +2 -2
- package/dist/src/{types-DWNf48sT.cjs → types-C_7nyzr1.cjs} +538 -574
- package/dist/src/{types-CXQduE9o.js → types-Cbd8uOMq.js} +68 -100
- package/dist/src/types-CzW2QFyi.js +3288 -0
- package/dist/src/{types-C5hEkb-x.js → types-DmyIJ-sR.js} +63 -99
- package/dist/src/{util-CoQjmE3u.js → util-B3xGByQh.js} +4 -5
- package/dist/src/{util-aLhtl3fe.cjs → util-B9vlHIIh.cjs} +208 -223
- package/dist/src/{util-Du96oyYS.js → util-BHGHw5G1.js} +4 -5
- package/dist/src/{util-DQ984syk.js → util-BRYkYPTd.js} +36 -51
- package/dist/src/{util-D9eLdGfa.js → util-BV4XUC0n.js} +5 -6
- package/dist/src/util-Bv6uGDfH.js +293 -0
- package/dist/src/{util-1wWM599Z.cjs → util-BzMcevZc.cjs} +50 -51
- package/dist/src/{util-_h4pVqrz.js → util-C1CeHl-P.js} +36 -51
- package/dist/src/{util-Bm_-UMD_.js → util-CMy69ZgQ.js} +5 -6
- package/dist/src/{util-CyUdMzV0.cjs → util-DGNOS1db.cjs} +34 -35
- package/dist/src/util-Dnmk2mBQ.js +599 -0
- package/dist/src/util-ZzmqNPlg.js +1426 -0
- package/dist/src/{utils-BjLy-Q72.cjs → utils-Cz9qXqII.cjs} +29 -32
- package/dist/src/{utils-CFMn2yHW.js → utils-XiOAgly5.js} +4 -7
- package/dist/src/utils-dLokC-eR.js +94 -0
- package/dist/src/{utils-DvWMzuMx.js → utils-f2-Moju7.js} +4 -7
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +38 -38
- package/dist/src/app/assets/index-B2D0bCSI.js +0 -439
- package/dist/src/app/assets/vendor-charts-CCl15Imd.js +0 -36
- package/dist/src/cache-ChPcurj7.js +0 -6
- package/dist/src/cache-VVu_W-yg.js +0 -8
- package/dist/src/cache-YLNCFEM2.cjs +0 -6
- package/dist/src/chunk-DHDDz29n.js +0 -22
- package/dist/src/chunk-FhC4c-0y.js +0 -21
- package/dist/src/cloud-BndfXy4H.js +0 -5
- package/dist/src/eval-BhHvMY82.js +0 -17
- package/dist/src/evalResult-Dq2gFNQY.js +0 -12
- package/dist/src/evalResult-nmcP5VKH.cjs +0 -12
- package/dist/src/evalResult-trqZjVYh.js +0 -14
- package/dist/src/evaluator-CnfPstzT.js +0 -39
- package/dist/src/fetch-IDPDue6F.cjs +0 -4
- package/dist/src/fetch-hKJ-It8q.js +0 -6
- package/dist/src/fetch-ouKnrWK-.js +0 -4
- package/dist/src/graders-CQn7WUsd.cjs +0 -34
- package/dist/src/graders-DC6QAbpW.js +0 -35
- package/dist/src/graders-DUWz3Y7j.js +0 -37
- package/dist/src/opencode-sdk-4bL9n-Gk.js +0 -382
- package/dist/src/opencode-sdk-BfC2zWcR.js +0 -376
- package/dist/src/opencode-sdk-DMJyuwMg.js +0 -380
- package/dist/src/opencode-sdk-Da-9adza.cjs +0 -383
- package/dist/src/providers-CsXB2Ix-.js +0 -35
- package/dist/src/providers-DO8ltjLC.js +0 -33
- package/dist/src/providers-Dtq-xnXd.cjs +0 -33
- package/dist/src/rubyUtils-BUbcND2f.js +0 -6
- package/dist/src/rubyUtils-Cr55X_KE.js +0 -5
- package/dist/src/rubyUtils-DlIiqoYo.cjs +0 -5
- package/dist/src/server-C2eQH4Gu.js +0 -6
- package/dist/src/server-CXWycu7H.cjs +0 -6
- package/dist/src/server-Q6OGlxxT.js +0 -8
- package/dist/src/store-B3EDO9Q3.js +0 -7
- package/dist/src/store-Dl9F8aw5.js +0 -6
- package/dist/src/store-SnrGrlt9.cjs +0 -6
- package/dist/src/telemetry-BGhiPZtl.js +0 -8
- package/dist/src/telemetry-CFfiYan6.cjs +0 -6
- package/dist/src/telemetry-DHzEduxX.js +0 -6
- package/dist/src/transform-C1x1ZlMQ.cjs +0 -6
- package/dist/src/transform-DYHjFmQu.js +0 -8
- package/dist/src/transform-rmwJT5JQ.js +0 -7
- package/dist/src/transformersAvailability-eJooj0gX.js +0 -35
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-DEq-mXcV.js";
|
|
2
|
+
import { b as getEnvString, i as logger, m as safeJsonStringify } from "./logger-DLcq4dWf.js";
|
|
3
|
+
import { n as getWrapperDir } from "./esm-CaIwzWR5.js";
|
|
4
|
+
import fs from "fs";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import os from "os";
|
|
7
|
+
import { promisify } from "util";
|
|
8
|
+
import { execFile } from "child_process";
|
|
9
|
+
//#region src/ruby/rubyUtils.ts
|
|
10
|
+
var rubyUtils_exports = /* @__PURE__ */ __exportAll({
|
|
11
|
+
getSysExecutable: () => getSysExecutable,
|
|
12
|
+
runRuby: () => runRuby,
|
|
13
|
+
state: () => state,
|
|
14
|
+
tryPath: () => tryPath,
|
|
15
|
+
validateRubyPath: () => validateRubyPath
|
|
16
|
+
});
|
|
17
|
+
const execFileAsync = promisify(execFile);
|
|
18
|
+
/**
|
|
19
|
+
* Global state for Ruby executable path caching.
|
|
20
|
+
* Ensures consistent Ruby executable usage across multiple provider instances.
|
|
21
|
+
*/
|
|
22
|
+
const state = {
|
|
23
|
+
cachedRubyPath: null,
|
|
24
|
+
validationPromise: null,
|
|
25
|
+
validatingPath: null
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Attempts to find Ruby using Windows 'where' command.
|
|
29
|
+
* Only applicable on Windows platforms.
|
|
30
|
+
* @returns The validated Ruby executable path, or null if not found
|
|
31
|
+
*/
|
|
32
|
+
async function tryWindowsWhere() {
|
|
33
|
+
try {
|
|
34
|
+
const output = (await execFileAsync("where", ["ruby"])).stdout.trim();
|
|
35
|
+
if (!output) {
|
|
36
|
+
logger.debug("Windows 'where ruby' returned empty output");
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const paths = output.split("\n").filter((path) => path.trim());
|
|
40
|
+
for (const rubyPath of paths) {
|
|
41
|
+
const trimmedPath = rubyPath.trim();
|
|
42
|
+
if (!trimmedPath.endsWith(".exe")) continue;
|
|
43
|
+
const validated = await tryPath(trimmedPath);
|
|
44
|
+
if (validated) return validated;
|
|
45
|
+
}
|
|
46
|
+
} catch (error) {
|
|
47
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
48
|
+
logger.debug(`Windows 'where ruby' failed: ${errorMsg}`);
|
|
49
|
+
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES")) logger.warn(`Permission denied when searching for Ruby: ${errorMsg}`);
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Attempts to get Ruby executable path by running Ruby commands.
|
|
55
|
+
* Uses RbConfig.ruby to get the actual Ruby executable path.
|
|
56
|
+
* @param commands - Array of Ruby command names to try (e.g., ['ruby'])
|
|
57
|
+
* @returns The Ruby executable path, or null if all commands fail
|
|
58
|
+
*/
|
|
59
|
+
async function tryRubyCommands(commands) {
|
|
60
|
+
for (const cmd of commands) try {
|
|
61
|
+
const executablePath = (await execFileAsync(cmd, ["-e", "puts RbConfig.ruby"])).stdout.trim();
|
|
62
|
+
if (executablePath && executablePath !== "None") return executablePath;
|
|
63
|
+
} catch (error) {
|
|
64
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
65
|
+
logger.debug(`Ruby command "${cmd}" failed: ${errorMsg}`);
|
|
66
|
+
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES") || errorMsg.includes("EPERM")) logger.warn(`Permission denied when trying Ruby command "${cmd}": ${errorMsg}`);
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Attempts to validate Ruby commands directly as a final fallback.
|
|
72
|
+
* Validates each command by running it with --version.
|
|
73
|
+
* @param commands - Array of Ruby command names to try (e.g., ['ruby'])
|
|
74
|
+
* @returns The validated Ruby executable path, or null if all commands fail
|
|
75
|
+
*/
|
|
76
|
+
async function tryDirectCommands(commands) {
|
|
77
|
+
for (const cmd of commands) try {
|
|
78
|
+
const validated = await tryPath(cmd);
|
|
79
|
+
if (validated) return validated;
|
|
80
|
+
} catch (error) {
|
|
81
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
82
|
+
logger.debug(`Direct command "${cmd}" failed: ${errorMsg}`);
|
|
83
|
+
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES") || errorMsg.includes("EPERM")) logger.warn(`Permission denied when trying Ruby command "${cmd}": ${errorMsg}`);
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Attempts to get the Ruby executable path using platform-appropriate strategies.
|
|
89
|
+
* @returns The Ruby executable path if successful, or null if failed.
|
|
90
|
+
*/
|
|
91
|
+
async function getSysExecutable() {
|
|
92
|
+
if (process.platform === "win32") {
|
|
93
|
+
const whereResult = await tryWindowsWhere();
|
|
94
|
+
if (whereResult) return whereResult;
|
|
95
|
+
const sysResult = await tryRubyCommands(["ruby"]);
|
|
96
|
+
if (sysResult) return sysResult;
|
|
97
|
+
return await tryDirectCommands(["ruby"]);
|
|
98
|
+
} else return await tryRubyCommands(["ruby"]);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Attempts to validate a Ruby executable path.
|
|
102
|
+
* @param path - The path to the Ruby executable to test.
|
|
103
|
+
* @returns The validated path if successful, or null if invalid.
|
|
104
|
+
*/
|
|
105
|
+
async function tryPath(path) {
|
|
106
|
+
let timeoutId;
|
|
107
|
+
try {
|
|
108
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
109
|
+
timeoutId = setTimeout(() => reject(/* @__PURE__ */ new Error("Command timed out")), 2500);
|
|
110
|
+
});
|
|
111
|
+
const result = await Promise.race([execFileAsync(path, ["--version"]), timeoutPromise]);
|
|
112
|
+
if (timeoutId) clearTimeout(timeoutId);
|
|
113
|
+
if (result.stdout.trim().toLowerCase().includes("ruby")) return path;
|
|
114
|
+
return null;
|
|
115
|
+
} catch {
|
|
116
|
+
if (timeoutId) clearTimeout(timeoutId);
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Validates and caches the Ruby executable path.
|
|
122
|
+
*
|
|
123
|
+
* @param rubyPath - Path to the Ruby executable.
|
|
124
|
+
* @param isExplicit - If true, only tries the provided path.
|
|
125
|
+
* @returns Validated Ruby executable path.
|
|
126
|
+
* @throws {Error} If no valid Ruby executable is found.
|
|
127
|
+
*/
|
|
128
|
+
async function validateRubyPath(rubyPath, isExplicit) {
|
|
129
|
+
if (state.cachedRubyPath && state.validatingPath === rubyPath) return state.cachedRubyPath;
|
|
130
|
+
if (state.validatingPath !== rubyPath) {
|
|
131
|
+
state.cachedRubyPath = null;
|
|
132
|
+
state.validationPromise = null;
|
|
133
|
+
state.validatingPath = rubyPath;
|
|
134
|
+
}
|
|
135
|
+
if (!state.validationPromise) state.validationPromise = (async () => {
|
|
136
|
+
try {
|
|
137
|
+
const primaryPath = await tryPath(rubyPath);
|
|
138
|
+
if (primaryPath) {
|
|
139
|
+
state.cachedRubyPath = primaryPath;
|
|
140
|
+
state.validationPromise = null;
|
|
141
|
+
return primaryPath;
|
|
142
|
+
}
|
|
143
|
+
if (isExplicit) {
|
|
144
|
+
const error = /* @__PURE__ */ new Error(`Ruby not found. Tried "${rubyPath}" Please ensure Ruby is installed and set the PROMPTFOO_RUBY environment variable to your Ruby executable path (e.g., '${process.platform === "win32" ? "C:\\Ruby32\\bin\\ruby.exe" : "/usr/bin/ruby"}').`);
|
|
145
|
+
state.validationPromise = null;
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
const detectedPath = await getSysExecutable();
|
|
149
|
+
if (detectedPath) {
|
|
150
|
+
state.cachedRubyPath = detectedPath;
|
|
151
|
+
state.validationPromise = null;
|
|
152
|
+
return detectedPath;
|
|
153
|
+
}
|
|
154
|
+
const error = /* @__PURE__ */ new Error(`Ruby not found. Tried "${rubyPath}", ruby executable detection, and fallback commands. Please ensure Ruby is installed and set the PROMPTFOO_RUBY environment variable to your Ruby executable path (e.g., '${process.platform === "win32" ? "C:\\Ruby32\\bin\\ruby.exe" : "/usr/bin/ruby"}').`);
|
|
155
|
+
state.validationPromise = null;
|
|
156
|
+
throw error;
|
|
157
|
+
} catch (error) {
|
|
158
|
+
state.validationPromise = null;
|
|
159
|
+
throw error;
|
|
160
|
+
}
|
|
161
|
+
})();
|
|
162
|
+
return state.validationPromise;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Runs a Ruby script with the specified method and arguments.
|
|
166
|
+
*
|
|
167
|
+
* @param scriptPath - The path to the Ruby script to run.
|
|
168
|
+
* @param method - The name of the method to call in the Ruby script.
|
|
169
|
+
* @param args - An array of arguments to pass to the Ruby script.
|
|
170
|
+
* @param options - Optional settings for running the Ruby script.
|
|
171
|
+
* @param options.rubyExecutable - Optional path to the Ruby executable.
|
|
172
|
+
* @returns A promise that resolves to the output of the Ruby script.
|
|
173
|
+
* @throws An error if there's an issue running the Ruby script or parsing its output.
|
|
174
|
+
*/
|
|
175
|
+
async function runRuby(scriptPath, method, args, options = {}) {
|
|
176
|
+
const absPath = path.resolve(scriptPath);
|
|
177
|
+
const tempJsonPath = path.join(os.tmpdir(), `promptfoo-ruby-input-json-${Date.now()}-${Math.random().toString(16).slice(2)}.json`);
|
|
178
|
+
const outputPath = path.join(os.tmpdir(), `promptfoo-ruby-output-json-${Date.now()}-${Math.random().toString(16).slice(2)}.json`);
|
|
179
|
+
const customPath = options.rubyExecutable || getEnvString("PROMPTFOO_RUBY");
|
|
180
|
+
let rubyPath = customPath || "ruby";
|
|
181
|
+
rubyPath = await validateRubyPath(rubyPath, typeof customPath === "string");
|
|
182
|
+
const wrapperPath = path.join(getWrapperDir("ruby"), "wrapper.rb");
|
|
183
|
+
try {
|
|
184
|
+
fs.writeFileSync(tempJsonPath, safeJsonStringify(args), "utf-8");
|
|
185
|
+
logger.debug(`Running Ruby wrapper with args: ${safeJsonStringify(args)}`);
|
|
186
|
+
const { stdout, stderr } = await execFileAsync(rubyPath, [
|
|
187
|
+
wrapperPath,
|
|
188
|
+
absPath,
|
|
189
|
+
method,
|
|
190
|
+
tempJsonPath,
|
|
191
|
+
outputPath
|
|
192
|
+
]);
|
|
193
|
+
if (stdout) logger.debug(stdout.trim());
|
|
194
|
+
if (stderr) logger.error(stderr.trim());
|
|
195
|
+
const output = fs.readFileSync(outputPath, "utf-8");
|
|
196
|
+
logger.debug(`Ruby script ${absPath} returned: ${output}`);
|
|
197
|
+
let result;
|
|
198
|
+
try {
|
|
199
|
+
result = JSON.parse(output);
|
|
200
|
+
logger.debug(`Ruby script ${absPath} parsed output type: ${typeof result}, structure: ${result ? JSON.stringify(Object.keys(result)) : "undefined"}`);
|
|
201
|
+
} catch (error) {
|
|
202
|
+
throw new Error(`Invalid JSON: ${error.message} when parsing result: ${output}\nStack Trace: ${error.stack}`);
|
|
203
|
+
}
|
|
204
|
+
if (result?.type !== "final_result") throw new Error("The Ruby script `call_api` function must return a hash with an `output`");
|
|
205
|
+
return result.data;
|
|
206
|
+
} catch (error) {
|
|
207
|
+
logger.error(`Error running Ruby script: ${error.message}\nStack Trace: ${error.stack || "No Ruby traceback available"}`);
|
|
208
|
+
throw new Error(`Error running Ruby script: ${error.message}\nStack Trace: ${error.stack || "No Ruby traceback available"}`);
|
|
209
|
+
} finally {
|
|
210
|
+
[tempJsonPath, outputPath].forEach((file) => {
|
|
211
|
+
try {
|
|
212
|
+
fs.unlinkSync(file);
|
|
213
|
+
} catch (error) {
|
|
214
|
+
logger.error(`Error removing ${file}: ${error}`);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//#endregion
|
|
220
|
+
export { runRuby as n, rubyUtils_exports as t };
|
|
221
|
+
|
|
222
|
+
//# sourceMappingURL=rubyUtils-BcuGX77l.js.map
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { C as getEnvString, g as safeJsonStringify, o as
|
|
3
|
-
import { n as getWrapperDir } from "./esm-
|
|
2
|
+
import { C as getEnvString, g as safeJsonStringify, o as logger } from "./logger-KkObSCzq.js";
|
|
3
|
+
import { n as getWrapperDir } from "./esm-C03C-mv3.js";
|
|
4
4
|
import fs from "fs";
|
|
5
5
|
import path from "path";
|
|
6
6
|
import os from "os";
|
|
7
7
|
import { promisify } from "util";
|
|
8
8
|
import { execFile } from "child_process";
|
|
9
|
-
|
|
10
9
|
//#region src/ruby/rubyUtils.ts
|
|
11
10
|
const execFileAsync = promisify(execFile);
|
|
12
11
|
/**
|
|
@@ -27,7 +26,7 @@ async function tryWindowsWhere() {
|
|
|
27
26
|
try {
|
|
28
27
|
const output = (await execFileAsync("where", ["ruby"])).stdout.trim();
|
|
29
28
|
if (!output) {
|
|
30
|
-
|
|
29
|
+
logger.debug("Windows 'where ruby' returned empty output");
|
|
31
30
|
return null;
|
|
32
31
|
}
|
|
33
32
|
const paths = output.split("\n").filter((path) => path.trim());
|
|
@@ -39,8 +38,8 @@ async function tryWindowsWhere() {
|
|
|
39
38
|
}
|
|
40
39
|
} catch (error) {
|
|
41
40
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
42
|
-
|
|
43
|
-
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES"))
|
|
41
|
+
logger.debug(`Windows 'where ruby' failed: ${errorMsg}`);
|
|
42
|
+
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES")) logger.warn(`Permission denied when searching for Ruby: ${errorMsg}`);
|
|
44
43
|
}
|
|
45
44
|
return null;
|
|
46
45
|
}
|
|
@@ -56,8 +55,8 @@ async function tryRubyCommands(commands) {
|
|
|
56
55
|
if (executablePath && executablePath !== "None") return executablePath;
|
|
57
56
|
} catch (error) {
|
|
58
57
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
59
|
-
|
|
60
|
-
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES") || errorMsg.includes("EPERM"))
|
|
58
|
+
logger.debug(`Ruby command "${cmd}" failed: ${errorMsg}`);
|
|
59
|
+
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES") || errorMsg.includes("EPERM")) logger.warn(`Permission denied when trying Ruby command "${cmd}": ${errorMsg}`);
|
|
61
60
|
}
|
|
62
61
|
return null;
|
|
63
62
|
}
|
|
@@ -73,8 +72,8 @@ async function tryDirectCommands(commands) {
|
|
|
73
72
|
if (validated) return validated;
|
|
74
73
|
} catch (error) {
|
|
75
74
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
76
|
-
|
|
77
|
-
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES") || errorMsg.includes("EPERM"))
|
|
75
|
+
logger.debug(`Direct command "${cmd}" failed: ${errorMsg}`);
|
|
76
|
+
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES") || errorMsg.includes("EPERM")) logger.warn(`Permission denied when trying Ruby command "${cmd}": ${errorMsg}`);
|
|
78
77
|
}
|
|
79
78
|
return null;
|
|
80
79
|
}
|
|
@@ -176,7 +175,7 @@ async function runRuby(scriptPath, method, args, options = {}) {
|
|
|
176
175
|
const wrapperPath = path.join(getWrapperDir("ruby"), "wrapper.rb");
|
|
177
176
|
try {
|
|
178
177
|
fs.writeFileSync(tempJsonPath, safeJsonStringify(args), "utf-8");
|
|
179
|
-
|
|
178
|
+
logger.debug(`Running Ruby wrapper with args: ${safeJsonStringify(args)}`);
|
|
180
179
|
const { stdout, stderr } = await execFileAsync(rubyPath, [
|
|
181
180
|
wrapperPath,
|
|
182
181
|
absPath,
|
|
@@ -184,33 +183,33 @@ async function runRuby(scriptPath, method, args, options = {}) {
|
|
|
184
183
|
tempJsonPath,
|
|
185
184
|
outputPath
|
|
186
185
|
]);
|
|
187
|
-
if (stdout)
|
|
188
|
-
if (stderr)
|
|
186
|
+
if (stdout) logger.debug(stdout.trim());
|
|
187
|
+
if (stderr) logger.error(stderr.trim());
|
|
189
188
|
const output = fs.readFileSync(outputPath, "utf-8");
|
|
190
|
-
|
|
189
|
+
logger.debug(`Ruby script ${absPath} returned: ${output}`);
|
|
191
190
|
let result;
|
|
192
191
|
try {
|
|
193
192
|
result = JSON.parse(output);
|
|
194
|
-
|
|
193
|
+
logger.debug(`Ruby script ${absPath} parsed output type: ${typeof result}, structure: ${result ? JSON.stringify(Object.keys(result)) : "undefined"}`);
|
|
195
194
|
} catch (error) {
|
|
196
195
|
throw new Error(`Invalid JSON: ${error.message} when parsing result: ${output}\nStack Trace: ${error.stack}`);
|
|
197
196
|
}
|
|
198
197
|
if (result?.type !== "final_result") throw new Error("The Ruby script `call_api` function must return a hash with an `output`");
|
|
199
198
|
return result.data;
|
|
200
199
|
} catch (error) {
|
|
201
|
-
|
|
200
|
+
logger.error(`Error running Ruby script: ${error.message}\nStack Trace: ${error.stack || "No Ruby traceback available"}`);
|
|
202
201
|
throw new Error(`Error running Ruby script: ${error.message}\nStack Trace: ${error.stack || "No Ruby traceback available"}`);
|
|
203
202
|
} finally {
|
|
204
203
|
[tempJsonPath, outputPath].forEach((file) => {
|
|
205
204
|
try {
|
|
206
205
|
fs.unlinkSync(file);
|
|
207
206
|
} catch (error) {
|
|
208
|
-
|
|
207
|
+
logger.error(`Error removing ${file}: ${error}`);
|
|
209
208
|
}
|
|
210
209
|
});
|
|
211
210
|
}
|
|
212
211
|
}
|
|
213
|
-
|
|
214
212
|
//#endregion
|
|
215
213
|
export { validateRubyPath as a, tryPath as i, runRuby as n, state as r, getSysExecutable as t };
|
|
216
|
-
|
|
214
|
+
|
|
215
|
+
//# sourceMappingURL=rubyUtils-Boc4HZzX.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const require_logger = require(
|
|
2
|
-
const require_esm = require(
|
|
1
|
+
const require_logger = require("./logger-Cp1GPUjj.cjs");
|
|
2
|
+
const require_esm = require("./esm-CnNt7sI4.cjs");
|
|
3
3
|
let fs = require("fs");
|
|
4
4
|
fs = require_logger.__toESM(fs);
|
|
5
5
|
let path = require("path");
|
|
@@ -7,10 +7,8 @@ path = require_logger.__toESM(path);
|
|
|
7
7
|
let os = require("os");
|
|
8
8
|
os = require_logger.__toESM(os);
|
|
9
9
|
let child_process = require("child_process");
|
|
10
|
-
let util = require("util");
|
|
11
|
-
|
|
12
10
|
//#region src/ruby/rubyUtils.ts
|
|
13
|
-
const execFileAsync = (0, util.promisify)(child_process.execFile);
|
|
11
|
+
const execFileAsync = (0, require("util").promisify)(child_process.execFile);
|
|
14
12
|
/**
|
|
15
13
|
* Global state for Ruby executable path caching.
|
|
16
14
|
* Ensures consistent Ruby executable usage across multiple provider instances.
|
|
@@ -29,10 +27,10 @@ async function tryWindowsWhere() {
|
|
|
29
27
|
try {
|
|
30
28
|
const output = (await execFileAsync("where", ["ruby"])).stdout.trim();
|
|
31
29
|
if (!output) {
|
|
32
|
-
require_logger.
|
|
30
|
+
require_logger.logger.debug("Windows 'where ruby' returned empty output");
|
|
33
31
|
return null;
|
|
34
32
|
}
|
|
35
|
-
const paths = output.split("\n").filter((path) => path.trim());
|
|
33
|
+
const paths = output.split("\n").filter((path$2) => path$2.trim());
|
|
36
34
|
for (const rubyPath of paths) {
|
|
37
35
|
const trimmedPath = rubyPath.trim();
|
|
38
36
|
if (!trimmedPath.endsWith(".exe")) continue;
|
|
@@ -41,8 +39,8 @@ async function tryWindowsWhere() {
|
|
|
41
39
|
}
|
|
42
40
|
} catch (error) {
|
|
43
41
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
44
|
-
require_logger.
|
|
45
|
-
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES")) require_logger.
|
|
42
|
+
require_logger.logger.debug(`Windows 'where ruby' failed: ${errorMsg}`);
|
|
43
|
+
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES")) require_logger.logger.warn(`Permission denied when searching for Ruby: ${errorMsg}`);
|
|
46
44
|
}
|
|
47
45
|
return null;
|
|
48
46
|
}
|
|
@@ -58,8 +56,8 @@ async function tryRubyCommands(commands) {
|
|
|
58
56
|
if (executablePath && executablePath !== "None") return executablePath;
|
|
59
57
|
} catch (error) {
|
|
60
58
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
61
|
-
require_logger.
|
|
62
|
-
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES") || errorMsg.includes("EPERM")) require_logger.
|
|
59
|
+
require_logger.logger.debug(`Ruby command "${cmd}" failed: ${errorMsg}`);
|
|
60
|
+
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES") || errorMsg.includes("EPERM")) require_logger.logger.warn(`Permission denied when trying Ruby command "${cmd}": ${errorMsg}`);
|
|
63
61
|
}
|
|
64
62
|
return null;
|
|
65
63
|
}
|
|
@@ -75,8 +73,8 @@ async function tryDirectCommands(commands) {
|
|
|
75
73
|
if (validated) return validated;
|
|
76
74
|
} catch (error) {
|
|
77
75
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
78
|
-
require_logger.
|
|
79
|
-
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES") || errorMsg.includes("EPERM")) require_logger.
|
|
76
|
+
require_logger.logger.debug(`Direct command "${cmd}" failed: ${errorMsg}`);
|
|
77
|
+
if (errorMsg.includes("Access is denied") || errorMsg.includes("EACCES") || errorMsg.includes("EPERM")) require_logger.logger.warn(`Permission denied when trying Ruby command "${cmd}": ${errorMsg}`);
|
|
80
78
|
}
|
|
81
79
|
return null;
|
|
82
80
|
}
|
|
@@ -98,15 +96,15 @@ async function getSysExecutable() {
|
|
|
98
96
|
* @param path - The path to the Ruby executable to test.
|
|
99
97
|
* @returns The validated path if successful, or null if invalid.
|
|
100
98
|
*/
|
|
101
|
-
async function tryPath(path) {
|
|
99
|
+
async function tryPath(path$3) {
|
|
102
100
|
let timeoutId;
|
|
103
101
|
try {
|
|
104
102
|
const timeoutPromise = new Promise((_, reject) => {
|
|
105
103
|
timeoutId = setTimeout(() => reject(/* @__PURE__ */ new Error("Command timed out")), 2500);
|
|
106
104
|
});
|
|
107
|
-
const result = await Promise.race([execFileAsync(path, ["--version"]), timeoutPromise]);
|
|
105
|
+
const result = await Promise.race([execFileAsync(path$3, ["--version"]), timeoutPromise]);
|
|
108
106
|
if (timeoutId) clearTimeout(timeoutId);
|
|
109
|
-
if (result.stdout.trim().toLowerCase().includes("ruby")) return path;
|
|
107
|
+
if (result.stdout.trim().toLowerCase().includes("ruby")) return path$3;
|
|
110
108
|
return null;
|
|
111
109
|
} catch {
|
|
112
110
|
if (timeoutId) clearTimeout(timeoutId);
|
|
@@ -178,7 +176,7 @@ async function runRuby(scriptPath, method, args, options = {}) {
|
|
|
178
176
|
const wrapperPath = path.default.join(require_esm.getWrapperDir("ruby"), "wrapper.rb");
|
|
179
177
|
try {
|
|
180
178
|
fs.default.writeFileSync(tempJsonPath, require_logger.safeJsonStringify(args), "utf-8");
|
|
181
|
-
require_logger.
|
|
179
|
+
require_logger.logger.debug(`Running Ruby wrapper with args: ${require_logger.safeJsonStringify(args)}`);
|
|
182
180
|
const { stdout, stderr } = await execFileAsync(rubyPath, [
|
|
183
181
|
wrapperPath,
|
|
184
182
|
absPath,
|
|
@@ -186,62 +184,62 @@ async function runRuby(scriptPath, method, args, options = {}) {
|
|
|
186
184
|
tempJsonPath,
|
|
187
185
|
outputPath
|
|
188
186
|
]);
|
|
189
|
-
if (stdout) require_logger.
|
|
190
|
-
if (stderr) require_logger.
|
|
187
|
+
if (stdout) require_logger.logger.debug(stdout.trim());
|
|
188
|
+
if (stderr) require_logger.logger.error(stderr.trim());
|
|
191
189
|
const output = fs.default.readFileSync(outputPath, "utf-8");
|
|
192
|
-
require_logger.
|
|
190
|
+
require_logger.logger.debug(`Ruby script ${absPath} returned: ${output}`);
|
|
193
191
|
let result;
|
|
194
192
|
try {
|
|
195
193
|
result = JSON.parse(output);
|
|
196
|
-
require_logger.
|
|
194
|
+
require_logger.logger.debug(`Ruby script ${absPath} parsed output type: ${typeof result}, structure: ${result ? JSON.stringify(Object.keys(result)) : "undefined"}`);
|
|
197
195
|
} catch (error) {
|
|
198
196
|
throw new Error(`Invalid JSON: ${error.message} when parsing result: ${output}\nStack Trace: ${error.stack}`);
|
|
199
197
|
}
|
|
200
198
|
if (result?.type !== "final_result") throw new Error("The Ruby script `call_api` function must return a hash with an `output`");
|
|
201
199
|
return result.data;
|
|
202
200
|
} catch (error) {
|
|
203
|
-
require_logger.
|
|
201
|
+
require_logger.logger.error(`Error running Ruby script: ${error.message}\nStack Trace: ${error.stack || "No Ruby traceback available"}`);
|
|
204
202
|
throw new Error(`Error running Ruby script: ${error.message}\nStack Trace: ${error.stack || "No Ruby traceback available"}`);
|
|
205
203
|
} finally {
|
|
206
204
|
[tempJsonPath, outputPath].forEach((file) => {
|
|
207
205
|
try {
|
|
208
206
|
fs.default.unlinkSync(file);
|
|
209
207
|
} catch (error) {
|
|
210
|
-
require_logger.
|
|
208
|
+
require_logger.logger.error(`Error removing ${file}: ${error}`);
|
|
211
209
|
}
|
|
212
210
|
});
|
|
213
211
|
}
|
|
214
212
|
}
|
|
215
|
-
|
|
216
213
|
//#endregion
|
|
217
|
-
Object.defineProperty(exports,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
214
|
+
Object.defineProperty(exports, "getSysExecutable", {
|
|
215
|
+
enumerable: true,
|
|
216
|
+
get: function() {
|
|
217
|
+
return getSysExecutable;
|
|
218
|
+
}
|
|
222
219
|
});
|
|
223
|
-
Object.defineProperty(exports,
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
220
|
+
Object.defineProperty(exports, "runRuby", {
|
|
221
|
+
enumerable: true,
|
|
222
|
+
get: function() {
|
|
223
|
+
return runRuby;
|
|
224
|
+
}
|
|
228
225
|
});
|
|
229
|
-
Object.defineProperty(exports,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
226
|
+
Object.defineProperty(exports, "state", {
|
|
227
|
+
enumerable: true,
|
|
228
|
+
get: function() {
|
|
229
|
+
return state;
|
|
230
|
+
}
|
|
234
231
|
});
|
|
235
|
-
Object.defineProperty(exports,
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
232
|
+
Object.defineProperty(exports, "tryPath", {
|
|
233
|
+
enumerable: true,
|
|
234
|
+
get: function() {
|
|
235
|
+
return tryPath;
|
|
236
|
+
}
|
|
240
237
|
});
|
|
241
|
-
Object.defineProperty(exports,
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
238
|
+
Object.defineProperty(exports, "validateRubyPath", {
|
|
239
|
+
enumerable: true,
|
|
240
|
+
get: function() {
|
|
241
|
+
return validateRubyPath;
|
|
242
|
+
}
|
|
246
243
|
});
|
|
247
|
-
|
|
244
|
+
|
|
245
|
+
//# sourceMappingURL=rubyUtils-DhCAlxZr.cjs.map
|