promptfoo 0.120.26 → 0.121.1
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/drizzle/0023_wooden_mandrill.sql +2 -0
- package/dist/drizzle/meta/0023_snapshot.json +1496 -0
- package/dist/drizzle/meta/_journal.json +7 -0
- package/dist/src/{ListApp-D3DG0F8h.js → ListApp-Du7YVwj5.js} +2 -4
- package/dist/src/accounts-BgNJDBE6.js +206 -0
- package/dist/src/{accounts-BzEY8H3v.cjs → accounts-Bx-x3bmW.cjs} +99 -80
- package/dist/src/{accounts-DHHiXsy6.js → accounts-CMqkzrVf.js} +61 -36
- package/dist/src/{accounts-R3gfCR_g.js → accounts-xrUGFA6n.js} +60 -35
- package/dist/src/{agentic-utils-D6_gzOUF.js → agentic-utils-BKIN5PKu.js} +9 -10
- package/dist/src/{agents-CwM7re15.cjs → agents-B0f4HICh.cjs} +37 -40
- package/dist/src/{agents-Cnph5GLD.js → agents-C-dDThPK.js} +37 -37
- package/dist/src/{agents-C7BiinFI.cjs → agents-CErsqg5U.cjs} +19 -27
- package/dist/src/{agents-v4cW_ZgC.js → agents-CVIn-Utx.js} +19 -22
- package/dist/src/{agents-GiUianme.js → agents-CXknwsFX.js} +37 -40
- package/dist/src/{agents-DETIQHqF.js → agents-DeH4Gu94.js} +21 -28
- package/dist/src/{agents-DYIT-hQy.js → agents-Dy2YpZpa.js} +38 -41
- package/dist/src/{agents-Cao4i7AX.js → agents-aF4-T121.js} +19 -30
- package/dist/src/{aimlapi-DMF6v_vb.js → aimlapi-BAGZDo5G.js} +16 -18
- package/dist/src/{aimlapi-CMJpKK-B.js → aimlapi-BNfTBexL.js} +15 -17
- package/dist/src/{aimlapi-DtSf1ykJ.js → aimlapi-DHRKlBEA.js} +15 -4
- package/dist/src/{aimlapi-DoGLcQW_.cjs → aimlapi-tg0Gkcvr.cjs} +15 -16
- package/dist/src/app/assets/index-BFCZg7hQ.js +439 -0
- package/dist/src/app/assets/index-NCn4eVBv.css +1 -0
- package/dist/src/app/assets/{vendor-charts-CYyo8R8v.js → vendor-charts-CCl15Imd.js} +1 -1
- package/dist/src/app/assets/{vendor-markdown-DSmzq4Jh.js → vendor-markdown-0tekx3KX.js} +1 -1
- package/dist/src/app/index.html +4 -34
- package/dist/src/{audio-DUH4q0Xq.js → audio-BRODU0UK.js} +7 -9
- package/dist/src/{audio-BWjyvHn9.cjs → audio-BWeaWovU.cjs} +6 -7
- package/dist/src/{audio-U580w8jM.js → audio-CHQ4r-RV.js} +6 -5
- package/dist/src/{audio-BrJBFN2b.js → audio-tf_NBjlC.js} +6 -8
- package/dist/src/base-B0tcrnq_.js +193 -0
- package/dist/src/base-B4QJRyFS.js +194 -0
- package/dist/src/base-DBtwl2FR.cjs +222 -0
- package/dist/src/base-fEDN28WM.js +193 -0
- package/dist/src/{blobs-kt8v3UyH.js → blobs-BAU-dXan.js} +9 -12
- package/dist/src/{blobs-C9J2mVgo.js → blobs-Bpg5rH6i.js} +9 -12
- package/dist/src/{blobs-673H0jCl.cjs → blobs-DvS-O6be.cjs} +34 -37
- package/dist/src/blobs-qTYm-1PY.js +236 -0
- package/dist/src/{cache-BLLayYEN.js → cache-8XhNqPKW.js} +64 -67
- package/dist/src/cache-Bbn1Nyrd.cjs +5 -0
- package/dist/src/cache-BwsMSda7.js +6 -0
- package/dist/src/{cache-mIszOnuz.js → cache-CG0SlR1d.js} +64 -66
- package/dist/src/{cache-7xULbvt3.cjs → cache-COish3-W.cjs} +114 -117
- package/dist/src/cache-D3eqDYGU.js +739 -0
- package/dist/src/{chat-Fl6TZJRS.cjs → chat-2K608PeQ.cjs} +20 -21
- package/dist/src/chat-BKm79wib.js +764 -0
- package/dist/src/{chat-XPN9YHhr.js → chat-CM_kyI8B.js} +20 -9
- package/dist/src/{chat-DIywASPG.js → chat-CRWNNq73.js} +49 -49
- package/dist/src/{chat-C8Ei4f87.js → chat-CznLWr_D.js} +49 -49
- package/dist/src/{chat-CgyGj2hC.js → chat-DHMH-N64.js} +20 -22
- package/dist/src/{chat-C4zqjObh.cjs → chat-DaqekjFr.cjs} +69 -69
- package/dist/src/{chat-Cpz3O-Xl.js → chat-DxysjBvt.js} +21 -23
- package/dist/src/{chatkit-Dpxrq4eD.js → chatkit-65VXf5SR.js} +58 -58
- package/dist/src/{chatkit-DIrJX8xk.js → chatkit-Be-Q-a9F.js} +58 -60
- package/dist/src/{chatkit-DEls11hE.js → chatkit-BxFvW8KY.js} +58 -60
- package/dist/src/{chatkit-e25Ziu17.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-6-xTaLwM.js → claude-agent-sdk-BLTu0WBO.js} +45 -31
- package/dist/src/{claude-agent-sdk-BzxF6NIJ.cjs → claude-agent-sdk-CJH22shf.cjs} +44 -29
- package/dist/src/{claude-agent-sdk-CmkTnKGH.js → claude-agent-sdk-D6_k9FKA.js} +45 -33
- package/dist/src/{claude-agent-sdk-rXCBLK_o.js → claude-agent-sdk-Dy5lT-Tx.js} +46 -21
- package/dist/src/{cloud-BMbRVJFw.js → cloud-Bc9526yV.js} +32 -12
- package/dist/src/cloud-DmE0EwsY.js +4 -0
- package/dist/src/{cloudflare-ai-CUg4BTcj.js → cloudflare-ai-C9r2sRhw.js} +16 -18
- package/dist/src/{cloudflare-ai-Z9X219gp.js → cloudflare-ai-CWWJCRim.js} +16 -4
- package/dist/src/{cloudflare-ai-BAQ0u_dg.cjs → cloudflare-ai-ClWSdor4.cjs} +16 -17
- package/dist/src/{cloudflare-ai-CobxMTR4.js → cloudflare-ai-ICsOuD-z.js} +17 -19
- package/dist/src/{cloudflare-gateway-C0sgfr_z.cjs → cloudflare-gateway-C2_-KG5o.cjs} +21 -22
- package/dist/src/{cloudflare-gateway-_itGuXry.js → cloudflare-gateway-D6O7AlYb.js} +23 -23
- package/dist/src/{cloudflare-gateway-D2_yi-Fh.js → cloudflare-gateway-D6xFc5pa.js} +21 -25
- package/dist/src/{cloudflare-gateway-Djf3F3_H.js → cloudflare-gateway-pXGHxJ47.js} +26 -14
- package/dist/src/{codex-sdk-ibXwdglL.js → codex-sdk-C6UMlxwV.js} +49 -32
- package/dist/src/{codex-sdk-BASDNkIl.js → codex-sdk-DUwKWezN.js} +49 -30
- package/dist/src/{codex-sdk-dSnGdgIp.js → codex-sdk-GGAw0qbD.js} +49 -32
- package/dist/src/{codex-sdk-wTEpMM_X.cjs → codex-sdk-fAO0c3yA.cjs} +49 -32
- package/dist/src/{cometapi-B01btbfb.js → cometapi-BasUi7-_.js} +17 -19
- package/dist/src/{cometapi-DHUAH6nK.js → cometapi-Bbjp5V4x.js} +16 -4
- package/dist/src/{cometapi-ChAaRjg5.js → cometapi-DkXrKi5z.js} +21 -24
- package/dist/src/{cometapi-JbvOJSCO.cjs → cometapi-vY6aDZgo.cjs} +21 -22
- package/dist/src/{completion-D9_MDlnd.js → completion-6Mx_iXxK.js} +11 -13
- package/dist/src/{completion-BBJ6zmG3.js → completion-C5rtR_9P.js} +11 -13
- package/dist/src/{completion-DDyL3Cb2.cjs → completion-CDOouNzq.cjs} +21 -23
- package/dist/src/completion-C_P3ypkJ.js +120 -0
- package/dist/src/createHash-CTQmL3G2.js +15 -0
- package/dist/src/createHash-CfZSc0b4.cjs +27 -0
- package/dist/src/createHash-Da8fMwqB.js +16 -0
- package/dist/src/createHash-DmPQkvBh.js +15 -0
- package/dist/src/{docker-JAAubMw3.js → docker-5KcG-_86.js} +18 -20
- package/dist/src/{docker-Ckw-j7Rr.cjs → docker-BwsKwxFs.cjs} +18 -19
- package/dist/src/{docker-vnOg96gi.js → docker-CZnqU1XV.js} +18 -7
- package/dist/src/{docker-BuButc4D.js → docker-DzxyDPIj.js} +19 -21
- package/dist/src/entrypoint.js +2 -3
- package/dist/src/{errors-DnGCbnx8.js → errors-P6ll7XSJ.js} +2 -2
- package/dist/src/{esm-CYhseqj4.js → esm-C03C-mv3.js} +17 -20
- package/dist/src/{esm-rDtG_2rg.js → esm-CaIwzWR5.js} +18 -21
- package/dist/src/esm-Cd1AjG1D.js +379 -0
- package/dist/src/{esm-BQkx5roy.cjs → esm-CnNt7sI4.cjs} +47 -49
- package/dist/src/eval-17JizQIv.js +15 -0
- package/dist/src/{eval-CYrbG57o.js → eval-DmFyWU7i.js} +49 -55
- package/dist/src/{evalResult-COsVttMA.js → evalResult-CDQiuUuf.js} +16 -12
- package/dist/src/{evalResult-6JaUIStC.js → evalResult-CTG2AHOS.js} +10 -11
- package/dist/src/evalResult-Cqj8pldJ.js +12 -0
- package/dist/src/{evalResult-DlRfu_Rq.cjs → evalResult-Dap2CekP.cjs} +20 -21
- package/dist/src/evalResult-DvcJAWJU.cjs +10 -0
- package/dist/src/evalResult-Hftn-S_i.js +10 -0
- package/dist/src/evaluator-B2CFNt-P.js +36 -0
- package/dist/src/{evaluator-3EJCMTs0.js → evaluator-DPFRbFIL.js} +210 -232
- package/dist/src/{extractor-LSYjrhK0.js → extractor-CFG6bcWJ.js} +23 -38
- package/dist/src/{extractor-DbhlYEeo.cjs → extractor-DX36oYEv.cjs} +37 -64
- package/dist/src/{extractor-Hs7la_19.js → extractor-M67RUtg6.js} +23 -38
- package/dist/src/extractor-YMU_Gvt8.js +374 -0
- package/dist/src/fetch-4M3YRaqL.js +780 -0
- package/dist/src/{fetch-18MuNu9i.js → fetch-60Gzydls.js} +60 -46
- package/dist/src/{fetch-SRsE6Ctl.js → fetch-BMv0O527.js} +41 -35
- package/dist/src/{fetch-ZMn_oemb.cjs → fetch-BxUk8odA.cjs} +268 -279
- package/dist/src/fetch-KV5kNASw.js +5 -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-Doo0xq-z.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-CQlpZkrp.cjs → genaiTracer-DN4dQywX.cjs} +13 -14
- package/dist/src/graders-Bu0H9nXi.js +32 -0
- package/dist/src/{graders-BaMCwIKp.js → graders-CHO8EPM4.js} +385 -417
- package/dist/src/graders-Cfhkvx-e.js +34 -0
- package/dist/src/{graders-QsALpIdy.js → graders-CpdqD9PI.js} +385 -417
- package/dist/src/graders-DClJVpGP.cjs +32 -0
- package/dist/src/{graders-DzUUnUjC.cjs → graders-DOXycdlG.cjs} +721 -753
- package/dist/src/graders-DcnJsrMO.js +32 -0
- package/dist/src/graders-R9rYUM0d.js +13466 -0
- package/dist/src/{image-BiEVdpdP.js → image-BmEZqVmk.js} +57 -18
- package/dist/src/{image-mhAGP07h.js → image-CBBVXWuT.js} +57 -18
- package/dist/src/{image-D10zEe1f.cjs → image-CDLQOcqT.cjs} +6 -7
- package/dist/src/{image-COCWy5dX.js → image-DJEvKveK.js} +6 -5
- package/dist/src/{image-C3BjJUAU.cjs → image-DTedmQPg.cjs} +77 -32
- package/dist/src/{image-DB4sHxdJ.js → image-gvmivTEe.js} +7 -9
- package/dist/src/image-pAX56tPG.js +257 -0
- package/dist/src/{image-BXt_7u0v.js → image-tL5hIOFh.js} +6 -8
- package/dist/src/index.cjs +696 -693
- package/dist/src/index.d.cts +113 -10
- package/dist/src/index.d.ts +113 -6
- package/dist/src/index.js +657 -658
- package/dist/src/{interactiveCheck-DU-MAhp5.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-DotRBzUE.js → knowledgeBase-CLJybhnF.js} +19 -34
- package/dist/src/{knowledgeBase-XJQ0Qyez.js → knowledgeBase-CoU-UQBg.js} +17 -41
- package/dist/src/{knowledgeBase-CMvMlLZR.js → knowledgeBase-DjWPVqSb.js} +17 -43
- package/dist/src/{knowledgeBase-Bnb00xKs.cjs → knowledgeBase-wkxuRFhA.cjs} +17 -40
- package/dist/src/{litellm-CHrRmPAe.js → litellm-B9Hysuri.js} +16 -18
- package/dist/src/{litellm-CrLJrPIm.js → litellm-CTfa0hqi.js} +15 -17
- package/dist/src/{litellm-BrnZhMcL.cjs → litellm-NYpQ8RQu.cjs} +15 -16
- package/dist/src/{litellm-BECdjOTx.js → litellm-ePxtr9F1.js} +15 -4
- package/dist/src/{logger-w8Ozp0Td.js → logger-CT3IKMKA.js} +24 -41
- package/dist/src/{logger-BdZ-IqBc.cjs → logger-Cp1GPUjj.cjs} +166 -192
- package/dist/src/logger-DLcq4dWf.js +713 -0
- package/dist/src/{logger-BotXmWKW.js → logger-KkObSCzq.js} +27 -43
- package/dist/src/{luma-ray-C0RkI3lt.cjs → luma-ray-B0GGNRc1.cjs} +20 -21
- package/dist/src/{luma-ray-C-w6EsJm.js → luma-ray-BE2mOt6N.js} +20 -13
- package/dist/src/{luma-ray-BOeX-h0M.js → luma-ray-BW9IRGIc.js} +22 -21
- package/dist/src/{luma-ray-DgKLS0BF.js → luma-ray-Cm1KZBhs.js} +20 -23
- package/dist/src/main.js +1985 -2055
- package/dist/src/{messages-DXV3Qh8_.cjs → messages-1JrJs91T.cjs} +35 -34
- package/dist/src/{messages-D61tPFQo.js → messages-1x9atZmP.js} +25 -24
- package/dist/src/{messages-CDZYGNlS.js → messages-BLbWdsyt.js} +25 -24
- package/dist/src/messages-D8EA0oDc.js +240 -0
- package/dist/src/{meteor-P2rUE-Uz.js → meteor-44VjEACX.js} +3 -4
- package/dist/src/{meteor-SLNTgmXm.js → meteor-D-SotUw9.js} +3 -4
- package/dist/src/{meteor-odmwVbyG.cjs → meteor-DLZZ3osF.cjs} +3 -4
- package/dist/src/{meteor-Dj8cTkU_.js → meteor-DUiCJRC-.js} +3 -4
- package/dist/src/modelslab-C1OLRmVX.js +166 -0
- package/dist/src/modelslab-CqXBy3U8.js +168 -0
- package/dist/src/modelslab-DcOSFwKh.cjs +166 -0
- package/dist/src/modelslab-X5-4LroM.js +166 -0
- package/dist/src/{nova-reel-C2LFfVTf.js → nova-reel-BgS1ZWuK.js} +20 -13
- package/dist/src/{nova-reel-DtCjbD5O.js → nova-reel-D2ZkOSyr.js} +22 -21
- package/dist/src/{nova-reel-D9FXq3Mt.cjs → nova-reel-D9xfaMBs.cjs} +20 -21
- package/dist/src/{nova-reel-Bk5npr2q.js → nova-reel-DihqLeol.js} +20 -23
- package/dist/src/{nova-sonic-BoRSY_U6.cjs → nova-sonic-DVu3mMIy.cjs} +30 -31
- package/dist/src/{nova-sonic-D_qERM-K.js → nova-sonic-DezhVUYT.js} +30 -26
- package/dist/src/{nova-sonic-CgaWLDM1.js → nova-sonic-P-CdUMlV.js} +30 -31
- package/dist/src/{nova-sonic-BXRfQyF-.js → nova-sonic-Q3BOJeig.js} +31 -32
- package/dist/src/{openai-Bigwjgo1.cjs → openai-Cuif0GEt.cjs} +8 -9
- package/dist/src/{openai-Dz3surb_.js → openai-DElQ-fPX.js} +3 -4
- package/dist/src/{openai-CT5fwbve.js → openai-DhbB7eWK.js} +3 -4
- package/dist/src/openai-j-sE2O7r.js +44 -0
- package/dist/src/{openclaw-dHLcXUWZ.js → openclaw-BiSZPL7J.js} +20 -14
- package/dist/src/{openclaw-CpPrXwf6.js → openclaw-Bv1DINsX.js} +20 -27
- package/dist/src/{openclaw-B6XY2kUf.js → openclaw-D1D_ej1z.js} +21 -28
- package/dist/src/{openclaw-DDSfq5fp.cjs → openclaw-DAfWQn-o.cjs} +33 -39
- package/dist/src/opencode-sdk-C7m-wRfI.js +560 -0
- package/dist/src/opencode-sdk-CfaLN8PY.cjs +564 -0
- package/dist/src/opencode-sdk-D95s6SnR.js +562 -0
- package/dist/src/opencode-sdk-DxUPkLT7.js +560 -0
- package/dist/src/{otlpReceiver-DmRb0NBj.js → otlpReceiver--AIRW_S4.js} +53 -51
- package/dist/src/{otlpReceiver-Dg817agV.js → otlpReceiver-Bn5wGB1v.js} +53 -55
- package/dist/src/{otlpReceiver-B6Xo4KZM.cjs → otlpReceiver-Diec4cln.cjs} +53 -55
- package/dist/src/{otlpReceiver-BO0rbDzh.js → otlpReceiver-g3ByGaXs.js} +53 -55
- package/dist/src/{providerRegistry-Xf0qdqGQ.js → providerRegistry-B0RUOLI_.js} +7 -8
- package/dist/src/{providerRegistry-wCWd7sKQ.js → providerRegistry-CD8MEar9.js} +7 -8
- package/dist/src/{providerRegistry-lc7a7utN.cjs → providerRegistry-Civky8Ar.cjs} +12 -13
- package/dist/src/providerRegistry-DM8rZYol.js +45 -0
- package/dist/src/providers-B3HvufyI.js +33246 -0
- package/dist/src/{providers-BiNq_Iyc.js → providers-BKRJTjBz.js} +1743 -1795
- package/dist/src/providers-C1rOSHiR.js +32 -0
- package/dist/src/{providers-BlEhY5mi.js → providers-CFLy1_ji.js} +1750 -1802
- package/dist/src/{providers-BNKVY53V.cjs → providers-CFu-TZl-.cjs} +2111 -2163
- package/dist/src/providers-CxmDwEFf.cjs +31 -0
- package/dist/src/providers-Dodakqr0.js +30 -0
- package/dist/src/providers-GIQ2TcsA.js +30 -0
- package/dist/src/{pythonUtils-r1uBuA0n.js → pythonUtils-C3py6GC1.js} +18 -19
- package/dist/src/{pythonUtils-DZ6EbdY4.cjs → pythonUtils-CTU3Y3lw.cjs} +42 -43
- package/dist/src/{pythonUtils-vMlk9Qp5.js → pythonUtils-D5nxkQ0P.js} +18 -19
- package/dist/src/pythonUtils-D6fwaDSg.js +249 -0
- package/dist/src/quiverai-C2jVwbH1.js +213 -0
- package/dist/src/quiverai-CI6gYJVI.js +213 -0
- package/dist/src/quiverai-CLkWkyZc.cjs +213 -0
- package/dist/src/quiverai-MHSxbmmZ.js +215 -0
- package/dist/src/{render-CAZvKKkB.js → render-Drod8m7K.js} +4 -5
- package/dist/src/{responses-DLLjADw5.js → responses-BKqJmhhc.js} +34 -27
- package/dist/src/{responses-TsdODUpm.js → responses-CGw0DCzh.js} +34 -27
- package/dist/src/responses-jxdehPkC.js +660 -0
- package/dist/src/{responses-zOtKtnY_.cjs → responses-tD4Bd4dc.cjs} +49 -42
- package/dist/src/rubyUtils-BUHu6PhO.js +5 -0
- package/dist/src/{rubyUtils-Cs35SDYa.js → rubyUtils-BUVePouc.js} +27 -20
- package/dist/src/rubyUtils-BcuGX77l.js +222 -0
- package/dist/src/{rubyUtils-BtjlqyXt.js → rubyUtils-Boc4HZzX.js} +18 -19
- package/dist/src/rubyUtils-CP42kMvq.cjs +4 -0
- package/dist/src/{rubyUtils-DCVaJ3mc.cjs → rubyUtils-DhCAlxZr.cjs} +48 -50
- package/dist/src/{sagemaker-Du4LIR97.js → sagemaker-BK4Zb993.js} +75 -70
- package/dist/src/{sagemaker-CLdUAv5z.js → sagemaker-BfiWTmvn.js} +77 -77
- package/dist/src/{sagemaker-DwNnEVYt.cjs → sagemaker-CcQHM1jV.cjs} +75 -76
- package/dist/src/{sagemaker-BcgLu0U4.js → sagemaker-D2Q1c-sD.js} +75 -79
- package/dist/src/{scanner-Dyw21Wg_.js → scanner-J8CA3LsV.js} +149 -122
- package/dist/src/server/index.js +5620 -67302
- package/dist/src/{server-CgUQ25qW.cjs → server-B0PPuDw-.cjs} +57 -67
- package/dist/src/server-B1vi21hA.js +7 -0
- package/dist/src/{server-CbMTRQkg.js → server-BC7XJFgr.js} +19 -24
- package/dist/src/server-Cm9Kai_h.cjs +5 -0
- package/dist/src/{server-DWmZLfCy.js → server-DbFphssR.js} +26 -29
- package/dist/src/server-OAs3nBRT.js +229 -0
- package/dist/src/{signal-Bl32q42d.js → signal-BOTbd53Z.js} +9 -11
- package/dist/src/{slack-BtMkB6xP.cjs → slack-BmVAVGaK.cjs} +7 -8
- package/dist/src/{slack-OZYxoVON.js → slack-DCUPTzS2.js} +8 -8
- package/dist/src/{slack-DPqj42Ts.js → slack-DOdy_kyv.js} +7 -8
- package/dist/src/{slack-BfdBx2tO.js → slack-DXMKtA-f.js} +7 -9
- package/dist/src/store-BNmZ1KAz.cjs +5 -0
- package/dist/src/{store-BqwfFEyF.cjs → store-BSc-TF2w.cjs} +44 -45
- package/dist/src/store-BltJg2cd.js +6 -0
- package/dist/src/{store-D4gdn9ih.js → store-D1tv90v3.js} +34 -35
- package/dist/src/{store-2ocbYY9D.js → store-DQLEjuEO.js} +40 -36
- package/dist/src/store-Ub2vaGJ1.js +228 -0
- package/dist/src/{tables-D-NSwNIb.js → tables-5EvT_Bwn.js} +23 -23
- package/dist/src/{tables-B9E1kRp-.cjs → tables-C7K-XKWp.cjs} +93 -93
- package/dist/src/{tables-C7TT2XVn.js → tables-D36WTqKX.js} +25 -25
- package/dist/src/tables-xKANLRBD.js +288 -0
- package/dist/src/telemetry-5BCRNBbe.cjs +5 -0
- package/dist/src/{telemetry-DZ_7PaVq.js → telemetry-C15ziL8u.js} +17 -14
- package/dist/src/{telemetry-BXyVqyAg.js → telemetry-C2YDkUQH.js} +11 -13
- package/dist/src/{telemetry-D0_yFdtU.cjs → telemetry-CbrnxHp_.cjs} +21 -24
- package/dist/src/telemetry-D4W5hboe.js +7 -0
- package/dist/src/telemetry-DMb2Mpfm.js +171 -0
- package/dist/src/{text-Dm78AVGG.js → text-B_UCRPp2.js} +2 -2
- package/dist/src/{text-DF2hMKdg.cjs → text-CW1cyrwj.cjs} +12 -13
- package/dist/src/{text-DgMr_tiM.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-FNIz3YOe.cjs → transcription-CL78qbOU.cjs} +14 -15
- package/dist/src/{transcription-C-M81iDA.js → transcription-DAtxHhAM.js} +14 -7
- package/dist/src/{transcription-CYuY5sFO.js → transcription-LNZTNUUL.js} +14 -16
- package/dist/src/{transcription-Ch7S-LWw.js → transcription-QHh3AH6Z.js} +15 -17
- package/dist/src/{transform-CoP2bJ7P.js → transform-Cgi24fJ7.js} +94 -66
- package/dist/src/{transform-Kd6u-oNm.cjs → transform-CzK1Q0zl.cjs} +24 -26
- package/dist/src/{transform-D8dILpfZ.js → transform-DECvGmzp.js} +15 -13
- package/dist/src/{transform-DMaxQwDx.js → transform-DGLazrMm.js} +94 -66
- package/dist/src/transform-DGxXocjk.js +1506 -0
- package/dist/src/{transform-ivxEY4f7.cjs → transform-DOcQeLld.cjs} +234 -206
- package/dist/src/transform-DTGDnAzW.js +6 -0
- package/dist/src/{transform-CqTFr7KR.js → transform-DilY9wbS.js} +10 -12
- package/dist/src/transform-aa6tmVpZ.js +216 -0
- package/dist/src/transform-m3qNw4KP.cjs +5 -0
- package/dist/src/{transformersAvailability-DEU2naS1.js → transformersAvailability-CEVM2GNQ.js} +2 -2
- package/dist/src/{transformersAvailability-Bkep3ka7.cjs → transformersAvailability-CwayUSlh.cjs} +2 -3
- package/dist/src/{transformersAvailability-DwmezkVe.js → transformersAvailability-D6c6ROpT.js} +2 -2
- package/dist/src/{types-t52w-XsS.js → types-CH3Ge2sE.js} +103 -92
- package/dist/src/{types-DMVjYLpx.js → types-CLKiCBW3.js} +98 -91
- package/dist/src/types-CN_TZ2GJ.js +3260 -0
- package/dist/src/{types-BIfttHrT.cjs → types-LJ0r3wbR.cjs} +573 -566
- package/dist/src/util-5cB-L7U3.js +1430 -0
- package/dist/src/util-6-GqIvzS.js +599 -0
- package/dist/src/{util-vjscpUzy.js → util-B7T3SiBS.js} +5 -6
- package/dist/src/{util-Cl0zfT3V.js → util-Betm42rL.js} +44 -17
- package/dist/src/{util-CUEt0Vum.js → util-C-PPYSMq.js} +44 -17
- package/dist/src/{util-DkFTvieG.cjs → util-CchiqXh_.cjs} +35 -36
- package/dist/src/{util-mJ58qbbw.js → util-DaWTWKBK.js} +5 -6
- package/dist/src/{util-C08Kns6-.cjs → util-Db0a0AFH.cjs} +89 -62
- package/dist/src/{util-DiCePfDu.js → util-Dlz_Wvgm.js} +102 -53
- package/dist/src/{util-BSh4a_Q8.js → util-YT5HPZaS.js} +102 -53
- package/dist/src/{util-DUYOvxAy.cjs → util-Yz-1aEhW.cjs} +274 -219
- package/dist/src/util-ZZH-3QZz.js +293 -0
- package/dist/src/{utils-DFaZa6Rf.cjs → utils-Cz9qXqII.cjs} +32 -35
- package/dist/src/{utils-CVzb4YiI.js → utils-XiOAgly5.js} +4 -7
- package/dist/src/utils-dLokC-eR.js +94 -0
- package/dist/src/{utils-JaY9veb5.js → utils-f2-Moju7.js} +4 -7
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +59 -53
- package/dist/src/app/assets/index-BOgkICuY.css +0 -1
- package/dist/src/app/assets/index-CSgqn_Vd.js +0 -428
- package/dist/src/app/tsconfig.app.tsbuildinfo +0 -1
- package/dist/src/base-BaXmtXYp.js +0 -107
- package/dist/src/base-Dtp8b4_N.js +0 -106
- package/dist/src/base-f71xxWai.cjs +0 -111
- package/dist/src/cache-BUPcq0Ad.js +0 -6
- package/dist/src/cache-CVfRb-HD.cjs +0 -6
- package/dist/src/cache-O4EuX2JV.js +0 -8
- package/dist/src/chunk-DHDDz29n.js +0 -22
- package/dist/src/chunk-FhC4c-0y.js +0 -21
- package/dist/src/cloud-CZ4hytdm.js +0 -5
- package/dist/src/eval-CKHWqG9f.js +0 -16
- package/dist/src/evalResult-CxTP-LMm.cjs +0 -11
- package/dist/src/evalResult-CzLURDcP.js +0 -13
- package/dist/src/evalResult-DyttNQ_G.js +0 -11
- package/dist/src/evaluator-0PvfeBYh.js +0 -38
- package/dist/src/fetch-Bi0o-fdp.js +0 -4
- package/dist/src/fetch-CMptBDVg.cjs +0 -4
- package/dist/src/fetch-DAZkv3gV.js +0 -6
- package/dist/src/graders-BCytzXrb.js +0 -34
- package/dist/src/graders-CGZQShfJ.cjs +0 -33
- package/dist/src/graders-spkuVC-E.js +0 -36
- package/dist/src/opencode-sdk-CImWVqy9.js +0 -382
- package/dist/src/opencode-sdk-CuCztr4P.js +0 -380
- package/dist/src/opencode-sdk-DhcfRbBH.js +0 -376
- package/dist/src/opencode-sdk-mqF-Oj3f.cjs +0 -383
- package/dist/src/providers-BMZZmPBJ.cjs +0 -32
- package/dist/src/providers-CQQrNaJk.js +0 -32
- package/dist/src/providers-Ck8HyrC-.js +0 -34
- package/dist/src/quiverai-BNfIwKCO.cjs +0 -54
- package/dist/src/quiverai-BQigKdIH.js +0 -57
- package/dist/src/quiverai-Bfy2WnE2.js +0 -55
- package/dist/src/quiverai-CedIP0PJ.js +0 -43
- package/dist/src/rubyUtils-D7--T12C.js +0 -6
- package/dist/src/rubyUtils-DRRiMFV2.js +0 -5
- package/dist/src/rubyUtils-vb8OYFC-.cjs +0 -5
- package/dist/src/server-BUbS0Qfh.js +0 -6
- package/dist/src/server-XpGXFHkS.cjs +0 -6
- package/dist/src/server-gfOx5Zrk.js +0 -8
- package/dist/src/store-5u2yriTV.js +0 -7
- package/dist/src/store-D_lq_8oQ.js +0 -6
- package/dist/src/store-m5KT6Ly7.cjs +0 -6
- package/dist/src/telemetry-5RHFoCJh.js +0 -6
- package/dist/src/telemetry-Do8wMnA-.js +0 -8
- package/dist/src/telemetry-LojxPoFq.cjs +0 -6
- package/dist/src/transform-8eGmaH-7.js +0 -7
- package/dist/src/transform-BRVvWaG4.cjs +0 -6
- package/dist/src/transform-GybT0X0u.js +0 -8
- package/dist/src/transformersAvailability-DkAWaK5B.js +0 -35
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import { Box, Text, useApp, useInput } from "ink";
|
|
4
4
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
-
|
|
6
5
|
//#region src/ui/init/components/shared/TextInput.tsx
|
|
7
6
|
/**
|
|
8
7
|
* TextInput - Single-line text input component.
|
|
@@ -103,7 +102,6 @@ function TextInput({ value, onChange, onSubmit, placeholder = "", isFocused = tr
|
|
|
103
102
|
]
|
|
104
103
|
});
|
|
105
104
|
}
|
|
106
|
-
|
|
107
105
|
//#endregion
|
|
108
106
|
//#region src/ui/list/ListApp.tsx
|
|
109
107
|
/**
|
|
@@ -575,7 +573,7 @@ function ListApp({ resourceType, items: initialItems = [], onSelect, onExit, onL
|
|
|
575
573
|
]
|
|
576
574
|
});
|
|
577
575
|
}
|
|
578
|
-
|
|
579
576
|
//#endregion
|
|
580
577
|
export { ListApp };
|
|
581
|
-
|
|
578
|
+
|
|
579
|
+
//# sourceMappingURL=ListApp-Du7YVwj5.js.map
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { C as isCI, b as getEnvString, i as logger } from "./logger-DLcq4dWf.js";
|
|
2
|
+
import { O as TERMINAL_MAX_WIDTH, a as CloudConfig, c as writeGlobalConfig, l as writeGlobalConfigPartial, r as fetchWithTimeout, s as readGlobalConfig } from "./fetch-4M3YRaqL.js";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import input from "@inquirer/input";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
const BAD_EMAIL_RESULT = "bad_email";
|
|
7
|
+
const EmailValidationStatus = {
|
|
8
|
+
OK: "ok",
|
|
9
|
+
EXCEEDED_LIMIT: "exceeded_limit",
|
|
10
|
+
SHOW_USAGE_WARNING: "show_usage_warning",
|
|
11
|
+
EMAIL_VERIFICATION_REQUIRED: "email_verification_required",
|
|
12
|
+
RISKY_EMAIL: "risky_email",
|
|
13
|
+
DISPOSABLE_EMAIL: "disposable_email"
|
|
14
|
+
};
|
|
15
|
+
const NO_EMAIL_STATUS = "no_email";
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region src/globalConfig/accounts.ts
|
|
18
|
+
const CI_PLACEHOLDER_EMAIL = "ci-placeholder@promptfoo.dev";
|
|
19
|
+
function getUserId() {
|
|
20
|
+
let globalConfig = readGlobalConfig();
|
|
21
|
+
if (!globalConfig?.id) {
|
|
22
|
+
const newId = crypto.randomUUID();
|
|
23
|
+
globalConfig = {
|
|
24
|
+
...globalConfig,
|
|
25
|
+
id: newId
|
|
26
|
+
};
|
|
27
|
+
writeGlobalConfig(globalConfig);
|
|
28
|
+
return newId;
|
|
29
|
+
}
|
|
30
|
+
return globalConfig.id;
|
|
31
|
+
}
|
|
32
|
+
function getUserEmail() {
|
|
33
|
+
return readGlobalConfig()?.account?.email || null;
|
|
34
|
+
}
|
|
35
|
+
function setUserEmail(email) {
|
|
36
|
+
const account = readGlobalConfig()?.account ?? {};
|
|
37
|
+
account.email = email;
|
|
38
|
+
writeGlobalConfigPartial({ account });
|
|
39
|
+
}
|
|
40
|
+
function clearUserEmail() {
|
|
41
|
+
const account = readGlobalConfig()?.account ?? {};
|
|
42
|
+
delete account.email;
|
|
43
|
+
writeGlobalConfigPartial({ account });
|
|
44
|
+
}
|
|
45
|
+
function getUserEmailNeedsValidation() {
|
|
46
|
+
return readGlobalConfig()?.account?.emailNeedsValidation || false;
|
|
47
|
+
}
|
|
48
|
+
function setUserEmailNeedsValidation(needsValidation) {
|
|
49
|
+
const account = readGlobalConfig()?.account ?? {};
|
|
50
|
+
account.emailNeedsValidation = needsValidation;
|
|
51
|
+
writeGlobalConfigPartial({ account });
|
|
52
|
+
}
|
|
53
|
+
function getUserEmailValidated() {
|
|
54
|
+
return readGlobalConfig()?.account?.emailValidated || false;
|
|
55
|
+
}
|
|
56
|
+
function setUserEmailValidated(validated) {
|
|
57
|
+
const account = readGlobalConfig()?.account ?? {};
|
|
58
|
+
account.emailValidated = validated;
|
|
59
|
+
writeGlobalConfigPartial({ account });
|
|
60
|
+
}
|
|
61
|
+
function getAuthor() {
|
|
62
|
+
return getEnvString("PROMPTFOO_AUTHOR") || getUserEmail() || null;
|
|
63
|
+
}
|
|
64
|
+
function isLoggedIntoCloud() {
|
|
65
|
+
return new CloudConfig().isEnabled();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get the authentication method used for cloud access
|
|
69
|
+
* @returns 'api-key' | 'email' | 'none'
|
|
70
|
+
*/
|
|
71
|
+
function getAuthMethod() {
|
|
72
|
+
const hasApiKey = new CloudConfig().isEnabled();
|
|
73
|
+
const hasEmail = !!getUserEmail();
|
|
74
|
+
if (hasApiKey && hasEmail) return "api-key";
|
|
75
|
+
if (hasApiKey) return "api-key";
|
|
76
|
+
if (hasEmail) return "email";
|
|
77
|
+
return "none";
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Shared function to check email status with the promptfoo API
|
|
81
|
+
* Used by both CLI and server routes
|
|
82
|
+
*/
|
|
83
|
+
async function checkEmailStatus(options) {
|
|
84
|
+
const { default: telemetry } = await import("./telemetry-DMb2Mpfm.js").then((n) => n.r);
|
|
85
|
+
const ciMode = isCI();
|
|
86
|
+
const userEmail = ciMode ? CI_PLACEHOLDER_EMAIL : getUserEmail();
|
|
87
|
+
if (!userEmail) return {
|
|
88
|
+
status: NO_EMAIL_STATUS,
|
|
89
|
+
hasEmail: false,
|
|
90
|
+
message: "Redteam evals require email verification. Please enter your work email:"
|
|
91
|
+
};
|
|
92
|
+
if (ciMode) return {
|
|
93
|
+
status: EmailValidationStatus.OK,
|
|
94
|
+
hasEmail: true,
|
|
95
|
+
email: userEmail
|
|
96
|
+
};
|
|
97
|
+
try {
|
|
98
|
+
const validateParam = options?.validate ? "&validate=true" : "";
|
|
99
|
+
const timeout = options?.validate ? 3e3 : 500;
|
|
100
|
+
if (options?.validate) logger.info(`Checking email...`);
|
|
101
|
+
const data = await (await fetchWithTimeout(`${getEnvString("PROMPTFOO_CLOUD_API_URL", "https://api.promptfoo.app")}/api/users/status?email=${encodeURIComponent(userEmail)}${validateParam}`, void 0, timeout)).json();
|
|
102
|
+
if (options?.validate) if (new Set([
|
|
103
|
+
EmailValidationStatus.RISKY_EMAIL,
|
|
104
|
+
EmailValidationStatus.DISPOSABLE_EMAIL,
|
|
105
|
+
EmailValidationStatus.EMAIL_VERIFICATION_REQUIRED
|
|
106
|
+
]).has(data.status)) {
|
|
107
|
+
if (data.status === EmailValidationStatus.EMAIL_VERIFICATION_REQUIRED) {
|
|
108
|
+
setUserEmailValidated(false);
|
|
109
|
+
setUserEmailNeedsValidation(true);
|
|
110
|
+
}
|
|
111
|
+
if (data.status === EmailValidationStatus.RISKY_EMAIL || data.status === EmailValidationStatus.DISPOSABLE_EMAIL) await telemetry.saveConsent(userEmail, { source: "filteredInvalidEmail" });
|
|
112
|
+
} else {
|
|
113
|
+
setUserEmailValidated(true);
|
|
114
|
+
await telemetry.saveConsent(userEmail, { source: "promptForEmailValidated" });
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
status: data.status,
|
|
118
|
+
message: data.message ?? data.error,
|
|
119
|
+
email: userEmail,
|
|
120
|
+
hasEmail: true
|
|
121
|
+
};
|
|
122
|
+
} catch (e) {
|
|
123
|
+
logger.debug(`Failed to check user status: ${e}`);
|
|
124
|
+
return {
|
|
125
|
+
status: EmailValidationStatus.OK,
|
|
126
|
+
message: "Unable to verify email status, but proceeding",
|
|
127
|
+
email: userEmail,
|
|
128
|
+
hasEmail: true
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async function promptForEmailUnverified() {
|
|
133
|
+
const { default: telemetry } = await import("./telemetry-DMb2Mpfm.js").then((n) => n.r);
|
|
134
|
+
const ciMode = isCI();
|
|
135
|
+
const existingEmail = getUserEmail();
|
|
136
|
+
let email = ciMode ? CI_PLACEHOLDER_EMAIL : existingEmail;
|
|
137
|
+
const existingEmailNeedsValidation = !ciMode && getUserEmailNeedsValidation();
|
|
138
|
+
const existingEmailValidated = ciMode || getUserEmailValidated();
|
|
139
|
+
let emailNeedsValidation = existingEmailNeedsValidation && !existingEmailValidated;
|
|
140
|
+
if (!email) {
|
|
141
|
+
await telemetry.record("feature_used", { feature: "promptForEmailUnverified" });
|
|
142
|
+
const border = "─".repeat(TERMINAL_MAX_WIDTH);
|
|
143
|
+
logger.info("");
|
|
144
|
+
logger.info(chalk.cyan(border));
|
|
145
|
+
logger.info(chalk.cyan.bold(" Email Verification Required"));
|
|
146
|
+
logger.info(chalk.cyan(border));
|
|
147
|
+
logger.info("");
|
|
148
|
+
logger.info(" Red team scans require email verification to continue.");
|
|
149
|
+
logger.info("");
|
|
150
|
+
const emailSchema = z.email();
|
|
151
|
+
try {
|
|
152
|
+
email = await input({
|
|
153
|
+
message: chalk.bold("Work email:"),
|
|
154
|
+
validate: (input) => {
|
|
155
|
+
const result = emailSchema.safeParse(input);
|
|
156
|
+
return result.success || result.error.issues[0].message;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
} catch (error) {
|
|
160
|
+
const err = error;
|
|
161
|
+
if (err?.name === "AbortPromptError" || err?.name === "ExitPromptError") process.exit(1);
|
|
162
|
+
logger.error(`failed to prompt for email: ${err}`);
|
|
163
|
+
throw err;
|
|
164
|
+
}
|
|
165
|
+
setUserEmail(email);
|
|
166
|
+
setUserEmailNeedsValidation(true);
|
|
167
|
+
setUserEmailValidated(false);
|
|
168
|
+
emailNeedsValidation = true;
|
|
169
|
+
await telemetry.record("feature_used", { feature: "userCompletedPromptForEmailUnverified" });
|
|
170
|
+
}
|
|
171
|
+
return { emailNeedsValidation };
|
|
172
|
+
}
|
|
173
|
+
async function checkEmailStatusAndMaybeExit(options) {
|
|
174
|
+
const result = await checkEmailStatus(options);
|
|
175
|
+
if (isCI()) return "ok";
|
|
176
|
+
if (result.status === EmailValidationStatus.RISKY_EMAIL || result.status === EmailValidationStatus.DISPOSABLE_EMAIL) {
|
|
177
|
+
logger.error("Please use a valid work email.");
|
|
178
|
+
setUserEmail("");
|
|
179
|
+
return BAD_EMAIL_RESULT;
|
|
180
|
+
}
|
|
181
|
+
if (result.status === EmailValidationStatus.EXCEEDED_LIMIT) {
|
|
182
|
+
logger.error("You have exceeded the maximum cloud inference limit. Please contact inquiries@promptfoo.dev to upgrade your account.");
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
if (result.status === EmailValidationStatus.EMAIL_VERIFICATION_REQUIRED) {
|
|
186
|
+
setUserEmailNeedsValidation(true);
|
|
187
|
+
setUserEmailValidated(false);
|
|
188
|
+
const message = result.message || "Your email address is not verified. Check your inbox for a verification link, then rerun the command.";
|
|
189
|
+
logger.error(message, {
|
|
190
|
+
status: result.status,
|
|
191
|
+
hasEmail: result.hasEmail
|
|
192
|
+
});
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
if (result.status === EmailValidationStatus.SHOW_USAGE_WARNING && result.message) {
|
|
196
|
+
const border = "=".repeat(TERMINAL_MAX_WIDTH);
|
|
197
|
+
logger.info(chalk.yellow(border));
|
|
198
|
+
logger.warn(chalk.yellow(result.message));
|
|
199
|
+
logger.info(chalk.yellow(border));
|
|
200
|
+
}
|
|
201
|
+
return "ok";
|
|
202
|
+
}
|
|
203
|
+
//#endregion
|
|
204
|
+
export { getAuthor as a, isLoggedIntoCloud as c, getAuthMethod as i, promptForEmailUnverified as l, checkEmailStatusAndMaybeExit as n, getUserEmail as o, clearUserEmail as r, getUserId as s, checkEmailStatus as t, setUserEmail as u };
|
|
205
|
+
|
|
206
|
+
//# sourceMappingURL=accounts-BgNJDBE6.js.map
|
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
const require_logger = require(
|
|
2
|
-
const require_fetch = require(
|
|
1
|
+
const require_logger = require("./logger-Cp1GPUjj.cjs");
|
|
2
|
+
const require_fetch = require("./fetch-BxUk8odA.cjs");
|
|
3
3
|
let chalk = require("chalk");
|
|
4
4
|
chalk = require_logger.__toESM(chalk);
|
|
5
5
|
let zod = require("zod");
|
|
6
6
|
let _inquirer_input = require("@inquirer/input");
|
|
7
7
|
_inquirer_input = require_logger.__toESM(_inquirer_input);
|
|
8
|
-
|
|
9
|
-
//#region src/types/email.ts
|
|
10
|
-
const EMAIL_OK_STATUS = "ok";
|
|
11
8
|
const BAD_EMAIL_RESULT = "bad_email";
|
|
12
9
|
const EmailValidationStatus = {
|
|
13
|
-
OK:
|
|
10
|
+
OK: "ok",
|
|
14
11
|
EXCEEDED_LIMIT: "exceeded_limit",
|
|
15
12
|
SHOW_USAGE_WARNING: "show_usage_warning",
|
|
13
|
+
EMAIL_VERIFICATION_REQUIRED: "email_verification_required",
|
|
16
14
|
RISKY_EMAIL: "risky_email",
|
|
17
15
|
DISPOSABLE_EMAIL: "disposable_email"
|
|
18
16
|
};
|
|
19
17
|
const NO_EMAIL_STATUS = "no_email";
|
|
20
|
-
|
|
21
18
|
//#endregion
|
|
22
19
|
//#region src/globalConfig/accounts.ts
|
|
20
|
+
const CI_PLACEHOLDER_EMAIL = "ci-placeholder@promptfoo.dev";
|
|
23
21
|
function getUserId() {
|
|
24
22
|
let globalConfig = require_fetch.readGlobalConfig();
|
|
25
23
|
if (!globalConfig?.id) {
|
|
@@ -80,31 +78,46 @@ function getAuthMethod() {
|
|
|
80
78
|
* Used by both CLI and server routes
|
|
81
79
|
*/
|
|
82
80
|
async function checkEmailStatus(options) {
|
|
83
|
-
const { default: telemetry } = await Promise.resolve().then(() => require("./telemetry-
|
|
84
|
-
const
|
|
81
|
+
const { default: telemetry } = await Promise.resolve().then(() => require("./telemetry-5BCRNBbe.cjs"));
|
|
82
|
+
const ciMode = require_logger.isCI();
|
|
83
|
+
const userEmail = ciMode ? CI_PLACEHOLDER_EMAIL : getUserEmail();
|
|
85
84
|
if (!userEmail) return {
|
|
86
85
|
status: NO_EMAIL_STATUS,
|
|
87
86
|
hasEmail: false,
|
|
88
87
|
message: "Redteam evals require email verification. Please enter your work email:"
|
|
89
88
|
};
|
|
89
|
+
if (ciMode) return {
|
|
90
|
+
status: EmailValidationStatus.OK,
|
|
91
|
+
hasEmail: true,
|
|
92
|
+
email: userEmail
|
|
93
|
+
};
|
|
90
94
|
try {
|
|
91
95
|
const validateParam = options?.validate ? "&validate=true" : "";
|
|
92
96
|
const timeout = options?.validate ? 3e3 : 500;
|
|
93
|
-
if (options?.validate) require_logger.
|
|
97
|
+
if (options?.validate) require_logger.logger.info(`Checking email...`);
|
|
94
98
|
const data = await (await require_fetch.fetchWithTimeout(`${require_logger.getEnvString("PROMPTFOO_CLOUD_API_URL", "https://api.promptfoo.app")}/api/users/status?email=${encodeURIComponent(userEmail)}${validateParam}`, void 0, timeout)).json();
|
|
95
|
-
if (options?.validate) if (new Set([
|
|
96
|
-
|
|
99
|
+
if (options?.validate) if (new Set([
|
|
100
|
+
EmailValidationStatus.RISKY_EMAIL,
|
|
101
|
+
EmailValidationStatus.DISPOSABLE_EMAIL,
|
|
102
|
+
EmailValidationStatus.EMAIL_VERIFICATION_REQUIRED
|
|
103
|
+
]).has(data.status)) {
|
|
104
|
+
if (data.status === EmailValidationStatus.EMAIL_VERIFICATION_REQUIRED) {
|
|
105
|
+
setUserEmailValidated(false);
|
|
106
|
+
setUserEmailNeedsValidation(true);
|
|
107
|
+
}
|
|
108
|
+
if (data.status === EmailValidationStatus.RISKY_EMAIL || data.status === EmailValidationStatus.DISPOSABLE_EMAIL) await telemetry.saveConsent(userEmail, { source: "filteredInvalidEmail" });
|
|
109
|
+
} else {
|
|
97
110
|
setUserEmailValidated(true);
|
|
98
111
|
await telemetry.saveConsent(userEmail, { source: "promptForEmailValidated" });
|
|
99
112
|
}
|
|
100
113
|
return {
|
|
101
114
|
status: data.status,
|
|
102
|
-
message: data.message,
|
|
115
|
+
message: data.message ?? data.error,
|
|
103
116
|
email: userEmail,
|
|
104
117
|
hasEmail: true
|
|
105
118
|
};
|
|
106
119
|
} catch (e) {
|
|
107
|
-
require_logger.
|
|
120
|
+
require_logger.logger.debug(`Failed to check user status: ${e}`);
|
|
108
121
|
return {
|
|
109
122
|
status: EmailValidationStatus.OK,
|
|
110
123
|
message: "Unable to verify email status, but proceeding",
|
|
@@ -114,22 +127,23 @@ async function checkEmailStatus(options) {
|
|
|
114
127
|
}
|
|
115
128
|
}
|
|
116
129
|
async function promptForEmailUnverified() {
|
|
117
|
-
const { default: telemetry } = await Promise.resolve().then(() => require("./telemetry-
|
|
130
|
+
const { default: telemetry } = await Promise.resolve().then(() => require("./telemetry-5BCRNBbe.cjs"));
|
|
131
|
+
const ciMode = require_logger.isCI();
|
|
118
132
|
const existingEmail = getUserEmail();
|
|
119
|
-
let email =
|
|
120
|
-
const existingEmailNeedsValidation = !
|
|
121
|
-
const existingEmailValidated =
|
|
133
|
+
let email = ciMode ? CI_PLACEHOLDER_EMAIL : existingEmail;
|
|
134
|
+
const existingEmailNeedsValidation = !ciMode && getUserEmailNeedsValidation();
|
|
135
|
+
const existingEmailValidated = ciMode || getUserEmailValidated();
|
|
122
136
|
let emailNeedsValidation = existingEmailNeedsValidation && !existingEmailValidated;
|
|
123
137
|
if (!email) {
|
|
124
138
|
await telemetry.record("feature_used", { feature: "promptForEmailUnverified" });
|
|
125
139
|
const border = "─".repeat(require_fetch.TERMINAL_MAX_WIDTH);
|
|
126
|
-
require_logger.
|
|
127
|
-
require_logger.
|
|
128
|
-
require_logger.
|
|
129
|
-
require_logger.
|
|
130
|
-
require_logger.
|
|
131
|
-
require_logger.
|
|
132
|
-
require_logger.
|
|
140
|
+
require_logger.logger.info("");
|
|
141
|
+
require_logger.logger.info(chalk.default.cyan(border));
|
|
142
|
+
require_logger.logger.info(chalk.default.cyan.bold(" Email Verification Required"));
|
|
143
|
+
require_logger.logger.info(chalk.default.cyan(border));
|
|
144
|
+
require_logger.logger.info("");
|
|
145
|
+
require_logger.logger.info(" Red team scans require email verification to continue.");
|
|
146
|
+
require_logger.logger.info("");
|
|
133
147
|
const emailSchema = zod.z.email();
|
|
134
148
|
try {
|
|
135
149
|
email = await (0, _inquirer_input.default)({
|
|
@@ -142,7 +156,7 @@ async function promptForEmailUnverified() {
|
|
|
142
156
|
} catch (error) {
|
|
143
157
|
const err = error;
|
|
144
158
|
if (err?.name === "AbortPromptError" || err?.name === "ExitPromptError") process.exit(1);
|
|
145
|
-
require_logger.
|
|
159
|
+
require_logger.logger.error(`failed to prompt for email: ${err}`);
|
|
146
160
|
throw err;
|
|
147
161
|
}
|
|
148
162
|
setUserEmail(email);
|
|
@@ -155,77 +169,82 @@ async function promptForEmailUnverified() {
|
|
|
155
169
|
}
|
|
156
170
|
async function checkEmailStatusAndMaybeExit(options) {
|
|
157
171
|
const result = await checkEmailStatus(options);
|
|
172
|
+
if (require_logger.isCI()) return "ok";
|
|
158
173
|
if (result.status === EmailValidationStatus.RISKY_EMAIL || result.status === EmailValidationStatus.DISPOSABLE_EMAIL) {
|
|
159
|
-
require_logger.
|
|
174
|
+
require_logger.logger.error("Please use a valid work email.");
|
|
160
175
|
setUserEmail("");
|
|
161
176
|
return BAD_EMAIL_RESULT;
|
|
162
177
|
}
|
|
163
178
|
if (result.status === EmailValidationStatus.EXCEEDED_LIMIT) {
|
|
164
|
-
require_logger.
|
|
179
|
+
require_logger.logger.error("You have exceeded the maximum cloud inference limit. Please contact inquiries@promptfoo.dev to upgrade your account.");
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
if (result.status === EmailValidationStatus.EMAIL_VERIFICATION_REQUIRED) {
|
|
183
|
+
setUserEmailNeedsValidation(true);
|
|
184
|
+
setUserEmailValidated(false);
|
|
185
|
+
const message = result.message || "Your email address is not verified. Check your inbox for a verification link, then rerun the command.";
|
|
186
|
+
require_logger.logger.error(message, {
|
|
187
|
+
status: result.status,
|
|
188
|
+
hasEmail: result.hasEmail
|
|
189
|
+
});
|
|
165
190
|
process.exit(1);
|
|
166
191
|
}
|
|
167
192
|
if (result.status === EmailValidationStatus.SHOW_USAGE_WARNING && result.message) {
|
|
168
193
|
const border = "=".repeat(require_fetch.TERMINAL_MAX_WIDTH);
|
|
169
|
-
require_logger.
|
|
170
|
-
require_logger.
|
|
171
|
-
require_logger.
|
|
194
|
+
require_logger.logger.info(chalk.default.yellow(border));
|
|
195
|
+
require_logger.logger.warn(chalk.default.yellow(result.message));
|
|
196
|
+
require_logger.logger.info(chalk.default.yellow(border));
|
|
172
197
|
}
|
|
173
|
-
return
|
|
198
|
+
return "ok";
|
|
174
199
|
}
|
|
175
|
-
|
|
176
200
|
//#endregion
|
|
177
|
-
Object.defineProperty(exports,
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
});
|
|
183
|
-
Object.defineProperty(exports, 'checkEmailStatusAndMaybeExit', {
|
|
184
|
-
enumerable: true,
|
|
185
|
-
get: function () {
|
|
186
|
-
return checkEmailStatusAndMaybeExit;
|
|
187
|
-
}
|
|
201
|
+
Object.defineProperty(exports, "checkEmailStatusAndMaybeExit", {
|
|
202
|
+
enumerable: true,
|
|
203
|
+
get: function() {
|
|
204
|
+
return checkEmailStatusAndMaybeExit;
|
|
205
|
+
}
|
|
188
206
|
});
|
|
189
|
-
Object.defineProperty(exports,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
207
|
+
Object.defineProperty(exports, "getAuthMethod", {
|
|
208
|
+
enumerable: true,
|
|
209
|
+
get: function() {
|
|
210
|
+
return getAuthMethod;
|
|
211
|
+
}
|
|
194
212
|
});
|
|
195
|
-
Object.defineProperty(exports,
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
213
|
+
Object.defineProperty(exports, "getAuthor", {
|
|
214
|
+
enumerable: true,
|
|
215
|
+
get: function() {
|
|
216
|
+
return getAuthor;
|
|
217
|
+
}
|
|
200
218
|
});
|
|
201
|
-
Object.defineProperty(exports,
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
219
|
+
Object.defineProperty(exports, "getUserEmail", {
|
|
220
|
+
enumerable: true,
|
|
221
|
+
get: function() {
|
|
222
|
+
return getUserEmail;
|
|
223
|
+
}
|
|
206
224
|
});
|
|
207
|
-
Object.defineProperty(exports,
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
225
|
+
Object.defineProperty(exports, "getUserId", {
|
|
226
|
+
enumerable: true,
|
|
227
|
+
get: function() {
|
|
228
|
+
return getUserId;
|
|
229
|
+
}
|
|
212
230
|
});
|
|
213
|
-
Object.defineProperty(exports,
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
231
|
+
Object.defineProperty(exports, "isLoggedIntoCloud", {
|
|
232
|
+
enumerable: true,
|
|
233
|
+
get: function() {
|
|
234
|
+
return isLoggedIntoCloud;
|
|
235
|
+
}
|
|
218
236
|
});
|
|
219
|
-
Object.defineProperty(exports,
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
237
|
+
Object.defineProperty(exports, "promptForEmailUnverified", {
|
|
238
|
+
enumerable: true,
|
|
239
|
+
get: function() {
|
|
240
|
+
return promptForEmailUnverified;
|
|
241
|
+
}
|
|
224
242
|
});
|
|
225
|
-
Object.defineProperty(exports,
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
243
|
+
Object.defineProperty(exports, "setUserEmail", {
|
|
244
|
+
enumerable: true,
|
|
245
|
+
get: function() {
|
|
246
|
+
return setUserEmail;
|
|
247
|
+
}
|
|
230
248
|
});
|
|
231
|
-
|
|
249
|
+
|
|
250
|
+
//# sourceMappingURL=accounts-Bx-x3bmW.cjs.map
|