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.
Files changed (366) hide show
  1. package/README.md +1 -1
  2. package/dist/drizzle/0023_wooden_mandrill.sql +2 -0
  3. package/dist/drizzle/meta/0023_snapshot.json +1496 -0
  4. package/dist/drizzle/meta/_journal.json +7 -0
  5. package/dist/src/{ListApp-D3DG0F8h.js → ListApp-Du7YVwj5.js} +2 -4
  6. package/dist/src/accounts-BgNJDBE6.js +206 -0
  7. package/dist/src/{accounts-BzEY8H3v.cjs → accounts-Bx-x3bmW.cjs} +99 -80
  8. package/dist/src/{accounts-DHHiXsy6.js → accounts-CMqkzrVf.js} +61 -36
  9. package/dist/src/{accounts-R3gfCR_g.js → accounts-xrUGFA6n.js} +60 -35
  10. package/dist/src/{agentic-utils-D6_gzOUF.js → agentic-utils-BKIN5PKu.js} +9 -10
  11. package/dist/src/{agents-CwM7re15.cjs → agents-B0f4HICh.cjs} +37 -40
  12. package/dist/src/{agents-Cnph5GLD.js → agents-C-dDThPK.js} +37 -37
  13. package/dist/src/{agents-C7BiinFI.cjs → agents-CErsqg5U.cjs} +19 -27
  14. package/dist/src/{agents-v4cW_ZgC.js → agents-CVIn-Utx.js} +19 -22
  15. package/dist/src/{agents-GiUianme.js → agents-CXknwsFX.js} +37 -40
  16. package/dist/src/{agents-DETIQHqF.js → agents-DeH4Gu94.js} +21 -28
  17. package/dist/src/{agents-DYIT-hQy.js → agents-Dy2YpZpa.js} +38 -41
  18. package/dist/src/{agents-Cao4i7AX.js → agents-aF4-T121.js} +19 -30
  19. package/dist/src/{aimlapi-DMF6v_vb.js → aimlapi-BAGZDo5G.js} +16 -18
  20. package/dist/src/{aimlapi-CMJpKK-B.js → aimlapi-BNfTBexL.js} +15 -17
  21. package/dist/src/{aimlapi-DtSf1ykJ.js → aimlapi-DHRKlBEA.js} +15 -4
  22. package/dist/src/{aimlapi-DoGLcQW_.cjs → aimlapi-tg0Gkcvr.cjs} +15 -16
  23. package/dist/src/app/assets/index-BFCZg7hQ.js +439 -0
  24. package/dist/src/app/assets/index-NCn4eVBv.css +1 -0
  25. package/dist/src/app/assets/{vendor-charts-CYyo8R8v.js → vendor-charts-CCl15Imd.js} +1 -1
  26. package/dist/src/app/assets/{vendor-markdown-DSmzq4Jh.js → vendor-markdown-0tekx3KX.js} +1 -1
  27. package/dist/src/app/index.html +4 -34
  28. package/dist/src/{audio-DUH4q0Xq.js → audio-BRODU0UK.js} +7 -9
  29. package/dist/src/{audio-BWjyvHn9.cjs → audio-BWeaWovU.cjs} +6 -7
  30. package/dist/src/{audio-U580w8jM.js → audio-CHQ4r-RV.js} +6 -5
  31. package/dist/src/{audio-BrJBFN2b.js → audio-tf_NBjlC.js} +6 -8
  32. package/dist/src/base-B0tcrnq_.js +193 -0
  33. package/dist/src/base-B4QJRyFS.js +194 -0
  34. package/dist/src/base-DBtwl2FR.cjs +222 -0
  35. package/dist/src/base-fEDN28WM.js +193 -0
  36. package/dist/src/{blobs-kt8v3UyH.js → blobs-BAU-dXan.js} +9 -12
  37. package/dist/src/{blobs-C9J2mVgo.js → blobs-Bpg5rH6i.js} +9 -12
  38. package/dist/src/{blobs-673H0jCl.cjs → blobs-DvS-O6be.cjs} +34 -37
  39. package/dist/src/blobs-qTYm-1PY.js +236 -0
  40. package/dist/src/{cache-BLLayYEN.js → cache-8XhNqPKW.js} +64 -67
  41. package/dist/src/cache-Bbn1Nyrd.cjs +5 -0
  42. package/dist/src/cache-BwsMSda7.js +6 -0
  43. package/dist/src/{cache-mIszOnuz.js → cache-CG0SlR1d.js} +64 -66
  44. package/dist/src/{cache-7xULbvt3.cjs → cache-COish3-W.cjs} +114 -117
  45. package/dist/src/cache-D3eqDYGU.js +739 -0
  46. package/dist/src/{chat-Fl6TZJRS.cjs → chat-2K608PeQ.cjs} +20 -21
  47. package/dist/src/chat-BKm79wib.js +764 -0
  48. package/dist/src/{chat-XPN9YHhr.js → chat-CM_kyI8B.js} +20 -9
  49. package/dist/src/{chat-DIywASPG.js → chat-CRWNNq73.js} +49 -49
  50. package/dist/src/{chat-C8Ei4f87.js → chat-CznLWr_D.js} +49 -49
  51. package/dist/src/{chat-CgyGj2hC.js → chat-DHMH-N64.js} +20 -22
  52. package/dist/src/{chat-C4zqjObh.cjs → chat-DaqekjFr.cjs} +69 -69
  53. package/dist/src/{chat-Cpz3O-Xl.js → chat-DxysjBvt.js} +21 -23
  54. package/dist/src/{chatkit-Dpxrq4eD.js → chatkit-65VXf5SR.js} +58 -58
  55. package/dist/src/{chatkit-DIrJX8xk.js → chatkit-Be-Q-a9F.js} +58 -60
  56. package/dist/src/{chatkit-DEls11hE.js → chatkit-BxFvW8KY.js} +58 -60
  57. package/dist/src/{chatkit-e25Ziu17.cjs → chatkit-DKyPi1Gs.cjs} +58 -60
  58. package/dist/src/chunk-DEq-mXcV.js +15 -0
  59. package/dist/src/chunk-DRamLcfz.js +16 -0
  60. package/dist/src/{claude-agent-sdk-6-xTaLwM.js → claude-agent-sdk-BLTu0WBO.js} +45 -31
  61. package/dist/src/{claude-agent-sdk-BzxF6NIJ.cjs → claude-agent-sdk-CJH22shf.cjs} +44 -29
  62. package/dist/src/{claude-agent-sdk-CmkTnKGH.js → claude-agent-sdk-D6_k9FKA.js} +45 -33
  63. package/dist/src/{claude-agent-sdk-rXCBLK_o.js → claude-agent-sdk-Dy5lT-Tx.js} +46 -21
  64. package/dist/src/{cloud-BMbRVJFw.js → cloud-Bc9526yV.js} +32 -12
  65. package/dist/src/cloud-DmE0EwsY.js +4 -0
  66. package/dist/src/{cloudflare-ai-CUg4BTcj.js → cloudflare-ai-C9r2sRhw.js} +16 -18
  67. package/dist/src/{cloudflare-ai-Z9X219gp.js → cloudflare-ai-CWWJCRim.js} +16 -4
  68. package/dist/src/{cloudflare-ai-BAQ0u_dg.cjs → cloudflare-ai-ClWSdor4.cjs} +16 -17
  69. package/dist/src/{cloudflare-ai-CobxMTR4.js → cloudflare-ai-ICsOuD-z.js} +17 -19
  70. package/dist/src/{cloudflare-gateway-C0sgfr_z.cjs → cloudflare-gateway-C2_-KG5o.cjs} +21 -22
  71. package/dist/src/{cloudflare-gateway-_itGuXry.js → cloudflare-gateway-D6O7AlYb.js} +23 -23
  72. package/dist/src/{cloudflare-gateway-D2_yi-Fh.js → cloudflare-gateway-D6xFc5pa.js} +21 -25
  73. package/dist/src/{cloudflare-gateway-Djf3F3_H.js → cloudflare-gateway-pXGHxJ47.js} +26 -14
  74. package/dist/src/{codex-sdk-ibXwdglL.js → codex-sdk-C6UMlxwV.js} +49 -32
  75. package/dist/src/{codex-sdk-BASDNkIl.js → codex-sdk-DUwKWezN.js} +49 -30
  76. package/dist/src/{codex-sdk-dSnGdgIp.js → codex-sdk-GGAw0qbD.js} +49 -32
  77. package/dist/src/{codex-sdk-wTEpMM_X.cjs → codex-sdk-fAO0c3yA.cjs} +49 -32
  78. package/dist/src/{cometapi-B01btbfb.js → cometapi-BasUi7-_.js} +17 -19
  79. package/dist/src/{cometapi-DHUAH6nK.js → cometapi-Bbjp5V4x.js} +16 -4
  80. package/dist/src/{cometapi-ChAaRjg5.js → cometapi-DkXrKi5z.js} +21 -24
  81. package/dist/src/{cometapi-JbvOJSCO.cjs → cometapi-vY6aDZgo.cjs} +21 -22
  82. package/dist/src/{completion-D9_MDlnd.js → completion-6Mx_iXxK.js} +11 -13
  83. package/dist/src/{completion-BBJ6zmG3.js → completion-C5rtR_9P.js} +11 -13
  84. package/dist/src/{completion-DDyL3Cb2.cjs → completion-CDOouNzq.cjs} +21 -23
  85. package/dist/src/completion-C_P3ypkJ.js +120 -0
  86. package/dist/src/createHash-CTQmL3G2.js +15 -0
  87. package/dist/src/createHash-CfZSc0b4.cjs +27 -0
  88. package/dist/src/createHash-Da8fMwqB.js +16 -0
  89. package/dist/src/createHash-DmPQkvBh.js +15 -0
  90. package/dist/src/{docker-JAAubMw3.js → docker-5KcG-_86.js} +18 -20
  91. package/dist/src/{docker-Ckw-j7Rr.cjs → docker-BwsKwxFs.cjs} +18 -19
  92. package/dist/src/{docker-vnOg96gi.js → docker-CZnqU1XV.js} +18 -7
  93. package/dist/src/{docker-BuButc4D.js → docker-DzxyDPIj.js} +19 -21
  94. package/dist/src/entrypoint.js +2 -3
  95. package/dist/src/{errors-DnGCbnx8.js → errors-P6ll7XSJ.js} +2 -2
  96. package/dist/src/{esm-CYhseqj4.js → esm-C03C-mv3.js} +17 -20
  97. package/dist/src/{esm-rDtG_2rg.js → esm-CaIwzWR5.js} +18 -21
  98. package/dist/src/esm-Cd1AjG1D.js +379 -0
  99. package/dist/src/{esm-BQkx5roy.cjs → esm-CnNt7sI4.cjs} +47 -49
  100. package/dist/src/eval-17JizQIv.js +15 -0
  101. package/dist/src/{eval-CYrbG57o.js → eval-DmFyWU7i.js} +49 -55
  102. package/dist/src/{evalResult-COsVttMA.js → evalResult-CDQiuUuf.js} +16 -12
  103. package/dist/src/{evalResult-6JaUIStC.js → evalResult-CTG2AHOS.js} +10 -11
  104. package/dist/src/evalResult-Cqj8pldJ.js +12 -0
  105. package/dist/src/{evalResult-DlRfu_Rq.cjs → evalResult-Dap2CekP.cjs} +20 -21
  106. package/dist/src/evalResult-DvcJAWJU.cjs +10 -0
  107. package/dist/src/evalResult-Hftn-S_i.js +10 -0
  108. package/dist/src/evaluator-B2CFNt-P.js +36 -0
  109. package/dist/src/{evaluator-3EJCMTs0.js → evaluator-DPFRbFIL.js} +210 -232
  110. package/dist/src/{extractor-LSYjrhK0.js → extractor-CFG6bcWJ.js} +23 -38
  111. package/dist/src/{extractor-DbhlYEeo.cjs → extractor-DX36oYEv.cjs} +37 -64
  112. package/dist/src/{extractor-Hs7la_19.js → extractor-M67RUtg6.js} +23 -38
  113. package/dist/src/extractor-YMU_Gvt8.js +374 -0
  114. package/dist/src/fetch-4M3YRaqL.js +780 -0
  115. package/dist/src/{fetch-18MuNu9i.js → fetch-60Gzydls.js} +60 -46
  116. package/dist/src/{fetch-SRsE6Ctl.js → fetch-BMv0O527.js} +41 -35
  117. package/dist/src/{fetch-ZMn_oemb.cjs → fetch-BxUk8odA.cjs} +268 -279
  118. package/dist/src/fetch-KV5kNASw.js +5 -0
  119. package/dist/src/{fileExtensions-ePDqouxn.js → fileExtensions-DnqA1y9x.js} +2 -2
  120. package/dist/src/{fileExtensions-BpuMmaFL.js → fileExtensions-Ds-foDzt.js} +2 -2
  121. package/dist/src/fileExtensions-LcDYkU4v.js +85 -0
  122. package/dist/src/{fileExtensions-DkJYkWUy.cjs → fileExtensions-bYh77CN8.cjs} +27 -28
  123. package/dist/src/{formatDuration-Doo0xq-z.js → formatDuration-DgBVMN65.js} +2 -2
  124. package/dist/src/{genaiTracer-Ce19n68P.js → genaiTracer-70Z8BIuV.js} +2 -3
  125. package/dist/src/{genaiTracer-CqNnnXrE.js → genaiTracer-C1rxGO8Q.js} +2 -3
  126. package/dist/src/genaiTracer-D3fD9dNV.js +256 -0
  127. package/dist/src/{genaiTracer-CQlpZkrp.cjs → genaiTracer-DN4dQywX.cjs} +13 -14
  128. package/dist/src/graders-Bu0H9nXi.js +32 -0
  129. package/dist/src/{graders-BaMCwIKp.js → graders-CHO8EPM4.js} +385 -417
  130. package/dist/src/graders-Cfhkvx-e.js +34 -0
  131. package/dist/src/{graders-QsALpIdy.js → graders-CpdqD9PI.js} +385 -417
  132. package/dist/src/graders-DClJVpGP.cjs +32 -0
  133. package/dist/src/{graders-DzUUnUjC.cjs → graders-DOXycdlG.cjs} +721 -753
  134. package/dist/src/graders-DcnJsrMO.js +32 -0
  135. package/dist/src/graders-R9rYUM0d.js +13466 -0
  136. package/dist/src/{image-BiEVdpdP.js → image-BmEZqVmk.js} +57 -18
  137. package/dist/src/{image-mhAGP07h.js → image-CBBVXWuT.js} +57 -18
  138. package/dist/src/{image-D10zEe1f.cjs → image-CDLQOcqT.cjs} +6 -7
  139. package/dist/src/{image-COCWy5dX.js → image-DJEvKveK.js} +6 -5
  140. package/dist/src/{image-C3BjJUAU.cjs → image-DTedmQPg.cjs} +77 -32
  141. package/dist/src/{image-DB4sHxdJ.js → image-gvmivTEe.js} +7 -9
  142. package/dist/src/image-pAX56tPG.js +257 -0
  143. package/dist/src/{image-BXt_7u0v.js → image-tL5hIOFh.js} +6 -8
  144. package/dist/src/index.cjs +696 -693
  145. package/dist/src/index.d.cts +113 -10
  146. package/dist/src/index.d.ts +113 -6
  147. package/dist/src/index.js +657 -658
  148. package/dist/src/{interactiveCheck-DU-MAhp5.js → interactiveCheck-BgLZUIt3.js} +7 -8
  149. package/dist/src/{invariant-DT20jrBd.js → invariant-BtWWVVhl.js} +2 -2
  150. package/dist/src/{invariant-1pAf2CD1.js → invariant-Ddh24eXh.js} +2 -2
  151. package/dist/src/{invariant-CKcJAQ6M.cjs → invariant-kfQ8Bu82.cjs} +7 -8
  152. package/dist/src/invariant-vgHWClmd.js +25 -0
  153. package/dist/src/{knowledgeBase-DotRBzUE.js → knowledgeBase-CLJybhnF.js} +19 -34
  154. package/dist/src/{knowledgeBase-XJQ0Qyez.js → knowledgeBase-CoU-UQBg.js} +17 -41
  155. package/dist/src/{knowledgeBase-CMvMlLZR.js → knowledgeBase-DjWPVqSb.js} +17 -43
  156. package/dist/src/{knowledgeBase-Bnb00xKs.cjs → knowledgeBase-wkxuRFhA.cjs} +17 -40
  157. package/dist/src/{litellm-CHrRmPAe.js → litellm-B9Hysuri.js} +16 -18
  158. package/dist/src/{litellm-CrLJrPIm.js → litellm-CTfa0hqi.js} +15 -17
  159. package/dist/src/{litellm-BrnZhMcL.cjs → litellm-NYpQ8RQu.cjs} +15 -16
  160. package/dist/src/{litellm-BECdjOTx.js → litellm-ePxtr9F1.js} +15 -4
  161. package/dist/src/{logger-w8Ozp0Td.js → logger-CT3IKMKA.js} +24 -41
  162. package/dist/src/{logger-BdZ-IqBc.cjs → logger-Cp1GPUjj.cjs} +166 -192
  163. package/dist/src/logger-DLcq4dWf.js +713 -0
  164. package/dist/src/{logger-BotXmWKW.js → logger-KkObSCzq.js} +27 -43
  165. package/dist/src/{luma-ray-C0RkI3lt.cjs → luma-ray-B0GGNRc1.cjs} +20 -21
  166. package/dist/src/{luma-ray-C-w6EsJm.js → luma-ray-BE2mOt6N.js} +20 -13
  167. package/dist/src/{luma-ray-BOeX-h0M.js → luma-ray-BW9IRGIc.js} +22 -21
  168. package/dist/src/{luma-ray-DgKLS0BF.js → luma-ray-Cm1KZBhs.js} +20 -23
  169. package/dist/src/main.js +1985 -2055
  170. package/dist/src/{messages-DXV3Qh8_.cjs → messages-1JrJs91T.cjs} +35 -34
  171. package/dist/src/{messages-D61tPFQo.js → messages-1x9atZmP.js} +25 -24
  172. package/dist/src/{messages-CDZYGNlS.js → messages-BLbWdsyt.js} +25 -24
  173. package/dist/src/messages-D8EA0oDc.js +240 -0
  174. package/dist/src/{meteor-P2rUE-Uz.js → meteor-44VjEACX.js} +3 -4
  175. package/dist/src/{meteor-SLNTgmXm.js → meteor-D-SotUw9.js} +3 -4
  176. package/dist/src/{meteor-odmwVbyG.cjs → meteor-DLZZ3osF.cjs} +3 -4
  177. package/dist/src/{meteor-Dj8cTkU_.js → meteor-DUiCJRC-.js} +3 -4
  178. package/dist/src/modelslab-C1OLRmVX.js +166 -0
  179. package/dist/src/modelslab-CqXBy3U8.js +168 -0
  180. package/dist/src/modelslab-DcOSFwKh.cjs +166 -0
  181. package/dist/src/modelslab-X5-4LroM.js +166 -0
  182. package/dist/src/{nova-reel-C2LFfVTf.js → nova-reel-BgS1ZWuK.js} +20 -13
  183. package/dist/src/{nova-reel-DtCjbD5O.js → nova-reel-D2ZkOSyr.js} +22 -21
  184. package/dist/src/{nova-reel-D9FXq3Mt.cjs → nova-reel-D9xfaMBs.cjs} +20 -21
  185. package/dist/src/{nova-reel-Bk5npr2q.js → nova-reel-DihqLeol.js} +20 -23
  186. package/dist/src/{nova-sonic-BoRSY_U6.cjs → nova-sonic-DVu3mMIy.cjs} +30 -31
  187. package/dist/src/{nova-sonic-D_qERM-K.js → nova-sonic-DezhVUYT.js} +30 -26
  188. package/dist/src/{nova-sonic-CgaWLDM1.js → nova-sonic-P-CdUMlV.js} +30 -31
  189. package/dist/src/{nova-sonic-BXRfQyF-.js → nova-sonic-Q3BOJeig.js} +31 -32
  190. package/dist/src/{openai-Bigwjgo1.cjs → openai-Cuif0GEt.cjs} +8 -9
  191. package/dist/src/{openai-Dz3surb_.js → openai-DElQ-fPX.js} +3 -4
  192. package/dist/src/{openai-CT5fwbve.js → openai-DhbB7eWK.js} +3 -4
  193. package/dist/src/openai-j-sE2O7r.js +44 -0
  194. package/dist/src/{openclaw-dHLcXUWZ.js → openclaw-BiSZPL7J.js} +20 -14
  195. package/dist/src/{openclaw-CpPrXwf6.js → openclaw-Bv1DINsX.js} +20 -27
  196. package/dist/src/{openclaw-B6XY2kUf.js → openclaw-D1D_ej1z.js} +21 -28
  197. package/dist/src/{openclaw-DDSfq5fp.cjs → openclaw-DAfWQn-o.cjs} +33 -39
  198. package/dist/src/opencode-sdk-C7m-wRfI.js +560 -0
  199. package/dist/src/opencode-sdk-CfaLN8PY.cjs +564 -0
  200. package/dist/src/opencode-sdk-D95s6SnR.js +562 -0
  201. package/dist/src/opencode-sdk-DxUPkLT7.js +560 -0
  202. package/dist/src/{otlpReceiver-DmRb0NBj.js → otlpReceiver--AIRW_S4.js} +53 -51
  203. package/dist/src/{otlpReceiver-Dg817agV.js → otlpReceiver-Bn5wGB1v.js} +53 -55
  204. package/dist/src/{otlpReceiver-B6Xo4KZM.cjs → otlpReceiver-Diec4cln.cjs} +53 -55
  205. package/dist/src/{otlpReceiver-BO0rbDzh.js → otlpReceiver-g3ByGaXs.js} +53 -55
  206. package/dist/src/{providerRegistry-Xf0qdqGQ.js → providerRegistry-B0RUOLI_.js} +7 -8
  207. package/dist/src/{providerRegistry-wCWd7sKQ.js → providerRegistry-CD8MEar9.js} +7 -8
  208. package/dist/src/{providerRegistry-lc7a7utN.cjs → providerRegistry-Civky8Ar.cjs} +12 -13
  209. package/dist/src/providerRegistry-DM8rZYol.js +45 -0
  210. package/dist/src/providers-B3HvufyI.js +33246 -0
  211. package/dist/src/{providers-BiNq_Iyc.js → providers-BKRJTjBz.js} +1743 -1795
  212. package/dist/src/providers-C1rOSHiR.js +32 -0
  213. package/dist/src/{providers-BlEhY5mi.js → providers-CFLy1_ji.js} +1750 -1802
  214. package/dist/src/{providers-BNKVY53V.cjs → providers-CFu-TZl-.cjs} +2111 -2163
  215. package/dist/src/providers-CxmDwEFf.cjs +31 -0
  216. package/dist/src/providers-Dodakqr0.js +30 -0
  217. package/dist/src/providers-GIQ2TcsA.js +30 -0
  218. package/dist/src/{pythonUtils-r1uBuA0n.js → pythonUtils-C3py6GC1.js} +18 -19
  219. package/dist/src/{pythonUtils-DZ6EbdY4.cjs → pythonUtils-CTU3Y3lw.cjs} +42 -43
  220. package/dist/src/{pythonUtils-vMlk9Qp5.js → pythonUtils-D5nxkQ0P.js} +18 -19
  221. package/dist/src/pythonUtils-D6fwaDSg.js +249 -0
  222. package/dist/src/quiverai-C2jVwbH1.js +213 -0
  223. package/dist/src/quiverai-CI6gYJVI.js +213 -0
  224. package/dist/src/quiverai-CLkWkyZc.cjs +213 -0
  225. package/dist/src/quiverai-MHSxbmmZ.js +215 -0
  226. package/dist/src/{render-CAZvKKkB.js → render-Drod8m7K.js} +4 -5
  227. package/dist/src/{responses-DLLjADw5.js → responses-BKqJmhhc.js} +34 -27
  228. package/dist/src/{responses-TsdODUpm.js → responses-CGw0DCzh.js} +34 -27
  229. package/dist/src/responses-jxdehPkC.js +660 -0
  230. package/dist/src/{responses-zOtKtnY_.cjs → responses-tD4Bd4dc.cjs} +49 -42
  231. package/dist/src/rubyUtils-BUHu6PhO.js +5 -0
  232. package/dist/src/{rubyUtils-Cs35SDYa.js → rubyUtils-BUVePouc.js} +27 -20
  233. package/dist/src/rubyUtils-BcuGX77l.js +222 -0
  234. package/dist/src/{rubyUtils-BtjlqyXt.js → rubyUtils-Boc4HZzX.js} +18 -19
  235. package/dist/src/rubyUtils-CP42kMvq.cjs +4 -0
  236. package/dist/src/{rubyUtils-DCVaJ3mc.cjs → rubyUtils-DhCAlxZr.cjs} +48 -50
  237. package/dist/src/{sagemaker-Du4LIR97.js → sagemaker-BK4Zb993.js} +75 -70
  238. package/dist/src/{sagemaker-CLdUAv5z.js → sagemaker-BfiWTmvn.js} +77 -77
  239. package/dist/src/{sagemaker-DwNnEVYt.cjs → sagemaker-CcQHM1jV.cjs} +75 -76
  240. package/dist/src/{sagemaker-BcgLu0U4.js → sagemaker-D2Q1c-sD.js} +75 -79
  241. package/dist/src/{scanner-Dyw21Wg_.js → scanner-J8CA3LsV.js} +149 -122
  242. package/dist/src/server/index.js +5620 -67302
  243. package/dist/src/{server-CgUQ25qW.cjs → server-B0PPuDw-.cjs} +57 -67
  244. package/dist/src/server-B1vi21hA.js +7 -0
  245. package/dist/src/{server-CbMTRQkg.js → server-BC7XJFgr.js} +19 -24
  246. package/dist/src/server-Cm9Kai_h.cjs +5 -0
  247. package/dist/src/{server-DWmZLfCy.js → server-DbFphssR.js} +26 -29
  248. package/dist/src/server-OAs3nBRT.js +229 -0
  249. package/dist/src/{signal-Bl32q42d.js → signal-BOTbd53Z.js} +9 -11
  250. package/dist/src/{slack-BtMkB6xP.cjs → slack-BmVAVGaK.cjs} +7 -8
  251. package/dist/src/{slack-OZYxoVON.js → slack-DCUPTzS2.js} +8 -8
  252. package/dist/src/{slack-DPqj42Ts.js → slack-DOdy_kyv.js} +7 -8
  253. package/dist/src/{slack-BfdBx2tO.js → slack-DXMKtA-f.js} +7 -9
  254. package/dist/src/store-BNmZ1KAz.cjs +5 -0
  255. package/dist/src/{store-BqwfFEyF.cjs → store-BSc-TF2w.cjs} +44 -45
  256. package/dist/src/store-BltJg2cd.js +6 -0
  257. package/dist/src/{store-D4gdn9ih.js → store-D1tv90v3.js} +34 -35
  258. package/dist/src/{store-2ocbYY9D.js → store-DQLEjuEO.js} +40 -36
  259. package/dist/src/store-Ub2vaGJ1.js +228 -0
  260. package/dist/src/{tables-D-NSwNIb.js → tables-5EvT_Bwn.js} +23 -23
  261. package/dist/src/{tables-B9E1kRp-.cjs → tables-C7K-XKWp.cjs} +93 -93
  262. package/dist/src/{tables-C7TT2XVn.js → tables-D36WTqKX.js} +25 -25
  263. package/dist/src/tables-xKANLRBD.js +288 -0
  264. package/dist/src/telemetry-5BCRNBbe.cjs +5 -0
  265. package/dist/src/{telemetry-DZ_7PaVq.js → telemetry-C15ziL8u.js} +17 -14
  266. package/dist/src/{telemetry-BXyVqyAg.js → telemetry-C2YDkUQH.js} +11 -13
  267. package/dist/src/{telemetry-D0_yFdtU.cjs → telemetry-CbrnxHp_.cjs} +21 -24
  268. package/dist/src/telemetry-D4W5hboe.js +7 -0
  269. package/dist/src/telemetry-DMb2Mpfm.js +171 -0
  270. package/dist/src/{text-Dm78AVGG.js → text-B_UCRPp2.js} +2 -2
  271. package/dist/src/{text-DF2hMKdg.cjs → text-CW1cyrwj.cjs} +12 -13
  272. package/dist/src/{text-DgMr_tiM.js → text-Db-Wt2u2.js} +2 -2
  273. package/dist/src/text-TIv0QYnd.js +22 -0
  274. package/dist/src/{tokenUsageUtils-FZd5O_4A.js → tokenUsageUtils-BDGe-iyI.js} +2 -2
  275. package/dist/src/{tokenUsageUtils-DmZSD2eU.js → tokenUsageUtils-DflFMjS0.js} +2 -2
  276. package/dist/src/tokenUsageUtils-NYT-WKS6.js +138 -0
  277. package/dist/src/{tokenUsageUtils-CXhxVj72.cjs → tokenUsageUtils-bVa1ga6f.cjs} +32 -33
  278. package/dist/src/{transcription-FNIz3YOe.cjs → transcription-CL78qbOU.cjs} +14 -15
  279. package/dist/src/{transcription-C-M81iDA.js → transcription-DAtxHhAM.js} +14 -7
  280. package/dist/src/{transcription-CYuY5sFO.js → transcription-LNZTNUUL.js} +14 -16
  281. package/dist/src/{transcription-Ch7S-LWw.js → transcription-QHh3AH6Z.js} +15 -17
  282. package/dist/src/{transform-CoP2bJ7P.js → transform-Cgi24fJ7.js} +94 -66
  283. package/dist/src/{transform-Kd6u-oNm.cjs → transform-CzK1Q0zl.cjs} +24 -26
  284. package/dist/src/{transform-D8dILpfZ.js → transform-DECvGmzp.js} +15 -13
  285. package/dist/src/{transform-DMaxQwDx.js → transform-DGLazrMm.js} +94 -66
  286. package/dist/src/transform-DGxXocjk.js +1506 -0
  287. package/dist/src/{transform-ivxEY4f7.cjs → transform-DOcQeLld.cjs} +234 -206
  288. package/dist/src/transform-DTGDnAzW.js +6 -0
  289. package/dist/src/{transform-CqTFr7KR.js → transform-DilY9wbS.js} +10 -12
  290. package/dist/src/transform-aa6tmVpZ.js +216 -0
  291. package/dist/src/transform-m3qNw4KP.cjs +5 -0
  292. package/dist/src/{transformersAvailability-DEU2naS1.js → transformersAvailability-CEVM2GNQ.js} +2 -2
  293. package/dist/src/{transformersAvailability-Bkep3ka7.cjs → transformersAvailability-CwayUSlh.cjs} +2 -3
  294. package/dist/src/{transformersAvailability-DwmezkVe.js → transformersAvailability-D6c6ROpT.js} +2 -2
  295. package/dist/src/{types-t52w-XsS.js → types-CH3Ge2sE.js} +103 -92
  296. package/dist/src/{types-DMVjYLpx.js → types-CLKiCBW3.js} +98 -91
  297. package/dist/src/types-CN_TZ2GJ.js +3260 -0
  298. package/dist/src/{types-BIfttHrT.cjs → types-LJ0r3wbR.cjs} +573 -566
  299. package/dist/src/util-5cB-L7U3.js +1430 -0
  300. package/dist/src/util-6-GqIvzS.js +599 -0
  301. package/dist/src/{util-vjscpUzy.js → util-B7T3SiBS.js} +5 -6
  302. package/dist/src/{util-Cl0zfT3V.js → util-Betm42rL.js} +44 -17
  303. package/dist/src/{util-CUEt0Vum.js → util-C-PPYSMq.js} +44 -17
  304. package/dist/src/{util-DkFTvieG.cjs → util-CchiqXh_.cjs} +35 -36
  305. package/dist/src/{util-mJ58qbbw.js → util-DaWTWKBK.js} +5 -6
  306. package/dist/src/{util-C08Kns6-.cjs → util-Db0a0AFH.cjs} +89 -62
  307. package/dist/src/{util-DiCePfDu.js → util-Dlz_Wvgm.js} +102 -53
  308. package/dist/src/{util-BSh4a_Q8.js → util-YT5HPZaS.js} +102 -53
  309. package/dist/src/{util-DUYOvxAy.cjs → util-Yz-1aEhW.cjs} +274 -219
  310. package/dist/src/util-ZZH-3QZz.js +293 -0
  311. package/dist/src/{utils-DFaZa6Rf.cjs → utils-Cz9qXqII.cjs} +32 -35
  312. package/dist/src/{utils-CVzb4YiI.js → utils-XiOAgly5.js} +4 -7
  313. package/dist/src/utils-dLokC-eR.js +94 -0
  314. package/dist/src/{utils-JaY9veb5.js → utils-f2-Moju7.js} +4 -7
  315. package/dist/tsconfig.tsbuildinfo +1 -1
  316. package/package.json +59 -53
  317. package/dist/src/app/assets/index-BOgkICuY.css +0 -1
  318. package/dist/src/app/assets/index-CSgqn_Vd.js +0 -428
  319. package/dist/src/app/tsconfig.app.tsbuildinfo +0 -1
  320. package/dist/src/base-BaXmtXYp.js +0 -107
  321. package/dist/src/base-Dtp8b4_N.js +0 -106
  322. package/dist/src/base-f71xxWai.cjs +0 -111
  323. package/dist/src/cache-BUPcq0Ad.js +0 -6
  324. package/dist/src/cache-CVfRb-HD.cjs +0 -6
  325. package/dist/src/cache-O4EuX2JV.js +0 -8
  326. package/dist/src/chunk-DHDDz29n.js +0 -22
  327. package/dist/src/chunk-FhC4c-0y.js +0 -21
  328. package/dist/src/cloud-CZ4hytdm.js +0 -5
  329. package/dist/src/eval-CKHWqG9f.js +0 -16
  330. package/dist/src/evalResult-CxTP-LMm.cjs +0 -11
  331. package/dist/src/evalResult-CzLURDcP.js +0 -13
  332. package/dist/src/evalResult-DyttNQ_G.js +0 -11
  333. package/dist/src/evaluator-0PvfeBYh.js +0 -38
  334. package/dist/src/fetch-Bi0o-fdp.js +0 -4
  335. package/dist/src/fetch-CMptBDVg.cjs +0 -4
  336. package/dist/src/fetch-DAZkv3gV.js +0 -6
  337. package/dist/src/graders-BCytzXrb.js +0 -34
  338. package/dist/src/graders-CGZQShfJ.cjs +0 -33
  339. package/dist/src/graders-spkuVC-E.js +0 -36
  340. package/dist/src/opencode-sdk-CImWVqy9.js +0 -382
  341. package/dist/src/opencode-sdk-CuCztr4P.js +0 -380
  342. package/dist/src/opencode-sdk-DhcfRbBH.js +0 -376
  343. package/dist/src/opencode-sdk-mqF-Oj3f.cjs +0 -383
  344. package/dist/src/providers-BMZZmPBJ.cjs +0 -32
  345. package/dist/src/providers-CQQrNaJk.js +0 -32
  346. package/dist/src/providers-Ck8HyrC-.js +0 -34
  347. package/dist/src/quiverai-BNfIwKCO.cjs +0 -54
  348. package/dist/src/quiverai-BQigKdIH.js +0 -57
  349. package/dist/src/quiverai-Bfy2WnE2.js +0 -55
  350. package/dist/src/quiverai-CedIP0PJ.js +0 -43
  351. package/dist/src/rubyUtils-D7--T12C.js +0 -6
  352. package/dist/src/rubyUtils-DRRiMFV2.js +0 -5
  353. package/dist/src/rubyUtils-vb8OYFC-.cjs +0 -5
  354. package/dist/src/server-BUbS0Qfh.js +0 -6
  355. package/dist/src/server-XpGXFHkS.cjs +0 -6
  356. package/dist/src/server-gfOx5Zrk.js +0 -8
  357. package/dist/src/store-5u2yriTV.js +0 -7
  358. package/dist/src/store-D_lq_8oQ.js +0 -6
  359. package/dist/src/store-m5KT6Ly7.cjs +0 -6
  360. package/dist/src/telemetry-5RHFoCJh.js +0 -6
  361. package/dist/src/telemetry-Do8wMnA-.js +0 -8
  362. package/dist/src/telemetry-LojxPoFq.cjs +0 -6
  363. package/dist/src/transform-8eGmaH-7.js +0 -7
  364. package/dist/src/transform-BRVvWaG4.cjs +0 -6
  365. package/dist/src/transform-GybT0X0u.js +0 -8
  366. package/dist/src/transformersAvailability-DkAWaK5B.js +0 -35
@@ -162,6 +162,13 @@
162
162
  "when": 1765906817572,
163
163
  "tag": "0022_sleepy_ultimo",
164
164
  "breakpoints": true
165
+ },
166
+ {
167
+ "idx": 23,
168
+ "version": "6",
169
+ "when": 1767985150681,
170
+ "tag": "0023_wooden_mandrill",
171
+ "breakpoints": true
165
172
  }
166
173
  ]
167
174
  }
@@ -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
- //# sourceMappingURL=ListApp-D3DG0F8h.js.map
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('./logger-BdZ-IqBc.cjs');
2
- const require_fetch = require('./fetch-ZMn_oemb.cjs');
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: EMAIL_OK_STATUS,
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-LojxPoFq.cjs"));
84
- const userEmail = require_logger.isCI() ? "ci-placeholder@promptfoo.dev" : getUserEmail();
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.logger_default.info(`Checking email...`);
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([EmailValidationStatus.RISKY_EMAIL, EmailValidationStatus.DISPOSABLE_EMAIL]).has(data.status)) await telemetry.saveConsent(userEmail, { source: "filteredInvalidEmail" });
96
- else {
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.logger_default.debug(`Failed to check user status: ${e}`);
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-LojxPoFq.cjs"));
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 = require_logger.isCI() ? "ci-placeholder@promptfoo.dev" : existingEmail;
120
- const existingEmailNeedsValidation = !require_logger.isCI() && getUserEmailNeedsValidation();
121
- const existingEmailValidated = require_logger.isCI() || getUserEmailValidated();
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.logger_default.info("");
127
- require_logger.logger_default.info(chalk.default.cyan(border));
128
- require_logger.logger_default.info(chalk.default.cyan.bold(" Email Verification Required"));
129
- require_logger.logger_default.info(chalk.default.cyan(border));
130
- require_logger.logger_default.info("");
131
- require_logger.logger_default.info(" Red team scans require email verification to continue.");
132
- require_logger.logger_default.info("");
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.logger_default.error(`failed to prompt for email: ${err}`);
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.logger_default.error("Please use a valid work email.");
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.logger_default.error("You have exceeded the maximum cloud inference limit. Please contact inquiries@promptfoo.dev to upgrade your account.");
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.logger_default.info(chalk.default.yellow(border));
170
- require_logger.logger_default.warn(chalk.default.yellow(result.message));
171
- require_logger.logger_default.info(chalk.default.yellow(border));
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 EMAIL_OK_STATUS;
198
+ return "ok";
174
199
  }
175
-
176
200
  //#endregion
177
- Object.defineProperty(exports, 'EMAIL_OK_STATUS', {
178
- enumerable: true,
179
- get: function () {
180
- return EMAIL_OK_STATUS;
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, 'getAuthMethod', {
190
- enumerable: true,
191
- get: function () {
192
- return getAuthMethod;
193
- }
207
+ Object.defineProperty(exports, "getAuthMethod", {
208
+ enumerable: true,
209
+ get: function() {
210
+ return getAuthMethod;
211
+ }
194
212
  });
195
- Object.defineProperty(exports, 'getAuthor', {
196
- enumerable: true,
197
- get: function () {
198
- return getAuthor;
199
- }
213
+ Object.defineProperty(exports, "getAuthor", {
214
+ enumerable: true,
215
+ get: function() {
216
+ return getAuthor;
217
+ }
200
218
  });
201
- Object.defineProperty(exports, 'getUserEmail', {
202
- enumerable: true,
203
- get: function () {
204
- return getUserEmail;
205
- }
219
+ Object.defineProperty(exports, "getUserEmail", {
220
+ enumerable: true,
221
+ get: function() {
222
+ return getUserEmail;
223
+ }
206
224
  });
207
- Object.defineProperty(exports, 'getUserId', {
208
- enumerable: true,
209
- get: function () {
210
- return getUserId;
211
- }
225
+ Object.defineProperty(exports, "getUserId", {
226
+ enumerable: true,
227
+ get: function() {
228
+ return getUserId;
229
+ }
212
230
  });
213
- Object.defineProperty(exports, 'isLoggedIntoCloud', {
214
- enumerable: true,
215
- get: function () {
216
- return isLoggedIntoCloud;
217
- }
231
+ Object.defineProperty(exports, "isLoggedIntoCloud", {
232
+ enumerable: true,
233
+ get: function() {
234
+ return isLoggedIntoCloud;
235
+ }
218
236
  });
219
- Object.defineProperty(exports, 'promptForEmailUnverified', {
220
- enumerable: true,
221
- get: function () {
222
- return promptForEmailUnverified;
223
- }
237
+ Object.defineProperty(exports, "promptForEmailUnverified", {
238
+ enumerable: true,
239
+ get: function() {
240
+ return promptForEmailUnverified;
241
+ }
224
242
  });
225
- Object.defineProperty(exports, 'setUserEmail', {
226
- enumerable: true,
227
- get: function () {
228
- return setUserEmail;
229
- }
243
+ Object.defineProperty(exports, "setUserEmail", {
244
+ enumerable: true,
245
+ get: function() {
246
+ return setUserEmail;
247
+ }
230
248
  });
231
- //# sourceMappingURL=accounts-BzEY8H3v.cjs.map
249
+
250
+ //# sourceMappingURL=accounts-Bx-x3bmW.cjs.map