promptfoo 0.120.27 → 0.121.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/src/{ListApp-8WOe2nT6.js → ListApp-Du7YVwj5.js} +2 -4
- package/dist/src/accounts-B0pgC1oV.js +206 -0
- package/dist/src/{accounts-DVINui-2.js → accounts-Bm2D8Db9.js} +39 -34
- package/dist/src/{accounts-CPDRAMND.js → accounts-CiBLOnA7.js} +38 -33
- package/dist/src/{accounts-Fl2J3_Fu.cjs → accounts-gtkH-5KX.cjs} +77 -78
- package/dist/src/{agentic-utils-D922n6mm.js → agentic-utils-DS1g3GLF.js} +9 -10
- package/dist/src/{agents-BcsN_BgB.js → agents-9qiOy0ho.js} +16 -12
- package/dist/src/{agents-BXLmVsxR.js → agents-CBr9A01V.js} +37 -37
- package/dist/src/{agents-pMfppv9Z.js → agents-CmvBq8LV.js} +16 -18
- package/dist/src/{agents-hqgSV-3o.js → agents-D__IdAlg.js} +39 -40
- package/dist/src/{agents-BO2n8Z0d.cjs → agents-DbRtpYxR.cjs} +37 -40
- package/dist/src/{agents-BdUTAwi-.js → agents-DgF2zDag.js} +37 -42
- package/dist/src/{agents-DgJf2-ez.cjs → agents-Di9DKPzn.cjs} +16 -17
- package/dist/src/{agents-DNvSH78i.js → agents-cLXA8a_8.js} +17 -19
- package/dist/src/{aimlapi-DtgPI0nE.js → aimlapi-B4rcnZgv.js} +15 -17
- package/dist/src/{aimlapi-BE_Tg9Fl.cjs → aimlapi-BvlNH0gr.cjs} +15 -16
- package/dist/src/{aimlapi-DOib86oE.js → aimlapi-CnkC2HqE.js} +16 -18
- package/dist/src/{aimlapi-DTPACCB1.js → aimlapi-DHJU_kcV.js} +15 -4
- package/dist/src/app/assets/index-4LKxG2CG.js +439 -0
- package/dist/src/app/assets/{index-NCn4eVBv.css → index-C3zcsZFQ.css} +1 -1
- package/dist/src/app/assets/vendor-charts-BnDWwBlI.js +36 -0
- package/dist/src/app/index.html +3 -3
- package/dist/src/app/tsconfig.app.tsbuildinfo +1 -1
- package/dist/src/{audio-BnRUGAm_.js → audio-Bkv46et0.js} +6 -5
- package/dist/src/{audio-Cwo68yZS.cjs → audio-CGMyULza.cjs} +6 -7
- package/dist/src/{audio-MSRki4JU.js → audio-ClI_AFre.js} +6 -8
- package/dist/src/{audio-BRYU0BFo.js → audio-Dz3z7s3J.js} +7 -9
- package/dist/src/{base-pGVmXNl4.cjs → base-CGrhspbK.cjs} +36 -38
- package/dist/src/{base-h961VXYk.js → base-CpjcHe4e.js} +11 -13
- package/dist/src/base-DLKtKMFh.js +193 -0
- package/dist/src/{base-XB2tDJrB.js → base-Dy1V8--Z.js} +11 -13
- package/dist/src/blobs-BDbfYdrJ.js +236 -0
- package/dist/src/{blobs-CR5C4Ihh.js → blobs-CBO20krR.js} +9 -12
- package/dist/src/{blobs-BM_e6hCa.js → blobs-CMHN0Qcz.js} +9 -12
- package/dist/src/{blobs-B-KQAFhX.cjs → blobs-D23XLin-.cjs} +34 -37
- package/dist/src/{cache-jsiwsAJv.js → cache-BVeDlD87.js} +132 -117
- package/dist/src/{cache-CIpsoBZR.js → cache-C4Nxf52C.js} +132 -118
- package/dist/src/cache-CeUpFm3M.cjs +5 -0
- package/dist/src/{cache-BTVYfbka.cjs → cache-Dh5WtQps.cjs} +182 -168
- package/dist/src/cache-i1P6crbO.js +756 -0
- package/dist/src/cache-n-RCJ-hL.js +6 -0
- package/dist/src/{chat-BcPjZXIp.js → chat-BiKyneZl.js} +45 -46
- package/dist/src/{chat-D31K7C4u.cjs → chat-C1Qst7jL.cjs} +20 -21
- package/dist/src/{chat-B84t99NW.js → chat-C2jrdPMx.js} +20 -9
- package/dist/src/{chat-BE44YOc6.cjs → chat-CgF-J-Jj.cjs} +65 -66
- package/dist/src/{chat-DwWifjxi.js → chat-CzkrVDfz.js} +20 -22
- package/dist/src/chat-DJIw17u0.js +766 -0
- package/dist/src/{chat-CcUCysjU.js → chat-DqxYYtWA.js} +45 -46
- package/dist/src/{chat-DZM2GUHO.js → chat-qmatte1u.js} +21 -23
- package/dist/src/{chatkit-D67HS_0b.js → chatkit-65VXf5SR.js} +58 -58
- package/dist/src/{chatkit-DAB_qfzI.js → chatkit-Be-Q-a9F.js} +58 -60
- package/dist/src/{chatkit-Biqb_wsD.js → chatkit-BxFvW8KY.js} +58 -60
- package/dist/src/{chatkit-PGG4ZYIn.cjs → chatkit-DKyPi1Gs.cjs} +58 -60
- package/dist/src/chunk-DEq-mXcV.js +15 -0
- package/dist/src/chunk-DRamLcfz.js +16 -0
- package/dist/src/{claude-agent-sdk-SVM6AdBu.js → claude-agent-sdk-Apiy0iaz.js} +31 -31
- package/dist/src/{claude-agent-sdk-C-IOTPfo.js → claude-agent-sdk-D2bJee9S.js} +31 -29
- package/dist/src/{claude-agent-sdk-C9SiaQub.cjs → claude-agent-sdk-D9Z5Pr9X.cjs} +31 -28
- package/dist/src/{claude-agent-sdk-CiluSyW1.js → claude-agent-sdk-DfCoW0E6.js} +33 -20
- package/dist/src/cloud-BBh91EUK.js +4 -0
- package/dist/src/{cloud-CZ-q9Ier.js → cloud-C0dlstV_.js} +7 -9
- package/dist/src/{cloudflare-ai-BahKHyhh.js → cloudflare-ai-8TDxHR0x.js} +16 -18
- package/dist/src/{cloudflare-ai-v_qZD6_q.js → cloudflare-ai-BxAGvfju.js} +17 -19
- package/dist/src/{cloudflare-ai-Dfahv5SY.cjs → cloudflare-ai-CknbZ5LJ.cjs} +16 -17
- package/dist/src/{cloudflare-ai-Dxyt50Nl.js → cloudflare-ai-g7PB6VHR.js} +16 -4
- package/dist/src/{cloudflare-gateway-Bi_FpOFy.js → cloudflare-gateway-B9HWA5wf.js} +23 -23
- package/dist/src/{cloudflare-gateway-BPWoZIzJ.cjs → cloudflare-gateway-BSnDmHYo.cjs} +21 -22
- package/dist/src/{cloudflare-gateway-C0guUNwk.js → cloudflare-gateway-CKDb4dJ8.js} +26 -14
- package/dist/src/{cloudflare-gateway-btS7h1OZ.js → cloudflare-gateway-CP9QEWYS.js} +21 -25
- package/dist/src/{codex-sdk-DSxAnbfT.js → codex-sdk-C6UMlxwV.js} +28 -29
- package/dist/src/{codex-sdk-IYVi9fuM.js → codex-sdk-DUwKWezN.js} +28 -27
- package/dist/src/{codex-sdk-DulY0ZRq.js → codex-sdk-GGAw0qbD.js} +28 -29
- package/dist/src/{codex-sdk-DFKMtAyf.cjs → codex-sdk-fAO0c3yA.cjs} +28 -29
- package/dist/src/{cometapi-DzrR3SR_.js → cometapi-BL9yvj_f.js} +16 -4
- package/dist/src/{cometapi-DIO64tf4.cjs → cometapi-C4xSqeID.cjs} +21 -22
- package/dist/src/{cometapi-C9EEpJzT.js → cometapi-CUQq3H_a.js} +21 -24
- package/dist/src/{cometapi-DkNBMk0G.js → cometapi-DFNiKmSz.js} +17 -19
- package/dist/src/{completion-CG29bfKX.js → completion-5MzrpJxT.js} +11 -13
- package/dist/src/{completion-CCRT4kX1.cjs → completion-CM6oK8PS.cjs} +21 -23
- package/dist/src/{completion-Bgf1VJoq.js → completion-DZ083F31.js} +11 -13
- package/dist/src/completion-qRoZAYRB.js +120 -0
- package/dist/src/{createHash-Dw_iLu31.js → createHash-CTQmL3G2.js} +2 -3
- package/dist/src/{createHash-CYQy4YeL.cjs → createHash-CfZSc0b4.cjs} +13 -14
- package/dist/src/{createHash-CJcfskIZ.js → createHash-Da8fMwqB.js} +2 -3
- package/dist/src/createHash-DmPQkvBh.js +15 -0
- package/dist/src/{docker-D-ayp2FW.js → docker-Bb5dcxr8.js} +18 -20
- package/dist/src/{docker-B81N0t4e.js → docker-BvfL2BrW.js} +19 -21
- package/dist/src/{docker-DNcLR4Ig.cjs → docker-DcF2pRrj.cjs} +18 -19
- package/dist/src/{docker-egERKxCF.js → docker-ExVyLp0S.js} +18 -7
- package/dist/src/entrypoint.js +2 -3
- package/dist/src/{errors-DnGCbnx8.js → errors-P6ll7XSJ.js} +2 -2
- package/dist/src/{esm-B9dPm_BF.js → esm-C03C-mv3.js} +17 -20
- package/dist/src/{esm-D2pZ87fL.js → esm-CaIwzWR5.js} +18 -21
- package/dist/src/esm-Cd1AjG1D.js +379 -0
- package/dist/src/{esm-Ct-Joyue.cjs → esm-CnNt7sI4.cjs} +47 -49
- package/dist/src/eval-B3r2CVXr.js +15 -0
- package/dist/src/{eval-C-Nr6wX_.js → eval-Dg2nG4v2.js} +47 -54
- package/dist/src/evalResult-5xwYnECe.js +12 -0
- package/dist/src/evalResult-71lY93Kj.cjs +10 -0
- package/dist/src/{evalResult-DXMWJ3sx.js → evalResult-BBRNtX4I.js} +10 -11
- package/dist/src/{evalResult-4BzI2tmj.js → evalResult-BDMqrapS.js} +16 -12
- package/dist/src/evalResult-Dx5P5cIv.js +10 -0
- package/dist/src/{evalResult-CX8wQecI.cjs → evalResult-fuaI8HkH.cjs} +20 -21
- package/dist/src/{evaluator-8aGyV12L.js → evaluator-BhoWwp5b.js} +211 -235
- package/dist/src/evaluator-Jx6bRZV6.js +36 -0
- package/dist/src/{extractor-V5x_m1i0.js → extractor-C0EVHewb.js} +22 -24
- package/dist/src/extractor-D25qpmGX.js +374 -0
- package/dist/src/{extractor-CD5yKL-G.js → extractor-DReVID0K.js} +22 -24
- package/dist/src/{extractor-C031XmTA.cjs → extractor-pYLLi3wS.cjs} +37 -39
- package/dist/src/{fetch-BmbD-v1L.cjs → fetch-BPkYtG8K.cjs} +244 -277
- package/dist/src/fetch-BxNb_Lp3.js +5 -0
- package/dist/src/{fetch-D3OHf-lV.js → fetch-Cwxnd8zz.js} +36 -44
- package/dist/src/{fetch-CXZI9RRr.js → fetch-Dxpd4_sr.js} +23 -35
- package/dist/src/fetch-HaqdX7U1.js +780 -0
- package/dist/src/{fileExtensions-ePDqouxn.js → fileExtensions-DnqA1y9x.js} +2 -2
- package/dist/src/{fileExtensions-BpuMmaFL.js → fileExtensions-Ds-foDzt.js} +2 -2
- package/dist/src/fileExtensions-LcDYkU4v.js +85 -0
- package/dist/src/{fileExtensions-DkJYkWUy.cjs → fileExtensions-bYh77CN8.cjs} +27 -28
- package/dist/src/{formatDuration-CdevI3An.js → formatDuration-DgBVMN65.js} +2 -2
- package/dist/src/{genaiTracer-Ce19n68P.js → genaiTracer-70Z8BIuV.js} +2 -3
- package/dist/src/{genaiTracer-CqNnnXrE.js → genaiTracer-C1rxGO8Q.js} +2 -3
- package/dist/src/genaiTracer-D3fD9dNV.js +256 -0
- package/dist/src/{genaiTracer-Dres3qrN.cjs → genaiTracer-DN4dQywX.cjs} +13 -14
- package/dist/src/{graders--1y2u9HO.js → graders-BTeBGqjJ.js} +349 -397
- package/dist/src/graders-B_pgMLS2.js +34 -0
- package/dist/src/{graders-DTeBrzWp.js → graders-Bj_Odv7c.js} +349 -397
- package/dist/src/graders-DErokPDO.cjs +32 -0
- package/dist/src/graders-DP7KFFo-.js +13466 -0
- package/dist/src/graders-DR_uNe54.js +32 -0
- package/dist/src/{graders-DohM2dir.cjs → graders-DU49_J8Y.cjs} +684 -732
- package/dist/src/graders-w3176Wz-.js +32 -0
- package/dist/src/{image-B0U4Hqll.js → image-B02ogr_b.js} +7 -9
- package/dist/src/{image-DmE-niFE.js → image-B0h9VEMc.js} +6 -5
- package/dist/src/{image-CuKHuccK.cjs → image-BLmROtN3.cjs} +29 -30
- package/dist/src/{image-DNEIf_aI.js → image-Bb4vWQLM.js} +6 -8
- package/dist/src/{image-DpKl2F15.cjs → image-C1madmKh.cjs} +6 -7
- package/dist/src/{image-C3wHC9_h.js → image-CHfWvljl.js} +9 -10
- package/dist/src/{image-O1u4bCFg.js → image-DS-o-0ph.js} +9 -10
- package/dist/src/image-Dpxa1Jt6.js +257 -0
- package/dist/src/index.cjs +615 -695
- package/dist/src/index.d.cts +271 -7
- package/dist/src/index.d.ts +271 -3
- package/dist/src/index.js +580 -664
- package/dist/src/{interactiveCheck-Bxj1Swex.js → interactiveCheck-BgLZUIt3.js} +7 -8
- package/dist/src/{invariant-DT20jrBd.js → invariant-BtWWVVhl.js} +2 -2
- package/dist/src/{invariant-1pAf2CD1.js → invariant-Ddh24eXh.js} +2 -2
- package/dist/src/{invariant-CKcJAQ6M.cjs → invariant-kfQ8Bu82.cjs} +7 -8
- package/dist/src/invariant-vgHWClmd.js +25 -0
- package/dist/src/{knowledgeBase-CEzQobWX.js → knowledgeBase-B3OoKIej.js} +14 -9
- package/dist/src/{knowledgeBase-Be_zyW4L.js → knowledgeBase-CYTLHOt1.js} +16 -16
- package/dist/src/{knowledgeBase-BZ41IFwq.js → knowledgeBase-D33Ty2l6.js} +14 -18
- package/dist/src/{knowledgeBase-D-5BMXlr.cjs → knowledgeBase-DOO_BM9b.cjs} +14 -15
- package/dist/src/{litellm-DnbRJ2if.js → litellm-AaeZcZQF.js} +18 -19
- package/dist/src/{litellm-hUSNM_M2.cjs → litellm-I_hbp_dc.cjs} +17 -17
- package/dist/src/{litellm-CRDqPhNI.js → litellm-NbjknEh6.js} +17 -18
- package/dist/src/{litellm-9vR8zpfU.js → litellm-TrljxD9G.js} +17 -5
- package/dist/src/{logger-CG1uZPbQ.js → logger-CT3IKMKA.js} +10 -29
- package/dist/src/{logger-B7sBeGa0.cjs → logger-Cp1GPUjj.cjs} +152 -180
- package/dist/src/logger-DLcq4dWf.js +713 -0
- package/dist/src/{logger-LSBxlt7a.js → logger-KkObSCzq.js} +13 -31
- package/dist/src/{luma-ray-4blv9iZ2.js → luma-ray-BS2_tY8L.js} +22 -21
- package/dist/src/{luma-ray-drvgdpP9.js → luma-ray-DDsjcgZZ.js} +20 -13
- package/dist/src/{luma-ray-Hm3d6VJE.cjs → luma-ray-Due0n7di.cjs} +20 -21
- package/dist/src/{luma-ray-B2__8lYH.js → luma-ray-f6I2fft-.js} +20 -23
- package/dist/src/main.js +1170 -1321
- package/dist/src/{messages-Uee41Mj5.js → messages-BS17jdMx.js} +22 -24
- package/dist/src/{messages-XhiwCbi4.cjs → messages-Bs1kC7P4.cjs} +32 -34
- package/dist/src/{messages-CGPPidQr.js → messages-D0lx5qK7.js} +22 -24
- package/dist/src/messages-ZJk778GH.js +240 -0
- package/dist/src/{meteor-BYykdXrV.js → meteor-44VjEACX.js} +3 -4
- package/dist/src/{meteor-CsopaHrH.js → meteor-D-SotUw9.js} +3 -4
- package/dist/src/{meteor-e-E-2vVl.cjs → meteor-DLZZ3osF.cjs} +3 -4
- package/dist/src/{meteor-C8lGP6P4.js → meteor-DUiCJRC-.js} +3 -4
- package/dist/src/{modelslab-yKz-ZNB4.js → modelslab-Bmni6skY.js} +17 -10
- package/dist/src/{modelslab-E9gO-bYd.js → modelslab-Bx9IrZfS.js} +18 -20
- package/dist/src/{modelslab-lUVW0cmB.cjs → modelslab-CoUX6Jc_.cjs} +17 -18
- package/dist/src/{modelslab-ClBkr8_9.js → modelslab-DRb74SP4.js} +17 -19
- package/dist/src/{nova-reel-Dk8jNpId.js → nova-reel-BfPq-0Yk.js} +20 -13
- package/dist/src/{nova-reel-D8CuO6QH.cjs → nova-reel-C_QM18Xn.cjs} +20 -21
- package/dist/src/{nova-reel-u2eF2Cxm.js → nova-reel-D_W1tjMH.js} +22 -21
- package/dist/src/{nova-reel-P9bwvtYX.js → nova-reel-bgjxilYW.js} +20 -23
- package/dist/src/{nova-sonic-CK2rAiKi.js → nova-sonic-CFb5GYhg.js} +30 -26
- package/dist/src/{nova-sonic-BaqWlkds.js → nova-sonic-DIGQNR07.js} +30 -31
- package/dist/src/{nova-sonic-yZapPLv7.js → nova-sonic-De1HW5fD.js} +31 -32
- package/dist/src/{nova-sonic-Ds1C-dpm.cjs → nova-sonic-zfcljeRp.cjs} +30 -31
- package/dist/src/{openai-DUFopMrH.cjs → openai-Cuif0GEt.cjs} +8 -9
- package/dist/src/{openai-PblZ3jUE.js → openai-DElQ-fPX.js} +3 -4
- package/dist/src/{openai-CcN1B8Sb.js → openai-DhbB7eWK.js} +3 -4
- package/dist/src/openai-j-sE2O7r.js +44 -0
- package/dist/src/{openclaw-B6qqDr_u.cjs → openclaw-CSugPYAr.cjs} +188 -130
- package/dist/src/{openclaw-A-3_loM7.js → openclaw-DiSz3I5L.js} +180 -109
- package/dist/src/{openclaw-a3lylB-V.js → openclaw-DuvJKEW5.js} +178 -124
- package/dist/src/{openclaw-COn6QzDi.js → openclaw-tiVYRtr-.js} +178 -122
- package/dist/src/opencode-sdk-0j6rTWNb.js +562 -0
- package/dist/src/opencode-sdk-B3CWY9h_.js +560 -0
- package/dist/src/opencode-sdk-BL764Jdi.cjs +564 -0
- package/dist/src/opencode-sdk-C2y6UkP2.js +560 -0
- package/dist/src/{otlpReceiver-oyf5wLGC.js → otlpReceiver-C99PPb48.js} +53 -51
- package/dist/src/{otlpReceiver-lXsYVbpj.cjs → otlpReceiver-CGq6LspY.cjs} +53 -55
- package/dist/src/{otlpReceiver-94URx7UW.js → otlpReceiver-CdNBdbsk.js} +53 -55
- package/dist/src/{otlpReceiver-BmmTiMjA.js → otlpReceiver-D89fR-rC.js} +53 -55
- package/dist/src/{providerRegistry-Cq_JK_CJ.js → providerRegistry-B0RUOLI_.js} +7 -8
- package/dist/src/{providerRegistry-DSSHjMKf.js → providerRegistry-CD8MEar9.js} +7 -8
- package/dist/src/{providerRegistry-CvHEVJad.cjs → providerRegistry-Civky8Ar.cjs} +12 -13
- package/dist/src/providerRegistry-DM8rZYol.js +45 -0
- package/dist/src/providers-B7V0njNs.js +32 -0
- package/dist/src/providers-BEwbhv0X.js +30 -0
- package/dist/src/{providers-Iil64vk9.js → providers-BlqUifFg.js} +1543 -1676
- package/dist/src/providers-CH3C7zf7.js +30 -0
- package/dist/src/{providers-DHbjzW2e.cjs → providers-CgKOSgTR.cjs} +1896 -2029
- package/dist/src/providers-D8lF1sqW.js +33246 -0
- package/dist/src/{providers-BnFpbY_s.js → providers-Dk_6ocUX.js} +1536 -1669
- package/dist/src/providers-zyB6k_38.cjs +31 -0
- package/dist/src/{pythonUtils-CcT5LH1M.js → pythonUtils-C3py6GC1.js} +18 -19
- package/dist/src/{pythonUtils-DBbuI3QJ.cjs → pythonUtils-CTU3Y3lw.cjs} +42 -43
- package/dist/src/{pythonUtils-hZ8LeQLv.js → pythonUtils-D5nxkQ0P.js} +18 -19
- package/dist/src/pythonUtils-D6fwaDSg.js +249 -0
- package/dist/src/{quiverai-BuI0tE39.js → quiverai-BbOUOn2L.js} +8 -7
- package/dist/src/{quiverai-DCGSZt4U.js → quiverai-CIaELU_m.js} +8 -10
- package/dist/src/{quiverai-DiMVJQDz.cjs → quiverai-PdShCPox.cjs} +8 -9
- package/dist/src/{quiverai-fQNkExW4.js → quiverai-uH-dcTIr.js} +9 -11
- package/dist/src/{render-Dj1smHEb.js → render-Drod8m7K.js} +4 -5
- package/dist/src/responses-CB2jwoAr.js +660 -0
- package/dist/src/{responses-ghR3IOfy.cjs → responses-D8SBTL64.cjs} +39 -42
- package/dist/src/{responses-DOAFFENS.js → responses-DIR9Ud3j.js} +24 -27
- package/dist/src/{responses-CxzoQoBe.js → responses-WNGNYe3K.js} +24 -27
- package/dist/src/rubyUtils-BUHu6PhO.js +5 -0
- package/dist/src/{rubyUtils-CwbGmgYN.js → rubyUtils-BUVePouc.js} +27 -20
- package/dist/src/rubyUtils-BcuGX77l.js +222 -0
- package/dist/src/{rubyUtils-DudlFZed.js → rubyUtils-Boc4HZzX.js} +18 -19
- package/dist/src/rubyUtils-CP42kMvq.cjs +4 -0
- package/dist/src/{rubyUtils-C8MhKGHb.cjs → rubyUtils-DhCAlxZr.cjs} +48 -50
- package/dist/src/{sagemaker-gmskuyre.js → sagemaker-CNBxx5CJ.js} +75 -70
- package/dist/src/{sagemaker-CcxhlOAR.js → sagemaker-CemTFp2h.js} +75 -79
- package/dist/src/{sagemaker-77zbJ2Q2.cjs → sagemaker-Cl28mZU2.cjs} +75 -76
- package/dist/src/{sagemaker-DuM71dVU.js → sagemaker-YSyBXQQh.js} +77 -77
- package/dist/src/{scanner-DJYiSXQj.js → scanner-BsBlNXNn.js} +100 -121
- package/dist/src/server/index.js +5520 -67427
- package/dist/src/{server-B5v33lvE.cjs → server-C_7Ax-hA.cjs} +57 -67
- package/dist/src/{server-BJ4m4f1D.js → server-CqzrVGpF.js} +26 -29
- package/dist/src/server-CuxBbeSY.js +229 -0
- package/dist/src/server-DA4Cyrrq.js +7 -0
- package/dist/src/server-Dulb-4-K.cjs +5 -0
- package/dist/src/{server-RV_i_YX5.js → server-VWgWb00X.js} +19 -24
- package/dist/src/{signal-BW33JuId.js → signal-4U3mfRvL.js} +9 -11
- package/dist/src/{slack-DEURelTy.cjs → slack-BmVAVGaK.cjs} +7 -8
- package/dist/src/{slack-BQYeW9L3.js → slack-DCUPTzS2.js} +8 -8
- package/dist/src/{slack-BB6yuZzp.js → slack-DOdy_kyv.js} +7 -8
- package/dist/src/{slack-2pRrhhgJ.js → slack-DXMKtA-f.js} +7 -9
- package/dist/src/store-CXGFv4aR.js +228 -0
- package/dist/src/store-CXS-Q_91.js +6 -0
- package/dist/src/{store-D7CgQzAR.cjs → store-DLlFCC4h.cjs} +44 -45
- package/dist/src/{store-DJNsD1iC.js → store-DXilxTl-.js} +40 -36
- package/dist/src/{store-s3SftUwF.js → store-Dim__MDd.js} +34 -35
- package/dist/src/store-eYkaKMwq.cjs +5 -0
- package/dist/src/{tables-DfTsNN7X.js → tables-6YKwjN9-.js} +19 -21
- package/dist/src/tables-DLJPUdUE.js +288 -0
- package/dist/src/{tables-BKTmd6u7.cjs → tables-DPi7wKeM.cjs} +89 -91
- package/dist/src/{tables-DMegD0Xf.js → tables-gftXzE9I.js} +21 -23
- package/dist/src/telemetry-BpMfhthR.cjs +5 -0
- package/dist/src/{telemetry--WAdAfVi.js → telemetry-CMrFgtPB.js} +11 -13
- package/dist/src/telemetry-Cps3mIU-.js +171 -0
- package/dist/src/{telemetry-DQgVBCAb.cjs → telemetry-DaX14Chu.cjs} +21 -24
- package/dist/src/{telemetry-BedSm-bZ.js → telemetry-Dthj_BbD.js} +17 -14
- package/dist/src/telemetry-Dw38hanS.js +7 -0
- package/dist/src/{text-oiSbwSOI.js → text-B_UCRPp2.js} +2 -2
- package/dist/src/{text-oKzCBnK6.cjs → text-CW1cyrwj.cjs} +12 -13
- package/dist/src/{text-B_IrO4GZ.js → text-Db-Wt2u2.js} +2 -2
- package/dist/src/text-TIv0QYnd.js +22 -0
- package/dist/src/{tokenUsageUtils-FZd5O_4A.js → tokenUsageUtils-BDGe-iyI.js} +2 -2
- package/dist/src/{tokenUsageUtils-DmZSD2eU.js → tokenUsageUtils-DflFMjS0.js} +2 -2
- package/dist/src/tokenUsageUtils-NYT-WKS6.js +138 -0
- package/dist/src/{tokenUsageUtils-CXhxVj72.cjs → tokenUsageUtils-bVa1ga6f.cjs} +32 -33
- package/dist/src/{transcription-mYS9vd5v.js → transcription-BNYURcXg.js} +14 -7
- package/dist/src/{transcription-X2-B4vkX.js → transcription-B_OdaHp7.js} +14 -16
- package/dist/src/{transcription-BO1AHegO.cjs → transcription-NLVG9MT1.cjs} +14 -15
- package/dist/src/{transcription-lzBLiTFJ.js → transcription-s6A-bNrZ.js} +15 -17
- package/dist/src/{transform-B1Hi5lWS.cjs → transform-CzK1Q0zl.cjs} +24 -26
- package/dist/src/{transform-DeGlxb0D.js → transform-D5HsjduX.js} +39 -47
- package/dist/src/{transform-CYDILYDe.js → transform-DECvGmzp.js} +15 -13
- package/dist/src/transform-DTGDnAzW.js +6 -0
- package/dist/src/{transform-BEgStbHK.js → transform-DilY9wbS.js} +10 -12
- package/dist/src/{transform-D5PjiWiZ.cjs → transform-DuHvhZpj.cjs} +179 -187
- package/dist/src/transform-aa6tmVpZ.js +216 -0
- package/dist/src/transform-m3qNw4KP.cjs +5 -0
- package/dist/src/transform-uAytVuyX.js +1506 -0
- package/dist/src/{transform-Dfl89yi4.js → transform-vNucnNr0.js} +39 -47
- package/dist/src/{transformersAvailability-SZnTS3pJ.js → transformersAvailability-CEVM2GNQ.js} +2 -2
- package/dist/src/{transformersAvailability-D-glmEy7.cjs → transformersAvailability-CwayUSlh.cjs} +2 -3
- package/dist/src/{transformersAvailability-CjeFXhuJ.js → transformersAvailability-D6c6ROpT.js} +2 -2
- package/dist/src/{types-DWNf48sT.cjs → types-C_7nyzr1.cjs} +538 -574
- package/dist/src/{types-CXQduE9o.js → types-Cbd8uOMq.js} +68 -100
- package/dist/src/types-CzW2QFyi.js +3288 -0
- package/dist/src/{types-C5hEkb-x.js → types-DmyIJ-sR.js} +63 -99
- package/dist/src/{util-CoQjmE3u.js → util-B3xGByQh.js} +4 -5
- package/dist/src/{util-aLhtl3fe.cjs → util-B9vlHIIh.cjs} +208 -223
- package/dist/src/{util-Du96oyYS.js → util-BHGHw5G1.js} +4 -5
- package/dist/src/{util-DQ984syk.js → util-BRYkYPTd.js} +36 -51
- package/dist/src/{util-D9eLdGfa.js → util-BV4XUC0n.js} +5 -6
- package/dist/src/util-Bv6uGDfH.js +293 -0
- package/dist/src/{util-1wWM599Z.cjs → util-BzMcevZc.cjs} +50 -51
- package/dist/src/{util-_h4pVqrz.js → util-C1CeHl-P.js} +36 -51
- package/dist/src/{util-Bm_-UMD_.js → util-CMy69ZgQ.js} +5 -6
- package/dist/src/{util-CyUdMzV0.cjs → util-DGNOS1db.cjs} +34 -35
- package/dist/src/util-Dnmk2mBQ.js +599 -0
- package/dist/src/util-ZzmqNPlg.js +1426 -0
- package/dist/src/{utils-BjLy-Q72.cjs → utils-Cz9qXqII.cjs} +29 -32
- package/dist/src/{utils-CFMn2yHW.js → utils-XiOAgly5.js} +4 -7
- package/dist/src/utils-dLokC-eR.js +94 -0
- package/dist/src/{utils-DvWMzuMx.js → utils-f2-Moju7.js} +4 -7
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +38 -38
- package/dist/src/app/assets/index-B2D0bCSI.js +0 -439
- package/dist/src/app/assets/vendor-charts-CCl15Imd.js +0 -36
- package/dist/src/cache-ChPcurj7.js +0 -6
- package/dist/src/cache-VVu_W-yg.js +0 -8
- package/dist/src/cache-YLNCFEM2.cjs +0 -6
- package/dist/src/chunk-DHDDz29n.js +0 -22
- package/dist/src/chunk-FhC4c-0y.js +0 -21
- package/dist/src/cloud-BndfXy4H.js +0 -5
- package/dist/src/eval-BhHvMY82.js +0 -17
- package/dist/src/evalResult-Dq2gFNQY.js +0 -12
- package/dist/src/evalResult-nmcP5VKH.cjs +0 -12
- package/dist/src/evalResult-trqZjVYh.js +0 -14
- package/dist/src/evaluator-CnfPstzT.js +0 -39
- package/dist/src/fetch-IDPDue6F.cjs +0 -4
- package/dist/src/fetch-hKJ-It8q.js +0 -6
- package/dist/src/fetch-ouKnrWK-.js +0 -4
- package/dist/src/graders-CQn7WUsd.cjs +0 -34
- package/dist/src/graders-DC6QAbpW.js +0 -35
- package/dist/src/graders-DUWz3Y7j.js +0 -37
- package/dist/src/opencode-sdk-4bL9n-Gk.js +0 -382
- package/dist/src/opencode-sdk-BfC2zWcR.js +0 -376
- package/dist/src/opencode-sdk-DMJyuwMg.js +0 -380
- package/dist/src/opencode-sdk-Da-9adza.cjs +0 -383
- package/dist/src/providers-CsXB2Ix-.js +0 -35
- package/dist/src/providers-DO8ltjLC.js +0 -33
- package/dist/src/providers-Dtq-xnXd.cjs +0 -33
- package/dist/src/rubyUtils-BUbcND2f.js +0 -6
- package/dist/src/rubyUtils-Cr55X_KE.js +0 -5
- package/dist/src/rubyUtils-DlIiqoYo.cjs +0 -5
- package/dist/src/server-C2eQH4Gu.js +0 -6
- package/dist/src/server-CXWycu7H.cjs +0 -6
- package/dist/src/server-Q6OGlxxT.js +0 -8
- package/dist/src/store-B3EDO9Q3.js +0 -7
- package/dist/src/store-Dl9F8aw5.js +0 -6
- package/dist/src/store-SnrGrlt9.cjs +0 -6
- package/dist/src/telemetry-BGhiPZtl.js +0 -8
- package/dist/src/telemetry-CFfiYan6.cjs +0 -6
- package/dist/src/telemetry-DHzEduxX.js +0 -6
- package/dist/src/transform-C1x1ZlMQ.cjs +0 -6
- package/dist/src/transform-DYHjFmQu.js +0 -8
- package/dist/src/transform-rmwJT5JQ.js +0 -7
- package/dist/src/transformersAvailability-eJooj0gX.js +0 -35
|
@@ -1,108 +1,164 @@
|
|
|
1
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { C as getEnvString, o as logger } from "./logger-KkObSCzq.js";
|
|
3
|
+
import { N as VERSION, f as REQUEST_TIMEOUT_MS, n as fetchWithProxy } from "./fetch-Dxpd4_sr.js";
|
|
4
|
+
import "./cloud-C0dlstV_.js";
|
|
5
|
+
import "./types-Cbd8uOMq.js";
|
|
6
|
+
import "./cache-BVeDlD87.js";
|
|
7
|
+
import "./util-C1CeHl-P.js";
|
|
8
|
+
import "./esm-C03C-mv3.js";
|
|
9
|
+
import "./pythonUtils-C3py6GC1.js";
|
|
10
|
+
import "./genaiTracer-C1rxGO8Q.js";
|
|
11
|
+
import { t as OpenAiChatCompletionProvider } from "./chat-BiKyneZl.js";
|
|
12
|
+
import "./transform-D5HsjduX.js";
|
|
13
|
+
import { t as OpenAiResponsesProvider } from "./responses-WNGNYe3K.js";
|
|
14
|
+
import "./openai-DhbB7eWK.js";
|
|
15
|
+
import "./util-CMy69ZgQ.js";
|
|
2
16
|
import fs from "fs";
|
|
3
17
|
import path from "path";
|
|
4
18
|
import os from "os";
|
|
5
19
|
import crypto from "crypto";
|
|
6
20
|
import WebSocket from "ws";
|
|
7
|
-
|
|
21
|
+
import JSON5 from "json5";
|
|
8
22
|
//#region src/providers/openclaw/shared.ts
|
|
9
23
|
const DEFAULT_GATEWAY_PORT = 18789;
|
|
10
24
|
const DEFAULT_GATEWAY_HOST = "127.0.0.1";
|
|
11
25
|
/**
|
|
12
|
-
* Strip JSON5 syntax (comments and trailing commas) for JSON.parse compatibility.
|
|
13
|
-
* Uses a state machine to avoid corrupting strings containing // or slash characters.
|
|
14
|
-
*/
|
|
15
|
-
function stripJson5Syntax(raw) {
|
|
16
|
-
let result = "";
|
|
17
|
-
let i = 0;
|
|
18
|
-
let inString = false;
|
|
19
|
-
let stringQuote = "";
|
|
20
|
-
let escape = false;
|
|
21
|
-
while (i < raw.length) {
|
|
22
|
-
const ch = raw[i];
|
|
23
|
-
if (inString) {
|
|
24
|
-
result += ch;
|
|
25
|
-
if (escape) escape = false;
|
|
26
|
-
else if (ch === "\\") escape = true;
|
|
27
|
-
else if (ch === stringQuote) inString = false;
|
|
28
|
-
i++;
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
if (ch === "\"" || ch === "'") {
|
|
32
|
-
inString = true;
|
|
33
|
-
stringQuote = ch;
|
|
34
|
-
result += ch;
|
|
35
|
-
i++;
|
|
36
|
-
} else if (ch === "/" && raw[i + 1] === "/") while (i < raw.length && raw[i] !== "\n") i++;
|
|
37
|
-
else if (ch === "/" && raw[i + 1] === "*") {
|
|
38
|
-
i += 2;
|
|
39
|
-
while (i < raw.length - 1 && !(raw[i] === "*" && raw[i + 1] === "/")) i++;
|
|
40
|
-
if (i < raw.length - 1 && raw[i] === "*" && raw[i + 1] === "/") i += 2;
|
|
41
|
-
} else if (ch === ",") {
|
|
42
|
-
let j = i + 1;
|
|
43
|
-
while (j < raw.length && (raw[j] === " " || raw[j] === " " || raw[j] === "\n" || raw[j] === "\r")) j++;
|
|
44
|
-
if (j < raw.length && (raw[j] === "}" || raw[j] === "]")) i++;
|
|
45
|
-
else {
|
|
46
|
-
result += ch;
|
|
47
|
-
i++;
|
|
48
|
-
}
|
|
49
|
-
} else {
|
|
50
|
-
result += ch;
|
|
51
|
-
i++;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return result;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
26
|
* Cached config to avoid re-reading the file multiple times during provider init.
|
|
58
27
|
*/
|
|
59
28
|
let cachedConfig;
|
|
29
|
+
let cachedConfigPath;
|
|
30
|
+
function resolveConfigPath(env) {
|
|
31
|
+
return env?.OPENCLAW_CONFIG_PATH || getEnvString("OPENCLAW_CONFIG_PATH") || path.join(os.homedir(), ".openclaw", "openclaw.json");
|
|
32
|
+
}
|
|
33
|
+
function normalizeGatewayUrl(url, transport) {
|
|
34
|
+
const trimmed = url.trim();
|
|
35
|
+
if (!trimmed) return;
|
|
36
|
+
if (transport === "http") {
|
|
37
|
+
if (trimmed.startsWith("wss://")) return `https://${trimmed.slice(6)}`;
|
|
38
|
+
if (trimmed.startsWith("ws://")) return `http://${trimmed.slice(5)}`;
|
|
39
|
+
return trimmed;
|
|
40
|
+
}
|
|
41
|
+
if (trimmed.startsWith("https://")) return `wss://${trimmed.slice(8)}`;
|
|
42
|
+
if (trimmed.startsWith("http://")) return `ws://${trimmed.slice(7)}`;
|
|
43
|
+
return trimmed;
|
|
44
|
+
}
|
|
45
|
+
function resolveGatewayHost(gatewayConfig) {
|
|
46
|
+
const bind = gatewayConfig?.bind?.trim();
|
|
47
|
+
const customBindHost = gatewayConfig?.customBindHost?.trim();
|
|
48
|
+
if (!bind || bind === "auto" || bind === "loopback" || bind === "lan" || bind === "tailnet" || bind === "0.0.0.0" || bind === "::" || bind === "127.0.0.1" || bind === "localhost" || bind === "::1") return DEFAULT_GATEWAY_HOST;
|
|
49
|
+
if (bind === "custom") {
|
|
50
|
+
if (!customBindHost || customBindHost === "0.0.0.0" || customBindHost === "::" || customBindHost === "127.0.0.1" || customBindHost === "localhost" || customBindHost === "::1") return DEFAULT_GATEWAY_HOST;
|
|
51
|
+
return customBindHost;
|
|
52
|
+
}
|
|
53
|
+
return bind;
|
|
54
|
+
}
|
|
55
|
+
function buildLocalGatewayUrl(gatewayConfig, transport) {
|
|
56
|
+
const scheme = transport === "ws" ? gatewayConfig?.tls?.enabled ? "wss" : "ws" : gatewayConfig?.tls?.enabled ? "https" : "http";
|
|
57
|
+
const port = gatewayConfig?.port ?? 18789;
|
|
58
|
+
return `${scheme}://${resolveGatewayHost(gatewayConfig)}:${port}`;
|
|
59
|
+
}
|
|
60
|
+
function resolveGatewayUrlFromConfig(openclawConfig, transport) {
|
|
61
|
+
const gatewayConfig = openclawConfig?.gateway;
|
|
62
|
+
if (!gatewayConfig) return;
|
|
63
|
+
if (gatewayConfig.mode === "remote") {
|
|
64
|
+
const remoteUrl = normalizeGatewayUrl(gatewayConfig.remote?.url ?? "", transport);
|
|
65
|
+
if (remoteUrl) return remoteUrl;
|
|
66
|
+
}
|
|
67
|
+
return buildLocalGatewayUrl(gatewayConfig, transport);
|
|
68
|
+
}
|
|
69
|
+
function toAuthSecret(kind, value) {
|
|
70
|
+
const trimmed = value?.trim();
|
|
71
|
+
return trimmed ? {
|
|
72
|
+
kind,
|
|
73
|
+
value: trimmed
|
|
74
|
+
} : void 0;
|
|
75
|
+
}
|
|
76
|
+
function resolveAuthSecretFromConfig(openclawConfig) {
|
|
77
|
+
const gatewayConfig = openclawConfig?.gateway;
|
|
78
|
+
const authMode = gatewayConfig?.auth?.mode?.trim();
|
|
79
|
+
const preferRemoteCredentials = gatewayConfig?.mode === "remote";
|
|
80
|
+
const localToken = toAuthSecret("token", gatewayConfig?.auth?.token);
|
|
81
|
+
const localPassword = toAuthSecret("password", gatewayConfig?.auth?.password);
|
|
82
|
+
const remoteToken = toAuthSecret("token", gatewayConfig?.remote?.token);
|
|
83
|
+
const remotePassword = toAuthSecret("password", gatewayConfig?.remote?.password);
|
|
84
|
+
if (preferRemoteCredentials) {
|
|
85
|
+
if (authMode === "password") return remotePassword || localPassword || remoteToken || localToken;
|
|
86
|
+
if (authMode === "token") return remoteToken || localToken || remotePassword || localPassword;
|
|
87
|
+
return remoteToken || remotePassword || localToken || localPassword;
|
|
88
|
+
}
|
|
89
|
+
if (authMode === "password") return localPassword || remotePassword || localToken || remoteToken;
|
|
90
|
+
if (authMode === "token") return localToken || remoteToken || localPassword || remotePassword;
|
|
91
|
+
return localToken || localPassword || remoteToken || remotePassword;
|
|
92
|
+
}
|
|
60
93
|
/**
|
|
61
|
-
* Read and parse the OpenClaw configuration file.
|
|
94
|
+
* Read and parse the active OpenClaw configuration file.
|
|
62
95
|
* Results are cached based on file modification time.
|
|
63
96
|
* Returns undefined if the file doesn't exist or can't be parsed.
|
|
64
97
|
*/
|
|
65
|
-
function readOpenClawConfig() {
|
|
66
|
-
const configPath =
|
|
98
|
+
function readOpenClawConfig(env) {
|
|
99
|
+
const configPath = resolveConfigPath(env);
|
|
67
100
|
try {
|
|
68
101
|
if (!fs.existsSync(configPath)) return;
|
|
69
102
|
const mtime = fs.statSync(configPath).mtimeMs;
|
|
70
|
-
if (cachedConfig && cachedConfig.mtime === mtime) return cachedConfig.config;
|
|
71
|
-
const
|
|
72
|
-
const config =
|
|
103
|
+
if (cachedConfig && cachedConfigPath === configPath && cachedConfig.mtime === mtime) return cachedConfig.config;
|
|
104
|
+
const raw = fs.readFileSync(configPath, "utf-8");
|
|
105
|
+
const config = JSON5.parse(raw);
|
|
73
106
|
cachedConfig = {
|
|
74
107
|
config,
|
|
75
108
|
mtime
|
|
76
109
|
};
|
|
110
|
+
cachedConfigPath = configPath;
|
|
77
111
|
return config;
|
|
78
112
|
} catch (err) {
|
|
79
|
-
|
|
113
|
+
logger.debug(`Failed to read OpenClaw config at ${configPath}: ${err}`);
|
|
80
114
|
return;
|
|
81
115
|
}
|
|
82
116
|
}
|
|
83
117
|
/**
|
|
84
|
-
* Auto-detect the OpenClaw gateway URL from config, env overrides, or
|
|
118
|
+
* Auto-detect the OpenClaw gateway URL from config, env overrides, or the active config file.
|
|
85
119
|
*/
|
|
86
120
|
function resolveGatewayUrl(config, env) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return
|
|
121
|
+
return resolveGatewayTransportUrl(config, env, "http");
|
|
122
|
+
}
|
|
123
|
+
function resolveGatewayWsUrl(config, env) {
|
|
124
|
+
return resolveGatewayTransportUrl(config, env, "ws");
|
|
125
|
+
}
|
|
126
|
+
function resolveGatewayTransportUrl(config, env, transport) {
|
|
127
|
+
const configUrl = config?.gateway_url?.trim();
|
|
128
|
+
if (configUrl) return normalizeGatewayUrl(configUrl, transport) || configUrl;
|
|
129
|
+
const trimmedEnvUrl = (env?.OPENCLAW_GATEWAY_URL || getEnvString("OPENCLAW_GATEWAY_URL") || env?.CLAWDBOT_GATEWAY_URL || getEnvString("CLAWDBOT_GATEWAY_URL"))?.trim();
|
|
130
|
+
if (trimmedEnvUrl) return normalizeGatewayUrl(trimmedEnvUrl, transport) || trimmedEnvUrl;
|
|
131
|
+
const resolvedUrl = resolveGatewayUrlFromConfig(readOpenClawConfig(env), transport);
|
|
132
|
+
if (resolvedUrl) return resolvedUrl;
|
|
133
|
+
return `${transport === "ws" ? "ws" : "http"}://${DEFAULT_GATEWAY_HOST}:${DEFAULT_GATEWAY_PORT}`;
|
|
134
|
+
}
|
|
135
|
+
function resolveAuthSecret(config, env) {
|
|
136
|
+
if (config?.auth_token) return {
|
|
137
|
+
kind: "token",
|
|
138
|
+
value: config.auth_token
|
|
139
|
+
};
|
|
140
|
+
if (config?.auth_password) return {
|
|
141
|
+
kind: "password",
|
|
142
|
+
value: config.auth_password
|
|
143
|
+
};
|
|
144
|
+
const envToken = env?.OPENCLAW_GATEWAY_TOKEN || getEnvString("OPENCLAW_GATEWAY_TOKEN") || env?.CLAWDBOT_GATEWAY_TOKEN || getEnvString("CLAWDBOT_GATEWAY_TOKEN");
|
|
145
|
+
if (envToken) return {
|
|
146
|
+
kind: "token",
|
|
147
|
+
value: envToken
|
|
148
|
+
};
|
|
149
|
+
const envPassword = env?.OPENCLAW_GATEWAY_PASSWORD || getEnvString("OPENCLAW_GATEWAY_PASSWORD") || env?.CLAWDBOT_GATEWAY_PASSWORD || getEnvString("CLAWDBOT_GATEWAY_PASSWORD");
|
|
150
|
+
if (envPassword) return {
|
|
151
|
+
kind: "password",
|
|
152
|
+
value: envPassword
|
|
153
|
+
};
|
|
154
|
+
return resolveAuthSecretFromConfig(readOpenClawConfig(env));
|
|
97
155
|
}
|
|
98
156
|
/**
|
|
99
|
-
* Auto-detect the OpenClaw gateway
|
|
157
|
+
* Auto-detect the OpenClaw gateway bearer secret from config, env overrides, or the active
|
|
158
|
+
* config file. OpenClaw accepts either a token or password as the HTTP bearer secret.
|
|
100
159
|
*/
|
|
101
160
|
function resolveAuthToken(config, env) {
|
|
102
|
-
|
|
103
|
-
const envToken = env?.OPENCLAW_GATEWAY_TOKEN || getEnvString("OPENCLAW_GATEWAY_TOKEN");
|
|
104
|
-
if (envToken) return envToken;
|
|
105
|
-
return readOpenClawConfig()?.gateway?.auth?.token;
|
|
161
|
+
return resolveAuthSecret(config, env)?.value;
|
|
106
162
|
}
|
|
107
163
|
/**
|
|
108
164
|
* Build common OpenClaw headers for agent-id and session-key.
|
|
@@ -137,7 +193,6 @@ function buildOpenClawProviderOptions(agentId, providerOptions) {
|
|
|
137
193
|
}
|
|
138
194
|
};
|
|
139
195
|
}
|
|
140
|
-
|
|
141
196
|
//#endregion
|
|
142
197
|
//#region src/providers/openclaw/agent.ts
|
|
143
198
|
const OPENCLAW_PROTOCOL_VERSION = 3;
|
|
@@ -163,7 +218,8 @@ const OPENCLAW_PROTOCOL_VERSION = 3;
|
|
|
163
218
|
var OpenClawAgentProvider = class {
|
|
164
219
|
agentId;
|
|
165
220
|
gatewayUrl;
|
|
166
|
-
|
|
221
|
+
authKind;
|
|
222
|
+
authSecret;
|
|
167
223
|
openclawConfig;
|
|
168
224
|
timeoutMs;
|
|
169
225
|
activeConnections = /* @__PURE__ */ new Set();
|
|
@@ -171,8 +227,10 @@ var OpenClawAgentProvider = class {
|
|
|
171
227
|
this.agentId = agentId;
|
|
172
228
|
this.openclawConfig = providerOptions.config || {};
|
|
173
229
|
const env = providerOptions.env;
|
|
174
|
-
this.gatewayUrl =
|
|
175
|
-
|
|
230
|
+
this.gatewayUrl = resolveGatewayWsUrl(this.openclawConfig, env);
|
|
231
|
+
const authSecret = resolveAuthSecret(this.openclawConfig, env);
|
|
232
|
+
this.authKind = authSecret?.kind;
|
|
233
|
+
this.authSecret = authSecret?.value;
|
|
176
234
|
this.timeoutMs = this.openclawConfig.timeoutMs ?? REQUEST_TIMEOUT_MS;
|
|
177
235
|
}
|
|
178
236
|
id() {
|
|
@@ -189,9 +247,9 @@ var OpenClawAgentProvider = class {
|
|
|
189
247
|
this.activeConnections.clear();
|
|
190
248
|
}
|
|
191
249
|
async callApi(prompt) {
|
|
192
|
-
const
|
|
250
|
+
const sessionKey = this.openclawConfig.session_key || `promptfoo-${crypto.randomUUID()}`;
|
|
193
251
|
return new Promise((resolve) => {
|
|
194
|
-
const ws = new WebSocket(
|
|
252
|
+
const ws = new WebSocket(this.gatewayUrl);
|
|
195
253
|
this.activeConnections.add(ws);
|
|
196
254
|
const agentRequestId = crypto.randomUUID();
|
|
197
255
|
const waitRequestId = crypto.randomUUID();
|
|
@@ -200,37 +258,33 @@ var OpenClawAgentProvider = class {
|
|
|
200
258
|
let runId;
|
|
201
259
|
let connected = false;
|
|
202
260
|
let resolved = false;
|
|
203
|
-
const
|
|
204
|
-
if (!resolved) {
|
|
205
|
-
resolved = true;
|
|
206
|
-
ws.close();
|
|
207
|
-
resolve({ error: `OpenClaw agent request timed out after ${this.timeoutMs}ms` });
|
|
208
|
-
}
|
|
209
|
-
}, this.timeoutMs);
|
|
210
|
-
const finish = (result) => {
|
|
261
|
+
const finish = (result, closeSocket = true) => {
|
|
211
262
|
if (resolved) return;
|
|
212
263
|
resolved = true;
|
|
213
264
|
clearTimeout(timeout);
|
|
214
265
|
this.activeConnections.delete(ws);
|
|
215
|
-
ws.close();
|
|
266
|
+
if (closeSocket) ws.close();
|
|
216
267
|
resolve(result);
|
|
217
268
|
};
|
|
269
|
+
const timeout = setTimeout(() => {
|
|
270
|
+
finish({ error: `OpenClaw agent request timed out after ${this.timeoutMs}ms` });
|
|
271
|
+
}, this.timeoutMs);
|
|
218
272
|
ws.on("error", (err) => {
|
|
219
273
|
finish({ error: `OpenClaw WebSocket error: ${err.message}` });
|
|
220
274
|
});
|
|
221
275
|
ws.on("close", () => {
|
|
222
276
|
this.activeConnections.delete(ws);
|
|
223
|
-
if (!resolved) finish({ error: "OpenClaw WebSocket connection closed unexpectedly" });
|
|
277
|
+
if (!resolved) finish({ error: "OpenClaw WebSocket connection closed unexpectedly" }, false);
|
|
224
278
|
});
|
|
225
279
|
ws.on("message", (data) => {
|
|
226
280
|
let frame;
|
|
227
281
|
try {
|
|
228
282
|
frame = JSON.parse(data.toString());
|
|
229
283
|
} catch {
|
|
230
|
-
|
|
284
|
+
logger.debug("[OpenClaw Agent] Failed to parse WS frame");
|
|
231
285
|
return;
|
|
232
286
|
}
|
|
233
|
-
|
|
287
|
+
logger.debug("[OpenClaw Agent] Frame received", {
|
|
234
288
|
type: frame.type,
|
|
235
289
|
event: frame.event,
|
|
236
290
|
id: frame.id
|
|
@@ -255,7 +309,7 @@ var OpenClawAgentProvider = class {
|
|
|
255
309
|
caps: [],
|
|
256
310
|
commands: [],
|
|
257
311
|
permissions: {},
|
|
258
|
-
...this.
|
|
312
|
+
...this.authSecret && this.authKind && { auth: this.authKind === "password" ? { password: this.authSecret } : { token: this.authSecret } }
|
|
259
313
|
}
|
|
260
314
|
}));
|
|
261
315
|
return;
|
|
@@ -274,8 +328,9 @@ var OpenClawAgentProvider = class {
|
|
|
274
328
|
message: prompt,
|
|
275
329
|
agentId: this.agentId,
|
|
276
330
|
idempotencyKey,
|
|
277
|
-
|
|
278
|
-
...this.openclawConfig.thinking_level && { thinking: this.openclawConfig.thinking_level }
|
|
331
|
+
sessionKey,
|
|
332
|
+
...this.openclawConfig.thinking_level && { thinking: this.openclawConfig.thinking_level },
|
|
333
|
+
...this.openclawConfig.extra_system_prompt && { extraSystemPrompt: this.openclawConfig.extra_system_prompt }
|
|
279
334
|
}
|
|
280
335
|
}));
|
|
281
336
|
return;
|
|
@@ -285,8 +340,17 @@ var OpenClawAgentProvider = class {
|
|
|
285
340
|
finish({ error: `OpenClaw agent error: ${frame.error?.message || "unknown error"}` });
|
|
286
341
|
return;
|
|
287
342
|
}
|
|
288
|
-
|
|
289
|
-
|
|
343
|
+
const payload = frame.payload;
|
|
344
|
+
runId = typeof payload?.runId === "string" && payload.runId.trim() ? payload.runId : void 0;
|
|
345
|
+
if (!runId) {
|
|
346
|
+
logger.warn("[OpenClaw Agent] Missing runId in accepted response", {
|
|
347
|
+
agentId: this.agentId,
|
|
348
|
+
payload
|
|
349
|
+
});
|
|
350
|
+
finish({ error: "OpenClaw agent error: gateway accepted request without a runId" });
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
ws.send(JSON.stringify({
|
|
290
354
|
type: "req",
|
|
291
355
|
id: waitRequestId,
|
|
292
356
|
method: "agent.wait",
|
|
@@ -312,17 +376,17 @@ var OpenClawAgentProvider = class {
|
|
|
312
376
|
});
|
|
313
377
|
}
|
|
314
378
|
};
|
|
315
|
-
|
|
316
379
|
//#endregion
|
|
317
380
|
//#region src/providers/openclaw/chat.ts
|
|
318
381
|
/**
|
|
319
382
|
* OpenClaw chat provider extends OpenAI chat completion provider.
|
|
320
383
|
*
|
|
321
384
|
* OpenClaw exposes an OpenAI-compatible HTTP API at /v1/chat/completions.
|
|
322
|
-
* This provider auto-detects gateway URL and auth
|
|
323
|
-
* 1. Explicit config (gateway_url, auth_token)
|
|
324
|
-
* 2. Environment variables (OPENCLAW_GATEWAY_URL, OPENCLAW_GATEWAY_TOKEN)
|
|
325
|
-
* 3. ~/.openclaw/openclaw.json
|
|
385
|
+
* This provider auto-detects gateway URL and bearer auth from:
|
|
386
|
+
* 1. Explicit config (gateway_url, auth_token, auth_password)
|
|
387
|
+
* 2. Environment variables (OPENCLAW_GATEWAY_URL, OPENCLAW_GATEWAY_TOKEN, OPENCLAW_GATEWAY_PASSWORD)
|
|
388
|
+
* 3. The active OpenClaw config file (OPENCLAW_CONFIG_PATH or ~/.openclaw/openclaw.json),
|
|
389
|
+
* including gateway.remote.url and gateway.tls.enabled
|
|
326
390
|
*
|
|
327
391
|
* Usage:
|
|
328
392
|
* openclaw - default agent (main)
|
|
@@ -351,7 +415,6 @@ var OpenClawChatProvider = class extends OpenAiChatCompletionProvider {
|
|
|
351
415
|
return this.config.apiBaseUrl || this.getApiUrlDefault();
|
|
352
416
|
}
|
|
353
417
|
};
|
|
354
|
-
|
|
355
418
|
//#endregion
|
|
356
419
|
//#region src/providers/openclaw/responses.ts
|
|
357
420
|
/**
|
|
@@ -394,21 +457,25 @@ var OpenClawResponsesProvider = class extends OpenAiResponsesProvider {
|
|
|
394
457
|
return result;
|
|
395
458
|
}
|
|
396
459
|
};
|
|
397
|
-
|
|
398
460
|
//#endregion
|
|
399
461
|
//#region src/providers/openclaw/tools.ts
|
|
400
462
|
/**
|
|
401
463
|
* OpenClaw Tool Invoke Provider
|
|
402
464
|
*
|
|
403
465
|
* Simple HTTP provider for direct tool invocation via POST /tools/invoke.
|
|
404
|
-
* The tool name is extracted from the provider path:
|
|
466
|
+
* The tool name is extracted from the provider path:
|
|
467
|
+
* openclaw:tools:sessions_list → tool="sessions_list"
|
|
405
468
|
*
|
|
406
469
|
* The prompt is parsed as JSON for tool arguments. If it's not valid JSON,
|
|
407
470
|
* it's passed as a single `input` argument.
|
|
408
471
|
*
|
|
409
472
|
* Usage:
|
|
410
|
-
* openclaw:tools:
|
|
411
|
-
* openclaw:tools:
|
|
473
|
+
* openclaw:tools:sessions_list - invoke the sessions_list tool
|
|
474
|
+
* openclaw:tools:session_status - invoke the session_status tool
|
|
475
|
+
*
|
|
476
|
+
* Optional config:
|
|
477
|
+
* action - tool sub-action, forwarded as body.action
|
|
478
|
+
* dry_run - dry-run hint, forwarded as body.dryRun
|
|
412
479
|
*/
|
|
413
480
|
var OpenClawToolInvokeProvider = class {
|
|
414
481
|
toolName;
|
|
@@ -441,14 +508,19 @@ var OpenClawToolInvokeProvider = class {
|
|
|
441
508
|
args = { input: prompt };
|
|
442
509
|
}
|
|
443
510
|
const url = `${this.gatewayUrl}/tools/invoke`;
|
|
444
|
-
const headers = {
|
|
511
|
+
const headers = {
|
|
512
|
+
"Content-Type": "application/json",
|
|
513
|
+
...this.openclawConfig.headers || {}
|
|
514
|
+
};
|
|
445
515
|
if (this.authToken) headers["Authorization"] = `Bearer ${this.authToken}`;
|
|
446
516
|
const body = {
|
|
447
517
|
tool: this.toolName,
|
|
518
|
+
...this.openclawConfig.action && { action: this.openclawConfig.action },
|
|
448
519
|
args,
|
|
520
|
+
...typeof this.openclawConfig.dry_run === "boolean" && { dryRun: this.openclawConfig.dry_run },
|
|
449
521
|
...this.openclawConfig.session_key && { sessionKey: this.openclawConfig.session_key }
|
|
450
522
|
};
|
|
451
|
-
|
|
523
|
+
logger.debug(`[OpenClaw Tool] POST ${url}`, {
|
|
452
524
|
tool: this.toolName,
|
|
453
525
|
args
|
|
454
526
|
});
|
|
@@ -473,7 +545,6 @@ var OpenClawToolInvokeProvider = class {
|
|
|
473
545
|
}
|
|
474
546
|
}
|
|
475
547
|
};
|
|
476
|
-
|
|
477
548
|
//#endregion
|
|
478
549
|
//#region src/providers/openclaw/index.ts
|
|
479
550
|
/**
|
|
@@ -487,7 +558,7 @@ var OpenClawToolInvokeProvider = class {
|
|
|
487
558
|
* openclaw:responses:X → OpenClawResponsesProvider('X')
|
|
488
559
|
* openclaw:agent → OpenClawAgentProvider('main')
|
|
489
560
|
* openclaw:agent:X → OpenClawAgentProvider('X')
|
|
490
|
-
* openclaw:tools:
|
|
561
|
+
* openclaw:tools:sessions_list → OpenClawToolInvokeProvider('sessions_list')
|
|
491
562
|
*/
|
|
492
563
|
function createOpenClawProvider(providerPath, providerOptions = {}, env) {
|
|
493
564
|
const splits = providerPath.split(":");
|
|
@@ -505,7 +576,7 @@ function createOpenClawProvider(providerPath, providerOptions = {}, env) {
|
|
|
505
576
|
}
|
|
506
577
|
return new OpenClawChatProvider(splits.length > 1 ? splits.slice(1).join(":") : "main", opts);
|
|
507
578
|
}
|
|
508
|
-
|
|
509
579
|
//#endregion
|
|
510
580
|
export { createOpenClawProvider };
|
|
511
|
-
|
|
581
|
+
|
|
582
|
+
//# sourceMappingURL=openclaw-DiSz3I5L.js.map
|