promptfoo 0.121.4 → 0.121.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/{ListApp-DQkFNqE9.js → ListApp-DLmM02JS.js} +1 -1
- package/dist/src/{accounts-DhMYUUbu.js → accounts-Ca7WIoPY.js} +12 -7
- package/dist/src/{accounts-F9d_5sMC.js → accounts-CjFnOPmb.js} +14 -9
- package/dist/src/{accounts-Dy17bs4D.cjs → accounts-CmWzeD2d.cjs} +16 -10
- package/dist/src/{accounts-DdJ2pHMI.js → accounts-DanM1wq_.js} +13 -8
- package/dist/src/{agentic-utils-qFlm6zes.js → agentic-utils-CJ0j3fBi.js} +3 -3
- package/dist/src/{agentic-utils-w68v6_Dz.js → agentic-utils-DDEGRV9v.js} +3 -3
- package/dist/src/{agentic-utils-BpX5b23w.cjs → agentic-utils-DvPWSUpb.cjs} +8 -7
- package/dist/src/{agentic-utils-P172hM8B.js → agentic-utils-TxUEMPYS.js} +2 -2
- package/dist/src/{agents-BahDpe5G.cjs → agents-B4sRuXg3.cjs} +7 -6
- package/dist/src/{agents-pQeBEXMm.js → agents-B8q7h_ek.js} +5 -5
- package/dist/src/{agents-CgaMXvLM.js → agents-CBgJvRkB.js} +21 -10
- package/dist/src/{agents-C-R_jfzI.js → agents-CYn2n3QP.js} +4 -4
- package/dist/src/{agents-8FDnTriG.js → agents-D-vDNFx4.js} +21 -10
- package/dist/src/{agents-aYPQLf8W.js → agents-LrHuQqr1.js} +20 -9
- package/dist/src/{agents-DJ35I3Nt.js → agents-QGg76OF-.js} +5 -5
- package/dist/src/{agents-D7-HGxUj.cjs → agents-eHZ9nlgA.cjs} +21 -10
- package/dist/src/{aimlapi-sgYnkE54.js → aimlapi-CJEbQ0o6.js} +7 -7
- package/dist/src/{aimlapi-BD6J9oKt.js → aimlapi-D5HXzZ0s.js} +6 -6
- package/dist/src/{aimlapi-qcK4OT55.cjs → aimlapi-T6HGNxNe.cjs} +7 -7
- package/dist/src/{aimlapi-BCq3MHeL.js → aimlapi-eYv3a_DK.js} +7 -7
- 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 +31 -6
- package/dist/src/{audio-COrn8rM6.js → audio-BqnRvcWG.js} +3 -3
- package/dist/src/{audio-DcVKoInv.js → audio-CPMtV1yR.js} +4 -4
- package/dist/src/{audio-B7izf48x.js → audio-DyiebVB3.js} +4 -4
- package/dist/src/{audio-BQtNuYBj.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-PYJvBE1i.js → base-CKLo890h.js} +4 -3
- package/dist/src/{base-fZ9wgg50.js → base-Co80MMCi.js} +5 -4
- package/dist/src/{base-D-670DX8.cjs → base-DGJW48uz.cjs} +5 -4
- package/dist/src/{base-yrI1Yal4.js → base-E9I8zXjz.js} +5 -4
- 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-D2FAd1Q5.cjs → blobs-B0977K1O.cjs} +7 -6
- package/dist/src/{blobs-BCZavS8s.js → blobs-CeFdPn_T.js} +3 -3
- package/dist/src/{blobs-BQWqnnvL.js → blobs-DODuTK-a.js} +3 -3
- package/dist/src/{blobs-C-F78Kfn.js → blobs-Dwef1Ao1.js} +2 -2
- package/dist/src/{cache-BIyPcp5v.cjs → cache-CPGUA4Yl.cjs} +135 -25
- package/dist/src/cache-Cf7b4pWE.js +3 -0
- package/dist/src/{cache-D5NZmMiT.js → cache-DIXbtkNO.js} +125 -10
- package/dist/src/{cache-mb7c8hbp.js → cache-DpPWrkTE.js} +128 -12
- package/dist/src/{cache-C4Xb-hNb.js → cache-roFAE0cI.js} +126 -11
- package/dist/src/{chat-I9izLm49.js → chat-CUCorGiL.js} +12 -12
- package/dist/src/{chat-BPXSW8Bv.cjs → chat-DG1wG4w0.cjs} +6 -6
- package/dist/src/{chat-BfPaS15_.js → chat-Dabu84Br.js} +12 -12
- package/dist/src/{chat-Dr3DUQ0D.js → chat-DqUFcWI0.js} +12 -12
- package/dist/src/{chat-CclRbxGf.cjs → chat-DxTDQ83C.cjs} +14 -13
- package/dist/src/{chat-MKxMnZJZ.js → chat-GmlolEwo.js} +4 -4
- package/dist/src/{chat-0bwXjVP0.js → chat-TP8Qifkh.js} +6 -6
- package/dist/src/{chat-mW0ORo8G.js → chat-iwaM5UTQ.js} +6 -6
- package/dist/src/{chatkit-zUIVoDos.js → chatkit-B6DWi70Q.js} +4 -4
- package/dist/src/{chatkit-BoWoSgXl.cjs → chatkit-BYveR48_.cjs} +6 -5
- package/dist/src/{chatkit-Cv6AhukM.js → chatkit-fARZwEfV.js} +3 -3
- package/dist/src/{chatkit-CJnHRRMM.js → chatkit-lb6FK02w.js} +4 -4
- package/dist/src/{claude-agent-sdk-Dtq_L-Sc.js → claude-agent-sdk-BQNp_y-F.js} +212 -67
- package/dist/src/{claude-agent-sdk-BQNuLaAK.js → claude-agent-sdk-D5Jl0SDh.js} +212 -67
- package/dist/src/{claude-agent-sdk-CPJo3dBQ.cjs → claude-agent-sdk-DH416NBD.cjs} +218 -72
- package/dist/src/{claude-agent-sdk-nfAIcxNf.js → claude-agent-sdk-x1XJ1-pU.js} +212 -67
- package/dist/src/{cloud-DQZ5sVjW.js → cloud-D3DiFqH6.js} +3 -3
- package/dist/src/cloud-p96PA4MH.js +3 -0
- package/dist/src/{cloudflare-ai-BIB567w6.js → cloudflare-ai-B6NVI3ax.js} +4 -4
- package/dist/src/{cloudflare-ai-Dl3N9OVD.cjs → cloudflare-ai-CEAW-xQa.cjs} +6 -6
- package/dist/src/{cloudflare-ai-DlKr0rY7.js → cloudflare-ai-RFSojyXG.js} +6 -6
- package/dist/src/{cloudflare-ai-DGLte7Py.js → cloudflare-ai-r4tbYmWU.js} +6 -6
- package/dist/src/{cloudflare-gateway-CiIZHU0Q.js → cloudflare-gateway-BCkLouto.js} +5 -5
- package/dist/src/{cloudflare-gateway-DI1HNP5F.js → cloudflare-gateway-BaZ4insB.js} +3 -3
- package/dist/src/{cloudflare-gateway-BDZrYydE.js → cloudflare-gateway-CF-Vb-2Z.js} +5 -5
- package/dist/src/{cloudflare-gateway-BYDp495F.cjs → cloudflare-gateway-TJMLBj6I.cjs} +5 -5
- package/dist/src/codex-app-server-B8KHEiF4.js +1915 -0
- package/dist/src/codex-app-server-CnrLBCeA.cjs +1921 -0
- package/dist/src/codex-app-server-DIXZ230V.js +1915 -0
- package/dist/src/codex-app-server-Dd22dC_N.js +1916 -0
- package/dist/src/{codex-sdk-CpqiOqDO.js → codex-sdk-B6Wah8Pa.js} +6 -6
- package/dist/src/codex-sdk-BGjVAk23.js +3 -0
- package/dist/src/{codex-sdk-C2_M2pl_.cjs → codex-sdk-CFF6gUyi.cjs} +18 -10
- package/dist/src/{codex-sdk-Rtky3M4I.js → codex-sdk-CmQABzV3.js} +6 -6
- package/dist/src/{codex-sdk-CErXn7qh.js → codex-sdk-D2d54RL8.js} +5 -5
- package/dist/src/{cometapi-CtJ-mS8R.js → cometapi-Bu9B8NUY.js} +8 -8
- package/dist/src/{cometapi-DT-jlVCB.js → cometapi-CtzNCHKu.js} +7 -7
- package/dist/src/{cometapi-UVOryo4W.cjs → cometapi-DHCDlQUI.cjs} +8 -8
- package/dist/src/{cometapi-BUlt_ELa.js → cometapi-OBILPLlu.js} +8 -8
- package/dist/src/{completion-HUe8wDhZ.js → completion-CO2e1_62.js} +6 -6
- package/dist/src/{completion-BozdoXba.cjs → completion-CSYfl2cd.cjs} +6 -6
- package/dist/src/{completion-x0a_c2y1.js → completion-DZNxcyfG.js} +6 -6
- package/dist/src/{completion-Dnxn7E-j.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-CwDVU5xr.js → createHash-CGVzWdjj.js} +1 -1
- package/dist/src/{createHash-B7KvgoOD.cjs → createHash-CSiqnK5P.cjs} +2 -2
- package/dist/src/{createHash-ChI45QR1.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-DCgsveLD.js → docker-4D1eL6Gq.js} +6 -6
- package/dist/src/{docker-ClnmCf1Z.js → docker-BBv1WUDu.js} +5 -5
- package/dist/src/{docker-DS4_Osau.cjs → docker-D06JUoe2.cjs} +6 -6
- package/dist/src/{docker-CQmlA2NU.js → docker-DdJQBxK9.js} +6 -6
- package/dist/src/{embedding-D3xTseo7.js → embedding--UZVe4_7.js} +6 -6
- package/dist/src/{embedding-I45KG3o7.cjs → embedding-BbrwopfX.cjs} +6 -6
- package/dist/src/{embedding-nFbumxcv.js → embedding-Bi3rxrZF.js} +5 -5
- package/dist/src/{embedding-DD9wa3ae.js → embedding-C251p1-8.js} +6 -6
- package/dist/src/{errors-Cw810C93.js → errors-9PcUL8BC.js} +1 -1
- package/dist/src/{esm-Dh4dOLlt.js → esm-B6whoAcf.js} +2 -2
- package/dist/src/{esm-CtEPLdAj.cjs → esm-BIKakvNa.cjs} +8 -7
- package/dist/src/{esm-C7PnfdF8.js → esm-BTK1W7lG.js} +1 -1
- package/dist/src/{esm-tVgYPY-f.js → esm-Bexx2PFc.js} +2 -2
- package/dist/src/{eval-u4UVafl6.js → eval-0VRANImH.js} +21 -21
- package/dist/src/{eval-CzJFfFO9.js → eval-DscR5iOM.js} +1 -1
- package/dist/src/{evalResult-Bgm9ZH31.js → evalResult-2RRJvFyB.js} +41 -16
- package/dist/src/{evalResult-KZqXl4XP.cjs → evalResult-CvtS8h8u.cjs} +51 -15
- package/dist/src/evalResult-DqzsS6_W.js +3 -0
- package/dist/src/{evalResult-D3hVYFis.js → evalResult-eUkJv9Ko.js} +40 -15
- package/dist/src/evaluator-DNdJF1Gv.js +3 -0
- package/dist/src/{evaluator-IvuDYSvQ.js → evaluator-DRoiYB2q.js} +1060 -187
- 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-CAfTSraf.js → extractor-BR7XAzAL.js} +6 -6
- package/dist/src/{extractor-WVPOrH43.cjs → extractor-BdxEtt3J.cjs} +6 -6
- package/dist/src/{extractor-DNSeBVOJ.js → extractor-CIW3iN-b.js} +6 -6
- package/dist/src/{extractor-Dk6bRWkv.js → extractor-CxRtnaHl.js} +5 -5
- package/dist/src/{fetch-B0Z3Oe4k.js → fetch-BufrQtvR.js} +93 -40
- package/dist/src/{fetch-BEWnXrrG.js → fetch-DXUnXkVU.js} +89 -40
- package/dist/src/{fetch-CJU5ELPa.cjs → fetch-Dw4XZHjj.cjs} +330 -270
- package/dist/src/{fetch-Di00EQrc.js → fetch-It34O8Ur.js} +305 -252
- package/dist/src/fetch-_YgGd2qv.js +3 -0
- package/dist/src/{fileExtensions-bYh77CN8.cjs → fileExtensions-BhdwzYaD.cjs} +24 -1
- package/dist/src/{fileExtensions-DnqA1y9x.js → fileExtensions-CXRfY3Ss.js} +12 -2
- package/dist/src/{fileExtensions-AWa2ZML4.js → fileExtensions-D4GCJ67J.js} +12 -2
- package/dist/src/{formatDuration-DZzPsexs.js → formatDuration-CMVNrYvE.js} +1 -1
- package/dist/src/{genaiTracer-yRuxj9-L.cjs → genaiTracer-14nugQQx.cjs} +14 -2
- package/dist/src/{genaiTracer-DWdZ28hY.js → genaiTracer-BPVvltoW.js} +2 -2
- package/dist/src/{genaiTracer-XnrcgDCe.js → genaiTracer-D18lYzhB.js} +2 -2
- package/dist/src/{genaiTracer-COYDi-tC.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-eIHhRqoC.js → graders-BGP99PdK.js} +2416 -2224
- package/dist/src/{graders-Zy3x0zqX.js → graders-BX0f2tvS.js} +2423 -2226
- package/dist/src/{graders-pvbReLLn.js → graders-C0nXU_ZP.js} +1806 -1609
- package/dist/src/{graders--zknU_uk.cjs → graders-ClrU2fnd.cjs} +2219 -1949
- 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-dnoUgPrC.js → image-BN-hjLL9.js} +4 -4
- package/dist/src/{image-9302QVqR.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-De2FBmYV.cjs → image-DfVCGPbI.cjs} +4 -4
- package/dist/src/{image-u7-rKnYU.js → image-QzmydkiG.js} +4 -4
- package/dist/src/image-X0oY4350.cjs +465 -0
- package/dist/src/index.cjs +1689 -558
- package/dist/src/index.d.cts +3270 -1624
- package/dist/src/index.d.ts +3270 -1624
- package/dist/src/index.js +1553 -438
- 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-CLERUB0c.js → interactiveCheck-C4QlIuoR.js} +2 -2
- package/dist/src/{invariant-BtWWVVhl.js → invariant-B2Rf6avk.js} +1 -1
- package/dist/src/{invariant-vgHWClmd.js → invariant-DIYf9sP1.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-Dgc7CBWF.js → knowledgeBase-BadkINlJ.js} +24 -10
- package/dist/src/{knowledgeBase-RhFPGWDc.js → knowledgeBase-Bi_8sV-H.js} +25 -11
- package/dist/src/{knowledgeBase-lm9RXSAm.js → knowledgeBase-CkMljjdg.js} +25 -11
- package/dist/src/{knowledgeBase-Bpoe_nLu.cjs → knowledgeBase-DUh34xba.cjs} +25 -11
- package/dist/src/{litellm-DRjpcSa7.js → litellm-BKBo0jpC.js} +5 -5
- package/dist/src/{litellm-C2kqjxqp.js → litellm-BXyn5kZK.js} +5 -5
- package/dist/src/{litellm-p37R1dzQ.js → litellm-CNcfbCfa.js} +4 -4
- package/dist/src/{litellm-CoyI4IAl.cjs → litellm-CtAr7bKG.cjs} +5 -5
- package/dist/src/{logger-DksKw1Qc.js → logger-BbY6ypFL.js} +2 -2
- package/dist/src/{logger-B88EkIn6.js → logger-KD8JjCRJ.js} +2 -2
- package/dist/src/{logger-COuQb2xB.cjs → logger-cfNpzI4o.cjs} +13 -55
- package/dist/src/{luma-ray-KgTCXrZC.js → luma-ray-BMX1iEB6.js} +5 -5
- package/dist/src/{luma-ray-B863CmuZ.js → luma-ray-CR5TSpp4.js} +5 -5
- package/dist/src/{luma-ray-BxVKaW2a.cjs → luma-ray-D3FUc2K3.cjs} +9 -8
- package/dist/src/{luma-ray-BTTLtqQ8.js → luma-ray-OEMmS1RB.js} +6 -6
- package/dist/src/main.js +909 -369
- 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-BTQz42fn.js → messages-BabO-cX8.js} +273 -17
- package/dist/src/{messages-811uVVW5.cjs → messages-DBPir0TQ.cjs} +278 -18
- package/dist/src/{messages-zWbkLLHz.js → messages-DGUlSNU7.js} +273 -17
- package/dist/src/{messages-MYTQ2TWp.js → messages-vsE_-Lv0.js} +273 -17
- package/dist/src/{meteor-DHdzY1Ss.js → meteor--TZYICTI.js} +2 -2
- package/dist/src/{meteor-Co1VQ1u5.cjs → meteor-CR226f7Z.cjs} +2 -2
- package/dist/src/{meteor-CU5UAE-H.js → meteor-Cl_yd7rJ.js} +2 -2
- package/dist/src/{meteor-DuAFv6gF.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-Dk1JAtVo.cjs → modelslab-CNV5bMSk.cjs} +7 -7
- package/dist/src/{modelslab-D0erNWKe.js → modelslab-Cogmu4mG.js} +6 -6
- package/dist/src/{modelslab-DIq-6y7x.js → modelslab-Dzst7VTU.js} +6 -6
- package/dist/src/{modelslab-wu9yi5GE.js → modelslab-EyDczZ5A.js} +7 -7
- package/dist/src/{nova-reel-CCFRfeRb.js → nova-reel-BGPNBOMS.js} +6 -6
- package/dist/src/{nova-reel-DQrm74ng.js → nova-reel-B_5NKFu1.js} +5 -5
- package/dist/src/{nova-reel-gr11WG7f.js → nova-reel-C4eUJGse.js} +5 -5
- package/dist/src/{nova-reel-CrLXVKQf.cjs → nova-reel-CjJRxI1X.cjs} +9 -8
- package/dist/src/{nova-sonic-BYdp-QLs.js → nova-sonic-BNGmgfFz.js} +4 -4
- package/dist/src/{nova-sonic-TDgrlTk7.js → nova-sonic-ChPlh5na.js} +4 -4
- package/dist/src/{nova-sonic-B_ZXcUJB.js → nova-sonic-CrV0iaY_.js} +3 -3
- package/dist/src/{nova-sonic-i5tUvXKn.cjs → nova-sonic-DuOG9Aun.cjs} +5 -4
- package/dist/src/{openai-DhVEmgeZ.js → openai-BMHD2Huo.js} +2 -2
- package/dist/src/{openai-URNyItar.cjs → openai-C3uXv8wS.cjs} +2 -2
- package/dist/src/{openai-Qsvz25mV.js → openai-CJrsh9n4.js} +2 -2
- package/dist/src/{openai-iYtrXzOX.js → openai-zgwBb4Ff.js} +1 -1
- package/dist/src/{openclaw-CnQ363Wi.js → openclaw-BIHlu_36.js} +10 -8
- package/dist/src/{openclaw-CwzlQSQX.js → openclaw-CF7fMido.js} +9 -7
- package/dist/src/{openclaw-wX9rtfke.cjs → openclaw-Dphc01BY.cjs} +18 -15
- package/dist/src/{openclaw-CLWrW03k.js → openclaw-zIJAsz3P.js} +10 -8
- package/dist/src/{opencode-sdk-BUu5Nevv.js → opencode-sdk-B3vlPLsp.js} +40 -5
- package/dist/src/{opencode-sdk-BxD8vXp_.js → opencode-sdk-D05JSgMQ.js} +40 -5
- package/dist/src/{opencode-sdk-BZ2idgYA.cjs → opencode-sdk-DoY6GbWw.cjs} +46 -10
- package/dist/src/{opencode-sdk-GI2KaAXq.js → opencode-sdk-sRKYHGoI.js} +39 -4
- package/dist/src/{otlpReceiver-BntK801g.js → otlpReceiver--gTpSagc.js} +120 -4
- package/dist/src/{otlpReceiver-DmVulbhC.js → otlpReceiver-B2eaKC8C.js} +120 -4
- package/dist/src/{otlpReceiver-B2z58l4e.js → otlpReceiver-BXjcRqAM.js} +119 -3
- package/dist/src/{otlpReceiver-BfcVq2Nq.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-CPQ_CmVO.js → providerRegistry-1gB5vtzQ.js} +2 -2
- package/dist/src/{providerRegistry-CQMdTmHP.cjs → providerRegistry-CZO_w7ue.cjs} +2 -2
- package/dist/src/{providerRegistry-Bvh8mv85.js → providerRegistry-DHcFiVWX.js} +1 -1
- package/dist/src/{providerRegistry-CWoPjKFZ.js → providerRegistry-ReCd0sFa.js} +2 -2
- package/dist/src/{providers-BV_KMZje.js → providers-B9KzWxAX.js} +10558 -21587
- package/dist/src/{providers-DruaQfwu.js → providers-BCCz6_IX.js} +1228 -12196
- package/dist/src/{providers-1eKkXBKp.cjs → providers-BDVVIQM6.cjs} +10649 -21843
- package/dist/src/{providers-iUt5fbAN.js → providers-BYAn82cf.js} +1 -1
- package/dist/src/{providers-Domz_llv.js → providers-DVYRZP4E.js} +10589 -21570
- package/dist/src/{pythonUtils-Cldx7huE.js → pythonUtils-CLCgQ9tt.js} +3 -3
- package/dist/src/{pythonUtils-CnndUbW-.js → pythonUtils-CgYxeSmO.js} +3 -3
- package/dist/src/{pythonUtils-tAJvvpS-.cjs → pythonUtils-Cokhluq3.cjs} +8 -7
- package/dist/src/{pythonUtils-C2UQ30Rz.js → pythonUtils-D0BYebvX.js} +3 -3
- package/dist/src/{quiverai-DFotyafY.cjs → quiverai-BAp6iTZD.cjs} +4 -4
- package/dist/src/{quiverai-aPPvXOgn.js → quiverai-BvIhI_0l.js} +4 -4
- package/dist/src/{quiverai-DR0SnIQV.js → quiverai-CdTWPe-A.js} +3 -3
- package/dist/src/{quiverai-CtWi6x_g.js → quiverai-Cv7rJKDz.js} +4 -4
- 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-D6Il2Sob.js → remoteGeneration-B1_XsKXU.js} +16 -108
- package/dist/src/{server-BSB45Nt9.js → remoteGeneration-COpWcmWd.js} +15 -146
- package/dist/src/{server-Dx2TyCH2.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-CgVDrJmM.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-Bi9vBuW_.cjs → responses-1UFFF9N_.cjs} +51 -16
- package/dist/src/{responses-DL9m8CyY.js → responses-B3W2JvOQ.js} +49 -15
- package/dist/src/{responses--OsX2aYW.js → responses-B6ktc3Ra.js} +49 -15
- package/dist/src/{responses-C-flexAY.js → responses-URRzV8qE.js} +49 -15
- package/dist/src/rolldown-runtime-D_mwlA32.cjs +43 -0
- package/dist/src/rubyUtils-BYVlQ94c.js +3 -0
- package/dist/src/{rubyUtils-DsGrTx8R.js → rubyUtils-CXlFM2rR.js} +3 -3
- package/dist/src/{rubyUtils-DVLeA2jg.js → rubyUtils-CnlW8AYb.js} +3 -3
- package/dist/src/{rubyUtils-B6eljPuh.cjs → rubyUtils-CqUWBZAt.cjs} +18 -27
- package/dist/src/{rubyUtils-CYSQEG4a.js → rubyUtils-DdGojpfv.js} +3 -3
- 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-BVkaG2-l.js → sagemaker-CujrzP1a.js} +62 -51
- package/dist/src/{sagemaker-XnfhheQv.cjs → sagemaker-DzffAqo_.cjs} +65 -53
- package/dist/src/{sagemaker-D67yzMzs.js → sagemaker-vhtSV7JI.js} +62 -51
- package/dist/src/{sagemaker-BveBvuxm.js → sagemaker-yr1QKeBs.js} +61 -50
- package/dist/src/{scanner-1DqWi1Ej.js → scanner-DS0109SS.js} +7 -7
- package/dist/src/server/index.js +5105 -605
- 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-BArZuxsI.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-CE5G3a7x.js → signal-CSurUUyV.js} +3 -3
- 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-DDUe-5MC.js → slack-Bapo-7_8.js} +2 -2
- package/dist/src/{slack-1Rhq0EoV.cjs → slack-DMC1QVEg.cjs} +3 -2
- package/dist/src/{slack-D5Wpy8LM.js → slack-DTEFhrMn.js} +2 -2
- package/dist/src/{slack-acRb0IqQ.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-DAAyxcy6.cjs → store-B2NDDooM.cjs} +60 -24
- package/dist/src/{store-CYEy5J2D.js → store-DKd5592Q.js} +51 -20
- package/dist/src/{store-M0b1WfYb.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-DQ4WU5tX.js → tables-CRSXQ2Ke.js} +2 -2
- package/dist/src/{tables-CsWou1Bx.js → tables-CxjU7bBd.js} +3 -3
- package/dist/src/{tables-DUfh1F7Z.cjs → tables-DBIJU0WE.cjs} +6 -5
- package/dist/src/{tables-C4CH3zRr.js → tables-DafUHOeh.js} +3 -3
- package/dist/src/{telemetry-CQPez_Jp.js → telemetry-00ezXr_t.js} +5 -4
- package/dist/src/telemetry-ByPqDcKC.js +3 -0
- package/dist/src/{telemetry-Dsw_faFj.cjs → telemetry-CJ7FnCsc.cjs} +18 -11
- package/dist/src/{telemetry-dbaJ0E98.js → telemetry-DmXYcJNV.js} +5 -4
- package/dist/src/{telemetry-Dvqxv3YC.js → telemetry-DwX9XUN5.js} +4 -3
- package/dist/src/{text-KvuD2Iko.js → text-Db-Wt2u2.js} +1 -1
- package/dist/src/{text-DHxdyQqT.js → text-DwYK5EBn.js} +1 -1
- package/dist/src/{text-BVi-cLPJ.cjs → text-nywWsRBM.cjs} +1 -1
- package/dist/src/{tokenUsageUtils-C-bmyHoE.js → tokenUsageUtils-BjVkdk18.js} +1 -1
- package/dist/src/{tokenUsageUtils-CXrvO-wA.js → tokenUsageUtils-CDet74yk.js} +1 -1
- package/dist/src/tokenUsageUtils-CmnQ0G2m.js +142 -0
- package/dist/src/{tokenUsageUtils-Bb7DkZPz.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-DuWDupG7.js → transcription-B8uIgCYX.js} +5 -5
- package/dist/src/{transcription-CJspiD2c.js → transcription-CfU5loSq.js} +6 -6
- package/dist/src/{transcription-V2HaAmy2.js → transcription-Dkd22_4K.js} +6 -6
- package/dist/src/{transcription-BvjmiYB1.cjs → transcription-mzuf18Mq.cjs} +9 -8
- package/dist/src/{transform-lQrDE1BQ.js → transform-BIMynQsA.js} +9 -9
- 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-CTeuTR3S.cjs → transform-DhNkAUs8.cjs} +13 -12
- package/dist/src/{transform-CG0ehZNG.js → transform-DmvYBRll.js} +9 -9
- package/dist/src/{transform-zDhMmzwX.js → transform-EtD4jAWi.js} +9 -9
- package/dist/src/{transformersAvailability-CcHusyhw.js → transformersAvailability-0ThtPved.js} +1 -1
- package/dist/src/transformersAvailability-BYydDE5U.js +35 -0
- package/dist/src/{transformersAvailability-DLlROWhg.js → transformersAvailability-BvyU9vDD.js} +1 -1
- package/dist/src/{transformersAvailability-Cju9mHgR.cjs → transformersAvailability-BytPvKUW.cjs} +1 -1
- package/dist/src/{types-Dm9JM6Vb.js → types-BFevViUY.js} +115 -19
- package/dist/src/{types-Bgh5SOn6.js → types-BJQBBPTP.js} +115 -19
- package/dist/src/{types-CeaeaZdP.cjs → types-CxJvaY2S.cjs} +357 -172
- package/dist/src/{types-BGQDAP8i.js → types-D6glLbdF.js} +271 -170
- package/dist/src/{util-BYvQUPp7.js → util--WMgw7wM.js} +28 -8
- package/dist/src/{util-C9J8ahRn.js → util-5WnCSb0h.js} +72 -48
- package/dist/src/{util-CN3SrLT4.cjs → util-BSIuSLVK.cjs} +74 -49
- package/dist/src/{util-C8e5uydV.js → util-Bx677_k2.js} +154 -147
- package/dist/src/util-CN8om2rz.cjs +386 -0
- package/dist/src/{util-DDs-7g6-.js → util-CoQWM76y.js} +28 -8
- package/dist/src/util-DNl96nNs.js +327 -0
- package/dist/src/{util-DxWpWjhc.js → util-DURocbYR.js} +667 -507
- package/dist/src/util-Df8YMvS1.js +327 -0
- package/dist/src/{util-DvU2Pw8c.js → util-DiQ3QvBB.js} +28 -8
- package/dist/src/{util-oGMLA7vc.js → util-I-Rf-KaD.js} +862 -577
- package/dist/src/{util-olYL5C6N.cjs → util-IYzs5Y04.cjs} +33 -7
- package/dist/src/{util-D9TisOyk.js → util-LKTmNsMQ.js} +71 -47
- package/dist/src/{util-Bxn8emtE.cjs → util-SPsvFONY.cjs} +738 -582
- package/dist/src/{util-D3q0WQ-0.js → util-efByNxcr.js} +72 -48
- package/dist/src/util-kDURhgJW.js +328 -0
- package/dist/src/{utils-DJfvjyMj.js → utils-B0lzitHZ.js} +3 -3
- package/dist/src/{utils-BLJKfv0y.js → utils-BFOh20Gb.js} +3 -3
- package/dist/src/{utils-hXtCYanr.js → utils-BGY69tk_.js} +2 -2
- package/dist/src/{utils-B05gLxER.cjs → utils-Ve6kuJsa.cjs} +3 -3
- package/dist/src/version-BK20a4sw.js +16 -0
- package/dist/src/version-BWCSaByA.cjs +27 -0
- package/dist/src/version-eRkNuGv8.js +17 -0
- package/dist/src/version-lpHV_53E.js +16 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +56 -28
- package/dist/src/app/assets/Report-CQYFezYu.js +0 -1
- package/dist/src/app/assets/index-BXGkeMwh.css +0 -1
- package/dist/src/app/assets/index-BzJt18Jz.js +0 -385
- 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-Cr9oLMUa.js +0 -3
- package/dist/src/cache-DbLsVWB2.cjs +0 -3
- package/dist/src/cloud-Hphvo8kr.js +0 -3
- package/dist/src/codex-sdk-BAmYE7qy.js +0 -3
- package/dist/src/codex-sdk-CWEnH70W.cjs +0 -2
- package/dist/src/evalResult-D8MT9p0s.js +0 -3
- package/dist/src/evalResult-DElBuddX.js +0 -2
- package/dist/src/evalResult-Dvc-iucu.cjs +0 -2
- package/dist/src/evaluator-CVessDWe.js +0 -3
- package/dist/src/fetch-C7bGKDlQ.js +0 -3
- package/dist/src/graders-BOAzQEUe.cjs +0 -2
- package/dist/src/graders-D4BTsZdG2.js +0 -3
- package/dist/src/graders-DOJK1XpV.js +0 -2
- package/dist/src/graders-NAv9LcBn.js +0 -2
- package/dist/src/image-B5Mv-Z3h.js +0 -257
- package/dist/src/image-DVz2RiMF.js +0 -258
- package/dist/src/image-qUpPvmNZ.js +0 -257
- package/dist/src/image-x6KqLQl4.cjs +0 -280
- package/dist/src/providers-Bp4S-FvO.js +0 -2
- package/dist/src/providers-DV3ax9e_.cjs +0 -3
- package/dist/src/providers-u9Enmfok.js +0 -2
- package/dist/src/render-CH-62LbA.js +0 -135
- package/dist/src/render-CMEpfLaO.js +0 -136
- package/dist/src/render-DHIZ6_k8.js +0 -135
- package/dist/src/render-DfQSFxGE.cjs +0 -165
- package/dist/src/rubyUtils-D1L2d3jb.js +0 -3
- package/dist/src/rubyUtils-DUbq4tff.cjs +0 -2
- package/dist/src/server-BNYztJkh.js +0 -385
- package/dist/src/server-DCtHUqlp.js +0 -3
- package/dist/src/server-DaA2eR26.cjs +0 -2
- package/dist/src/store-CWOSz6D_.cjs +0 -2
- package/dist/src/store-DCDBhv7B.js +0 -3
- package/dist/src/store-Dn9HUkdW.js +0 -240
- package/dist/src/telemetry-C1IqxcdW.js +0 -3
- package/dist/src/telemetry-C4ZEa_es.cjs +0 -2
- package/dist/src/transform-Bbg6A8Jk.js +0 -216
- package/dist/src/transform-CUnzlsbn.cjs +0 -228
- package/dist/src/transform-DYX1_Xnh.js +0 -216
- package/dist/src/transform-DgKlRr73.cjs +0 -2
- package/dist/src/transform-M6ITAESf.js +0 -3
- package/dist/src/transform-UN5UGu8U.js +0 -213
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
const require_rolldown_runtime = require("./rolldown-runtime-D_mwlA32.cjs");
|
|
2
|
+
const require_logger = require("./logger-cfNpzI4o.cjs");
|
|
3
|
+
const require_fetch = require("./fetch-Dw4XZHjj.cjs");
|
|
4
|
+
const require_remoteGeneration = require("./remoteGeneration-DS9N3pgB.cjs");
|
|
5
|
+
let chalk = require("chalk");
|
|
6
|
+
chalk = require_rolldown_runtime.__toESM(chalk, 1);
|
|
7
|
+
require("opener");
|
|
8
|
+
let readline = require("readline");
|
|
9
|
+
readline = require_rolldown_runtime.__toESM(readline, 1);
|
|
10
|
+
//#region src/util/readline.ts
|
|
11
|
+
/**
|
|
12
|
+
* Factory function for creating readline interface.
|
|
13
|
+
* This abstraction makes it easier to mock in tests and prevents open handles.
|
|
14
|
+
*/
|
|
15
|
+
function createReadlineInterface() {
|
|
16
|
+
return readline.default.createInterface({
|
|
17
|
+
input: process.stdin,
|
|
18
|
+
output: process.stdout
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Prompts the user with a question and returns their answer.
|
|
23
|
+
* Automatically handles cleanup of the readline interface.
|
|
24
|
+
*/
|
|
25
|
+
async function promptUser(question) {
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
let rl = null;
|
|
28
|
+
try {
|
|
29
|
+
rl = createReadlineInterface();
|
|
30
|
+
rl.on("error", (err) => {
|
|
31
|
+
if (rl) rl.close();
|
|
32
|
+
reject(err);
|
|
33
|
+
});
|
|
34
|
+
rl.question(question, (answer) => {
|
|
35
|
+
if (rl) rl.close();
|
|
36
|
+
resolve(answer);
|
|
37
|
+
});
|
|
38
|
+
} catch (err) {
|
|
39
|
+
if (rl) rl.close();
|
|
40
|
+
reject(err);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Prompts the user with a yes/no question and returns a boolean.
|
|
46
|
+
* @param question The question to ask
|
|
47
|
+
* @param defaultYes If true, empty response defaults to yes. If false, defaults to no.
|
|
48
|
+
*/
|
|
49
|
+
async function promptYesNo(question, defaultYes = false) {
|
|
50
|
+
const answer = await promptUser(`${question} ${defaultYes ? "(Y/n): " : "(y/N): "}`);
|
|
51
|
+
if (defaultYes) return !answer.trim().toLowerCase().startsWith("n");
|
|
52
|
+
return answer.trim().toLowerCase().startsWith("y");
|
|
53
|
+
}
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region src/util/server.ts
|
|
56
|
+
var server_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
|
|
57
|
+
BrowserBehavior: () => BrowserBehavior,
|
|
58
|
+
checkServerFeatureSupport: () => checkServerFeatureSupport
|
|
59
|
+
});
|
|
60
|
+
const BrowserBehavior = {
|
|
61
|
+
ASK: 0,
|
|
62
|
+
OPEN: 1,
|
|
63
|
+
SKIP: 2,
|
|
64
|
+
OPEN_TO_REPORT: 3,
|
|
65
|
+
OPEN_TO_REDTEAM_CREATE: 4,
|
|
66
|
+
OPEN_TO_EVAL_SETUP: 5
|
|
67
|
+
};
|
|
68
|
+
BrowserBehavior.ASK, BrowserBehavior.OPEN, BrowserBehavior.SKIP, BrowserBehavior.OPEN_TO_REPORT, BrowserBehavior.OPEN_TO_REDTEAM_CREATE, BrowserBehavior.OPEN_TO_EVAL_SETUP;
|
|
69
|
+
const featureCache = /* @__PURE__ */ new Map();
|
|
70
|
+
/**
|
|
71
|
+
* Checks if a server supports a specific feature based on build date
|
|
72
|
+
* @param featureName - Name of the feature (for caching and logging)
|
|
73
|
+
* @param requiredBuildDate - Minimum build date when feature was added (ISO string)
|
|
74
|
+
* @returns Promise<boolean> - true if server supports the feature
|
|
75
|
+
*/
|
|
76
|
+
async function checkServerFeatureSupport(featureName, requiredBuildDate) {
|
|
77
|
+
const cacheKey = `${featureName}`;
|
|
78
|
+
if (featureCache.has(cacheKey)) return featureCache.get(cacheKey);
|
|
79
|
+
let supported = false;
|
|
80
|
+
try {
|
|
81
|
+
require_logger.logger.debug(`[Feature Detection] Checking server support for feature: ${featureName}`);
|
|
82
|
+
const versionUrl = require_remoteGeneration.getRemoteVersionUrl();
|
|
83
|
+
if (versionUrl) {
|
|
84
|
+
const data = await (await require_fetch.fetchWithProxy(versionUrl, {
|
|
85
|
+
method: "GET",
|
|
86
|
+
headers: { "Content-Type": "application/json" }
|
|
87
|
+
})).json();
|
|
88
|
+
if (data.buildDate) {
|
|
89
|
+
supported = new Date(data.buildDate) >= new Date(requiredBuildDate);
|
|
90
|
+
require_logger.logger.debug(`[Feature Detection] ${featureName}: buildDate=${data.buildDate}, required=${requiredBuildDate}, supported=${supported}`);
|
|
91
|
+
} else {
|
|
92
|
+
require_logger.logger.debug(`[Feature Detection] ${featureName}: no version info, assuming not supported`);
|
|
93
|
+
supported = false;
|
|
94
|
+
}
|
|
95
|
+
} else {
|
|
96
|
+
require_logger.logger.debug(`[Feature Detection] No remote URL available for ${featureName}, assuming local server supports it`);
|
|
97
|
+
supported = true;
|
|
98
|
+
}
|
|
99
|
+
} catch (error) {
|
|
100
|
+
require_logger.logger.debug(`[Feature Detection] Version check failed for ${featureName}, assuming not supported: ${error}`);
|
|
101
|
+
supported = false;
|
|
102
|
+
}
|
|
103
|
+
featureCache.set(cacheKey, supported);
|
|
104
|
+
return supported;
|
|
105
|
+
}
|
|
106
|
+
//#endregion
|
|
107
|
+
Object.defineProperty(exports, "checkServerFeatureSupport", {
|
|
108
|
+
enumerable: true,
|
|
109
|
+
get: function() {
|
|
110
|
+
return checkServerFeatureSupport;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
Object.defineProperty(exports, "promptYesNo", {
|
|
114
|
+
enumerable: true,
|
|
115
|
+
get: function() {
|
|
116
|
+
return promptYesNo;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
Object.defineProperty(exports, "server_exports", {
|
|
120
|
+
enumerable: true,
|
|
121
|
+
get: function() {
|
|
122
|
+
return server_exports;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=server-B8rqV126.cjs.map
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-DEq-mXcV.js";
|
|
2
|
+
import { a as logger } from "./logger-Ct2S6Yx-.js";
|
|
3
|
+
import { t as fetchWithProxy } from "./fetch-It34O8Ur.js";
|
|
4
|
+
import { o as getRemoteVersionUrl } from "./remoteGeneration-DsaSwmG2.js";
|
|
5
|
+
import "chalk";
|
|
6
|
+
import "opener";
|
|
7
|
+
import readline from "readline";
|
|
8
|
+
//#region src/util/readline.ts
|
|
9
|
+
/**
|
|
10
|
+
* Factory function for creating readline interface.
|
|
11
|
+
* This abstraction makes it easier to mock in tests and prevents open handles.
|
|
12
|
+
*/
|
|
13
|
+
function createReadlineInterface() {
|
|
14
|
+
return readline.createInterface({
|
|
15
|
+
input: process.stdin,
|
|
16
|
+
output: process.stdout
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Prompts the user with a question and returns their answer.
|
|
21
|
+
* Automatically handles cleanup of the readline interface.
|
|
22
|
+
*/
|
|
23
|
+
async function promptUser(question) {
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
let rl = null;
|
|
26
|
+
try {
|
|
27
|
+
rl = createReadlineInterface();
|
|
28
|
+
rl.on("error", (err) => {
|
|
29
|
+
if (rl) rl.close();
|
|
30
|
+
reject(err);
|
|
31
|
+
});
|
|
32
|
+
rl.question(question, (answer) => {
|
|
33
|
+
if (rl) rl.close();
|
|
34
|
+
resolve(answer);
|
|
35
|
+
});
|
|
36
|
+
} catch (err) {
|
|
37
|
+
if (rl) rl.close();
|
|
38
|
+
reject(err);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Prompts the user with a yes/no question and returns a boolean.
|
|
44
|
+
* @param question The question to ask
|
|
45
|
+
* @param defaultYes If true, empty response defaults to yes. If false, defaults to no.
|
|
46
|
+
*/
|
|
47
|
+
async function promptYesNo(question, defaultYes = false) {
|
|
48
|
+
const answer = await promptUser(`${question} ${defaultYes ? "(Y/n): " : "(y/N): "}`);
|
|
49
|
+
if (defaultYes) return !answer.trim().toLowerCase().startsWith("n");
|
|
50
|
+
return answer.trim().toLowerCase().startsWith("y");
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
//#region src/util/server.ts
|
|
54
|
+
var server_exports = /* @__PURE__ */ __exportAll({
|
|
55
|
+
BrowserBehavior: () => BrowserBehavior,
|
|
56
|
+
checkServerFeatureSupport: () => checkServerFeatureSupport
|
|
57
|
+
});
|
|
58
|
+
const BrowserBehavior = {
|
|
59
|
+
ASK: 0,
|
|
60
|
+
OPEN: 1,
|
|
61
|
+
SKIP: 2,
|
|
62
|
+
OPEN_TO_REPORT: 3,
|
|
63
|
+
OPEN_TO_REDTEAM_CREATE: 4,
|
|
64
|
+
OPEN_TO_EVAL_SETUP: 5
|
|
65
|
+
};
|
|
66
|
+
BrowserBehavior.ASK, BrowserBehavior.OPEN, BrowserBehavior.SKIP, BrowserBehavior.OPEN_TO_REPORT, BrowserBehavior.OPEN_TO_REDTEAM_CREATE, BrowserBehavior.OPEN_TO_EVAL_SETUP;
|
|
67
|
+
const featureCache = /* @__PURE__ */ new Map();
|
|
68
|
+
/**
|
|
69
|
+
* Checks if a server supports a specific feature based on build date
|
|
70
|
+
* @param featureName - Name of the feature (for caching and logging)
|
|
71
|
+
* @param requiredBuildDate - Minimum build date when feature was added (ISO string)
|
|
72
|
+
* @returns Promise<boolean> - true if server supports the feature
|
|
73
|
+
*/
|
|
74
|
+
async function checkServerFeatureSupport(featureName, requiredBuildDate) {
|
|
75
|
+
const cacheKey = `${featureName}`;
|
|
76
|
+
if (featureCache.has(cacheKey)) return featureCache.get(cacheKey);
|
|
77
|
+
let supported = false;
|
|
78
|
+
try {
|
|
79
|
+
logger.debug(`[Feature Detection] Checking server support for feature: ${featureName}`);
|
|
80
|
+
const versionUrl = getRemoteVersionUrl();
|
|
81
|
+
if (versionUrl) {
|
|
82
|
+
const data = await (await fetchWithProxy(versionUrl, {
|
|
83
|
+
method: "GET",
|
|
84
|
+
headers: { "Content-Type": "application/json" }
|
|
85
|
+
})).json();
|
|
86
|
+
if (data.buildDate) {
|
|
87
|
+
supported = new Date(data.buildDate) >= new Date(requiredBuildDate);
|
|
88
|
+
logger.debug(`[Feature Detection] ${featureName}: buildDate=${data.buildDate}, required=${requiredBuildDate}, supported=${supported}`);
|
|
89
|
+
} else {
|
|
90
|
+
logger.debug(`[Feature Detection] ${featureName}: no version info, assuming not supported`);
|
|
91
|
+
supported = false;
|
|
92
|
+
}
|
|
93
|
+
} else {
|
|
94
|
+
logger.debug(`[Feature Detection] No remote URL available for ${featureName}, assuming local server supports it`);
|
|
95
|
+
supported = true;
|
|
96
|
+
}
|
|
97
|
+
} catch (error) {
|
|
98
|
+
logger.debug(`[Feature Detection] Version check failed for ${featureName}, assuming not supported: ${error}`);
|
|
99
|
+
supported = false;
|
|
100
|
+
}
|
|
101
|
+
featureCache.set(cacheKey, supported);
|
|
102
|
+
return supported;
|
|
103
|
+
}
|
|
104
|
+
//#endregion
|
|
105
|
+
export { server_exports as n, promptYesNo as r, checkServerFeatureSupport as t };
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=server-CMJD10J4.js.map
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-DEq-mXcV.js";
|
|
2
|
+
import { a as logger } from "./logger-KD8JjCRJ.js";
|
|
3
|
+
import { P as getDefaultPort, t as fetchWithProxy } from "./fetch-BufrQtvR.js";
|
|
4
|
+
import "./version-BK20a4sw.js";
|
|
5
|
+
import { o as getRemoteVersionUrl } from "./remoteGeneration-COpWcmWd.js";
|
|
6
|
+
import "chalk";
|
|
7
|
+
import opener from "opener";
|
|
8
|
+
import readline from "readline";
|
|
9
|
+
//#region src/util/readline.ts
|
|
10
|
+
/**
|
|
11
|
+
* Factory function for creating readline interface.
|
|
12
|
+
* This abstraction makes it easier to mock in tests and prevents open handles.
|
|
13
|
+
*/
|
|
14
|
+
function createReadlineInterface() {
|
|
15
|
+
return readline.createInterface({
|
|
16
|
+
input: process.stdin,
|
|
17
|
+
output: process.stdout
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Prompts the user with a question and returns their answer.
|
|
22
|
+
* Automatically handles cleanup of the readline interface.
|
|
23
|
+
*/
|
|
24
|
+
async function promptUser(question) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
let rl = null;
|
|
27
|
+
try {
|
|
28
|
+
rl = createReadlineInterface();
|
|
29
|
+
rl.on("error", (err) => {
|
|
30
|
+
if (rl) rl.close();
|
|
31
|
+
reject(err);
|
|
32
|
+
});
|
|
33
|
+
rl.question(question, (answer) => {
|
|
34
|
+
if (rl) rl.close();
|
|
35
|
+
resolve(answer);
|
|
36
|
+
});
|
|
37
|
+
} catch (err) {
|
|
38
|
+
if (rl) rl.close();
|
|
39
|
+
reject(err);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Prompts the user with a yes/no question and returns a boolean.
|
|
45
|
+
* @param question The question to ask
|
|
46
|
+
* @param defaultYes If true, empty response defaults to yes. If false, defaults to no.
|
|
47
|
+
*/
|
|
48
|
+
async function promptYesNo(question, defaultYes = false) {
|
|
49
|
+
const answer = await promptUser(`${question} ${defaultYes ? "(Y/n): " : "(y/N): "}`);
|
|
50
|
+
if (defaultYes) return !answer.trim().toLowerCase().startsWith("n");
|
|
51
|
+
return answer.trim().toLowerCase().startsWith("y");
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
//#region src/util/server.ts
|
|
55
|
+
var server_exports = /* @__PURE__ */ __exportAll({
|
|
56
|
+
BrowserBehavior: () => BrowserBehavior,
|
|
57
|
+
BrowserBehaviorNames: () => BrowserBehaviorNames,
|
|
58
|
+
checkServerFeatureSupport: () => checkServerFeatureSupport,
|
|
59
|
+
checkServerRunning: () => checkServerRunning,
|
|
60
|
+
openBrowser: () => openBrowser
|
|
61
|
+
});
|
|
62
|
+
const BrowserBehavior = {
|
|
63
|
+
ASK: 0,
|
|
64
|
+
OPEN: 1,
|
|
65
|
+
SKIP: 2,
|
|
66
|
+
OPEN_TO_REPORT: 3,
|
|
67
|
+
OPEN_TO_REDTEAM_CREATE: 4,
|
|
68
|
+
OPEN_TO_EVAL_SETUP: 5
|
|
69
|
+
};
|
|
70
|
+
const BrowserBehaviorNames = {
|
|
71
|
+
[BrowserBehavior.ASK]: "ASK",
|
|
72
|
+
[BrowserBehavior.OPEN]: "OPEN",
|
|
73
|
+
[BrowserBehavior.SKIP]: "SKIP",
|
|
74
|
+
[BrowserBehavior.OPEN_TO_REPORT]: "OPEN_TO_REPORT",
|
|
75
|
+
[BrowserBehavior.OPEN_TO_REDTEAM_CREATE]: "OPEN_TO_REDTEAM_CREATE",
|
|
76
|
+
[BrowserBehavior.OPEN_TO_EVAL_SETUP]: "OPEN_TO_EVAL_SETUP"
|
|
77
|
+
};
|
|
78
|
+
const featureCache = /* @__PURE__ */ new Map();
|
|
79
|
+
/**
|
|
80
|
+
* Checks if a server supports a specific feature based on build date
|
|
81
|
+
* @param featureName - Name of the feature (for caching and logging)
|
|
82
|
+
* @param requiredBuildDate - Minimum build date when feature was added (ISO string)
|
|
83
|
+
* @returns Promise<boolean> - true if server supports the feature
|
|
84
|
+
*/
|
|
85
|
+
async function checkServerFeatureSupport(featureName, requiredBuildDate) {
|
|
86
|
+
const cacheKey = `${featureName}`;
|
|
87
|
+
if (featureCache.has(cacheKey)) return featureCache.get(cacheKey);
|
|
88
|
+
let supported = false;
|
|
89
|
+
try {
|
|
90
|
+
logger.debug(`[Feature Detection] Checking server support for feature: ${featureName}`);
|
|
91
|
+
const versionUrl = getRemoteVersionUrl();
|
|
92
|
+
if (versionUrl) {
|
|
93
|
+
const data = await (await fetchWithProxy(versionUrl, {
|
|
94
|
+
method: "GET",
|
|
95
|
+
headers: { "Content-Type": "application/json" }
|
|
96
|
+
})).json();
|
|
97
|
+
if (data.buildDate) {
|
|
98
|
+
supported = new Date(data.buildDate) >= new Date(requiredBuildDate);
|
|
99
|
+
logger.debug(`[Feature Detection] ${featureName}: buildDate=${data.buildDate}, required=${requiredBuildDate}, supported=${supported}`);
|
|
100
|
+
} else {
|
|
101
|
+
logger.debug(`[Feature Detection] ${featureName}: no version info, assuming not supported`);
|
|
102
|
+
supported = false;
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
logger.debug(`[Feature Detection] No remote URL available for ${featureName}, assuming local server supports it`);
|
|
106
|
+
supported = true;
|
|
107
|
+
}
|
|
108
|
+
} catch (error) {
|
|
109
|
+
logger.debug(`[Feature Detection] Version check failed for ${featureName}, assuming not supported: ${error}`);
|
|
110
|
+
supported = false;
|
|
111
|
+
}
|
|
112
|
+
featureCache.set(cacheKey, supported);
|
|
113
|
+
return supported;
|
|
114
|
+
}
|
|
115
|
+
async function checkServerRunning(port = getDefaultPort()) {
|
|
116
|
+
logger.debug(`Checking for existing server on port ${port}...`);
|
|
117
|
+
try {
|
|
118
|
+
const data = await (await fetchWithProxy(`http://localhost:${port}/health`, { headers: { "x-promptfoo-silent": "true" } })).json();
|
|
119
|
+
return data.status === "OK" && data.version === "0.121.7";
|
|
120
|
+
} catch (err) {
|
|
121
|
+
logger.debug(`No existing server found - this is expected on first startup. ${String(err)}`);
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async function openBrowser(browserBehavior, port = getDefaultPort()) {
|
|
126
|
+
const baseUrl = `http://localhost:${port}`;
|
|
127
|
+
let url = baseUrl;
|
|
128
|
+
if (browserBehavior === BrowserBehavior.OPEN_TO_REPORT) url = `${baseUrl}/report`;
|
|
129
|
+
else if (browserBehavior === BrowserBehavior.OPEN_TO_REDTEAM_CREATE) url = `${baseUrl}/redteam/setup`;
|
|
130
|
+
else if (browserBehavior === BrowserBehavior.OPEN_TO_EVAL_SETUP) url = `${baseUrl}/setup`;
|
|
131
|
+
const doOpen = async () => {
|
|
132
|
+
try {
|
|
133
|
+
logger.info("Press Ctrl+C to stop the server");
|
|
134
|
+
await opener(url);
|
|
135
|
+
} catch (err) {
|
|
136
|
+
logger.error(`Failed to open browser: ${String(err)}`);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
if (browserBehavior === BrowserBehavior.ASK) {
|
|
140
|
+
if (await promptYesNo("Open URL in browser?", false)) await doOpen();
|
|
141
|
+
} else if (browserBehavior !== BrowserBehavior.SKIP) await doOpen();
|
|
142
|
+
}
|
|
143
|
+
//#endregion
|
|
144
|
+
export { openBrowser as a, checkServerRunning as i, BrowserBehaviorNames as n, server_exports as o, checkServerFeatureSupport as r, promptYesNo as s, BrowserBehavior as t };
|
|
145
|
+
|
|
146
|
+
//# sourceMappingURL=server-Ddp8GNMp.js.map
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { s as logger } from "./logger-BbY6ypFL.js";
|
|
3
|
+
import { N as getDefaultPort, n as fetchWithProxy } from "./fetch-DXUnXkVU.js";
|
|
4
|
+
import "./version-eRkNuGv8.js";
|
|
5
|
+
import { o as getRemoteVersionUrl } from "./remoteGeneration-B1_XsKXU.js";
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import opener from "opener";
|
|
8
|
+
import readline from "readline";
|
|
9
|
+
//#region src/util/readline.ts
|
|
10
|
+
/**
|
|
11
|
+
* Factory function for creating readline interface.
|
|
12
|
+
* This abstraction makes it easier to mock in tests and prevents open handles.
|
|
13
|
+
*/
|
|
14
|
+
function createReadlineInterface() {
|
|
15
|
+
return readline.createInterface({
|
|
16
|
+
input: process.stdin,
|
|
17
|
+
output: process.stdout
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Prompts the user with a question and returns their answer.
|
|
22
|
+
* Automatically handles cleanup of the readline interface.
|
|
23
|
+
*/
|
|
24
|
+
async function promptUser(question) {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
let rl = null;
|
|
27
|
+
try {
|
|
28
|
+
rl = createReadlineInterface();
|
|
29
|
+
rl.on("error", (err) => {
|
|
30
|
+
if (rl) rl.close();
|
|
31
|
+
reject(err);
|
|
32
|
+
});
|
|
33
|
+
rl.question(question, (answer) => {
|
|
34
|
+
if (rl) rl.close();
|
|
35
|
+
resolve(answer);
|
|
36
|
+
});
|
|
37
|
+
} catch (err) {
|
|
38
|
+
if (rl) rl.close();
|
|
39
|
+
reject(err);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Prompts the user with a yes/no question and returns a boolean.
|
|
45
|
+
* @param question The question to ask
|
|
46
|
+
* @param defaultYes If true, empty response defaults to yes. If false, defaults to no.
|
|
47
|
+
*/
|
|
48
|
+
async function promptYesNo(question, defaultYes = false) {
|
|
49
|
+
const answer = await promptUser(`${question} ${defaultYes ? "(Y/n): " : "(y/N): "}`);
|
|
50
|
+
if (defaultYes) return !answer.trim().toLowerCase().startsWith("n");
|
|
51
|
+
return answer.trim().toLowerCase().startsWith("y");
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
//#region src/util/server.ts
|
|
55
|
+
const BrowserBehavior = {
|
|
56
|
+
ASK: 0,
|
|
57
|
+
OPEN: 1,
|
|
58
|
+
SKIP: 2,
|
|
59
|
+
OPEN_TO_REPORT: 3,
|
|
60
|
+
OPEN_TO_REDTEAM_CREATE: 4,
|
|
61
|
+
OPEN_TO_EVAL_SETUP: 5
|
|
62
|
+
};
|
|
63
|
+
const BrowserBehaviorNames = {
|
|
64
|
+
[BrowserBehavior.ASK]: "ASK",
|
|
65
|
+
[BrowserBehavior.OPEN]: "OPEN",
|
|
66
|
+
[BrowserBehavior.SKIP]: "SKIP",
|
|
67
|
+
[BrowserBehavior.OPEN_TO_REPORT]: "OPEN_TO_REPORT",
|
|
68
|
+
[BrowserBehavior.OPEN_TO_REDTEAM_CREATE]: "OPEN_TO_REDTEAM_CREATE",
|
|
69
|
+
[BrowserBehavior.OPEN_TO_EVAL_SETUP]: "OPEN_TO_EVAL_SETUP"
|
|
70
|
+
};
|
|
71
|
+
const featureCache = /* @__PURE__ */ new Map();
|
|
72
|
+
/**
|
|
73
|
+
* Checks if a server supports a specific feature based on build date
|
|
74
|
+
* @param featureName - Name of the feature (for caching and logging)
|
|
75
|
+
* @param requiredBuildDate - Minimum build date when feature was added (ISO string)
|
|
76
|
+
* @returns Promise<boolean> - true if server supports the feature
|
|
77
|
+
*/
|
|
78
|
+
async function checkServerFeatureSupport(featureName, requiredBuildDate) {
|
|
79
|
+
const cacheKey = `${featureName}`;
|
|
80
|
+
if (featureCache.has(cacheKey)) return featureCache.get(cacheKey);
|
|
81
|
+
let supported = false;
|
|
82
|
+
try {
|
|
83
|
+
logger.debug(`[Feature Detection] Checking server support for feature: ${featureName}`);
|
|
84
|
+
const versionUrl = getRemoteVersionUrl();
|
|
85
|
+
if (versionUrl) {
|
|
86
|
+
const data = await (await fetchWithProxy(versionUrl, {
|
|
87
|
+
method: "GET",
|
|
88
|
+
headers: { "Content-Type": "application/json" }
|
|
89
|
+
})).json();
|
|
90
|
+
if (data.buildDate) {
|
|
91
|
+
supported = new Date(data.buildDate) >= new Date(requiredBuildDate);
|
|
92
|
+
logger.debug(`[Feature Detection] ${featureName}: buildDate=${data.buildDate}, required=${requiredBuildDate}, supported=${supported}`);
|
|
93
|
+
} else {
|
|
94
|
+
logger.debug(`[Feature Detection] ${featureName}: no version info, assuming not supported`);
|
|
95
|
+
supported = false;
|
|
96
|
+
}
|
|
97
|
+
} else {
|
|
98
|
+
logger.debug(`[Feature Detection] No remote URL available for ${featureName}, assuming local server supports it`);
|
|
99
|
+
supported = true;
|
|
100
|
+
}
|
|
101
|
+
} catch (error) {
|
|
102
|
+
logger.debug(`[Feature Detection] Version check failed for ${featureName}, assuming not supported: ${error}`);
|
|
103
|
+
supported = false;
|
|
104
|
+
}
|
|
105
|
+
featureCache.set(cacheKey, supported);
|
|
106
|
+
return supported;
|
|
107
|
+
}
|
|
108
|
+
async function checkServerRunning(port = getDefaultPort()) {
|
|
109
|
+
logger.debug(`Checking for existing server on port ${port}...`);
|
|
110
|
+
try {
|
|
111
|
+
const data = await (await fetchWithProxy(`http://localhost:${port}/health`, { headers: { "x-promptfoo-silent": "true" } })).json();
|
|
112
|
+
return data.status === "OK" && data.version === "0.121.7";
|
|
113
|
+
} catch (err) {
|
|
114
|
+
logger.debug(`No existing server found - this is expected on first startup. ${String(err)}`);
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async function openBrowser(browserBehavior, port = getDefaultPort()) {
|
|
119
|
+
const baseUrl = `http://localhost:${port}`;
|
|
120
|
+
let url = baseUrl;
|
|
121
|
+
if (browserBehavior === BrowserBehavior.OPEN_TO_REPORT) url = `${baseUrl}/report`;
|
|
122
|
+
else if (browserBehavior === BrowserBehavior.OPEN_TO_REDTEAM_CREATE) url = `${baseUrl}/redteam/setup`;
|
|
123
|
+
else if (browserBehavior === BrowserBehavior.OPEN_TO_EVAL_SETUP) url = `${baseUrl}/setup`;
|
|
124
|
+
const doOpen = async () => {
|
|
125
|
+
try {
|
|
126
|
+
logger.info("Press Ctrl+C to stop the server");
|
|
127
|
+
await opener(url);
|
|
128
|
+
} catch (err) {
|
|
129
|
+
logger.error(`Failed to open browser: ${String(err)}`);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
if (browserBehavior === BrowserBehavior.ASK) {
|
|
133
|
+
if (await promptYesNo("Open URL in browser?", false)) await doOpen();
|
|
134
|
+
} else if (browserBehavior !== BrowserBehavior.SKIP) await doOpen();
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Opens authentication URLs in the browser with environment-aware behavior.
|
|
138
|
+
*
|
|
139
|
+
* @param authUrl - The login/signup URL to open in the browser
|
|
140
|
+
* @param welcomeUrl - The URL where users can get their API token after login
|
|
141
|
+
* @param browserBehavior - Controls how the browser opening is handled:
|
|
142
|
+
* - BrowserBehavior.ASK: Prompts user before opening (defaults to yes)
|
|
143
|
+
* - BrowserBehavior.OPEN: Opens browser automatically without prompting
|
|
144
|
+
* - BrowserBehavior.SKIP: Shows manual URLs without opening browser
|
|
145
|
+
* @returns Promise that resolves when the operation completes
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* // Prompt user to open login page
|
|
150
|
+
* await openAuthBrowser(
|
|
151
|
+
* 'https://promptfoo.app',
|
|
152
|
+
* 'https://promptfoo.app/welcome',
|
|
153
|
+
* BrowserBehavior.ASK
|
|
154
|
+
* );
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
async function openAuthBrowser(authUrl, welcomeUrl, browserBehavior) {
|
|
158
|
+
const doOpen = async () => {
|
|
159
|
+
try {
|
|
160
|
+
logger.info(`Opening ${authUrl} in your browser...`);
|
|
161
|
+
await opener(authUrl);
|
|
162
|
+
logger.info(`After logging in, get your API token at ${chalk.green(welcomeUrl)}`);
|
|
163
|
+
} catch (err) {
|
|
164
|
+
logger.error(`Failed to open browser: ${String(err)}`);
|
|
165
|
+
logger.info(`Please visit: ${chalk.green(authUrl)}`);
|
|
166
|
+
logger.info(`After logging in, get your API token at ${chalk.green(welcomeUrl)}`);
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
if (browserBehavior === BrowserBehavior.ASK) if (await promptYesNo("Open login page in browser?", true)) await doOpen();
|
|
170
|
+
else {
|
|
171
|
+
logger.info(`Please visit: ${chalk.green(authUrl)}`);
|
|
172
|
+
logger.info(`After logging in, get your API token at ${chalk.green(welcomeUrl)}`);
|
|
173
|
+
}
|
|
174
|
+
else if (browserBehavior === BrowserBehavior.SKIP) {
|
|
175
|
+
logger.info(`Please visit: ${chalk.green(authUrl)}`);
|
|
176
|
+
logger.info(`After logging in, get your API token at ${chalk.green(welcomeUrl)}`);
|
|
177
|
+
} else await doOpen();
|
|
178
|
+
}
|
|
179
|
+
//#endregion
|
|
180
|
+
export { openAuthBrowser as a, promptYesNo as c, checkServerRunning as i, BrowserBehaviorNames as n, openBrowser as o, checkServerFeatureSupport as r, promptUser as s, BrowserBehavior as t };
|
|
181
|
+
|
|
182
|
+
//# sourceMappingURL=server-DhMHosWj.js.map
|