promptfoo 0.121.1 → 0.121.3
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 +2 -0
- package/dist/src/{accounts-xrUGFA6n.js → accounts-B2XmGjty.js} +5 -5
- package/dist/src/{accounts-Bx-x3bmW.cjs → accounts-BPyfpSeU.cjs} +5 -5
- package/dist/src/{accounts-CMqkzrVf.js → accounts-CFLK3mnD.js} +6 -6
- package/dist/src/{accounts-BgNJDBE6.js → accounts-Xatc0RYb.js} +5 -5
- package/dist/src/{agentic-utils-BKIN5PKu.js → agentic-utils-36epdqwB.js} +3 -3
- package/dist/src/{cometapi-DkXrKi5z.js → agentic-utils-D8yXo5Lm.js} +4 -61
- package/dist/src/{cometapi-vY6aDZgo.cjs → agentic-utils-DAVsChuB.cjs} +24 -62
- package/dist/src/agentic-utils-DIYAAYE7.js +153 -0
- package/dist/src/{agents-C-dDThPK.js → agents-BBVJCIYr.js} +226 -13
- package/dist/src/{agents-CErsqg5U.cjs → agents-BBWxKSM0.cjs} +7 -7
- package/dist/src/{agents-Dy2YpZpa.js → agents-Bqgfdokm.js} +227 -14
- package/dist/src/{agents-B0f4HICh.cjs → agents-CAYbM7qD.cjs} +226 -13
- package/dist/src/{agents-CVIn-Utx.js → agents-CLQ-P15P.js} +7 -7
- package/dist/src/{agents-DeH4Gu94.js → agents-CgBniSlI.js} +8 -8
- package/dist/src/{agents-CXknwsFX.js → agents-DSSTV4bv.js} +226 -13
- package/dist/src/{agents-aF4-T121.js → agents-wg3ohknq.js} +7 -7
- package/dist/src/{aimlapi-tg0Gkcvr.cjs → aimlapi-Bv8Fmc-b.cjs} +14 -14
- package/dist/src/{aimlapi-BNfTBexL.js → aimlapi-BwGC1TtS.js} +13 -13
- package/dist/src/{aimlapi-BAGZDo5G.js → aimlapi-DaC3qZ-o.js} +14 -14
- package/dist/src/{aimlapi-DHRKlBEA.js → aimlapi-MgSLdvy7.js} +13 -13
- package/dist/src/app/assets/index-B6l9CVVb.js +439 -0
- package/dist/src/app/assets/index-DyZ0Ep37.css +1 -0
- package/dist/src/app/assets/sync-CStkzc6u.js +4 -0
- package/dist/src/app/assets/vendor-charts-BnDWwBlI.js +36 -0
- package/dist/src/app/assets/vendor-markdown-Bz7N-ca6.js +29 -0
- package/dist/src/app/index.html +4 -4
- package/dist/src/{audio-tf_NBjlC.js → audio-Bn44pQxv.js} +4 -4
- package/dist/src/{audio-CHQ4r-RV.js → audio-DDA5WHdx.js} +4 -4
- package/dist/src/{audio-BWeaWovU.cjs → audio-DVFjQ67_.cjs} +4 -4
- package/dist/src/{audio-BRODU0UK.js → audio-DjU9GswO.js} +5 -5
- package/dist/src/{base-DBtwl2FR.cjs → base-BboXIF_0.cjs} +3 -3
- package/dist/src/{base-B4QJRyFS.js → base-CKjwebIH.js} +3 -3
- package/dist/src/{base-B0tcrnq_.js → base-CqzQ4K8j.js} +3 -3
- package/dist/src/{base-fEDN28WM.js → base-Cz2ZC_iA.js} +3 -3
- package/dist/src/{blobs-BAU-dXan.js → blobs-B1JriOyi.js} +3 -3
- package/dist/src/{blobs-qTYm-1PY.js → blobs-BUWmKWzo.js} +3 -3
- package/dist/src/{blobs-DvS-O6be.cjs → blobs-C6j0bvFz.cjs} +3 -3
- package/dist/src/{blobs-Bpg5rH6i.js → blobs-DXTl6J3H.js} +3 -3
- package/dist/src/{cache-COish3-W.cjs → cache-C5yFZ4gC.cjs} +75 -58
- package/dist/src/{cache-8XhNqPKW.js → cache-CaT5tPgo.js} +75 -58
- package/dist/src/cache-CyCanoMu.js +6 -0
- package/dist/src/{cache-CG0SlR1d.js → cache-DSqR6ezl.js} +75 -58
- package/dist/src/cache-Df_QFDNu.cjs +5 -0
- package/dist/src/{cache-D3eqDYGU.js → cache-HP0NP4k3.js} +75 -58
- package/dist/src/{chat-DHMH-N64.js → chat-B-52XYI1.js} +12 -12
- package/dist/src/{chat-BKm79wib.js → chat-B0iaWhoh.js} +16 -14
- package/dist/src/{chat-DxysjBvt.js → chat-BE0qTA8e.js} +13 -13
- package/dist/src/{chat-CRWNNq73.js → chat-BEwdgGEg.js} +16 -14
- package/dist/src/{chat-2K608PeQ.cjs → chat-BtIKkLKx.cjs} +13 -13
- package/dist/src/{chat-DaqekjFr.cjs → chat-CM8qWR3_.cjs} +17 -15
- package/dist/src/{chat-CM_kyI8B.js → chat-DK1U-eZ-.js} +12 -12
- package/dist/src/{chat-CznLWr_D.js → chat-pxmiVpWe.js} +16 -14
- package/dist/src/{chatkit-65VXf5SR.js → chatkit-BYGQlHlV.js} +4 -4
- package/dist/src/{chatkit-DKyPi1Gs.cjs → chatkit-Cx174XI3.cjs} +4 -4
- package/dist/src/{chatkit-BxFvW8KY.js → chatkit-_8eJqKcD.js} +4 -4
- package/dist/src/{chatkit-Be-Q-a9F.js → chatkit-a2D6mY6s.js} +4 -4
- package/dist/src/{claude-agent-sdk-CJH22shf.cjs → claude-agent-sdk-8ddRp1L2.cjs} +35 -17
- package/dist/src/{claude-agent-sdk-Dy5lT-Tx.js → claude-agent-sdk-Bq5EArsX.js} +33 -15
- package/dist/src/{claude-agent-sdk-BLTu0WBO.js → claude-agent-sdk-CMjh4LFH.js} +33 -15
- package/dist/src/{claude-agent-sdk-D6_k9FKA.js → claude-agent-sdk-HgbFioFw.js} +33 -15
- package/dist/src/cloud-DE3t1-ZI.js +4 -0
- package/dist/src/{cloud-Bc9526yV.js → cloud-z8KZpUoa.js} +3 -3
- package/dist/src/{cloudflare-ai-CWWJCRim.js → cloudflare-ai-BGyXlpXJ.js} +13 -13
- package/dist/src/{cloudflare-ai-C9r2sRhw.js → cloudflare-ai-Bbp26N0L.js} +13 -13
- package/dist/src/{cloudflare-ai-ClWSdor4.cjs → cloudflare-ai-C62x6MQG.cjs} +14 -14
- package/dist/src/{cloudflare-ai-ICsOuD-z.js → cloudflare-ai-DdKP9TKT.js} +14 -14
- package/dist/src/{cloudflare-gateway-D6xFc5pa.js → cloudflare-gateway-BwAaUgeW.js} +14 -14
- package/dist/src/{cloudflare-gateway-D6O7AlYb.js → cloudflare-gateway-D-e9i1Sn.js} +15 -15
- package/dist/src/{cloudflare-gateway-pXGHxJ47.js → cloudflare-gateway-DXhtXDRb.js} +15 -163
- package/dist/src/{cloudflare-gateway-C2_-KG5o.cjs → cloudflare-gateway-Dx36ftqF.cjs} +15 -15
- package/dist/src/{codex-sdk-DUwKWezN.js → codex-sdk-BQEw16R_.js} +180 -11
- package/dist/src/{codex-sdk-C6UMlxwV.js → codex-sdk-C_07GuVS.js} +180 -11
- package/dist/src/{codex-sdk-GGAw0qbD.js → codex-sdk-DE5G18dx.js} +180 -11
- package/dist/src/{codex-sdk-fAO0c3yA.cjs → codex-sdk-ZLKfDjqP.cjs} +181 -12
- package/dist/src/cometapi-BDyV-NNm.js +62 -0
- package/dist/src/cometapi-C3hOlM7-.cjs +62 -0
- package/dist/src/{cometapi-Bbjp5V4x.js → cometapi-hhL4TAh3.js} +14 -14
- package/dist/src/{cometapi-BasUi7-_.js → cometapi-sp7sJpBD.js} +15 -15
- package/dist/src/{completion-C_P3ypkJ.js → completion-BCimtq-h.js} +6 -6
- package/dist/src/{completion-6Mx_iXxK.js → completion-DCjv7RZ3.js} +6 -6
- package/dist/src/{completion-CDOouNzq.cjs → completion-DlXUhj5c.cjs} +6 -6
- package/dist/src/{completion-C5rtR_9P.js → completion-DoYy49ti.js} +6 -6
- package/dist/src/{createHash-CfZSc0b4.cjs → createHash-BYwImsYv.cjs} +2 -2
- package/dist/src/{docker-BwsKwxFs.cjs → docker-Cqj2-QVi.cjs} +14 -14
- package/dist/src/{docker-CZnqU1XV.js → docker-CxCkwMzc.js} +13 -13
- package/dist/src/{docker-DzxyDPIj.js → docker-DpguQj-w.js} +14 -14
- package/dist/src/{docker-5KcG-_86.js → docker-FeBni2dw.js} +13 -13
- package/dist/src/{esm-C03C-mv3.js → esm-7UIl0pPM.js} +2 -2
- package/dist/src/{esm-Cd1AjG1D.js → esm-CKWP3u_P.js} +3 -3
- package/dist/src/{esm-CnNt7sI4.cjs → esm-CipptfDu.cjs} +2 -2
- package/dist/src/{esm-CaIwzWR5.js → esm-SUNIX1x3.js} +3 -3
- package/dist/src/eval-7aEqoMs3.js +15 -0
- package/dist/src/{eval-DmFyWU7i.js → eval-BTqTn7lb.js} +10 -10
- package/dist/src/{evalResult-CDQiuUuf.js → evalResult-BkIhRdTe.js} +7 -7
- package/dist/src/evalResult-CYNHkk5A.js +12 -0
- package/dist/src/evalResult-CuvJeNiM.js +10 -0
- package/dist/src/{evalResult-CTG2AHOS.js → evalResult-DUDShQrm.js} +7 -7
- package/dist/src/{evalResult-Dap2CekP.cjs → evalResult-DpARzUCb.cjs} +7 -7
- package/dist/src/evalResult-tGdilrWt.cjs +10 -0
- package/dist/src/evaluator-BBUqRhz1.js +36 -0
- package/dist/src/{evaluator-DPFRbFIL.js → evaluator-BcvOGaam.js} +833 -79
- package/dist/src/{extractor-YMU_Gvt8.js → extractor-C8XwivI9.js} +6 -6
- package/dist/src/{extractor-CFG6bcWJ.js → extractor-CAZ2G3Kh.js} +6 -6
- package/dist/src/{extractor-DX36oYEv.cjs → extractor-DG3sSfXE.cjs} +6 -6
- package/dist/src/{extractor-M67RUtg6.js → extractor-D_wd8jxt.js} +6 -6
- package/dist/src/{fetch-4M3YRaqL.js → fetch-BiYv2BZc.js} +3 -3
- package/dist/src/{fetch-BxUk8odA.cjs → fetch-BnR9wSnm.cjs} +3 -3
- package/dist/src/{fetch-60Gzydls.js → fetch-CVAtKnI3.js} +3 -3
- package/dist/src/{fetch-BMv0O527.js → fetch-DoVRJZhJ.js} +4 -4
- package/dist/src/fetch-UWU706qb.js +5 -0
- package/dist/src/{genaiTracer-DN4dQywX.cjs → genaiTracer-BfxrvSUb.cjs} +2 -2
- package/dist/src/{graders-DOXycdlG.cjs → graders-BElhu9ZY.cjs} +126 -55
- package/dist/src/{graders-R9rYUM0d.js → graders-BXAJ0sbS.js} +120 -55
- package/dist/src/graders-BxfEguVY.js +32 -0
- package/dist/src/graders-CzVMbEnv.js +34 -0
- package/dist/src/{graders-CpdqD9PI.js → graders-DG7mhg-b.js} +120 -55
- package/dist/src/graders-DjCXfj0l.cjs +32 -0
- package/dist/src/{graders-CHO8EPM4.js → graders-RjHF8VfG.js} +120 -55
- package/dist/src/graders-kHzIWOKu.js +32 -0
- package/dist/src/{image-DTedmQPg.cjs → image--F58eEIn.cjs} +6 -6
- package/dist/src/{image-DJEvKveK.js → image-6WQXK8m8.js} +4 -4
- package/dist/src/{image-pAX56tPG.js → image-B8b6f36E.js} +6 -6
- package/dist/src/{image-BmEZqVmk.js → image-CoxZp9PZ.js} +6 -6
- package/dist/src/{image-gvmivTEe.js → image-DO0RYnjH.js} +5 -5
- package/dist/src/{image-CBBVXWuT.js → image-PoF6DN3x.js} +6 -6
- package/dist/src/{image-CDLQOcqT.cjs → image-fza3zuKs.cjs} +4 -4
- package/dist/src/{image-tL5hIOFh.js → image-xNbw5ph2.js} +4 -4
- package/dist/src/index.cjs +863 -110
- package/dist/src/index.d.cts +833 -60
- package/dist/src/index.d.ts +833 -60
- package/dist/src/index.js +860 -108
- package/dist/src/{interactiveCheck-BgLZUIt3.js → interactiveCheck-BnMYOjMu.js} +2 -2
- package/dist/src/{knowledgeBase-CoU-UQBg.js → knowledgeBase-Bi7CmDbx.js} +7 -7
- package/dist/src/{knowledgeBase-CLJybhnF.js → knowledgeBase-Ce3ofVan.js} +8 -8
- package/dist/src/{knowledgeBase-DjWPVqSb.js → knowledgeBase-DFRXPZl_.js} +7 -7
- package/dist/src/{knowledgeBase-wkxuRFhA.cjs → knowledgeBase-DqrLX8fy.cjs} +7 -7
- package/dist/src/{litellm-B9Hysuri.js → litellm-Bo2gQXpo.js} +16 -15
- package/dist/src/{litellm-ePxtr9F1.js → litellm-CKiAxnoM.js} +15 -14
- package/dist/src/{litellm-NYpQ8RQu.cjs → litellm-CnHI69aj.cjs} +16 -15
- package/dist/src/{litellm-CTfa0hqi.js → litellm-Tc294Jhj.js} +15 -14
- package/dist/src/{logger-KkObSCzq.js → logger-BcJBzSSA.js} +10 -14
- package/dist/src/{logger-DLcq4dWf.js → logger-BnkjG2jt.js} +10 -14
- package/dist/src/{logger-Cp1GPUjj.cjs → logger-D5iKBpu_.cjs} +27 -13
- package/dist/src/{logger-CT3IKMKA.js → logger-DO8_zM18.js} +10 -14
- package/dist/src/{luma-ray-BW9IRGIc.js → luma-ray-0ehMPt5N.js} +10 -10
- package/dist/src/{luma-ray-BE2mOt6N.js → luma-ray-C9q8rdQe.js} +9 -9
- package/dist/src/{luma-ray-Cm1KZBhs.js → luma-ray-DP0QA9qn.js} +9 -9
- package/dist/src/{luma-ray-B0GGNRc1.cjs → luma-ray-m9Ku2meV.cjs} +9 -9
- package/dist/src/main.js +69 -71
- package/dist/src/{messages-1x9atZmP.js → messages-DJNo37Ko.js} +14 -9
- package/dist/src/{messages-BLbWdsyt.js → messages-Dy9QecMs.js} +14 -9
- package/dist/src/{messages-1JrJs91T.cjs → messages-HJsyEh4o.cjs} +15 -10
- package/dist/src/{messages-D8EA0oDc.js → messages-biC_ex-p.js} +14 -9
- package/dist/src/{modelslab-C1OLRmVX.js → modelslab-B5J-ZM5c.js} +9 -9
- package/dist/src/{modelslab-CqXBy3U8.js → modelslab-BI458moT.js} +10 -10
- package/dist/src/{modelslab-X5-4LroM.js → modelslab-BTOT8FUO.js} +9 -9
- package/dist/src/{modelslab-DcOSFwKh.cjs → modelslab-IQbNg-r7.cjs} +9 -9
- package/dist/src/{nova-reel-DihqLeol.js → nova-reel-BZ9y-Y5s.js} +9 -9
- package/dist/src/{nova-reel-D9xfaMBs.cjs → nova-reel-CE5etkv9.cjs} +9 -9
- package/dist/src/{nova-reel-D2ZkOSyr.js → nova-reel-DEeQlnOJ.js} +10 -10
- package/dist/src/{nova-reel-BgS1ZWuK.js → nova-reel-Xw1SXLpg.js} +9 -9
- package/dist/src/{nova-sonic-Q3BOJeig.js → nova-sonic-DWswpN1E.js} +7 -7
- package/dist/src/{nova-sonic-DezhVUYT.js → nova-sonic-DXTLpi-r.js} +6 -6
- package/dist/src/{nova-sonic-DVu3mMIy.cjs → nova-sonic-N0yCm0vb.cjs} +6 -6
- package/dist/src/{nova-sonic-P-CdUMlV.js → nova-sonic-Ogqf-csn.js} +6 -6
- package/dist/src/{openai-DhbB7eWK.js → openai-BMcwgD5C.js} +2 -2
- package/dist/src/{openai-j-sE2O7r.js → openai-BcB5KlTk.js} +2 -2
- package/dist/src/{openai-Cuif0GEt.cjs → openai-CoxGAQwn.cjs} +2 -2
- package/dist/src/{openai-DElQ-fPX.js → openai-D6wITiVn.js} +2 -2
- package/dist/src/{openclaw-Bv1DINsX.js → openclaw-0Sv7AK3O.js} +172 -109
- package/dist/src/{openclaw-DAfWQn-o.cjs → openclaw-CXxbKgDH.cjs} +174 -110
- package/dist/src/{openclaw-BiSZPL7J.js → openclaw-D1FSCps-.js} +172 -109
- package/dist/src/{openclaw-D1D_ej1z.js → openclaw-D2ENvu7a.js} +173 -110
- package/dist/src/{opencode-sdk-D95s6SnR.js → opencode-sdk-C71Z0ehR.js} +13 -13
- package/dist/src/{opencode-sdk-DxUPkLT7.js → opencode-sdk-CHCs7dEb.js} +12 -12
- package/dist/src/{opencode-sdk-C7m-wRfI.js → opencode-sdk-DDxj4QqH.js} +12 -12
- package/dist/src/{opencode-sdk-CfaLN8PY.cjs → opencode-sdk-WWJhnbKr.cjs} +16 -16
- package/dist/src/{otlpReceiver-g3ByGaXs.js → otlpReceiver-C9KlUtxh.js} +6 -6
- package/dist/src/{otlpReceiver--AIRW_S4.js → otlpReceiver-CZL48YfC.js} +6 -6
- package/dist/src/{otlpReceiver-Bn5wGB1v.js → otlpReceiver-CavGAA6k.js} +6 -6
- package/dist/src/{otlpReceiver-Diec4cln.cjs → otlpReceiver-DHKqJlsz.cjs} +6 -6
- package/dist/src/{providerRegistry-B0RUOLI_.js → providerRegistry-B9lh-_tx.js} +2 -2
- package/dist/src/{providerRegistry-Civky8Ar.cjs → providerRegistry-BTDgfV5h.cjs} +2 -2
- package/dist/src/{providerRegistry-CD8MEar9.js → providerRegistry-BkzVH5Ba.js} +2 -2
- package/dist/src/{providerRegistry-DM8rZYol.js → providerRegistry-CUWki5mQ.js} +2 -2
- package/dist/src/providers-BSLEaIQG.js +32 -0
- package/dist/src/{providers-CFu-TZl-.cjs → providers-CScd1wN6.cjs} +733 -464
- package/dist/src/{providers-CFLy1_ji.js → providers-Ch6Mr0gn.js} +795 -526
- package/dist/src/{providers-BKRJTjBz.js → providers-Cn73d5sr.js} +795 -526
- package/dist/src/providers-D-FnDg8k.cjs +31 -0
- package/dist/src/providers-DEYiFVAo.js +30 -0
- package/dist/src/{providers-B3HvufyI.js → providers-DvddrgxL.js} +795 -526
- package/dist/src/providers-sS2WI8YD.js +30 -0
- package/dist/src/{pythonUtils-D6fwaDSg.js → pythonUtils-Bzwbgpbg.js} +3 -3
- package/dist/src/{pythonUtils-D5nxkQ0P.js → pythonUtils-Cpo0Ez1p.js} +3 -3
- package/dist/src/{pythonUtils-CTU3Y3lw.cjs → pythonUtils-dAVigVK-.cjs} +3 -3
- package/dist/src/{pythonUtils-C3py6GC1.js → pythonUtils-wIqk7zAf.js} +3 -3
- package/dist/src/{quiverai-CI6gYJVI.js → quiverai-BeofbLVc.js} +4 -4
- package/dist/src/{quiverai-MHSxbmmZ.js → quiverai-CCQn73lq.js} +5 -5
- package/dist/src/{quiverai-CLkWkyZc.cjs → quiverai-CcUhPIBg.cjs} +4 -4
- package/dist/src/{quiverai-C2jVwbH1.js → quiverai-DVSEqJiq.js} +4 -4
- package/dist/src/{render-Drod8m7K.js → render-BHl6QVq9.js} +3 -3
- package/dist/src/{responses-CGw0DCzh.js → responses-BKP_WYis.js} +16 -12
- package/dist/src/{responses-BKqJmhhc.js → responses-CQb1Tj69.js} +16 -12
- package/dist/src/{responses-jxdehPkC.js → responses-CgNyTPsY.js} +16 -12
- package/dist/src/{responses-tD4Bd4dc.cjs → responses-mo0KQDbu.cjs} +16 -12
- package/dist/src/rubyUtils-B1HXG4ej.cjs +4 -0
- package/dist/src/{rubyUtils-DhCAlxZr.cjs → rubyUtils-CGeUtCfW.cjs} +3 -3
- package/dist/src/{rubyUtils-Boc4HZzX.js → rubyUtils-CiVfln3g.js} +3 -3
- package/dist/src/{rubyUtils-BcuGX77l.js → rubyUtils-DECSbsfY.js} +3 -3
- package/dist/src/{rubyUtils-BUVePouc.js → rubyUtils-PgU-gHmx.js} +3 -3
- package/dist/src/rubyUtils-Rt6pKA96.js +5 -0
- package/dist/src/{sagemaker-BK4Zb993.js → sagemaker-CVv8W7so.js} +17 -17
- package/dist/src/{sagemaker-D2Q1c-sD.js → sagemaker-CqeASYE5.js} +17 -17
- package/dist/src/{sagemaker-BfiWTmvn.js → sagemaker-MUbD5V3v.js} +18 -18
- package/dist/src/{sagemaker-CcQHM1jV.cjs → sagemaker-jiw1wQa-.cjs} +17 -17
- package/dist/src/{scanner-J8CA3LsV.js → scanner-DVDeUz1r.js} +10 -10
- package/dist/src/server/index.js +864 -112
- package/dist/src/server-B0Xh1Gx-.js +7 -0
- package/dist/src/{server-B0PPuDw-.cjs → server-BtoCXeXI.cjs} +4 -4
- package/dist/src/{server-BC7XJFgr.js → server-CP9qKM40.js} +4 -4
- package/dist/src/{server-OAs3nBRT.js → server-Cns05F1j.js} +5 -5
- package/dist/src/server-DJTKu9IR.cjs +5 -0
- package/dist/src/{server-DbFphssR.js → server-DZ9MtCn0.js} +6 -6
- package/dist/src/{signal-BOTbd53Z.js → signal-C3ZTsUgi.js} +3 -3
- package/dist/src/{slack-DXMKtA-f.js → slack-2sdpGzbt.js} +2 -2
- package/dist/src/{slack-BmVAVGaK.cjs → slack-94iG3T0s.cjs} +2 -2
- package/dist/src/{slack-DCUPTzS2.js → slack-BR0HtO3K.js} +2 -2
- package/dist/src/{slack-DOdy_kyv.js → slack-DCEV-vWP.js} +2 -2
- package/dist/src/store-C5u6MgC8.js +6 -0
- package/dist/src/{store-BSc-TF2w.cjs → store-CLyU7AtI.cjs} +17 -5
- package/dist/src/store-CNHk-De4.cjs +5 -0
- package/dist/src/{store-DQLEjuEO.js → store-Cj258DgL.js} +17 -5
- package/dist/src/{store-D1tv90v3.js → store-P8OKm19S.js} +17 -5
- package/dist/src/{store-Ub2vaGJ1.js → store-VB0GP46K.js} +17 -5
- package/dist/src/{tables-xKANLRBD.js → tables-BEIFz2tM.js} +3 -3
- package/dist/src/{tables-C7K-XKWp.cjs → tables-BdZQEpRz.cjs} +3 -3
- package/dist/src/{tables-D36WTqKX.js → tables-DmzvLbeZ.js} +3 -3
- package/dist/src/{tables-5EvT_Bwn.js → tables-kC7R5kiK.js} +3 -3
- package/dist/src/{telemetry-C2YDkUQH.js → telemetry-BnH5VJAU.js} +4 -4
- package/dist/src/{telemetry-C15ziL8u.js → telemetry-BugWqKiu.js} +4 -4
- package/dist/src/{telemetry-DMb2Mpfm.js → telemetry-DPXLd7UE.js} +4 -4
- package/dist/src/telemetry-Yig0Tino.js +7 -0
- package/dist/src/telemetry-p8Pwqm1i.cjs +5 -0
- package/dist/src/{telemetry-CbrnxHp_.cjs → telemetry-re627Lre.cjs} +4 -4
- package/dist/src/{transcription-CL78qbOU.cjs → transcription-BvtsrzRG.cjs} +13 -13
- package/dist/src/{transcription-DAtxHhAM.js → transcription-CaMivnjG.js} +13 -13
- package/dist/src/{transcription-QHh3AH6Z.js → transcription-DOMMTu01.js} +14 -14
- package/dist/src/{transcription-LNZTNUUL.js → transcription-Hb3VnC4M.js} +13 -13
- package/dist/src/{transform-DOcQeLld.cjs → transform-0BwoBsvO.cjs} +19 -5
- package/dist/src/{transform-DGxXocjk.js → transform-B2-jIv68.js} +8 -6
- package/dist/src/{transform-DECvGmzp.js → transform-BqPkNPYm.js} +4 -4
- package/dist/src/{transform-aa6tmVpZ.js → transform-BzK09Q_9.js} +4 -4
- package/dist/src/transform-ChNIpHz7.js +6 -0
- package/dist/src/{transform-Cgi24fJ7.js → transform-DrleutM3.js} +8 -6
- package/dist/src/{transform-DGLazrMm.js → transform-DyDAwEpE.js} +8 -6
- package/dist/src/transform-PtQ6rAE3.cjs +5 -0
- package/dist/src/{transform-CzK1Q0zl.cjs → transform-ZrG2dvlo.cjs} +4 -4
- package/dist/src/{transform-DilY9wbS.js → transform-ljLYHEPh.js} +4 -4
- package/dist/src/{transformersAvailability-CEVM2GNQ.js → transformersAvailability-BGkzavwb.js} +1 -1
- package/dist/src/{transformersAvailability-CwayUSlh.cjs → transformersAvailability-DKoRtQLy.cjs} +1 -1
- package/dist/src/{types-CH3Ge2sE.js → types-CIhFeUC4.js} +45 -11
- package/dist/src/{types-CN_TZ2GJ.js → types-Cd3ygw8W.js} +45 -11
- package/dist/src/{types-LJ0r3wbR.cjs → types-D8cGDZbL.cjs} +46 -12
- package/dist/src/{types-CLKiCBW3.js → types-q8GXGF65.js} +45 -11
- package/dist/src/{util-CchiqXh_.cjs → util--9u9UVCt.cjs} +3 -3
- package/dist/src/{util-5cB-L7U3.js → util-BLvy9qfE.js} +7 -11
- package/dist/src/{util-YT5HPZaS.js → util-Bm3E9jpK.js} +7 -11
- package/dist/src/{util-6-GqIvzS.js → util-BtoGs5Cb.js} +18 -4
- package/dist/src/{util-Db0a0AFH.cjs → util-CFj4YKIn.cjs} +18 -4
- package/dist/src/{util-Dlz_Wvgm.js → util-CMMkIxfU.js} +7 -11
- package/dist/src/{util-Betm42rL.js → util-CgDCK4KI.js} +18 -4
- package/dist/src/{util-Yz-1aEhW.cjs → util-CuLo2pMR.cjs} +7 -11
- package/dist/src/{util-C-PPYSMq.js → util-DM2rTn_6.js} +18 -4
- package/dist/src/{util-B7T3SiBS.js → util-DMFeUvLz.js} +3 -3
- package/dist/src/{util-ZZH-3QZz.js → util-DbVG-yZU.js} +3 -3
- package/dist/src/{util-DaWTWKBK.js → util-vNmDL5DT.js} +3 -3
- package/dist/src/{utils-XiOAgly5.js → utils-CFxO9KGo.js} +2 -2
- package/dist/src/{utils-f2-Moju7.js → utils-DEuL4VNB.js} +2 -2
- package/dist/src/{utils-Cz9qXqII.cjs → utils-DKw8mrgr.cjs} +3 -3
- package/dist/src/{utils-dLokC-eR.js → utils-DOjD4dTC.js} +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +38 -38
- package/dist/src/app/assets/index-BFCZg7hQ.js +0 -439
- package/dist/src/app/assets/index-NCn4eVBv.css +0 -1
- package/dist/src/app/assets/sync-9qqYcY-B.js +0 -4
- package/dist/src/app/assets/vendor-charts-CCl15Imd.js +0 -36
- package/dist/src/app/assets/vendor-markdown-0tekx3KX.js +0 -29
- package/dist/src/cache-Bbn1Nyrd.cjs +0 -5
- package/dist/src/cache-BwsMSda7.js +0 -6
- package/dist/src/cloud-DmE0EwsY.js +0 -4
- package/dist/src/eval-17JizQIv.js +0 -15
- package/dist/src/evalResult-Cqj8pldJ.js +0 -12
- package/dist/src/evalResult-DvcJAWJU.cjs +0 -10
- package/dist/src/evalResult-Hftn-S_i.js +0 -10
- package/dist/src/evaluator-B2CFNt-P.js +0 -36
- package/dist/src/fetch-KV5kNASw.js +0 -5
- package/dist/src/graders-Bu0H9nXi.js +0 -32
- package/dist/src/graders-Cfhkvx-e.js +0 -34
- package/dist/src/graders-DClJVpGP.cjs +0 -32
- package/dist/src/graders-DcnJsrMO.js +0 -32
- package/dist/src/providers-C1rOSHiR.js +0 -32
- package/dist/src/providers-CxmDwEFf.cjs +0 -31
- package/dist/src/providers-Dodakqr0.js +0 -30
- package/dist/src/providers-GIQ2TcsA.js +0 -30
- package/dist/src/rubyUtils-BUHu6PhO.js +0 -5
- package/dist/src/rubyUtils-CP42kMvq.cjs +0 -4
- package/dist/src/server-B1vi21hA.js +0 -7
- package/dist/src/server-Cm9Kai_h.cjs +0 -5
- package/dist/src/store-BNmZ1KAz.cjs +0 -5
- package/dist/src/store-BltJg2cd.js +0 -6
- package/dist/src/telemetry-5BCRNBbe.cjs +0 -5
- package/dist/src/telemetry-D4W5hboe.js +0 -7
- package/dist/src/transform-DTGDnAzW.js +0 -6
- package/dist/src/transform-m3qNw4KP.cjs +0 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as resolvePackageEntryPoint, r as importModule } from "./esm-
|
|
1
|
+
import { C as getEnvString, D as state, a as logger, c as REDACTED, l as normalizeFieldName, u as sanitizeObject } from "./logger-DO8_zM18.js";
|
|
2
|
+
import { i as resolvePackageEntryPoint, r as importModule } from "./esm-SUNIX1x3.js";
|
|
3
3
|
import { n as withGenAISpan, t as getTraceparent } from "./genaiTracer-D3fD9dNV.js";
|
|
4
4
|
import fs from "fs";
|
|
5
5
|
import path from "path";
|
|
@@ -7,12 +7,43 @@ import dedent from "dedent";
|
|
|
7
7
|
import crypto from "crypto";
|
|
8
8
|
import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
|
|
9
9
|
//#region src/providers/openai/codex-sdk.ts
|
|
10
|
+
const MINIMAL_CLI_ENV_KEYS = [
|
|
11
|
+
"PATH",
|
|
12
|
+
"Path",
|
|
13
|
+
"HOME",
|
|
14
|
+
"USER",
|
|
15
|
+
"USERNAME",
|
|
16
|
+
"USERPROFILE",
|
|
17
|
+
"TMPDIR",
|
|
18
|
+
"TMP",
|
|
19
|
+
"TEMP",
|
|
20
|
+
"SHELL",
|
|
21
|
+
"COMSPEC",
|
|
22
|
+
"SystemRoot",
|
|
23
|
+
"PATHEXT",
|
|
24
|
+
"LANG",
|
|
25
|
+
"LC_ALL",
|
|
26
|
+
"TERM"
|
|
27
|
+
];
|
|
28
|
+
function getMinimalProcessEnv() {
|
|
29
|
+
const env = {};
|
|
30
|
+
for (const key of MINIMAL_CLI_ENV_KEYS) {
|
|
31
|
+
const value = process.env[key];
|
|
32
|
+
if (typeof value === "string" && value.length > 0) env[key] = value;
|
|
33
|
+
}
|
|
34
|
+
return env;
|
|
35
|
+
}
|
|
10
36
|
/**
|
|
11
37
|
* Helper to load the OpenAI Codex SDK ESM module
|
|
12
38
|
* Uses resolvePackageEntryPoint to handle ESM-only packages with restrictive exports
|
|
13
39
|
*/
|
|
14
40
|
async function loadCodexSDK() {
|
|
15
|
-
const
|
|
41
|
+
const basePaths = [state.basePath && path.isAbsolute(state.basePath) ? state.basePath : void 0, process.cwd()].filter((candidate) => Boolean(candidate));
|
|
42
|
+
let codexPath = null;
|
|
43
|
+
for (const basePath of new Set(basePaths)) {
|
|
44
|
+
codexPath = resolvePackageEntryPoint("@openai/codex-sdk", basePath);
|
|
45
|
+
if (codexPath) break;
|
|
46
|
+
}
|
|
16
47
|
if (!codexPath) throw new Error(dedent`The @openai/codex-sdk package is required but not installed.
|
|
17
48
|
|
|
18
49
|
To use the OpenAI Codex SDK provider, install it with:
|
|
@@ -163,7 +194,10 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
163
194
|
}
|
|
164
195
|
}
|
|
165
196
|
prepareEnvironment(config, traceparent) {
|
|
166
|
-
const env =
|
|
197
|
+
const env = {
|
|
198
|
+
...config.cli_env === void 0 || config.inherit_process_env === true ? process.env : getMinimalProcessEnv(),
|
|
199
|
+
...config.cli_env ?? {}
|
|
200
|
+
};
|
|
167
201
|
const sortedEnv = {};
|
|
168
202
|
for (const key of Object.keys(env).sort()) if (env[key] !== void 0) sortedEnv[key] = env[key];
|
|
169
203
|
if (this.apiKey) {
|
|
@@ -192,6 +226,83 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
192
226
|
} else delete sortedEnv.TRACEPARENT;
|
|
193
227
|
return sortedEnv;
|
|
194
228
|
}
|
|
229
|
+
getSkillRootPrefixes(env) {
|
|
230
|
+
const prefixes = /* @__PURE__ */ new Set();
|
|
231
|
+
const addPrefix = (candidate) => {
|
|
232
|
+
if (!candidate) return;
|
|
233
|
+
const normalized = candidate.replace(/\\/g, "/").replace(/\/+$/g, "");
|
|
234
|
+
if (normalized) prefixes.add(normalized);
|
|
235
|
+
};
|
|
236
|
+
addPrefix(env.CODEX_HOME);
|
|
237
|
+
addPrefix("/etc/codex");
|
|
238
|
+
const homeDir = env.HOME || process.env.HOME;
|
|
239
|
+
if (homeDir) addPrefix(path.posix.join(homeDir.replace(/\\/g, "/"), ".codex"));
|
|
240
|
+
return Array.from(prefixes);
|
|
241
|
+
}
|
|
242
|
+
isValidCodexSkillName(name) {
|
|
243
|
+
return /^[A-Za-z0-9._:-]+$/.test(name);
|
|
244
|
+
}
|
|
245
|
+
extractSkillPathCandidates(text, skillRootPrefixes = []) {
|
|
246
|
+
const matches = /* @__PURE__ */ new Map();
|
|
247
|
+
for (const rawToken of text.split(/\s+/)) {
|
|
248
|
+
const token = rawToken.replace(/^[`"'([{<]+|[`"',;:)\]}>]+$/g, "").trim();
|
|
249
|
+
if (!token) continue;
|
|
250
|
+
const normalizedPath = token.replace(/\\/g, "/");
|
|
251
|
+
const repoMatch = normalizedPath.match(/^\.agents\/skills\/([^/\s]+)\/SKILL\.md$/);
|
|
252
|
+
if (repoMatch) {
|
|
253
|
+
if (this.isValidCodexSkillName(repoMatch[1])) matches.set(normalizedPath, {
|
|
254
|
+
name: repoMatch[1],
|
|
255
|
+
path: normalizedPath
|
|
256
|
+
});
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
const matchingRoot = skillRootPrefixes.find((prefix) => normalizedPath.startsWith(`${prefix}/skills/`));
|
|
260
|
+
if (!matchingRoot) continue;
|
|
261
|
+
const customRootMatch = normalizedPath.slice(matchingRoot.length + 1).match(/^skills\/([^/\s]+)\/SKILL\.md$/);
|
|
262
|
+
if (customRootMatch && this.isValidCodexSkillName(customRootMatch[1])) matches.set(normalizedPath, {
|
|
263
|
+
name: customRootMatch[1],
|
|
264
|
+
path: normalizedPath
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
return Array.from(matches.values());
|
|
268
|
+
}
|
|
269
|
+
extractSkillCallsFromItems(items, skillRootPrefixes = [], options = {}) {
|
|
270
|
+
const skillCalls = /* @__PURE__ */ new Map();
|
|
271
|
+
for (const item of items) {
|
|
272
|
+
if (item?.type !== "command_execution") continue;
|
|
273
|
+
if (options.requireSuccessfulCommand && !this.isSuccessfulCommandExecution(item)) continue;
|
|
274
|
+
const command = typeof item.command === "string" && item.command.trim() ? item.command : void 0;
|
|
275
|
+
if (!command) continue;
|
|
276
|
+
for (const skillPath of this.extractSkillPathCandidates(command, skillRootPrefixes)) {
|
|
277
|
+
const existing = skillCalls.get(skillPath.path) ?? {
|
|
278
|
+
name: skillPath.name,
|
|
279
|
+
path: skillPath.path
|
|
280
|
+
};
|
|
281
|
+
skillCalls.set(skillPath.path, existing);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return Array.from(skillCalls.values()).map((skillCall) => ({
|
|
285
|
+
name: skillCall.name,
|
|
286
|
+
path: skillCall.path,
|
|
287
|
+
source: "heuristic"
|
|
288
|
+
}));
|
|
289
|
+
}
|
|
290
|
+
buildSkillMetadata(items, skillRootPrefixes = []) {
|
|
291
|
+
if (!Array.isArray(items) || items.length === 0) return;
|
|
292
|
+
const attemptedSkillCalls = this.extractSkillCallsFromItems(items, skillRootPrefixes);
|
|
293
|
+
const skillCalls = this.extractSkillCallsFromItems(items, skillRootPrefixes, { requireSuccessfulCommand: true });
|
|
294
|
+
if (skillCalls.length === 0 && attemptedSkillCalls.length <= skillCalls.length) return;
|
|
295
|
+
return {
|
|
296
|
+
attemptedSkillCalls,
|
|
297
|
+
skillCalls
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
isSuccessfulCommandExecution(item) {
|
|
301
|
+
if (item?.type !== "command_execution") return false;
|
|
302
|
+
if (typeof item.status === "string" && item.status !== "completed") return false;
|
|
303
|
+
if (typeof item.exit_code === "number" && item.exit_code !== 0) return false;
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
195
306
|
validateWorkingDirectory(workingDir, skipGitCheck = false) {
|
|
196
307
|
let stats;
|
|
197
308
|
try {
|
|
@@ -230,7 +341,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
230
341
|
...config.additional_directories?.length ? { additionalDirectories: config.additional_directories } : {},
|
|
231
342
|
...config.sandbox_mode ? { sandboxMode: config.sandbox_mode } : {},
|
|
232
343
|
...config.model_reasoning_effort ? { modelReasoningEffort: config.model_reasoning_effort } : {},
|
|
233
|
-
...config.network_access_enabled
|
|
344
|
+
...config.network_access_enabled === void 0 ? {} : { networkAccessEnabled: config.network_access_enabled },
|
|
234
345
|
...config.web_search_mode ? { webSearchMode: config.web_search_mode } : {},
|
|
235
346
|
...config.web_search_enabled !== void 0 && !config.web_search_mode ? { webSearchEnabled: config.web_search_enabled } : {},
|
|
236
347
|
...config.approval_policy ? { approvalPolicy: config.approval_policy } : {}
|
|
@@ -259,7 +370,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
259
370
|
if (config.persist_threads && cacheKey) this.threads.set(cacheKey, thread);
|
|
260
371
|
return thread;
|
|
261
372
|
}
|
|
262
|
-
async runStreaming(thread, prompt, runOptions, callOptions) {
|
|
373
|
+
async runStreaming(thread, prompt, runOptions, callOptions, skillRootPrefixes = []) {
|
|
263
374
|
const { events } = await thread.runStreamed(prompt, runOptions);
|
|
264
375
|
const items = [];
|
|
265
376
|
let usage = void 0;
|
|
@@ -338,7 +449,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
338
449
|
}
|
|
339
450
|
});
|
|
340
451
|
}
|
|
341
|
-
const completionAttrs = this.getCompletionAttributesForItem(item);
|
|
452
|
+
const completionAttrs = this.getCompletionAttributesForItem(item, skillRootPrefixes);
|
|
342
453
|
for (const [key, value] of Object.entries(completionAttrs)) span.setAttribute(key, value);
|
|
343
454
|
const durationMs = eventTime - (itemStartTimes.get(itemId) || lastEventTime);
|
|
344
455
|
span.setAttribute("codex.duration_ms", durationMs);
|
|
@@ -367,7 +478,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
367
478
|
const itemId = String(item.id);
|
|
368
479
|
const span = activeSpans.get(itemId);
|
|
369
480
|
if (span) {
|
|
370
|
-
const updatedAttrs = this.getCompletionAttributesForItem(item);
|
|
481
|
+
const updatedAttrs = this.getCompletionAttributesForItem(item, skillRootPrefixes);
|
|
371
482
|
for (const [key, value] of Object.entries(updatedAttrs)) span.setAttribute(key, value);
|
|
372
483
|
}
|
|
373
484
|
}
|
|
@@ -434,6 +545,25 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
434
545
|
/**
|
|
435
546
|
* Get attributes for a Codex item at start
|
|
436
547
|
*/
|
|
548
|
+
getSkillTraceAttributes(item, skillRootPrefixes = [], options = {}) {
|
|
549
|
+
if (item?.type !== "command_execution") return {};
|
|
550
|
+
if (options.requireSuccessfulCommand && !this.isSuccessfulCommandExecution(item)) return {};
|
|
551
|
+
const command = typeof item.command === "string" && item.command.trim() ? item.command : void 0;
|
|
552
|
+
const skillCandidates = /* @__PURE__ */ new Map();
|
|
553
|
+
if (command) for (const skill of this.extractSkillPathCandidates(command, skillRootPrefixes)) skillCandidates.set(skill.path, skill);
|
|
554
|
+
if (skillCandidates.size === 0) return {};
|
|
555
|
+
const skills = Array.from(skillCandidates.values());
|
|
556
|
+
const attrs = {
|
|
557
|
+
"promptfoo.skill.count": skills.length,
|
|
558
|
+
"promptfoo.skill.names": skills.map((skill) => skill.name).join(","),
|
|
559
|
+
"promptfoo.skill.paths": skills.map((skill) => skill.path).join(",")
|
|
560
|
+
};
|
|
561
|
+
if (skills.length === 1) {
|
|
562
|
+
attrs["promptfoo.skill.name"] = skills[0].name;
|
|
563
|
+
attrs["promptfoo.skill.path"] = skills[0].path;
|
|
564
|
+
}
|
|
565
|
+
return attrs;
|
|
566
|
+
}
|
|
437
567
|
getAttributesForItem(item) {
|
|
438
568
|
const attrs = {};
|
|
439
569
|
switch (item.type) {
|
|
@@ -443,6 +573,10 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
443
573
|
case "mcp_tool_call":
|
|
444
574
|
if (typeof item.server === "string") attrs["codex.mcp.server"] = item.server;
|
|
445
575
|
if (typeof item.tool === "string") attrs["codex.mcp.tool"] = item.tool;
|
|
576
|
+
{
|
|
577
|
+
const serializedArgs = this.serializeItemValue(item.arguments ?? item.args ?? item.input);
|
|
578
|
+
if (serializedArgs) attrs["codex.mcp.input"] = serializedArgs;
|
|
579
|
+
}
|
|
446
580
|
break;
|
|
447
581
|
case "web_search":
|
|
448
582
|
if (typeof item.query === "string") attrs["codex.search.query"] = item.query;
|
|
@@ -461,16 +595,40 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
461
595
|
}
|
|
462
596
|
return attrs;
|
|
463
597
|
}
|
|
598
|
+
serializeItemValue(value) {
|
|
599
|
+
if (typeof value === "string") {
|
|
600
|
+
const trimmed = value.trim();
|
|
601
|
+
if (!trimmed) return;
|
|
602
|
+
try {
|
|
603
|
+
return JSON.stringify(this.redactTracePii(sanitizeObject(JSON.parse(trimmed))));
|
|
604
|
+
} catch {
|
|
605
|
+
return this.redactTracePii(sanitizeObject(trimmed, { context: "Codex MCP trace input" }));
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
if (value === void 0 || value === null) return;
|
|
609
|
+
try {
|
|
610
|
+
return JSON.stringify(this.redactTracePii(sanitizeObject(value, { context: "Codex MCP trace input" })));
|
|
611
|
+
} catch {
|
|
612
|
+
return;
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
redactTracePii(value) {
|
|
616
|
+
if (typeof value === "string" && /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i.test(value)) return REDACTED;
|
|
617
|
+
if (Array.isArray(value)) return value.map((item) => this.redactTracePii(item));
|
|
618
|
+
if (value && typeof value === "object") return Object.fromEntries(Object.entries(value).map(([key, entryValue]) => [key, normalizeFieldName(key).includes("email") ? REDACTED : this.redactTracePii(entryValue)]));
|
|
619
|
+
return value;
|
|
620
|
+
}
|
|
464
621
|
/**
|
|
465
622
|
* Get attributes for a Codex item at completion
|
|
466
623
|
*/
|
|
467
|
-
getCompletionAttributesForItem(item) {
|
|
624
|
+
getCompletionAttributesForItem(item, skillRootPrefixes = []) {
|
|
468
625
|
const attrs = {};
|
|
469
626
|
switch (item.type) {
|
|
470
627
|
case "command_execution":
|
|
471
628
|
if (typeof item.exit_code === "number") attrs["codex.exit_code"] = item.exit_code;
|
|
472
629
|
if (typeof item.status === "string") attrs["codex.status"] = item.status;
|
|
473
630
|
if (typeof item.aggregated_output === "string") attrs["codex.output"] = item.aggregated_output;
|
|
631
|
+
Object.assign(attrs, this.getSkillTraceAttributes(item, skillRootPrefixes, { requireSuccessfulCommand: true }));
|
|
474
632
|
break;
|
|
475
633
|
case "file_change":
|
|
476
634
|
if (typeof item.status === "string") attrs["codex.status"] = item.status;
|
|
@@ -482,6 +640,10 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
482
640
|
case "mcp_tool_call":
|
|
483
641
|
if (typeof item.status === "string") attrs["codex.status"] = item.status;
|
|
484
642
|
if (typeof item.error?.message === "string") attrs["codex.error"] = item.error.message;
|
|
643
|
+
{
|
|
644
|
+
const serializedArgs = this.serializeItemValue(item.arguments ?? item.args ?? item.input);
|
|
645
|
+
if (serializedArgs) attrs["codex.mcp.input"] = serializedArgs;
|
|
646
|
+
}
|
|
485
647
|
break;
|
|
486
648
|
case "agent_message":
|
|
487
649
|
if (typeof item.text === "string") attrs["codex.message"] = item.text;
|
|
@@ -571,6 +733,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
571
733
|
async callApiInternal(prompt, _context, callOptions, config) {
|
|
572
734
|
const currentTraceparent = getTraceparent();
|
|
573
735
|
const env = this.prepareEnvironment(config, currentTraceparent);
|
|
736
|
+
const skillRootPrefixes = this.getSkillRootPrefixes(env);
|
|
574
737
|
if (!this.apiKey && !env.OPENAI_API_KEY && !env.CODEX_API_KEY) throw new Error("OpenAI API key is not set. Set OPENAI_API_KEY or CODEX_API_KEY environment variable or add \"apiKey\" to provider config.");
|
|
575
738
|
if (config.working_dir) this.validateWorkingDirectory(config.working_dir, config.skip_git_repo_check);
|
|
576
739
|
if (callOptions?.abortSignal?.aborted) return { error: "OpenAI Codex SDK call aborted before it started" };
|
|
@@ -610,9 +773,14 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
610
773
|
if (config.output_schema) runOptions.outputSchema = config.output_schema;
|
|
611
774
|
if (callOptions?.abortSignal) runOptions.signal = callOptions.abortSignal;
|
|
612
775
|
try {
|
|
613
|
-
const turn = config.enable_streaming ? await this.runStreaming(thread, prompt, runOptions, callOptions) : await thread.run(prompt, runOptions);
|
|
776
|
+
const turn = config.enable_streaming ? await this.runStreaming(thread, prompt, runOptions, callOptions, skillRootPrefixes) : await thread.run(prompt, runOptions);
|
|
614
777
|
const output = turn.finalResponse || "";
|
|
615
778
|
const raw = JSON.stringify(turn);
|
|
779
|
+
const skillMetadata = this.buildSkillMetadata(turn.items, skillRootPrefixes);
|
|
780
|
+
const metadata = skillMetadata ? {
|
|
781
|
+
...skillMetadata.skillCalls.length > 0 ? { skillCalls: skillMetadata.skillCalls } : {},
|
|
782
|
+
...skillMetadata.attemptedSkillCalls.length > skillMetadata.skillCalls.length ? { attemptedSkillCalls: skillMetadata.attemptedSkillCalls } : {}
|
|
783
|
+
} : void 0;
|
|
616
784
|
const tokenUsage = turn.usage ? {
|
|
617
785
|
prompt: turn.usage.input_tokens,
|
|
618
786
|
completion: turn.usage.output_tokens,
|
|
@@ -638,6 +806,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
638
806
|
output,
|
|
639
807
|
tokenUsage,
|
|
640
808
|
cost,
|
|
809
|
+
metadata,
|
|
641
810
|
raw,
|
|
642
811
|
sessionId: thread.id || "unknown"
|
|
643
812
|
};
|
|
@@ -662,4 +831,4 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
662
831
|
//#endregion
|
|
663
832
|
export { OpenAICodexSDKProvider };
|
|
664
833
|
|
|
665
|
-
//# sourceMappingURL=codex-sdk-
|
|
834
|
+
//# sourceMappingURL=codex-sdk-C_07GuVS.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import { i as resolvePackageEntryPoint, r as importModule } from "./esm-
|
|
2
|
+
import { E as getEnvString, d as normalizeFieldName, f as sanitizeObject, j as state, s as logger, u as REDACTED } from "./logger-BcJBzSSA.js";
|
|
3
|
+
import { i as resolvePackageEntryPoint, r as importModule } from "./esm-7UIl0pPM.js";
|
|
4
4
|
import { n as withGenAISpan, t as getTraceparent } from "./genaiTracer-C1rxGO8Q.js";
|
|
5
5
|
import fs from "fs";
|
|
6
6
|
import path from "path";
|
|
@@ -8,12 +8,43 @@ import dedent from "dedent";
|
|
|
8
8
|
import crypto from "crypto";
|
|
9
9
|
import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
|
|
10
10
|
//#region src/providers/openai/codex-sdk.ts
|
|
11
|
+
const MINIMAL_CLI_ENV_KEYS = [
|
|
12
|
+
"PATH",
|
|
13
|
+
"Path",
|
|
14
|
+
"HOME",
|
|
15
|
+
"USER",
|
|
16
|
+
"USERNAME",
|
|
17
|
+
"USERPROFILE",
|
|
18
|
+
"TMPDIR",
|
|
19
|
+
"TMP",
|
|
20
|
+
"TEMP",
|
|
21
|
+
"SHELL",
|
|
22
|
+
"COMSPEC",
|
|
23
|
+
"SystemRoot",
|
|
24
|
+
"PATHEXT",
|
|
25
|
+
"LANG",
|
|
26
|
+
"LC_ALL",
|
|
27
|
+
"TERM"
|
|
28
|
+
];
|
|
29
|
+
function getMinimalProcessEnv() {
|
|
30
|
+
const env = {};
|
|
31
|
+
for (const key of MINIMAL_CLI_ENV_KEYS) {
|
|
32
|
+
const value = process.env[key];
|
|
33
|
+
if (typeof value === "string" && value.length > 0) env[key] = value;
|
|
34
|
+
}
|
|
35
|
+
return env;
|
|
36
|
+
}
|
|
11
37
|
/**
|
|
12
38
|
* Helper to load the OpenAI Codex SDK ESM module
|
|
13
39
|
* Uses resolvePackageEntryPoint to handle ESM-only packages with restrictive exports
|
|
14
40
|
*/
|
|
15
41
|
async function loadCodexSDK() {
|
|
16
|
-
const
|
|
42
|
+
const basePaths = [state.basePath && path.isAbsolute(state.basePath) ? state.basePath : void 0, process.cwd()].filter((candidate) => Boolean(candidate));
|
|
43
|
+
let codexPath = null;
|
|
44
|
+
for (const basePath of new Set(basePaths)) {
|
|
45
|
+
codexPath = resolvePackageEntryPoint("@openai/codex-sdk", basePath);
|
|
46
|
+
if (codexPath) break;
|
|
47
|
+
}
|
|
17
48
|
if (!codexPath) throw new Error(dedent`The @openai/codex-sdk package is required but not installed.
|
|
18
49
|
|
|
19
50
|
To use the OpenAI Codex SDK provider, install it with:
|
|
@@ -164,7 +195,10 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
164
195
|
}
|
|
165
196
|
}
|
|
166
197
|
prepareEnvironment(config, traceparent) {
|
|
167
|
-
const env =
|
|
198
|
+
const env = {
|
|
199
|
+
...config.cli_env === void 0 || config.inherit_process_env === true ? process.env : getMinimalProcessEnv(),
|
|
200
|
+
...config.cli_env ?? {}
|
|
201
|
+
};
|
|
168
202
|
const sortedEnv = {};
|
|
169
203
|
for (const key of Object.keys(env).sort()) if (env[key] !== void 0) sortedEnv[key] = env[key];
|
|
170
204
|
if (this.apiKey) {
|
|
@@ -193,6 +227,83 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
193
227
|
} else delete sortedEnv.TRACEPARENT;
|
|
194
228
|
return sortedEnv;
|
|
195
229
|
}
|
|
230
|
+
getSkillRootPrefixes(env) {
|
|
231
|
+
const prefixes = /* @__PURE__ */ new Set();
|
|
232
|
+
const addPrefix = (candidate) => {
|
|
233
|
+
if (!candidate) return;
|
|
234
|
+
const normalized = candidate.replace(/\\/g, "/").replace(/\/+$/g, "");
|
|
235
|
+
if (normalized) prefixes.add(normalized);
|
|
236
|
+
};
|
|
237
|
+
addPrefix(env.CODEX_HOME);
|
|
238
|
+
addPrefix("/etc/codex");
|
|
239
|
+
const homeDir = env.HOME || process.env.HOME;
|
|
240
|
+
if (homeDir) addPrefix(path.posix.join(homeDir.replace(/\\/g, "/"), ".codex"));
|
|
241
|
+
return Array.from(prefixes);
|
|
242
|
+
}
|
|
243
|
+
isValidCodexSkillName(name) {
|
|
244
|
+
return /^[A-Za-z0-9._:-]+$/.test(name);
|
|
245
|
+
}
|
|
246
|
+
extractSkillPathCandidates(text, skillRootPrefixes = []) {
|
|
247
|
+
const matches = /* @__PURE__ */ new Map();
|
|
248
|
+
for (const rawToken of text.split(/\s+/)) {
|
|
249
|
+
const token = rawToken.replace(/^[`"'([{<]+|[`"',;:)\]}>]+$/g, "").trim();
|
|
250
|
+
if (!token) continue;
|
|
251
|
+
const normalizedPath = token.replace(/\\/g, "/");
|
|
252
|
+
const repoMatch = normalizedPath.match(/^\.agents\/skills\/([^/\s]+)\/SKILL\.md$/);
|
|
253
|
+
if (repoMatch) {
|
|
254
|
+
if (this.isValidCodexSkillName(repoMatch[1])) matches.set(normalizedPath, {
|
|
255
|
+
name: repoMatch[1],
|
|
256
|
+
path: normalizedPath
|
|
257
|
+
});
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
const matchingRoot = skillRootPrefixes.find((prefix) => normalizedPath.startsWith(`${prefix}/skills/`));
|
|
261
|
+
if (!matchingRoot) continue;
|
|
262
|
+
const customRootMatch = normalizedPath.slice(matchingRoot.length + 1).match(/^skills\/([^/\s]+)\/SKILL\.md$/);
|
|
263
|
+
if (customRootMatch && this.isValidCodexSkillName(customRootMatch[1])) matches.set(normalizedPath, {
|
|
264
|
+
name: customRootMatch[1],
|
|
265
|
+
path: normalizedPath
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
return Array.from(matches.values());
|
|
269
|
+
}
|
|
270
|
+
extractSkillCallsFromItems(items, skillRootPrefixes = [], options = {}) {
|
|
271
|
+
const skillCalls = /* @__PURE__ */ new Map();
|
|
272
|
+
for (const item of items) {
|
|
273
|
+
if (item?.type !== "command_execution") continue;
|
|
274
|
+
if (options.requireSuccessfulCommand && !this.isSuccessfulCommandExecution(item)) continue;
|
|
275
|
+
const command = typeof item.command === "string" && item.command.trim() ? item.command : void 0;
|
|
276
|
+
if (!command) continue;
|
|
277
|
+
for (const skillPath of this.extractSkillPathCandidates(command, skillRootPrefixes)) {
|
|
278
|
+
const existing = skillCalls.get(skillPath.path) ?? {
|
|
279
|
+
name: skillPath.name,
|
|
280
|
+
path: skillPath.path
|
|
281
|
+
};
|
|
282
|
+
skillCalls.set(skillPath.path, existing);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return Array.from(skillCalls.values()).map((skillCall) => ({
|
|
286
|
+
name: skillCall.name,
|
|
287
|
+
path: skillCall.path,
|
|
288
|
+
source: "heuristic"
|
|
289
|
+
}));
|
|
290
|
+
}
|
|
291
|
+
buildSkillMetadata(items, skillRootPrefixes = []) {
|
|
292
|
+
if (!Array.isArray(items) || items.length === 0) return;
|
|
293
|
+
const attemptedSkillCalls = this.extractSkillCallsFromItems(items, skillRootPrefixes);
|
|
294
|
+
const skillCalls = this.extractSkillCallsFromItems(items, skillRootPrefixes, { requireSuccessfulCommand: true });
|
|
295
|
+
if (skillCalls.length === 0 && attemptedSkillCalls.length <= skillCalls.length) return;
|
|
296
|
+
return {
|
|
297
|
+
attemptedSkillCalls,
|
|
298
|
+
skillCalls
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
isSuccessfulCommandExecution(item) {
|
|
302
|
+
if (item?.type !== "command_execution") return false;
|
|
303
|
+
if (typeof item.status === "string" && item.status !== "completed") return false;
|
|
304
|
+
if (typeof item.exit_code === "number" && item.exit_code !== 0) return false;
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
196
307
|
validateWorkingDirectory(workingDir, skipGitCheck = false) {
|
|
197
308
|
let stats;
|
|
198
309
|
try {
|
|
@@ -231,7 +342,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
231
342
|
...config.additional_directories?.length ? { additionalDirectories: config.additional_directories } : {},
|
|
232
343
|
...config.sandbox_mode ? { sandboxMode: config.sandbox_mode } : {},
|
|
233
344
|
...config.model_reasoning_effort ? { modelReasoningEffort: config.model_reasoning_effort } : {},
|
|
234
|
-
...config.network_access_enabled
|
|
345
|
+
...config.network_access_enabled === void 0 ? {} : { networkAccessEnabled: config.network_access_enabled },
|
|
235
346
|
...config.web_search_mode ? { webSearchMode: config.web_search_mode } : {},
|
|
236
347
|
...config.web_search_enabled !== void 0 && !config.web_search_mode ? { webSearchEnabled: config.web_search_enabled } : {},
|
|
237
348
|
...config.approval_policy ? { approvalPolicy: config.approval_policy } : {}
|
|
@@ -260,7 +371,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
260
371
|
if (config.persist_threads && cacheKey) this.threads.set(cacheKey, thread);
|
|
261
372
|
return thread;
|
|
262
373
|
}
|
|
263
|
-
async runStreaming(thread, prompt, runOptions, callOptions) {
|
|
374
|
+
async runStreaming(thread, prompt, runOptions, callOptions, skillRootPrefixes = []) {
|
|
264
375
|
const { events } = await thread.runStreamed(prompt, runOptions);
|
|
265
376
|
const items = [];
|
|
266
377
|
let usage = void 0;
|
|
@@ -339,7 +450,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
339
450
|
}
|
|
340
451
|
});
|
|
341
452
|
}
|
|
342
|
-
const completionAttrs = this.getCompletionAttributesForItem(item);
|
|
453
|
+
const completionAttrs = this.getCompletionAttributesForItem(item, skillRootPrefixes);
|
|
343
454
|
for (const [key, value] of Object.entries(completionAttrs)) span.setAttribute(key, value);
|
|
344
455
|
const durationMs = eventTime - (itemStartTimes.get(itemId) || lastEventTime);
|
|
345
456
|
span.setAttribute("codex.duration_ms", durationMs);
|
|
@@ -368,7 +479,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
368
479
|
const itemId = String(item.id);
|
|
369
480
|
const span = activeSpans.get(itemId);
|
|
370
481
|
if (span) {
|
|
371
|
-
const updatedAttrs = this.getCompletionAttributesForItem(item);
|
|
482
|
+
const updatedAttrs = this.getCompletionAttributesForItem(item, skillRootPrefixes);
|
|
372
483
|
for (const [key, value] of Object.entries(updatedAttrs)) span.setAttribute(key, value);
|
|
373
484
|
}
|
|
374
485
|
}
|
|
@@ -435,6 +546,25 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
435
546
|
/**
|
|
436
547
|
* Get attributes for a Codex item at start
|
|
437
548
|
*/
|
|
549
|
+
getSkillTraceAttributes(item, skillRootPrefixes = [], options = {}) {
|
|
550
|
+
if (item?.type !== "command_execution") return {};
|
|
551
|
+
if (options.requireSuccessfulCommand && !this.isSuccessfulCommandExecution(item)) return {};
|
|
552
|
+
const command = typeof item.command === "string" && item.command.trim() ? item.command : void 0;
|
|
553
|
+
const skillCandidates = /* @__PURE__ */ new Map();
|
|
554
|
+
if (command) for (const skill of this.extractSkillPathCandidates(command, skillRootPrefixes)) skillCandidates.set(skill.path, skill);
|
|
555
|
+
if (skillCandidates.size === 0) return {};
|
|
556
|
+
const skills = Array.from(skillCandidates.values());
|
|
557
|
+
const attrs = {
|
|
558
|
+
"promptfoo.skill.count": skills.length,
|
|
559
|
+
"promptfoo.skill.names": skills.map((skill) => skill.name).join(","),
|
|
560
|
+
"promptfoo.skill.paths": skills.map((skill) => skill.path).join(",")
|
|
561
|
+
};
|
|
562
|
+
if (skills.length === 1) {
|
|
563
|
+
attrs["promptfoo.skill.name"] = skills[0].name;
|
|
564
|
+
attrs["promptfoo.skill.path"] = skills[0].path;
|
|
565
|
+
}
|
|
566
|
+
return attrs;
|
|
567
|
+
}
|
|
438
568
|
getAttributesForItem(item) {
|
|
439
569
|
const attrs = {};
|
|
440
570
|
switch (item.type) {
|
|
@@ -444,6 +574,10 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
444
574
|
case "mcp_tool_call":
|
|
445
575
|
if (typeof item.server === "string") attrs["codex.mcp.server"] = item.server;
|
|
446
576
|
if (typeof item.tool === "string") attrs["codex.mcp.tool"] = item.tool;
|
|
577
|
+
{
|
|
578
|
+
const serializedArgs = this.serializeItemValue(item.arguments ?? item.args ?? item.input);
|
|
579
|
+
if (serializedArgs) attrs["codex.mcp.input"] = serializedArgs;
|
|
580
|
+
}
|
|
447
581
|
break;
|
|
448
582
|
case "web_search":
|
|
449
583
|
if (typeof item.query === "string") attrs["codex.search.query"] = item.query;
|
|
@@ -462,16 +596,40 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
462
596
|
}
|
|
463
597
|
return attrs;
|
|
464
598
|
}
|
|
599
|
+
serializeItemValue(value) {
|
|
600
|
+
if (typeof value === "string") {
|
|
601
|
+
const trimmed = value.trim();
|
|
602
|
+
if (!trimmed) return;
|
|
603
|
+
try {
|
|
604
|
+
return JSON.stringify(this.redactTracePii(sanitizeObject(JSON.parse(trimmed))));
|
|
605
|
+
} catch {
|
|
606
|
+
return this.redactTracePii(sanitizeObject(trimmed, { context: "Codex MCP trace input" }));
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
if (value === void 0 || value === null) return;
|
|
610
|
+
try {
|
|
611
|
+
return JSON.stringify(this.redactTracePii(sanitizeObject(value, { context: "Codex MCP trace input" })));
|
|
612
|
+
} catch {
|
|
613
|
+
return;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
redactTracePii(value) {
|
|
617
|
+
if (typeof value === "string" && /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i.test(value)) return REDACTED;
|
|
618
|
+
if (Array.isArray(value)) return value.map((item) => this.redactTracePii(item));
|
|
619
|
+
if (value && typeof value === "object") return Object.fromEntries(Object.entries(value).map(([key, entryValue]) => [key, normalizeFieldName(key).includes("email") ? REDACTED : this.redactTracePii(entryValue)]));
|
|
620
|
+
return value;
|
|
621
|
+
}
|
|
465
622
|
/**
|
|
466
623
|
* Get attributes for a Codex item at completion
|
|
467
624
|
*/
|
|
468
|
-
getCompletionAttributesForItem(item) {
|
|
625
|
+
getCompletionAttributesForItem(item, skillRootPrefixes = []) {
|
|
469
626
|
const attrs = {};
|
|
470
627
|
switch (item.type) {
|
|
471
628
|
case "command_execution":
|
|
472
629
|
if (typeof item.exit_code === "number") attrs["codex.exit_code"] = item.exit_code;
|
|
473
630
|
if (typeof item.status === "string") attrs["codex.status"] = item.status;
|
|
474
631
|
if (typeof item.aggregated_output === "string") attrs["codex.output"] = item.aggregated_output;
|
|
632
|
+
Object.assign(attrs, this.getSkillTraceAttributes(item, skillRootPrefixes, { requireSuccessfulCommand: true }));
|
|
475
633
|
break;
|
|
476
634
|
case "file_change":
|
|
477
635
|
if (typeof item.status === "string") attrs["codex.status"] = item.status;
|
|
@@ -483,6 +641,10 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
483
641
|
case "mcp_tool_call":
|
|
484
642
|
if (typeof item.status === "string") attrs["codex.status"] = item.status;
|
|
485
643
|
if (typeof item.error?.message === "string") attrs["codex.error"] = item.error.message;
|
|
644
|
+
{
|
|
645
|
+
const serializedArgs = this.serializeItemValue(item.arguments ?? item.args ?? item.input);
|
|
646
|
+
if (serializedArgs) attrs["codex.mcp.input"] = serializedArgs;
|
|
647
|
+
}
|
|
486
648
|
break;
|
|
487
649
|
case "agent_message":
|
|
488
650
|
if (typeof item.text === "string") attrs["codex.message"] = item.text;
|
|
@@ -572,6 +734,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
572
734
|
async callApiInternal(prompt, _context, callOptions, config) {
|
|
573
735
|
const currentTraceparent = getTraceparent();
|
|
574
736
|
const env = this.prepareEnvironment(config, currentTraceparent);
|
|
737
|
+
const skillRootPrefixes = this.getSkillRootPrefixes(env);
|
|
575
738
|
if (!this.apiKey && !env.OPENAI_API_KEY && !env.CODEX_API_KEY) throw new Error("OpenAI API key is not set. Set OPENAI_API_KEY or CODEX_API_KEY environment variable or add \"apiKey\" to provider config.");
|
|
576
739
|
if (config.working_dir) this.validateWorkingDirectory(config.working_dir, config.skip_git_repo_check);
|
|
577
740
|
if (callOptions?.abortSignal?.aborted) return { error: "OpenAI Codex SDK call aborted before it started" };
|
|
@@ -611,9 +774,14 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
611
774
|
if (config.output_schema) runOptions.outputSchema = config.output_schema;
|
|
612
775
|
if (callOptions?.abortSignal) runOptions.signal = callOptions.abortSignal;
|
|
613
776
|
try {
|
|
614
|
-
const turn = config.enable_streaming ? await this.runStreaming(thread, prompt, runOptions, callOptions) : await thread.run(prompt, runOptions);
|
|
777
|
+
const turn = config.enable_streaming ? await this.runStreaming(thread, prompt, runOptions, callOptions, skillRootPrefixes) : await thread.run(prompt, runOptions);
|
|
615
778
|
const output = turn.finalResponse || "";
|
|
616
779
|
const raw = JSON.stringify(turn);
|
|
780
|
+
const skillMetadata = this.buildSkillMetadata(turn.items, skillRootPrefixes);
|
|
781
|
+
const metadata = skillMetadata ? {
|
|
782
|
+
...skillMetadata.skillCalls.length > 0 ? { skillCalls: skillMetadata.skillCalls } : {},
|
|
783
|
+
...skillMetadata.attemptedSkillCalls.length > skillMetadata.skillCalls.length ? { attemptedSkillCalls: skillMetadata.attemptedSkillCalls } : {}
|
|
784
|
+
} : void 0;
|
|
617
785
|
const tokenUsage = turn.usage ? {
|
|
618
786
|
prompt: turn.usage.input_tokens,
|
|
619
787
|
completion: turn.usage.output_tokens,
|
|
@@ -639,6 +807,7 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
639
807
|
output,
|
|
640
808
|
tokenUsage,
|
|
641
809
|
cost,
|
|
810
|
+
metadata,
|
|
642
811
|
raw,
|
|
643
812
|
sessionId: thread.id || "unknown"
|
|
644
813
|
};
|
|
@@ -663,4 +832,4 @@ var OpenAICodexSDKProvider = class OpenAICodexSDKProvider {
|
|
|
663
832
|
//#endregion
|
|
664
833
|
export { OpenAICodexSDKProvider };
|
|
665
834
|
|
|
666
|
-
//# sourceMappingURL=codex-sdk-
|
|
835
|
+
//# sourceMappingURL=codex-sdk-DE5G18dx.js.map
|