promptfoo 0.125.0 → 0.125.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/src/accounts-BOxNYxVN.js +229 -0
- package/dist/src/accounts-BezXLdAW.cjs +276 -0
- package/dist/src/accounts-CPISMNlh.js +227 -0
- package/dist/src/accounts-vJBPs89d.js +222 -0
- package/dist/src/agentWorkspace-Bom7SpF2.js +592 -0
- package/dist/src/agentWorkspace-CEomAcws.cjs +619 -0
- package/dist/src/agentWorkspace-DPtMLrlI.js +593 -0
- package/dist/src/agentWorkspace-DkAeEYLz.js +592 -0
- package/dist/src/agentic-utils-121v7mJo.js +197 -0
- package/dist/src/agentic-utils-CBWD_rcd.cjs +237 -0
- package/dist/src/agentic-utils-D8wyQwPG.js +198 -0
- package/dist/src/agentic-utils-EP1QkQCs.js +197 -0
- package/dist/src/agents-Br3ah8iA.js +778 -0
- package/dist/src/agents-C5wj_UTv.js +777 -0
- package/dist/src/agents-C9Efp4mC.js +266 -0
- package/dist/src/agents-CQYwaVCO.js +267 -0
- package/dist/src/agents-CjCd4Vo8.js +777 -0
- package/dist/src/agents-DRWiCHYz.js +266 -0
- package/dist/src/agents-F2rhx0iL.cjs +266 -0
- package/dist/src/agents-RTYyy69h.cjs +777 -0
- package/dist/src/agents-api-CY72O86e.js +711 -0
- package/dist/src/agents-api-CsSsC21b.js +710 -0
- package/dist/src/agents-api-DN-ibDc8.js +710 -0
- package/dist/src/agents-api-cNDsCCv1.cjs +710 -0
- package/dist/src/ai.studio-Bj6Dyi6o.js +2 -0
- package/dist/src/ai.studio-C-e0LzyW.js +369 -0
- package/dist/src/ai.studio-CR8M6Aqf.cjs +391 -0
- package/dist/src/ai.studio-YKk7F0tv.js +374 -0
- package/dist/src/aimlapi-BGunsuTu.js +30 -0
- package/dist/src/aimlapi-BkzcfBsL.js +29 -0
- package/dist/src/aimlapi-DXFcEdP8.js +28 -0
- package/dist/src/aimlapi-r-8iCcAw.cjs +29 -0
- package/dist/src/anthropicMessages-7-YNRgQR.js +114 -0
- package/dist/src/anthropicMessages-C8m9Whrd.cjs +114 -0
- package/dist/src/anthropicMessages-DS1vXD0f.js +115 -0
- package/dist/src/anthropicMessages-DmvGkz-0.js +114 -0
- package/dist/src/app/assets/index-CrdXWTXm.js +392 -0
- package/dist/src/app/browser-inventory.json +4 -4
- package/dist/src/app/index.html +1 -1
- package/dist/src/audio-BLgFgyw-.cjs +104 -0
- package/dist/src/audio-C2sibT7Q.js +104 -0
- package/dist/src/audio-DXEXb03H.js +104 -0
- package/dist/src/audio-TkvojpwO.js +105 -0
- package/dist/src/authoritativeMarkupInjection-BAT9B-Wj.js +79 -0
- package/dist/src/authoritativeMarkupInjection-B_yHETKT.js +78 -0
- package/dist/src/authoritativeMarkupInjection-BfjecQ3Q.cjs +78 -0
- package/dist/src/authoritativeMarkupInjection-D-hDKrhD.js +78 -0
- package/dist/src/aws-B_9unI_-.js +1149 -0
- package/dist/src/aws-D0FY3qkc.js +2433 -0
- package/dist/src/aws-Dh1-a90n.js +2433 -0
- package/dist/src/aws-qskKGczY.cjs +2454 -0
- package/dist/src/base-CaWlBkVz.js +462 -0
- package/dist/src/base-CcViNwVs.js +255 -0
- package/dist/src/base-CsVbPJkU.cjs +467 -0
- package/dist/src/base-DNK9py25.js +255 -0
- package/dist/src/base-DlH5tjEZ.js +463 -0
- package/dist/src/base-DyLOZ_iX.js +256 -0
- package/dist/src/base-RRYXfG7l.cjs +305 -0
- package/dist/src/base-oXVgvtVn.js +462 -0
- package/dist/src/bedrock-BP17ZXbR.cjs +2 -0
- package/dist/src/bedrock-CsjM1dOt.js +1300 -0
- package/dist/src/bedrock-CzPwj8GO.js +1 -0
- package/dist/src/bedrock-eGXZw8oh.js +1 -0
- package/dist/src/bedrock-tSWjmXdj.js +2 -0
- package/dist/src/bestOfN-BQ93nUKV.js +160 -0
- package/dist/src/bestOfN-ByGGwlcb.cjs +161 -0
- package/dist/src/bestOfN-CbP7csHr.js +159 -0
- package/dist/src/bestOfN-xn6i2Xs2.js +159 -0
- package/dist/src/cache-CHq9hPz9.js +2 -0
- package/dist/src/cache-D-9eZN3I.js +754 -0
- package/dist/src/cache-DSm6t1MZ.js +741 -0
- package/dist/src/cache-DeF5zIEN.js +782 -0
- package/dist/src/cache-iG87oYan.cjs +856 -0
- package/dist/src/cerebras-CTtM4yMH.js +98 -0
- package/dist/src/cerebras-CogcJ3ce.cjs +97 -0
- package/dist/src/cerebras-DmkRypTh.js +97 -0
- package/dist/src/cerebras-GUp0B8JY.js +97 -0
- package/dist/src/chat-B4ihd3fw.js +226 -0
- package/dist/src/chat-B9cAQ_rS.js +227 -0
- package/dist/src/chat-BU7EB4R-.cjs +76 -0
- package/dist/src/chat-C8yxJ2-s.cjs +226 -0
- package/dist/src/chat-ClTFM3qq.js +934 -0
- package/dist/src/chat-Cnq0Is68.js +123 -0
- package/dist/src/chat-CwrurR57.cjs +987 -0
- package/dist/src/chat-D0lsojPv.js +124 -0
- package/dist/src/chat-D7_8yFIx.js +76 -0
- package/dist/src/chat-DCoETlLG.js +226 -0
- package/dist/src/chat-DHE7xaTR.js +76 -0
- package/dist/src/chat-DmhT6rz2.cjs +123 -0
- package/dist/src/chat-DvfMe8KI.js +123 -0
- package/dist/src/chat-DwP5kVnl.js +935 -0
- package/dist/src/chat-MB7U-QE2.js +77 -0
- package/dist/src/chat-zCWuBKAj.js +934 -0
- package/dist/src/claude-agent-sdk-23bIVI75.js +999 -0
- package/dist/src/claude-agent-sdk-BACpnIJi.cjs +1005 -0
- package/dist/src/claude-agent-sdk-BlYlmcEr.js +999 -0
- package/dist/src/claude-agent-sdk-Cr-jqJZl.js +1000 -0
- package/dist/src/client-BktbiPx9.cjs +357 -0
- package/dist/src/client-CjztEBmW.js +351 -0
- package/dist/src/client-mRs2UvH9.js +351 -0
- package/dist/src/client-uCz0ydjC.js +352 -0
- package/dist/src/cloud-BtYF555L.js +2 -0
- package/dist/src/cloud-CVSUEmAy.js +287 -0
- package/dist/src/cloud-D7Ifb-Fl.js +599 -0
- package/dist/src/cloud-DB5oK5NX.cjs +666 -0
- package/dist/src/cloud-ecu989Em.js +657 -0
- package/dist/src/cloud-ramjGURF.js +599 -0
- package/dist/src/cloudflare-ai-BfDkIjO8.js +133 -0
- package/dist/src/cloudflare-ai-D9HaXz1M.js +134 -0
- package/dist/src/cloudflare-ai-HrD5WUK8.js +132 -0
- package/dist/src/cloudflare-ai-Qdj8aKP2.cjs +133 -0
- package/dist/src/cloudflare-gateway-C81uKETQ.js +276 -0
- package/dist/src/cloudflare-gateway-CX5Z9X0k.js +276 -0
- package/dist/src/cloudflare-gateway-DW-og8gb.js +277 -0
- package/dist/src/cloudflare-gateway-iRyXo9n2.cjs +276 -0
- package/dist/src/codex-app-server-BFIrSgdy.js +2155 -0
- package/dist/src/codex-app-server-By1eDVD4.js +2 -0
- package/dist/src/codex-app-server-DKsF4qmY.js +2156 -0
- package/dist/src/codex-app-server-n7n4uZzC.cjs +2162 -0
- package/dist/src/codex-app-server-xAoELVxu.js +2155 -0
- package/dist/src/codex-sdk-C2ZLxa6r.js +1552 -0
- package/dist/src/codex-sdk-CzG02tQt.cjs +1588 -0
- package/dist/src/codex-sdk-DNxAOhiV.js +2 -0
- package/dist/src/codex-sdk-DT3aQezK.js +1557 -0
- package/dist/src/codex-sdk-pw9DpcJP.js +1557 -0
- package/dist/src/codex-security-B0bLmXJF.js +406 -0
- package/dist/src/codex-security-BhYs-3iY.js +406 -0
- package/dist/src/codex-security-DQcOfxYW.js +407 -0
- package/dist/src/codex-security-DsCWr6GZ.cjs +411 -0
- package/dist/src/cometapi-B16asPLX.cjs +55 -0
- package/dist/src/cometapi-MgTbZA_H.js +53 -0
- package/dist/src/cometapi-i33vKzPV.js +55 -0
- package/dist/src/cometapi-wK2UWK0X.js +56 -0
- package/dist/src/compatible-COj8ZCy9.js +24 -0
- package/dist/src/compatible-CRSsIUGb.cjs +24 -0
- package/dist/src/compatible-Dy1vCcNF.js +25 -0
- package/dist/src/compatible-aUItQrpk.js +24 -0
- package/dist/src/completion-Bn7COFMk.js +119 -0
- package/dist/src/completion-Bub2N48b.js +118 -0
- package/dist/src/completion-Cf2G9OlM.cjs +123 -0
- package/dist/src/conversationScoring-BiTYJ9MD.js +374 -0
- package/dist/src/conversationScoring-CKL47uIu.js +373 -0
- package/dist/src/conversationScoring-DCvQKp6k.cjs +398 -0
- package/dist/src/conversationScoring-DLNJtDZI.js +373 -0
- package/dist/src/crescendo-5iLk9WiJ.cjs +734 -0
- package/dist/src/crescendo-B5ylG7kW.js +733 -0
- package/dist/src/crescendo-BD7k6TIx.js +730 -0
- package/dist/src/crescendo-DqO2Ch0P.js +732 -0
- package/dist/src/custom-8rv_aG2K.js +617 -0
- package/dist/src/custom-BOtrIHFN.js +619 -0
- package/dist/src/custom-BvN8seCs.cjs +620 -0
- package/dist/src/custom-Cld9v_Y4.js +618 -0
- package/dist/src/dataUrl-BdHUey2l.cjs +3187 -0
- package/dist/src/dataUrl-DBMifX6C.js +3133 -0
- package/dist/src/dataUrl-DUSr-ZvI.js +2868 -0
- package/dist/src/decisions-CLazADTw.js +516 -0
- package/dist/src/decisions-D5X93awq.js +515 -0
- package/dist/src/decisions-DmaeArEn.js +515 -0
- package/dist/src/decisions-DyQJyHJz.cjs +514 -0
- package/dist/src/docker-C9NYQFeu.js +94 -0
- package/dist/src/docker-CGq3mMol.cjs +94 -0
- package/dist/src/docker-DOm7nmpl.js +95 -0
- package/dist/src/docker-skFN-Kfo.js +93 -0
- package/dist/src/embedding-0UbzkTk9.js +82 -0
- package/dist/src/embedding-DTrSDt7k.cjs +86 -0
- package/dist/src/embedding-j2ORNl5H.js +81 -0
- package/dist/src/envoy-BvS8XTQO.js +60 -0
- package/dist/src/envoy-Cn6Hzw0e.js +60 -0
- package/dist/src/envoy-DC3KWcUY.cjs +60 -0
- package/dist/src/envoy-DetHjo5B.js +61 -0
- package/dist/src/eval-Cer9dPe9.js +1920 -0
- package/dist/src/eval-CytYmI2Z.js +2 -0
- package/dist/src/evalResult-DzOq5wt9.js +1300 -0
- package/dist/src/evaluator-BxCmvGtv.js +10578 -0
- package/dist/src/evaluator-Ct7YDELm.js +2 -0
- package/dist/src/evaluatorHelpers-B_AwIrsl.js +600 -0
- package/dist/src/evaluatorHelpers-D1Tpc7gd.js +601 -0
- package/dist/src/evaluatorHelpers-DRR3rLq0.cjs +622 -0
- package/dist/src/fetch-B5KxZuKu.js +1559 -0
- package/dist/src/fetch-BG_Jl7ty.js +1556 -0
- package/dist/src/fetch-BKlgUg08.cjs +1853 -0
- package/dist/src/fetch-C9Fsja0R.js +2 -0
- package/dist/src/fetch-CM7P8KWA.cjs +14 -0
- package/dist/src/fetch-D0FkIB3G.js +9 -0
- package/dist/src/fetch-RXHsZF-J.js +1280 -0
- package/dist/src/fetch-rSECy8jR.js +10 -0
- package/dist/src/functionCallbackUtils-BB9tmf6a.cjs +262 -0
- package/dist/src/functionCallbackUtils-BXk2iY01.js +246 -0
- package/dist/src/functionCallbackUtils-B_cYp7P5.js +245 -0
- package/dist/src/functionCallbackUtils-BfXnPo0o.js +245 -0
- package/dist/src/gemini-image-BXLMADDz.js +471 -0
- package/dist/src/gemini-image-BYUZyEUx.js +472 -0
- package/dist/src/gemini-image-DSt1QubZ.cjs +471 -0
- package/dist/src/gemini-image-DdNDMiZ_.js +471 -0
- package/dist/src/goat-9b-uU_k6.js +514 -0
- package/dist/src/goat-BCJuiDd0.js +515 -0
- package/dist/src/goat-CmAHbemm.js +512 -0
- package/dist/src/goat-DdOTdyoS.cjs +515 -0
- package/dist/src/goblin-Bp5C5lyb.js +22 -0
- package/dist/src/goblin-Dmr7GItI.js +23 -0
- package/dist/src/goblin-DpM8wxlf.cjs +22 -0
- package/dist/src/goblin-cJyH6Pq-.js +22 -0
- package/dist/src/google-B6eaPAbE.js +142 -0
- package/dist/src/google-D-FStdN6.cjs +142 -0
- package/dist/src/google-DAC7BsCW.js +142 -0
- package/dist/src/google-Id18H0Va.js +143 -0
- package/dist/src/graders-BjNQWkaB.js +2 -0
- package/dist/src/graders-CqdIp_vl.js +15470 -0
- package/dist/src/hydra-6Ouh74DE.js +610 -0
- package/dist/src/hydra-BHjhZnLB.cjs +612 -0
- package/dist/src/hydra-BL6k2REV.js +2 -0
- package/dist/src/hydra-BWUc0o67.js +613 -0
- package/dist/src/hydra-CUkEOLKw.js +612 -0
- package/dist/src/image-B6hG_xhb.js +481 -0
- package/dist/src/image-BFaq7Krd.cjs +209 -0
- package/dist/src/image-Bql5C0N9.cjs +504 -0
- package/dist/src/image-BtZfI2pT.js +163 -0
- package/dist/src/image-CIM4oN7Z.cjs +163 -0
- package/dist/src/image-CbAl7Jpu.js +209 -0
- package/dist/src/image-CiYm_yFw.js +209 -0
- package/dist/src/image-DCMNvBiV.js +163 -0
- package/dist/src/image-DL7pIuUZ.js +210 -0
- package/dist/src/image-ey0kxF8o.js +164 -0
- package/dist/src/image-smgIk3rE.js +482 -0
- package/dist/src/index.cjs +27 -27
- package/dist/src/index.d.cts +8 -8
- package/dist/src/index.js +27 -27
- package/dist/src/indirectWebPwn-B_-UpWY5.js +285 -0
- package/dist/src/indirectWebPwn-Cz3SLiEq.js +434 -0
- package/dist/src/indirectWebPwn-D2s8zGiM.cjs +463 -0
- package/dist/src/indirectWebPwn-DXbj2wGu.cjs +285 -0
- package/dist/src/indirectWebPwn-D_4H44E6.js +285 -0
- package/dist/src/indirectWebPwn-L044SrpV.js +434 -0
- package/dist/src/indirectWebPwn-cnmvdavH.js +435 -0
- package/dist/src/indirectWebPwn-zUBzsqTt.js +286 -0
- package/dist/src/interactions-Bu3oVQ-j.js +850 -0
- package/dist/src/interactions-CND010Lh.cjs +850 -0
- package/dist/src/interactions-DAx7tqUz.js +851 -0
- package/dist/src/interactions-DPkIumeh.js +850 -0
- package/dist/src/iterative-BO4JRnpG.js +545 -0
- package/dist/src/iterative-CAK-k9rz.js +548 -0
- package/dist/src/iterative-CDgHc0xO.cjs +549 -0
- package/dist/src/iterative-CXJlHLl9.js +547 -0
- package/dist/src/iterativeImage-BEdGKSmh.cjs +419 -0
- package/dist/src/iterativeImage-BfL0QZw5.js +417 -0
- package/dist/src/iterativeImage-C9KhnibC.js +417 -0
- package/dist/src/iterativeImage-btjkOfWG.js +418 -0
- package/dist/src/iterativeMeta-B5Bdw6QA.js +437 -0
- package/dist/src/iterativeMeta-C3mI4gpT.js +440 -0
- package/dist/src/iterativeMeta-Co2BKyqS.cjs +439 -0
- package/dist/src/iterativeMeta-DD8ihRWD.js +439 -0
- package/dist/src/iterativeTree-AMi4GV2O.js +878 -0
- package/dist/src/iterativeTree-C8FJOEje.cjs +879 -0
- package/dist/src/iterativeTree-CvrY1f2Z.js +877 -0
- package/dist/src/iterativeTree-bPtESmaD.js +876 -0
- package/dist/src/knowledgeBase-Cf5871e3.js +163 -0
- package/dist/src/knowledgeBase-D2PQhqLH.js +164 -0
- package/dist/src/knowledgeBase-DpoMw1IH.cjs +163 -0
- package/dist/src/knowledgeBase-npGFl763.js +163 -0
- package/dist/src/litellm-BBB5DQdt.cjs +146 -0
- package/dist/src/litellm-Bo43ow7r.js +145 -0
- package/dist/src/litellm-CaU8CMLS.js +146 -0
- package/dist/src/litellm-wY7Unh8o.js +147 -0
- package/dist/src/live-5g2w-M-E.js +891 -0
- package/dist/src/live-BfaXsDyD.cjs +891 -0
- package/dist/src/live-C1xewnGD.js +2 -0
- package/dist/src/live-DaF7nYy5.js +892 -0
- package/dist/src/live-lp3urLUw.js +891 -0
- package/dist/src/luma-ray-B7zvKGVG.js +309 -0
- package/dist/src/luma-ray-DCf5fnrz.cjs +309 -0
- package/dist/src/luma-ray-DepBcn6z.js +309 -0
- package/dist/src/luma-ray-XQC4M1pt.js +310 -0
- package/dist/src/main.js +26 -26
- package/dist/src/mantleChat-7xm95vSV.js +154 -0
- package/dist/src/mantleChat-CXhAs5RD.js +155 -0
- package/dist/src/mantleChat-CcE-zjfj.cjs +154 -0
- package/dist/src/mantleChat-Cpefl7Zm.js +154 -0
- package/dist/src/mcp-B0V0ikdM.js +84 -0
- package/dist/src/mcp-CV2k2gwj.js +85 -0
- package/dist/src/memoryPoisoning-BC5FQQWZ.js +111 -0
- package/dist/src/memoryPoisoning-BDwrtZKX.js +111 -0
- package/dist/src/memoryPoisoning-BFemS_FF.js +112 -0
- package/dist/src/memoryPoisoning-DRs2rbVV.cjs +111 -0
- package/dist/src/messages-Bc5oZoAJ.js +1128 -0
- package/dist/src/messages-BkaH8fRW.js +1127 -0
- package/dist/src/messages-CoHlziS5.js +1127 -0
- package/dist/src/messages-Cv_m6kYs.cjs +1161 -0
- package/dist/src/mischievousUser-BcyFxrqJ.js +51 -0
- package/dist/src/mischievousUser-BlhOQSd2.js +52 -0
- package/dist/src/mischievousUser-BuQiKE8D.js +51 -0
- package/dist/src/mischievousUser-ChIOk6cT.cjs +51 -0
- package/dist/src/modelslab-BXIWBTgX.js +171 -0
- package/dist/src/modelslab-ChVsUiaJ.js +170 -0
- package/dist/src/modelslab-DZ6BFlDv.js +170 -0
- package/dist/src/modelslab-DhRr-vyo.cjs +170 -0
- package/dist/src/nova-reel-BL8DrN4_.js +272 -0
- package/dist/src/nova-reel-BiOMUm5q.cjs +272 -0
- package/dist/src/nova-reel-CTsya1hV.js +273 -0
- package/dist/src/nova-reel-kgBY4Svd.js +272 -0
- package/dist/src/nova-sonic-CaSSA3Jq.cjs +374 -0
- package/dist/src/nova-sonic-DLpmoGsR.js +375 -0
- package/dist/src/nova-sonic-DwWc4SoN.js +374 -0
- package/dist/src/nova-sonic-qnReTaXm.js +374 -0
- package/dist/src/novita-B5mAt3Ui.js +114 -0
- package/dist/src/novita-D57vCjDD.js +116 -0
- package/dist/src/novita-ITRtG8IJ.js +115 -0
- package/dist/src/novita-Rh3T13YO.cjs +115 -0
- package/dist/src/nscale-8V7iZ_pI.js +210 -0
- package/dist/src/nscale-BQnMv4pH.cjs +209 -0
- package/dist/src/nscale-BWZXHZVF.js +209 -0
- package/dist/src/nscale-BqrHiUqU.js +207 -0
- package/dist/src/openaiResponses-BMtGTu8R.js +317 -0
- package/dist/src/openaiResponses-CvcI_viE.js +318 -0
- package/dist/src/openaiResponses-DYPZEMX1.cjs +318 -0
- package/dist/src/openaiResponses-DZTg1-kb.js +319 -0
- package/dist/src/openclaw-BeKuig4g.js +1338 -0
- package/dist/src/openclaw-COkdQ83y.js +1337 -0
- package/dist/src/openclaw-CSoX_HQ5.cjs +1344 -0
- package/dist/src/openclaw-DJlhPGCb.js +1336 -0
- package/dist/src/opencode-sdk-BEJftEs6.cjs +1018 -0
- package/dist/src/opencode-sdk-DMvBB3V7.js +1013 -0
- package/dist/src/opencode-sdk-Df7hMjLO.js +1012 -0
- package/dist/src/opencode-sdk-bQp5Xf3W.js +1012 -0
- package/dist/src/openinterpreter-B3GgVZjK.js +431 -0
- package/dist/src/openinterpreter-BiGcU-HN.cjs +435 -0
- package/dist/src/openinterpreter-Buj2l3Eh.js +432 -0
- package/dist/src/openinterpreter-C3_Cg5b_.js +431 -0
- package/dist/src/pricing-0Pampf0q.cjs +999 -0
- package/dist/src/pricing-B8VdhEhY.js +976 -0
- package/dist/src/pricing-CtLA-rKA.js +976 -0
- package/dist/src/promptfoo-4OkHtH9P.cjs +341 -0
- package/dist/src/promptfoo-Bhpm7sH6.js +286 -0
- package/dist/src/promptfoo-BqV8ogVA.js +285 -0
- package/dist/src/promptfoo-S1Q9OHk_.js +286 -0
- package/dist/src/providers-B5zs1ZRv.js +24437 -0
- package/dist/src/providers-Cd6CJh6m.js +2 -0
- package/dist/src/providers-CpJlgHET.js +24039 -0
- package/dist/src/providers-CzvLvK6G.cjs +24180 -0
- package/dist/src/quiverai-1E_IvLHn.js +325 -0
- package/dist/src/quiverai-BXH004Vv.js +325 -0
- package/dist/src/quiverai-Ccya2z8Y.cjs +325 -0
- package/dist/src/quiverai-Cez57oe-.js +326 -0
- package/dist/src/registry-3zX_M9Ik.js +131 -0
- package/dist/src/registry-AuCrKTvS.js +132 -0
- package/dist/src/registry-CxXWKtQG.js +131 -0
- package/dist/src/registry-DG3o66JQ.cjs +131 -0
- package/dist/src/remoteGeneration-CAtvamG6.js +370 -0
- package/dist/src/remoteGeneration-CF225pDl.cjs +482 -0
- package/dist/src/remoteGeneration-DtnqocnL.js +370 -0
- package/dist/src/remoteGeneration-g3KvW-sP.js +371 -0
- package/dist/src/responses-BMbaUXQI.js +1098 -0
- package/dist/src/responses-B_TOSof-.js +1099 -0
- package/dist/src/responses-v-yANwTA.cjs +1109 -0
- package/dist/src/runtimeTransform-BBZv-oUZ.js +156 -0
- package/dist/src/runtimeTransform-DT2v5ovW.js +156 -0
- package/dist/src/runtimeTransform-GXXEIXdS.cjs +161 -0
- package/dist/src/runtimeTransform-JTwBQc-P.js +157 -0
- package/dist/src/sagemaker-B8D0L4rj.cjs +716 -0
- package/dist/src/sagemaker-CR2_AGdB.js +713 -0
- package/dist/src/sagemaker-Cd9qSQUV.js +714 -0
- package/dist/src/sagemaker-mKlltN4p.js +713 -0
- package/dist/src/scanner-PG_8lh8r.js +1971 -0
- package/dist/src/server/index.js +55 -55
- package/dist/src/server-Bmh7sd9F.js +155 -0
- package/dist/src/server-C7b8z6aC.js +63 -0
- package/dist/src/server-CAcovgtL.js +2 -0
- package/dist/src/server-CuuMfKlh.cjs +74 -0
- package/dist/src/server-DMPCj9jy.js +189 -0
- package/dist/src/session-BksXvRH_.cjs +69 -0
- package/dist/src/session-DOxUjqGQ.js +63 -0
- package/dist/src/session-Dujsc-b9.js +62 -0
- package/dist/src/session-VjtIxREd.js +62 -0
- package/dist/src/shared-Bkyz_7e5.cjs +2185 -0
- package/dist/src/shared-DDJg8ycC.js +1929 -0
- package/dist/src/shared-Dh3yfRBd.js +1927 -0
- package/dist/src/shared-tfPT8Tna.js +1928 -0
- package/dist/src/simulatedUser-6JdkyL3k.cjs +252 -0
- package/dist/src/simulatedUser-CFr2mr3M.js +248 -0
- package/dist/src/simulatedUser-DjwwUqx-.js +247 -0
- package/dist/src/slack-C_gIYiUs.js +144 -0
- package/dist/src/slack-DhNbz9CM.cjs +144 -0
- package/dist/src/slack-Dm2iI1zu.js +145 -0
- package/dist/src/strategies-BIY-bNul.js +2248 -0
- package/dist/src/strategies-C1KQQj9G.cjs +2420 -0
- package/dist/src/strategies-DM_3mReG.js +2385 -0
- package/dist/src/telemetry-BhMTibZO.js +2 -0
- package/dist/src/telemetry-C04d25BM.cjs +216 -0
- package/dist/src/telemetry-CIqy4fSC.js +201 -0
- package/dist/src/telemetry-CXozp_6C.js +205 -0
- package/dist/src/telemetry-g7PkBxmY.js +205 -0
- package/dist/src/togetherai-BvCim68-.js +50 -0
- package/dist/src/togetherai-CWyDCA9m.cjs +49 -0
- package/dist/src/togetherai-CeSE31vK.js +49 -0
- package/dist/src/togetherai-_2W0URf8.js +48 -0
- package/dist/src/traceContext-Brw3Oe41.js +1016 -0
- package/dist/src/traceContext-DpAYv27G.js +1015 -0
- package/dist/src/traceContext-KSqhzZI2.cjs +1032 -0
- package/dist/src/transcription-BySopazW.js +175 -0
- package/dist/src/transcription-DO4UPkRI.cjs +178 -0
- package/dist/src/transcription-RJGBa-pC.js +176 -0
- package/dist/src/transcription-fZenF3G5.js +175 -0
- package/dist/src/transform-BzhRc5z2.js +125 -0
- package/dist/src/transform-CPQu05u6.cjs +154 -0
- package/dist/src/transform-DAED8imp.js +126 -0
- package/dist/src/transform-DIOIQDmM.js +125 -0
- package/dist/src/typesafe-ByE0Kxfg.js +253 -0
- package/dist/src/typesafe-CFqGFY34.js +253 -0
- package/dist/src/typesafe-DCWIw-CP.cjs +253 -0
- package/dist/src/typesafe-DyHFV5Qk.js +254 -0
- package/dist/src/util-BHkj9joz.js +2049 -0
- package/dist/src/util-CICwIpmu.cjs +934 -0
- package/dist/src/util-CePiY2xZ.js +286 -0
- package/dist/src/util-CgT3uf4p.js +743 -0
- package/dist/src/util-Cj9drvOY.js +1770 -0
- package/dist/src/util-ClJRjlQA.cjs +357 -0
- package/dist/src/util-Cxf8VF2M.js +395 -0
- package/dist/src/util-D7RdV7rS.js +395 -0
- package/dist/src/util-DMNFhk47.js +351 -0
- package/dist/src/util-DNzh3M0z.js +396 -0
- package/dist/src/util-Df7rfMGb.cjs +2305 -0
- package/dist/src/util-Kf0KnG_6.js +2051 -0
- package/dist/src/util-LEbeiYw_.js +743 -0
- package/dist/src/util-WH8CgVs4.js +352 -0
- package/dist/src/util-cx6Xw8Lw.cjs +478 -0
- package/dist/src/util-qzBqirBH.js +2050 -0
- package/dist/src/vertex-CBAMfRz3.js +854 -0
- package/dist/src/vertex-CMP2IpN9.js +2 -0
- package/dist/src/vertex-CZ5YOotT.js +848 -0
- package/dist/src/vertex-DNsh1F1M.cjs +871 -0
- package/dist/src/vertexLive-BTXYj3-F.js +55 -0
- package/dist/src/vertexLive-Ba_LAqEF.cjs +55 -0
- package/dist/src/vertexLive-DM4sFaaj.js +56 -0
- package/dist/src/vertexLive-JqZOw7HC.js +55 -0
- package/dist/src/video-BY7Q2Gii.cjs +706 -0
- package/dist/src/video-CYElP-CK.js +703 -0
- package/dist/src/video-C_AdEDH0.js +702 -0
- package/dist/src/video-DGvjQ_4j.js +702 -0
- package/package.json +1 -1
- package/dist/src/accounts-Dpb43yde.cjs +0 -276
- package/dist/src/accounts-GKrO1olH.js +0 -229
- package/dist/src/accounts-e4FGOsji.js +0 -227
- package/dist/src/accounts-sUiEJfkB.js +0 -222
- package/dist/src/agentWorkspace-B8A_wuMR.cjs +0 -619
- package/dist/src/agentWorkspace-DSPIscXR.js +0 -593
- package/dist/src/agentWorkspace-DxUqd-XK.js +0 -592
- package/dist/src/agentWorkspace-n0uOJXhD.js +0 -592
- package/dist/src/agentic-utils-9bCj4twQ.js +0 -197
- package/dist/src/agentic-utils-CyCLuLoj.js +0 -197
- package/dist/src/agentic-utils-D23qtOlx.cjs +0 -237
- package/dist/src/agentic-utils-DuBMMNCw.js +0 -198
- package/dist/src/agents-6hDRNoYD.js +0 -777
- package/dist/src/agents-B8w2o7Sc.cjs +0 -777
- package/dist/src/agents-Ck0NXl7v.js +0 -777
- package/dist/src/agents-CwT3B1qB.js +0 -778
- package/dist/src/agents-DOLjfOEq.js +0 -266
- package/dist/src/agents-OcF9hq--.js +0 -267
- package/dist/src/agents-api-CnZZt8bn.cjs +0 -710
- package/dist/src/agents-api-D04u3bmL.js +0 -711
- package/dist/src/agents-api-DWw0_Vio.js +0 -710
- package/dist/src/agents-api-IWHEwp8i.js +0 -710
- package/dist/src/agents-mHt2Mh9O.cjs +0 -266
- package/dist/src/agents-sICccZCA.js +0 -266
- package/dist/src/ai.studio-Ci4rypDT.js +0 -2
- package/dist/src/ai.studio-KkQ6KaHa.js +0 -369
- package/dist/src/ai.studio-gSXK2cGI.js +0 -374
- package/dist/src/ai.studio-nQF_B4DH.cjs +0 -391
- package/dist/src/aimlapi-BeSk5BDV.js +0 -30
- package/dist/src/aimlapi-CzNUhdKu.cjs +0 -29
- package/dist/src/aimlapi-DCkazDPI.js +0 -29
- package/dist/src/aimlapi-WeH5B6K1.js +0 -28
- package/dist/src/anthropicMessages-AcNWTpYO.js +0 -115
- package/dist/src/anthropicMessages-BUtvzbpL.js +0 -114
- package/dist/src/anthropicMessages-DTWhZDCd.js +0 -114
- package/dist/src/anthropicMessages-lGVnSgyx.cjs +0 -114
- package/dist/src/app/assets/index-CyEI5aDN.js +0 -392
- package/dist/src/audio-BE_Duiu1.js +0 -104
- package/dist/src/audio-CiUd00k2.cjs +0 -104
- package/dist/src/audio-Dop6omna.js +0 -105
- package/dist/src/audio-EZNTInr_.js +0 -104
- package/dist/src/authoritativeMarkupInjection-BUqH6hNk.js +0 -78
- package/dist/src/authoritativeMarkupInjection-BmbJdJO0.cjs +0 -78
- package/dist/src/authoritativeMarkupInjection-Cpz12Y3w.js +0 -78
- package/dist/src/authoritativeMarkupInjection-W4XfcH91.js +0 -79
- package/dist/src/aws-B2Jqbnet.js +0 -2433
- package/dist/src/aws-DHtuUIzQ.js +0 -1149
- package/dist/src/aws-DLqXP6wY.js +0 -2433
- package/dist/src/aws-DfduhmwL.cjs +0 -2454
- package/dist/src/base-B9L2Xvpc.js +0 -255
- package/dist/src/base-BTZnIsuH.cjs +0 -305
- package/dist/src/base-BhaWNQPJ.js +0 -462
- package/dist/src/base-Br-G_Xou.js +0 -256
- package/dist/src/base-Bzo8hiUS.cjs +0 -467
- package/dist/src/base-C82fd2jq.js +0 -463
- package/dist/src/base-CRdQwC1W.js +0 -462
- package/dist/src/base-CjGwZNOQ.js +0 -255
- package/dist/src/bedrock-BdMru_ro.js +0 -1300
- package/dist/src/bedrock-CBUmfLX1.cjs +0 -2
- package/dist/src/bedrock-DBDxBaF9.js +0 -2
- package/dist/src/bedrock-DDrECM21.js +0 -1
- package/dist/src/bedrock-DVwkgvRS.js +0 -1
- package/dist/src/bestOfN-AKF5beq4.js +0 -159
- package/dist/src/bestOfN-C1UIVGJV.js +0 -160
- package/dist/src/bestOfN-DlkETbXy.cjs +0 -161
- package/dist/src/bestOfN-XIfEgU-g.js +0 -159
- package/dist/src/cache-BZaVoKaA.js +0 -2
- package/dist/src/cache-CEYhFUsH.js +0 -741
- package/dist/src/cache-Cbw1zH6q.js +0 -782
- package/dist/src/cache-CdaZNb75.js +0 -754
- package/dist/src/cache-DpuIzPxh.cjs +0 -856
- package/dist/src/cerebras-Bpn6FPkJ.js +0 -97
- package/dist/src/cerebras-CqJ0BRCJ.cjs +0 -97
- package/dist/src/cerebras-D4ILa_TY.js +0 -97
- package/dist/src/cerebras-DR8uc7ee.js +0 -98
- package/dist/src/chat-B7PZfaYp.cjs +0 -987
- package/dist/src/chat-BVuSjdEb.js +0 -227
- package/dist/src/chat-BsaZRjXN.js +0 -76
- package/dist/src/chat-C5liqe3Y.js +0 -226
- package/dist/src/chat-C9hyHf5B.js +0 -124
- package/dist/src/chat-CFLalAck.js +0 -226
- package/dist/src/chat-CN8JGrHu.js +0 -76
- package/dist/src/chat-CaHBBpCb.js +0 -123
- package/dist/src/chat-CcbLSghx.js +0 -123
- package/dist/src/chat-CoSN6sr2.js +0 -934
- package/dist/src/chat-CsJRFX8a.cjs +0 -226
- package/dist/src/chat-DFoZLvO_.js +0 -934
- package/dist/src/chat-DiLQvL7r.js +0 -77
- package/dist/src/chat-F6qVSDk3.cjs +0 -123
- package/dist/src/chat-Oq4FaJgI.cjs +0 -76
- package/dist/src/chat-knMfQUKz.js +0 -935
- package/dist/src/claude-agent-sdk-CJkOLpnI.js +0 -999
- package/dist/src/claude-agent-sdk-Ckn76PRD.js +0 -999
- package/dist/src/claude-agent-sdk-DX0gTr11.cjs +0 -1005
- package/dist/src/claude-agent-sdk-LMeikxoR.js +0 -1000
- package/dist/src/client-BFf1r6Z8.js +0 -352
- package/dist/src/client-CdXyDdDi.js +0 -351
- package/dist/src/client-DV8XMu7i.js +0 -351
- package/dist/src/client-iEXtOBKW.cjs +0 -357
- package/dist/src/cloud-B02qcpjf.js +0 -2
- package/dist/src/cloud-BlHP-g1v.cjs +0 -666
- package/dist/src/cloud-C9BI4isF.js +0 -287
- package/dist/src/cloud-CTTLNdvj.js +0 -657
- package/dist/src/cloud-D5X5yQ_d.js +0 -599
- package/dist/src/cloud-QxPkpsHA.js +0 -599
- package/dist/src/cloudflare-ai-DRTRT1fc.js +0 -132
- package/dist/src/cloudflare-ai-DgaXapAV.cjs +0 -133
- package/dist/src/cloudflare-ai-DkuJXijS.js +0 -134
- package/dist/src/cloudflare-ai-wy9QCHku.js +0 -133
- package/dist/src/cloudflare-gateway-9cAN8g29.cjs +0 -276
- package/dist/src/cloudflare-gateway-BVFMD292.js +0 -277
- package/dist/src/cloudflare-gateway-BuUI4p6I.js +0 -276
- package/dist/src/cloudflare-gateway-TlYHizbW.js +0 -276
- package/dist/src/codex-app-server-BPz_feug.cjs +0 -2162
- package/dist/src/codex-app-server-C9noXM9C.js +0 -2155
- package/dist/src/codex-app-server-CEmD-Y5U.js +0 -2
- package/dist/src/codex-app-server-DZolc18r.js +0 -2156
- package/dist/src/codex-app-server-Dd0A37nO.js +0 -2155
- package/dist/src/codex-sdk-BbxjBvBk.cjs +0 -1588
- package/dist/src/codex-sdk-BpXeIs-_.js +0 -1557
- package/dist/src/codex-sdk-BtQp5X0f.js +0 -1552
- package/dist/src/codex-sdk-CH0v9Bk1.js +0 -2
- package/dist/src/codex-sdk-CgrN7JB8.js +0 -1557
- package/dist/src/codex-security-B5fENNUr.js +0 -406
- package/dist/src/codex-security-C6uuJx-y.cjs +0 -411
- package/dist/src/codex-security-CifWtZR_.js +0 -407
- package/dist/src/codex-security-Kg2bOEKy.js +0 -406
- package/dist/src/cometapi-BFpIDLIx.js +0 -55
- package/dist/src/cometapi-C6O2PIrN.js +0 -56
- package/dist/src/cometapi-D5Yupc6F.js +0 -53
- package/dist/src/cometapi-DzgIwJzJ.cjs +0 -55
- package/dist/src/compatible-0jhmVfOp.js +0 -25
- package/dist/src/compatible-DdtwWdJi.cjs +0 -24
- package/dist/src/compatible-Di4nR3sU.js +0 -24
- package/dist/src/compatible-iJKLWdnf.js +0 -24
- package/dist/src/completion-B0_hVUDG.js +0 -119
- package/dist/src/completion-BdI6v0-Q.cjs +0 -123
- package/dist/src/completion-CWcJscwv.js +0 -118
- package/dist/src/conversationScoring-99EOPJRa.js +0 -373
- package/dist/src/conversationScoring-BIq4J0Cq.js +0 -374
- package/dist/src/conversationScoring-DARyeATr.cjs +0 -398
- package/dist/src/conversationScoring-DS48t4Hb.js +0 -373
- package/dist/src/crescendo-CebvXIu4.js +0 -730
- package/dist/src/crescendo-CxrLS0oo.js +0 -732
- package/dist/src/crescendo-DZQXBSkj.js +0 -733
- package/dist/src/crescendo-wjEx68uD.cjs +0 -734
- package/dist/src/custom-BiQ-aUNw.cjs +0 -620
- package/dist/src/custom-ByyB5Z93.js +0 -619
- package/dist/src/custom-C5jOevNb.js +0 -617
- package/dist/src/custom-CCrsCz8o.js +0 -618
- package/dist/src/dataUrl-C9J7wz9H.js +0 -3133
- package/dist/src/dataUrl-CGsBT7UZ.cjs +0 -3187
- package/dist/src/dataUrl-CzKvvWNO.js +0 -2868
- package/dist/src/decisions-BTusXCUx.cjs +0 -514
- package/dist/src/decisions-BYtL9edD.js +0 -515
- package/dist/src/decisions-jYix_gCF.js +0 -515
- package/dist/src/decisions-nxxfHRAN.js +0 -516
- package/dist/src/docker-DDIv4zkg.js +0 -93
- package/dist/src/docker-DVLp_5OG.js +0 -94
- package/dist/src/docker-INm9w0SY.cjs +0 -94
- package/dist/src/docker-sGuoCul_.js +0 -95
- package/dist/src/embedding-CAhqLLrR.js +0 -82
- package/dist/src/embedding-D94GAsti.cjs +0 -86
- package/dist/src/embedding-zb4MAzQy.js +0 -81
- package/dist/src/envoy-BMPszwEa.cjs +0 -60
- package/dist/src/envoy-Bp-s39_8.js +0 -60
- package/dist/src/envoy-BswDt-Ou.js +0 -61
- package/dist/src/envoy-rVbYcV80.js +0 -60
- package/dist/src/eval-B1-XfrC7.js +0 -2
- package/dist/src/eval-pC4qCvLw.js +0 -1920
- package/dist/src/evalResult-CzjCb5bd.js +0 -1300
- package/dist/src/evaluator-CNq2K7J_.js +0 -10578
- package/dist/src/evaluator-LtfxdxEu.js +0 -2
- package/dist/src/evaluatorHelpers-C5J0NYpQ.js +0 -601
- package/dist/src/evaluatorHelpers-DcdCglCs.cjs +0 -622
- package/dist/src/evaluatorHelpers-Rvb88W6B.js +0 -600
- package/dist/src/fetch-5HtnNhHg.js +0 -1556
- package/dist/src/fetch-BCwjoIFd.js +0 -1559
- package/dist/src/fetch-BhfUnKen.js +0 -1280
- package/dist/src/fetch-C08w4vVl.js +0 -9
- package/dist/src/fetch-DBxy8Tlb.cjs +0 -14
- package/dist/src/fetch-DYte6oQX.cjs +0 -1853
- package/dist/src/fetch-ElpfcAVG.js +0 -10
- package/dist/src/fetch-lM1OIaSt.js +0 -2
- package/dist/src/functionCallbackUtils-BCAdWfHO.js +0 -246
- package/dist/src/functionCallbackUtils-BYq9qOhG.js +0 -245
- package/dist/src/functionCallbackUtils-ByWkmVud.cjs +0 -262
- package/dist/src/functionCallbackUtils-D_C_JaFd.js +0 -245
- package/dist/src/gemini-image-CAlwaJhZ.js +0 -471
- package/dist/src/gemini-image-DJoVoOnZ.cjs +0 -471
- package/dist/src/gemini-image-Waio-9Xx.js +0 -472
- package/dist/src/gemini-image-vbY6Ftbf.js +0 -471
- package/dist/src/goat-BWbtyY9c.js +0 -512
- package/dist/src/goat-CXzzeCOQ.cjs +0 -515
- package/dist/src/goat-CfgvzSgZ.js +0 -514
- package/dist/src/goat-DLeoIHBp.js +0 -515
- package/dist/src/goblin-CmfCfwqk.cjs +0 -22
- package/dist/src/goblin-CtcaORRH.js +0 -22
- package/dist/src/goblin-DF6DDhM-.js +0 -22
- package/dist/src/goblin-Nai0xxBV.js +0 -23
- package/dist/src/google-ClpkLtKL.cjs +0 -142
- package/dist/src/google-CrFgKu9k.js +0 -143
- package/dist/src/google-Dj_EIBqS.js +0 -142
- package/dist/src/google-e4-vARv6.js +0 -142
- package/dist/src/graders-BN1IIa71.js +0 -15470
- package/dist/src/graders-C5sCfSP5.js +0 -2
- package/dist/src/hydra-B7RfXVBK.js +0 -2
- package/dist/src/hydra-C1cFN-Jg.js +0 -613
- package/dist/src/hydra-CK6Uc1ia.js +0 -612
- package/dist/src/hydra-Dg65rAP_.js +0 -610
- package/dist/src/hydra-Fqx8l_Xu.cjs +0 -612
- package/dist/src/image-BdlUDAtp.js +0 -163
- package/dist/src/image-C-KwEhwt.cjs +0 -163
- package/dist/src/image-C76fp6NK.cjs +0 -209
- package/dist/src/image-D75ehv3D.js +0 -482
- package/dist/src/image-DKtc5v5W.js +0 -209
- package/dist/src/image-DT_xOkJY.js +0 -163
- package/dist/src/image-DVpdllEE.js +0 -209
- package/dist/src/image-DXZ8AzMf.js +0 -481
- package/dist/src/image-DZl_1mvy.js +0 -164
- package/dist/src/image-DcTD7Ak0.cjs +0 -504
- package/dist/src/image-ndxEvBKB.js +0 -210
- package/dist/src/indirectWebPwn-70WA5x_q.js +0 -435
- package/dist/src/indirectWebPwn-BRVyd3qV.cjs +0 -463
- package/dist/src/indirectWebPwn-BsJVsu0q.js +0 -285
- package/dist/src/indirectWebPwn-Cw6yJu0i.js +0 -285
- package/dist/src/indirectWebPwn-D-PhJzo4.js +0 -286
- package/dist/src/indirectWebPwn-DRPHt2I8.js +0 -434
- package/dist/src/indirectWebPwn-DXtfFhd9.cjs +0 -285
- package/dist/src/indirectWebPwn-DvpNouzc.js +0 -434
- package/dist/src/interactions-5ixfW7Cl.js +0 -850
- package/dist/src/interactions-BOUzfmg1.cjs +0 -850
- package/dist/src/interactions-CSSXcGNc.js +0 -851
- package/dist/src/interactions-WB_sgkN0.js +0 -850
- package/dist/src/iterative-BShRNqjC.cjs +0 -549
- package/dist/src/iterative-BcW_ELtB.js +0 -548
- package/dist/src/iterative-BpHbHz8B.js +0 -547
- package/dist/src/iterative-YcchP12d.js +0 -545
- package/dist/src/iterativeImage-BMFE5Hl7.cjs +0 -419
- package/dist/src/iterativeImage-CkSaYLMY.js +0 -417
- package/dist/src/iterativeImage-DAEUlQX_.js +0 -418
- package/dist/src/iterativeImage-DeUSkEnj.js +0 -417
- package/dist/src/iterativeMeta-DbdaKdEO.cjs +0 -439
- package/dist/src/iterativeMeta-DcF9JWEK.js +0 -437
- package/dist/src/iterativeMeta-DkfPqWIC.js +0 -439
- package/dist/src/iterativeMeta-DkrpnVSs.js +0 -440
- package/dist/src/iterativeTree-CEMY1FhE.cjs +0 -879
- package/dist/src/iterativeTree-Cv5W4tX9.js +0 -877
- package/dist/src/iterativeTree-DGvomd3M.js +0 -876
- package/dist/src/iterativeTree-KbtC2Mkz.js +0 -878
- package/dist/src/knowledgeBase-AYRXn4wO.js +0 -163
- package/dist/src/knowledgeBase-BNqQfx01.js +0 -163
- package/dist/src/knowledgeBase-C0IaCCVs.js +0 -164
- package/dist/src/knowledgeBase-C2uj6wK4.cjs +0 -163
- package/dist/src/litellm-CN1ScAwZ.js +0 -147
- package/dist/src/litellm-CTjwiKSa.js +0 -146
- package/dist/src/litellm-Cd4Nj5ue.js +0 -145
- package/dist/src/litellm-DMqLpEBg.cjs +0 -146
- package/dist/src/live-Bt50-InO.cjs +0 -891
- package/dist/src/live-Bu2ujadG.js +0 -2
- package/dist/src/live-C3M52i3p.js +0 -891
- package/dist/src/live-CRfHMO3B.js +0 -892
- package/dist/src/live-iCIpO14m.js +0 -891
- package/dist/src/luma-ray-B8eHC4c8.cjs +0 -309
- package/dist/src/luma-ray-BIvkPw0s.js +0 -309
- package/dist/src/luma-ray-ChsiBxMA.js +0 -309
- package/dist/src/luma-ray-DAvKrInz.js +0 -310
- package/dist/src/mantleChat-5YeEXAZI.js +0 -154
- package/dist/src/mantleChat-D--mW3hl.js +0 -154
- package/dist/src/mantleChat-DHP3siNg.cjs +0 -154
- package/dist/src/mantleChat-wBfAX46o.js +0 -155
- package/dist/src/mcp-49jlEcTQ.js +0 -85
- package/dist/src/mcp-__PIz81I.js +0 -84
- package/dist/src/memoryPoisoning-Chxge74M.js +0 -111
- package/dist/src/memoryPoisoning-QH6NCUVE.js +0 -112
- package/dist/src/memoryPoisoning-tCxZt8Nz.js +0 -111
- package/dist/src/memoryPoisoning-ymrRItRR.cjs +0 -111
- package/dist/src/messages-BE_eZ7NA.js +0 -1127
- package/dist/src/messages-Bo638ShI.js +0 -1127
- package/dist/src/messages-BzR0-NQ1.js +0 -1128
- package/dist/src/messages-Cbg5Pfd0.cjs +0 -1161
- package/dist/src/mischievousUser-BtED2Z5Z.cjs +0 -51
- package/dist/src/mischievousUser-KqSOjrDJ.js +0 -51
- package/dist/src/mischievousUser-YMD41YNZ.js +0 -51
- package/dist/src/mischievousUser-zBxlNdCu.js +0 -52
- package/dist/src/modelslab-B8gZxtfE.js +0 -171
- package/dist/src/modelslab-C7bmVpTB.js +0 -170
- package/dist/src/modelslab-CCeQCTZg.js +0 -170
- package/dist/src/modelslab-CvBJGv7y.cjs +0 -170
- package/dist/src/nova-reel-BOEWsEKA.cjs +0 -272
- package/dist/src/nova-reel-BtyBXq5M.js +0 -273
- package/dist/src/nova-reel-C1eF3-EE.js +0 -272
- package/dist/src/nova-reel-YhgrxEKT.js +0 -272
- package/dist/src/nova-sonic-BaERP20w.js +0 -374
- package/dist/src/nova-sonic-CxgM3O-P.cjs +0 -374
- package/dist/src/nova-sonic-DJS22fC3.js +0 -375
- package/dist/src/nova-sonic-DwvwHyRX.js +0 -374
- package/dist/src/novita-D1l2tG0O.js +0 -116
- package/dist/src/novita-D84VM3v0.cjs +0 -115
- package/dist/src/novita-DGInvwfR.js +0 -115
- package/dist/src/novita-vXHkXhTg.js +0 -114
- package/dist/src/nscale-CU0Ldr00.js +0 -209
- package/dist/src/nscale-ClfKlQeM.cjs +0 -209
- package/dist/src/nscale-DxaVnF0x.js +0 -210
- package/dist/src/nscale-_poVxIrO.js +0 -207
- package/dist/src/openaiResponses-CJGsneNj.js +0 -317
- package/dist/src/openaiResponses-CKSl5Sdg.js +0 -319
- package/dist/src/openaiResponses-DC8rzFUc.js +0 -318
- package/dist/src/openaiResponses-rMHIA3dV.cjs +0 -318
- package/dist/src/openclaw-CCbvsNFW.cjs +0 -1344
- package/dist/src/openclaw-CZw1lCDZ.js +0 -1336
- package/dist/src/openclaw-ChFLgC-a.js +0 -1338
- package/dist/src/openclaw-DrPMoRrH.js +0 -1337
- package/dist/src/opencode-sdk-2EfIDhFp.cjs +0 -1018
- package/dist/src/opencode-sdk-CHw3F845.js +0 -1013
- package/dist/src/opencode-sdk-D0EGGxvy.js +0 -1012
- package/dist/src/opencode-sdk-jSS7NI2Q.js +0 -1012
- package/dist/src/openinterpreter-CY622xHC.js +0 -431
- package/dist/src/openinterpreter-DATyhuhP.js +0 -432
- package/dist/src/openinterpreter-DDUMyIf1.js +0 -431
- package/dist/src/openinterpreter-s5Tz6Lid.cjs +0 -435
- package/dist/src/pricing-C498twd2.js +0 -976
- package/dist/src/pricing-DBd_bMIh.cjs +0 -999
- package/dist/src/pricing-ISrMCskv.js +0 -976
- package/dist/src/promptfoo-6p0WG2ih.js +0 -286
- package/dist/src/promptfoo-BQRfgNs_.js +0 -285
- package/dist/src/promptfoo-Bqo88z20.cjs +0 -341
- package/dist/src/promptfoo-Cq5AVI3I.js +0 -286
- package/dist/src/providers-ATbeMX5E.cjs +0 -24180
- package/dist/src/providers-B7F1FiNI.js +0 -2
- package/dist/src/providers-DazIw8mI.js +0 -24039
- package/dist/src/providers-QvGlNAD0.js +0 -24437
- package/dist/src/quiverai-BPlNcLkV.cjs +0 -325
- package/dist/src/quiverai-By99-YmJ.js +0 -325
- package/dist/src/quiverai-CmmByDqo.js +0 -325
- package/dist/src/quiverai-HZkoJJqw.js +0 -326
- package/dist/src/registry-BLTnTfjT.cjs +0 -131
- package/dist/src/registry-BMC-COHT.js +0 -132
- package/dist/src/registry-C8UZtmBp.js +0 -131
- package/dist/src/registry-CfwEUYXG.js +0 -131
- package/dist/src/remoteGeneration-Bgg6kC5V.js +0 -370
- package/dist/src/remoteGeneration-CKJFE960.cjs +0 -482
- package/dist/src/remoteGeneration-DaxwJDKv.js +0 -370
- package/dist/src/remoteGeneration-vHMGVKr1.js +0 -371
- package/dist/src/responses-BvnyIHrq.js +0 -1099
- package/dist/src/responses-CERAgvf-.js +0 -1098
- package/dist/src/responses-CwgjeuOg.cjs +0 -1109
- package/dist/src/runtimeTransform-3RF9Avyg.cjs +0 -161
- package/dist/src/runtimeTransform-C51Z5j4H.js +0 -156
- package/dist/src/runtimeTransform-CKE_Iyv8.js +0 -157
- package/dist/src/runtimeTransform-Cs11xJpj.js +0 -156
- package/dist/src/sagemaker-BJ4dOCxE.js +0 -713
- package/dist/src/sagemaker-Bt3JUAWq.js +0 -714
- package/dist/src/sagemaker-QVKyLgLF.cjs +0 -716
- package/dist/src/sagemaker-l3IB8iTs.js +0 -713
- package/dist/src/scanner-DGjIiTZ1.js +0 -1971
- package/dist/src/server-BNaLZH6u.js +0 -63
- package/dist/src/server-CBMuQul3.js +0 -189
- package/dist/src/server-CMKKIzKv.cjs +0 -74
- package/dist/src/server-CN2IS9Cs.js +0 -155
- package/dist/src/server-ua4cqbjC.js +0 -2
- package/dist/src/session-CQIjq_HZ.cjs +0 -69
- package/dist/src/session-FTlg8sEu.js +0 -62
- package/dist/src/session-GBQXtPWp.js +0 -63
- package/dist/src/session-_0-rTdwY.js +0 -62
- package/dist/src/shared-BtuO-OAM.js +0 -1927
- package/dist/src/shared-Ci78wTZX.js +0 -1928
- package/dist/src/shared-Dd3rimdM.js +0 -1929
- package/dist/src/shared-KAjFxRre.cjs +0 -2185
- package/dist/src/simulatedUser--OjW6xCx.js +0 -247
- package/dist/src/simulatedUser-D0-slRye.cjs +0 -252
- package/dist/src/simulatedUser-D1Kh_cwA.js +0 -248
- package/dist/src/slack-BX0FUevO.js +0 -144
- package/dist/src/slack-CcwXFiJE.cjs +0 -144
- package/dist/src/slack-CnfqKfXp.js +0 -145
- package/dist/src/strategies-2ntcK4tN.js +0 -2248
- package/dist/src/strategies-DZIW7Zcs.js +0 -2385
- package/dist/src/strategies-YRDF2j-N.cjs +0 -2420
- package/dist/src/telemetry-CL8CVA4p.js +0 -205
- package/dist/src/telemetry-Cix90qqz.js +0 -201
- package/dist/src/telemetry-CkmlqTjV.js +0 -205
- package/dist/src/telemetry-DQH7l5bb.js +0 -2
- package/dist/src/telemetry-DUCXc1-r.cjs +0 -216
- package/dist/src/togetherai-3yUt5Ck7.js +0 -49
- package/dist/src/togetherai-BJUByLwt.cjs +0 -49
- package/dist/src/togetherai-Bh6KZkmd.js +0 -50
- package/dist/src/togetherai-DDl9yk3b.js +0 -48
- package/dist/src/traceContext-BiJVppjT.cjs +0 -1032
- package/dist/src/traceContext-CKKluULP.js +0 -1016
- package/dist/src/traceContext-D3Sk8fO-.js +0 -1015
- package/dist/src/transcription-BoVQKIVz.js +0 -175
- package/dist/src/transcription-Bs5u8780.js +0 -175
- package/dist/src/transcription-Dl654d1p.cjs +0 -178
- package/dist/src/transcription-VEvhM1Fu.js +0 -176
- package/dist/src/transform-BAbkGpvl.js +0 -125
- package/dist/src/transform-C_j4hUH8.js +0 -126
- package/dist/src/transform-Da86hs4M.cjs +0 -154
- package/dist/src/transform-_i1raQNo.js +0 -125
- package/dist/src/typesafe-CKXBeh82.cjs +0 -253
- package/dist/src/typesafe-D3VaGeNm.js +0 -253
- package/dist/src/typesafe-DYM-SFNH.js +0 -253
- package/dist/src/typesafe-LXmSbw8F.js +0 -254
- package/dist/src/util-41rb0XHX.js +0 -743
- package/dist/src/util-B0WlHYFM.js +0 -2049
- package/dist/src/util-BD1R_PsR.js +0 -1770
- package/dist/src/util-BLbM_ItC.js +0 -395
- package/dist/src/util-C72P0iIa.js +0 -352
- package/dist/src/util-C7MpGlJ6.cjs +0 -2305
- package/dist/src/util-CCtqagKc.js +0 -286
- package/dist/src/util-CM2Ec_uY.js +0 -2051
- package/dist/src/util-CSSAWO8v.js +0 -351
- package/dist/src/util-CkQc-fx3.cjs +0 -934
- package/dist/src/util-DcOlFTFa.cjs +0 -478
- package/dist/src/util-DluGTGVB.js +0 -395
- package/dist/src/util-PfQ60chz.js +0 -743
- package/dist/src/util-f14-CPij.js +0 -396
- package/dist/src/util-l9pXX3Eu.cjs +0 -357
- package/dist/src/util-o_BnlYqS.js +0 -2050
- package/dist/src/vertex-B_-gQgzc.js +0 -2
- package/dist/src/vertex-CU4gqoYa.js +0 -854
- package/dist/src/vertex-DZ42UHb3.js +0 -848
- package/dist/src/vertex-DsYQJA0T.cjs +0 -871
- package/dist/src/vertexLive-BvIaHKGB.js +0 -55
- package/dist/src/vertexLive-CTULqNx7.js +0 -56
- package/dist/src/vertexLive-DjJ_YQBe.cjs +0 -55
- package/dist/src/vertexLive-STUGcteB.js +0 -55
- package/dist/src/video-CAQGmtEV.js +0 -703
- package/dist/src/video-_FSTWlwX.js +0 -702
- package/dist/src/video-aBPJPWdt.js +0 -702
- package/dist/src/video-gDjkWv5m.cjs +0 -706
|
@@ -0,0 +1,1000 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Q as getEnvString, c as logger, lt as state, tt as getProcessEnv } from "./logger-pCNnmVuz.js";
|
|
3
|
+
import { a as importModule, c as safeResolve, o as resolvePackageEntryPoint, r as getDirectory } from "./esm-B4NX_h4K.js";
|
|
4
|
+
import { t as getPackageVersion } from "./packageVersion-CVhzH1IZ.js";
|
|
5
|
+
import { n as PROMPTFOO_RESOURCE_ATTR_TRACE_ID, t as PROMPTFOO_RESOURCE_ATTR_PARENT_SPAN_ID } from "./resourceAttributes-Cixq2go1.js";
|
|
6
|
+
import { h as withGenAISpan, l as getGenAITracer, o as emitTurnMarkerSpan, p as sanitizeBody, r as addActiveSpanRoleAttribute, t as GenAIAttributes, u as getTraceparent } from "./genaiTracer-j8OXa5Va.js";
|
|
7
|
+
import { i as initializeAgenticCache, o as resolveAgenticWorkingDir, r as getCachedResponse, t as cacheResponse } from "./agentic-utils-D8wyQwPG.js";
|
|
8
|
+
import { n as clearRepositoryEnv, t as assertIsolatedWorkingDir } from "./agentWorkspace-DPtMLrlI.js";
|
|
9
|
+
import { a as isActiveTracingExport, o as waitForNativeTraceExport, t as getConfiguredTracingExport } from "./tracing-Eev_7A4e.js";
|
|
10
|
+
import { a as validateMCPConfigForClaudeCode, t as transformMCPConfigToClaudeCode } from "./transform-DAED8imp.js";
|
|
11
|
+
import { t as ANTHROPIC_MODELS } from "./util-TfpE49TI.js";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
import os from "node:os";
|
|
14
|
+
import fsPromises from "node:fs/promises";
|
|
15
|
+
import dedent from "dedent";
|
|
16
|
+
import { SpanStatusCode, trace } from "@opentelemetry/api";
|
|
17
|
+
import semverSatisfies from "semver/functions/satisfies.js";
|
|
18
|
+
//#region src/providers/claude-agent-sdk.ts
|
|
19
|
+
/** Hard cap for attribute body length on synthesized tool spans. */
|
|
20
|
+
const TOOL_SPAN_BODY_LIMIT = 4096;
|
|
21
|
+
const REDACTED_SUBAGENT_TRANSCRIPT = "[Subagent transcript omitted; set forward_subagent_text: true to include it]";
|
|
22
|
+
/** Returned when cancellation is observed at any checkpoint before the SDK query starts. */
|
|
23
|
+
const ABORTED_BEFORE_START_ERROR = "Claude Agent SDK call aborted before it started";
|
|
24
|
+
const USAGE_BASELINE_TIMEOUT_MS = 5e3;
|
|
25
|
+
const MODEL_USAGE_COUNTERS = [
|
|
26
|
+
"inputTokens",
|
|
27
|
+
"outputTokens",
|
|
28
|
+
"thinkingTokens",
|
|
29
|
+
"cacheReadInputTokens",
|
|
30
|
+
"cacheCreationInputTokens",
|
|
31
|
+
"webSearchRequests",
|
|
32
|
+
"costUSD"
|
|
33
|
+
];
|
|
34
|
+
function subtractSessionUsage(current, baseline) {
|
|
35
|
+
return Object.fromEntries(Object.entries(current).map(([model, usage]) => {
|
|
36
|
+
const delta = { ...usage };
|
|
37
|
+
for (const key of MODEL_USAGE_COUNTERS) if (typeof usage[key] === "number") delta[key] = Math.max(0, usage[key] - (baseline[model]?.[key] ?? 0));
|
|
38
|
+
return [model, delta];
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Append promptfoo-specific resource-attribute kvs to a W3C-style
|
|
43
|
+
* `OTEL_RESOURCE_ATTRIBUTES` string, removing trailing whitespace/commas from
|
|
44
|
+
* the existing value and stripping any previous occurrence of our keys so the
|
|
45
|
+
* producer can't double-up. Returns the new string. Exported for tests.
|
|
46
|
+
*/
|
|
47
|
+
function appendPromptfooResourceAttrs(existing, traceId, parentSpanId) {
|
|
48
|
+
const incoming = `${PROMPTFOO_RESOURCE_ATTR_TRACE_ID}=${traceId},${PROMPTFOO_RESOURCE_ATTR_PARENT_SPAN_ID}=${parentSpanId}`;
|
|
49
|
+
if (!existing) return incoming;
|
|
50
|
+
const cleaned = existing.split(",").map((pair) => pair.trim()).filter((pair) => pair.length > 0 && !pair.startsWith(`promptfoo.trace_id=`) && !pair.startsWith(`promptfoo.parent_span_id=`)).join(",");
|
|
51
|
+
return cleaned.length > 0 ? `${cleaned},${incoming}` : incoming;
|
|
52
|
+
}
|
|
53
|
+
function stringifyForSpan(value) {
|
|
54
|
+
if (value === void 0 || value === null) return;
|
|
55
|
+
let raw;
|
|
56
|
+
if (typeof value === "string") raw = value;
|
|
57
|
+
else try {
|
|
58
|
+
raw = JSON.stringify(value);
|
|
59
|
+
} catch {
|
|
60
|
+
return "<unserializable>";
|
|
61
|
+
}
|
|
62
|
+
if (raw === void 0) return;
|
|
63
|
+
const sanitized = sanitizeBody(raw);
|
|
64
|
+
return sanitized.length > TOOL_SPAN_BODY_LIMIT ? `${sanitized.slice(0, 4081)}... [truncated]` : sanitized;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Emit a child span for a single tool call. Parents to the currently active
|
|
68
|
+
* span (the provider's GenAI wrapper) so the UI shows an agent → tool hierarchy
|
|
69
|
+
* similar to the OpenAI Agents SDK.
|
|
70
|
+
*
|
|
71
|
+
* When `incomplete` is true the call never produced a matching `tool_result`
|
|
72
|
+
* (aborted run, stop hook, or the stream ended mid-tool). Such spans are
|
|
73
|
+
* flagged via `tool.incomplete` and marked ERROR so traces surface the gap
|
|
74
|
+
* instead of silently dropping the tool.
|
|
75
|
+
*/
|
|
76
|
+
function emitToolSpan(entry, startTimeMs, endTimeMs, isError, incomplete = false, turnIndex) {
|
|
77
|
+
try {
|
|
78
|
+
const tracer = getGenAITracer();
|
|
79
|
+
const attributes = {
|
|
80
|
+
"gen_ai.operation.name": "execute_tool",
|
|
81
|
+
"gen_ai.tool.call.id": entry.id,
|
|
82
|
+
"gen_ai.tool.name": entry.name,
|
|
83
|
+
"tool.name": entry.name,
|
|
84
|
+
"tool.is_error": isError
|
|
85
|
+
};
|
|
86
|
+
if (incomplete) attributes["tool.incomplete"] = true;
|
|
87
|
+
const input = stringifyForSpan(entry.input);
|
|
88
|
+
if (input !== void 0) attributes["tool.input"] = input;
|
|
89
|
+
const output = stringifyForSpan(entry.output);
|
|
90
|
+
if (output !== void 0) attributes["tool.output"] = output;
|
|
91
|
+
if (entry.parentToolUseId) attributes["tool.parent_id"] = entry.parentToolUseId;
|
|
92
|
+
if (typeof turnIndex === "number") attributes["gen_ai.turn.index"] = turnIndex;
|
|
93
|
+
const span = tracer.startSpan(`tool ${entry.name}`, {
|
|
94
|
+
startTime: startTimeMs,
|
|
95
|
+
attributes: addActiveSpanRoleAttribute(attributes)
|
|
96
|
+
});
|
|
97
|
+
span.setStatus({ code: isError || incomplete ? SpanStatusCode.ERROR : SpanStatusCode.OK });
|
|
98
|
+
span.end(endTimeMs);
|
|
99
|
+
} catch (err) {
|
|
100
|
+
logger.warn(`[ClaudeAgentSDK] Failed to emit tool span for ${entry.name}: ${err}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function isRawSubagentTranscript(result) {
|
|
104
|
+
if (typeof result !== "object" || result === null) return false;
|
|
105
|
+
if ("content" in result && "_meta" in result) return isRawSubagentTranscript(result.content);
|
|
106
|
+
if ("isRawTranscript" in result && result.isRawTranscript === true) return true;
|
|
107
|
+
return "task" in result && typeof result.task === "object" && result.task !== null && "isRawTranscript" in result.task && result.task.isRawTranscript === true;
|
|
108
|
+
}
|
|
109
|
+
function redactRawSubagentToolOutput(result) {
|
|
110
|
+
if (!isRawSubagentTranscript(result)) return result;
|
|
111
|
+
const output = result;
|
|
112
|
+
if ("content" in output && "_meta" in output) return {
|
|
113
|
+
...output,
|
|
114
|
+
content: redactRawSubagentToolOutput(output.content)
|
|
115
|
+
};
|
|
116
|
+
const nestedTask = "task" in output && typeof output.task === "object" && output.task !== null;
|
|
117
|
+
const task = nestedTask ? output.task : output;
|
|
118
|
+
const redactedTask = {
|
|
119
|
+
...task,
|
|
120
|
+
output: REDACTED_SUBAGENT_TRANSCRIPT,
|
|
121
|
+
..."result" in task ? { result: REDACTED_SUBAGENT_TRANSCRIPT } : {},
|
|
122
|
+
isRawTranscript: false
|
|
123
|
+
};
|
|
124
|
+
return nestedTask ? {
|
|
125
|
+
...output,
|
|
126
|
+
task: redactedTask
|
|
127
|
+
} : redactedTask;
|
|
128
|
+
}
|
|
129
|
+
function createTaskOutputTranscriptRedactionHook() {
|
|
130
|
+
return {
|
|
131
|
+
matcher: "TaskOutput",
|
|
132
|
+
hooks: [async (input) => {
|
|
133
|
+
if (input.hook_event_name !== "PostToolUse" || input.tool_name !== "TaskOutput" || !isRawSubagentTranscript(input.tool_response)) return {};
|
|
134
|
+
return { hookSpecificOutput: {
|
|
135
|
+
hookEventName: "PostToolUse",
|
|
136
|
+
updatedToolOutput: redactRawSubagentToolOutput(input.tool_response)
|
|
137
|
+
} };
|
|
138
|
+
}]
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function deriveSkillCalls(toolCalls) {
|
|
142
|
+
return toolCalls.filter((toolCall) => toolCall.name === "Skill").flatMap((toolCall) => {
|
|
143
|
+
const skillName = toolCall.input && typeof toolCall.input === "object" && typeof toolCall.input.skill === "string" ? toolCall.input.skill.trim() : "";
|
|
144
|
+
if (!skillName) return [];
|
|
145
|
+
return [{
|
|
146
|
+
name: skillName,
|
|
147
|
+
input: toolCall.input,
|
|
148
|
+
is_error: toolCall.is_error,
|
|
149
|
+
source: "tool"
|
|
150
|
+
}];
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Claude Agent SDK Provider
|
|
155
|
+
*
|
|
156
|
+
* This provider requires the @anthropic-ai/claude-agent-sdk package to be installed separately:
|
|
157
|
+
* npm install promptfoo @anthropic-ai/claude-agent-sdk@^0.3.273
|
|
158
|
+
*
|
|
159
|
+
* Two default configurations:
|
|
160
|
+
* - No working_dir: Runs in temp directory with no tools - behaves like plain chat API
|
|
161
|
+
* - With working_dir: Runs in specified directory with read-only file tools (Read/Grep/Glob/LS)
|
|
162
|
+
*
|
|
163
|
+
* User can override tool permissions with 'custom_allowed_tools', 'append_allowed_tools', 'disallowed_tools', and 'permission_mode'.
|
|
164
|
+
*
|
|
165
|
+
* For side effects (file writes, system calls, etc.), user can override permissions and use a custom working directory. They're then responsible for setup/teardown and security considerations.
|
|
166
|
+
*
|
|
167
|
+
* MCP server connection details are passed through from config. strict_mcp_config is true by default to only allow explicitly configured MCP servers.
|
|
168
|
+
*/
|
|
169
|
+
const FS_READONLY_ALLOWED_TOOLS = [
|
|
170
|
+
"Read",
|
|
171
|
+
"Grep",
|
|
172
|
+
"Glob",
|
|
173
|
+
"LS"
|
|
174
|
+
].sort();
|
|
175
|
+
const CLAUDE_CODE_MODEL_ALIASES = [
|
|
176
|
+
"default",
|
|
177
|
+
"best",
|
|
178
|
+
"fable",
|
|
179
|
+
"fable[1m]",
|
|
180
|
+
"sonnet",
|
|
181
|
+
"opus",
|
|
182
|
+
"haiku",
|
|
183
|
+
"sonnet[1m]",
|
|
184
|
+
"opus[1m]",
|
|
185
|
+
"opusplan",
|
|
186
|
+
"opusplan[1m]"
|
|
187
|
+
];
|
|
188
|
+
const CLAUDE_AGENT_SDK_RANGE = "^0.3.273";
|
|
189
|
+
/**
|
|
190
|
+
* Helper to load the Claude Agent SDK ESM module
|
|
191
|
+
* Uses resolvePackageEntryPoint to handle ESM-only packages with restrictive exports
|
|
192
|
+
*/
|
|
193
|
+
async function loadClaudeCodeSDK() {
|
|
194
|
+
const basePath = state.basePath && path.isAbsolute(state.basePath) ? state.basePath : process.cwd();
|
|
195
|
+
const basePaths = /* @__PURE__ */ new Set([
|
|
196
|
+
basePath,
|
|
197
|
+
process.cwd(),
|
|
198
|
+
path.resolve(getDirectory(), ".."),
|
|
199
|
+
path.resolve(getDirectory(), "../..")
|
|
200
|
+
]);
|
|
201
|
+
let claudeCodePath = null;
|
|
202
|
+
for (const candidate of basePaths) {
|
|
203
|
+
claudeCodePath = resolvePackageEntryPoint("@anthropic-ai/claude-agent-sdk", candidate);
|
|
204
|
+
if (claudeCodePath) break;
|
|
205
|
+
}
|
|
206
|
+
if (!claudeCodePath) throw new Error(dedent`The @anthropic-ai/claude-agent-sdk package could not be resolved from ${basePath}.
|
|
207
|
+
|
|
208
|
+
To use the Claude Agent SDK provider, install it with:
|
|
209
|
+
npm install promptfoo @anthropic-ai/claude-agent-sdk@${CLAUDE_AGENT_SDK_RANGE}
|
|
210
|
+
|
|
211
|
+
If the package is already installed elsewhere, run promptfoo from the
|
|
212
|
+
project root (or point the config at that root) so node_modules is on
|
|
213
|
+
the resolution path.
|
|
214
|
+
|
|
215
|
+
For more information, see: https://www.promptfoo.dev/docs/providers/claude-agent-sdk/`);
|
|
216
|
+
const version = getPackageVersion("@anthropic-ai/claude-agent-sdk", claudeCodePath);
|
|
217
|
+
if (!version || !semverSatisfies(version, CLAUDE_AGENT_SDK_RANGE)) throw new Error(`The Claude Agent SDK provider requires @anthropic-ai/claude-agent-sdk@${CLAUDE_AGENT_SDK_RANGE} (found ${version ?? "unknown"}). Install it with: npm install promptfoo @anthropic-ai/claude-agent-sdk@${CLAUDE_AGENT_SDK_RANGE}`);
|
|
218
|
+
try {
|
|
219
|
+
return await importModule(claudeCodePath);
|
|
220
|
+
} catch (err) {
|
|
221
|
+
logger.error(`Failed to load Claude Agent SDK: ${err}`);
|
|
222
|
+
if (err.stack) logger.error(err.stack);
|
|
223
|
+
throw new Error(dedent`Failed to load @anthropic-ai/claude-agent-sdk.
|
|
224
|
+
|
|
225
|
+
The package was found but could not be loaded. This may be due to:
|
|
226
|
+
- Incompatible Node.js version (requires Node.js >=22.22.0)
|
|
227
|
+
- Corrupted installation
|
|
228
|
+
|
|
229
|
+
Try reinstalling:
|
|
230
|
+
npm install promptfoo @anthropic-ai/claude-agent-sdk@${CLAUDE_AGENT_SDK_RANGE}
|
|
231
|
+
|
|
232
|
+
For more information, see: https://www.promptfoo.dev/docs/providers/claude-agent-sdk/`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Creates a canUseTool callback for handling AskUserQuestion tool in automated evaluations.
|
|
237
|
+
* This provides automated responses to questions that would normally require user input.
|
|
238
|
+
*
|
|
239
|
+
* The callback wraps an optional user-provided canUseTool and handles AskUserQuestion specifically,
|
|
240
|
+
* deferring to the wrapped callback for all other tools.
|
|
241
|
+
*/
|
|
242
|
+
function createAskUserQuestionCanUseTool(behavior = "first_option", wrappedCanUseTool) {
|
|
243
|
+
return async (toolName, input, options) => {
|
|
244
|
+
if (toolName !== "AskUserQuestion") {
|
|
245
|
+
if (wrappedCanUseTool) return wrappedCanUseTool(toolName, input, options);
|
|
246
|
+
return {
|
|
247
|
+
behavior: "deny",
|
|
248
|
+
message: "Tool permission request is not handled by ask_user_question automation"
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
if (behavior === "deny") return {
|
|
252
|
+
behavior: "deny",
|
|
253
|
+
message: "AskUserQuestion is disabled in automated evaluation mode"
|
|
254
|
+
};
|
|
255
|
+
if (!isAskUserQuestionToolInput(input)) return {
|
|
256
|
+
behavior: "deny",
|
|
257
|
+
message: "AskUserQuestion received malformed question input"
|
|
258
|
+
};
|
|
259
|
+
const toolInput = input;
|
|
260
|
+
const answers = Object.create(null);
|
|
261
|
+
for (const question of toolInput.questions) {
|
|
262
|
+
if (!question.options || question.options.length === 0) continue;
|
|
263
|
+
let selectedLabels;
|
|
264
|
+
if (behavior === "random") {
|
|
265
|
+
const randomIndex = Math.floor(Math.random() * question.options.length);
|
|
266
|
+
selectedLabels = [question.options[randomIndex].label];
|
|
267
|
+
} else selectedLabels = [question.options[0].label];
|
|
268
|
+
answers[question.question] = selectedLabels.join(", ");
|
|
269
|
+
}
|
|
270
|
+
return {
|
|
271
|
+
behavior: "allow",
|
|
272
|
+
updatedInput: {
|
|
273
|
+
questions: toolInput.questions,
|
|
274
|
+
answers
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Assemble the hook set actually handed to the SDK.
|
|
281
|
+
*
|
|
282
|
+
* Two independent concerns layer here, on different hook events, so both apply:
|
|
283
|
+
* a PostToolUse hook that redacts raw background-agent transcripts, and a
|
|
284
|
+
* PreToolUse hook that answers AskUserQuestion under `dontAsk`. In both cases
|
|
285
|
+
* promptfoo's hook goes first and the user's configured matchers stay installed
|
|
286
|
+
* behind it, so an explicit user denial still wins.
|
|
287
|
+
*/
|
|
288
|
+
function buildClaudeHooks(config) {
|
|
289
|
+
let hooks = config.hooks;
|
|
290
|
+
if (!config.forward_subagent_text) hooks = {
|
|
291
|
+
...hooks,
|
|
292
|
+
PostToolUse: [createTaskOutputTranscriptRedactionHook(), ...hooks?.PostToolUse ?? []]
|
|
293
|
+
};
|
|
294
|
+
if (config.permission_mode !== "dontAsk" || !config.ask_user_question) return hooks;
|
|
295
|
+
const questionHandler = createAskUserQuestionCanUseTool(config.ask_user_question.behavior);
|
|
296
|
+
const askUserQuestionHook = {
|
|
297
|
+
matcher: "AskUserQuestion",
|
|
298
|
+
hooks: [async (input, toolUseID, { signal }) => {
|
|
299
|
+
if (input.hook_event_name !== "PreToolUse" || input.tool_name !== "AskUserQuestion") return {};
|
|
300
|
+
const resolvedToolUseID = toolUseID ?? input.tool_use_id;
|
|
301
|
+
const result = await questionHandler(input.tool_name, input.tool_input, {
|
|
302
|
+
signal,
|
|
303
|
+
toolUseID: resolvedToolUseID,
|
|
304
|
+
requestId: resolvedToolUseID
|
|
305
|
+
});
|
|
306
|
+
if (result?.behavior !== "allow") return { hookSpecificOutput: {
|
|
307
|
+
hookEventName: "PreToolUse",
|
|
308
|
+
permissionDecision: "deny",
|
|
309
|
+
permissionDecisionReason: result?.message ?? "ask_user_question automation returned no decision"
|
|
310
|
+
} };
|
|
311
|
+
return { hookSpecificOutput: {
|
|
312
|
+
hookEventName: "PreToolUse",
|
|
313
|
+
permissionDecision: "allow",
|
|
314
|
+
updatedInput: result.updatedInput
|
|
315
|
+
} };
|
|
316
|
+
}]
|
|
317
|
+
};
|
|
318
|
+
return {
|
|
319
|
+
...hooks,
|
|
320
|
+
PreToolUse: [askUserQuestionHook, ...hooks?.PreToolUse ?? []]
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
function validateAskUserQuestionConfig(config) {
|
|
324
|
+
if (!config || typeof config !== "object" || Array.isArray(config)) throw new Error("ask_user_question must be an object");
|
|
325
|
+
const behavior = config.behavior;
|
|
326
|
+
if (behavior !== void 0 && behavior !== "first_option" && behavior !== "random" && behavior !== "deny") throw new Error("ask_user_question.behavior must be first_option, random, or deny");
|
|
327
|
+
}
|
|
328
|
+
const RESERVED_POLICY_EXTRA_ARGS = /* @__PURE__ */ new Set([
|
|
329
|
+
"adddir",
|
|
330
|
+
"agent",
|
|
331
|
+
"agents",
|
|
332
|
+
"allowdangerouslyskippermissions",
|
|
333
|
+
"allowedtools",
|
|
334
|
+
"bare",
|
|
335
|
+
"brief",
|
|
336
|
+
"chrome",
|
|
337
|
+
"dangerouslyskippermissions",
|
|
338
|
+
"disallowedtools",
|
|
339
|
+
"ide",
|
|
340
|
+
"managedsettings",
|
|
341
|
+
"mcpconfig",
|
|
342
|
+
"permissionmode",
|
|
343
|
+
"permissionprompttool",
|
|
344
|
+
"plugindir",
|
|
345
|
+
"plugindirnomcp",
|
|
346
|
+
"pluginurl",
|
|
347
|
+
"remotecontrol",
|
|
348
|
+
"safemode",
|
|
349
|
+
"settings",
|
|
350
|
+
"settingsources",
|
|
351
|
+
"strictmcpconfig",
|
|
352
|
+
"tools"
|
|
353
|
+
]);
|
|
354
|
+
function normalizeClaudeCliArgumentName(name) {
|
|
355
|
+
return name.split(/[=:]/, 1)[0].replace(/^--/, "").replace(/[-_]/g, "").toLowerCase();
|
|
356
|
+
}
|
|
357
|
+
function validateClaudeToolPolicyConfig(config) {
|
|
358
|
+
for (const option of ["allow_all_tools", "allow_dangerously_skip_permissions"]) if (config[option] !== void 0 && typeof config[option] !== "boolean") throw new Error(`${option} must be a boolean`);
|
|
359
|
+
for (const option of [
|
|
360
|
+
"custom_allowed_tools",
|
|
361
|
+
"append_allowed_tools",
|
|
362
|
+
"disallowed_tools"
|
|
363
|
+
]) {
|
|
364
|
+
const value = config[option];
|
|
365
|
+
if (value !== void 0 && (!Array.isArray(value) || value.some((tool) => typeof tool !== "string"))) throw new Error(`${option} must be an array of tool-name strings`);
|
|
366
|
+
}
|
|
367
|
+
const permissionModes = [
|
|
368
|
+
"default",
|
|
369
|
+
"plan",
|
|
370
|
+
"acceptEdits",
|
|
371
|
+
"bypassPermissions",
|
|
372
|
+
"dontAsk",
|
|
373
|
+
"auto",
|
|
374
|
+
"manual"
|
|
375
|
+
];
|
|
376
|
+
if (config.permission_mode !== void 0 && !permissionModes.includes(config.permission_mode)) throw new Error(`permission_mode must be one of ${permissionModes.join(", ")}`);
|
|
377
|
+
if (config.tools !== void 0) {
|
|
378
|
+
const validArray = Array.isArray(config.tools) && config.tools.every((tool) => typeof tool === "string");
|
|
379
|
+
const validPreset = !!config.tools && typeof config.tools === "object" && !Array.isArray(config.tools) && config.tools.type === "preset" && config.tools.preset === "claude_code";
|
|
380
|
+
if (!validArray && !validPreset) throw new Error("tools must be an array of tool-name strings or the claude_code preset");
|
|
381
|
+
}
|
|
382
|
+
if (config.extra_args !== void 0 && (!config.extra_args || typeof config.extra_args !== "object" || Array.isArray(config.extra_args) || Object.values(config.extra_args).some((value) => value !== null && typeof value !== "string"))) throw new Error("extra_args must be an object with string or null values");
|
|
383
|
+
const reservedExtraArg = Object.keys(config.extra_args ?? {}).find((name) => RESERVED_POLICY_EXTRA_ARGS.has(normalizeClaudeCliArgumentName(name)));
|
|
384
|
+
if (reservedExtraArg) throw new Error(`extra_args cannot override Claude runtime policy (${reservedExtraArg}); use supported structured provider options instead`);
|
|
385
|
+
}
|
|
386
|
+
function mcpServerContainsCacheSensitiveData(server) {
|
|
387
|
+
if (server.auth || Object.keys(server.headers ?? {}).length > 0 || Object.keys(server.env ?? {}).length > 0 || (server.args?.length ?? 0) > 0) return true;
|
|
388
|
+
if (!server.url) return false;
|
|
389
|
+
try {
|
|
390
|
+
const url = new URL(server.url);
|
|
391
|
+
return Boolean(url.username || url.password || url.search);
|
|
392
|
+
} catch {
|
|
393
|
+
return server.url.includes("?") || server.url.includes("@");
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
function mcpConfigContainsCacheSensitiveData(config) {
|
|
397
|
+
if (!config || config.enabled === false) return false;
|
|
398
|
+
return [...config.servers ?? [], ...config.server ? [config.server] : []].some(mcpServerContainsCacheSensitiveData);
|
|
399
|
+
}
|
|
400
|
+
function isAskUserQuestionToolInput(input) {
|
|
401
|
+
if (!input || typeof input !== "object" || !Array.isArray(input.questions)) return false;
|
|
402
|
+
return input.questions.every((question) => !!question && typeof question === "object" && typeof question.question === "string" && typeof question.header === "string" && typeof question.multiSelect === "boolean" && Array.isArray(question.options) && question.options.every((option) => !!option && typeof option === "object" && typeof option.label === "string" && typeof option.description === "string"));
|
|
403
|
+
}
|
|
404
|
+
var ClaudeCodeSDKProvider = class ClaudeCodeSDKProvider {
|
|
405
|
+
static ANTHROPIC_MODELS = ANTHROPIC_MODELS;
|
|
406
|
+
static ANTHROPIC_MODELS_NAMES = ANTHROPIC_MODELS.map((model) => model.id);
|
|
407
|
+
config;
|
|
408
|
+
env;
|
|
409
|
+
apiKey;
|
|
410
|
+
providerId = "anthropic:claude-agent-sdk";
|
|
411
|
+
claudeCodeModule;
|
|
412
|
+
credentialCacheScope = crypto.randomUUID();
|
|
413
|
+
constructor(options = {}) {
|
|
414
|
+
const { config, env, id } = options;
|
|
415
|
+
this.config = config ?? {};
|
|
416
|
+
this.env = env;
|
|
417
|
+
this.apiKey = this.getApiKey();
|
|
418
|
+
this.providerId = id ?? this.providerId;
|
|
419
|
+
if (this.config.model && !ClaudeCodeSDKProvider.ANTHROPIC_MODELS_NAMES.includes(this.config.model) && !CLAUDE_CODE_MODEL_ALIASES.includes(this.config.model)) logger.warn(`Using unknown model for Claude Agent SDK: ${this.config.model}`);
|
|
420
|
+
for (const fallbackModel of (this.config.fallback_model ?? "").split(",").map((m) => m.trim()).filter(Boolean)) if (!ClaudeCodeSDKProvider.ANTHROPIC_MODELS_NAMES.includes(fallbackModel) && !CLAUDE_CODE_MODEL_ALIASES.includes(fallbackModel)) logger.warn(`Using unknown model for Claude Agent SDK fallback: ${fallbackModel}`);
|
|
421
|
+
}
|
|
422
|
+
id() {
|
|
423
|
+
return this.providerId;
|
|
424
|
+
}
|
|
425
|
+
async callApi(prompt, context, callOptions) {
|
|
426
|
+
if (callOptions?.abortSignal?.aborted) return { error: ABORTED_BEFORE_START_ERROR };
|
|
427
|
+
const config = {
|
|
428
|
+
...this.config,
|
|
429
|
+
...context?.prompt?.config
|
|
430
|
+
};
|
|
431
|
+
const inIsolatedWorkspace = assertIsolatedWorkingDir(config);
|
|
432
|
+
if (config.ask_user_question !== void 0) validateAskUserQuestionConfig(config.ask_user_question);
|
|
433
|
+
if (config.mcp !== void 0) validateMCPConfigForClaudeCode(config.mcp);
|
|
434
|
+
validateClaudeToolPolicyConfig(config);
|
|
435
|
+
const env = {};
|
|
436
|
+
const processEnv = getProcessEnv();
|
|
437
|
+
for (const key of Object.keys(processEnv).sort()) if (processEnv[key] !== void 0) env[key] = processEnv[key];
|
|
438
|
+
if (config.env) for (const key of Object.keys(config.env).sort()) {
|
|
439
|
+
const value = config.env[key];
|
|
440
|
+
if (value !== void 0) env[key] = value;
|
|
441
|
+
}
|
|
442
|
+
if (this.env) for (const key of Object.keys(this.env).sort()) {
|
|
443
|
+
const value = this.env[key];
|
|
444
|
+
if (value !== void 0) env[key] = value;
|
|
445
|
+
}
|
|
446
|
+
if (inIsolatedWorkspace) clearRepositoryEnv(env);
|
|
447
|
+
if (config.deep_tracing) {
|
|
448
|
+
const receiverExport = getConfiguredTracingExport();
|
|
449
|
+
env.CLAUDE_CODE_ENABLE_TELEMETRY ??= "1";
|
|
450
|
+
env.CLAUDE_CODE_ENHANCED_TELEMETRY_BETA ??= "1";
|
|
451
|
+
env.OTEL_TRACES_EXPORTER ??= "otlp";
|
|
452
|
+
env.OTEL_EXPORTER_OTLP_ENDPOINT ??= receiverExport?.endpoint ?? "http://127.0.0.1:4318";
|
|
453
|
+
env.OTEL_EXPORTER_OTLP_PROTOCOL ??= receiverExport?.format === "json" ? "http/json" : "http/protobuf";
|
|
454
|
+
env.OTEL_TRACES_EXPORT_INTERVAL ??= "1000";
|
|
455
|
+
}
|
|
456
|
+
const sdkExportsNativeSpans = env.CLAUDE_CODE_ENABLE_TELEMETRY === "1" && (env.CLAUDE_CODE_ENHANCED_TELEMETRY_BETA === "1" || env.ENABLE_ENHANCED_TELEMETRY_BETA === "1") && env.OTEL_TRACES_EXPORTER?.split(",").some((exporter) => exporter.trim() === "otlp") && isActiveTracingExport(env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ?? env.OTEL_EXPORTER_OTLP_ENDPOINT, env.OTEL_EXPORTER_OTLP_TRACES_PROTOCOL ?? env.OTEL_EXPORTER_OTLP_PROTOCOL);
|
|
457
|
+
for (const [option, environmentVariable] of [["max_subagent_spawn_depth", "CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH"], ["max_concurrent_subagents", "CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS"]]) {
|
|
458
|
+
const value = config[option];
|
|
459
|
+
if (value === void 0) continue;
|
|
460
|
+
if (!Number.isSafeInteger(value) || value < 1) throw new Error(`${option} must be a positive safe integer`);
|
|
461
|
+
env[environmentVariable] = String(value);
|
|
462
|
+
}
|
|
463
|
+
env.CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH ??= "5";
|
|
464
|
+
if (config.allow_all_tools) env.CLAUDE_CODE_ENABLE_TODO_TOOLS ??= "1";
|
|
465
|
+
const effectiveApiKey = config.apiKey || this.apiKey;
|
|
466
|
+
if (effectiveApiKey) env.ANTHROPIC_API_KEY = effectiveApiKey;
|
|
467
|
+
const credentialCacheScope = this.credentialCacheScope;
|
|
468
|
+
if (!effectiveApiKey && !(config.apiKeyRequired === false || env.CLAUDE_CODE_USE_BEDROCK || env.CLAUDE_CODE_USE_VERTEX)) throw new Error(dedent`Anthropic API key is not set. Set the ANTHROPIC_API_KEY environment variable or add "apiKey" to the provider config.
|
|
469
|
+
|
|
470
|
+
Use CLAUDE_CODE_USE_BEDROCK or CLAUDE_CODE_USE_VERTEX environment variables to use Bedrock or Vertex instead.`);
|
|
471
|
+
if (config.allow_all_tools === true && ("custom_allowed_tools" in config || "append_allowed_tools" in config || config.tools !== void 0)) throw new Error("Cannot specify allow_all_tools together with tools, custom_allowed_tools, or append_allowed_tools");
|
|
472
|
+
if ("custom_allowed_tools" in config && "append_allowed_tools" in config) throw new Error("Cannot specify both custom_allowed_tools and append_allowed_tools");
|
|
473
|
+
if (config.permission_mode === "bypassPermissions" && config.allow_dangerously_skip_permissions !== true) throw new Error("permission_mode 'bypassPermissions' requires allow_dangerously_skip_permissions: true as a safety measure");
|
|
474
|
+
if (config.title && (config.resume || config.continue)) logger.warn("[ClaudeAgentSDK] `title` is ignored when `resume` or `continue` is set; the persisted session title is used instead.");
|
|
475
|
+
const defaultAllowedTools = config.working_dir ? FS_READONLY_ALLOWED_TOOLS : [];
|
|
476
|
+
let allowedTools = config.allow_all_tools ? void 0 : defaultAllowedTools;
|
|
477
|
+
if ("custom_allowed_tools" in config) allowedTools = Array.from(new Set(config.custom_allowed_tools ?? [])).sort();
|
|
478
|
+
else if (config.append_allowed_tools) allowedTools = Array.from(/* @__PURE__ */ new Set([...defaultAllowedTools, ...config.append_allowed_tools])).sort();
|
|
479
|
+
if (config.ask_user_question) allowedTools = allowedTools?.filter((tool) => tool !== "AskUserQuestion");
|
|
480
|
+
const disallowedTools = config.disallowed_tools ? Array.from(new Set(config.disallowed_tools)).sort() : void 0;
|
|
481
|
+
let tools = config.tools;
|
|
482
|
+
if (tools === void 0) {
|
|
483
|
+
if (config.allow_all_tools === true) tools = {
|
|
484
|
+
type: "preset",
|
|
485
|
+
preset: "claude_code"
|
|
486
|
+
};
|
|
487
|
+
else {
|
|
488
|
+
const derivedTools = new Set(allowedTools);
|
|
489
|
+
if (config.ask_user_question) derivedTools.add("AskUserQuestion");
|
|
490
|
+
if (config.skills === "all" || Array.isArray(config.skills) && config.skills.length > 0) derivedTools.add("Skill");
|
|
491
|
+
if (config.agents && Object.keys(config.agents).length > 0) derivedTools.add("Task");
|
|
492
|
+
if (config.permission_mode === "plan") derivedTools.add("ExitPlanMode");
|
|
493
|
+
tools = Array.from(derivedTools).sort();
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
const basePath = state.basePath ? path.resolve(state.basePath) : process.cwd();
|
|
497
|
+
let isTempDir = false;
|
|
498
|
+
let workingDir;
|
|
499
|
+
if (config.working_dir) workingDir = resolveAgenticWorkingDir(config.working_dir, basePath);
|
|
500
|
+
else isTempDir = true;
|
|
501
|
+
let canUseTool = config.can_use_tool;
|
|
502
|
+
if (config.ask_user_question) canUseTool = createAskUserQuestionCanUseTool(config.ask_user_question.behavior, config.can_use_tool);
|
|
503
|
+
const hooks = buildClaudeHooks(config);
|
|
504
|
+
const cacheKeyQueryOptions = {
|
|
505
|
+
maxTurns: config.max_turns,
|
|
506
|
+
model: config.model,
|
|
507
|
+
fallbackModel: config.fallback_model,
|
|
508
|
+
strictMcpConfig: config.strict_mcp_config ?? true,
|
|
509
|
+
permissionMode: config.permission_mode === "manual" ? "default" : config.permission_mode ?? "default",
|
|
510
|
+
planModeInstructions: config.plan_mode_instructions,
|
|
511
|
+
systemPrompt: config.custom_system_prompt == null ? {
|
|
512
|
+
type: "preset",
|
|
513
|
+
preset: "claude_code",
|
|
514
|
+
append: config.append_system_prompt,
|
|
515
|
+
snapshot: false,
|
|
516
|
+
...config.exclude_dynamic_sections ? { excludeDynamicSections: true } : {}
|
|
517
|
+
} : {
|
|
518
|
+
type: "custom",
|
|
519
|
+
prompt: config.custom_system_prompt,
|
|
520
|
+
snapshot: false
|
|
521
|
+
},
|
|
522
|
+
maxThinkingTokens: config.max_thinking_tokens,
|
|
523
|
+
allowedTools,
|
|
524
|
+
disallowedTools,
|
|
525
|
+
plugins: config.plugins?.map((plugin) => ({
|
|
526
|
+
...plugin,
|
|
527
|
+
path: safeResolve(basePath, plugin.path)
|
|
528
|
+
})),
|
|
529
|
+
skills: config.skills,
|
|
530
|
+
maxBudgetUsd: config.max_budget_usd,
|
|
531
|
+
additionalDirectories: config.additional_directories?.map((dir) => safeResolve(basePath, dir)),
|
|
532
|
+
resume: config.resume,
|
|
533
|
+
forkSession: config.fork_session,
|
|
534
|
+
resumeSessionAt: config.resume_session_at,
|
|
535
|
+
continue: config.continue,
|
|
536
|
+
agents: config.agents,
|
|
537
|
+
outputFormat: config.output_format,
|
|
538
|
+
hooks,
|
|
539
|
+
includePartialMessages: config.include_partial_messages,
|
|
540
|
+
includeHookEvents: config.include_hook_events,
|
|
541
|
+
forwardSubagentText: config.forward_subagent_text,
|
|
542
|
+
toolConfig: config.tool_config,
|
|
543
|
+
promptSuggestions: config.prompt_suggestions,
|
|
544
|
+
agentProgressSummaries: config.agent_progress_summaries,
|
|
545
|
+
settings: typeof config.settings === "string" && config.settings ? safeResolve(basePath, config.settings) : config.settings,
|
|
546
|
+
managedSettings: config.managed_settings,
|
|
547
|
+
betas: config.betas,
|
|
548
|
+
thinking: config.thinking,
|
|
549
|
+
effort: config.effort,
|
|
550
|
+
agent: config.agent,
|
|
551
|
+
sessionId: config.session_id,
|
|
552
|
+
debug: config.debug,
|
|
553
|
+
debugFile: config.debug_file ? safeResolve(basePath, config.debug_file) : void 0,
|
|
554
|
+
sandbox: config.sandbox,
|
|
555
|
+
allowDangerouslySkipPermissions: config.allow_dangerously_skip_permissions,
|
|
556
|
+
permissionPromptToolName: config.permission_prompt_tool_name,
|
|
557
|
+
executable: config.executable,
|
|
558
|
+
executableArgs: config.executable_args,
|
|
559
|
+
extraArgs: config.extra_args,
|
|
560
|
+
pathToClaudeCodeExecutable: config.path_to_claude_code_executable ? safeResolve(basePath, config.path_to_claude_code_executable) : void 0,
|
|
561
|
+
settingSources: config.setting_sources ?? [],
|
|
562
|
+
tools,
|
|
563
|
+
enableFileCheckpointing: config.enable_file_checkpointing,
|
|
564
|
+
persistSession: config.persist_session,
|
|
565
|
+
taskBudget: config.task_budget,
|
|
566
|
+
env: {}
|
|
567
|
+
};
|
|
568
|
+
const runtimeCallbackBypassesCache = Boolean(config.can_use_tool) || Boolean(config.on_elicitation) || Boolean(config.hooks) || Boolean(config.spawn_claude_code_process) || config.ask_user_question?.behavior === "random";
|
|
569
|
+
const activeMcpConfig = config.mcp?.enabled !== false && (config.mcp?.server || (config.mcp?.servers?.length ?? 0) > 0) ? config.mcp : void 0;
|
|
570
|
+
const sensitiveMcpBypassesCache = mcpConfigContainsCacheSensitiveData(activeMcpConfig);
|
|
571
|
+
const settingsConfigurationBypassesCache = config.settings !== void 0 || config.managed_settings !== void 0;
|
|
572
|
+
const extraArgsBypassCache = Object.keys(config.extra_args ?? {}).length > 0;
|
|
573
|
+
const promptCredentialOverrideBypassesCache = config.env !== this.config.env || config.apiKey !== this.config.apiKey;
|
|
574
|
+
const statefulSessionBypassesCache = Boolean(config.continue || config.resume || config.session_id);
|
|
575
|
+
const externalCredentialProviderBypassesCache = config.apiKeyRequired === false || Boolean(env.CLAUDE_CODE_USE_BEDROCK || env.CLAUDE_CODE_USE_VERTEX);
|
|
576
|
+
if (runtimeCallbackBypassesCache) logger.debug("[ClaudeCodeSDKProvider] Bypassing cache: runtime callback is not cache-stable");
|
|
577
|
+
if (sensitiveMcpBypassesCache) logger.debug("[ClaudeCodeSDKProvider] Bypassing cache: MCP configuration contains secrets");
|
|
578
|
+
if (credentialCacheScope) logger.debug("[ClaudeCodeSDKProvider] Scoping cache to in-memory credential identity");
|
|
579
|
+
if (settingsConfigurationBypassesCache) logger.debug("[ClaudeCodeSDKProvider] Bypassing cache: SDK settings are externally mutable");
|
|
580
|
+
if (extraArgsBypassCache) logger.debug("[ClaudeCodeSDKProvider] Bypassing cache: extra_args is open-ended");
|
|
581
|
+
if (promptCredentialOverrideBypassesCache) logger.debug("[ClaudeCodeSDKProvider] Bypassing cache: prompt config overrides credentials or environment");
|
|
582
|
+
if (statefulSessionBypassesCache) logger.debug("[ClaudeCodeSDKProvider] Bypassing cache: session history is mutable");
|
|
583
|
+
if (externalCredentialProviderBypassesCache) logger.debug("[ClaudeCodeSDKProvider] Bypassing cache: external credential identity is not cache-stable");
|
|
584
|
+
const cacheResult = inIsolatedWorkspace || runtimeCallbackBypassesCache || sensitiveMcpBypassesCache || settingsConfigurationBypassesCache || extraArgsBypassCache || promptCredentialOverrideBypassesCache || statefulSessionBypassesCache || externalCredentialProviderBypassesCache ? {
|
|
585
|
+
shouldReadCache: false,
|
|
586
|
+
shouldWriteCache: false
|
|
587
|
+
} : await initializeAgenticCache({
|
|
588
|
+
cacheKeyPrefix: "anthropic:claude-agent-sdk",
|
|
589
|
+
workingDir,
|
|
590
|
+
bustCache: context?.bustCache,
|
|
591
|
+
mcp: activeMcpConfig,
|
|
592
|
+
cacheMcp: config.cache_mcp
|
|
593
|
+
}, {
|
|
594
|
+
prompt,
|
|
595
|
+
cacheKeyQueryOptions,
|
|
596
|
+
...credentialCacheScope ? { credentialCacheScope } : {},
|
|
597
|
+
...config.ask_user_question ? { ask_user_question: config.ask_user_question } : {}
|
|
598
|
+
});
|
|
599
|
+
const cachedResponse = await getCachedResponse(cacheResult, "Claude Agent SDK");
|
|
600
|
+
if (callOptions?.abortSignal?.aborted) return { error: ABORTED_BEFORE_START_ERROR };
|
|
601
|
+
if (cachedResponse) return cachedResponse;
|
|
602
|
+
const mcpServers = config.mcp ? await transformMCPConfigToClaudeCode(config.mcp) : {};
|
|
603
|
+
if (workingDir) {
|
|
604
|
+
let stats;
|
|
605
|
+
try {
|
|
606
|
+
stats = await fsPromises.stat(workingDir);
|
|
607
|
+
} catch (err) {
|
|
608
|
+
throw new Error(`Working dir ${config.working_dir} does not exist or isn't accessible: ${err.message}`);
|
|
609
|
+
}
|
|
610
|
+
if (!stats.isDirectory()) throw new Error(`Working dir ${config.working_dir} is not a directory`);
|
|
611
|
+
} else if (isTempDir) workingDir = await fsPromises.mkdtemp(path.join(os.tmpdir(), "promptfoo-claude-agent-sdk-"));
|
|
612
|
+
if (callOptions?.abortSignal?.aborted) {
|
|
613
|
+
if (isTempDir && workingDir) await fsPromises.rm(workingDir, {
|
|
614
|
+
recursive: true,
|
|
615
|
+
force: true
|
|
616
|
+
});
|
|
617
|
+
return { error: ABORTED_BEFORE_START_ERROR };
|
|
618
|
+
}
|
|
619
|
+
const abortController = new AbortController();
|
|
620
|
+
let abortHandler;
|
|
621
|
+
if (callOptions?.abortSignal) {
|
|
622
|
+
abortHandler = () => {
|
|
623
|
+
abortController.abort(callOptions.abortSignal.reason);
|
|
624
|
+
};
|
|
625
|
+
callOptions.abortSignal.addEventListener("abort", abortHandler);
|
|
626
|
+
}
|
|
627
|
+
const options = {
|
|
628
|
+
...cacheKeyQueryOptions,
|
|
629
|
+
env,
|
|
630
|
+
abortController,
|
|
631
|
+
mcpServers,
|
|
632
|
+
cwd: workingDir,
|
|
633
|
+
stderr: config.stderr,
|
|
634
|
+
spawnClaudeCodeProcess: config.spawn_claude_code_process,
|
|
635
|
+
canUseTool,
|
|
636
|
+
hooks,
|
|
637
|
+
onElicitation: config.on_elicitation,
|
|
638
|
+
title: config.title
|
|
639
|
+
};
|
|
640
|
+
const queryParams = {
|
|
641
|
+
prompt,
|
|
642
|
+
options
|
|
643
|
+
};
|
|
644
|
+
const needsUsageBaseline = Boolean(config.resume || config.continue || config.fork_session || [
|
|
645
|
+
"resume",
|
|
646
|
+
"r",
|
|
647
|
+
"continue",
|
|
648
|
+
"c",
|
|
649
|
+
"fork-session"
|
|
650
|
+
].some((key) => Object.prototype.hasOwnProperty.call(config.extra_args ?? {}, key)));
|
|
651
|
+
let query;
|
|
652
|
+
let usageBaseline;
|
|
653
|
+
let captureUsageBaseline;
|
|
654
|
+
if (needsUsageBaseline) options.hooks = {
|
|
655
|
+
...hooks,
|
|
656
|
+
UserPromptSubmit: [{ hooks: [async () => {
|
|
657
|
+
captureUsageBaseline ??= (async () => {
|
|
658
|
+
let timer;
|
|
659
|
+
let cancelSnapshot;
|
|
660
|
+
try {
|
|
661
|
+
const snapshot = query?.usage_EXPERIMENTAL_MAY_CHANGE_DO_NOT_RELY_ON_THIS_API_YET;
|
|
662
|
+
if (!snapshot) return;
|
|
663
|
+
const session = (await Promise.race([snapshot.call(query, { skipBehaviors: true }), new Promise((_, reject) => {
|
|
664
|
+
cancelSnapshot = () => reject(/* @__PURE__ */ new Error("Usage baseline cancelled"));
|
|
665
|
+
if (abortController.signal.aborted) {
|
|
666
|
+
cancelSnapshot();
|
|
667
|
+
return;
|
|
668
|
+
}
|
|
669
|
+
abortController.signal.addEventListener("abort", cancelSnapshot, { once: true });
|
|
670
|
+
timer = setTimeout(() => reject(/* @__PURE__ */ new Error("Usage baseline timed out")), USAGE_BASELINE_TIMEOUT_MS);
|
|
671
|
+
})]))?.session;
|
|
672
|
+
if (session && Number.isFinite(session.total_cost_usd) && session.total_cost_usd >= 0 && session.model_usage && typeof session.model_usage === "object" && !Array.isArray(session.model_usage) && Object.values(session.model_usage).every((usage) => usage && typeof usage === "object" && MODEL_USAGE_COUNTERS.every((key) => usage[key] === void 0 || Number.isFinite(usage[key]) && usage[key] >= 0))) usageBaseline = session;
|
|
673
|
+
} catch {} finally {
|
|
674
|
+
clearTimeout(timer);
|
|
675
|
+
if (cancelSnapshot) abortController.signal.removeEventListener("abort", cancelSnapshot);
|
|
676
|
+
}
|
|
677
|
+
})();
|
|
678
|
+
await captureUsageBaseline;
|
|
679
|
+
return {};
|
|
680
|
+
}] }, ...hooks?.UserPromptSubmit ?? []]
|
|
681
|
+
};
|
|
682
|
+
logger.debug(`Calling Claude Agent SDK: ${JSON.stringify({
|
|
683
|
+
prompt,
|
|
684
|
+
options: {
|
|
685
|
+
...options,
|
|
686
|
+
mcpServers: options.mcpServers ? Object.keys(options.mcpServers) : void 0,
|
|
687
|
+
env: Object.keys(env).length > 0 ? Object.keys(env) : void 0
|
|
688
|
+
}
|
|
689
|
+
})}`);
|
|
690
|
+
try {
|
|
691
|
+
return await withGenAISpan({
|
|
692
|
+
system: "anthropic",
|
|
693
|
+
operationName: "invoke_agent",
|
|
694
|
+
model: config.model || "Claude Code",
|
|
695
|
+
agentName: "Claude Code",
|
|
696
|
+
providerId: this.providerId,
|
|
697
|
+
traceparent: context?.traceparent,
|
|
698
|
+
maxTokens: config.max_thinking_tokens,
|
|
699
|
+
requestBody: prompt
|
|
700
|
+
}, async () => {
|
|
701
|
+
const ZERO_TRACE_ID = "00000000000000000000000000000000";
|
|
702
|
+
const active = getTraceparent();
|
|
703
|
+
const traceparent = (active && !active.includes(ZERO_TRACE_ID) ? active : void 0) ?? context?.traceparent;
|
|
704
|
+
if (traceparent && !env.TRACEPARENT) env.TRACEPARENT = traceparent;
|
|
705
|
+
const [, tpTraceId, tpSpanId] = traceparent ? traceparent.split("-") : [];
|
|
706
|
+
if (tpTraceId && tpSpanId) env.OTEL_RESOURCE_ATTRIBUTES = appendPromptfooResourceAttrs(env.OTEL_RESOURCE_ATTRIBUTES, tpTraceId, tpSpanId);
|
|
707
|
+
if (!this.claudeCodeModule) this.claudeCodeModule = await loadClaudeCodeSDK();
|
|
708
|
+
const res = await this.claudeCodeModule.query(queryParams);
|
|
709
|
+
query = res;
|
|
710
|
+
const toolCallsMap = /* @__PURE__ */ new Map();
|
|
711
|
+
const assistantErrors = [];
|
|
712
|
+
const toolStartTimes = /* @__PURE__ */ new Map();
|
|
713
|
+
let turnCount = 0;
|
|
714
|
+
const toolTurnIndex = /* @__PURE__ */ new Map();
|
|
715
|
+
const deferredSyntheticSpans = [];
|
|
716
|
+
const emitOrDeferSyntheticSpan = (emit) => {
|
|
717
|
+
if (sdkExportsNativeSpans) deferredSyntheticSpans.push(emit);
|
|
718
|
+
else emit();
|
|
719
|
+
};
|
|
720
|
+
const emitTurnSpan = (msg) => {
|
|
721
|
+
const index = turnCount + 1;
|
|
722
|
+
turnCount = index;
|
|
723
|
+
const attributes = {
|
|
724
|
+
"gen_ai.turn.index": index,
|
|
725
|
+
[GenAIAttributes.PROVIDER_NAME]: "anthropic"
|
|
726
|
+
};
|
|
727
|
+
if (msg.parent_tool_use_id) {
|
|
728
|
+
attributes["gen_ai.turn.parent_tool_use_id"] = msg.parent_tool_use_id;
|
|
729
|
+
attributes["gen_ai.turn.is_subagent"] = true;
|
|
730
|
+
}
|
|
731
|
+
if (msg.subagent_type) attributes["gen_ai.turn.subagent_type"] = msg.subagent_type;
|
|
732
|
+
if (msg.message?.model) attributes["gen_ai.response.model"] = msg.message.model;
|
|
733
|
+
const usage = msg.message?.usage;
|
|
734
|
+
if (usage) {
|
|
735
|
+
if (typeof usage.input_tokens === "number") attributes["gen_ai.usage.input_tokens"] = usage.input_tokens;
|
|
736
|
+
if (typeof usage.output_tokens === "number") attributes["gen_ai.usage.output_tokens"] = usage.output_tokens;
|
|
737
|
+
}
|
|
738
|
+
if (msg.error) attributes["gen_ai.turn.error"] = msg.error;
|
|
739
|
+
const now = Date.now();
|
|
740
|
+
emitOrDeferSyntheticSpan(() => {
|
|
741
|
+
emitTurnMarkerSpan({
|
|
742
|
+
tracer: getGenAITracer(),
|
|
743
|
+
index,
|
|
744
|
+
startTime: now,
|
|
745
|
+
endTime: now,
|
|
746
|
+
attributes,
|
|
747
|
+
errorMessage: msg.error,
|
|
748
|
+
logLabel: "ClaudeAgentSDK"
|
|
749
|
+
});
|
|
750
|
+
});
|
|
751
|
+
return index;
|
|
752
|
+
};
|
|
753
|
+
const drainOrphans = () => {
|
|
754
|
+
if (toolStartTimes.size === 0) return;
|
|
755
|
+
const endedAt = Date.now();
|
|
756
|
+
for (const [toolUseId, startMs] of toolStartTimes) {
|
|
757
|
+
const entry = toolCallsMap.get(toolUseId);
|
|
758
|
+
if (entry) {
|
|
759
|
+
const turnIndex = toolTurnIndex.get(toolUseId);
|
|
760
|
+
emitOrDeferSyntheticSpan(() => {
|
|
761
|
+
emitToolSpan(entry, startMs, endedAt, false, true, turnIndex);
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
toolStartTimes.clear();
|
|
766
|
+
toolTurnIndex.clear();
|
|
767
|
+
};
|
|
768
|
+
let lastResultMsg;
|
|
769
|
+
let lastMainResultMsg;
|
|
770
|
+
let resultMsgCount = 0;
|
|
771
|
+
for await (const msg of res) if (msg.type === "assistant") {
|
|
772
|
+
const turnIndex = emitTurnSpan(msg);
|
|
773
|
+
for (const block of msg.message.content) if (block.type === "tool_use") {
|
|
774
|
+
toolCallsMap.set(block.id, {
|
|
775
|
+
id: block.id,
|
|
776
|
+
name: block.name,
|
|
777
|
+
input: block.input,
|
|
778
|
+
output: void 0,
|
|
779
|
+
is_error: false,
|
|
780
|
+
parentToolUseId: msg.parent_tool_use_id
|
|
781
|
+
});
|
|
782
|
+
toolStartTimes.set(block.id, Date.now());
|
|
783
|
+
toolTurnIndex.set(block.id, turnIndex);
|
|
784
|
+
}
|
|
785
|
+
if (msg.error) assistantErrors.push({
|
|
786
|
+
error: msg.error,
|
|
787
|
+
uuid: msg.uuid,
|
|
788
|
+
parentToolUseId: msg.parent_tool_use_id,
|
|
789
|
+
...msg.request_id ? { request_id: msg.request_id } : {},
|
|
790
|
+
...msg.subagent_type ? { subagent_type: msg.subagent_type } : {},
|
|
791
|
+
...msg.task_description ? { task_description: msg.task_description } : {}
|
|
792
|
+
});
|
|
793
|
+
} else if (msg.type === "user") {
|
|
794
|
+
const content = msg.message?.content;
|
|
795
|
+
if (Array.isArray(content)) {
|
|
796
|
+
for (const block of content) if (block.type === "tool_result") {
|
|
797
|
+
const entry = toolCallsMap.get(block.tool_use_id);
|
|
798
|
+
if (entry) {
|
|
799
|
+
entry.output = entry.name === "TaskOutput" && isRawSubagentTranscript(msg.tool_use_result) && !config.forward_subagent_text ? REDACTED_SUBAGENT_TRANSCRIPT : block.content;
|
|
800
|
+
entry.is_error = block.is_error ?? false;
|
|
801
|
+
const startMs = toolStartTimes.get(block.tool_use_id);
|
|
802
|
+
if (startMs !== void 0) {
|
|
803
|
+
const endedAt = Date.now();
|
|
804
|
+
const turnIndex = toolTurnIndex.get(block.tool_use_id);
|
|
805
|
+
emitOrDeferSyntheticSpan(() => {
|
|
806
|
+
emitToolSpan(entry, startMs, endedAt, entry.is_error, false, turnIndex);
|
|
807
|
+
});
|
|
808
|
+
toolStartTimes.delete(block.tool_use_id);
|
|
809
|
+
toolTurnIndex.delete(block.tool_use_id);
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
} else if (msg.type === "result") {
|
|
815
|
+
lastResultMsg = msg;
|
|
816
|
+
resultMsgCount++;
|
|
817
|
+
if (!(msg.origin?.kind === "task-notification" && !("subkind" in msg.origin && msg.origin.subkind === "scheduled-trigger"))) lastMainResultMsg = msg;
|
|
818
|
+
}
|
|
819
|
+
drainOrphans();
|
|
820
|
+
const finalMsg = lastMainResultMsg ?? lastResultMsg;
|
|
821
|
+
if (!finalMsg) return { error: "Claude Agent SDK call didn't return a result" };
|
|
822
|
+
if (sdkExportsNativeSpans && tpTraceId && tpSpanId) {
|
|
823
|
+
let nativeSpansArrived = false;
|
|
824
|
+
try {
|
|
825
|
+
nativeSpansArrived = await waitForNativeTraceExport(tpTraceId, tpSpanId, env, callOptions?.abortSignal);
|
|
826
|
+
} catch (error) {
|
|
827
|
+
logger.debug("[ClaudeAgentSDK] Unable to inspect native trace export", { error: error instanceof Error ? error.message : String(error) });
|
|
828
|
+
}
|
|
829
|
+
if (!nativeSpansArrived && !callOptions?.abortSignal?.aborted) {
|
|
830
|
+
logger.warn("[ClaudeAgentSDK] Native trace spans did not reach the receiver before grading; emitting synthetic turn and tool spans.");
|
|
831
|
+
for (const emit of deferredSyntheticSpans) emit();
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
if ((!lastMainResultMsg || lastMainResultMsg.origin === void 0) && resultMsgCount > 1 && finalMsg.subtype === "success" && finalMsg.terminal_reason === void 0) {
|
|
835
|
+
logger.warn(`[ClaudeAgentSDK] Stream produced ${resultMsgCount} result messages and the last had no terminal_reason; returning it as the main-agent result, but the stream may have been truncated.`);
|
|
836
|
+
trace.getActiveSpan()?.setStatus({
|
|
837
|
+
code: SpanStatusCode.ERROR,
|
|
838
|
+
message: "stream closed without terminal_reason after multiple result messages"
|
|
839
|
+
});
|
|
840
|
+
}
|
|
841
|
+
const raw = JSON.stringify(finalMsg);
|
|
842
|
+
const usageUnavailable = needsUsageBaseline && !usageBaseline;
|
|
843
|
+
if (usageUnavailable) logger.warn("[ClaudeAgentSDK] Could not measure resumed-session usage before inference; per-call cost and token usage are unavailable. Raw session totals are preserved.");
|
|
844
|
+
const counterReset = usageBaseline && (finalMsg.total_cost_usd < usageBaseline.total_cost_usd || Object.entries(finalMsg.modelUsage ?? {}).some(([model, usage]) => MODEL_USAGE_COUNTERS.some((key) => typeof usage[key] === "number" && usage[key] < (usageBaseline?.model_usage[model]?.[key] ?? 0))));
|
|
845
|
+
const modelUsage = usageUnavailable ? void 0 : usageBaseline && !counterReset ? subtractSessionUsage(finalMsg.modelUsage ?? {}, usageBaseline.model_usage) : finalMsg.modelUsage;
|
|
846
|
+
const usageSources = Object.values(modelUsage ?? {});
|
|
847
|
+
if (!usageUnavailable && usageSources.length === 0 && finalMsg.usage) usageSources.push({
|
|
848
|
+
inputTokens: finalMsg.usage.input_tokens,
|
|
849
|
+
outputTokens: finalMsg.usage.output_tokens,
|
|
850
|
+
thinkingTokens: finalMsg.usage.output_tokens_details?.thinking_tokens,
|
|
851
|
+
cacheReadInputTokens: finalMsg.usage.cache_read_input_tokens,
|
|
852
|
+
cacheCreationInputTokens: finalMsg.usage.cache_creation_input_tokens
|
|
853
|
+
});
|
|
854
|
+
const usage = usageSources.reduce((total, source) => ({
|
|
855
|
+
inputTokens: total.inputTokens + (source.inputTokens ?? 0),
|
|
856
|
+
outputTokens: total.outputTokens + (source.outputTokens ?? 0),
|
|
857
|
+
thinkingTokens: source.thinkingTokens == null ? total.thinkingTokens : (total.thinkingTokens ?? 0) + source.thinkingTokens,
|
|
858
|
+
cacheReadInputTokens: total.cacheReadInputTokens + (source.cacheReadInputTokens ?? 0),
|
|
859
|
+
cacheCreationInputTokens: total.cacheCreationInputTokens + (source.cacheCreationInputTokens ?? 0)
|
|
860
|
+
}), {
|
|
861
|
+
inputTokens: 0,
|
|
862
|
+
outputTokens: 0,
|
|
863
|
+
cacheReadInputTokens: 0,
|
|
864
|
+
cacheCreationInputTokens: 0
|
|
865
|
+
});
|
|
866
|
+
const promptTokens = usage.inputTokens + usage.cacheReadInputTokens + usage.cacheCreationInputTokens;
|
|
867
|
+
const tokenUsage = usageSources.length ? {
|
|
868
|
+
prompt: promptTokens,
|
|
869
|
+
completion: usage.outputTokens,
|
|
870
|
+
total: promptTokens + usage.outputTokens,
|
|
871
|
+
...usage.thinkingTokens != null || usage.cacheReadInputTokens > 0 || usage.cacheCreationInputTokens > 0 ? { completionDetails: {
|
|
872
|
+
...usage.thinkingTokens != null && { reasoning: usage.thinkingTokens },
|
|
873
|
+
cacheReadInputTokens: usage.cacheReadInputTokens,
|
|
874
|
+
cacheCreationInputTokens: usage.cacheCreationInputTokens
|
|
875
|
+
} } : {}
|
|
876
|
+
} : {};
|
|
877
|
+
const cost = usageUnavailable ? void 0 : Math.max(0, (finalMsg.total_cost_usd ?? 0) - (counterReset ? 0 : usageBaseline?.total_cost_usd ?? 0));
|
|
878
|
+
const usageMetadata = needsUsageBaseline ? {
|
|
879
|
+
usageAccounting: usageUnavailable ? "unavailable" : "query",
|
|
880
|
+
sessionCost: finalMsg.total_cost_usd,
|
|
881
|
+
sessionModelUsage: finalMsg.modelUsage
|
|
882
|
+
} : {};
|
|
883
|
+
const sessionId = finalMsg.session_id;
|
|
884
|
+
const toolCallsArray = Array.from(toolCallsMap.values());
|
|
885
|
+
const skillCalls = deriveSkillCalls(toolCallsArray);
|
|
886
|
+
const abortedTerminalReason = typeof finalMsg.terminal_reason === "string" && (finalMsg.terminal_reason.startsWith("aborted_") || finalMsg.terminal_reason === "hook_stopped") ? finalMsg.terminal_reason : void 0;
|
|
887
|
+
if (abortedTerminalReason) trace.getActiveSpan()?.setStatus({
|
|
888
|
+
code: SpanStatusCode.ERROR,
|
|
889
|
+
message: `aborted: ${abortedTerminalReason}`
|
|
890
|
+
});
|
|
891
|
+
const apiErrorStatus = "api_error_status" in finalMsg ? finalMsg.api_error_status : void 0;
|
|
892
|
+
if (finalMsg.subtype === "success") {
|
|
893
|
+
logger.debug(`Claude Agent SDK response: ${raw}`);
|
|
894
|
+
const response = {
|
|
895
|
+
output: finalMsg.structured_output === void 0 ? finalMsg.result : finalMsg.structured_output,
|
|
896
|
+
tokenUsage,
|
|
897
|
+
cost,
|
|
898
|
+
raw,
|
|
899
|
+
sessionId,
|
|
900
|
+
metadata: {
|
|
901
|
+
skillCalls,
|
|
902
|
+
toolCalls: toolCallsArray,
|
|
903
|
+
numTurns: finalMsg.num_turns,
|
|
904
|
+
durationMs: finalMsg.duration_ms,
|
|
905
|
+
durationApiMs: finalMsg.duration_api_ms,
|
|
906
|
+
modelUsage,
|
|
907
|
+
...usageMetadata,
|
|
908
|
+
permissionDenials: finalMsg.permission_denials,
|
|
909
|
+
...finalMsg.terminal_reason === void 0 ? {} : { terminalReason: finalMsg.terminal_reason },
|
|
910
|
+
...finalMsg.structured_output === void 0 ? {} : { structuredOutput: finalMsg.structured_output },
|
|
911
|
+
...apiErrorStatus === void 0 || apiErrorStatus === null ? {} : { apiErrorStatus },
|
|
912
|
+
...assistantErrors.length > 0 ? { assistantErrors } : {}
|
|
913
|
+
}
|
|
914
|
+
};
|
|
915
|
+
await cacheResponse(cacheResult, response, "Claude Agent SDK");
|
|
916
|
+
return response;
|
|
917
|
+
}
|
|
918
|
+
const lastAssistantError = assistantErrors.length > 0 ? assistantErrors[assistantErrors.length - 1].error : void 0;
|
|
919
|
+
return {
|
|
920
|
+
error: lastAssistantError ? `Claude Agent SDK call failed: ${finalMsg.subtype} (${lastAssistantError})` : `Claude Agent SDK call failed: ${finalMsg.subtype}`,
|
|
921
|
+
tokenUsage,
|
|
922
|
+
cost,
|
|
923
|
+
raw,
|
|
924
|
+
sessionId,
|
|
925
|
+
metadata: {
|
|
926
|
+
skillCalls,
|
|
927
|
+
toolCalls: toolCallsArray,
|
|
928
|
+
numTurns: finalMsg.num_turns,
|
|
929
|
+
durationMs: finalMsg.duration_ms,
|
|
930
|
+
durationApiMs: finalMsg.duration_api_ms,
|
|
931
|
+
modelUsage,
|
|
932
|
+
...usageMetadata,
|
|
933
|
+
permissionDenials: finalMsg.permission_denials,
|
|
934
|
+
...finalMsg.terminal_reason === void 0 ? {} : { terminalReason: finalMsg.terminal_reason },
|
|
935
|
+
...apiErrorStatus === void 0 || apiErrorStatus === null ? {} : { apiErrorStatus },
|
|
936
|
+
...assistantErrors.length > 0 ? { assistantErrors } : {}
|
|
937
|
+
}
|
|
938
|
+
};
|
|
939
|
+
}, (response) => {
|
|
940
|
+
const metadata = response.metadata ?? {};
|
|
941
|
+
const additional = {};
|
|
942
|
+
if (typeof metadata.numTurns === "number") additional["promptfoo.agent.num_turns"] = metadata.numTurns;
|
|
943
|
+
if (typeof metadata.durationApiMs === "number") additional["promptfoo.agent.duration_api_ms"] = metadata.durationApiMs;
|
|
944
|
+
if (typeof response.cost === "number" && response.cost > 0) additional["promptfoo.agent.cost_usd"] = response.cost;
|
|
945
|
+
const toolCalls = metadata.toolCalls;
|
|
946
|
+
if (Array.isArray(toolCalls) && toolCalls.length > 0) additional["promptfoo.agent.tool_call_count"] = toolCalls.length;
|
|
947
|
+
let responseModel;
|
|
948
|
+
const modelUsage = metadata.modelUsage;
|
|
949
|
+
if (modelUsage && typeof modelUsage === "object" && !Array.isArray(modelUsage)) {
|
|
950
|
+
let topUsage = -1;
|
|
951
|
+
for (const [key, usage] of Object.entries(modelUsage)) {
|
|
952
|
+
if (typeof key !== "string" || key.length === 0 || key === "undefined") continue;
|
|
953
|
+
const total = (usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0);
|
|
954
|
+
if (total > topUsage) {
|
|
955
|
+
topUsage = total;
|
|
956
|
+
responseModel = key;
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
const finishReasons = typeof metadata.terminalReason === "string" ? [metadata.terminalReason] : void 0;
|
|
961
|
+
return {
|
|
962
|
+
tokenUsage: response.tokenUsage,
|
|
963
|
+
responseModel,
|
|
964
|
+
responseId: response.sessionId,
|
|
965
|
+
finishReasons,
|
|
966
|
+
cacheHit: response.cached,
|
|
967
|
+
responseBody: typeof response.output === "string" ? response.output : response.output === void 0 ? void 0 : JSON.stringify(response.output),
|
|
968
|
+
additionalAttributes: Object.keys(additional).length > 0 ? additional : void 0
|
|
969
|
+
};
|
|
970
|
+
});
|
|
971
|
+
} catch (error) {
|
|
972
|
+
if (error?.name === "AbortError" || callOptions?.abortSignal?.aborted) {
|
|
973
|
+
logger.warn("Claude Agent SDK call aborted");
|
|
974
|
+
return { error: "Claude Agent SDK call aborted" };
|
|
975
|
+
}
|
|
976
|
+
logger.error(`Error calling Claude Agent SDK: ${error}`);
|
|
977
|
+
return { error: `Error calling Claude Agent SDK: ${error}` };
|
|
978
|
+
} finally {
|
|
979
|
+
if (isTempDir && workingDir) await fsPromises.rm(workingDir, {
|
|
980
|
+
recursive: true,
|
|
981
|
+
force: true
|
|
982
|
+
});
|
|
983
|
+
if (callOptions?.abortSignal && abortHandler) callOptions.abortSignal.removeEventListener("abort", abortHandler);
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
toString() {
|
|
987
|
+
return "[Anthropic Claude Agent SDK Provider]";
|
|
988
|
+
}
|
|
989
|
+
requiresApiKey() {
|
|
990
|
+
return false;
|
|
991
|
+
}
|
|
992
|
+
getApiKey() {
|
|
993
|
+
return this.config?.apiKey || this.env?.ANTHROPIC_API_KEY || getEnvString("ANTHROPIC_API_KEY");
|
|
994
|
+
}
|
|
995
|
+
async cleanup() {}
|
|
996
|
+
};
|
|
997
|
+
//#endregion
|
|
998
|
+
export { ClaudeCodeSDKProvider };
|
|
999
|
+
|
|
1000
|
+
//# sourceMappingURL=claude-agent-sdk-Cr-jqJZl.js.map
|