reeval 0.9.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 +42 -30
- 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-6FefIhX7.js → agent-CURAwx_q.js} +6 -6
- package/dist/{agent-6FefIhX7.js.map → agent-CURAwx_q.js.map} +1 -1
- package/dist/{agent-WSmTaesf.js → agent-CaS_2Sce.js} +46 -15
- package/dist/agent-CaS_2Sce.js.map +1 -0
- package/dist/{analysis-DlGBDjTj.js → analysis-Bxub9LMT.js} +4 -4
- package/dist/{analysis-DlGBDjTj.js.map → analysis-Bxub9LMT.js.map} +1 -1
- package/dist/{assemble-BCZzTyR7.js → assemble-B9Alds-z.js} +69 -41
- package/dist/assemble-B9Alds-z.js.map +1 -0
- package/dist/assemble-J5MukZFY.js +1 -0
- package/dist/{client-Bbo9SPlK.js → assert-EUIoRdIt.js} +10 -113
- package/dist/assert-EUIoRdIt.js.map +1 -0
- package/dist/bridge/index.mjs +248 -55
- package/dist/{capture-Bp74Z6Fr.js → capture-CNb9SuU5.js} +145 -31
- package/dist/capture-CNb9SuU5.js.map +1 -0
- package/dist/capture-jquXZBKK.js +1 -0
- package/dist/{cli-CVrMh_qz.js → cli-D303Vj5N.js} +133 -115
- package/dist/cli-D303Vj5N.js.map +1 -0
- package/dist/{cli-spec-CKEYa8V2.js → cli-spec-BPZbQG2p.js} +36 -17
- 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-CzIFp1JQ.js → command-BLfT7vnQ.js} +18 -17
- package/dist/command-BLfT7vnQ.js.map +1 -0
- package/dist/{command-C5xFPKHM.js → command-BT9a37ZR.js} +374 -72
- package/dist/command-BT9a37ZR.js.map +1 -0
- package/dist/{command-DUT5l13I.js → command-Bge8F7Ko.js} +316 -83
- package/dist/command-Bge8F7Ko.js.map +1 -0
- package/dist/command-BkFjijN2.js +1 -0
- package/dist/{command-BFP0hKEb.js → command-CMJtHKRa.js} +14 -14
- package/dist/{command-BFP0hKEb.js.map → command-CMJtHKRa.js.map} +1 -1
- package/dist/commands-1p-bIWhN.js +1 -0
- package/dist/{commands-CLmPBrTS.js → commands-BFx16WB8.js} +7 -7
- 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-DbSMEVKs.js → context-C1mxXh80.js} +11 -3
- package/dist/context-C1mxXh80.js.map +1 -0
- package/dist/{db-CfQFwJtq.js → db-CdHizc4_.js} +455 -36
- 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-CRQGQbIt.js → docker-7b_2SaH7.js} +22 -21
- package/dist/docker-7b_2SaH7.js.map +1 -0
- package/dist/{docker-DV2GNgle.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-DlKycx5H.js → doctor-BYNok4UO.js} +262 -83
- 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-BhzNh7Yi.js → egress-C4PZTSSe.js} +146 -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/files-BAt0i00X.js +1 -0
- package/dist/{files-CSzVADHn.js → files-BXUdY8tr.js} +9 -8
- package/dist/{files-CSzVADHn.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-DJUFg-4e.js → files-DQmHE7pb.js} +5 -5
- package/dist/{files-DJUFg-4e.js.map → files-DQmHE7pb.js.map} +1 -1
- package/dist/files-ZZPqfAo6.js +1 -0
- package/dist/harness-B8QC9u0O.js +323 -0
- package/dist/harness-B8QC9u0O.js.map +1 -0
- package/dist/harness.d.ts +16 -30
- package/dist/harness.js +1 -2
- package/dist/{header-CALhmafp.js → header-hK-Z_Po9.js} +2 -2
- package/dist/{header-CALhmafp.js.map → header-hK-Z_Po9.js.map} +1 -1
- package/dist/{images-BMgdpMAX.js → images-0On0cztu.js} +114 -45
- package/dist/images-0On0cztu.js.map +1 -0
- package/dist/index.d.ts +9 -37
- package/dist/index.js +6 -2138
- package/dist/{init-BIdLF0F9.js → init-B77Rpcqc.js} +26 -8
- package/dist/init-B77Rpcqc.js.map +1 -0
- package/dist/init-BrOWin3W.js +1 -0
- package/dist/{invocations-CLaL8AuW.js → invocations-DbGfBAA_.js} +4 -4
- package/dist/{invocations-CLaL8AuW.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-B1BZoZ9b.js → model-h_cDtcRr.js} +18 -17
- package/dist/model-h_cDtcRr.js.map +1 -0
- package/dist/model-nwWJvaUR.js +1 -0
- package/dist/{model-BOnlAPzs.js → model-oqcDplJG.js} +111 -19
- 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-bDV8YFW0.js → patch-Zac5aIRM.js} +6 -6
- package/dist/{patch-bDV8YFW0.js.map → patch-Zac5aIRM.js.map} +1 -1
- package/dist/{plan-DUydFc_1.js → plan-C9Cy27Ay.js} +24 -9
- package/dist/plan-C9Cy27Ay.js.map +1 -0
- package/dist/preflight-CPWpQeBI.js +1 -0
- package/dist/{preflight-BkoSxf4C.js → preflight-D7iFPKeK.js} +8 -7
- package/dist/preflight-D7iFPKeK.js.map +1 -0
- package/dist/prepare-BGjePFQl.js +2 -0
- package/dist/{prepare-CUAWHebF.js → prepare-doGxaAGR.js} +38 -30
- package/dist/prepare-doGxaAGR.js.map +1 -0
- package/dist/{provenance-D7HK3vzt.js → provenance-DmE9uPVt.js} +3 -3
- package/dist/{provenance-D7HK3vzt.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-BjBMLa-C.js → query-Bes9Kh6Y.js} +3 -3
- package/dist/{query-BjBMLa-C.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-Di7m8dQ3.js → results-DuauQI3Z.js} +4 -4
- package/dist/{results-Di7m8dQ3.js.map → results-DuauQI3Z.js.map} +1 -1
- package/dist/{resume-SUz1GskV.js → resume-BRfa8E_s.js} +10 -10
- package/dist/{resume-SUz1GskV.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-DdsfnRz_.js → runtime-PX_oXiCS.js} +23 -71
- 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 +19 -6
- package/dist/sandbox.js +1 -2
- package/dist/server-C7sg1ndo.js +1 -0
- package/dist/{server-BNnXtmS8.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-Dof0NQBm.js → source-C8xumIWj.js} +2 -2
- package/dist/{source-Dof0NQBm.js.map → source-C8xumIWj.js.map} +1 -1
- package/dist/source-fGd0SaKP.js +1 -0
- package/dist/{src-8rRXy4u9.js → src-B7treWa8.js} +1538 -180
- 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-C_4Umgh2.js → src-CFp86GtV.js} +52 -51
- 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-COgE7991.js → src-DvK0EIZx.js} +5 -5
- package/dist/{src-COgE7991.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-CiXyLqg0.js → state-C__9swoG.js} +35 -23
- 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-CROH2NB3.js → index-DrQc2Yxd.js} +11 -11
- package/dist/studio-app/index.html +2 -2
- package/dist/{summary-BTksrIxn.js → summary-BLAVLySU.js} +150 -19
- package/dist/summary-BLAVLySU.js.map +1 -0
- package/dist/{summary-2OAWF2N7.js → summary-DgyjUh_l.js} +7 -7
- package/dist/{summary-2OAWF2N7.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-B10Uj7OI.js → tools-GCyNYSc1.js} +6 -6
- 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-D8RLfkFP.d.ts → types-g17bRAzt.d.ts} +389 -42
- 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 +42 -8
- package/dist/view/index.js +6 -6
- package/dist/views-BW6oCDUQ.js +2 -0
- package/dist/{views-Dqa5ojfZ.js → views-BmQF4UCI.js} +13 -8
- package/dist/views-BmQF4UCI.js.map +1 -0
- package/dist/{worker-entry-BAikHl9F.js → worker-entry-yOchGYYv.js} +16 -229
- package/dist/worker-entry-yOchGYYv.js.map +1 -0
- package/dist/{workspace-C-TrNIUc.js → workspace-CgyHEM0l.js} +6 -6
- package/dist/{workspace-C-TrNIUc.js.map → workspace-CgyHEM0l.js.map} +1 -1
- package/dist/workspace-D8sSgpiy.js +1 -0
- package/package.json +12 -12
- package/dist/agent-WSmTaesf.js.map +0 -1
- package/dist/assemble-BCZzTyR7.js.map +0 -1
- package/dist/assemble-C5qq5yT2.js +0 -2
- package/dist/capture-Bp74Z6Fr.js.map +0 -1
- package/dist/capture-DS-cPyuE.js +0 -2
- package/dist/cli-CVrMh_qz.js.map +0 -1
- package/dist/cli-spec-CKEYa8V2.js.map +0 -1
- package/dist/client-Bbo9SPlK.js.map +0 -1
- package/dist/command-BrmXUC-W.js +0 -2
- package/dist/command-C5xFPKHM.js.map +0 -1
- package/dist/command-CzIFp1JQ.js.map +0 -1
- package/dist/command-DUT5l13I.js.map +0 -1
- package/dist/commands-CLmPBrTS.js.map +0 -1
- package/dist/commands-fI3G2Wnh.js +0 -2
- package/dist/config-CGvBeewH.js +0 -457
- package/dist/config-CGvBeewH.js.map +0 -1
- package/dist/context-DbSMEVKs.js.map +0 -1
- package/dist/db-CSSFtGcN.js +0 -3
- package/dist/db-CfQFwJtq.js.map +0 -1
- package/dist/debug-SEmW4w8f.js +0 -2
- package/dist/dist-CTzThfu_.js.map +0 -1
- package/dist/docker-CRQGQbIt.js.map +0 -1
- package/dist/docker-DV2GNgle.js.map +0 -1
- package/dist/docker-Df_YOxxB.js +0 -2
- package/dist/doctor-DlKycx5H.js.map +0 -1
- package/dist/egress-BhzNh7Yi.js.map +0 -1
- package/dist/environment-1jE-HhO-.js +0 -657
- package/dist/environment-1jE-HhO-.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-AiEKuEZe.js +0 -2
- package/dist/files-BM78_nnF.js +0 -2
- package/dist/files-BMCvfB4X.js +0 -2
- package/dist/harness-CeCp2GSW.js +0 -171
- package/dist/harness-CeCp2GSW.js.map +0 -1
- package/dist/images-BMgdpMAX.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/init-B6vegaP_.js +0 -2
- package/dist/init-BIdLF0F9.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-B1BZoZ9b.js.map +0 -1
- package/dist/model-BOnlAPzs.js.map +0 -1
- package/dist/model-DWeg5J7z.js +0 -2
- package/dist/model-FXko2kl7.js +0 -2
- package/dist/node-Co7EXge0.js.map +0 -1
- package/dist/opencode-providers-ByD85Q0l.js.map +0 -1
- package/dist/options-CKqyPGxX.js +0 -739
- package/dist/options-CKqyPGxX.js.map +0 -1
- package/dist/plan-DUydFc_1.js.map +0 -1
- package/dist/preflight-BkoSxf4C.js.map +0 -1
- package/dist/preflight-D5LW7Oqi.js +0 -2
- package/dist/prepare-CUAWHebF.js.map +0 -1
- package/dist/prepare-oji2oO8W.js +0 -3
- package/dist/provider-BDbNOQhQ.js +0 -2
- package/dist/providers-B1DzMvmH.js +0 -107
- package/dist/providers-B1DzMvmH.js.map +0 -1
- package/dist/providers-CpEfNU1F.js +0 -2
- package/dist/query-oPO_XrTy.js +0 -2
- package/dist/questions-B8by4Bbt.js +0 -234
- package/dist/questions-B8by4Bbt.js.map +0 -1
- package/dist/runtime-DdsfnRz_.js.map +0 -1
- package/dist/sandbox-D5v-of6d.js +0 -139
- package/dist/sandbox-D5v-of6d.js.map +0 -1
- package/dist/server-BNnXtmS8.js.map +0 -1
- package/dist/server-BNwoKzlm.js +0 -2
- package/dist/source-Bk_0ZaEY.js +0 -2
- package/dist/src-8rRXy4u9.js.map +0 -1
- package/dist/src-BGWuWp6I.js +0 -3
- package/dist/src-BRt0O02i.js +0 -3
- package/dist/src-Bx2x1ekD.js +0 -3
- package/dist/src-C_4Umgh2.js.map +0 -1
- package/dist/src-D95O-Smv.js.map +0 -1
- package/dist/src-DDNXsD9H.js.map +0 -1
- package/dist/src-DLa-ESW0.js +0 -4
- package/dist/src-cN0aB-WR.js +0 -3
- package/dist/src-cdIVjC5b.js +0 -2
- package/dist/src-sIsDHWYq.js +0 -3
- package/dist/state-Bo5zg4da.js +0 -2
- package/dist/state-CiXyLqg0.js.map +0 -1
- package/dist/studio-app/assets/index-B9MCTfuu.css +0 -2
- package/dist/summary-BTksrIxn.js.map +0 -1
- package/dist/tool-target-BU1JnSE9.js.map +0 -1
- package/dist/tools-B10Uj7OI.js.map +0 -1
- package/dist/views-Cs2Oqayd.js +0 -3
- package/dist/views-Dqa5ojfZ.js.map +0 -1
- package/dist/worker-entry-BAikHl9F.js.map +0 -1
- package/dist/workspace-Do_SiWBs.js +0 -2
|
@@ -1,25 +1,313 @@
|
|
|
1
|
-
import { n as
|
|
2
|
-
import {
|
|
1
|
+
import { n as toolTarget } from "./tool-target-D2mcYlSQ.js";
|
|
2
|
+
import { n as UsageError } from "./errors-B6BSMs03.js";
|
|
3
3
|
import { t as RUN_ID } from "./paths-BmR-7tx3.js";
|
|
4
4
|
import { a as fromCwd } from "./ids-Bp6ut7ZD.js";
|
|
5
|
-
import { o as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { s as
|
|
9
|
-
import { c as
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { r as
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
5
|
+
import { o as redactSecrets, s as registerSecret } from "./redact-DJ9JCShu.js";
|
|
6
|
+
import { o as sortAnalyses } from "./analysis-Bxub9LMT.js";
|
|
7
|
+
import { c as readableTranscriptLine } from "./record-BKmMvZ6O.js";
|
|
8
|
+
import { p as scratchDir, s as readRecord } from "./files-BXUdY8tr.js";
|
|
9
|
+
import { c as renderSummary } from "./summary-BLAVLySU.js";
|
|
10
|
+
import { c as resolveRun } from "./views-BmQF4UCI.js";
|
|
11
|
+
import { a as compareView, h as showRecord, n as allRuns, s as historyView } from "./commands-BFx16WB8.js";
|
|
12
|
+
import { r as VIEW_NAMES, s as openHistoryDb } from "./db-CdHizc4_.js";
|
|
13
|
+
import { r as statementCount } from "./query-Bes9Kh6Y.js";
|
|
14
|
+
import { n as resolveFile } from "./source-C8xumIWj.js";
|
|
15
|
+
import { basename, join } from "node:path";
|
|
16
|
+
import { z } from "zod";
|
|
15
17
|
import { timingSafeEqual } from "node:crypto";
|
|
16
18
|
import { readFile } from "node:fs/promises";
|
|
17
|
-
import { z } from "zod";
|
|
18
19
|
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/server";
|
|
20
|
+
//#region src/mcp/files.ts
|
|
21
|
+
const source = (config) => ({
|
|
22
|
+
root: config.root,
|
|
23
|
+
historyDir: config.history.dir,
|
|
24
|
+
scratch: true
|
|
25
|
+
});
|
|
26
|
+
/** The attempt `ref` names in `run`: its key, or an attempt id (`<cell>#<n>`) unique in the run. */
|
|
27
|
+
function findAttempt(run, ref) {
|
|
28
|
+
const attempts = run.evals.flatMap((e) => e.attempts);
|
|
29
|
+
const exact = attempts.find((a) => a.key === ref);
|
|
30
|
+
if (exact) return exact;
|
|
31
|
+
const byId = attempts.filter((a) => a.id === ref);
|
|
32
|
+
if (byId.length === 1 && byId[0]) return byId[0];
|
|
33
|
+
const keys = attempts.map((a) => a.key);
|
|
34
|
+
const listed = `${keys.slice(0, 20).join("; ")}${keys.length > 20 ? `; … ${keys.length - 20} more` : ""}`;
|
|
35
|
+
throw new Error(byId.length > 1 ? `"${ref}" is an attempt of ${byId.length} evals in ${run.runId}; use its key: ${byId.map((a) => a.key).join("; ")}` : `No attempt "${ref}" in ${run.runId}. Attempts: ${listed}`);
|
|
36
|
+
}
|
|
37
|
+
/** The path of a file the run kept, or null when it wasn't kept. */
|
|
38
|
+
async function runFile(config, run, path) {
|
|
39
|
+
if (!path) return null;
|
|
40
|
+
return resolveFile(source(config), {
|
|
41
|
+
kind: "artifact",
|
|
42
|
+
runId: run.runId,
|
|
43
|
+
segments: path.split("/")
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/** The attempt's transcript lines, or null when the run kept no transcript for it. */
|
|
47
|
+
async function transcriptLines(config, run, attempt) {
|
|
48
|
+
const file = await runFile(config, run, attempt.files.transcript?.path);
|
|
49
|
+
if (!file) return null;
|
|
50
|
+
const lines = [];
|
|
51
|
+
for (const line of (await readFile(file, "utf8")).split("\n")) {
|
|
52
|
+
if (!line.trim()) continue;
|
|
53
|
+
try {
|
|
54
|
+
lines.push(readableTranscriptLine(JSON.parse(line)));
|
|
55
|
+
} catch {}
|
|
56
|
+
}
|
|
57
|
+
return lines;
|
|
58
|
+
}
|
|
59
|
+
async function readTranscript(config, run, ref) {
|
|
60
|
+
const attempt = findAttempt(run, ref);
|
|
61
|
+
const lines = await transcriptLines(config, run, attempt);
|
|
62
|
+
if (!lines) throw new Error(`${run.runId} kept no transcript for ${attempt.key} (recorded with --artifacts failures or none?)`);
|
|
63
|
+
return {
|
|
64
|
+
attempt,
|
|
65
|
+
lines
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** The last `chars` characters of a kept file, from a line start; null when it wasn't kept. */
|
|
69
|
+
async function fileTail(config, run, path, chars) {
|
|
70
|
+
const file = await runFile(config, run, path);
|
|
71
|
+
if (!file) return null;
|
|
72
|
+
const text = (await readFile(file, "utf8")).trimEnd();
|
|
73
|
+
if (text.length <= chars) return text;
|
|
74
|
+
const cut = text.slice(-chars);
|
|
75
|
+
const nl = cut.indexOf("\n");
|
|
76
|
+
return `…${nl >= 0 && nl < cut.length - 1 ? cut.slice(nl + 1) : cut}`;
|
|
77
|
+
}
|
|
78
|
+
const clip = (text, max) => text.length <= max ? text : `${text.slice(0, max)}… (${text.length - max} more characters)`;
|
|
79
|
+
const asText = (value) => typeof value === "string" ? value : value == null ? "" : JSON.stringify(value);
|
|
80
|
+
/** One transcript line, cut down to what says what happened. Line numbers count from 1. */
|
|
81
|
+
function compactLine(line, n) {
|
|
82
|
+
switch (line.type) {
|
|
83
|
+
case "prompt": return {
|
|
84
|
+
line: n,
|
|
85
|
+
turn: line.turn,
|
|
86
|
+
prompt: clip(line.text, 300)
|
|
87
|
+
};
|
|
88
|
+
case "text": return {
|
|
89
|
+
line: n,
|
|
90
|
+
turn: line.turn,
|
|
91
|
+
text: clip(line.text, 600)
|
|
92
|
+
};
|
|
93
|
+
case "tool": return {
|
|
94
|
+
line: n,
|
|
95
|
+
turn: line.turn,
|
|
96
|
+
tool: line.tool,
|
|
97
|
+
target: toolTarget(line.input, line.tool),
|
|
98
|
+
ok: line.ok,
|
|
99
|
+
output: clip(asText(line.output), 400)
|
|
100
|
+
};
|
|
101
|
+
case "file-edit": return {
|
|
102
|
+
line: n,
|
|
103
|
+
turn: line.turn,
|
|
104
|
+
edit: line.path,
|
|
105
|
+
kind: line.kind
|
|
106
|
+
};
|
|
107
|
+
case "web-search": return {
|
|
108
|
+
line: n,
|
|
109
|
+
turn: line.turn,
|
|
110
|
+
tool: "web-search",
|
|
111
|
+
target: line.query,
|
|
112
|
+
ok: line.ok ?? true
|
|
113
|
+
};
|
|
114
|
+
case "web-fetch": return {
|
|
115
|
+
line: n,
|
|
116
|
+
turn: line.turn,
|
|
117
|
+
tool: "web-fetch",
|
|
118
|
+
target: line.url,
|
|
119
|
+
ok: line.ok
|
|
120
|
+
};
|
|
121
|
+
case "error":
|
|
122
|
+
case "retry": return {
|
|
123
|
+
line: n,
|
|
124
|
+
turn: line.turn,
|
|
125
|
+
[line.type]: clip(line.message, 600)
|
|
126
|
+
};
|
|
127
|
+
case "turn-end": return {
|
|
128
|
+
line: n,
|
|
129
|
+
turn: line.turn,
|
|
130
|
+
turnEnd: line.status
|
|
131
|
+
};
|
|
132
|
+
default: return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function transcriptTail(lines, tail) {
|
|
136
|
+
const compact = lines.flatMap((line, i) => {
|
|
137
|
+
const c = compactLine(line, i + 1);
|
|
138
|
+
return c ? [c] : [];
|
|
139
|
+
});
|
|
140
|
+
return {
|
|
141
|
+
lines: lines.length,
|
|
142
|
+
tail: compact.slice(-tail)
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const failedHere = (c) => c.fail > 0 || c.infraError > 0;
|
|
146
|
+
const changedParts = (a, b) => Object.keys(a).filter((k) => a[k] !== b[k]);
|
|
147
|
+
function changedSources(now, before) {
|
|
148
|
+
const old = new Map(before.map((s) => [s.path, s.sha256]));
|
|
149
|
+
const paths = now.filter((s) => old.get(s.path) !== s.sha256).map((s) => s.path);
|
|
150
|
+
const kept = new Set(now.map((s) => s.path));
|
|
151
|
+
return [...paths, ...before.filter((s) => !kept.has(s.path)).map((s) => `${s.path} (removed)`)];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* The cell's earlier runs, newest first: whether this failure is new, the last run where the cell
|
|
155
|
+
* passed cleanly, the run its failing streak started in, and what changed since that clean run.
|
|
156
|
+
*/
|
|
157
|
+
function cellHistory(entries, run, e, cell) {
|
|
158
|
+
const earlier = [];
|
|
159
|
+
for (const entry of entries) {
|
|
160
|
+
if (entry.runId >= run.runId) continue;
|
|
161
|
+
const ev = entry.evals.find((x) => x.key === e.key);
|
|
162
|
+
const c = ev?.cells.find((x) => x.key === cell.key);
|
|
163
|
+
if (ev && c) earlier.push({
|
|
164
|
+
entry,
|
|
165
|
+
eval: ev,
|
|
166
|
+
cell: c
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
earlier.reverse();
|
|
170
|
+
const runRef = (entry) => ({
|
|
171
|
+
runId: entry.runId,
|
|
172
|
+
sha: entry.git?.sha.slice(0, 12) ?? null,
|
|
173
|
+
recorded: entry.recorded
|
|
174
|
+
});
|
|
175
|
+
let since = run.runId;
|
|
176
|
+
for (const x of earlier) {
|
|
177
|
+
if (!failedHere(x.cell)) break;
|
|
178
|
+
since = x.entry.runId;
|
|
179
|
+
}
|
|
180
|
+
const clean = earlier.find((x) => !failedHere(x.cell) && x.cell.pass > 0);
|
|
181
|
+
const previous = earlier[0];
|
|
182
|
+
return {
|
|
183
|
+
new: !previous || !failedHere(previous.cell),
|
|
184
|
+
failingSince: since,
|
|
185
|
+
lastPass: clean ? {
|
|
186
|
+
...runRef(clean.entry),
|
|
187
|
+
changed: changedParts(cell.fingerprintParts, clean.cell.fingerprintParts),
|
|
188
|
+
changedSources: changedSources(e.sources, clean.eval.sources)
|
|
189
|
+
} : null,
|
|
190
|
+
earlier: earlier.slice(0, 8).map((x) => ({
|
|
191
|
+
...runRef(x.entry),
|
|
192
|
+
pass: x.cell.pass,
|
|
193
|
+
fail: x.cell.fail,
|
|
194
|
+
infraError: x.cell.infraError,
|
|
195
|
+
sameFingerprint: x.cell.fingerprint === cell.fingerprint
|
|
196
|
+
})),
|
|
197
|
+
earlierRuns: earlier.length
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
async function describeAttempt(config, run, e, a, tail) {
|
|
201
|
+
const cell = e.cells.find((c) => c.key === a.cell);
|
|
202
|
+
const lines = await transcriptLines(config, run, a);
|
|
203
|
+
const failedChecks = await Promise.all(a.checks.filter((c) => c.exitCode !== 0).map(async (c) => ({
|
|
204
|
+
command: c.command,
|
|
205
|
+
exitCode: c.exitCode,
|
|
206
|
+
log: c.log?.path ?? null,
|
|
207
|
+
logTail: await fileTail(config, run, c.log?.path, 1500)
|
|
208
|
+
})));
|
|
209
|
+
const finalText = a.turns.findLast((t) => t.text)?.text ?? "";
|
|
210
|
+
const failedAssertions = (a.assertions ?? []).filter((x) => x.status !== "pass").map((x) => ({
|
|
211
|
+
label: x.label,
|
|
212
|
+
matcher: x.matcher,
|
|
213
|
+
status: x.status,
|
|
214
|
+
soft: x.soft,
|
|
215
|
+
message: x.message ? clip(x.message, 800) : null
|
|
216
|
+
}));
|
|
217
|
+
const repeated = a.error?.kind === "assertion" && a.assertions?.some((x) => x.message === a.error?.message);
|
|
218
|
+
return {
|
|
219
|
+
eval: e.id,
|
|
220
|
+
attempt: a.key,
|
|
221
|
+
cell: a.cell,
|
|
222
|
+
harness: cell?.harness ?? null,
|
|
223
|
+
environment: cell?.environment ?? null,
|
|
224
|
+
outcome: a.outcome,
|
|
225
|
+
gated: cell ? cell.gate !== "none" : true,
|
|
226
|
+
error: a.error ? {
|
|
227
|
+
kind: a.error.kind,
|
|
228
|
+
message: repeated ? null : clip(a.error.message, 1500)
|
|
229
|
+
} : null,
|
|
230
|
+
failedAssertions,
|
|
231
|
+
failedJudgements: a.judgements.filter((j) => j.verdict === "fail").map((j) => ({
|
|
232
|
+
question: j.question,
|
|
233
|
+
score: j.score,
|
|
234
|
+
threshold: j.threshold
|
|
235
|
+
})),
|
|
236
|
+
failedChecks,
|
|
237
|
+
turnErrors: a.turns.flatMap((t, i) => t.error ? [{
|
|
238
|
+
turn: i + 1,
|
|
239
|
+
error: t.error
|
|
240
|
+
}] : []),
|
|
241
|
+
setupLogTail: a.outcome === "infra_error" ? await fileTail(config, run, a.files.setupLog?.path, 1500) : null,
|
|
242
|
+
changedFiles: a.changedFiles.slice(0, 30).map((f) => `${f.status} ${f.path}`),
|
|
243
|
+
finalMessage: finalText ? clip(finalText, 800) : null,
|
|
244
|
+
transcript: lines ? transcriptTail(lines, tail) : null,
|
|
245
|
+
files: {
|
|
246
|
+
transcript: a.files.transcript?.path ?? null,
|
|
247
|
+
diff: a.files.diff?.path ?? null,
|
|
248
|
+
setupLog: a.files.setupLog?.path ?? null
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
const rank = (e, a) => {
|
|
253
|
+
const gated = e.cells.find((c) => c.key === a.cell)?.gate !== "none";
|
|
254
|
+
return (a.outcome === "fail" ? 0 : 1) + (gated ? 0 : 2);
|
|
255
|
+
};
|
|
256
|
+
async function failuresView(config, options = {}) {
|
|
257
|
+
const entries = await allRuns(config);
|
|
258
|
+
const entry = resolveRun(entries, options.run);
|
|
259
|
+
const dir = entry.recorded ? config.history.dir : scratchDir(config.root);
|
|
260
|
+
const run = await readRecord(join(dir, `${entry.runId}.json`));
|
|
261
|
+
const needle = options.filter?.toLowerCase();
|
|
262
|
+
const failing = run.evals.filter((e) => !needle || e.id.toLowerCase().includes(needle)).flatMap((e) => e.attempts.filter((a) => a.outcome === "fail" || a.outcome === "infra_error").map((a) => ({
|
|
263
|
+
e,
|
|
264
|
+
a
|
|
265
|
+
}))).sort((x, y) => rank(x.e, x.a) - rank(y.e, y.a));
|
|
266
|
+
const limit = options.limit ?? 10;
|
|
267
|
+
const shown = failing.slice(0, limit);
|
|
268
|
+
const histories = /* @__PURE__ */ new Map();
|
|
269
|
+
const cells = shown.flatMap(({ e, a }) => {
|
|
270
|
+
const id = `${e.key}\0${a.cell}`;
|
|
271
|
+
const cell = e.cells.find((c) => c.key === a.cell);
|
|
272
|
+
if (histories.has(id) || !cell) return [];
|
|
273
|
+
histories.set(id, cellHistory(entries, run, e, cell));
|
|
274
|
+
return [{
|
|
275
|
+
eval: e.id,
|
|
276
|
+
cell: a.cell,
|
|
277
|
+
...histories.get(id)
|
|
278
|
+
}];
|
|
279
|
+
});
|
|
280
|
+
const attempts = await Promise.all(shown.map(({ e, a }) => describeAttempt(config, run, e, a, options.tail ?? 12)));
|
|
281
|
+
const header = {
|
|
282
|
+
runId: run.runId,
|
|
283
|
+
recorded: entry.recorded,
|
|
284
|
+
sha: run.git?.sha.slice(0, 12) ?? null,
|
|
285
|
+
summary: run.summary
|
|
286
|
+
};
|
|
287
|
+
if (failing.length === 0) {
|
|
288
|
+
const latest = [...entries].reverse().find((x) => x.summary.fail + x.summary.infraError > 0 && x.runId !== run.runId);
|
|
289
|
+
return {
|
|
290
|
+
...header,
|
|
291
|
+
failing: 0,
|
|
292
|
+
attempts: [],
|
|
293
|
+
cells: [],
|
|
294
|
+
note: `Nothing failed in ${run.runId}${needle ? ` matching "${options.filter}"` : ""}.${latest ? ` The latest run with a failure is ${latest.runId}: pass it as run.` : ""}`
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
return {
|
|
298
|
+
...header,
|
|
299
|
+
failing: failing.length,
|
|
300
|
+
shown: shown.length,
|
|
301
|
+
attempts,
|
|
302
|
+
cells,
|
|
303
|
+
next: `For the whole story of one attempt, transcript { run: "${run.runId}", attempt }. compare { head: "${run.runId}" } diffs this run against its baseline; query_flaky_cells says whether a cell fails intermittently across runs.`
|
|
304
|
+
};
|
|
305
|
+
}
|
|
19
306
|
const MAX_ROWS = 1e3;
|
|
20
307
|
/** What each view has one row per, for its tool's description. */
|
|
21
308
|
const VIEW_ROWS = {
|
|
22
309
|
lift: "variant cell per run: its control, both sides’ pass counts and pass@1, lift points and the 95% interval (lo, hi), within_noise",
|
|
310
|
+
family_lift: "variant cell per pooled evaluate.each per run: its control, paired cases, both sides’ mean pass@1 over them, lift points and the 95% interval (lo, hi), verdict and effort ratios",
|
|
23
311
|
effort: "cell per run: attempts, median tool calls, agent seconds and tokens; for a variant, the ratios to its control, p-values and verdicts (tokens omitted when either side has no usage sample)",
|
|
24
312
|
factor_effects: "factor contrast (environment, harness, model) by evidence tier, with pass@1 and effort verdicts",
|
|
25
313
|
skill_reads: "attempt and skill its environment placed: the transcript line of its first read (a path under skills/<name>/, or a skill / load_skill call), and how many",
|
|
@@ -111,44 +399,7 @@ const cell = z.union([
|
|
|
111
399
|
z.null()
|
|
112
400
|
]);
|
|
113
401
|
const limitField = (max, fallback, what) => z.number().int().min(1).max(max).optional().describe(`At most this many ${what} (default ${fallback}, at most ${max})`);
|
|
114
|
-
const source = (config) => ({
|
|
115
|
-
root: config.root,
|
|
116
|
-
historyDir: config.history.dir,
|
|
117
|
-
scratch: true
|
|
118
|
-
});
|
|
119
402
|
const transcriptUri = (runId, attemptKey) => `reeval://runs/${runId}/transcripts/${encodeURIComponent(attemptKey)}`;
|
|
120
|
-
/** The attempt `ref` names in `run`: its key, or an attempt id (`<cell>#<n>`) unique in the run. */
|
|
121
|
-
function findAttempt(run, ref) {
|
|
122
|
-
const attempts = run.evals.flatMap((e) => e.attempts);
|
|
123
|
-
const exact = attempts.find((a) => a.key === ref);
|
|
124
|
-
if (exact) return exact;
|
|
125
|
-
const byId = attempts.filter((a) => a.id === ref);
|
|
126
|
-
if (byId.length === 1 && byId[0]) return byId[0];
|
|
127
|
-
const keys = attempts.map((a) => a.key);
|
|
128
|
-
const listed = `${keys.slice(0, 20).join("; ")}${keys.length > 20 ? `; … ${keys.length - 20} more` : ""}`;
|
|
129
|
-
throw new Error(byId.length > 1 ? `"${ref}" is an attempt of ${byId.length} evals in ${run.runId}; use its key: ${byId.map((a) => a.key).join("; ")}` : `No attempt "${ref}" in ${run.runId}. Attempts: ${listed}`);
|
|
130
|
-
}
|
|
131
|
-
async function readTranscript(config, run, ref) {
|
|
132
|
-
const attempt = findAttempt(run, ref);
|
|
133
|
-
const path = attempt.files.transcript?.path;
|
|
134
|
-
const file = path && await resolveFile(source(config), {
|
|
135
|
-
kind: "artifact",
|
|
136
|
-
runId: run.runId,
|
|
137
|
-
segments: path.split("/")
|
|
138
|
-
});
|
|
139
|
-
if (!file) throw new Error(`${run.runId} kept no transcript for ${attempt.key} (recorded with --artifacts failures or none?)`);
|
|
140
|
-
const lines = [];
|
|
141
|
-
for (const line of (await readFile(file, "utf8")).split("\n")) {
|
|
142
|
-
if (!line.trim()) continue;
|
|
143
|
-
try {
|
|
144
|
-
lines.push(readableTranscriptLine(JSON.parse(line)));
|
|
145
|
-
} catch {}
|
|
146
|
-
}
|
|
147
|
-
return {
|
|
148
|
-
attempt,
|
|
149
|
-
lines
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
403
|
/** Reads the record of a run named by id, recorded or scratch; null if there's none. */
|
|
153
404
|
async function recordById(config, runId) {
|
|
154
405
|
if (!RUN_ID.test(runId)) return null;
|
|
@@ -158,8 +409,9 @@ async function recordById(config, runId) {
|
|
|
158
409
|
});
|
|
159
410
|
return file ? readRecord(file) : null;
|
|
160
411
|
}
|
|
161
|
-
const INSTRUCTIONS = `Read-only access to this project's reeval run history: runs of evals for coding agents, recorded in git and scratch runs in .reeval/runs.
|
|
162
|
-
|
|
412
|
+
const INSTRUCTIONS = `Read-only access to this project's reeval run history: runs of evals for coding agents, recorded in git and scratch runs in .reeval/runs. Use it to debug a failed, flaky or regressed eval run.
|
|
413
|
+
Why did a run fail? Call failures first: each failed attempt's failing checks and judge scores, error, check logs and the end of its transcript, and whether its cell failed in earlier runs (new or not, since which run, what changed since it last passed). It's far smaller than show or summary.md.
|
|
414
|
+
Then: transcript reads one attempt in full; compare diffs two runs (regressions, fixes, stack changes); history is pass/fail per eval over recent runs; show is one run's whole record. The query_* tools answer questions across runs (flaky_cells, drift, failing_attempts, eval_trend, lift, effort); query runs read-only SQL (query_schema lists tables). analysis returns saved reeval analyze results. Runs are named latest, latest~N, a run id prefix or a git SHA prefix. Nothing here runs evals: reeval run does, in a terminal.`;
|
|
163
415
|
/** Builds the factory `reeval mcp` serves: one McpServer per connection (stdio) or request (HTTP). */
|
|
164
416
|
async function serverFactory(config, version) {
|
|
165
417
|
const columns = await viewColumns(config);
|
|
@@ -169,23 +421,55 @@ async function serverFactory(config, version) {
|
|
|
169
421
|
title: "reeval run history",
|
|
170
422
|
version
|
|
171
423
|
}, { instructions: INSTRUCTIONS });
|
|
424
|
+
server.registerTool("failures", {
|
|
425
|
+
title: "Why a run failed",
|
|
426
|
+
description: "Debug a failed reeval eval run: why each failed or infra-error attempt failed. Per attempt: the failing expect checks with their messages, failed judge scores against thresholds, the error, nonzero check commands with their log tails, the setup log tail for infra errors, changed files, the final message and the last transcript lines (tool calls with targets and output). Per cell: whether the failure is new, the run its failing streak started in, the last run it passed and what changed since (fingerprint parts, eval source files). Start here, before show or transcript.",
|
|
427
|
+
inputSchema: z.object({
|
|
428
|
+
run: z.string().optional().describe(RUN_REF),
|
|
429
|
+
filter: z.string().optional().describe("Only evals whose id contains this"),
|
|
430
|
+
limit: limitField(100, 10, "failed attempts"),
|
|
431
|
+
tail: z.number().int().min(0).max(100).optional().describe(`Transcript lines from the end of each attempt (default 12)`)
|
|
432
|
+
}),
|
|
433
|
+
annotations: READ_ONLY
|
|
434
|
+
}, guard(async ({ run, filter, limit, tail }) => failuresView(config, {
|
|
435
|
+
run,
|
|
436
|
+
filter,
|
|
437
|
+
limit,
|
|
438
|
+
tail
|
|
439
|
+
})));
|
|
172
440
|
server.registerTool("history", {
|
|
173
441
|
title: "Run history",
|
|
174
|
-
description: "Pass/fail of each eval over recent runs, oldest first (reeval history --json): runs[] with their ids, commits and summaries, and rows[] with one outcome per run (null when not run) and drift, the runs where the eval or its stack changed.",
|
|
442
|
+
description: "Pass/fail of each reeval eval over recent runs, oldest first (reeval history --json, without each run's evals[], which show has): runs[] with their ids, commits and summaries, and rows[] with one outcome per run (null when not run) and drift, the runs where the eval or its stack changed. With no recorded runs it lists the scratch runs, with a note.",
|
|
175
443
|
inputSchema: z.object({
|
|
176
444
|
filter: z.string().optional().describe("Only evals whose id contains this"),
|
|
177
445
|
limit: limitField(500, 20, "runs"),
|
|
178
446
|
all: z.boolean().optional().describe("Include scratch runs that were never recorded")
|
|
179
447
|
}),
|
|
180
448
|
annotations: READ_ONLY
|
|
181
|
-
}, guard(async ({ filter, limit, all }) =>
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
449
|
+
}, guard(async ({ filter, limit, all }) => {
|
|
450
|
+
const view = briefHistory(await historyView(config, {
|
|
451
|
+
filter,
|
|
452
|
+
limit,
|
|
453
|
+
all
|
|
454
|
+
}));
|
|
455
|
+
if (all || view.runs.length) return view;
|
|
456
|
+
const scratch = briefHistory(await historyView(config, {
|
|
457
|
+
filter,
|
|
458
|
+
limit,
|
|
459
|
+
all: true
|
|
460
|
+
}));
|
|
461
|
+
if (!scratch.runs.length) return {
|
|
462
|
+
...view,
|
|
463
|
+
note: "No runs yet. reeval run, in a terminal, makes one."
|
|
464
|
+
};
|
|
465
|
+
return {
|
|
466
|
+
...scratch,
|
|
467
|
+
note: "No recorded runs yet, so these are the scratch runs in .reeval/runs (reeval run without --record). reeval run --record, or reeval record latest, records one."
|
|
468
|
+
};
|
|
469
|
+
}));
|
|
186
470
|
server.registerTool("show", {
|
|
187
471
|
title: "Show a run",
|
|
188
|
-
description: "One run: its full record (reeval show --json: stack, plan, evals, cells with lift and effort, attempts with verdicts, errors, token usage and file references) or, with format md, its summary.md.",
|
|
472
|
+
description: "One reeval run: its full record (reeval show --json: stack, plan, evals, cells with lift and effort, attempts with verdicts, errors, token usage and file references) or, with format md, its summary.md. Large on big runs: to see why a run failed, failures is smaller.",
|
|
189
473
|
inputSchema: z.object({
|
|
190
474
|
run: z.string().optional().describe(RUN_REF),
|
|
191
475
|
format: z.enum(["json", "md"]).optional().describe("json (default) or md")
|
|
@@ -200,14 +484,22 @@ async function serverFactory(config, version) {
|
|
|
200
484
|
}));
|
|
201
485
|
server.registerTool("compare", {
|
|
202
486
|
title: "Compare two runs",
|
|
203
|
-
description: "Diffs two runs eval by eval (reeval compare --json): each row's base and head outcome and status (regressed, fixed,
|
|
487
|
+
description: "Diffs two reeval runs eval by eval to find a regression (reeval compare --json): each changed row's base and head outcome and status (regressed, fixed, drift = not comparable, added, removed, infra), per-cell lift and effort, and what changed in the stack; same counts the unchanged evals, which all: true lists too. With only head, the base is head's nearest recorded ancestor.",
|
|
204
488
|
inputSchema: z.object({
|
|
205
489
|
base: z.string().optional().describe(`${RUN_REF}; needs head too`),
|
|
206
|
-
head: z.string().optional().describe(RUN_REF)
|
|
490
|
+
head: z.string().optional().describe(RUN_REF),
|
|
491
|
+
all: z.boolean().optional().describe("Also list the evals whose outcome is the same")
|
|
207
492
|
}),
|
|
208
493
|
annotations: READ_ONLY
|
|
209
|
-
}, guard(async ({ base, head }) => {
|
|
210
|
-
|
|
494
|
+
}, guard(async ({ base, head, all }) => {
|
|
495
|
+
const { json } = await compareView(config, base ? [base, head ?? "latest"] : head ? [head] : []);
|
|
496
|
+
if (all) return json;
|
|
497
|
+
const rows = json.rows.filter((r) => r.status !== "same");
|
|
498
|
+
return {
|
|
499
|
+
...json,
|
|
500
|
+
rows,
|
|
501
|
+
same: json.rows.length - rows.length
|
|
502
|
+
};
|
|
211
503
|
}));
|
|
212
504
|
server.registerTool("analysis", {
|
|
213
505
|
title: "Saved analyses of a run",
|
|
@@ -216,7 +508,7 @@ async function serverFactory(config, version) {
|
|
|
216
508
|
annotations: READ_ONLY
|
|
217
509
|
}, guard(async ({ run }) => {
|
|
218
510
|
const entry = resolveRun(await allRuns(config), run);
|
|
219
|
-
const { listAnalyses } = await import("./files-
|
|
511
|
+
const { listAnalyses } = await import("./files-BhyltlDB.js");
|
|
220
512
|
const entries = await listAnalyses(config.root, [config.history.dir], entry.runId, true);
|
|
221
513
|
return {
|
|
222
514
|
runId: entry.runId,
|
|
@@ -225,7 +517,7 @@ async function serverFactory(config, version) {
|
|
|
225
517
|
}));
|
|
226
518
|
server.registerTool("transcript", {
|
|
227
519
|
title: "Attempt transcript",
|
|
228
|
-
description: "What the agent did in one attempt: its transcript.jsonl lines (prompts, messages, tool calls with inputs and outputs), a page at a time. Attempt keys are in show's evals[].attempts[].key.",
|
|
520
|
+
description: "What the coding agent did in one reeval attempt, to debug it: its transcript.jsonl lines (prompts, messages, tool calls with inputs and outputs), a page at a time. Attempt keys are in show's evals[].attempts[].key.",
|
|
229
521
|
inputSchema: z.object({
|
|
230
522
|
run: z.string().optional().describe(RUN_REF),
|
|
231
523
|
attempt: z.string().describe("The attempt key, or its id (<cell>#<n>) when only one eval has it"),
|
|
@@ -250,7 +542,7 @@ async function serverFactory(config, version) {
|
|
|
250
542
|
const where = z.strictObject(Object.fromEntries(cols.map((c) => [c, cell.optional()]))).optional().describe("Only rows where each named column equals its value (null matches NULL)");
|
|
251
543
|
server.registerTool(`query_${view}`, {
|
|
252
544
|
title: `Query ${view}`,
|
|
253
|
-
description: `The ${view} view of reeval query: one row per ${VIEW_ROWS[view] ?? "row"}. Columns: ${cols.join(", ")}.`,
|
|
545
|
+
description: `The ${view} view of reeval query, over the eval run history: one row per ${VIEW_ROWS[view] ?? "row"}. Columns: ${cols.join(", ")}.`,
|
|
254
546
|
inputSchema: z.object({
|
|
255
547
|
where,
|
|
256
548
|
limit: limitField(MAX_ROWS, 100, "rows")
|
|
@@ -288,7 +580,7 @@ async function serverFactory(config, version) {
|
|
|
288
580
|
annotations: READ_ONLY
|
|
289
581
|
}, guard(async () => withDb(config, (db) => ({ objects: db.schema() }))));
|
|
290
582
|
server.registerResource("run", new ResourceTemplate("reeval://runs/{runId}", { list: async () => {
|
|
291
|
-
const { listHeaders } = await import("./source-
|
|
583
|
+
const { listHeaders } = await import("./source-fGd0SaKP.js");
|
|
292
584
|
return { resources: [...await listHeaders(source(config))].reverse().map((r) => ({
|
|
293
585
|
uri: `reeval://runs/${r.runId}`,
|
|
294
586
|
name: r.runId,
|
|
@@ -340,6 +632,16 @@ const decode = (s) => {
|
|
|
340
632
|
return s;
|
|
341
633
|
}
|
|
342
634
|
};
|
|
635
|
+
/**
|
|
636
|
+
* History without each run's evals[], which repeat rows[] with every cell's fingerprint and sources:
|
|
637
|
+
* kilobytes a run, and some MCP clients show a long tool result as empty.
|
|
638
|
+
*/
|
|
639
|
+
function briefHistory(view) {
|
|
640
|
+
return {
|
|
641
|
+
...view,
|
|
642
|
+
runs: view.runs.map(({ evals: _, ...run }) => run)
|
|
643
|
+
};
|
|
644
|
+
}
|
|
343
645
|
function rowsOf(result, limit) {
|
|
344
646
|
return {
|
|
345
647
|
columns: result.columns,
|
|
@@ -361,7 +663,7 @@ async function mcpCommand({ config, flags, version }) {
|
|
|
361
663
|
"port",
|
|
362
664
|
"host",
|
|
363
665
|
"token"
|
|
364
|
-
]) if (flags[name] !== void 0) throw new UsageError(`--${name} needs --http`);
|
|
666
|
+
]) if (flags[name] !== void 0) throw new UsageError(`--${name} needs --http: reeval mcp serves over stdio without it`);
|
|
365
667
|
}
|
|
366
668
|
const factory = await serverFactory(config, version);
|
|
367
669
|
if (!flags.http) {
|
|
@@ -387,12 +689,12 @@ async function serveHttp(factory, config, flags) {
|
|
|
387
689
|
const host = flags.host ?? "127.0.0.1";
|
|
388
690
|
if (host !== "127.0.0.1" && host !== "localhost" && host !== "::1") console.error(`warning: reeval mcp is listening on ${host}, reachable beyond this machine`);
|
|
389
691
|
const token = flags.token ?? (process.env.REEVAL_MCP_TOKEN || void 0);
|
|
390
|
-
if (token !== void 0 && !token.trim()) throw new UsageError("--token needs a value");
|
|
692
|
+
if (token !== void 0 && !token.trim()) throw new UsageError("--token needs a value: --token <secret>, or REEVAL_MCP_TOKEN");
|
|
391
693
|
registerSecret(token);
|
|
392
694
|
const { createMcpHandler } = await import("@modelcontextprotocol/server");
|
|
393
695
|
const { Hono } = await import("hono");
|
|
394
696
|
const { serve } = await import("@hono/node-server");
|
|
395
|
-
const { allowedHosts } = await import("./server-
|
|
697
|
+
const { allowedHosts } = await import("./server-C7sg1ndo.js");
|
|
396
698
|
const hosts = allowedHosts(host, port);
|
|
397
699
|
const handler = createMcpHandler(factory, { onerror: report });
|
|
398
700
|
const app = new Hono();
|
|
@@ -414,7 +716,7 @@ async function serveHttp(factory, config, flags) {
|
|
|
414
716
|
hostname: host,
|
|
415
717
|
port
|
|
416
718
|
});
|
|
417
|
-
s.once("error", (error) => reject(error.code === "EADDRINUSE" ? new UsageError(`Port ${port} is in use
|
|
719
|
+
s.once("error", (error) => reject(error.code === "EADDRINUSE" ? new UsageError(`Port ${port} is in use: pass another with --port`) : error));
|
|
418
720
|
s.once("listening", () => resolve(s));
|
|
419
721
|
});
|
|
420
722
|
const url = `http://${host.includes(":") ? `[${host}]` : host}:${port}/mcp`;
|
|
@@ -430,4 +732,4 @@ async function serveHttp(factory, config, flags) {
|
|
|
430
732
|
//#endregion
|
|
431
733
|
export { mcpCommand };
|
|
432
734
|
|
|
433
|
-
//# sourceMappingURL=command-
|
|
735
|
+
//# sourceMappingURL=command-BT9a37ZR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-BT9a37ZR.js","names":[],"sources":["../src/mcp/files.ts","../src/mcp/failures.ts","../src/mcp/server.ts","../src/mcp/command.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;AAQA,MAAa,UAAU,YAA0C;CAC/D,MAAM,OAAO;CACb,YAAY,OAAO,QAAQ;CAC3B,SAAS;AACX;;AAGA,SAAgB,YAAY,KAAgB,KAAa;CACvD,MAAM,WAAW,IAAI,MAAM,SAAS,MAAM,EAAE,QAAQ;CACpD,MAAM,QAAQ,SAAS,MAAM,MAAM,EAAE,QAAQ,GAAG;CAChD,IAAI,OAAO,OAAO;CAClB,MAAM,OAAO,SAAS,QAAQ,MAAM,EAAE,OAAO,GAAG;CAChD,IAAI,KAAK,WAAW,KAAK,KAAK,IAAI,OAAO,KAAK;CAC9C,MAAM,OAAO,SAAS,KAAK,MAAM,EAAE,GAAG;CACtC,MAAM,SAAS,GAAG,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,GAAG,SAAS;CACrG,MAAM,IAAI,MACR,KAAK,SAAS,IACV,IAAI,IAAI,qBAAqB,KAAK,OAAO,YAAY,IAAI,MAAM,iBAAiB,KAAK,KAAK,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,MAChH,eAAe,IAAI,OAAO,IAAI,MAAM,cAAc,QACxD;AACF;;AAGA,eAAsB,QAAQ,QAAwB,KAAgB,MAA0B;CAC9F,IAAI,CAAC,MAAM,OAAO;CAClB,OAAO,YAAY,OAAO,MAAM,GAAG;EACjC,MAAM;EACN,OAAO,IAAI;EACX,UAAU,KAAK,MAAM,GAAG;CAC1B,CAAC;AACH;;AAGA,eAAsB,gBACpB,QACA,KACA,SACkC;CAClC,MAAM,OAAO,MAAM,QAAQ,QAAQ,KAAK,QAAQ,MAAM,YAAY,IAAI;CACtE,IAAI,CAAC,MAAM,OAAO;CAClB,MAAM,QAA0B,CAAC;CACjC,KAAK,MAAM,SAAS,MAAM,SAAS,MAAM,MAAM,EAAA,CAAG,MAAM,IAAI,GAAG;EAC7D,IAAI,CAAC,KAAK,KAAK,GAAG;EAClB,IAAI;GACF,MAAM,KAAK,uBAAuB,KAAK,MAAM,IAAI,CAAmB,CAAC;EACvE,QAAQ,CAAC;CACX;CACA,OAAO;AACT;AAEA,eAAsB,eAAe,QAAwB,KAAgB,KAAa;CACxF,MAAM,UAAU,YAAY,KAAK,GAAG;CACpC,MAAM,QAAQ,MAAM,gBAAgB,QAAQ,KAAK,OAAO;CACxD,IAAI,CAAC,OACH,MAAM,IAAI,MACR,GAAG,IAAI,MAAM,0BAA0B,QAAQ,IAAI,+CACrD;CAEF,OAAO;EAAE;EAAS;CAAM;AAC1B;;AAGA,eAAsB,SACpB,QACA,KACA,MACA,OACwB;CACxB,MAAM,OAAO,MAAM,QAAQ,QAAQ,KAAK,IAAI;CAC5C,IAAI,CAAC,MAAM,OAAO;CAClB,MAAM,QAAQ,MAAM,SAAS,MAAM,MAAM,EAAA,CAAG,QAAQ;CACpD,IAAI,KAAK,UAAU,OAAO,OAAO;CACjC,MAAM,MAAM,KAAK,MAAM,CAAC,KAAK;CAC7B,MAAM,KAAK,IAAI,QAAQ,IAAI;CAC3B,OAAO,IAAI,MAAM,KAAK,KAAK,IAAI,SAAS,IAAI,IAAI,MAAM,KAAK,CAAC,IAAI;AAClE;AC5DA,MAAM,QAAQ,MAAc,QAC1B,KAAK,UAAU,MAAM,OAAO,GAAG,KAAK,MAAM,GAAG,GAAG,EAAE,KAAK,KAAK,SAAS,IAAI;AAE3E,MAAM,UAAU,UACd,OAAO,UAAU,WAAW,QAAQ,SAAS,OAAO,KAAK,KAAK,UAAU,KAAK;;AAG/E,SAAS,YAAY,MAAsB,GAA2C;CACpF,QAAQ,KAAK,MAAb;EACE,KAAK,UACH,OAAO;GAAE,MAAM;GAAG,MAAM,KAAK;GAAM,QAAQ,KAAK,KAAK,MAAM,GAAG;EAAE;EAClE,KAAK,QACH,OAAO;GAAE,MAAM;GAAG,MAAM,KAAK;GAAM,MAAM,KAAK,KAAK,MAAM,GAAG;EAAE;EAChE,KAAK,QACH,OAAO;GACL,MAAM;GACN,MAAM,KAAK;GACX,MAAM,KAAK;GACX,QAAQ,WAAW,KAAK,OAAO,KAAK,IAAI;GACxC,IAAI,KAAK;GACT,QAAQ,KAAK,OAAO,KAAK,MAAM,GAAG,GAAG;EACvC;EACF,KAAK,aACH,OAAO;GAAE,MAAM;GAAG,MAAM,KAAK;GAAM,MAAM,KAAK;GAAM,MAAM,KAAK;EAAK;EACtE,KAAK,cACH,OAAO;GACL,MAAM;GACN,MAAM,KAAK;GACX,MAAM;GACN,QAAQ,KAAK;GACb,IAAI,KAAK,MAAM;EACjB;EACF,KAAK,aACH,OAAO;GAAE,MAAM;GAAG,MAAM,KAAK;GAAM,MAAM;GAAa,QAAQ,KAAK;GAAK,IAAI,KAAK;EAAG;EACtF,KAAK;EACL,KAAK,SACH,OAAO;GAAE,MAAM;GAAG,MAAM,KAAK;IAAO,KAAK,OAAO,KAAK,KAAK,SAAS,GAAG;EAAE;EAC1E,KAAK,YACH,OAAO;GAAE,MAAM;GAAG,MAAM,KAAK;GAAM,SAAS,KAAK;EAAO;EAC1D,SACE,OAAO;CACX;AACF;AAEA,SAAS,eAAe,OAAyB,MAAc;CAC7D,MAAM,UAAU,MAAM,SAAS,MAAM,MAAM;EACzC,MAAM,IAAI,YAAY,MAAM,IAAI,CAAC;EACjC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC;CACpB,CAAC;CACD,OAAO;EAAE,OAAO,MAAM;EAAQ,MAAM,QAAQ,MAAM,CAAC,IAAI;CAAE;AAC3D;AAEA,MAAM,cAAc,MAAgD,EAAE,OAAO,KAAK,EAAE,aAAa;AAEjG,MAAM,gBAAgB,GAAqB,MACxC,OAAO,KAAK,CAAC,CAAC,CAAmC,QAAQ,MAAM,EAAE,OAAO,EAAE,EAAE;AAE/E,SAAS,eACP,KACA,QACU;CACV,MAAM,MAAM,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACzD,MAAM,QAAQ,IAAI,QAAQ,MAAM,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,IAAI;CAC/E,MAAM,OAAO,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC;CAC3C,OAAO,CAAC,GAAG,OAAO,GAAG,OAAO,QAAQ,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,EAAE,KAAK,WAAW,CAAC;AAChG;;;;;AAMA,SAAS,YAAY,SAAyB,KAAgB,GAAc,MAAkB;CAC5F,MAAM,UAID,CAAC;CACN,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,MAAM,SAAS,IAAI,OAAO;EAC9B,MAAM,KAAK,MAAM,MAAM,MAAM,MAAM,EAAE,QAAQ,EAAE,GAAG;EAClD,MAAM,IAAI,IAAI,MAAM,MAAM,MAAM,EAAE,QAAQ,KAAK,GAAG;EAClD,IAAI,MAAM,GAAG,QAAQ,KAAK;GAAE;GAAO,MAAM;GAAI,MAAM;EAAE,CAAC;CACxD;CACA,QAAQ,QAAQ;CAChB,MAAM,UAAU,WAAyB;EACvC,OAAO,MAAM;EACb,KAAK,MAAM,KAAK,IAAI,MAAM,GAAG,EAAE,KAAK;EACpC,UAAU,MAAM;CAClB;CACA,IAAI,QAAQ,IAAI;CAChB,KAAK,MAAM,KAAK,SAAS;EACvB,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG;EACzB,QAAQ,EAAE,MAAM;CAClB;CACA,MAAM,QAAQ,QAAQ,MAAM,MAAM,CAAC,WAAW,EAAE,IAAI,KAAK,EAAE,KAAK,OAAO,CAAC;CACxE,MAAM,WAAW,QAAQ;CACzB,OAAO;EACL,KAAK,CAAC,YAAY,CAAC,WAAW,SAAS,IAAI;EAC3C,cAAc;EACd,UAAU,QACN;GACE,GAAG,OAAO,MAAM,KAAK;GACrB,SAAS,aAAa,KAAK,kBAAkB,MAAM,KAAK,gBAAgB;GACxE,gBAAgB,eAAe,EAAE,SAAS,MAAM,KAAK,OAAO;EAC9D,IACA;EACJ,SAAS,QAAQ,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO;GACvC,GAAG,OAAO,EAAE,KAAK;GACjB,MAAM,EAAE,KAAK;GACb,MAAM,EAAE,KAAK;GACb,YAAY,EAAE,KAAK;GACnB,iBAAiB,EAAE,KAAK,gBAAgB,KAAK;EAC/C,EAAE;EACF,aAAa,QAAQ;CACvB;AACF;AAEA,eAAe,gBACb,QACA,KACA,GACA,GACA,MACA;CACA,MAAM,OAAO,EAAE,MAAM,MAAM,MAAM,EAAE,QAAQ,EAAE,IAAI;CACjD,MAAM,QAAQ,MAAM,gBAAgB,QAAQ,KAAK,CAAC;CAClD,MAAM,eAAe,MAAM,QAAQ,IACjC,EAAE,OACC,QAAQ,MAAM,EAAE,aAAa,CAAC,CAAC,CAC/B,IAAI,OAAO,OAAO;EACjB,SAAS,EAAE;EACX,UAAU,EAAE;EACZ,KAAK,EAAE,KAAK,QAAQ;EACpB,SAAS,MAAM,SAAS,QAAQ,KAAK,EAAE,KAAK,MAAM,IAAI;CACxD,EAAE,CACN;CACA,MAAM,YAAY,EAAE,MAAM,UAAU,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ;CAC3D,MAAM,oBAAoB,EAAE,cAAc,CAAC,EAAA,CACxC,QAAQ,MAAM,EAAE,WAAW,MAAM,CAAC,CAClC,KAAK,OAAO;EACX,OAAO,EAAE;EACT,SAAS,EAAE;EACX,QAAQ,EAAE;EACV,MAAM,EAAE;EACR,SAAS,EAAE,UAAU,KAAK,EAAE,SAAS,GAAG,IAAI;CAC9C,EAAE;CAEJ,MAAM,WACJ,EAAE,OAAO,SAAS,eAAe,EAAE,YAAY,MAAM,MAAM,EAAE,YAAY,EAAE,OAAO,OAAO;CAC3F,OAAO;EACL,MAAM,EAAE;EACR,SAAS,EAAE;EACX,MAAM,EAAE;EACR,SAAS,MAAM,WAAW;EAC1B,aAAa,MAAM,eAAe;EAClC,SAAS,EAAE;EACX,OAAO,OAAO,KAAK,SAAS,SAAS;EACrC,OAAO,EAAE,QACL;GAAE,MAAM,EAAE,MAAM;GAAM,SAAS,WAAW,OAAO,KAAK,EAAE,MAAM,SAAS,IAAI;EAAE,IAC7E;EACJ;EACA,kBAAkB,EAAE,WACjB,QAAQ,MAAM,EAAE,YAAY,MAAM,CAAC,CACnC,KAAK,OAAO;GAAE,UAAU,EAAE;GAAU,OAAO,EAAE;GAAO,WAAW,EAAE;EAAU,EAAE;EAChF;EACA,YAAY,EAAE,MAAM,SAAS,GAAG,MAAO,EAAE,QAAQ,CAAC;GAAE,MAAM,IAAI;GAAG,OAAO,EAAE;EAAM,CAAC,IAAI,CAAC,CAAE;EACxF,cACE,EAAE,YAAY,gBACV,MAAM,SAAS,QAAQ,KAAK,EAAE,MAAM,UAAU,MAAM,IAAI,IACxD;EACN,cAAc,EAAE,aAAa,MAAM,GAAG,EAAE,CAAC,CAAC,KAAK,MAAM,GAAG,EAAE,OAAO,GAAG,EAAE,MAAM;EAC5E,cAAc,YAAY,KAAK,WAAW,GAAG,IAAI;EACjD,YAAY,QAAQ,eAAe,OAAO,IAAI,IAAI;EAClD,OAAO;GACL,YAAY,EAAE,MAAM,YAAY,QAAQ;GACxC,MAAM,EAAE,MAAM,MAAM,QAAQ;GAC5B,UAAU,EAAE,MAAM,UAAU,QAAQ;EACtC;CACF;AACF;AAEA,MAAM,QAAQ,GAAc,MAAqB;CAC/C,MAAM,QAAQ,EAAE,MAAM,MAAM,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAS;CAC9D,QAAQ,EAAE,YAAY,SAAS,IAAI,MAAM,QAAQ,IAAI;AACvD;AAEA,eAAsB,aACpB,QACA,UAA4E,CAAC,GAC7E;CACA,MAAM,UAAU,MAAM,QAAQ,MAAM;CACpC,MAAM,QAAQ,WAAW,SAAS,QAAQ,GAAG;CAC7C,MAAM,MAAM,MAAM,WAAW,OAAO,QAAQ,MAAM,WAAW,OAAO,IAAI;CACxE,MAAM,MAAM,MAAM,WAAW,KAAK,KAAK,GAAG,MAAM,MAAM,MAAM,CAAC;CAC7D,MAAM,SAAS,QAAQ,QAAQ,YAAY;CAC3C,MAAM,UAAU,IAAI,MACjB,QAAQ,MAAM,CAAC,UAAU,EAAE,GAAG,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,CAC7D,SAAS,MACR,EAAE,SACC,QAAQ,MAAM,EAAE,YAAY,UAAU,EAAE,YAAY,aAAa,CAAC,CAClE,KAAK,OAAO;EAAE;EAAG;CAAE,EAAE,CAC1B,CAAC,CACA,MAAM,GAAG,MAAM,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;CACjD,MAAM,QAAQ,QAAQ,SAAA;CACtB,MAAM,QAAQ,QAAQ,MAAM,GAAG,KAAK;CACpC,MAAM,4BAAY,IAAI,IAA4C;CAClE,MAAM,QAAQ,MAAM,SAAS,EAAE,GAAG,QAAQ;EACxC,MAAM,KAAK,GAAG,EAAE,IAAI,IAAI,EAAE;EAC1B,MAAM,OAAO,EAAE,MAAM,MAAM,MAAM,EAAE,QAAQ,EAAE,IAAI;EACjD,IAAI,UAAU,IAAI,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC;EACxC,UAAU,IAAI,IAAI,YAAY,SAAS,KAAK,GAAG,IAAI,CAAC;EACpD,OAAO,CAAC;GAAE,MAAM,EAAE;GAAI,MAAM,EAAE;GAAM,GAAG,UAAU,IAAI,EAAE;EAAE,CAAC;CAC5D,CAAC;CACD,MAAM,WAAW,MAAM,QAAQ,IAC7B,MAAM,KAAK,EAAE,GAAG,QAAQ,gBAAgB,QAAQ,KAAK,GAAG,GAAG,QAAQ,QAAA,EAAoB,CAAC,CAC1F;CACA,MAAM,SAAS;EACb,OAAO,IAAI;EACX,UAAU,MAAM;EAChB,KAAK,IAAI,KAAK,IAAI,MAAM,GAAG,EAAE,KAAK;EAClC,SAAS,IAAI;CACf;CACA,IAAI,QAAQ,WAAW,GAAG;EACxB,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,CACxB,QAAQ,CAAC,CACT,MAAM,MAAM,EAAE,QAAQ,OAAO,EAAE,QAAQ,aAAa,KAAK,EAAE,UAAU,IAAI,KAAK;EACjF,OAAO;GACL,GAAG;GACH,SAAS;GACT,UAAU,CAAC;GACX,OAAO,CAAC;GACR,MAAM,qBAAqB,IAAI,QAAQ,SAAS,cAAc,QAAQ,OAAO,KAAK,GAAG,GAAG,SAAS,qCAAqC,OAAO,MAAM,qBAAqB;EAC1K;CACF;CACA,OAAO;EACL,GAAG;EACH,SAAS,QAAQ;EACjB,OAAO,MAAM;EACb;EACA;EACA,MAAM,0DAA0D,IAAI,MAAM,iCAAiC,IAAI,MAAM;CACvH;AACF;ACpPA,MAAa,WAAW;;AAIxB,MAAM,YAAoC;CACxC,MAAM;CACN,aACE;CACF,QACE;CACF,gBACE;CACF,aACE;CACF,aACE;CACF,OACE;CACF,kBACE;CACF,YAAY;CACZ,eAAe;CACf,sBACE;AACJ;AAEA,MAAM,YAAY;CAChB,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB,eAAe;AACjB;AAEA,MAAM,UACJ;;AAKF,SAAS,OAAO,OAAa;CAC3B,MAAM,OAAO,cAAc,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;CACzD,IAAI;CACJ,IAAI;EACF,aAAa,KAAK,MAAM,IAAI;CAC9B,QAAQ;EACN,aAAa,EAAE,KAAK;CACtB;CACA,OAAO;EAAE,SAAS,CAAC;GAAE,MAAM;GAAiB;EAAK,CAAC;EAAG,mBAAmB;CAAW;AACrF;AAEA,SAAS,QAAQ,OAAgB;CAC/B,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;CACrE,OAAO;EAAE,SAAS,CAAC;GAAE,MAAM;GAAiB,MAAM,cAAc,OAAO;EAAE,CAAC;EAAG,SAAS;CAAK;AAC7F;AAEA,MAAM,SACA,QACJ,OAAO,SAAY;CACjB,IAAI;EACF,OAAO,OAAO,MAAM,IAAI,IAAI,CAAC;CAC/B,SAAS,OAAO;EACd,OAAO,QAAQ,KAAK;CACtB;AACF;;AAGF,SAAgB,aAAa,KAAqB;CAChD,MAAM,OAAO,IAAI,QAAQ,+CAA+C,EAAE;CAC1E,QAAQ,aAAa,KAAK,IAAI,CAAC,GAAG,MAAM,GAAA,CAAI,YAAY;AAC1D;;;;;AAMA,SAAgB,WAAW,KAA4B;CACrD,IAAI,eAAe,GAAG,MAAM,GAAG,OAAO;CACtC,MAAM,UAAU,aAAa,GAAG;CAChC,IAAI,YAAY,YAAY,YAAY,QACtC,OAAO,iDAAiD,WAAW,UAAU;CAE/E,OAAO;AACT;;AAKA,eAAsB,YAAY,QAA8C;CAC9E,MAAM,KAAK,MAAM,cAAc,OAAO,MAAM,OAAO,QAAQ,GAAG;CAC9D,IAAI;EACF,MAAM,SAAS,GAAG,OAAO;EACzB,OAAO,OAAO,YACZ,WAAW,KAAK,SAAS,CAAC,MAAM,OAAO,MAAM,MAAM,EAAE,SAAS,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CACrF;CACF,UAAU;EACR,GAAG,MAAM;CACX;AACF;AAEA,eAAe,OACb,QACA,KACA;CACA,MAAM,KAAK,MAAM,cAAc,OAAO,MAAM,OAAO,QAAQ,GAAG;CAC9D,IAAI;EACF,OAAO,IAAI,EAAE;CACf,UAAU;EACR,GAAG,MAAM;CACX;AACF;AAEA,MAAM,OAAO,EAAE,MAAM;CAAC,EAAE,OAAO;CAAG,EAAE,OAAO;CAAG,EAAE,QAAQ;CAAG,EAAE,KAAK;AAAC,CAAC;AACpE,MAAM,cAAc,KAAa,UAAkB,SACjD,EACG,OAAO,CAAC,CACR,IAAI,CAAC,CACL,IAAI,CAAC,CAAC,CACN,IAAI,GAAG,CAAC,CACR,SAAS,CAAC,CACV,SAAS,qBAAqB,KAAK,YAAY,SAAS,YAAY,IAAI,EAAE;AAE/E,MAAa,iBAAiB,OAAe,eAC3C,iBAAiB,MAAM,eAAe,mBAAmB,UAAU;;AAGrE,eAAe,WAAW,QAAwB,OAA0C;CAC1F,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,OAAO;CAChC,MAAM,OAAO,MAAM,YAAY,OAAO,MAAM,GAAG;EAAE,MAAM;EAAU;CAAM,CAAC;CACxE,OAAO,OAAO,WAAW,IAAI,IAAI;AACnC;AAEA,MAAM,eAAe;;;;AAKrB,eAAsB,cAAc,QAAwB,SAAiB;CAC3E,MAAM,UAAU,MAAM,YAAY,MAAM;CACxC,aAAa;EACX,MAAM,SAAS,IAAI,UACjB;GAAE,MAAM;GAAU,OAAO;GAAsB;EAAQ,GACvD,EAAE,cAAc,aAAa,CAC/B;EAEA,OAAO,aACL,YACA;GACE,OAAO;GACP,aACE;GACF,aAAa,EAAE,OAAO;IACpB,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,OAAO;IAC3C,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,mCAAmC;IAC1E,OAAO,WAAW,KAAA,IAAuB,iBAAiB;IAC1D,MAAM,EACH,OAAO,CAAC,CACR,IAAI,CAAC,CACL,IAAI,CAAC,CAAC,CACN,IAAI,GAAG,CAAC,CACR,SAAS,CAAC,CACV,SAAS,4DAAyE;GACvF,CAAC;GACD,aAAa;EACf,GACA,MAAM,OAAO,EAAE,KAAK,QAAQ,OAAO,WACjC,aAAa,QAAQ;GAAE;GAAK;GAAQ;GAAO;EAAK,CAAC,CACnD,CACF;EAEA,OAAO,aACL,WACA;GACE,OAAO;GACP,aACE;GACF,aAAa,EAAE,OAAO;IACpB,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,mCAAmC;IAC1E,OAAO,WAAW,KAAK,IAAI,MAAM;IACjC,KAAK,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,+CAA+C;GACtF,CAAC;GACD,aAAa;EACf,GACA,MAAM,OAAO,EAAE,QAAQ,OAAO,UAAU;GACtC,MAAM,OAAO,aAAa,MAAM,YAAY,QAAQ;IAAE;IAAQ;IAAO;GAAI,CAAC,CAAC;GAC3E,IAAI,OAAO,KAAK,KAAK,QAAQ,OAAO;GACpC,MAAM,UAAU,aAAa,MAAM,YAAY,QAAQ;IAAE;IAAQ;IAAO,KAAK;GAAK,CAAC,CAAC;GACpF,IAAI,CAAC,QAAQ,KAAK,QAChB,OAAO;IAAE,GAAG;IAAM,MAAM;GAAqD;GAE/E,OAAO;IACL,GAAG;IACH,MAAM;GACR;EACF,CAAC,CACH;EAEA,OAAO,aACL,QACA;GACE,OAAO;GACP,aACE;GACF,aAAa,EAAE,OAAO;IACpB,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,OAAO;IAC3C,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,sBAAsB;GAC3E,CAAC;GACD,aAAa;EACf,GACA,MAAM,OAAO,EAAE,KAAK,aAAa;GAC/B,MAAM,SAAS,MAAM,WAAW,QAAQ,GAAG;GAC3C,OAAO,WAAW,OACd;IAAE,OAAO,OAAO;IAAO,UAAU,cAAc,MAAM,CAAC,CAAC,QAAQ;GAAE,IAChE;EACP,CAAC,CACH;EAEA,OAAO,aACL,WACA;GACE,OAAO;GACP,aACE;GACF,aAAa,EAAE,OAAO;IACpB,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,GAAG,QAAQ,iBAAiB;IACjE,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,OAAO;IAC5C,KAAK,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,+CAA+C;GACtF,CAAC;GACD,aAAa;EACf,GACA,MAAM,OAAO,EAAE,MAAM,MAAM,UAAU;GAEnC,MAAM,EAAE,SAAS,MAAM,YAAY,QADtB,OAAO,CAAC,MAAM,QAAQ,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,CACjB;GAC/C,IAAI,KAAK,OAAO;GAChB,MAAM,OAAO,KAAK,KAAK,QAAQ,MAAM,EAAE,WAAW,MAAM;GACxD,OAAO;IAAE,GAAG;IAAM;IAAM,MAAM,KAAK,KAAK,SAAS,KAAK;GAAO;EAC/D,CAAC,CACH;EAEA,OAAO,aACL,YACA;GACE,OAAO;GACP,aACE;GACF,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC;GACtE,aAAa;EACf,GACA,MAAM,OAAO,EAAE,UAAU;GACvB,MAAM,QAAQ,WAAW,MAAM,QAAQ,MAAM,GAAG,GAAG;GACnD,MAAM,EAAE,iBAAiB,MAAM,OAAO;GACtC,MAAM,UAAU,MAAM,aAAa,OAAO,MAAM,CAAC,OAAO,QAAQ,GAAG,GAAG,MAAM,OAAO,IAAI;GACvF,OAAO;IAAE,OAAO,MAAM;IAAO,SAAS,aAAa,OAAO;GAAE;EAC9D,CAAC,CACH;EAEA,OAAO,aACL,cACA;GACE,OAAO;GACP,aACE;GACF,aAAa,EAAE,OAAO;IACpB,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,OAAO;IAC3C,SAAS,EACN,OAAO,CAAC,CACR,SAAS,mEAAmE;IAC/E,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,2BAA2B;IAC/E,OAAO,WAAW,UAAA,KAAyB,OAAO;GACpD,CAAC;GACD,aAAa;EACf,GACA,MAAM,OAAO,EAAE,KAAK,SAAS,SAAS,GAAG,QAAA,UAA4B;GACnE,MAAM,SAAS,MAAM,WAAW,QAAQ,GAAG;GAC3C,MAAM,OAAO,MAAM,eAAe,QAAQ,QAAQ,OAAO;GACzD,OAAO;IACL,OAAO,OAAO;IACd,SAAS,KAAK,QAAQ;IACtB,KAAK,cAAc,OAAO,OAAO,KAAK,QAAQ,GAAG;IACjD,OAAO,KAAK,MAAM;IAClB;IACA,OAAO,KAAK,MAAM,MAAM,QAAQ,SAAS,KAAK;GAChD;EACF,CAAC,CACH;EAEA,KAAK,MAAM,QAAQ,YAAY;GAC7B,MAAM,OAAO,QAAQ,SAAS,CAAC;GAC/B,MAAM,QAAQ,EACX,aAAa,OAAO,YAAY,KAAK,KAAK,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CACvE,SAAS,CAAC,CACV,SAAS,wEAAwE;GACpF,OAAO,aACL,SAAS,QACT;IACE,OAAO,SAAS;IAChB,aAAa,OAAO,KAAK,gEAAgE,UAAU,SAAS,MAAM,aAAa,KAAK,KAAK,IAAI,EAAE;IAC/I,aAAa,EAAE,OAAO;KAAE;KAAO,OAAO,WAAW,UAAA,KAAwB,MAAM;IAAE,CAAC;IAClF,aAAa;GACf,GACA,MAAM,OAAO,EAAE,OAAO,QAAA,UAA2B;IAC/C,MAAM,UAAU,OAAO,QAAQ,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,OAAO,MAAM,KAAA,CAAS;IAC7E,MAAM,MAAM,kBAAkB,KAAK,GAAG,QAAQ,SAAS,UAAU,QAAQ,KAAK,CAAC,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,OAAO,MAAM,GAAG;IAC1H,MAAM,SAAS,QAAQ,KAAK,GAAG,OAAQ,OAAO,MAAM,YAAY,OAAO,CAAC,IAAI,CAAE;IAG9E,OAAO,OAAO,SAAS,OAAO;KAC5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,QAAQ,CAAC,CAAC;KAElD,OAAO,OAAO;MAAE,GAAG;MAAO,SAAS,MAAM,QAAQ,SAAS,MAAM,UAAU;KAAK,GAAG,KAAK;IACzF,CAAC;GACH,CAAC,CACH;EACF;EAEA,OAAO,aACL,SACA;GACE,OAAO;GACP,aACE;GACF,aAAa,EAAE,OAAO;IACpB,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS,8BAA8B;IACvD,OAAO,WAAW,UAAA,KAAwB,MAAM;GAClD,CAAC;GACD,aAAa;EACf,GACA,MAAM,OAAO,EAAE,KAAK,QAAA,UAA2B;GAC7C,MAAM,UAAU,WAAW,GAAG;GAC9B,IAAI,SAAS,MAAM,IAAI,MAAM,OAAO;GACpC,OAAO,OAAO,SAAS,OAAO,OAAO,GAAG,MAAM,GAAG,GAAG,KAAK,CAAC;EAC5D,CAAC,CACH;EAEA,OAAO,aACL,gBACA;GACE,OAAO;GACP,aACE;GACF,aAAa;EACf,GACA,MAAM,YAAY,OAAO,SAAS,QAAQ,EAAE,SAAS,GAAG,OAAO,EAAE,EAAE,CAAC,CACtE;EAEA,OAAO,iBACL,OACA,IAAI,iBAAiB,yBAAyB,EAC5C,MAAM,YAAY;GAChB,MAAM,EAAE,gBAAgB,MAAM,OAAO;GAErC,OAAO,EACL,WAAW,CAAC,GAAG,MAFE,YAAY,OAAO,MAAM,CAAC,CAExB,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,OAAO;IACzC,KAAK,iBAAiB,EAAE;IACxB,MAAM,EAAE;IACR,OAAO,GAAG,EAAE,MAAM,IAAI,EAAE,WAAW,aAAa,UAAU;IAC1D,UAAU;GACZ,EAAE,EACJ;EACF,EACF,CAAC,GACD;GACE,OAAO;GACP,aAAa;GACb,UAAU;GACV,WAAW;IAAE,OAAO;IAAG,YAAY;GAAU;EAC/C,GACA,OAAO,KAAK,EAAE,YAAY;GACxB,MAAM,SAAS,MAAM,WAAW,QAAQ,OAAO,KAAK,CAAC;GACrD,IAAI,CAAC,QAAQ,MAAM,IAAI,MAAM,UAAU,OAAO,KAAK,GAAG;GACtD,OAAO,EACL,UAAU,CACR;IACE,KAAK,IAAI;IACT,UAAU;IACV,MAAM,cAAc,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;GACrD,CACF,EACF;EACF,CACF;EAEA,OAAO,iBACL,cACA,IAAI,iBAAiB,+CAA+C,EAAE,MAAM,KAAA,EAAU,CAAC,GACvF;GACE,OAAO;GACP,aACE;GACF,UAAU;GACV,WAAW;IAAE,OAAO;IAAG,YAAY;GAAU;EAC/C,GACA,OAAO,KAAK,EAAE,OAAO,cAAc;GACjC,MAAM,SAAS,MAAM,WAAW,QAAQ,OAAO,KAAK,CAAC;GACrD,IAAI,CAAC,QAAQ,MAAM,IAAI,MAAM,UAAU,OAAO,KAAK,GAAG;GACtD,MAAM,OAAO,MAAM,eAAe,QAAQ,QAAQ,OAAO,OAAO,OAAO,CAAC,CAAC;GACzE,OAAO,EACL,UAAU,CACR;IACE,KAAK,IAAI;IACT,UAAU;IACV,MAAM,cAAc,KAAK,MAAM,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;GACzE,CACF,EACF;EACF,CACF;EAEA,OAAO;CACT;AACF;AAEA,MAAM,UAAU,MAAc;CAC5B,IAAI;EACF,OAAO,mBAAmB,CAAC;CAC7B,QAAQ;EACN,OAAO;CACT;AACF;;;;;AAMA,SAAS,aAAuD,MAAS;CACvE,OAAO;EAAE,GAAG;EAAM,MAAM,KAAK,KAAK,KAAK,EAAE,OAAO,GAAG,GAAG,UAAU,GAAG;CAAE;AACvE;AAEA,SAAS,OAAO,QAA6C,OAAe;CAC1E,OAAO;EACL,SAAS,OAAO;EAChB,MAAM,OAAO,KAAK,MAAM,GAAG,KAAK;EAChC,WAAW,OAAO,KAAK,SAAS;CAClC;AACF;;;ACxbA,MAAa,mBAAmB;AAEhC,MAAM,UAAU,UAAiB,QAAQ,MAAM,eAAe,cAAc,MAAM,OAAO,GAAG;AAE5F,MAAM,gBACJ,IAAI,SAAe,YAAY;CAC7B,QAAQ,KAAK,gBAAgB,QAAQ,CAAC;CACtC,QAAQ,KAAK,iBAAiB,QAAQ,CAAC;AACzC,CAAC;AAEH,eAAsB,WAAW,EAAE,QAAQ,OAAO,WAAkC;CAClF,IAAI,CAAC,MAAM,MACJ;OAAA,MAAM,QAAQ;GAAC;GAAQ;GAAQ;EAAO,GACzC,IAAI,MAAM,UAAU,KAAA,GAClB,MAAM,IAAI,WAAW,KAAK,KAAK,uDAAuD;CAAA;CAG5F,MAAM,UAAU,MAAM,cAAc,QAAQ,OAAO;CACnD,IAAI,CAAC,MAAM,MAAM;EACf,MAAM,EAAE,eAAe,MAAM,OAAO;EACpC,MAAM,SAAS,WAAW,SAAS,EAAE,SAAS,OAAO,CAAC;EAEtD,MAAM,QAAQ,KAAK,CACjB,IAAI,SAAe,YAAY;GAC7B,QAAQ,MAAM,KAAK,OAAO,OAAO;GACjC,QAAQ,MAAM,KAAK,SAAS,OAAO;EACrC,CAAC,GACD,QAAQ,CACV,CAAC;EACD,MAAM,OAAO,MAAM;EACnB,OAAO;CACT;CACA,OAAO,UAAU,SAAS,QAAQ,KAAK;AACzC;AAEA,MAAM,aAAa,GAAW,MAAc;CAC1C,MAAM,IAAI,OAAO,KAAK,CAAC;CACvB,MAAM,IAAI,OAAO,KAAK,CAAC;CACvB,OAAO,EAAE,WAAW,EAAE,UAAU,gBAAgB,GAAG,CAAC;AACtD;AAEA,eAAe,UACb,SACA,QACA,OACiB;CACjB,MAAM,OAAO,MAAM,SAAS,KAAA,IAAY,mBAAmB,OAAO,MAAM,IAAI;CAC5E,IAAI,EAAE,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,OAAO,QACjD,MAAM,IAAI,WAAW,qCAAqC,MAAM,KAAK,EAAE;CAEzE,MAAM,OAAO,MAAM,QAAQ;CAC3B,IAAI,SAAS,eAAe,SAAS,eAAe,SAAS,OAC3D,QAAQ,MAAM,uCAAuC,KAAK,gCAAgC;CAG5F,MAAM,QAAQ,MAAM,UAAU,QAAQ,IAAI,oBAAoB,KAAA;CAC9D,IAAI,UAAU,KAAA,KAAa,CAAC,MAAM,KAAK,GACrC,MAAM,IAAI,WAAW,8DAA8D;CACrF,eAAe,KAAK;CACpB,MAAM,EAAE,qBAAqB,MAAM,OAAO;CAC1C,MAAM,EAAE,SAAS,MAAM,OAAO;CAC9B,MAAM,EAAE,UAAU,MAAM,OAAO;CAC/B,MAAM,EAAE,iBAAiB,MAAM,OAAO;CACtC,MAAM,QAAQ,aAAa,MAAM,IAAI;CACrC,MAAM,UAAU,iBAAiB,SAAS,EAAE,SAAS,OAAO,CAAC;CAC7D,MAAM,MAAM,IAAI,KAAK;CACrB,IAAI,IAAI,KAAK,OAAO,GAAG,SAAS;EAC9B,IAAI,CAAC,MAAM,SAAS,EAAE,IAAI,OAAO,MAAM,KAAK,EAAE,GAAG,OAAO,EAAE,KAAK,gBAAgB,GAAG;EAClF,MAAM,SAAS,EAAE,IAAI,OAAO,QAAQ;EACpC,IAAI,UAAU,CAAC,MAAM,MAAM,MAAM,WAAW,UAAU,GAAG,GACvD,OAAO,EAAE,KAAK,yCAAyC,GAAG;EAE5D,IAAI,OAAO;GACT,MAAM,UAAU,gBAAgB,KAAK,EAAE,IAAI,OAAO,eAAe,KAAK,EAAE,CAAC,GAAG;GAC5E,IAAI,CAAC,WAAW,CAAC,UAAU,SAAS,KAAK,GACvC,OAAO,EAAE,KAAK,mEAAmE,KAAK,EACpF,oBAAoB,SACtB,CAAC;EAEL;EACA,OAAO,KAAK;CACd,CAAC;CACD,IAAI,KAAK,SAAS,MAAM,QAAQ,MAAM,EAAE,IAAI,GAAG,CAAC;CAChD,IAAI,IAAI,SAAS,MAAM,EAAE,KAAK,sBAAsB,KAAK,EAAE,OAAO,OAAO,CAAC,CAAC;CAC3E,MAAM,SAAS,MAAM,IAAI,SAAmC,SAAS,WAAW;EAC9E,MAAM,IAAI,MAAM;GAAE,OAAO,IAAI;GAAO,UAAU;GAAM;EAAK,CAAC;EAC1D,EAAE,KAAK,UAAU,UACf,OACE,MAAM,SAAS,eACX,IAAI,WAAW,QAAQ,KAAK,qCAAqC,IACjE,KACN,CACF;EACA,EAAE,KAAK,mBAAmB,QAAQ,CAAC,CAAC;CACtC,CAAC;CACD,MAAM,MAAM,UAAU,KAAK,SAAS,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG,KAAK;CACtE,QAAQ,IAAI,gBAAgB,SAAS,OAAO,IAAI,EAAE,KAAK,QAAQ,OAAO,QAAQ,GAAG,KAAK,IAAI,EAAE;CAC5F,QAAQ,IAAI,KAAK,KAAK;CACtB,IAAI,OAAO,QAAQ,IAAI,0EAA0E;CACjG,QAAQ,IAAI,iBAAiB;CAC7B,MAAM,QAAQ;CACd,MAAM,QAAQ,MAAM;CACpB,OAAO,MAAM;CACb,OAAO;AACT"}
|