reeval 0.8.0 → 0.10.0
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 +52 -40
- package/THIRD_PARTY_NOTICES.md +218 -11
- package/assets/package.json +1 -1
- package/assets/pnpm-lock.yaml +30 -30
- package/dist/adapter-DWlpOtRn.js +279 -0
- package/dist/adapter-DWlpOtRn.js.map +1 -0
- package/dist/{agent-B72lZ6w5.js → agent-CURAwx_q.js} +6 -6
- package/dist/{agent-B72lZ6w5.js.map → agent-CURAwx_q.js.map} +1 -1
- package/dist/{agent-Cfj1wD4D.js → agent-CaS_2Sce.js} +92 -26
- package/dist/agent-CaS_2Sce.js.map +1 -0
- package/dist/{analysis-BTNnKh1w.js → analysis-Bxub9LMT.js} +4 -4
- package/dist/{analysis-BTNnKh1w.js.map → analysis-Bxub9LMT.js.map} +1 -1
- package/dist/{assemble-BbFVjHeS.js → assemble-B9Alds-z.js} +290 -30
- package/dist/assemble-B9Alds-z.js.map +1 -0
- package/dist/assemble-J5MukZFY.js +1 -0
- package/dist/{client-CwzU9CiW.js → assert-EUIoRdIt.js} +38 -112
- package/dist/assert-EUIoRdIt.js.map +1 -0
- package/dist/bridge/index.mjs +248 -55
- package/dist/{capture-BXhBfmsM.js → capture-CNb9SuU5.js} +204 -39
- package/dist/capture-CNb9SuU5.js.map +1 -0
- package/dist/capture-jquXZBKK.js +1 -0
- package/dist/{cli-BMjTKY-D.js → cli-D303Vj5N.js} +257 -146
- package/dist/cli-D303Vj5N.js.map +1 -0
- package/dist/{cli-spec-DSvKsOK4.js → cli-spec-BPZbQG2p.js} +38 -19
- package/dist/cli-spec-BPZbQG2p.js.map +1 -0
- package/dist/cli.js +4 -2
- package/dist/cli.js.map +1 -1
- package/dist/client-fcwgwOAD.js +106 -0
- package/dist/client-fcwgwOAD.js.map +1 -0
- package/dist/{command-JPGNzFsA.js → command-BLfT7vnQ.js} +19 -18
- package/dist/command-BLfT7vnQ.js.map +1 -0
- package/dist/{command-BK4kOgkH.js → command-BT9a37ZR.js} +381 -78
- package/dist/command-BT9a37ZR.js.map +1 -0
- package/dist/{command-BqJtFiPy.js → command-Bge8F7Ko.js} +384 -101
- package/dist/command-Bge8F7Ko.js.map +1 -0
- package/dist/command-BkFjijN2.js +1 -0
- package/dist/{command-BdstSEHu.js → command-CMJtHKRa.js} +14 -14
- package/dist/{command-BdstSEHu.js.map → command-CMJtHKRa.js.map} +1 -1
- package/dist/commands-1p-bIWhN.js +1 -0
- package/dist/{commands-B618jg3C.js → commands-BFx16WB8.js} +8 -8
- package/dist/commands-BFx16WB8.js.map +1 -0
- package/dist/config-DEgnUiU-.js +756 -0
- package/dist/config-DEgnUiU-.js.map +1 -0
- package/dist/{context-CvUv7DUb.js → context-C1mxXh80.js} +11 -7
- package/dist/context-C1mxXh80.js.map +1 -0
- package/dist/{db-DFbtGIYy.js → db-CdHizc4_.js} +582 -53
- package/dist/db-CdHizc4_.js.map +1 -0
- package/dist/db-Dm1cRJJP.js +2 -0
- package/dist/debug-D7bEv_UV.js +1 -0
- package/dist/{dist-CTzThfu_.js → dist-B8hJImYt.js} +17 -4
- package/dist/dist-B8hJImYt.js.map +1 -0
- package/dist/{docker-2qns7hJ2.js → docker-7b_2SaH7.js} +35 -22
- package/dist/docker-7b_2SaH7.js.map +1 -0
- package/dist/{docker-IFRW8K5f.js → docker-sZrNrr82.js} +3 -3
- package/dist/docker-sZrNrr82.js.map +1 -0
- package/dist/docker-yauK-9X8.js +1 -0
- package/dist/{doctor-B6oYTPoR.js → doctor-BYNok4UO.js} +263 -84
- package/dist/doctor-BYNok4UO.js.map +1 -0
- package/dist/{duration-JsJrIWXq.js → duration-CEOQww97.js} +2 -2
- package/dist/{duration-JsJrIWXq.js.map → duration-CEOQww97.js.map} +1 -1
- package/dist/{egress-IUKdeayc.js → egress-C4PZTSSe.js} +147 -14
- package/dist/egress-C4PZTSSe.js.map +1 -0
- package/dist/environment-DNjRk0nU.js +1133 -0
- package/dist/environment-DNjRk0nU.js.map +1 -0
- package/dist/{errors-yDAEwmZo.js → errors-B6BSMs03.js} +2 -2
- package/dist/errors-B6BSMs03.js.map +1 -0
- package/dist/{errors-C9w_ud7g.js → errors-r025B0Zb.js} +4 -4
- package/dist/errors-r025B0Zb.js.map +1 -0
- package/dist/evaluate-C1UVL21l.d.ts +92 -0
- package/dist/evaluate-D4zeRGBF.js +2351 -0
- package/dist/evaluate-D4zeRGBF.js.map +1 -0
- package/dist/family-D2b7WD10.js +67 -0
- package/dist/family-D2b7WD10.js.map +1 -0
- package/dist/files-BAt0i00X.js +1 -0
- package/dist/{files-CMSUXAEg.js → files-BXUdY8tr.js} +10 -9
- package/dist/{files-CMSUXAEg.js.map → files-BXUdY8tr.js.map} +1 -1
- package/dist/files-BhyltlDB.js +1 -0
- package/dist/files-Bk1mC3AN.js +43 -0
- package/dist/files-Bk1mC3AN.js.map +1 -0
- package/dist/{files-B6aVVGrk.js → files-DQmHE7pb.js} +5 -5
- package/dist/{files-B6aVVGrk.js.map → files-DQmHE7pb.js.map} +1 -1
- package/dist/files-ZZPqfAo6.js +1 -0
- package/dist/{git-EmdFJ4DY.js → git-DfG-YJ1u.js} +2 -2
- package/dist/{git-EmdFJ4DY.js.map → git-DfG-YJ1u.js.map} +1 -1
- package/dist/harness-B8QC9u0O.js +323 -0
- package/dist/harness-B8QC9u0O.js.map +1 -0
- package/dist/harness.d.ts +19 -31
- package/dist/harness.js +1 -2
- package/dist/{header-_F0EWob3.js → header-hK-Z_Po9.js} +10 -3
- package/dist/{header-_F0EWob3.js.map → header-hK-Z_Po9.js.map} +1 -1
- package/dist/{images-CscddrJU.js → images-0On0cztu.js} +114 -45
- package/dist/images-0On0cztu.js.map +1 -0
- package/dist/index.d.ts +10 -26
- package/dist/index.js +6 -2108
- package/dist/{init-NQfIvi-0.js → init-B77Rpcqc.js} +26 -8
- package/dist/init-B77Rpcqc.js.map +1 -0
- package/dist/init-BrOWin3W.js +1 -0
- package/dist/{invocations-nPvrlZPj.js → invocations-DbGfBAA_.js} +4 -4
- package/dist/{invocations-nPvrlZPj.js.map → invocations-DbGfBAA_.js.map} +1 -1
- package/dist/{judge-CeYPN8P_.js → judge-DW_GDOmB.js} +11 -19
- package/dist/{judge-CeYPN8P_.js.map → judge-DW_GDOmB.js.map} +1 -1
- package/dist/judge.d.ts +2 -2
- package/dist/judge.js +1 -1
- package/dist/{live-S0qODb6o.js → live-jlfszAbb.js} +9 -20
- package/dist/live-jlfszAbb.js.map +1 -0
- package/dist/matchers-Ddmc2z7H.js +118 -0
- package/dist/matchers-Ddmc2z7H.js.map +1 -0
- package/dist/{model-DEQo3FkZ.js → model-DaVCY3rb.js} +2 -2
- package/dist/{model-DEQo3FkZ.js.map → model-DaVCY3rb.js.map} +1 -1
- package/dist/model-NM3ID0uR.js +1 -0
- package/dist/{model-Cl507trk.js → model-h_cDtcRr.js} +19 -18
- package/dist/model-h_cDtcRr.js.map +1 -0
- package/dist/model-nwWJvaUR.js +1 -0
- package/dist/{model-BndnmcLm.js → model-oqcDplJG.js} +271 -34
- package/dist/model-oqcDplJG.js.map +1 -0
- package/dist/{node-Co7EXge0.js → node-B3ydHo6t.js} +10 -47
- package/dist/node-B3ydHo6t.js.map +1 -0
- package/dist/object-CLf2-tNq.js +9 -0
- package/dist/object-CLf2-tNq.js.map +1 -0
- package/dist/{opencode-providers-ByD85Q0l.js → opencode-providers-J9colP0-.js} +96 -21
- package/dist/opencode-providers-J9colP0-.js.map +1 -0
- package/dist/options-Bh2W63dK.js +1119 -0
- package/dist/options-Bh2W63dK.js.map +1 -0
- package/dist/{pairs-DDsjgm5F.js → pairs-CnInRu-G.js} +76 -2
- package/dist/{pairs-DDsjgm5F.js.map → pairs-CnInRu-G.js.map} +1 -1
- package/dist/{patch-CGCVipPu.js → patch-Zac5aIRM.js} +6 -6
- package/dist/{patch-CGCVipPu.js.map → patch-Zac5aIRM.js.map} +1 -1
- package/dist/{plan-PPc4-6xd.js → plan-C9Cy27Ay.js} +75 -32
- package/dist/plan-C9Cy27Ay.js.map +1 -0
- package/dist/preflight-CPWpQeBI.js +1 -0
- package/dist/{preflight-CddycK92.js → preflight-D7iFPKeK.js} +8 -7
- package/dist/preflight-D7iFPKeK.js.map +1 -0
- package/dist/prepare-BGjePFQl.js +2 -0
- package/dist/{prepare-CsP-057p.js → prepare-doGxaAGR.js} +38 -30
- package/dist/prepare-doGxaAGR.js.map +1 -0
- package/dist/process-CSVO_jsc.js +119 -0
- package/dist/process-CSVO_jsc.js.map +1 -0
- package/dist/{provenance-CsX6PHDR.js → provenance-DmE9uPVt.js} +4 -4
- package/dist/{provenance-CsX6PHDR.js.map → provenance-DmE9uPVt.js.map} +1 -1
- package/dist/provider-DehR4CMN.js +1 -0
- package/dist/providers-gDMko8fl.js +1 -0
- package/dist/providers-tAOD1NQN.js +165 -0
- package/dist/providers-tAOD1NQN.js.map +1 -0
- package/dist/{query-BUcwCYsI.js → query-Bes9Kh6Y.js} +3 -3
- package/dist/{query-BUcwCYsI.js.map → query-Bes9Kh6Y.js.map} +1 -1
- package/dist/query-C_G_svLU.js +1 -0
- package/dist/questions-DjAwMxZ3.js +524 -0
- package/dist/questions-DjAwMxZ3.js.map +1 -0
- package/dist/{record-BRP9vZrj.js → record-BKmMvZ6O.js} +9 -1
- package/dist/{record-BRP9vZrj.js.map → record-BKmMvZ6O.js.map} +1 -1
- package/dist/remote-HDRt16ew.js +378 -0
- package/dist/remote-HDRt16ew.js.map +1 -0
- package/dist/{results-BcSHWbgB.js → results-DuauQI3Z.js} +4 -4
- package/dist/{results-BcSHWbgB.js.map → results-DuauQI3Z.js.map} +1 -1
- package/dist/{resume-DZ9AmfPv.js → resume-BRfa8E_s.js} +10 -10
- package/dist/{resume-DZ9AmfPv.js.map → resume-BRfa8E_s.js.map} +1 -1
- package/dist/{root-CvdRlRZX.js → root-DICDHCtp.js} +4 -4
- package/dist/{root-CvdRlRZX.js.map → root-DICDHCtp.js.map} +1 -1
- package/dist/{runtime-Dfb2r-cS.js → runtime-PX_oXiCS.js} +105 -11
- package/dist/runtime-PX_oXiCS.js.map +1 -0
- package/dist/sandbox-D3A8oUb7.js +70 -0
- package/dist/sandbox-D3A8oUb7.js.map +1 -0
- package/dist/sandbox.d.ts +22 -8
- package/dist/sandbox.js +1 -2
- package/dist/server-C7sg1ndo.js +1 -0
- package/dist/{server-Da60oe4b.js → server-XDleKaF_.js} +11 -11
- package/dist/server-XDleKaF_.js.map +1 -0
- package/dist/shared-DYpIb1BI.js +166 -0
- package/dist/shared-DYpIb1BI.js.map +1 -0
- package/dist/{source-BVOnL3sn.js → source-C8xumIWj.js} +2 -2
- package/dist/{source-BVOnL3sn.js.map → source-C8xumIWj.js.map} +1 -1
- package/dist/source-fGd0SaKP.js +1 -0
- package/dist/{src-TdJuDYqB.js → src-B7treWa8.js} +1597 -292
- package/dist/src-B7treWa8.js.map +1 -0
- package/dist/{src-C1E9HDWO.js → src-C7_1SqDP.js} +3 -3
- package/dist/{src-C1E9HDWO.js.map → src-C7_1SqDP.js.map} +1 -1
- package/dist/{src-DDNXsD9H.js → src-CF17Ug08.js} +5 -4
- package/dist/src-CF17Ug08.js.map +1 -0
- package/dist/{src-D_cXqmnI.js → src-CFp86GtV.js} +60 -60
- package/dist/src-CFp86GtV.js.map +1 -0
- package/dist/src-C_lPtowT.js +2 -0
- package/dist/src-DIL0jST0.js +368 -0
- package/dist/src-DIL0jST0.js.map +1 -0
- package/dist/src-DNnG4e4R.js +2 -0
- package/dist/src-DTbrY1hi.js +2 -0
- package/dist/src-DdyJEh2v.js +2 -0
- package/dist/src-Dj9PAroc.js +2 -0
- package/dist/src-Du8H85Qq.js +2 -0
- package/dist/src-DvCg0NBs.js +324 -0
- package/dist/src-DvCg0NBs.js.map +1 -0
- package/dist/{src-CxTC5kNI.js → src-DvK0EIZx.js} +8 -10
- package/dist/{src-CxTC5kNI.js.map → src-DvK0EIZx.js.map} +1 -1
- package/dist/{src-DVy58-zZ.js → src-FGXhkEkH.js} +5 -5
- package/dist/{src-DVy58-zZ.js.map → src-FGXhkEkH.js.map} +1 -1
- package/dist/src-jzagbuqH.js +2 -0
- package/dist/src-ofUaYbuY.js +3 -0
- package/dist/src-pJZOrYR9.js +1 -0
- package/dist/{src-D95O-Smv.js → src-u8_ixn_F.js} +15 -11
- package/dist/src-u8_ixn_F.js.map +1 -0
- package/dist/{state-B72h_jEw.js → state-C__9swoG.js} +36 -24
- package/dist/state-C__9swoG.js.map +1 -0
- package/dist/state-CeR6oz0k.js +66 -0
- package/dist/state-CeR6oz0k.js.map +1 -0
- package/dist/state-CgjQo29K.js +1 -0
- package/dist/studio-app/assets/index-CwQN3f_h.css +2 -0
- package/dist/studio-app/assets/{index-Bgr-efZm.js → index-DrQc2Yxd.js} +12 -12
- package/dist/studio-app/index.html +2 -2
- package/dist/{summary-k3mhWWXv.js → summary-BLAVLySU.js} +202 -17
- package/dist/summary-BLAVLySU.js.map +1 -0
- package/dist/{summary-CJdxaRdM.js → summary-DgyjUh_l.js} +7 -7
- package/dist/{summary-CJdxaRdM.js.map → summary-DgyjUh_l.js.map} +1 -1
- package/dist/testing.d.ts +3 -2
- package/dist/testing.js +3 -2
- package/dist/{tool-target-BU1JnSE9.js → tool-target-D2mcYlSQ.js} +14 -7
- package/dist/tool-target-D2mcYlSQ.js.map +1 -0
- package/dist/{tools-D0gF2QoV.js → tools-GCyNYSc1.js} +7 -7
- package/dist/tools-GCyNYSc1.js.map +1 -0
- package/dist/transcript-BNNANU8A.js +64 -0
- package/dist/transcript-BNNANU8A.js.map +1 -0
- package/dist/types-C5vI3g1C.js.map +1 -1
- package/dist/{types-_LOFdPUf.d.ts → types-g17bRAzt.d.ts} +578 -49
- package/dist/{usage-DDF_6tkV.js → usage-CleNKkly.js} +4 -2
- package/dist/{usage-DDF_6tkV.js.map → usage-CleNKkly.js.map} +1 -1
- package/dist/view/index.d.ts +83 -17
- package/dist/view/index.js +7 -6
- package/dist/views-BW6oCDUQ.js +2 -0
- package/dist/{views-DZ1YDqey.js → views-BmQF4UCI.js} +13 -8
- package/dist/views-BmQF4UCI.js.map +1 -0
- package/dist/{worker-entry-DXeyWY-m.js → worker-entry-yOchGYYv.js} +16 -225
- package/dist/worker-entry-yOchGYYv.js.map +1 -0
- package/dist/{workspace-DpXdrslo.js → workspace-CgyHEM0l.js} +7 -7
- package/dist/{workspace-DpXdrslo.js.map → workspace-CgyHEM0l.js.map} +1 -1
- package/dist/workspace-D8sSgpiy.js +1 -0
- package/docker/Dockerfile +7 -5
- package/package.json +12 -12
- package/dist/agent-Cfj1wD4D.js.map +0 -1
- package/dist/assemble-BbFVjHeS.js.map +0 -1
- package/dist/assemble-CXiTVyHD.js +0 -2
- package/dist/capture-BXhBfmsM.js.map +0 -1
- package/dist/capture-N7r3yeak.js +0 -2
- package/dist/cli-BMjTKY-D.js.map +0 -1
- package/dist/cli-spec-DSvKsOK4.js.map +0 -1
- package/dist/client-CwzU9CiW.js.map +0 -1
- package/dist/command-BK4kOgkH.js.map +0 -1
- package/dist/command-BqJtFiPy.js.map +0 -1
- package/dist/command-CTVGuH8y.js +0 -2
- package/dist/command-JPGNzFsA.js.map +0 -1
- package/dist/commands-B618jg3C.js.map +0 -1
- package/dist/commands-Duo2ur3r.js +0 -2
- package/dist/config-B-E0xRkf.js +0 -447
- package/dist/config-B-E0xRkf.js.map +0 -1
- package/dist/context-CvUv7DUb.js.map +0 -1
- package/dist/db-CnoUy-FZ.js +0 -3
- package/dist/db-DFbtGIYy.js.map +0 -1
- package/dist/debug-SEmW4w8f.js +0 -2
- package/dist/dist-CTzThfu_.js.map +0 -1
- package/dist/docker-2qns7hJ2.js.map +0 -1
- package/dist/docker-D6t23fZl.js +0 -2
- package/dist/docker-IFRW8K5f.js.map +0 -1
- package/dist/doctor-B6oYTPoR.js.map +0 -1
- package/dist/egress-IUKdeayc.js.map +0 -1
- package/dist/environment-DiCljXMD.js +0 -657
- package/dist/environment-DiCljXMD.js.map +0 -1
- package/dist/errors-C9w_ud7g.js.map +0 -1
- package/dist/errors-yDAEwmZo.js.map +0 -1
- package/dist/fake-instructions-CUI33I_F.js +0 -32
- package/dist/fake-instructions-CUI33I_F.js.map +0 -1
- package/dist/files-BM78_nnF.js +0 -2
- package/dist/files-BpYgF2z0.js +0 -2
- package/dist/files-YCCVaTQC.js +0 -2
- package/dist/harness-iqWeJQMM.js +0 -154
- package/dist/harness-iqWeJQMM.js.map +0 -1
- package/dist/images-CscddrJU.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init-DBHyi92L.js +0 -2
- package/dist/init-NQfIvi-0.js.map +0 -1
- package/dist/jiti-BcJHCtrb.js +0 -46
- package/dist/jiti-BcJHCtrb.js.map +0 -1
- package/dist/live-S0qODb6o.js.map +0 -1
- package/dist/model-BbLGRtOs.js +0 -2
- package/dist/model-BndnmcLm.js.map +0 -1
- package/dist/model-Cl507trk.js.map +0 -1
- package/dist/model-DMOraCcm.js +0 -2
- package/dist/node-Co7EXge0.js.map +0 -1
- package/dist/opencode-providers-ByD85Q0l.js.map +0 -1
- package/dist/options-DPUlm4FI.js +0 -735
- package/dist/options-DPUlm4FI.js.map +0 -1
- package/dist/plan-PPc4-6xd.js.map +0 -1
- package/dist/preflight-CddycK92.js.map +0 -1
- package/dist/preflight-Zumy0adT.js +0 -2
- package/dist/prepare-CKdMoC7e.js +0 -3
- package/dist/prepare-CsP-057p.js.map +0 -1
- package/dist/provider-BDbNOQhQ.js +0 -2
- package/dist/providers-DkwiLKDS.js +0 -107
- package/dist/providers-DkwiLKDS.js.map +0 -1
- package/dist/providers-yXZZcPfx.js +0 -2
- package/dist/query-noGbekGF.js +0 -2
- package/dist/questions-BEPj98fZ.js +0 -234
- package/dist/questions-BEPj98fZ.js.map +0 -1
- package/dist/runtime-Dfb2r-cS.js.map +0 -1
- package/dist/sandbox--ZXuscAZ.js +0 -134
- package/dist/sandbox--ZXuscAZ.js.map +0 -1
- package/dist/server-Da60oe4b.js.map +0 -1
- package/dist/server-DiGR4JxK.js +0 -2
- package/dist/source-Dqu0jKwx.js +0 -2
- package/dist/src-BHNiP-5A.js +0 -4
- package/dist/src-BT4dB5CO.js +0 -2
- package/dist/src-BT5pwco0.js +0 -3
- package/dist/src-BrMbt1B2.js +0 -3
- package/dist/src-D13vpMh0.js +0 -3
- package/dist/src-D95O-Smv.js.map +0 -1
- package/dist/src-DDNXsD9H.js.map +0 -1
- package/dist/src-D_cXqmnI.js.map +0 -1
- package/dist/src-DdRlaiRc.js +0 -3
- package/dist/src-TdJuDYqB.js.map +0 -1
- package/dist/src-xczuQbE6.js +0 -3
- package/dist/state-B72h_jEw.js.map +0 -1
- package/dist/state-Bf_Vq_pV.js +0 -2
- package/dist/studio-app/assets/index-CUx6GoL5.css +0 -2
- package/dist/summary-k3mhWWXv.js.map +0 -1
- package/dist/tool-target-BU1JnSE9.js.map +0 -1
- package/dist/tools-D0gF2QoV.js.map +0 -1
- package/dist/views-DZ1YDqey.js.map +0 -1
- package/dist/views-Ds0GXWtX.js +0 -3
- package/dist/worker-entry-DXeyWY-m.js.map +0 -1
- package/dist/workspace-DzNL-3iO.js +0 -2
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { commonTool } from "@ai-sdk/harness";
|
|
3
|
+
import { createCredentialRequestTransformation, isHarnessAuthenticationEnvironment } from "@ai-sdk/harness/utils";
|
|
4
|
+
import { tool } from "@ai-sdk/provider-utils";
|
|
5
|
+
import { createACP } from "@ai-sdk/harness-acp";
|
|
6
|
+
//#region ../harness-fx/src/fx-stream.ts
|
|
7
|
+
/** fx's MCP tool name segment: bytes outside `[A-Za-z0-9_-]` become `_`. */
|
|
8
|
+
const fxMcpSegment = (value) => value ? Array.from(new TextEncoder().encode(value), fxMcpByte).join("") : "server";
|
|
9
|
+
const fxMcpByte = (byte) => byte >= 48 && byte <= 57 || byte >= 65 && byte <= 90 || byte >= 97 && byte <= 122 || byte === 45 || byte === 95 ? String.fromCharCode(byte) : "_";
|
|
10
|
+
const record = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
11
|
+
/** The text of an ACP tool call's `content` blocks, or nothing when it has none. */
|
|
12
|
+
const contentText = (content) => {
|
|
13
|
+
if (!Array.isArray(content)) return void 0;
|
|
14
|
+
const texts = content.flatMap((block) => {
|
|
15
|
+
const inner = record(record(block).content);
|
|
16
|
+
return inner.type === "text" && typeof inner.text === "string" ? [inner.text] : [];
|
|
17
|
+
});
|
|
18
|
+
return texts.length ? texts.join("") : void 0;
|
|
19
|
+
};
|
|
20
|
+
/** A `skill` call's part with the skill's `name` from its `location`, input kept as it came. */
|
|
21
|
+
const withSkillName = (part) => {
|
|
22
|
+
const raw = part.input;
|
|
23
|
+
let input = raw;
|
|
24
|
+
if (typeof raw === "string") try {
|
|
25
|
+
input = JSON.parse(raw);
|
|
26
|
+
} catch {
|
|
27
|
+
return part;
|
|
28
|
+
}
|
|
29
|
+
const location = record(input).location;
|
|
30
|
+
const name = typeof location === "string" ? /\/([^/]+)$/.exec(location)?.[1] : void 0;
|
|
31
|
+
if (!name || record(input).name !== void 0) return part;
|
|
32
|
+
const named = {
|
|
33
|
+
...record(input),
|
|
34
|
+
name
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
...part,
|
|
38
|
+
input: typeof raw === "string" ? JSON.stringify(named) : named
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Fixes up one fx turn's parts from `@ai-sdk/harness-acp`'s bridge:
|
|
43
|
+
*
|
|
44
|
+
* - A command's output streams in its `in_progress` updates; the `completed` update's `content`
|
|
45
|
+
* is a clipped JSON summary, and its `command_result` has the exit code. A shell result
|
|
46
|
+
* becomes `{ output, exitCode }` from those.
|
|
47
|
+
* - MCP calls are renamed from fx's `mcp_<server>_<tool>` to `mcp__<server>__<tool>`, as Claude
|
|
48
|
+
* Code names them, for the servers the session was given. The longest matching server wins,
|
|
49
|
+
* since a server's name can itself contain `_`.
|
|
50
|
+
* - A `skill` call names its skill by `location` (`skill:<source>:<n>/<name>`); its input gains
|
|
51
|
+
* that `name`, which is how reeval reads which skill a load tool loaded.
|
|
52
|
+
*/
|
|
53
|
+
var FxStreamTranslator = class {
|
|
54
|
+
prefixes;
|
|
55
|
+
outputs = /* @__PURE__ */ new Map();
|
|
56
|
+
exitCodes = /* @__PURE__ */ new Map();
|
|
57
|
+
constructor(options = {}) {
|
|
58
|
+
this.prefixes = (options.mcpServers ?? []).map((name) => [`mcp_${fxMcpSegment(name)}_`, name]).sort((a, b) => b[0].length - a[0].length);
|
|
59
|
+
}
|
|
60
|
+
push(part) {
|
|
61
|
+
if (part.type === "raw") {
|
|
62
|
+
this.observe(record(part.rawValue));
|
|
63
|
+
return part;
|
|
64
|
+
}
|
|
65
|
+
if (part.type !== "tool-call" && part.type !== "tool-result" && part.type !== "tool-error" || typeof part.toolName !== "string") return part;
|
|
66
|
+
const name = part.toolName;
|
|
67
|
+
if (name === "skill") return withSkillName(part);
|
|
68
|
+
const match = this.prefixes.find(([prefix]) => name.startsWith(prefix));
|
|
69
|
+
const out = match ? {
|
|
70
|
+
...part,
|
|
71
|
+
toolName: `mcp__${match[1]}__${name.slice(match[0].length)}`
|
|
72
|
+
} : part;
|
|
73
|
+
const id = typeof part.toolCallId === "string" ? part.toolCallId : "";
|
|
74
|
+
if (out.type !== "tool-result" || out.toolName !== "bash" || !this.outputs.has(id)) return out;
|
|
75
|
+
const exitCode = this.exitCodes.get(id);
|
|
76
|
+
return {
|
|
77
|
+
...out,
|
|
78
|
+
result: {
|
|
79
|
+
output: this.outputs.get(id),
|
|
80
|
+
...exitCode === void 0 ? {} : { exitCode }
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
observe(update) {
|
|
85
|
+
const id = update.toolCallId;
|
|
86
|
+
if (typeof id !== "string" || update.sessionUpdate !== "tool_call_update") return;
|
|
87
|
+
if (update.status === "in_progress") {
|
|
88
|
+
const text = contentText(update.content);
|
|
89
|
+
if (text !== void 0) this.outputs.set(id, (this.outputs.get(id) ?? "") + text);
|
|
90
|
+
}
|
|
91
|
+
const exitCode = record(update.command_result).exit_code;
|
|
92
|
+
if (typeof exitCode === "number") {
|
|
93
|
+
this.exitCodes.set(id, exitCode);
|
|
94
|
+
if (!this.outputs.has(id)) this.outputs.set(id, "");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
//#endregion
|
|
99
|
+
//#region ../harness-fx/src/fx-tools.ts
|
|
100
|
+
const FX_BUILTIN_TOOLS = {
|
|
101
|
+
bash: commonTool("bash", {
|
|
102
|
+
nativeName: "shell",
|
|
103
|
+
toolUseKind: "bash",
|
|
104
|
+
inputSchema: z.looseObject({ command: z.string() })
|
|
105
|
+
}),
|
|
106
|
+
write: {
|
|
107
|
+
...tool({ inputSchema: z.looseObject({
|
|
108
|
+
path: z.string(),
|
|
109
|
+
content: z.string()
|
|
110
|
+
}) }),
|
|
111
|
+
nativeName: "write_file",
|
|
112
|
+
toolUseKind: "edit"
|
|
113
|
+
},
|
|
114
|
+
edit: {
|
|
115
|
+
...tool({ inputSchema: z.looseObject({
|
|
116
|
+
path: z.string(),
|
|
117
|
+
old_string: z.string(),
|
|
118
|
+
new_string: z.string()
|
|
119
|
+
}) }),
|
|
120
|
+
nativeName: "edit_file",
|
|
121
|
+
toolUseKind: "edit"
|
|
122
|
+
},
|
|
123
|
+
delete_file: {
|
|
124
|
+
...tool({ inputSchema: z.looseObject({ path: z.string() }) }),
|
|
125
|
+
toolUseKind: "edit"
|
|
126
|
+
},
|
|
127
|
+
read: {
|
|
128
|
+
...tool({ inputSchema: z.looseObject({ path: z.string() }) }),
|
|
129
|
+
nativeName: "read_file",
|
|
130
|
+
toolUseKind: "readonly"
|
|
131
|
+
},
|
|
132
|
+
glob: commonTool("glob", {
|
|
133
|
+
nativeName: "glob_files",
|
|
134
|
+
toolUseKind: "readonly",
|
|
135
|
+
inputSchema: z.looseObject({ pattern: z.string() })
|
|
136
|
+
}),
|
|
137
|
+
grep: commonTool("grep", {
|
|
138
|
+
nativeName: "grep_files",
|
|
139
|
+
toolUseKind: "readonly",
|
|
140
|
+
inputSchema: z.looseObject({ pattern: z.string() })
|
|
141
|
+
}),
|
|
142
|
+
webSearch: commonTool("webSearch", {
|
|
143
|
+
nativeName: "web_search",
|
|
144
|
+
toolUseKind: "readonly",
|
|
145
|
+
inputSchema: z.looseObject({ query: z.string() })
|
|
146
|
+
}),
|
|
147
|
+
webFetch: {
|
|
148
|
+
...tool({ inputSchema: z.looseObject({ url: z.string() }) }),
|
|
149
|
+
nativeName: "web_fetch",
|
|
150
|
+
toolUseKind: "readonly"
|
|
151
|
+
},
|
|
152
|
+
skill: {
|
|
153
|
+
...tool({ inputSchema: z.looseObject({ location: z.string() }) }),
|
|
154
|
+
toolUseKind: "readonly"
|
|
155
|
+
},
|
|
156
|
+
subagent: { ...tool({ inputSchema: z.looseObject({ request: z.looseObject({}) }) }) },
|
|
157
|
+
mcp_select_tool: {
|
|
158
|
+
...tool({ inputSchema: z.looseObject({ name: z.string() }) }),
|
|
159
|
+
toolUseKind: "readonly"
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
/** The fx release the bootstrap installs, checked against its published sha256s. */
|
|
163
|
+
const FX_CLI_VERSION = "0.0.14";
|
|
164
|
+
const FX_CLI_SHA256 = {
|
|
165
|
+
x86_64: "731c1914fc2d497a10583f4416f8382c192e4897d6a0b4f713d6194455a8548b",
|
|
166
|
+
aarch64: "9f5cfbac1728fffddc2d5d874d1f7fe8d34f179e1bc86fb2e67a6e75074e53f3"
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Where a model runs: Vercel AI Gateway for a gateway id (`anthropic/claude-sonnet-5`), fx's own
|
|
170
|
+
* provider, or OpenAI's Chat Completions API for a bare OpenAI id (`gpt-4.1`), as an fx
|
|
171
|
+
* configured provider. Each takes one key, sent as a bearer token.
|
|
172
|
+
*/
|
|
173
|
+
const FX_PROVIDERS = {
|
|
174
|
+
gateway: {
|
|
175
|
+
credential: "AI_GATEWAY_API_KEY",
|
|
176
|
+
url: "https://ai-gateway.vercel.sh"
|
|
177
|
+
},
|
|
178
|
+
openai: {
|
|
179
|
+
credential: "OPENAI_API_KEY",
|
|
180
|
+
url: "https://api.openai.com"
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
/** The provider a model id names: a gateway id has a `/`, an OpenAI id doesn't. */
|
|
184
|
+
const fxProviderOf = (model) => model.includes("/") ? "gateway" : "openai";
|
|
185
|
+
/** Where harness-placed skills go, under the private home `@ai-sdk/harness-acp` gives fx. */
|
|
186
|
+
const FX_HOME_SKILLS_DIR = ".fx/skills";
|
|
187
|
+
/** Headless and pinned: no self-upgrade, no sounds, no colour. */
|
|
188
|
+
const FX_QUIET_ENV = {
|
|
189
|
+
FX_AUTO_UPGRADE: "0",
|
|
190
|
+
FX_SOUND: "0",
|
|
191
|
+
NO_COLOR: "1"
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* fx's HTTP client ignores `HTTPS_PROXY`, so it can't reach the sandbox's egress gateway itself.
|
|
195
|
+
* It talks plain HTTP to this relay on localhost (fx allows `http://` there), which forwards each
|
|
196
|
+
* request with Node's `fetch`, which honours the proxy (`NODE_USE_ENV_PROXY`) and the gateway's CA.
|
|
197
|
+
*/
|
|
198
|
+
const FX_RELAY_PORT = 47823;
|
|
199
|
+
const FX_RELAY = `import { createServer } from 'node:http'
|
|
200
|
+
import { Readable } from 'node:stream'
|
|
201
|
+
import { writeFileSync } from 'node:fs'
|
|
202
|
+
const [port, upstream, ready] = process.argv.slice(2)
|
|
203
|
+
const drop = new Set(['host', 'connection', 'content-length', 'transfer-encoding', 'keep-alive'])
|
|
204
|
+
const server = createServer(async (req, res) => {
|
|
205
|
+
try {
|
|
206
|
+
const headers = Object.entries(req.headers).filter(([k]) => !drop.has(k))
|
|
207
|
+
const body = req.method === 'GET' || req.method === 'HEAD' ? undefined : Readable.toWeb(req)
|
|
208
|
+
const r = await fetch(upstream + req.url, { method: req.method, headers, body, duplex: 'half' })
|
|
209
|
+
const out = {}
|
|
210
|
+
r.headers.forEach((v, k) => { if (k !== 'content-encoding' && k !== 'content-length') out[k] = v })
|
|
211
|
+
res.writeHead(r.status, out)
|
|
212
|
+
if (r.body) Readable.fromWeb(r.body).pipe(res)
|
|
213
|
+
else res.end()
|
|
214
|
+
} catch (error) {
|
|
215
|
+
res.writeHead(502, { 'content-type': 'text/plain' })
|
|
216
|
+
res.end(String(error))
|
|
217
|
+
}
|
|
218
|
+
})
|
|
219
|
+
server.on('error', (error) => {
|
|
220
|
+
if (error.code !== 'EADDRINUSE') throw error
|
|
221
|
+
writeFileSync(ready, '')
|
|
222
|
+
process.exit(0)
|
|
223
|
+
})
|
|
224
|
+
server.listen(Number(port), '127.0.0.1', () => writeFileSync(ready, ''))
|
|
225
|
+
`;
|
|
226
|
+
/** `fx-acp`: starts the relay to the model's provider (`FX_RELAY_UPSTREAM`), waits for it, then becomes `fx acp`. */
|
|
227
|
+
const FX_LAUNCH = `#!/bin/bash
|
|
228
|
+
bin="$(dirname "$0")"
|
|
229
|
+
ready="$(mktemp -u)"
|
|
230
|
+
node "$bin/fx-relay.mjs" ${FX_RELAY_PORT} "$FX_RELAY_UPSTREAM" "$ready" >/dev/null 2>&1 &
|
|
231
|
+
for _ in $(seq 100); do [ -e "$ready" ] && break; sleep 0.05; done
|
|
232
|
+
exec "$bin/fx" acp
|
|
233
|
+
`;
|
|
234
|
+
/** Downloads the pinned release for the sandbox's arch and checks its sha256, and writes the relay. */
|
|
235
|
+
const FX_INSTALL_COMMAND = `case "$(uname -m)" in
|
|
236
|
+
x86_64|amd64) arch=x86_64 sha=${FX_CLI_SHA256.x86_64} ;;
|
|
237
|
+
aarch64|arm64) arch=aarch64 sha=${FX_CLI_SHA256.aarch64} ;;
|
|
238
|
+
*) echo "fx has no release for $(uname -m)" >&2; exit 1 ;;
|
|
239
|
+
esac
|
|
240
|
+
curl -fsSL --retry 3 -o fx.tar.gz "https://github.com/vercel-labs/fx/releases/download/v${FX_CLI_VERSION}/fx-linux-$arch.tar.gz"
|
|
241
|
+
echo "$sha fx.tar.gz" | sha256sum -c -
|
|
242
|
+
mkdir -p "$HOME/.local/bin"
|
|
243
|
+
tar -xzf fx.tar.gz -C "$HOME/.local/bin" fx
|
|
244
|
+
rm fx.tar.gz
|
|
245
|
+
cat > "$HOME/.local/bin/fx-relay.mjs" <<'FX_RELAY'
|
|
246
|
+
${FX_RELAY}FX_RELAY
|
|
247
|
+
cat > "$HOME/.local/bin/fx-acp" <<'FX_LAUNCH'
|
|
248
|
+
${FX_LAUNCH}FX_LAUNCH
|
|
249
|
+
chmod +x "$HOME/.local/bin/fx-acp"`;
|
|
250
|
+
const relayUrl = `http://127.0.0.1:${FX_RELAY_PORT}`;
|
|
251
|
+
/**
|
|
252
|
+
* fx's process env: quiet flags, the provider, the model and the relay. The same keys for every
|
|
253
|
+
* model, so the bootstrap an image bakes for one provider serves the other.
|
|
254
|
+
*/
|
|
255
|
+
function fxEnv(model) {
|
|
256
|
+
const provider = fxProviderOf(model);
|
|
257
|
+
return {
|
|
258
|
+
...FX_QUIET_ENV,
|
|
259
|
+
FX_PROVIDER: provider,
|
|
260
|
+
FX_MODEL: model,
|
|
261
|
+
FX_GATEWAY_BASE_URL: relayUrl,
|
|
262
|
+
FX_RELAY_UPSTREAM: FX_PROVIDERS[provider].url
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* fx's `settings.json`, with OpenAI's Chat Completions API as the configured provider `openai`
|
|
267
|
+
* for a bare OpenAI id; the gateway needs none.
|
|
268
|
+
*/
|
|
269
|
+
function fxSettings(model) {
|
|
270
|
+
if (fxProviderOf(model) !== "openai") return [];
|
|
271
|
+
const settings = { providers: { openai: {
|
|
272
|
+
protocol: "openai-chat-completions",
|
|
273
|
+
base_url: `${relayUrl}/v1`,
|
|
274
|
+
auth: {
|
|
275
|
+
type: "bearer",
|
|
276
|
+
env: FX_PROVIDERS.openai.credential
|
|
277
|
+
}
|
|
278
|
+
} } };
|
|
279
|
+
return [{
|
|
280
|
+
path: ".fx/settings.json",
|
|
281
|
+
content: `${JSON.stringify(settings, null, 2)}\n`
|
|
282
|
+
}];
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* fx (`fx acp`) as an AI SDK harness, on Vercel AI Gateway or OpenAI's API by the model id. Thin
|
|
286
|
+
* config over `@ai-sdk/harness-acp`: fx names its tool calls, and its ACP `PromptResponse.usage`
|
|
287
|
+
* is the turn's summed tokens, so only MCP calls need renaming ({@link FxStreamTranslator}).
|
|
288
|
+
*/
|
|
289
|
+
function createFx(settings) {
|
|
290
|
+
const provider = FX_PROVIDERS[fxProviderOf(settings.model)];
|
|
291
|
+
if (!isHarnessAuthenticationEnvironment(settings.auth) || !settings.auth[provider.credential]) throw new Error(`fx auth must be an environment object with ${provider.credential} for ${settings.model}`);
|
|
292
|
+
const mcpServers = Object.keys(settings.mcpServers ?? {});
|
|
293
|
+
const acp = createACP({
|
|
294
|
+
version: "v1",
|
|
295
|
+
harnessId: "fx",
|
|
296
|
+
builtinTools: FX_BUILTIN_TOOLS,
|
|
297
|
+
source: {
|
|
298
|
+
type: "install-command",
|
|
299
|
+
command: FX_INSTALL_COMMAND
|
|
300
|
+
},
|
|
301
|
+
executable: "fx-acp",
|
|
302
|
+
args: [],
|
|
303
|
+
auth: settings.auth,
|
|
304
|
+
env: fxEnv(settings.model),
|
|
305
|
+
credentialEnv: Object.values(FX_PROVIDERS).map((each) => each.credential),
|
|
306
|
+
credentialBrokering: ({ env, sandboxEnv, headers }) => {
|
|
307
|
+
const key = env[provider.credential];
|
|
308
|
+
const placeholder = sandboxEnv?.[provider.credential];
|
|
309
|
+
if (!key || !placeholder) return [];
|
|
310
|
+
return [createCredentialRequestTransformation({
|
|
311
|
+
matchUrl: provider.url,
|
|
312
|
+
matchHeaders: { Authorization: `Bearer ${placeholder}` },
|
|
313
|
+
transformHeaders: {
|
|
314
|
+
...headers,
|
|
315
|
+
Authorization: `Bearer ${key}`
|
|
316
|
+
}
|
|
317
|
+
})];
|
|
318
|
+
},
|
|
319
|
+
...settings.mcpServers ? { mcpServers: settings.mcpServers } : {},
|
|
320
|
+
modelMapping: {
|
|
321
|
+
type: "session-config-option",
|
|
322
|
+
path: "model"
|
|
323
|
+
},
|
|
324
|
+
permissionModeMapping: {
|
|
325
|
+
"allow-reads": {
|
|
326
|
+
type: "session-mode",
|
|
327
|
+
modeId: "ask"
|
|
328
|
+
},
|
|
329
|
+
"allow-edits": {
|
|
330
|
+
type: "session-mode",
|
|
331
|
+
modeId: "ask"
|
|
332
|
+
},
|
|
333
|
+
"allow-all": {
|
|
334
|
+
type: "session-mode",
|
|
335
|
+
modeId: "full-access"
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
skillsDirectory: FX_HOME_SKILLS_DIR,
|
|
339
|
+
authenticationFiles: () => fxSettings(settings.model)
|
|
340
|
+
});
|
|
341
|
+
return {
|
|
342
|
+
...acp,
|
|
343
|
+
doStart: async (options) => {
|
|
344
|
+
const sandbox = options.sandboxSession;
|
|
345
|
+
if (settings.requireCredentialBrokering && typeof sandbox.addRequestTransformations !== "function") throw new Error(`The sandbox can't broker ${provider.credential} (it has no request transformations), and requireCredentialBrokering is set, so the key stays out of it.`);
|
|
346
|
+
return translated(await acp.doStart(options), mcpServers);
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
/** The session, with each turn's parts through a fresh {@link FxStreamTranslator}. */
|
|
351
|
+
function translated(session, mcpServers) {
|
|
352
|
+
const turn = (run) => (options) => {
|
|
353
|
+
const translator = new FxStreamTranslator({ mcpServers });
|
|
354
|
+
return run({
|
|
355
|
+
...options,
|
|
356
|
+
emit: (part) => options.emit(translator.push(part))
|
|
357
|
+
});
|
|
358
|
+
};
|
|
359
|
+
return new Proxy(session, { get(target, key, receiver) {
|
|
360
|
+
const value = Reflect.get(target, key, receiver);
|
|
361
|
+
if (key !== "doPromptTurn" && key !== "doContinueTurn") return value;
|
|
362
|
+
return turn(value.bind(target));
|
|
363
|
+
} });
|
|
364
|
+
}
|
|
365
|
+
//#endregion
|
|
366
|
+
export { FX_PROVIDERS as a, fxEnv as c, FX_BUILTIN_TOOLS as d, FxStreamTranslator as f, FX_INSTALL_COMMAND as i, fxProviderOf as l, FX_CLI_VERSION as n, FX_QUIET_ENV as o, fxMcpSegment as p, FX_HOME_SKILLS_DIR as r, createFx as s, FX_CLI_SHA256 as t, fxSettings as u };
|
|
367
|
+
|
|
368
|
+
//# sourceMappingURL=src-DIL0jST0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src-DIL0jST0.js","names":[],"sources":["../../harness-fx/src/fx-stream.ts","../../harness-fx/src/fx-tools.ts","../../harness-fx/src/fx-harness.ts"],"mappings":"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"}
|