@runcofactor/cli 0.55.0 → 0.56.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/dist/{account-RHHS7HT4.js → account-CZYZD2JS.js} +5 -5
- package/dist/{alert-B5WEOKHP.js → alert-JQ4SDEB7.js} +8 -8
- package/dist/{api-catalog-UXONX3BR.js → api-catalog-IWQC35P2.js} +5 -5
- package/dist/{api-key-J3A4TJKN.js → api-key-GUDXIIEA.js} +5 -5
- package/dist/{attachment-ZQW7DR4G.js → attachment-CPZYOBUB.js} +5 -5
- package/dist/{auth-HQGKUZBS.js → auth-DS6MBVEI.js} +3 -3
- package/dist/{benchmark-TIKJA32J.js → benchmark-6HPCIQHD.js} +5 -5
- package/dist/{blackcat-Z5LNV2GS.js → blackcat-V3L63WFE.js} +3 -3
- package/dist/{chunk-JQG3V5E3.js → chunk-2E3STBHS.js} +2 -2
- package/dist/{chunk-KL2ARGH6.js → chunk-2OHYMT3A.js} +3 -3
- package/dist/{chunk-KL2ARGH6.js.map → chunk-2OHYMT3A.js.map} +1 -1
- package/dist/{chunk-W6DL4IP6.js → chunk-3LGCHNBC.js} +2 -2
- package/dist/{chunk-BJHAVM7Z.js → chunk-4MFMPC5P.js} +46 -2
- package/dist/chunk-4MFMPC5P.js.map +1 -0
- package/dist/{chunk-MB4FS35J.js → chunk-56HFZHQM.js} +8 -8
- package/dist/{chunk-CZDQVQ57.js → chunk-5OYWNS6D.js} +20 -9
- package/dist/chunk-5OYWNS6D.js.map +1 -0
- package/dist/{chunk-YTXZUWMN.js → chunk-62EXS76C.js} +6 -6
- package/dist/{chunk-QVMGXMP5.js → chunk-6ILWJFKY.js} +368 -6
- package/dist/chunk-6ILWJFKY.js.map +1 -0
- package/dist/{chunk-6X6ZTDXP.js → chunk-BDOL622T.js} +4 -4
- package/dist/{chunk-L4JQ236V.js → chunk-C3CXVX2B.js} +4 -4
- package/dist/{chunk-33U56YGD.js → chunk-CWICLBLU.js} +2 -1
- package/dist/{chunk-33U56YGD.js.map → chunk-CWICLBLU.js.map} +1 -1
- package/dist/{chunk-XM3WTJ7Y.js → chunk-DEVD2WD2.js} +2 -2
- package/dist/{chunk-WWUEKQLR.js → chunk-EWK44F6V.js} +3 -3
- package/dist/chunk-EWK44F6V.js.map +1 -0
- package/dist/{chunk-CQSQNDMV.js → chunk-FNHPTTRF.js} +7 -5
- package/dist/chunk-FNHPTTRF.js.map +1 -0
- package/dist/{chunk-Z72GWGH2.js → chunk-GCD4EHCD.js} +6 -6
- package/dist/{chunk-3KBYI6RR.js → chunk-H6ZMKNP7.js} +3 -3
- package/dist/{chunk-5OKCT6LF.js → chunk-IEWAH7W3.js} +5 -5
- package/dist/{chunk-TGI2AAOZ.js → chunk-IV4HRGKX.js} +77 -12
- package/dist/chunk-IV4HRGKX.js.map +1 -0
- package/dist/{chunk-635IQV6B.js → chunk-J2ZQULU3.js} +2 -2
- package/dist/{chunk-ZZZ33KTO.js → chunk-K2IDR6FR.js} +3 -3
- package/dist/{chunk-YEH7UIUY.js → chunk-KTZRI27M.js} +4 -4
- package/dist/{chunk-RV7FZ4ID.js → chunk-L644NMDI.js} +3 -3
- package/dist/{chunk-RV7FZ4ID.js.map → chunk-L644NMDI.js.map} +1 -1
- package/dist/{chunk-3TZABC7D.js → chunk-LFT7GUWS.js} +63 -17
- package/dist/chunk-LFT7GUWS.js.map +1 -0
- package/dist/{chunk-QHRWXCON.js → chunk-O7B2IYCZ.js} +11 -11
- package/dist/chunk-O7B2IYCZ.js.map +1 -0
- package/dist/{chunk-U3MRXQZS.js → chunk-RHWPZKRV.js} +24 -1
- package/dist/chunk-RHWPZKRV.js.map +1 -0
- package/dist/{chunk-OU4I3MEH.js → chunk-UJSW72LG.js} +3 -3
- package/dist/{chunk-R2CRH6JQ.js → chunk-VACACCD6.js} +3 -3
- package/dist/{chunk-EGWVL5XA.js → chunk-VMAR67FF.js} +2 -2
- package/dist/{chunk-ZH7HWVEE.js → chunk-VMJ7TBVM.js} +2 -2
- package/dist/chunk-WRRA4ATV.js +332 -0
- package/dist/chunk-WRRA4ATV.js.map +1 -0
- package/dist/{chunk-XWJJYZQC.js → chunk-XHEVDABB.js} +2 -2
- package/dist/{chunk-SCQVBLNR.js → chunk-XHGF6VC6.js} +4 -4
- package/dist/{credential-2IEZDTH3.js → credential-GJW7LGYP.js} +5 -5
- package/dist/{credential-template-S5WSOI3P.js → credential-template-UWBYKKWD.js} +5 -5
- package/dist/dev-PBW7BSOD.js +605 -0
- package/dist/dev-PBW7BSOD.js.map +1 -0
- package/dist/{digest-HQGL7H6E.js → digest-XEHGCJM4.js} +8 -8
- package/dist/{docs-CJQZVERZ.js → docs-KH4BCEQF.js} +5 -5
- package/dist/{doctor-EGK5AB77.js → doctor-FOXXE5SK.js} +3 -3
- package/dist/{environment-MWVXYEDU.js → environment-EBDPQTIS.js} +7 -7
- package/dist/{eval-F4NORBQI.js → eval-QZSSEICV.js} +67 -27
- package/dist/eval-QZSSEICV.js.map +1 -0
- package/dist/{exploration-JC7R7KTJ.js → exploration-LCGKRGOQ.js} +5 -5
- package/dist/{exploratory-test-BHK5FTMJ.js → exploratory-test-SGECQGIX.js} +6 -6
- package/dist/{external-run-UL5CKG54.js → external-run-2AJAI5O7.js} +9 -9
- package/dist/{feature-flag-NMO25TZN.js → feature-flag-P7N4WQIH.js} +5 -5
- package/dist/{feedback-3JNPSUXS.js → feedback-LAT7TQ2T.js} +6 -6
- package/dist/{flow-AYE4RTZN.js → flow-NH2DC6AP.js} +5 -5
- package/dist/{github-DM2DCXRY.js → github-FCEKBLXI.js} +6 -6
- package/dist/index.js +106 -408
- package/dist/index.js.map +1 -1
- package/dist/{init-CPDT5XAU.js → init-5U5EZOAW.js} +5 -5
- package/dist/{install-JZRNCHMO.js → install-X3UNVXKY.js} +5 -5
- package/dist/{issues-GRFJB52C.js → issues-4P6I3YQW.js} +8 -8
- package/dist/{knobs-3Y4QXWAD.js → knobs-JKTWJ6ZG.js} +5 -5
- package/dist/{landing-ABYL5WVG.js → landing-6AGLKI66.js} +7 -7
- package/dist/{list-WG5QB4NK.js → list-TWP2RP33.js} +5 -5
- package/dist/{local-KX24OR5Z.js → local-D75QE5TB.js} +7 -7
- package/dist/{login-MLJQAIFK.js → login-RBET4TIP.js} +5 -5
- package/dist/{mcp-DDTO54XD.js → mcp-562SUUMK.js} +11 -11
- package/dist/{metrics-BJLLOSPQ.js → metrics-4WF2GEPA.js} +5 -5
- package/dist/{monitor-E2CKGHPM.js → monitor-WJXH54H2.js} +5 -5
- package/dist/{perf-IX7JOMUE.js → perf-C6N6P7YG.js} +12 -361
- package/dist/perf-C6N6P7YG.js.map +1 -0
- package/dist/{product-2ECWM2JN.js → product-CYEQ7HOB.js} +5 -5
- package/dist/{product-map-O542LZQL.js → product-map-MSDLIFZY.js} +7 -7
- package/dist/{prompts-Y7O4XJ5P.js → prompts-ME53WPN4.js} +5 -5
- package/dist/{proofs-TNOBLSRP.js → proofs-D3G6ZUFP.js} +11 -9
- package/dist/{property-TZCGOZQG.js → property-5GLJNAVB.js} +29 -10
- package/dist/property-5GLJNAVB.js.map +1 -0
- package/dist/{psql-M66YSUXW.js → psql-EXAUDU3W.js} +5 -5
- package/dist/{record-3JINBRAR.js → record-EE7NGNKY.js} +6 -6
- package/dist/{redis-FOIBINYA.js → redis-M4EYWKOJ.js} +5 -5
- package/dist/{release-B4VWMVEI.js → release-4KUWVWWC.js} +5 -5
- package/dist/{runbook-EYMSE37E.js → runbook-AHU77ANQ.js} +5 -5
- package/dist/{sandbox-R6EMGOKR.js → sandbox-FBLJEYA2.js} +1910 -1629
- package/dist/sandbox-FBLJEYA2.js.map +1 -0
- package/dist/{scenarios-W7YNLBVO.js → scenarios-TU656T2B.js} +5 -5
- package/dist/{schedule-EDHQJUUZ.js → schedule-DXJI6SYO.js} +8 -8
- package/dist/{session-4N62APNQ.js → session-RUFTJHF4.js} +10 -10
- package/dist/{skill-XFGMNOVM.js → skill-ZK76GQ47.js} +7 -7
- package/dist/{skill-XFGMNOVM.js.map → skill-ZK76GQ47.js.map} +1 -1
- package/dist/skills/cofactor-debug-run/SKILL.md +2 -1
- package/dist/skills/cofactor-debug-run/history/2.0.10.md +320 -0
- package/dist/skills/cofactor-debug-run/version.json +1 -1
- package/dist/{slack-RUAXG6TB.js → slack-M3OKDVMY.js} +6 -6
- package/dist/{spec-ZZKMW7ER.js → spec-5MXEBLYR.js} +5 -5
- package/dist/{src-OKSAEHQS.js → src-2X5OQRPJ.js} +4 -4
- package/dist/{src-DGIVA22K.js → src-72EFBA2R.js} +3 -3
- package/dist/{src-ECZWYNSV.js → src-KH6WSBJV.js} +5 -5
- package/dist/{src-CQ2YAW7F.js → src-VLV36QYH.js} +127 -20
- package/dist/src-VLV36QYH.js.map +1 -0
- package/dist/{start-OCZGILRL.js → start-PDYBRB5T.js} +5 -5
- package/dist/{status-YTJ6YITG.js → status-VMVPVCDA.js} +5 -5
- package/dist/{tag-KBG4SWRL.js → tag-7KTDLPVU.js} +6 -6
- package/dist/{task-O6XRMHYE.js → task-QLFYZNKR.js} +6 -6
- package/dist/{teams-NFUHS7XI.js → teams-Y7BXCY6P.js} +7 -7
- package/dist/{test-suite-6BH3DESN.js → test-suite-6U22AYFG.js} +15 -14
- package/dist/test-suite-6U22AYFG.js.map +1 -0
- package/dist/{tickets-JU2STK4B.js → tickets-CQDJDNPY.js} +5 -5
- package/dist/{trace-NMSGKASJ.js → trace-QDORWXYX.js} +8 -8
- package/dist/{triage-JGECJJU5.js → triage-GY7M3UGG.js} +6 -6
- package/dist/{trigger-OSPEVCCQ.js → trigger-DLFAORX4.js} +9 -9
- package/dist/{update-check-FNP6RFZO.js → update-check-ES6XQ7OF.js} +4 -4
- package/dist/{upgrade-3PPBXFAT.js → upgrade-WKEOW5GS.js} +5 -5
- package/dist/{usage-QMCU2JIO.js → usage-E6FDTR3W.js} +7 -7
- package/dist/{utilities-7VHWTSJT.js → utilities-4Z6YX3L5.js} +6 -6
- package/dist/{visual-WIZSPTVK.js → visual-TA6LPVDJ.js} +5 -5
- package/dist/{workflow-23HKTJLS.js → workflow-B5FXS2CJ.js} +58 -31
- package/dist/workflow-B5FXS2CJ.js.map +1 -0
- package/dist/{workflow-cache-ACGM3BOI.js → workflow-cache-MNLEMRMM.js} +16 -16
- package/dist/{workflow-cache-convergence-resolve-KEQDQMKL.js → workflow-cache-convergence-resolve-G5HJM6MF.js} +5 -5
- package/dist/{workflow-debug-TVLBNRCB.js → workflow-debug-TNBUGSBK.js} +11 -11
- package/dist/{workflow-feedback-GB5VPGE2.js → workflow-feedback-G2ZXAUGI.js} +5 -5
- package/dist/{workflow-fork-2IPJNR76.js → workflow-fork-6HHOMC2D.js} +5 -5
- package/dist/{workflow-promotion-QEQUXVUT.js → workflow-promotion-RG7L6JZT.js} +5 -5
- package/dist/{workflow-proposals-KHGTPMD4.js → workflow-proposals-ZNF2F3UE.js} +5 -5
- package/dist/{workflow-revisions-F5KQEEXB.js → workflow-revisions-TP64Z6FO.js} +5 -5
- package/dist/{workflow-status-66HC5MEA.js → workflow-status-5RG3JX56.js} +5 -5
- package/package.json +3 -2
- package/dist/chunk-3TZABC7D.js.map +0 -1
- package/dist/chunk-BJHAVM7Z.js.map +0 -1
- package/dist/chunk-CQSQNDMV.js.map +0 -1
- package/dist/chunk-CZDQVQ57.js.map +0 -1
- package/dist/chunk-QHRWXCON.js.map +0 -1
- package/dist/chunk-QVMGXMP5.js.map +0 -1
- package/dist/chunk-TGI2AAOZ.js.map +0 -1
- package/dist/chunk-U3MRXQZS.js.map +0 -1
- package/dist/chunk-WWUEKQLR.js.map +0 -1
- package/dist/eval-F4NORBQI.js.map +0 -1
- package/dist/perf-IX7JOMUE.js.map +0 -1
- package/dist/property-TZCGOZQG.js.map +0 -1
- package/dist/sandbox-R6EMGOKR.js.map +0 -1
- package/dist/src-CQ2YAW7F.js.map +0 -1
- package/dist/test-suite-6BH3DESN.js.map +0 -1
- package/dist/workflow-23HKTJLS.js.map +0 -1
- /package/dist/{account-RHHS7HT4.js.map → account-CZYZD2JS.js.map} +0 -0
- /package/dist/{alert-B5WEOKHP.js.map → alert-JQ4SDEB7.js.map} +0 -0
- /package/dist/{api-catalog-UXONX3BR.js.map → api-catalog-IWQC35P2.js.map} +0 -0
- /package/dist/{api-key-J3A4TJKN.js.map → api-key-GUDXIIEA.js.map} +0 -0
- /package/dist/{attachment-ZQW7DR4G.js.map → attachment-CPZYOBUB.js.map} +0 -0
- /package/dist/{auth-HQGKUZBS.js.map → auth-DS6MBVEI.js.map} +0 -0
- /package/dist/{benchmark-TIKJA32J.js.map → benchmark-6HPCIQHD.js.map} +0 -0
- /package/dist/{blackcat-Z5LNV2GS.js.map → blackcat-V3L63WFE.js.map} +0 -0
- /package/dist/{chunk-JQG3V5E3.js.map → chunk-2E3STBHS.js.map} +0 -0
- /package/dist/{chunk-W6DL4IP6.js.map → chunk-3LGCHNBC.js.map} +0 -0
- /package/dist/{chunk-MB4FS35J.js.map → chunk-56HFZHQM.js.map} +0 -0
- /package/dist/{chunk-YTXZUWMN.js.map → chunk-62EXS76C.js.map} +0 -0
- /package/dist/{chunk-6X6ZTDXP.js.map → chunk-BDOL622T.js.map} +0 -0
- /package/dist/{chunk-L4JQ236V.js.map → chunk-C3CXVX2B.js.map} +0 -0
- /package/dist/{chunk-XM3WTJ7Y.js.map → chunk-DEVD2WD2.js.map} +0 -0
- /package/dist/{chunk-Z72GWGH2.js.map → chunk-GCD4EHCD.js.map} +0 -0
- /package/dist/{chunk-3KBYI6RR.js.map → chunk-H6ZMKNP7.js.map} +0 -0
- /package/dist/{chunk-5OKCT6LF.js.map → chunk-IEWAH7W3.js.map} +0 -0
- /package/dist/{chunk-635IQV6B.js.map → chunk-J2ZQULU3.js.map} +0 -0
- /package/dist/{chunk-ZZZ33KTO.js.map → chunk-K2IDR6FR.js.map} +0 -0
- /package/dist/{chunk-YEH7UIUY.js.map → chunk-KTZRI27M.js.map} +0 -0
- /package/dist/{chunk-OU4I3MEH.js.map → chunk-UJSW72LG.js.map} +0 -0
- /package/dist/{chunk-R2CRH6JQ.js.map → chunk-VACACCD6.js.map} +0 -0
- /package/dist/{chunk-EGWVL5XA.js.map → chunk-VMAR67FF.js.map} +0 -0
- /package/dist/{chunk-ZH7HWVEE.js.map → chunk-VMJ7TBVM.js.map} +0 -0
- /package/dist/{chunk-XWJJYZQC.js.map → chunk-XHEVDABB.js.map} +0 -0
- /package/dist/{chunk-SCQVBLNR.js.map → chunk-XHGF6VC6.js.map} +0 -0
- /package/dist/{credential-2IEZDTH3.js.map → credential-GJW7LGYP.js.map} +0 -0
- /package/dist/{credential-template-S5WSOI3P.js.map → credential-template-UWBYKKWD.js.map} +0 -0
- /package/dist/{digest-HQGL7H6E.js.map → digest-XEHGCJM4.js.map} +0 -0
- /package/dist/{docs-CJQZVERZ.js.map → docs-KH4BCEQF.js.map} +0 -0
- /package/dist/{doctor-EGK5AB77.js.map → doctor-FOXXE5SK.js.map} +0 -0
- /package/dist/{environment-MWVXYEDU.js.map → environment-EBDPQTIS.js.map} +0 -0
- /package/dist/{exploration-JC7R7KTJ.js.map → exploration-LCGKRGOQ.js.map} +0 -0
- /package/dist/{exploratory-test-BHK5FTMJ.js.map → exploratory-test-SGECQGIX.js.map} +0 -0
- /package/dist/{external-run-UL5CKG54.js.map → external-run-2AJAI5O7.js.map} +0 -0
- /package/dist/{feature-flag-NMO25TZN.js.map → feature-flag-P7N4WQIH.js.map} +0 -0
- /package/dist/{feedback-3JNPSUXS.js.map → feedback-LAT7TQ2T.js.map} +0 -0
- /package/dist/{flow-AYE4RTZN.js.map → flow-NH2DC6AP.js.map} +0 -0
- /package/dist/{github-DM2DCXRY.js.map → github-FCEKBLXI.js.map} +0 -0
- /package/dist/{init-CPDT5XAU.js.map → init-5U5EZOAW.js.map} +0 -0
- /package/dist/{install-JZRNCHMO.js.map → install-X3UNVXKY.js.map} +0 -0
- /package/dist/{issues-GRFJB52C.js.map → issues-4P6I3YQW.js.map} +0 -0
- /package/dist/{knobs-3Y4QXWAD.js.map → knobs-JKTWJ6ZG.js.map} +0 -0
- /package/dist/{landing-ABYL5WVG.js.map → landing-6AGLKI66.js.map} +0 -0
- /package/dist/{list-WG5QB4NK.js.map → list-TWP2RP33.js.map} +0 -0
- /package/dist/{local-KX24OR5Z.js.map → local-D75QE5TB.js.map} +0 -0
- /package/dist/{login-MLJQAIFK.js.map → login-RBET4TIP.js.map} +0 -0
- /package/dist/{mcp-DDTO54XD.js.map → mcp-562SUUMK.js.map} +0 -0
- /package/dist/{metrics-BJLLOSPQ.js.map → metrics-4WF2GEPA.js.map} +0 -0
- /package/dist/{monitor-E2CKGHPM.js.map → monitor-WJXH54H2.js.map} +0 -0
- /package/dist/{product-2ECWM2JN.js.map → product-CYEQ7HOB.js.map} +0 -0
- /package/dist/{product-map-O542LZQL.js.map → product-map-MSDLIFZY.js.map} +0 -0
- /package/dist/{prompts-Y7O4XJ5P.js.map → prompts-ME53WPN4.js.map} +0 -0
- /package/dist/{proofs-TNOBLSRP.js.map → proofs-D3G6ZUFP.js.map} +0 -0
- /package/dist/{psql-M66YSUXW.js.map → psql-EXAUDU3W.js.map} +0 -0
- /package/dist/{record-3JINBRAR.js.map → record-EE7NGNKY.js.map} +0 -0
- /package/dist/{redis-FOIBINYA.js.map → redis-M4EYWKOJ.js.map} +0 -0
- /package/dist/{release-B4VWMVEI.js.map → release-4KUWVWWC.js.map} +0 -0
- /package/dist/{runbook-EYMSE37E.js.map → runbook-AHU77ANQ.js.map} +0 -0
- /package/dist/{scenarios-W7YNLBVO.js.map → scenarios-TU656T2B.js.map} +0 -0
- /package/dist/{schedule-EDHQJUUZ.js.map → schedule-DXJI6SYO.js.map} +0 -0
- /package/dist/{session-4N62APNQ.js.map → session-RUFTJHF4.js.map} +0 -0
- /package/dist/{slack-RUAXG6TB.js.map → slack-M3OKDVMY.js.map} +0 -0
- /package/dist/{spec-ZZKMW7ER.js.map → spec-5MXEBLYR.js.map} +0 -0
- /package/dist/{src-DGIVA22K.js.map → src-2X5OQRPJ.js.map} +0 -0
- /package/dist/{src-ECZWYNSV.js.map → src-72EFBA2R.js.map} +0 -0
- /package/dist/{src-OKSAEHQS.js.map → src-KH6WSBJV.js.map} +0 -0
- /package/dist/{start-OCZGILRL.js.map → start-PDYBRB5T.js.map} +0 -0
- /package/dist/{status-YTJ6YITG.js.map → status-VMVPVCDA.js.map} +0 -0
- /package/dist/{tag-KBG4SWRL.js.map → tag-7KTDLPVU.js.map} +0 -0
- /package/dist/{task-O6XRMHYE.js.map → task-QLFYZNKR.js.map} +0 -0
- /package/dist/{teams-NFUHS7XI.js.map → teams-Y7BXCY6P.js.map} +0 -0
- /package/dist/{tickets-JU2STK4B.js.map → tickets-CQDJDNPY.js.map} +0 -0
- /package/dist/{trace-NMSGKASJ.js.map → trace-QDORWXYX.js.map} +0 -0
- /package/dist/{triage-JGECJJU5.js.map → triage-GY7M3UGG.js.map} +0 -0
- /package/dist/{trigger-OSPEVCCQ.js.map → trigger-DLFAORX4.js.map} +0 -0
- /package/dist/{update-check-FNP6RFZO.js.map → update-check-ES6XQ7OF.js.map} +0 -0
- /package/dist/{upgrade-3PPBXFAT.js.map → upgrade-WKEOW5GS.js.map} +0 -0
- /package/dist/{usage-QMCU2JIO.js.map → usage-E6FDTR3W.js.map} +0 -0
- /package/dist/{utilities-7VHWTSJT.js.map → utilities-4Z6YX3L5.js.map} +0 -0
- /package/dist/{visual-WIZSPTVK.js.map → visual-TA6LPVDJ.js.map} +0 -0
- /package/dist/{workflow-cache-ACGM3BOI.js.map → workflow-cache-MNLEMRMM.js.map} +0 -0
- /package/dist/{workflow-cache-convergence-resolve-KEQDQMKL.js.map → workflow-cache-convergence-resolve-G5HJM6MF.js.map} +0 -0
- /package/dist/{workflow-debug-TVLBNRCB.js.map → workflow-debug-TNBUGSBK.js.map} +0 -0
- /package/dist/{workflow-feedback-GB5VPGE2.js.map → workflow-feedback-G2ZXAUGI.js.map} +0 -0
- /package/dist/{workflow-fork-2IPJNR76.js.map → workflow-fork-6HHOMC2D.js.map} +0 -0
- /package/dist/{workflow-promotion-QEQUXVUT.js.map → workflow-promotion-RG7L6JZT.js.map} +0 -0
- /package/dist/{workflow-proposals-KHGTPMD4.js.map → workflow-proposals-ZNF2F3UE.js.map} +0 -0
- /package/dist/{workflow-revisions-F5KQEEXB.js.map → workflow-revisions-TP64Z6FO.js.map} +0 -0
- /package/dist/{workflow-status-66HC5MEA.js.map → workflow-status-5RG3JX56.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/eval.ts","../../types/src/agent-eval-template.ts","../src/eval-bundle.ts","../src/eval-run.ts","../../types/src/agent-eval-render.ts","../src/eval-template.ts"],"sourcesContent":["/** `cofactor eval`: author agent evals, add cases, run them against a commit and compare models. */\nimport { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';\nimport { gunzipSync } from 'node:zlib';\nimport { join } from 'node:path';\nimport { AGENT_EVAL_MAX_BUNDLE_BYTES, EvalConversationSchema } from '@chatsdet/types/agent-eval-template';\nimport { printServedGuide } from './guide.js';\nimport { GLOBAL_VALUE_FLAGS, hasFlag, resolveConfig } from './auth.js';\nimport { writeRawOutput } from './brand.js';\nimport {\n getPositionalArg,\n getPositionalArgs,\n getScalarArgValue,\n readStdin,\n} from './cli-helpers.js';\nimport { resolveApplicationId } from './environment.js';\nimport { EVALS, getEval, request, requestAll, requestText, type EvalDetail, type UploadReply } from './eval-api.js';\nimport { loadBundle, missingRequiredPaths } from './eval-bundle.js';\nimport { compareRuns, getRun, listRuns, runEval } from './eval-run.js';\nimport {\n EVAL_GITIGNORE,\n TemplateError,\n formatIssues,\n initRunbook,\n initTemplate,\n readPushPayload,\n} from './eval-template.js';\n\nconst USAGE = {\n guide: 'guide',\n init: 'init <name> [--application <app>] [--capability CAP-…]',\n push: 'push [<file>] --application <app>',\n show: 'show <name>',\n runbook: 'runbook <name>',\n list: 'list',\n cases: 'cases <name> [--download <dir>]',\n case: 'case <name> <key> [--version N]',\n 'rm-case': 'rm-case <name> <key>',\n 'add-case':\n 'add-case <name> --key <k> --input <dir|file.tar.gz> --expected <file|-> --source \"<provenance>\" [--title <t>] [--conversation <file.json>] [--replace [--reason <why>]]',\n run: 'run <name> [--model <alias>]... [--environment <env>] [--at <sha>] [--case <key>]... [--repeats N] [--parallel N] [--no-wait]',\n get: 'get <run-id> [--case <key>] [--transcript] [--stdout]',\n runs: 'runs <name> [--limit N]',\n compare: 'compare (<run-id>... | --batch <id>)',\n};\ntype Command = keyof typeof USAGE;\n\nconst VALUE_FLAGS = [\n ...GLOBAL_VALUE_FLAGS,\n '--application',\n '--capability',\n '--key',\n '--input',\n '--expected',\n '--source',\n '--title',\n '--conversation',\n '--reason',\n '--version',\n '--model',\n '--environment',\n '--at',\n '--case',\n '--repeats',\n '--parallel',\n '--limit',\n '--batch',\n '--download',\n];\n/** How many positional arguments a sub-command needs (push, list and compare take none). */\nconst POSITIONALS: Partial<Record<Command, number>> = {\n show: 1, runbook: 1, cases: 1, case: 2, 'rm-case': 2, 'add-case': 1, run: 1, get: 1, runs: 1,\n};\nconst WRITES: Command[] = ['push', 'add-case', 'rm-case', 'run'];\nconst DEFAULT_TEMPLATE_DIR = 'evals';\n\nfunction printHelp(command: string | undefined): void {\n const usage = Object.hasOwn(USAGE, command ?? '') ? USAGE[command as Command] : undefined;\n console.log(\n [\n `Usage: cofactor eval ${usage ?? '<sub-command>'} [--json]`,\n '',\n ...Object.values(USAGE).map((line) => ` cofactor eval ${line}`),\n '',\n 'guide: prints the agent-eval guide: the latest served copy, else the one bundled with this CLI (no login needed).',\n 'An eval runs an agent command against a set of cases at a commit, grades each attempt and reports',\n 'pass rate, cost and time per task. The template and runbook live in your repo under evals/.',\n '',\n 'init: writes evals/<name>.eval.yaml (a commented template with a script and an ai-judge grader),',\n ' evals/<name>.runbook.md and evals/.gitignore (*.tar.gz, _staging/). Refuses to overwrite.',\n 'push: validates the template locally, reads the runbook it names (relative to the YAML) and stores both;',\n ' re-pushing is idempotent. Defaults to evals/*.eval.yaml when exactly one exists. Needs --application.',\n ' Warns on a missing runbook heading; errors when \"## Finding real data\" or \"## Sanitizing\" is empty, or when',\n ' any section still has the \"<!-- cofactor:todo -->\" line that init writes (delete it once the section is written).',\n 'show/list/cases/runbook: read the stored eval, its cases (key, sha256, size, source) and runbook.',\n ' cases --download <dir> also writes each bundle as <dir>/<key>.tar (uncompressed, so its sha256 is the case\\'s sha256).',\n 'add-case: --input is a directory (tarred deterministically: sorted entries, fixed mtime, uid/gid 0) or a .tar.gz.',\n ' The sha256 shown is that of the uncompressed tar, so the same files give the same sha256 on any runtime',\n ' and dedup is by tar content; gzip is transport only.',\n ' The template\\'s input.require paths are checked first.',\n ' --expected is a JSON file, or - for stdin. --source says where the data came from and what corroborates the',\n ' label. --replace stores a new version of an existing key (new --expected and/or --input), recording who and when;',\n ' --reason says why. Past runs keep the version they graded and new runs use the latest; compare refuses runs',\n ' that graded different versions. Without --replace an existing key is an error.',\n ' Never include customer data in a case. --conversation <file.json> is required for a multi-turn eval.',\n 'case: one case\\'s expected label, provenance and version history (newest first); --version N shows an older version.',\n 'rm-case: deletes a case (all its versions) that no run has used.',\n 'run: starts one run per --model (alias from the template; none means its default) and waits, printing one',\n ' section per model and then the comparison grid. --case and a --repeats that differs from the template make a partial run',\n ' that never counts for coverage or proofs. Polls every 5 seconds for at most 8.5 hours; a timeout leaves the',\n ' runs readable with get; the batch and run ids are printed to stderr before waiting. --no-wait prints the',\n ' ids and exits 0. --json prints an array with one entry per run, in order: the run\\'s result, or',\n ' {id, status, verdict, error} for a run with no result.',\n 'get: a run\\'s result. --case <key> narrows to one case; --case <key> --transcript adds a multi-turn attempt\\'s',\n ' conversation; --case <key> --stdout adds each attempt\\'s stdout tail (why an attempt exited). runs: recent runs for an eval, newest first (--limit N).',\n 'compare: the grid for run ids or a --batch; --json prints the array of runs.',\n '',\n 'Common options:',\n ' --org <name|id> Logged-in organization; required explicitly for push, add-case, rm-case and run',\n ' --env <env> API environment (prod, dev, local)',\n ' --api-url <url> API URL override',\n ' --token <key> API token override',\n ' --json Raw JSON on every sub-command except init',\n ' --help, -h Show help without authentication',\n '',\n 'Requires the sandbox-v2 organization flag. API-key scopes:',\n ' run: sandbox:create + sandbox:exec, named explicitly (sandbox:* does not grant sandbox:exec).',\n ' push, add-case, rm-case: sandbox:edit. show, list, cases, case, runbook, get, runs, compare: sandbox:read.',\n '',\n 'Exit codes (run):',\n ' 0 every run\\'s verdict is pass',\n ' 3 at least one run\\'s verdict is fail (the agent missed the pass bar; perf also exits 3 for \"slower\")',\n ' 1 a failed or cancelled run, a polling timeout, or any error',\n 'Other sub-commands exit 0 on success, 1 on error.',\n ].join('\\n')\n );\n}\n\nfunction required(argv: string[], flag: string): string {\n const value = getScalarArgValue(argv, flag);\n if (!value) throw new Error(`${flag} is required.`);\n return value;\n}\n\n/** `--expected` alone may be `-` (stdin), which the generic value check reads as a missing value. */\nfunction expectedArg(argv: string[]): string {\n const i = argv.findIndex((arg) => arg === '--expected' || arg.startsWith('--expected='));\n const value = i < 0 ? undefined : argv[i]!.startsWith('--expected=') ? argv[i]!.slice('--expected='.length) : argv[i + 1];\n if (!value || value.startsWith('--')) throw new Error('--expected is required: a JSON file, or - for stdin.');\n return value;\n}\n\nasync function readJson(path: string, label: string): Promise<unknown> {\n let text: string;\n try {\n text = path === '-' ? await readStdin() : await readFile(path, 'utf8');\n } catch (error) {\n throw new Error(`Cannot read ${label}: ${error instanceof Error ? error.message : String(error)}`);\n }\n try {\n return JSON.parse(text);\n } catch (error) {\n throw new Error(`${label} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\ntype Context = { argv: string[]; positionals: string[]; apiUrl: string; token: string; json: boolean };\n\n/** The first positional (an eval name or run id), or the sub-command's usage as the error. */\nfunction target(ctx: Context, command: Command): string {\n const value = ctx.positionals[0];\n if (!value) throw new Error(`Usage: cofactor eval ${USAGE[command]}`);\n return value;\n}\n\nasync function init(argv: string[]): Promise<void> {\n const name = getPositionalArg(argv, VALUE_FLAGS);\n if (!name) throw new Error(`Usage: cofactor eval ${USAGE.init}`);\n if (!/^[a-z0-9-]{2,40}$/.test(name) || name === 'runs' || name === 'compare')\n throw new Error('The eval name must be 2 to 40 lowercase letters, digits or dashes (and not \"runs\" or \"compare\").');\n const capability = getScalarArgValue(argv, '--capability');\n if (capability !== undefined && !/^CAP-[A-Z0-9]+-\\d{3,}$/.test(capability))\n throw new Error('--capability must be a product-map code such as CAP-CMM-001.');\n const files = [\n { path: join(DEFAULT_TEMPLATE_DIR, `${name}.eval.yaml`), text: initTemplate({ name, application: getScalarArgValue(argv, '--application'), capability }) },\n { path: join(DEFAULT_TEMPLATE_DIR, `${name}.runbook.md`), text: initRunbook(name) },\n ];\n const gitignore = join(DEFAULT_TEMPLATE_DIR, '.gitignore');\n const exists = async (path: string) => readFile(path).then(() => true, () => false);\n for (const file of files) {\n if (await exists(file.path)) throw new Error(`${file.path} already exists; not overwriting it.`);\n }\n await mkdir(DEFAULT_TEMPLATE_DIR, { recursive: true });\n const written = files.map((file) => file.path);\n for (const file of files) await writeFile(file.path, file.text, { flag: 'wx' });\n if (!(await exists(gitignore))) {\n await writeFile(gitignore, EVAL_GITIGNORE, { flag: 'wx' });\n written.push(gitignore);\n }\n writeRawOutput(\n hasFlag(argv, '--json')\n ? JSON.stringify({ written }, null, 2)\n : `${written.map((path) => `Wrote ${path}`).join('\\n')}\\nEdit the run command and graders, write each runbook section and delete its <!-- cofactor:todo --> line, then: cofactor eval push ${files[0]!.path} --application <app> --org <org>`\n );\n}\n\nasync function defaultTemplateFile(): Promise<string> {\n const found = (await readdir(DEFAULT_TEMPLATE_DIR).catch(() => [])).filter((f) => f.endsWith('.eval.yaml'));\n if (found.length !== 1)\n throw new Error(\n found.length === 0\n ? `No ${DEFAULT_TEMPLATE_DIR}/*.eval.yaml found; pass the template file.`\n : `Several templates in ${DEFAULT_TEMPLATE_DIR}/ (${found.join(', ')}); pass the one to push.`\n );\n return join(DEFAULT_TEMPLATE_DIR, found[0]!);\n}\n\nasync function push({ argv, apiUrl, token, json }: Context): Promise<void> {\n const file = getPositionalArg(argv, VALUE_FLAGS) ?? (await defaultTemplateFile());\n const payload = await readPushPayload(file);\n for (const warning of payload.warnings) console.error(`Warning: ${warning}`);\n const applicationId = await resolveApplicationId(argv, apiUrl, token);\n const pushed = await request<{ id: string; name: string }>(apiUrl, token, 'PUT', EVALS, {\n applicationId,\n definition: payload.definition,\n runbook: payload.runbook,\n });\n const detail = await getEval(apiUrl, token, pushed.name);\n if (json) {\n writeRawOutput(JSON.stringify({ ...detail, warnings: payload.warnings }, null, 2));\n return;\n }\n writeRawOutput(\n [\n `Pushed ${detail.name} (${detail.id})`,\n `Cases: ${detail.cases.length}`,\n `Capabilities: ${detail.capabilities.map((c) => c.code).join(', ') || 'none'}`,\n ].join('\\n')\n );\n}\n\nfunction describeEval(detail: EvalDetail): string {\n const d = detail.definition;\n return [\n `${detail.name} ${detail.id}`,\n d.description,\n `Application: ${detail.applicationId}`,\n `Mode: ${d.mode}`,\n `Run: ${d.run.split('\\n')[0]}${d.run.includes('\\n') ? ' …' : ''}`,\n `Models: ${Object.entries(d.agent.models).map(([alias, m]) => `${alias}${alias === d.agent.default ? '*' : ''} (${m.model})`).join(', ')}`,\n `Graders: ${d.graders.map((g) => `${g.id} [${g.kind}]`).join(', ')}`,\n `Repeats: ${d.repeats}, pass at least ${d.passAtLeast}, bar ${Math.round(d.passBar * 100)}%, ${d.attemptSeconds}s per attempt`,\n `Capabilities: ${detail.capabilities.map((c) => `${c.code} ${c.title}`).join('; ') || 'none'}`,\n `Cases: ${detail.cases.length}`,\n ].join('\\n');\n}\n\nasync function listEvals({ apiUrl, token, json }: Context): Promise<void> {\n const evals = await requestAll<{ id: string; name: string; applicationId: string; description: string; caseCount: number; latestVerdict: 'pass' | 'fail' | null }>(apiUrl, token, EVALS);\n writeRawOutput(\n json\n ? JSON.stringify(evals, null, 2)\n : evals.map((e) => `${e.name} ${e.id} ${e.caseCount} cases ${e.latestVerdict ?? '-'} ${e.description}`).join('\\n') || 'No evals found.'\n );\n}\n\nasync function showEval(ctx: Context): Promise<void> {\n const detail = await getEval(ctx.apiUrl, ctx.token, target(ctx, 'show'));\n writeRawOutput(ctx.json ? JSON.stringify(detail, null, 2) : describeEval(detail));\n}\n\n// A tar may unpack to more than the gzip limit; the same bound the bundle reader uses for archives.\nconst DOWNLOAD_MAX_TAR_BYTES = 4 * AGENT_EVAL_MAX_BUNDLE_BYTES;\n\n/** Fetch every case bundle through its signed URL and write it, gunzipped, as `<dir>/<key>.tar` (the tar whose sha256 is the case's content address). */\nasync function downloadBundles(ctx: Context, evaluation: EvalDetail, dir: string): Promise<void> {\n await mkdir(dir, { recursive: true });\n for (const { key } of evaluation.cases) {\n // The key becomes a file name: never trust the server for that.\n if (!/^[a-z0-9][a-z0-9-]*$/.test(key)) throw new Error(`Refusing to download case \"${key}\": its key is not a plain file name.`);\n const { url } = await request<{ url: string }>(\n ctx.apiUrl,\n ctx.token,\n 'GET',\n `${EVALS}/${encodeURIComponent(evaluation.id)}/cases/${encodeURIComponent(key)}/bundle`\n );\n const target = new URL(url);\n if (target.protocol !== 'https:' && !['localhost', '127.0.0.1'].includes(target.hostname))\n throw new Error(`Refusing to download case ${key} over ${target.protocol}.`);\n const response = await fetch(target, { redirect: 'error' });\n if (!response.ok) throw new Error(`Downloading the bundle of case ${key} failed (${response.status}).`);\n await writeFile(join(dir, `${key}.tar`), gunzipSync(Buffer.from(await response.arrayBuffer()), { maxOutputLength: DOWNLOAD_MAX_TAR_BYTES }));\n }\n console.error(`Downloaded ${evaluation.cases.length} case bundle${evaluation.cases.length === 1 ? '' : 's'} to ${dir}`);\n}\n\nasync function listCases(ctx: Context): Promise<void> {\n const evaluation = await getEval(ctx.apiUrl, ctx.token, target(ctx, 'cases'));\n const { cases } = evaluation;\n const download = getScalarArgValue(ctx.argv, '--download');\n if (download) await downloadBundles(ctx, evaluation, download);\n writeRawOutput(\n ctx.json\n ? JSON.stringify(cases, null, 2)\n : cases.map((c) => `${c.key} v${c.version} ${c.bundleSha256.slice(0, 12)} ${c.bundleBytes} bytes ${c.title} [${c.source}]`).join('\\n') || 'No cases.'\n );\n}\n\nasync function showRunbook(ctx: Context): Promise<void> {\n const name = target(ctx, 'runbook');\n const text = await requestText(ctx.apiUrl, ctx.token, `${EVALS}/${encodeURIComponent(name)}/runbook`);\n writeRawOutput(ctx.json ? JSON.stringify({ name, runbook: text }, null, 2) : text.trimEnd());\n}\n\ntype CaseDetail = {\n key: string;\n version: number;\n latestVersion: number;\n title: string;\n expected: unknown;\n source: string;\n bundleSha256: string;\n bundleBytes: number;\n createdAt: string;\n createdBy: string | null;\n reason: string | null;\n versions: { version: number; bundleSha256: string; createdAt: string; createdBy: string | null; reason: string | null }[];\n};\n\nasync function showCase(ctx: Context): Promise<void> {\n const key = ctx.positionals[1];\n if (!key) throw new Error(`Usage: cofactor eval ${USAGE.case}`);\n const version = getScalarArgValue(ctx.argv, '--version');\n if (version !== undefined && !/^[1-9]\\d*$/.test(version)) throw new Error('--version must be a positive whole number.');\n const evaluation = await getEval(ctx.apiUrl, ctx.token, target(ctx, 'case'));\n const query = version === undefined ? '' : `?version=${version}`;\n const detail = await request<CaseDetail>(ctx.apiUrl, ctx.token, 'GET', `${EVALS}/${encodeURIComponent(evaluation.id)}/cases/${encodeURIComponent(key)}${query}`);\n writeRawOutput(\n ctx.json\n ? JSON.stringify(detail, null, 2)\n : [\n `${detail.key} v${detail.version}${detail.version === detail.latestVersion ? ' (latest)' : ` (latest is v${detail.latestVersion})`} ${detail.title}`,\n `Source: ${detail.source}`,\n `sha256 ${detail.bundleSha256} (${detail.bundleBytes} bytes)`,\n `Expected: ${JSON.stringify(detail.expected, null, 2)}`,\n 'Versions:',\n ...detail.versions.map(\n (v) => ` v${v.version} ${v.createdAt} ${v.createdBy ?? 'before versioning'} ${v.bundleSha256.slice(0, 12)}${v.reason ? ` ${v.reason}` : ''}`\n ),\n ].join('\\n')\n );\n}\n\nasync function removeCase(ctx: Context): Promise<void> {\n const name = target(ctx, 'rm-case');\n const key = ctx.positionals[1];\n if (!key) throw new Error(`Usage: cofactor eval ${USAGE['rm-case']}`);\n const evaluation = await getEval(ctx.apiUrl, ctx.token, name);\n await request(ctx.apiUrl, ctx.token, 'DELETE', `${EVALS}/${encodeURIComponent(evaluation.id)}/cases/${encodeURIComponent(key)}`);\n writeRawOutput(ctx.json ? JSON.stringify({ eval: name, key, deleted: true }) : `Removed case ${key} from ${name}`);\n}\n\nasync function addCase(ctx: Context): Promise<void> {\n const { argv, apiUrl, token, json } = ctx;\n const name = target(ctx, 'add-case');\n const key = required(argv, '--key');\n const input = required(argv, '--input');\n const expectedSource = expectedArg(argv);\n const source = required(argv, '--source');\n const conversationFile = getScalarArgValue(argv, '--conversation');\n const replace = hasFlag(argv, '--replace');\n const reason = getScalarArgValue(argv, '--reason');\n if (reason && !replace) throw new Error('--reason only goes with --replace.');\n if (!/^[a-z0-9][a-z0-9-]{0,99}$/.test(key))\n throw new Error('--key must be lowercase letters, digits and dashes, starting with a letter or digit (at most 100 characters).');\n\n const expected = await readJson(expectedSource, expectedSource === '-' ? 'the expected value on stdin' : `--expected ${expectedSource}`);\n let conversation: unknown;\n if (conversationFile) {\n const parsed = EvalConversationSchema.safeParse(await readJson(conversationFile, `--conversation ${conversationFile}`));\n if (!parsed.success)\n throw new TemplateError(`${conversationFile} is not a valid conversation:`, formatIssues(parsed.error));\n conversation = parsed.data;\n }\n\n const evaluation = await getEval(apiUrl, token, name);\n const multiTurn = evaluation.definition.mode === 'multi-turn';\n if (multiTurn && !conversation) throw new Error(`${name} is multi-turn: pass --conversation <file.json>.`);\n if (!multiTurn && conversation) throw new Error(`${name} is single-turn: --conversation is only for multi-turn evals.`);\n\n const bundle = await loadBundle(input);\n const missing = missingRequiredPaths(bundle.entries, evaluation.definition.input.require);\n if (missing.length)\n throw new Error(`The bundle is missing required input path(s): ${missing.join(', ')} (the template's input.require).`);\n\n const evalPath = `${EVALS}/${encodeURIComponent(evaluation.id)}`;\n const upload = await request<UploadReply>(apiUrl, token, 'POST', `${evalPath}/uploads`, {\n sha256: bundle.sha256,\n gzipSha256: bundle.gzipSha256,\n bytes: bundle.bytes,\n });\n const deduplicated = upload.status === 'exists';\n if (upload.status === 'upload') {\n const response = await fetch(upload.url, { method: 'PUT', headers: upload.headers, body: new Uint8Array(bundle.archive) });\n if (!response.ok)\n throw new Error(`Uploading the bundle failed (${response.status}): ${(await response.text()).slice(0, 300)}`);\n }\n const stored = await request<{ key: string; version: number }>(apiUrl, token, 'POST', `${evalPath}/cases`, {\n key,\n title: getScalarArgValue(argv, '--title') ?? key,\n sha256: bundle.sha256,\n expected,\n source,\n ...(conversation ? { conversation } : {}),\n ...(replace ? { replace: true } : {}),\n ...(reason ? { reason } : {}),\n });\n const result = { eval: name, key, version: stored.version, sha256: bundle.sha256, bytes: bundle.bytes, deduplicated };\n writeRawOutput(\n json\n ? JSON.stringify(result, null, 2)\n : `${replace ? `Stored version ${stored.version} of case ${key} in ${name}` : `Added case ${key} to ${name}`}\\nsha256 ${bundle.sha256} (${bundle.bytes} bytes local gzip), ${deduplicated ? 'deduplicated: the bundle already existed' : 'uploaded'}`\n );\n}\n\n/** One handler per authenticated sub-command; a number is the process exit code. */\nconst HANDLERS: Record<Exclude<Command, 'init' | 'guide'>, (ctx: Context) => Promise<number | void>> = {\n push,\n show: showEval,\n runbook: showRunbook,\n list: listEvals,\n cases: listCases,\n case: showCase,\n 'rm-case': removeCase,\n 'add-case': addCase,\n run: (ctx) => runEval(ctx.argv, target(ctx, 'run'), ctx.apiUrl, ctx.token),\n get: (ctx) => getRun(ctx.argv, target(ctx, 'get'), ctx.apiUrl, ctx.token),\n runs: (ctx) => listRuns(ctx.argv, target(ctx, 'runs'), ctx.apiUrl, ctx.token),\n compare: (ctx) => compareRuns(ctx.argv, ctx.positionals, ctx.apiUrl, ctx.token),\n};\n\nexport async function runEvalCommand(argv: string[]): Promise<void> {\n const [command, ...rest] = argv;\n if (!command || command === 'help' || hasFlag(argv, '--help', '-h')) {\n printHelp(command === 'help' ? rest[0] : command);\n return;\n }\n if (command === 'guide') {\n await printServedGuide('eval', rest);\n return;\n }\n let code = 0;\n try {\n if (!Object.hasOwn(USAGE, command)) throw new Error(`Unknown eval command: ${command}`);\n const cmd = command as Exclude<Command, 'guide'>;\n // Require the identity selector before authentication or any mutating request.\n if (WRITES.includes(cmd)) required(rest, '--org');\n // --expected is checked by expectedArg: its value may be a bare \"-\".\n for (const flag of VALUE_FLAGS.filter((flag) => flag !== '--expected')) {\n if (rest.includes(flag) && getScalarArgValue(rest, flag) === undefined) throw new Error(`${flag} requires a value.`);\n }\n const positionals = getPositionalArgs(rest, VALUE_FLAGS);\n // Usage errors come before authentication.\n if (positionals.length < (POSITIONALS[cmd] ?? 0)) throw new Error(`Usage: cofactor eval ${USAGE[cmd]}`);\n if (cmd === 'init') {\n await init(rest);\n } else {\n const { apiUrl, token } = await resolveConfig(rest);\n const ctx = { argv: rest, positionals, apiUrl, token, json: hasFlag(rest, '--json') };\n code = (await HANDLERS[cmd](ctx)) ?? 0;\n }\n } catch (error) {\n console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);\n code = 1;\n }\n if (code !== 0) process.exit(code);\n}\n","/**\n * Agent evaluation shared contracts.\n * @module agent-eval-template\n * @see docs/project/conventions.md\n */\nimport { z } from 'zod';\n\nexport const AGENT_EVAL_MAX_BUNDLE_BYTES = 512 * 1024 ** 2;\nexport const AGENT_EVAL_MAX_TOTAL_BUNDLE_BYTES = 2 * 1024 ** 3;\n\nconst ModelSchema = z.strictObject({\n provider: z.enum(['anthropic', 'azure']),\n model: z.string().min(1),\n});\n\n// Upper case like sandbox secret names; EVAL_* is the attempt's own contract and would be overwritten.\nconst EnvName = z\n .string()\n .regex(/^[A-Z_][A-Z0-9_]*$/, 'Must be an upper-case environment variable name')\n .refine((name) => !name.startsWith('EVAL_'), 'EVAL_ names are reserved for the attempt environment');\n/**\n * Where an agent reads its model configuration: the env var names the attempt sets for one provider. An entry\n * replaces all of that provider's standard names (spec D8; azure's two key and two URL names become one each) and is\n * needed only when the agent reads other names.\n */\nconst ProviderEnvSchema = z.strictObject({\n env: z\n .strictObject({\n apiKey: EnvName, // gets the attempt's scoped proxy token\n baseUrl: EnvName, // gets the proxy URL for the provider's wire\n model: EnvName, // gets the model id\n })\n .refine((env) => new Set(Object.values(env)).size === 3, 'apiKey, baseUrl and model must be different names'),\n});\n\nconst ScriptGrader = z.strictObject({\n id: z.string().regex(/^[a-z0-9-]+$/),\n kind: z.literal('script'),\n command: z.string().min(1),\n});\nconst JudgeGrader = z.strictObject({\n id: z.string().regex(/^[a-z0-9-]+$/),\n kind: z.literal('ai-judge'),\n rubric: z.string().min(20),\n scale: z.enum(['binary', '1-5']),\n passAt: z.number().int().min(2).max(5).optional(), // required when scale is '1-5'\n judge: ModelSchema,\n});\n\nexport const AgentEvalTemplateSchema = z\n .strictObject({\n version: z.literal(1),\n name: z\n .string()\n .regex(/^[a-z0-9-]{2,40}$/)\n .refine((n) => n !== 'runs' && n !== 'compare'), // reserved route segments\n description: z.string().min(1).max(500),\n proves: z.strictObject({ capabilities: z.array(z.string().regex(/^CAP-/)).min(1) }), // resolved within the application given at push\n runbook: z.string().min(1), // path relative to this file\n mode: z.enum(['single-turn', 'multi-turn']).default('single-turn'),\n run: z.string().min(1), // shell command, cwd = repo root of the commit; multi-turn: the agent process, JSONL on stdin/stdout\n simulator: ModelSchema.optional(), // required when mode is multi-turn: pins the simulated-user model\n input: z.strictObject({\n description: z.string().min(1),\n require: z.array(z.string()).default([]),\n }),\n agent: z.strictObject({\n models: z\n .record(z.string().regex(/^[a-z0-9-]+$/), ModelSchema)\n .refine((m) => Object.keys(m).length >= 1),\n default: z.string(), // must be a key of models\n providers: z\n .strictObject({ anthropic: ProviderEnvSchema.optional(), azure: ProviderEnvSchema.optional() })\n .optional(), // absent, or an absent entry: the standard names; every entry's provider must be used by a model\n }),\n graders: z.array(z.discriminatedUnion('kind', [ScriptGrader, JudgeGrader])).min(1),\n repeats: z.number().int().min(1).max(7).default(1), // attempts per case; a stochastic agent raises it together with passAtLeast\n passAtLeast: z.number().int().min(1).default(1), // <= repeats\n passBar: z.number().min(0.1).max(1), // minimum case pass rate for the eval to pass\n attemptSeconds: z.number().int().min(30).max(1700), // grader commands get a fixed 120 s\n })\n .superRefine((template, ctx) => {\n if (!Object.hasOwn(template.agent.models, template.agent.default)) {\n ctx.addIssue({\n code: 'custom',\n path: ['agent', 'default'],\n message: 'Default must name an agent model alias',\n });\n }\n const used = new Set<string>(Object.values(template.agent.models).map((m) => m.provider));\n for (const [provider, entry] of Object.entries(template.agent.providers ?? {})) {\n if (entry && !used.has(provider)) {\n ctx.addIssue({\n code: 'custom',\n path: ['agent', 'providers', provider],\n message: `No agent model uses provider ${provider}; remove this entry or add a model that uses it`,\n });\n }\n }\n if (template.passAtLeast > template.repeats) {\n ctx.addIssue({\n code: 'custom',\n path: ['passAtLeast'],\n message: 'passAtLeast must not exceed repeats',\n });\n }\n const ids = new Set<string>();\n template.graders.forEach((grader, index) => {\n if (ids.has(grader.id)) {\n ctx.addIssue({\n code: 'custom',\n path: ['graders', index, 'id'],\n message: 'Grader ids must be unique',\n });\n }\n ids.add(grader.id);\n if (grader.kind === 'ai-judge' && grader.scale === '1-5' && grader.passAt === undefined) {\n ctx.addIssue({\n code: 'custom',\n path: ['graders', index, 'passAt'],\n message: 'A 1-5 judge requires passAt',\n });\n }\n });\n if ((template.mode === 'multi-turn') !== (template.simulator !== undefined)) {\n ctx.addIssue({\n code: 'custom',\n path: ['simulator'],\n message: 'A simulator is required exactly when mode is multi-turn',\n });\n }\n });\nexport type AgentEvalTemplate = z.infer<typeof AgentEvalTemplateSchema>;\n\n/** A multi-turn case's conversation; null on a single-turn case. */\nexport const EvalConversationSchema = z.discriminatedUnion('kind', [\n z.strictObject({ kind: z.literal('scripted'), turns: z.array(z.string().min(1)).min(1) }),\n z.strictObject({\n kind: z.literal('simulated'),\n persona: z.string().min(1),\n goal: z.string().min(1),\n facts: z.array(z.string()),\n stopWhen: z.string().min(1),\n maxTurns: z.number().int().min(2).max(30),\n }),\n]);\nexport type EvalConversation = z.infer<typeof EvalConversationSchema>;\n","/**\n * Case bundles for `cofactor eval add-case`: a deterministic tar of a directory (gzipped for\n * upload), a reader for an existing .tar.gz, and the `input.require` check. The content address\n * `sha256` is the hash of the uncompressed tar, which this file fully specifies, so the same files\n * give the same sha256 on any runtime and identical bundles deduplicate across cases and evals\n * (spec D4, D11). Gzip is transport only: its bytes depend on the runtime's zlib, so they are\n * hashed separately as `gzipSha256` for the upload's integrity check.\n */\nimport { createHash } from 'node:crypto';\nimport { lstat, readdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { gunzipSync, gzipSync } from 'node:zlib';\nimport { AGENT_EVAL_MAX_BUNDLE_BYTES } from '@chatsdet/types/agent-eval-template';\n\nconst BLOCK = 512;\n// Memory guards for this process, not the server's limit (which is on the archive's bytes and is\n// enforced by the API): a directory's raw size, and what an archive may unpack to.\nconst MAX_RAW_BYTES = AGENT_EVAL_MAX_BUNDLE_BYTES;\nconst MAX_UNPACKED_BYTES = 4 * AGENT_EVAL_MAX_BUNDLE_BYTES;\n\n/** `sha256` addresses the uncompressed tar; `archive` is the gzip that gets uploaded, with its own hash and size. */\nexport type BundleSource = {\n sha256: string;\n gzipSha256: string;\n bytes: number;\n archive: Buffer;\n entries: string[];\n};\n\nconst sha256Hex = (data: Buffer): string => createHash('sha256').update(data).digest('hex');\n\nfunction octal(value: number, width: number): string {\n return `${value.toString(8).padStart(width - 1, '0')}\\0`;\n}\n\n/** Split a path into the ustar `prefix` and `name` fields, which hold 155 and 100 bytes. */\nfunction splitName(path: string): { prefix: string; name: string } {\n if (Buffer.byteLength(path) <= 100) return { prefix: '', name: path };\n for (let i = path.indexOf('/'); i !== -1; i = path.indexOf('/', i + 1)) {\n const prefix = path.slice(0, i);\n const name = path.slice(i + 1);\n if (Buffer.byteLength(prefix) <= 155 && Buffer.byteLength(name) <= 100) return { prefix, name };\n }\n throw new Error(`Path is too long for a bundle (limit 255 bytes): ${path}`);\n}\n\nfunction header(path: string, size: number, type: '0' | '5', mode: number): Buffer {\n const { prefix, name } = splitName(path);\n const block = Buffer.alloc(BLOCK);\n block.write(name, 0, 'utf8');\n block.write(octal(mode, 8), 100, 'ascii');\n block.write(octal(0, 8), 108, 'ascii'); // uid\n block.write(octal(0, 8), 116, 'ascii'); // gid\n block.write(octal(size, 12), 124, 'ascii');\n block.write(octal(0, 12), 136, 'ascii'); // fixed mtime\n block.fill(0x20, 148, 156); // checksum placeholder is spaces\n block.write(type, 156, 'ascii');\n block.write('ustar\\0', 257, 'ascii');\n block.write('00', 263, 'ascii');\n // uname and gname stay empty: no owner names in the archive.\n block.write(prefix, 345, 'utf8');\n const checksum = block.reduce((sum, byte) => sum + byte, 0);\n block.write(`${checksum.toString(8).padStart(6, '0')}\\0 `, 148, 'ascii');\n return block;\n}\n\ntype Entry = { path: string; absolute: string; directory: boolean; mode: number; size: number };\n\n/** Entries in byte order of their NFC-normalized names, so macOS (NFD) and Linux file systems agree. */\nasync function walk(root: string, real = '', archive = ''): Promise<Entry[]> {\n const names = (await readdir(real ? join(root, real) : root))\n .map((name) => ({ real: name, archive: name.normalize('NFC') }))\n .sort((a, b) => Buffer.compare(Buffer.from(a.archive), Buffer.from(b.archive)));\n const entries: Entry[] = [];\n for (const name of names) {\n const realPath = real ? `${real}/${name.real}` : name.real;\n const path = archive ? `${archive}/${name.archive}` : name.archive;\n const absolute = join(root, realPath);\n const stats = await lstat(absolute);\n if (stats.isDirectory()) {\n entries.push({ path, absolute, directory: true, mode: 0o755, size: 0 });\n entries.push(...(await walk(root, realPath, path)));\n } else if (stats.isFile()) {\n entries.push({\n path,\n absolute,\n directory: false,\n mode: stats.mode & 0o111 ? 0o755 : 0o644,\n size: stats.size,\n });\n } else {\n throw new Error(\n `Cannot bundle ${path}: only regular files and directories are supported (no symlinks or devices).`\n );\n }\n }\n return entries;\n}\n\n/** Tar a directory deterministically: sorted entries, mtime 0, uid and gid 0, no owner names. */\nexport async function tarDirectory(root: string): Promise<Buffer> {\n const entries = await walk(root);\n const total = entries.reduce((sum, entry) => sum + entry.size, 0);\n if (total > MAX_RAW_BYTES) {\n throw new Error(`The input directory holds ${total} bytes; the CLI bundles at most ${MAX_RAW_BYTES}. Prune it.`);\n }\n const parts: Buffer[] = [];\n for (const entry of entries) {\n if (entry.directory) {\n parts.push(header(`${entry.path}/`, 0, '5', entry.mode));\n continue;\n }\n const content = await readFile(entry.absolute);\n parts.push(header(entry.path, content.length, '0', entry.mode), content);\n const padding = (BLOCK - (content.length % BLOCK)) % BLOCK;\n if (padding) parts.push(Buffer.alloc(padding));\n }\n parts.push(Buffer.alloc(BLOCK * 2));\n return Buffer.concat(parts);\n}\n\nfunction readString(block: Buffer, start: number, length: number): string {\n const slice = block.subarray(start, start + length);\n const end = slice.indexOf(0);\n return slice.subarray(0, end === -1 ? length : end).toString('utf8');\n}\n\nfunction normalize(path: string): string {\n return path.replace(/^(\\.\\/)+/, '').replace(/\\/+$/, '');\n}\n\n/** Entry paths of an uncompressed tar (ustar, GNU long names and pax `path` records). */\nexport function listTarEntries(tar: Buffer): string[] {\n const entries: string[] = [];\n let longName: string | null = null;\n let offset = 0;\n while (offset + BLOCK <= tar.length) {\n const block = tar.subarray(offset, offset + BLOCK);\n if (block.every((byte) => byte === 0)) break;\n const stored = Number.parseInt(readString(block, 148, 8).trim(), 8);\n const actual = block.reduce((sum, byte, i) => sum + (i >= 148 && i < 156 ? 0x20 : byte), 0);\n if (stored !== actual) throw new Error('not a valid tar archive (bad header checksum)');\n const size = Number.parseInt(readString(block, 124, 12).trim() || '0', 8);\n const type = String.fromCharCode(block[156] || 0x30);\n const body = tar.subarray(offset + BLOCK, offset + BLOCK + size);\n offset += BLOCK + Math.ceil(size / BLOCK) * BLOCK;\n if (type === 'L') {\n longName = readString(body, 0, body.length);\n continue;\n }\n if (type === 'x') {\n const record = body.toString('utf8').match(/\\d+ path=([^\\n]*)\\n/);\n if (record?.[1]) longName = record[1];\n continue;\n }\n if (type === 'g') continue;\n const prefix = readString(block, 345, 155);\n if (['1', '2', '3', '4', '6'].includes(type))\n throw new Error(`the archive holds a link or device entry (${readString(block, 0, 100)}); only files and directories are supported`);\n const name = longName ?? (prefix ? `${prefix}/${readString(block, 0, 100)}` : readString(block, 0, 100));\n longName = null;\n entries.push(normalize(name));\n }\n return entries;\n}\n\n/** Load an input (a directory or a .tar.gz) as a bundle, with its entry list, the tar's sha256 and the gzip's size and hash. */\nexport async function loadBundle(input: string): Promise<BundleSource> {\n let stats;\n try {\n stats = await lstat(input);\n } catch {\n throw new Error(`--input ${input} does not exist.`);\n }\n let tar: Buffer;\n if (stats.isDirectory()) {\n tar = await tarDirectory(input);\n } else if (stats.isFile() && /\\.(tar\\.gz|tgz)$/.test(input)) {\n if (stats.size > AGENT_EVAL_MAX_BUNDLE_BYTES)\n throw new Error(`${input} is ${stats.size} bytes; a bundle is limited to ${AGENT_EVAL_MAX_BUNDLE_BYTES}. Prune it.`);\n const gzip = await readFile(input);\n try {\n tar = gunzipSync(gzip, { maxOutputLength: MAX_UNPACKED_BYTES });\n } catch {\n throw new Error(`--input ${input} is not a valid gzip file, or unpacks to more than ${MAX_UNPACKED_BYTES} bytes.`);\n }\n } else {\n throw new Error('--input must be a directory or a .tar.gz file.');\n }\n // Always re-gzipped here, even for a .tar.gz input: the upload is then a single-member gzip from\n // this CLI, whatever the input held. Gzip is transport only; the content address is the tar's hash.\n const archive = gzipSync(tar, { level: 9 });\n let entries: string[];\n try {\n entries = listTarEntries(tar);\n } catch (error) {\n throw new Error(`--input ${input}: ${error instanceof Error ? error.message : String(error)}.`);\n }\n return {\n sha256: sha256Hex(tar),\n gzipSha256: sha256Hex(archive),\n bytes: archive.length,\n archive,\n entries,\n };\n}\n\n/** The `input.require` paths the bundle does not contain (a path may name a file or a directory). */\nexport function missingRequiredPaths(entries: string[], required: string[]): string[] {\n return required.filter((path) => {\n const wanted = normalize(path);\n return !entries.some((entry) => entry === wanted || entry.startsWith(`${wanted}/`));\n });\n}\n","/** `cofactor eval run|get|runs|compare`: start runs, wait for them and print their results. */\nimport { setTimeout as sleep } from 'node:timers/promises';\nimport { renderAgentEvalCompare, renderAgentEvalRun } from '@chatsdet/types/agent-eval-render';\nimport type {\n AgentEvalCompareResult,\n AgentEvalRunResult,\n AgentEvalTranscriptEntry,\n} from '@chatsdet/types/agent-eval-result';\nimport { hasFlag } from './auth.js';\nimport { writeRawOutput } from './brand.js';\nimport { getArgValues, getScalarArgValue } from './cli-helpers.js';\nimport { EVALS, getEval, request, requestTolerant } from './eval-api.js';\n\ntype RunStatus = AgentEvalRunResult['status'];\ntype Verdict = 'pass' | 'fail' | null;\n/** `GET /org/agent-evals/runs/:id`: the run row, its stored result once finished, and its attempts. */\ntype RunDetail = {\n id: string;\n batchId: string;\n status: RunStatus;\n verdict: Verdict;\n error: string | null;\n modelAlias: string;\n result: AgentEvalRunResult | null;\n attempts: {\n attemptIndex: number;\n transcript: AgentEvalTranscriptEntry[] | null;\n stdoutTail: string | null;\n case: { key: string };\n }[];\n};\n/** One item of `GET /org/agent-evals/:name/runs`. */\ntype RunSummary = {\n id: string;\n batchId: string;\n modelAlias: string;\n commitSha: string;\n status: RunStatus;\n verdict: Verdict;\n error: string | null;\n};\n\n/** Tests shorten the interval. */\nexport const pollSettings = { intervalMs: 5000 };\n// The run job has an eight-hour budget; wait a little past it before giving up.\nconst WAIT_MS = 8.5 * 60 * 60 * 1000;\nconst MAX_TRANSIENT_FAILURES = 5;\nconst FINISHED: RunStatus[] = ['completed', 'failed', 'cancelled'];\n\nfunction intFlag(argv: string[], flag: string): number | undefined {\n const value = getScalarArgValue(argv, flag);\n if (value === undefined) return undefined;\n if (!/^\\d+$/.test(value)) throw new Error(`${flag} must be a whole number.`);\n return Number(value);\n}\n\nconst runPath = (id: string, transcript = false) =>\n `${EVALS}/runs/${encodeURIComponent(id)}${transcript ? '?transcript=1' : ''}`;\n\nconst describeRun = (run: RunDetail) =>\n `${run.id} ${run.modelAlias} ${run.status}${run.verdict ? ` ${run.verdict}` : ''}${run.error ? ` ${run.error}` : ''}`;\n\nconst stub = (run: RunDetail) => ({ id: run.id, status: run.status, verdict: run.verdict, error: run.error });\n\n/** 0 when every run passed, 1 for a failed or cancelled run, 3 when a run's verdict is fail. */\nfunction exitCodeFor(runs: { status: RunStatus; verdict: Verdict }[]): number {\n if (runs.some((run) => run.status !== 'completed')) return 1;\n return runs.some((run) => run.verdict !== 'pass') ? 3 : 0;\n}\n\n/**\n * Wait for every run of a batch. One light list request per tick covers the batch; each run's full\n * detail is fetched once when all are finished. Network errors and 5xx replies are tolerated up to\n * five in a row; auth and 4xx errors end the wait at once.\n */\nasync function waitForRuns(\n apiUrl: string,\n token: string,\n evalName: string,\n started: { batchId: string; runIds: string[] }\n): Promise<RunDetail[]> {\n const ids = `batch ${started.batchId}; runs ${started.runIds.join(', ')}`;\n let transient = 0;\n const get = async <T>(path: string): Promise<T | null> => {\n const reply = await requestTolerant<T>(apiUrl, token, path);\n if ('data' in reply) {\n transient = 0;\n return reply.data;\n }\n if (++transient >= MAX_TRANSIENT_FAILURES)\n throw new Error(`Giving up after ${transient} failed polls (${reply.transient}). Still readable: ${ids}.`);\n return null;\n };\n const deadline = Date.now() + WAIT_MS;\n for (;;) {\n if (Date.now() >= deadline)\n throw new Error(`Timed out waiting for the runs. Inspect them with cofactor eval get <run-id>: ${ids}.`);\n const page = await get<{ items: RunSummary[] }>(`${EVALS}/${encodeURIComponent(evalName)}/runs?limit=100`);\n if (page) {\n const statuses = new Map(page.items.map((item) => [item.id, item.status]));\n // A run beyond the first page is looked up directly.\n const known = await Promise.all(\n started.runIds.map(async (id) => statuses.get(id) ?? (await get<RunDetail>(runPath(id)))?.status)\n );\n if (known.every((status) => status !== undefined && FINISHED.includes(status))) break;\n }\n await sleep(pollSettings.intervalMs);\n }\n const details: RunDetail[] = [];\n for (const id of started.runIds) {\n let detail: RunDetail | null = null;\n while (!(detail = await get<RunDetail>(runPath(id)))) await sleep(pollSettings.intervalMs);\n details.push(detail);\n }\n return details;\n}\n\nexport async function runEval(argv: string[], name: string, apiUrl: string, token: string): Promise<number> {\n const json = hasFlag(argv, '--json');\n const models = getArgValues(argv, '--model');\n const cases = getArgValues(argv, '--case');\n const at = getScalarArgValue(argv, '--at');\n const environment = getScalarArgValue(argv, '--environment');\n const repeats = intFlag(argv, '--repeats');\n const parallel = intFlag(argv, '--parallel');\n const evaluation = await getEval(apiUrl, token, name);\n const started = await request<{ batchId: string; runIds: string[] }>(\n apiUrl,\n token,\n 'POST',\n `${EVALS}/${encodeURIComponent(evaluation.id)}/runs`,\n {\n ...(models.length ? { models } : {}),\n ...(environment ? { environment } : {}),\n ...(at ? { at } : {}),\n ...(cases.length ? { cases } : {}),\n ...(repeats !== undefined ? { repeats } : {}),\n ...(parallel !== undefined ? { parallel } : {}),\n }\n );\n if (hasFlag(argv, '--no-wait')) {\n writeRawOutput(\n json\n ? JSON.stringify(started, null, 2)\n : `Started batch ${started.batchId}\\n${started.runIds.join('\\n')}\\nRead results with: cofactor eval get <run-id> | cofactor eval compare --batch ${started.batchId}`\n );\n return 0;\n }\n // Printed before waiting so an interrupted or failed wait still leaves the ids to read results with.\n console.error(\n `Started batch ${started.batchId}; runs ${started.runIds.join(', ')}. If this is interrupted, read results with cofactor eval get <run-id> or cofactor eval compare --batch ${started.batchId}.`\n );\n const details = await waitForRuns(apiUrl, token, name, started);\n const results = details.flatMap((run) => (run.result ? [run.result] : []));\n if (json) {\n writeRawOutput(JSON.stringify(details.map((run) => run.result ?? stub(run)), null, 2));\n } else {\n const compare =\n details.length > 1 && results.length === details.length\n ? await request<AgentEvalCompareResult>(apiUrl, token, 'GET', `${EVALS}/compare?batch=${encodeURIComponent(started.batchId)}`)\n : null;\n if (results.length)\n writeRawOutput(\n [...results.map(renderAgentEvalRun), ...(compare ? [renderAgentEvalCompare(compare)] : [])].join('\\n').trimEnd()\n );\n for (const run of details.filter((run) => !run.result || run.status !== 'completed')) console.error(describeRun(run));\n }\n return exitCodeFor(details);\n}\n\nexport async function getRun(argv: string[], target: string, apiUrl: string, token: string): Promise<void> {\n const json = hasFlag(argv, '--json');\n const caseKey = getScalarArgValue(argv, '--case');\n const transcript = hasFlag(argv, '--transcript');\n const stdout = hasFlag(argv, '--stdout');\n if (stdout && !caseKey) throw new Error('--stdout needs --case <key>: each attempt carries up to 16 KiB of stdout, so the CLI prints one case at a time.');\n if (transcript && !caseKey) throw new Error('--transcript needs --case <key>: transcripts are large, so the CLI prints one case at a time.');\n const run = await request<RunDetail>(apiUrl, token, 'GET', runPath(target, transcript));\n if (!run.result) {\n writeRawOutput(json ? JSON.stringify(stub(run), null, 2) : describeRun(run));\n return;\n }\n const result: AgentEvalRunResult = {\n ...run.result,\n cases: run.result.cases\n .filter((c) => caseKey === undefined || c.key === caseKey)\n .map((c) => ({\n ...c,\n attempts: c.attempts.map((attempt) => ({\n ...attempt,\n transcript: transcript\n ? (run.attempts.find((a) => a.case.key === c.key && a.attemptIndex === attempt.index)?.transcript ?? attempt.transcript)\n : attempt.transcript,\n ...(stdout\n ? { stdoutTail: run.attempts.find((a) => a.case.key === c.key && a.attemptIndex === attempt.index)?.stdoutTail }\n : {}),\n })),\n })),\n };\n if (caseKey && result.cases.length === 0) throw new Error(`Run ${target} has no case \"${caseKey}\".`);\n if (json) {\n writeRawOutput(JSON.stringify(result, null, 2));\n return;\n }\n const lines = [renderAgentEvalRun(result).trimEnd()];\n if (transcript) {\n for (const attempt of result.cases.flatMap((c) => c.attempts)) {\n lines.push('', `Transcript, attempt ${attempt.index}:`);\n lines.push(\n ...(attempt.transcript?.length\n ? attempt.transcript.map((entry) => `${entry.role}: ${entry.text}`)\n : ['(none: this eval is not multi-turn, or the attempt did not run)'])\n );\n }\n }\n writeRawOutput(lines.join('\\n'));\n}\n\nexport async function listRuns(argv: string[], name: string, apiUrl: string, token: string): Promise<void> {\n const limit = intFlag(argv, '--limit');\n const page = await request<{ items: RunSummary[]; nextCursor: string | null }>(\n apiUrl,\n token,\n 'GET',\n `${EVALS}/${encodeURIComponent(name)}/runs${limit !== undefined ? `?limit=${limit}` : ''}`\n );\n writeRawOutput(\n hasFlag(argv, '--json')\n ? JSON.stringify(page, null, 2)\n : page.items\n .map((run) => `${run.id} ${run.modelAlias} ${run.status} ${run.verdict ?? '-'} ${run.commitSha.slice(0, 7)} batch ${run.batchId}`)\n .join('\\n') || 'No runs found.'\n );\n}\n\nexport async function compareRuns(argv: string[], ids: string[], apiUrl: string, token: string): Promise<void> {\n const batch = getScalarArgValue(argv, '--batch');\n if (Boolean(batch) === (ids.length > 0)) throw new Error('Use either one or more run ids or --batch <id>.');\n const query = batch ? `batch=${encodeURIComponent(batch)}` : `runs=${ids.map(encodeURIComponent).join(',')}`;\n const comparison = await request<AgentEvalCompareResult>(apiUrl, token, 'GET', `${EVALS}/compare?${query}`);\n writeRawOutput(\n hasFlag(argv, '--json') ? JSON.stringify(comparison.runs, null, 2) : renderAgentEvalCompare(comparison).trimEnd()\n );\n}\n","/** Pure markdown rendering shared by CLI and tests. Tokens per task are averaged here from server-provided case means. */\nimport type {\n AgentEvalCaseResult,\n AgentEvalCompareResult,\n AgentEvalRunResult,\n AgentEvalTokens,\n} from './agent-eval-result.js';\n\nconst cell = (value: string) => value.replaceAll('|', '\\\\|').replace(/\\r?\\n/g, ' ');\nconst percent = (value: number) => `${Math.round(value * 100)}%`;\nconst money = (cents: number | null, incomplete = false) =>\n cents === null ? 'unpriced' : `$${(cents / 100).toFixed(2)}${incomplete ? '*' : ''}`;\nconst minutes = (ms: number) => (ms / 60_000).toFixed(1);\nconst tokenCount = (n: number) =>\n n >= 1000 ? `${(n / 1000).toFixed(n >= 100_000 ? 0 : 1)}k` : `${Math.round(n)}`;\nconst tokenPair = (tokens: AgentEvalTokens) =>\n `${tokenCount(tokens.input)} / ${tokenCount(tokens.output)}`;\n/** Mean tokens per task, averaged from the server's per-case means; shared by the CLI markdown and the run page. */\nexport const meanTaskTokens = (result: AgentEvalRunResult): AgentEvalTokens => {\n const cases = result.cases;\n const mean = (key: keyof AgentEvalTokens) =>\n cases.length ? cases.reduce((n, c) => n + c.tokensPerAttempt[key], 0) / cases.length : 0;\n return {\n input: mean('input'),\n output: mean('output'),\n cacheRead: mean('cacheRead'),\n cacheCreation: mean('cacheCreation'),\n };\n};\nconst verdict = (r: AgentEvalRunResult) => (r.verdict ?? r.status).toUpperCase();\n\nexport function renderAgentEvalRun(result: AgentEvalRunResult): string {\n const s = result.summary;\n const taskTokens = meanTaskTokens(result);\n const warning = result.warnings.length\n ? ` [WARNING: ${result.warnings.map(cell).join('; ')}]`\n : '';\n // userSim is non-null exactly for a multi-turn eval (D16); single-turn output stays unchanged.\n const multiTurn = s.userSim !== null;\n const turnsToSuccess = (c: AgentEvalCaseResult) => {\n const passing = c.attempts.flatMap((a) => (a.passed && a.turns !== null ? [a.turns] : []));\n return passing.length ? (passing.reduce((n, t) => n + t, 0) / passing.length).toFixed(1) : '-';\n };\n const lines = [\n `## Eval ${cell(result.eval)}: ${verdict(result)} (${s.casesPassed}/${s.cases} cases, bar ${percent(result.passBar)}) — ${cell(result.model.alias)} (${cell(result.model.id)}) @ ${result.commit.slice(0, 7)}, ${result.repeats} repeats${warning}`,\n '',\n `| Case | Result | Attempts | Score | ${multiTurn ? 'Turns | ' : ''}Cost/attempt | Time/attempt | Tokens in/out |`,\n `|---|---|---|---|${multiTurn ? '---|' : ''}---|---|---|`,\n ...result.cases.map(\n (c) =>\n `| ${cell(c.key)}${c.version === undefined ? '' : ` (v${c.version})`} | ${c.passed ? 'PASS' : 'FAIL'} | ${c.passedAttempts}/${c.attempts.length} | ${c.meanScore.toFixed(1)} | ${multiTurn ? `${turnsToSuccess(c)} | ` : ''}${money(\n c.costCentsPerAttempt,\n c.attempts.some((a) => !a.costComplete)\n )} | ${minutes(c.durationMsPerAttempt)} min | ${tokenPair(c.tokensPerAttempt)} |`\n ),\n '',\n `Per task: ${money(s.costCentsPerTask, s.incompleteCalls > 0)} | ${minutes(s.durationMsPerTask)} min | ${tokenCount(taskTokens.input)} in / ${tokenCount(taskTokens.output)} out. Total: ${money(s.costCents, s.incompleteCalls > 0)} for ${s.attempts} attempts, ${Math.round(result.cases.flatMap((c) => c.attempts).reduce((n, a) => n + a.durationMs, 0) / 60_000)} min of agent time.`,\n ];\n const judges = [\n ...new Set(\n result.cases\n .flatMap((c) => c.attempts.flatMap((a) => a.grades))\n .filter((g) => g.kind === 'ai-judge')\n .map((g) => g.judgeModel)\n ),\n ];\n lines.push(\n `Judge (${judges.length ? judges.map((m) => cell(m ?? 'unknown')).join(', ') : 'none'}, pinned): ${s.judge.calls} calls, ${money(s.judge.costCents)}, not included above.`\n );\n if (s.userSim) {\n const models = [\n ...new Set(\n result.cases.flatMap((c) =>\n c.attempts.flatMap((a) => a.calls.filter((call) => call.role === 'user-sim').map((call) => call.model))\n )\n ),\n ];\n lines.push(\n `User-sim (${models.length ? models.map(cell).join(', ') : 'none'}, pinned): ${s.userSim.calls} calls, ${money(s.userSim.costCents)}, not included above.`\n );\n }\n const failures = result.cases.flatMap((c) =>\n c.attempts.flatMap((a) => [\n ...a.grades\n .filter((g) => !g.pass)\n .map((g) => `${cell(c.key)} #${a.index}: ${cell(g.grader)}: ${cell(g.reason)}`),\n ...(a.error && !a.grades.some((g) => !g.pass && (g.reason === a.error || g.error === a.error))\n ? [`${cell(c.key)} #${a.index}: ${cell(a.error)}`]\n : []),\n ])\n );\n lines.push(`Failed grades: ${failures.length ? failures.join('; ') : 'none'}.`);\n if (result.error) lines.push(`Error: ${cell(result.error)}.`);\n if (s.incompleteCalls) lines.push('* Cost is a lower bound because agent calls were incomplete.');\n lines.push(\n `Warnings: ${result.warnings.length ? result.warnings.map(cell).join('; ') : 'none'}. Run: ${result.id}.`\n );\n return `${lines.join('\\n')}\\n`;\n}\n\nexport function renderAgentEvalCompare(result: AgentEvalCompareResult): string {\n const lines = [\n `## Eval compare: ${cell(result.eval)} @ ${result.commit.slice(0, 7)}${result.batchId ? ` (batch ${result.batchId})` : ''}`,\n '',\n '| Model | Verdict | Pass rate | Mean score | Cost/task | Time/task | Tokens/task in/out |',\n '|---|---|---|---|---|---|---|',\n ...result.runs.map(\n (r) =>\n `| ${cell(r.model.alias)} (${cell(r.model.id)}) | ${verdict(r)} | ${percent(r.summary.passRate)} | ${r.summary.meanScore.toFixed(1)} | ${money(r.summary.costCentsPerTask, r.summary.incompleteCalls > 0)} | ${minutes(r.summary.durationMsPerTask)} min | ${tokenPair(meanTaskTokens(r))} |`\n ),\n '',\n `| Case | ${result.runs.map((r) => cell(r.model.alias)).join(' | ')} |`,\n `|---|${result.runs.map(() => '---|').join('')}`,\n ...result.cases.map(\n (c) =>\n `| ${cell(c.key)} | ${c.models\n .map(\n ({ result: r }) =>\n `${r.passedAttempts}/${r.attempts.length} ${r.passed ? 'PASS' : 'FAIL'} ${money(\n r.costCentsPerAttempt,\n r.attempts.some((a) => !a.costComplete)\n )} ${minutes(r.durationMsPerAttempt)}m`\n )\n .join(' | ')} |`\n ),\n ];\n for (const r of result.runs)\n if (r.warnings.length)\n lines.push(`Warnings (${cell(r.model.alias)}): ${r.warnings.map(cell).join('; ')}.`);\n if (result.runs.some((r) => r.summary.incompleteCalls > 0))\n lines.push('* Cost is a lower bound because agent calls were incomplete.');\n return `${lines.join('\\n')}\\n`;\n}\n","/** Authoring side of `cofactor eval`: the `init` files and the local checks `push` runs. */\nimport { readFile } from 'node:fs/promises';\nimport { dirname, isAbsolute, relative, resolve, sep } from 'node:path';\nimport { parse } from 'yaml';\nimport type { ZodError } from 'zod';\nimport {\n AgentEvalTemplateSchema,\n type AgentEvalTemplate,\n} from '@chatsdet/types/agent-eval-template';\n\n/** `eval init` writes this line first in every runbook section; `eval push` refuses a runbook that still has one. */\nexport const RUNBOOK_TODO_MARKER = '<!-- cofactor:todo -->';\n\n/** The fixed runbook headings, in order, each with the prompt `eval init` writes under it. */\nexport const RUNBOOK_SECTIONS: readonly { heading: string; prompt: string }[] = [\n {\n heading: 'What this eval proves',\n prompt: \"Describe the agent's job in one paragraph and the capabilities it backs.\",\n },\n {\n heading: 'Anatomy of a case',\n prompt:\n 'List the files in $EVAL_INPUT, what the expected value holds, and what a good case teaches.',\n },\n {\n heading: 'Finding real data',\n prompt:\n 'Say where in production the inputs live: exact cofactor commands, queries and ids, and how to pick varied cases.',\n },\n {\n heading: 'Labeling',\n prompt:\n 'Say how the expected value is decided and what must corroborate it; never the agent\\'s own output alone.',\n },\n {\n heading: 'Sanitizing',\n prompt:\n 'Say what to strip or replace before upload, the check to run, and the neutral names to use (Acme, example.com).',\n },\n {\n heading: 'Synthesizing scenarios',\n prompt:\n 'Say how to make a case when no real one exists (mutate a frozen input) and how to mark it synthetic in --source.',\n },\n {\n heading: 'Adding the case',\n prompt: 'Give the exact eval add-case command shape for this eval.',\n },\n { heading: 'Known traps', prompt: 'Record what has gone wrong before.' },\n];\n\n/** Headings whose section must not be empty: real data and sanitizing are what keep customer data out of cases. */\nconst REQUIRED_SECTIONS = ['Finding real data', 'Sanitizing'];\n\nexport const EVAL_GITIGNORE = '*.tar.gz\\n_staging/\\n';\n\nexport function initRunbook(name: string): string {\n return [\n `# ${name} runbook`,\n '',\n ...RUNBOOK_SECTIONS.flatMap(({ heading, prompt }) => [`## ${heading}`, '', RUNBOOK_TODO_MARKER, `<!-- ${prompt} -->`, '']),\n ].join('\\n');\n}\n\nexport function initTemplate(opts: {\n name: string;\n application?: string;\n capability?: string;\n}): string {\n const capability = opts.capability ?? 'CAP-REPLACE-ME';\n const application = opts.application ?? '<application>';\n return `# Agent eval: ${opts.name}\n# Push it with:\n# cofactor eval push evals/${opts.name}.eval.yaml --application ${application} --org <org>\n# Add cases with:\n# cofactor eval add-case ${opts.name} --key <key> --input <dir> --expected <file> --source \"<provenance>\" --org <org>\n# Run it with:\n# cofactor eval run ${opts.name} --org <org>\nversion: 1\nname: ${opts.name}\ndescription: Replace with one sentence on what this agent must get right.\n\n# Capabilities in the application's product map that this eval proves (CAP- codes).\nproves:\n capabilities:\n - ${capability}\n\n# Runbook for whoever adds cases; path relative to this file. Stored with the eval.\nrunbook: ${opts.name}.runbook.md\n\n# single-turn: \\`run\\` is executed once per attempt. multi-turn: \\`run\\` is the agent process,\n# speaking JSONL on stdin/stdout, and a \\`simulator\\` model is required (cases then need a conversation).\nmode: single-turn\n\n# Shell command run at the repository root of the evaluated commit. It reads its case from\n# $EVAL_INPUT and writes its answer to $EVAL_OUTPUT/answer.* (answer.json, answer.txt, ...).\n# Model calls go to the injected base URL (agent.providers below); never use a real key.\nrun: ./scripts/run-agent.sh\n\ninput:\n description: What the files in a case's input directory contain.\n # Paths every case bundle must contain (files or directories); checked before upload.\n require:\n - input.json\n\nagent:\n models:\n # alias: provider (anthropic | azure) and model id. Aliases are what --model takes.\n sonnet:\n provider: anthropic\n model: claude-sonnet-4-6\n default: sonnet\n # Each attempt sets the selected provider's key (a proxy token), base URL (the metering proxy) and\n # model id, under these standard names unless an entry below maps them:\n # anthropic: ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN, ANTHROPIC_BASE_URL, ANTHROPIC_MODEL\n # azure: OPENAI_API_KEY, AZURE_OPENAI_API_KEY, OPENAI_BASE_URL, AZURE_OPENAI_BASE_URL, OPENAI_MODEL\n # Only if the agent reads other names (upper case, never EVAL_*; an entry replaces all of that provider's\n # standard names), copy them from where its code builds the model client, e.g.\n # createAnthropic({ apiKey: process.env.AGENT_CLAUDE_KEY, baseURL: process.env.AGENT_CLAUDE_URL }):\n # providers:\n # anthropic:\n # env: { apiKey: AGENT_CLAUDE_KEY, baseUrl: AGENT_CLAUDE_URL, model: AGENT_CLAUDE_MODEL }\n\ngraders:\n # A script grader runs after the agent exits with EVAL_INPUT, EVAL_OUTPUT and EVAL_EXPECTED\n # (the case's expected value as a JSON file). Its last stdout line is\n # {\"pass\": true, \"score\": 1, \"reason\": \"why\"}. Anything else is a grader error.\n - id: answer-matches-expected\n kind: script\n command: ./scripts/grade-answer.sh\n\n # An ai-judge scores a rubric against the answer and the case's expected value.\n # The judge model is pinned. scale is binary or 1-5; a 1-5 scale requires passAt.\n - id: answer-quality\n kind: ai-judge\n rubric: The answer states the same root cause as the expected value and cites evidence from the input.\n scale: 1-5\n passAt: 4\n judge:\n provider: anthropic\n model: claude-opus-4-8\n\n# Each case runs \\`repeats\\` times (1 to 7) and passes when at least \\`passAtLeast\\` attempts pass.\n# One attempt, which must pass, is the default; for a stochastic agent raise repeats and passAtLeast together.\nrepeats: 1\npassAtLeast: 1\n\n# The eval passes when this share of cases pass.\npassBar: 0.5\n\n# Time limit per attempt, in seconds (30 to 1700).\nattemptSeconds: 600\n`;\n}\n\n/** Zod issues as one readable line each: `graders.1.passAt: A 1-5 judge requires passAt`. */\nexport function formatIssues(error: ZodError): string[] {\n return error.issues.map((issue) => {\n const path = issue.path.map(String).join('.');\n return `${path || '(template)'}: ${issue.message}`;\n });\n}\n\nexport class TemplateError extends Error {\n constructor(heading: string, lines: string[]) {\n super(`${heading}\\n${lines.map((line) => ` ${line}`).join('\\n')}`);\n }\n}\n\nexport type PushPayload = {\n definition: AgentEvalTemplate;\n runbook: string;\n warnings: string[];\n};\n\nfunction sectionBodies(runbook: string): Map<string, string> {\n const sections = new Map<string, string>();\n let current: string | null = null;\n for (const line of runbook.split(/\\r?\\n/)) {\n const heading = line.match(/^##\\s+(.+?)\\s*$/);\n if (heading) {\n current = heading[1]!;\n sections.set(current, '');\n } else if (current !== null) {\n sections.set(current, `${sections.get(current)}${line}\\n`);\n }\n }\n return sections;\n}\n\n/** Missing headings are warnings; an empty required section or a section still holding the todo marker is an error. */\nexport function checkRunbook(runbook: string): { errors: string[]; warnings: string[] } {\n const sections = sectionBodies(runbook);\n const errors: string[] = [];\n const warnings: string[] = [];\n const todo = [...sections].filter(([, body]) => body.split('\\n').some((line) => line.trim() === RUNBOOK_TODO_MARKER));\n if (todo.length) {\n errors.push(\n `Runbook still has ${RUNBOOK_TODO_MARKER} in: ${todo.map(([heading]) => `\"## ${heading}\"`).join(', ')}. Write each section, then delete its marker line.`\n );\n }\n for (const { heading } of RUNBOOK_SECTIONS) {\n const body = sections.get(heading);\n const empty = body === undefined || body.replace(/<!--[\\s\\S]*?-->/g, '').trim() === '';\n if (body === undefined) warnings.push(`Runbook has no \"## ${heading}\" section.`);\n if (REQUIRED_SECTIONS.includes(heading) && empty) {\n errors.push(`Runbook section \"## ${heading}\" is empty; write it before pushing.`);\n }\n }\n return { errors, warnings };\n}\n\n/** Parse and validate a template file and read its runbook, relative to the YAML. */\nexport async function readPushPayload(file: string): Promise<PushPayload> {\n let source: string;\n try {\n source = await readFile(file, 'utf8');\n } catch {\n throw new Error(`Cannot read ${file}.`);\n }\n let raw: unknown;\n try {\n raw = parse(source);\n } catch (error) {\n throw new Error(`${file} is not valid YAML: ${error instanceof Error ? error.message : String(error)}`);\n }\n const parsed = AgentEvalTemplateSchema.safeParse(raw);\n if (!parsed.success) throw new TemplateError(`${file} is not a valid eval template:`, formatIssues(parsed.error));\n const runbookPath = resolve(dirname(file), parsed.data.runbook);\n const inside = relative(dirname(resolve(file)), runbookPath);\n if (isAbsolute(parsed.data.runbook) || inside === '..' || inside.startsWith(`..${sep}`) || isAbsolute(inside))\n throw new Error(`The template's runbook (${parsed.data.runbook}) must be a path inside the template's directory.`);\n let runbook: string;\n try {\n runbook = await readFile(runbookPath, 'utf8');\n } catch {\n throw new Error(`Cannot read the runbook ${runbookPath} (the template's runbook: ${parsed.data.runbook}).`);\n }\n const { errors, warnings } = checkRunbook(runbook);\n if (errors.length) throw new TemplateError(`${runbookPath} cannot be pushed:`, errors);\n return { definition: parsed.data, runbook, warnings };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,OAAO,YAAAA,WAAU,WAAAC,UAAS,iBAAiB;AACpD,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,QAAAC,aAAY;;;ACErB,SAAS,SAAS;AAEX,IAAM,8BAA8B,MAAM,QAAQ;AAClD,IAAM,oCAAoC,IAAI,QAAQ;AAE7D,IAAM,cAAc,EAAE,aAAa;AAAA,EACjC,UAAU,EAAE,KAAK,CAAC,aAAa,OAAO,CAAC;AAAA,EACvC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AACzB,CAAC;AAGD,IAAM,UAAU,EACb,OAAO,EACP,MAAM,sBAAsB,iDAAiD,EAC7E,OAAO,CAAC,SAAS,CAAC,KAAK,WAAW,OAAO,GAAG,sDAAsD;AAMrG,IAAM,oBAAoB,EAAE,aAAa;AAAA,EACvC,KAAK,EACF,aAAa;AAAA,IACZ,QAAQ;AAAA;AAAA,IACR,SAAS;AAAA;AAAA,IACT,OAAO;AAAA;AAAA,EACT,CAAC,EACA,OAAO,CAAC,QAAQ,IAAI,IAAI,OAAO,OAAO,GAAG,CAAC,EAAE,SAAS,GAAG,mDAAmD;AAChH,CAAC;AAED,IAAM,eAAe,EAAE,aAAa;AAAA,EAClC,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc;AAAA,EACnC,MAAM,EAAE,QAAQ,QAAQ;AAAA,EACxB,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAC3B,CAAC;AACD,IAAM,cAAc,EAAE,aAAa;AAAA,EACjC,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc;AAAA,EACnC,MAAM,EAAE,QAAQ,UAAU;AAAA,EAC1B,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;AAAA,EACzB,OAAO,EAAE,KAAK,CAAC,UAAU,KAAK,CAAC;AAAA,EAC/B,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA;AAAA,EAChD,OAAO;AACT,CAAC;AAEM,IAAM,0BAA0B,EACpC,aAAa;AAAA,EACZ,SAAS,EAAE,QAAQ,CAAC;AAAA,EACpB,MAAM,EACH,OAAO,EACP,MAAM,mBAAmB,EACzB,OAAO,CAAC,MAAM,MAAM,UAAU,MAAM,SAAS;AAAA;AAAA,EAChD,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACtC,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;AAAA;AAAA,EAClF,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA;AAAA,EACzB,MAAM,EAAE,KAAK,CAAC,eAAe,YAAY,CAAC,EAAE,QAAQ,aAAa;AAAA,EACjE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA;AAAA,EACrB,WAAW,YAAY,SAAS;AAAA;AAAA,EAChC,OAAO,EAAE,aAAa;AAAA,IACpB,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC7B,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC;AAAA,EACD,OAAO,EAAE,aAAa;AAAA,IACpB,QAAQ,EACL,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,GAAG,WAAW,EACpD,OAAO,CAAC,MAAM,OAAO,KAAK,CAAC,EAAE,UAAU,CAAC;AAAA,IAC3C,SAAS,EAAE,OAAO;AAAA;AAAA,IAClB,WAAW,EACR,aAAa,EAAE,WAAW,kBAAkB,SAAS,GAAG,OAAO,kBAAkB,SAAS,EAAE,CAAC,EAC7F,SAAS;AAAA;AAAA,EACd,CAAC;AAAA,EACD,SAAS,EAAE,MAAM,EAAE,mBAAmB,QAAQ,CAAC,cAAc,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC;AAAA,EACjF,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA;AAAA,EACjD,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA;AAAA,EAC9C,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC;AAAA;AAAA,EAClC,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI;AAAA;AACnD,CAAC,EACA,YAAY,CAAC,UAAU,QAAQ;AAC9B,MAAI,CAAC,OAAO,OAAO,SAAS,MAAM,QAAQ,SAAS,MAAM,OAAO,GAAG;AACjE,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,SAAS,SAAS;AAAA,MACzB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,QAAM,OAAO,IAAI,IAAY,OAAO,OAAO,SAAS,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;AACxF,aAAW,CAAC,UAAU,KAAK,KAAK,OAAO,QAAQ,SAAS,MAAM,aAAa,CAAC,CAAC,GAAG;AAC9E,QAAI,SAAS,CAAC,KAAK,IAAI,QAAQ,GAAG;AAChC,UAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN,MAAM,CAAC,SAAS,aAAa,QAAQ;AAAA,QACrC,SAAS,gCAAgC,QAAQ;AAAA,MACnD,CAAC;AAAA,IACH;AAAA,EACF;AACA,MAAI,SAAS,cAAc,SAAS,SAAS;AAC3C,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,aAAa;AAAA,MACpB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,QAAM,MAAM,oBAAI,IAAY;AAC5B,WAAS,QAAQ,QAAQ,CAAC,QAAQ,UAAU;AAC1C,QAAI,IAAI,IAAI,OAAO,EAAE,GAAG;AACtB,UAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN,MAAM,CAAC,WAAW,OAAO,IAAI;AAAA,QAC7B,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AACA,QAAI,IAAI,OAAO,EAAE;AACjB,QAAI,OAAO,SAAS,cAAc,OAAO,UAAU,SAAS,OAAO,WAAW,QAAW;AACvF,UAAI,SAAS;AAAA,QACX,MAAM;AAAA,QACN,MAAM,CAAC,WAAW,OAAO,QAAQ;AAAA,QACjC,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACD,MAAK,SAAS,SAAS,kBAAmB,SAAS,cAAc,SAAY;AAC3E,QAAI,SAAS;AAAA,MACX,MAAM;AAAA,MACN,MAAM,CAAC,WAAW;AAAA,MAClB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,CAAC;AAII,IAAM,yBAAyB,EAAE,mBAAmB,QAAQ;AAAA,EACjE,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,UAAU,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;AAAA,EACxF,EAAE,aAAa;AAAA,IACb,MAAM,EAAE,QAAQ,WAAW;AAAA,IAC3B,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACzB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IACtB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IACzB,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC1B,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EAC1C,CAAC;AACH,CAAC;;;ACzID,SAAS,kBAAkB;AAC3B,SAAS,OAAO,SAAS,gBAAgB;AACzC,SAAS,YAAY;AACrB,SAAS,YAAY,gBAAgB;AAGrC,IAAM,QAAQ;AAGd,IAAM,gBAAgB;AACtB,IAAM,qBAAqB,IAAI;AAW/B,IAAM,YAAY,CAAC,SAAyB,WAAW,QAAQ,EAAE,OAAO,IAAI,EAAE,OAAO,KAAK;AAE1F,SAAS,MAAM,OAAe,OAAuB;AACnD,SAAO,GAAG,MAAM,SAAS,CAAC,EAAE,SAAS,QAAQ,GAAG,GAAG,CAAC;AACtD;AAGA,SAAS,UAAU,MAAgD;AACjE,MAAI,OAAO,WAAW,IAAI,KAAK,IAAK,QAAO,EAAE,QAAQ,IAAI,MAAM,KAAK;AACpE,WAAS,IAAI,KAAK,QAAQ,GAAG,GAAG,MAAM,IAAI,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,GAAG;AACtE,UAAM,SAAS,KAAK,MAAM,GAAG,CAAC;AAC9B,UAAM,OAAO,KAAK,MAAM,IAAI,CAAC;AAC7B,QAAI,OAAO,WAAW,MAAM,KAAK,OAAO,OAAO,WAAW,IAAI,KAAK,IAAK,QAAO,EAAE,QAAQ,KAAK;AAAA,EAChG;AACA,QAAM,IAAI,MAAM,oDAAoD,IAAI,EAAE;AAC5E;AAEA,SAAS,OAAO,MAAc,MAAc,MAAiB,MAAsB;AACjF,QAAM,EAAE,QAAQ,KAAK,IAAI,UAAU,IAAI;AACvC,QAAM,QAAQ,OAAO,MAAM,KAAK;AAChC,QAAM,MAAM,MAAM,GAAG,MAAM;AAC3B,QAAM,MAAM,MAAM,MAAM,CAAC,GAAG,KAAK,OAAO;AACxC,QAAM,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,OAAO;AACrC,QAAM,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,OAAO;AACrC,QAAM,MAAM,MAAM,MAAM,EAAE,GAAG,KAAK,OAAO;AACzC,QAAM,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,OAAO;AACtC,QAAM,KAAK,IAAM,KAAK,GAAG;AACzB,QAAM,MAAM,MAAM,KAAK,OAAO;AAC9B,QAAM,MAAM,WAAW,KAAK,OAAO;AACnC,QAAM,MAAM,MAAM,KAAK,OAAO;AAE9B,QAAM,MAAM,QAAQ,KAAK,MAAM;AAC/B,QAAM,WAAW,MAAM,OAAO,CAAC,KAAK,SAAS,MAAM,MAAM,CAAC;AAC1D,QAAM,MAAM,GAAG,SAAS,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,KAAK,OAAO;AACvE,SAAO;AACT;AAKA,eAAe,KAAK,MAAc,OAAO,IAAI,UAAU,IAAsB;AAC3E,QAAM,SAAS,MAAM,QAAQ,OAAO,KAAK,MAAM,IAAI,IAAI,IAAI,GACxD,IAAI,CAAC,UAAU,EAAE,MAAM,MAAM,SAAS,KAAK,UAAU,KAAK,EAAE,EAAE,EAC9D,KAAK,CAAC,GAAG,MAAM,OAAO,QAAQ,OAAO,KAAK,EAAE,OAAO,GAAG,OAAO,KAAK,EAAE,OAAO,CAAC,CAAC;AAChF,QAAM,UAAmB,CAAC;AAC1B,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,KAAK,KAAK;AACtD,UAAM,OAAO,UAAU,GAAG,OAAO,IAAI,KAAK,OAAO,KAAK,KAAK;AAC3D,UAAM,WAAW,KAAK,MAAM,QAAQ;AACpC,UAAM,QAAQ,MAAM,MAAM,QAAQ;AAClC,QAAI,MAAM,YAAY,GAAG;AACvB,cAAQ,KAAK,EAAE,MAAM,UAAU,WAAW,MAAM,MAAM,KAAO,MAAM,EAAE,CAAC;AACtE,cAAQ,KAAK,GAAI,MAAM,KAAK,MAAM,UAAU,IAAI,CAAE;AAAA,IACpD,WAAW,MAAM,OAAO,GAAG;AACzB,cAAQ,KAAK;AAAA,QACX;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,MAAM,MAAM,OAAO,KAAQ,MAAQ;AAAA,QACnC,MAAM,MAAM;AAAA,MACd,CAAC;AAAA,IACH,OAAO;AACL,YAAM,IAAI;AAAA,QACR,iBAAiB,IAAI;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGA,eAAsB,aAAa,MAA+B;AAChE,QAAM,UAAU,MAAM,KAAK,IAAI;AAC/B,QAAM,QAAQ,QAAQ,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,MAAM,CAAC;AAChE,MAAI,QAAQ,eAAe;AACzB,UAAM,IAAI,MAAM,6BAA6B,KAAK,mCAAmC,aAAa,aAAa;AAAA,EACjH;AACA,QAAM,QAAkB,CAAC;AACzB,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,WAAW;AACnB,YAAM,KAAK,OAAO,GAAG,MAAM,IAAI,KAAK,GAAG,KAAK,MAAM,IAAI,CAAC;AACvD;AAAA,IACF;AACA,UAAM,UAAU,MAAM,SAAS,MAAM,QAAQ;AAC7C,UAAM,KAAK,OAAO,MAAM,MAAM,QAAQ,QAAQ,KAAK,MAAM,IAAI,GAAG,OAAO;AACvE,UAAM,WAAW,QAAS,QAAQ,SAAS,SAAU;AACrD,QAAI,QAAS,OAAM,KAAK,OAAO,MAAM,OAAO,CAAC;AAAA,EAC/C;AACA,QAAM,KAAK,OAAO,MAAM,QAAQ,CAAC,CAAC;AAClC,SAAO,OAAO,OAAO,KAAK;AAC5B;AAEA,SAAS,WAAW,OAAe,OAAe,QAAwB;AACxE,QAAM,QAAQ,MAAM,SAAS,OAAO,QAAQ,MAAM;AAClD,QAAM,MAAM,MAAM,QAAQ,CAAC;AAC3B,SAAO,MAAM,SAAS,GAAG,QAAQ,KAAK,SAAS,GAAG,EAAE,SAAS,MAAM;AACrE;AAEA,SAAS,UAAU,MAAsB;AACvC,SAAO,KAAK,QAAQ,YAAY,EAAE,EAAE,QAAQ,QAAQ,EAAE;AACxD;AAGO,SAAS,eAAe,KAAuB;AACpD,QAAM,UAAoB,CAAC;AAC3B,MAAI,WAA0B;AAC9B,MAAI,SAAS;AACb,SAAO,SAAS,SAAS,IAAI,QAAQ;AACnC,UAAM,QAAQ,IAAI,SAAS,QAAQ,SAAS,KAAK;AACjD,QAAI,MAAM,MAAM,CAAC,SAAS,SAAS,CAAC,EAAG;AACvC,UAAM,SAAS,OAAO,SAAS,WAAW,OAAO,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC;AAClE,UAAM,SAAS,MAAM,OAAO,CAAC,KAAK,MAAM,MAAM,OAAO,KAAK,OAAO,IAAI,MAAM,KAAO,OAAO,CAAC;AAC1F,QAAI,WAAW,OAAQ,OAAM,IAAI,MAAM,+CAA+C;AACtF,UAAM,OAAO,OAAO,SAAS,WAAW,OAAO,KAAK,EAAE,EAAE,KAAK,KAAK,KAAK,CAAC;AACxE,UAAM,OAAO,OAAO,aAAa,MAAM,GAAG,KAAK,EAAI;AACnD,UAAM,OAAO,IAAI,SAAS,SAAS,OAAO,SAAS,QAAQ,IAAI;AAC/D,cAAU,QAAQ,KAAK,KAAK,OAAO,KAAK,IAAI;AAC5C,QAAI,SAAS,KAAK;AAChB,iBAAW,WAAW,MAAM,GAAG,KAAK,MAAM;AAC1C;AAAA,IACF;AACA,QAAI,SAAS,KAAK;AAChB,YAAM,SAAS,KAAK,SAAS,MAAM,EAAE,MAAM,qBAAqB;AAChE,UAAI,SAAS,CAAC,EAAG,YAAW,OAAO,CAAC;AACpC;AAAA,IACF;AACA,QAAI,SAAS,IAAK;AAClB,UAAM,SAAS,WAAW,OAAO,KAAK,GAAG;AACzC,QAAI,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,EAAE,SAAS,IAAI;AACzC,YAAM,IAAI,MAAM,6CAA6C,WAAW,OAAO,GAAG,GAAG,CAAC,6CAA6C;AACrI,UAAM,OAAO,aAAa,SAAS,GAAG,MAAM,IAAI,WAAW,OAAO,GAAG,GAAG,CAAC,KAAK,WAAW,OAAO,GAAG,GAAG;AACtG,eAAW;AACX,YAAQ,KAAK,UAAU,IAAI,CAAC;AAAA,EAC9B;AACA,SAAO;AACT;AAGA,eAAsB,WAAW,OAAsC;AACrE,MAAI;AACJ,MAAI;AACF,YAAQ,MAAM,MAAM,KAAK;AAAA,EAC3B,QAAQ;AACN,UAAM,IAAI,MAAM,WAAW,KAAK,kBAAkB;AAAA,EACpD;AACA,MAAI;AACJ,MAAI,MAAM,YAAY,GAAG;AACvB,UAAM,MAAM,aAAa,KAAK;AAAA,EAChC,WAAW,MAAM,OAAO,KAAK,mBAAmB,KAAK,KAAK,GAAG;AAC3D,QAAI,MAAM,OAAO;AACf,YAAM,IAAI,MAAM,GAAG,KAAK,OAAO,MAAM,IAAI,kCAAkC,2BAA2B,aAAa;AACrH,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,QAAI;AACF,YAAM,WAAW,MAAM,EAAE,iBAAiB,mBAAmB,CAAC;AAAA,IAChE,QAAQ;AACN,YAAM,IAAI,MAAM,WAAW,KAAK,sDAAsD,kBAAkB,SAAS;AAAA,IACnH;AAAA,EACF,OAAO;AACL,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAGA,QAAM,UAAU,SAAS,KAAK,EAAE,OAAO,EAAE,CAAC;AAC1C,MAAI;AACJ,MAAI;AACF,cAAU,eAAe,GAAG;AAAA,EAC9B,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,WAAW,KAAK,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,GAAG;AAAA,EAChG;AACA,SAAO;AAAA,IACL,QAAQ,UAAU,GAAG;AAAA,IACrB,YAAY,UAAU,OAAO;AAAA,IAC7B,OAAO,QAAQ;AAAA,IACf;AAAA,IACA;AAAA,EACF;AACF;AAGO,SAAS,qBAAqB,SAAmBC,WAA8B;AACpF,SAAOA,UAAS,OAAO,CAAC,SAAS;AAC/B,UAAM,SAAS,UAAU,IAAI;AAC7B,WAAO,CAAC,QAAQ,KAAK,CAAC,UAAU,UAAU,UAAU,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC;AAAA,EACpF,CAAC;AACH;;;ACpNA,SAAS,cAAc,aAAa;;;ACOpC,IAAM,OAAO,CAAC,UAAkB,MAAM,WAAW,KAAK,KAAK,EAAE,QAAQ,UAAU,GAAG;AAClF,IAAM,UAAU,CAAC,UAAkB,GAAG,KAAK,MAAM,QAAQ,GAAG,CAAC;AAC7D,IAAM,QAAQ,CAAC,OAAsB,aAAa,UAChD,UAAU,OAAO,aAAa,KAAK,QAAQ,KAAK,QAAQ,CAAC,CAAC,GAAG,aAAa,MAAM,EAAE;AACpF,IAAM,UAAU,CAAC,QAAgB,KAAK,KAAQ,QAAQ,CAAC;AACvD,IAAM,aAAa,CAAC,MAClB,KAAK,MAAO,IAAI,IAAI,KAAM,QAAQ,KAAK,MAAU,IAAI,CAAC,CAAC,MAAM,GAAG,KAAK,MAAM,CAAC,CAAC;AAC/E,IAAM,YAAY,CAAC,WACjB,GAAG,WAAW,OAAO,KAAK,CAAC,MAAM,WAAW,OAAO,MAAM,CAAC;AAErD,IAAM,iBAAiB,CAAC,WAAgD;AAC7E,QAAM,QAAQ,OAAO;AACrB,QAAM,OAAO,CAAC,QACZ,MAAM,SAAS,MAAM,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,iBAAiB,GAAG,GAAG,CAAC,IAAI,MAAM,SAAS;AACzF,SAAO;AAAA,IACL,OAAO,KAAK,OAAO;AAAA,IACnB,QAAQ,KAAK,QAAQ;AAAA,IACrB,WAAW,KAAK,WAAW;AAAA,IAC3B,eAAe,KAAK,eAAe;AAAA,EACrC;AACF;AACA,IAAM,UAAU,CAAC,OAA2B,EAAE,WAAW,EAAE,QAAQ,YAAY;AAExE,SAAS,mBAAmB,QAAoC;AACrE,QAAM,IAAI,OAAO;AACjB,QAAM,aAAa,eAAe,MAAM;AACxC,QAAM,UAAU,OAAO,SAAS,SAC5B,cAAc,OAAO,SAAS,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,MAClD;AAEJ,QAAM,YAAY,EAAE,YAAY;AAChC,QAAM,iBAAiB,CAAC,MAA2B;AACjD,UAAM,UAAU,EAAE,SAAS,QAAQ,CAAC,MAAO,EAAE,UAAU,EAAE,UAAU,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,CAAE;AACzF,WAAO,QAAQ,UAAU,QAAQ,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,QAAQ,QAAQ,QAAQ,CAAC,IAAI;AAAA,EAC7F;AACA,QAAM,QAAQ;AAAA,IACZ,WAAW,KAAK,OAAO,IAAI,CAAC,KAAK,QAAQ,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,KAAK,eAAe,QAAQ,OAAO,OAAO,CAAC,YAAO,KAAK,OAAO,MAAM,KAAK,CAAC,KAAK,KAAK,OAAO,MAAM,EAAE,CAAC,OAAO,OAAO,OAAO,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,OAAO,WAAW,OAAO;AAAA,IACjP;AAAA,IACA,wCAAwC,YAAY,aAAa,EAAE;AAAA,IACnE,oBAAoB,YAAY,SAAS,EAAE;AAAA,IAC3C,GAAG,OAAO,MAAM;AAAA,MACd,CAAC,MACC,KAAK,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,YAAY,SAAY,KAAK,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,SAAS,SAAS,MAAM,MAAM,EAAE,cAAc,IAAI,EAAE,SAAS,MAAM,MAAM,EAAE,UAAU,QAAQ,CAAC,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,QAAQ,EAAE,GAAG;AAAA,QAC5N,EAAE;AAAA,QACF,EAAE,SAAS,KAAK,CAAC,MAAM,CAAC,EAAE,YAAY;AAAA,MACxC,CAAC,MAAM,QAAQ,EAAE,oBAAoB,CAAC,UAAU,UAAU,EAAE,gBAAgB,CAAC;AAAA,IACjF;AAAA,IACA;AAAA,IACA,aAAa,MAAM,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,MAAM,QAAQ,EAAE,iBAAiB,CAAC,UAAU,WAAW,WAAW,KAAK,CAAC,SAAS,WAAW,WAAW,MAAM,CAAC,gBAAgB,MAAM,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC,QAAQ,EAAE,QAAQ,cAAc,KAAK,MAAM,OAAO,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,YAAY,CAAC,IAAI,GAAM,CAAC;AAAA,EACxW;AACA,QAAM,SAAS;AAAA,IACb,GAAG,IAAI;AAAA,MACL,OAAO,MACJ,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,EAClD,OAAO,CAAC,MAAM,EAAE,SAAS,UAAU,EACnC,IAAI,CAAC,MAAM,EAAE,UAAU;AAAA,IAC5B;AAAA,EACF;AACA,QAAM;AAAA,IACJ,UAAU,OAAO,SAAS,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,IAAI,MAAM,cAAc,EAAE,MAAM,KAAK,WAAW,MAAM,EAAE,MAAM,SAAS,CAAC;AAAA,EACrJ;AACA,MAAI,EAAE,SAAS;AACb,UAAM,SAAS;AAAA,MACb,GAAG,IAAI;AAAA,QACL,OAAO,MAAM;AAAA,UAAQ,CAAC,MACpB,EAAE,SAAS,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,KAAK,SAAS,UAAU,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AAAA,QACxG;AAAA,MACF;AAAA,IACF;AACA,UAAM;AAAA,MACJ,aAAa,OAAO,SAAS,OAAO,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,MAAM,cAAc,EAAE,QAAQ,KAAK,WAAW,MAAM,EAAE,QAAQ,SAAS,CAAC;AAAA,IACrI;AAAA,EACF;AACA,QAAM,WAAW,OAAO,MAAM;AAAA,IAAQ,CAAC,MACrC,EAAE,SAAS,QAAQ,CAAC,MAAM;AAAA,MACxB,GAAG,EAAE,OACF,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EACrB,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,EAAE,MAAM,CAAC,EAAE;AAAA,MAChF,GAAI,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IACzF,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,CAAC,EAAE,IAC/C,CAAC;AAAA,IACP,CAAC;AAAA,EACH;AACA,QAAM,KAAK,kBAAkB,SAAS,SAAS,SAAS,KAAK,IAAI,IAAI,MAAM,GAAG;AAC9E,MAAI,OAAO,MAAO,OAAM,KAAK,UAAU,KAAK,OAAO,KAAK,CAAC,GAAG;AAC5D,MAAI,EAAE,gBAAiB,OAAM,KAAK,8DAA8D;AAChG,QAAM;AAAA,IACJ,aAAa,OAAO,SAAS,SAAS,OAAO,SAAS,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,MAAM,UAAU,OAAO,EAAE;AAAA,EACxG;AACA,SAAO,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA;AAC5B;AAEO,SAAS,uBAAuB,QAAwC;AAC7E,QAAM,QAAQ;AAAA,IACZ,oBAAoB,KAAK,OAAO,IAAI,CAAC,MAAM,OAAO,OAAO,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,UAAU,WAAW,OAAO,OAAO,MAAM,EAAE;AAAA,IACzH;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,OAAO,KAAK;AAAA,MACb,CAAC,MACC,KAAK,KAAK,EAAE,MAAM,KAAK,CAAC,KAAK,KAAK,EAAE,MAAM,EAAE,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,QAAQ,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,QAAQ,UAAU,QAAQ,CAAC,CAAC,MAAM,MAAM,EAAE,QAAQ,kBAAkB,EAAE,QAAQ,kBAAkB,CAAC,CAAC,MAAM,QAAQ,EAAE,QAAQ,iBAAiB,CAAC,UAAU,UAAU,eAAe,CAAC,CAAC,CAAC;AAAA,IAC7R;AAAA,IACA;AAAA,IACA,YAAY,OAAO,KAAK,IAAI,CAAC,MAAM,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC;AAAA,IACnE,QAAQ,OAAO,KAAK,IAAI,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC;AAAA,IAC9C,GAAG,OAAO,MAAM;AAAA,MACd,CAAC,MACC,KAAK,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OACrB;AAAA,QACC,CAAC,EAAE,QAAQ,EAAE,MACX,GAAG,EAAE,cAAc,IAAI,EAAE,SAAS,MAAM,IAAI,EAAE,SAAS,SAAS,MAAM,IAAI;AAAA,UACxE,EAAE;AAAA,UACF,EAAE,SAAS,KAAK,CAAC,MAAM,CAAC,EAAE,YAAY;AAAA,QACxC,CAAC,IAAI,QAAQ,EAAE,oBAAoB,CAAC;AAAA,MACxC,EACC,KAAK,KAAK,CAAC;AAAA,IAClB;AAAA,EACF;AACA,aAAW,KAAK,OAAO;AACrB,QAAI,EAAE,SAAS;AACb,YAAM,KAAK,aAAa,KAAK,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,GAAG;AACvF,MAAI,OAAO,KAAK,KAAK,CAAC,MAAM,EAAE,QAAQ,kBAAkB,CAAC;AACvD,UAAM,KAAK,8DAA8D;AAC3E,SAAO,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA;AAC5B;;;ADzFO,IAAM,eAAe,EAAE,YAAY,IAAK;AAE/C,IAAM,UAAU,MAAM,KAAK,KAAK;AAChC,IAAM,yBAAyB;AAC/B,IAAM,WAAwB,CAAC,aAAa,UAAU,WAAW;AAEjE,SAAS,QAAQ,MAAgB,MAAkC;AACjE,QAAM,QAAQ,kBAAkB,MAAM,IAAI;AAC1C,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,CAAC,QAAQ,KAAK,KAAK,EAAG,OAAM,IAAI,MAAM,GAAG,IAAI,0BAA0B;AAC3E,SAAO,OAAO,KAAK;AACrB;AAEA,IAAM,UAAU,CAAC,IAAY,aAAa,UACxC,GAAG,KAAK,SAAS,mBAAmB,EAAE,CAAC,GAAG,aAAa,kBAAkB,EAAE;AAE7E,IAAM,cAAc,CAAC,QACnB,GAAG,IAAI,EAAE,KAAK,IAAI,UAAU,KAAK,IAAI,MAAM,GAAG,IAAI,UAAU,KAAK,IAAI,OAAO,KAAK,EAAE,GAAG,IAAI,QAAQ,KAAK,IAAI,KAAK,KAAK,EAAE;AAEzH,IAAM,OAAO,CAAC,SAAoB,EAAE,IAAI,IAAI,IAAI,QAAQ,IAAI,QAAQ,SAAS,IAAI,SAAS,OAAO,IAAI,MAAM;AAG3G,SAAS,YAAY,MAAyD;AAC5E,MAAI,KAAK,KAAK,CAAC,QAAQ,IAAI,WAAW,WAAW,EAAG,QAAO;AAC3D,SAAO,KAAK,KAAK,CAAC,QAAQ,IAAI,YAAY,MAAM,IAAI,IAAI;AAC1D;AAOA,eAAe,YACb,QACA,OACA,UACA,SACsB;AACtB,QAAM,MAAM,SAAS,QAAQ,OAAO,UAAU,QAAQ,OAAO,KAAK,IAAI,CAAC;AACvE,MAAI,YAAY;AAChB,QAAM,MAAM,OAAU,SAAoC;AACxD,UAAM,QAAQ,MAAM,gBAAmB,QAAQ,OAAO,IAAI;AAC1D,QAAI,UAAU,OAAO;AACnB,kBAAY;AACZ,aAAO,MAAM;AAAA,IACf;AACA,QAAI,EAAE,aAAa;AACjB,YAAM,IAAI,MAAM,mBAAmB,SAAS,kBAAkB,MAAM,SAAS,sBAAsB,GAAG,GAAG;AAC3G,WAAO;AAAA,EACT;AACA,QAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,aAAS;AACP,QAAI,KAAK,IAAI,KAAK;AAChB,YAAM,IAAI,MAAM,iFAAiF,GAAG,GAAG;AACzG,UAAM,OAAO,MAAM,IAA6B,GAAG,KAAK,IAAI,mBAAmB,QAAQ,CAAC,iBAAiB;AACzG,QAAI,MAAM;AACR,YAAM,WAAW,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,MAAM,CAAC,CAAC;AAEzE,YAAM,QAAQ,MAAM,QAAQ;AAAA,QAC1B,QAAQ,OAAO,IAAI,OAAO,OAAO,SAAS,IAAI,EAAE,MAAM,MAAM,IAAe,QAAQ,EAAE,CAAC,IAAI,MAAM;AAAA,MAClG;AACA,UAAI,MAAM,MAAM,CAAC,WAAW,WAAW,UAAa,SAAS,SAAS,MAAM,CAAC,EAAG;AAAA,IAClF;AACA,UAAM,MAAM,aAAa,UAAU;AAAA,EACrC;AACA,QAAM,UAAuB,CAAC;AAC9B,aAAW,MAAM,QAAQ,QAAQ;AAC/B,QAAI,SAA2B;AAC/B,WAAO,EAAE,SAAS,MAAM,IAAe,QAAQ,EAAE,CAAC,GAAI,OAAM,MAAM,aAAa,UAAU;AACzF,YAAQ,KAAK,MAAM;AAAA,EACrB;AACA,SAAO;AACT;AAEA,eAAsB,QAAQ,MAAgB,MAAc,QAAgB,OAAgC;AAC1G,QAAM,OAAO,QAAQ,MAAM,QAAQ;AACnC,QAAM,SAAS,aAAa,MAAM,SAAS;AAC3C,QAAM,QAAQ,aAAa,MAAM,QAAQ;AACzC,QAAM,KAAK,kBAAkB,MAAM,MAAM;AACzC,QAAM,cAAc,kBAAkB,MAAM,eAAe;AAC3D,QAAM,UAAU,QAAQ,MAAM,WAAW;AACzC,QAAM,WAAW,QAAQ,MAAM,YAAY;AAC3C,QAAM,aAAa,MAAM,QAAQ,QAAQ,OAAO,IAAI;AACpD,QAAM,UAAU,MAAM;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,KAAK,IAAI,mBAAmB,WAAW,EAAE,CAAC;AAAA,IAC7C;AAAA,MACE,GAAI,OAAO,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAClC,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,MACrC,GAAI,KAAK,EAAE,GAAG,IAAI,CAAC;AAAA,MACnB,GAAI,MAAM,SAAS,EAAE,MAAM,IAAI,CAAC;AAAA,MAChC,GAAI,YAAY,SAAY,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC3C,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,IAC/C;AAAA,EACF;AACA,MAAI,QAAQ,MAAM,WAAW,GAAG;AAC9B;AAAA,MACE,OACI,KAAK,UAAU,SAAS,MAAM,CAAC,IAC/B,iBAAiB,QAAQ,OAAO;AAAA,EAAK,QAAQ,OAAO,KAAK,IAAI,CAAC;AAAA,kFAAqF,QAAQ,OAAO;AAAA,IACxK;AACA,WAAO;AAAA,EACT;AAEA,UAAQ;AAAA,IACN,iBAAiB,QAAQ,OAAO,UAAU,QAAQ,OAAO,KAAK,IAAI,CAAC,2GAA2G,QAAQ,OAAO;AAAA,EAC/L;AACA,QAAM,UAAU,MAAM,YAAY,QAAQ,OAAO,MAAM,OAAO;AAC9D,QAAM,UAAU,QAAQ,QAAQ,CAAC,QAAS,IAAI,SAAS,CAAC,IAAI,MAAM,IAAI,CAAC,CAAE;AACzE,MAAI,MAAM;AACR,mBAAe,KAAK,UAAU,QAAQ,IAAI,CAAC,QAAQ,IAAI,UAAU,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,EACvF,OAAO;AACL,UAAM,UACJ,QAAQ,SAAS,KAAK,QAAQ,WAAW,QAAQ,SAC7C,MAAM,QAAgC,QAAQ,OAAO,OAAO,GAAG,KAAK,kBAAkB,mBAAmB,QAAQ,OAAO,CAAC,EAAE,IAC3H;AACN,QAAI,QAAQ;AACV;AAAA,QACE,CAAC,GAAG,QAAQ,IAAI,kBAAkB,GAAG,GAAI,UAAU,CAAC,uBAAuB,OAAO,CAAC,IAAI,CAAC,CAAE,EAAE,KAAK,IAAI,EAAE,QAAQ;AAAA,MACjH;AACF,eAAW,OAAO,QAAQ,OAAO,CAACC,SAAQ,CAACA,KAAI,UAAUA,KAAI,WAAW,WAAW,EAAG,SAAQ,MAAM,YAAY,GAAG,CAAC;AAAA,EACtH;AACA,SAAO,YAAY,OAAO;AAC5B;AAEA,eAAsB,OAAO,MAAgBC,SAAgB,QAAgB,OAA8B;AACzG,QAAM,OAAO,QAAQ,MAAM,QAAQ;AACnC,QAAM,UAAU,kBAAkB,MAAM,QAAQ;AAChD,QAAM,aAAa,QAAQ,MAAM,cAAc;AAC/C,QAAM,SAAS,QAAQ,MAAM,UAAU;AACvC,MAAI,UAAU,CAAC,QAAS,OAAM,IAAI,MAAM,iHAAiH;AACzJ,MAAI,cAAc,CAAC,QAAS,OAAM,IAAI,MAAM,+FAA+F;AAC3I,QAAM,MAAM,MAAM,QAAmB,QAAQ,OAAO,OAAO,QAAQA,SAAQ,UAAU,CAAC;AACtF,MAAI,CAAC,IAAI,QAAQ;AACf,mBAAe,OAAO,KAAK,UAAU,KAAK,GAAG,GAAG,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC;AAC3E;AAAA,EACF;AACA,QAAM,SAA6B;AAAA,IACjC,GAAG,IAAI;AAAA,IACP,OAAO,IAAI,OAAO,MACf,OAAO,CAAC,MAAM,YAAY,UAAa,EAAE,QAAQ,OAAO,EACxD,IAAI,CAAC,OAAO;AAAA,MACX,GAAG;AAAA,MACH,UAAU,EAAE,SAAS,IAAI,CAAC,aAAa;AAAA,QACrC,GAAG;AAAA,QACH,YAAY,aACP,IAAI,SAAS,KAAK,CAAC,MAAM,EAAE,KAAK,QAAQ,EAAE,OAAO,EAAE,iBAAiB,QAAQ,KAAK,GAAG,cAAc,QAAQ,aAC3G,QAAQ;AAAA,QACZ,GAAI,SACA,EAAE,YAAY,IAAI,SAAS,KAAK,CAAC,MAAM,EAAE,KAAK,QAAQ,EAAE,OAAO,EAAE,iBAAiB,QAAQ,KAAK,GAAG,WAAW,IAC7G,CAAC;AAAA,MACP,EAAE;AAAA,IACJ,EAAE;AAAA,EACN;AACA,MAAI,WAAW,OAAO,MAAM,WAAW,EAAG,OAAM,IAAI,MAAM,OAAOA,OAAM,iBAAiB,OAAO,IAAI;AACnG,MAAI,MAAM;AACR,mBAAe,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC9C;AAAA,EACF;AACA,QAAM,QAAQ,CAAC,mBAAmB,MAAM,EAAE,QAAQ,CAAC;AACnD,MAAI,YAAY;AACd,eAAW,WAAW,OAAO,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG;AAC7D,YAAM,KAAK,IAAI,uBAAuB,QAAQ,KAAK,GAAG;AACtD,YAAM;AAAA,QACJ,GAAI,QAAQ,YAAY,SACpB,QAAQ,WAAW,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,KAAK,MAAM,IAAI,EAAE,IAChE,CAAC,iEAAiE;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AACA,iBAAe,MAAM,KAAK,IAAI,CAAC;AACjC;AAEA,eAAsB,SAAS,MAAgB,MAAc,QAAgB,OAA8B;AACzG,QAAM,QAAQ,QAAQ,MAAM,SAAS;AACrC,QAAM,OAAO,MAAM;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,KAAK,IAAI,mBAAmB,IAAI,CAAC,QAAQ,UAAU,SAAY,UAAU,KAAK,KAAK,EAAE;AAAA,EAC1F;AACA;AAAA,IACE,QAAQ,MAAM,QAAQ,IAClB,KAAK,UAAU,MAAM,MAAM,CAAC,IAC5B,KAAK,MACF,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,IAAI,UAAU,KAAK,IAAI,MAAM,KAAK,IAAI,WAAW,GAAG,KAAK,IAAI,UAAU,MAAM,GAAG,CAAC,CAAC,WAAW,IAAI,OAAO,EAAE,EACrI,KAAK,IAAI,KAAK;AAAA,EACvB;AACF;AAEA,eAAsB,YAAY,MAAgB,KAAe,QAAgB,OAA8B;AAC7G,QAAM,QAAQ,kBAAkB,MAAM,SAAS;AAC/C,MAAI,QAAQ,KAAK,MAAO,IAAI,SAAS,EAAI,OAAM,IAAI,MAAM,iDAAiD;AAC1G,QAAM,QAAQ,QAAQ,SAAS,mBAAmB,KAAK,CAAC,KAAK,QAAQ,IAAI,IAAI,kBAAkB,EAAE,KAAK,GAAG,CAAC;AAC1G,QAAM,aAAa,MAAM,QAAgC,QAAQ,OAAO,OAAO,GAAG,KAAK,YAAY,KAAK,EAAE;AAC1G;AAAA,IACE,QAAQ,MAAM,QAAQ,IAAI,KAAK,UAAU,WAAW,MAAM,MAAM,CAAC,IAAI,uBAAuB,UAAU,EAAE,QAAQ;AAAA,EAClH;AACF;;;AElPA,SAAS,YAAAC,iBAAgB;AACzB,SAAS,SAAS,YAAY,UAAU,SAAS,WAAW;AAC5D,SAAS,aAAa;AAQf,IAAM,sBAAsB;AAG5B,IAAM,mBAAmE;AAAA,EAC9E;AAAA,IACE,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,QACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,QACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,QACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,QACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,QACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,EAAE,SAAS,eAAe,QAAQ,qCAAqC;AACzE;AAGA,IAAM,oBAAoB,CAAC,qBAAqB,YAAY;AAErD,IAAM,iBAAiB;AAEvB,SAAS,YAAY,MAAsB;AAChD,SAAO;AAAA,IACL,KAAK,IAAI;AAAA,IACT;AAAA,IACA,GAAG,iBAAiB,QAAQ,CAAC,EAAE,SAAS,OAAO,MAAM,CAAC,MAAM,OAAO,IAAI,IAAI,qBAAqB,QAAQ,MAAM,QAAQ,EAAE,CAAC;AAAA,EAC3H,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,aAAa,MAIlB;AACT,QAAM,aAAa,KAAK,cAAc;AACtC,QAAM,cAAc,KAAK,eAAe;AACxC,SAAO,iBAAiB,KAAK,IAAI;AAAA;AAAA,+BAEJ,KAAK,IAAI,4BAA4B,WAAW;AAAA;AAAA,6BAElD,KAAK,IAAI;AAAA;AAAA,wBAEd,KAAK,IAAI;AAAA;AAAA,QAEzB,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMT,UAAU;AAAA;AAAA;AAAA,WAGP,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiEpB;AAGO,SAAS,aAAa,OAA2B;AACtD,SAAO,MAAM,OAAO,IAAI,CAAC,UAAU;AACjC,UAAM,OAAO,MAAM,KAAK,IAAI,MAAM,EAAE,KAAK,GAAG;AAC5C,WAAO,GAAG,QAAQ,YAAY,KAAK,MAAM,OAAO;AAAA,EAClD,CAAC;AACH;AAEO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACvC,YAAY,SAAiB,OAAiB;AAC5C,UAAM,GAAG,OAAO;AAAA,EAAK,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE;AAAA,EACpE;AACF;AAQA,SAAS,cAAc,SAAsC;AAC3D,QAAM,WAAW,oBAAI,IAAoB;AACzC,MAAI,UAAyB;AAC7B,aAAW,QAAQ,QAAQ,MAAM,OAAO,GAAG;AACzC,UAAM,UAAU,KAAK,MAAM,iBAAiB;AAC5C,QAAI,SAAS;AACX,gBAAU,QAAQ,CAAC;AACnB,eAAS,IAAI,SAAS,EAAE;AAAA,IAC1B,WAAW,YAAY,MAAM;AAC3B,eAAS,IAAI,SAAS,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,IAAI;AAAA,CAAI;AAAA,IAC3D;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,aAAa,SAA2D;AACtF,QAAM,WAAW,cAAc,OAAO;AACtC,QAAM,SAAmB,CAAC;AAC1B,QAAM,WAAqB,CAAC;AAC5B,QAAM,OAAO,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,MAAM,KAAK,MAAM,IAAI,EAAE,KAAK,CAAC,SAAS,KAAK,KAAK,MAAM,mBAAmB,CAAC;AACpH,MAAI,KAAK,QAAQ;AACf,WAAO;AAAA,MACL,qBAAqB,mBAAmB,QAAQ,KAAK,IAAI,CAAC,CAAC,OAAO,MAAM,OAAO,OAAO,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,IACvG;AAAA,EACF;AACA,aAAW,EAAE,QAAQ,KAAK,kBAAkB;AAC1C,UAAM,OAAO,SAAS,IAAI,OAAO;AACjC,UAAM,QAAQ,SAAS,UAAa,KAAK,QAAQ,oBAAoB,EAAE,EAAE,KAAK,MAAM;AACpF,QAAI,SAAS,OAAW,UAAS,KAAK,sBAAsB,OAAO,YAAY;AAC/E,QAAI,kBAAkB,SAAS,OAAO,KAAK,OAAO;AAChD,aAAO,KAAK,uBAAuB,OAAO,sCAAsC;AAAA,IAClF;AAAA,EACF;AACA,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAGA,eAAsB,gBAAgB,MAAoC;AACxE,MAAI;AACJ,MAAI;AACF,aAAS,MAAMC,UAAS,MAAM,MAAM;AAAA,EACtC,QAAQ;AACN,UAAM,IAAI,MAAM,eAAe,IAAI,GAAG;AAAA,EACxC;AACA,MAAI;AACJ,MAAI;AACF,UAAM,MAAM,MAAM;AAAA,EACpB,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,GAAG,IAAI,uBAAuB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,EACxG;AACA,QAAM,SAAS,wBAAwB,UAAU,GAAG;AACpD,MAAI,CAAC,OAAO,QAAS,OAAM,IAAI,cAAc,GAAG,IAAI,kCAAkC,aAAa,OAAO,KAAK,CAAC;AAChH,QAAM,cAAc,QAAQ,QAAQ,IAAI,GAAG,OAAO,KAAK,OAAO;AAC9D,QAAM,SAAS,SAAS,QAAQ,QAAQ,IAAI,CAAC,GAAG,WAAW;AAC3D,MAAI,WAAW,OAAO,KAAK,OAAO,KAAK,WAAW,QAAQ,OAAO,WAAW,KAAK,GAAG,EAAE,KAAK,WAAW,MAAM;AAC1G,UAAM,IAAI,MAAM,2BAA2B,OAAO,KAAK,OAAO,mDAAmD;AACnH,MAAI;AACJ,MAAI;AACF,cAAU,MAAMA,UAAS,aAAa,MAAM;AAAA,EAC9C,QAAQ;AACN,UAAM,IAAI,MAAM,2BAA2B,WAAW,6BAA6B,OAAO,KAAK,OAAO,IAAI;AAAA,EAC5G;AACA,QAAM,EAAE,QAAQ,SAAS,IAAI,aAAa,OAAO;AACjD,MAAI,OAAO,OAAQ,OAAM,IAAI,cAAc,GAAG,WAAW,sBAAsB,MAAM;AACrF,SAAO,EAAE,YAAY,OAAO,MAAM,SAAS,SAAS;AACtD;;;ALtNA,IAAM,QAAQ;AAAA,EACZ,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,WAAW;AAAA,EACX,YACE;AAAA,EACF,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,SAAS;AACX;AAGA,IAAM,cAAc;AAAA,EAClB,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,cAAgD;AAAA,EACpD,MAAM;AAAA,EAAG,SAAS;AAAA,EAAG,OAAO;AAAA,EAAG,MAAM;AAAA,EAAG,WAAW;AAAA,EAAG,YAAY;AAAA,EAAG,KAAK;AAAA,EAAG,KAAK;AAAA,EAAG,MAAM;AAC7F;AACA,IAAM,SAAoB,CAAC,QAAQ,YAAY,WAAW,KAAK;AAC/D,IAAM,uBAAuB;AAE7B,SAAS,UAAU,SAAmC;AACpD,QAAM,QAAQ,OAAO,OAAO,OAAO,WAAW,EAAE,IAAI,MAAM,OAAkB,IAAI;AAChF,UAAQ;AAAA,IACN;AAAA,MACE,wBAAwB,SAAS,eAAe;AAAA,MAChD;AAAA,MACA,GAAG,OAAO,OAAO,KAAK,EAAE,IAAI,CAAC,SAAS,mBAAmB,IAAI,EAAE;AAAA,MAC/D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAEA,SAAS,SAAS,MAAgB,MAAsB;AACtD,QAAM,QAAQ,kBAAkB,MAAM,IAAI;AAC1C,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,GAAG,IAAI,eAAe;AAClD,SAAO;AACT;AAGA,SAAS,YAAY,MAAwB;AAC3C,QAAM,IAAI,KAAK,UAAU,CAAC,QAAQ,QAAQ,gBAAgB,IAAI,WAAW,aAAa,CAAC;AACvF,QAAM,QAAQ,IAAI,IAAI,SAAY,KAAK,CAAC,EAAG,WAAW,aAAa,IAAI,KAAK,CAAC,EAAG,MAAM,cAAc,MAAM,IAAI,KAAK,IAAI,CAAC;AACxH,MAAI,CAAC,SAAS,MAAM,WAAW,IAAI,EAAG,OAAM,IAAI,MAAM,sDAAsD;AAC5G,SAAO;AACT;AAEA,eAAe,SAAS,MAAc,OAAiC;AACrE,MAAI;AACJ,MAAI;AACF,WAAO,SAAS,MAAM,MAAM,UAAU,IAAI,MAAMC,UAAS,MAAM,MAAM;AAAA,EACvE,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,eAAe,KAAK,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,EACnG;AACA,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,GAAG,KAAK,uBAAuB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,EACzG;AACF;AAKA,SAAS,OAAO,KAAc,SAA0B;AACtD,QAAM,QAAQ,IAAI,YAAY,CAAC;AAC/B,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,wBAAwB,MAAM,OAAO,CAAC,EAAE;AACpE,SAAO;AACT;AAEA,eAAe,KAAK,MAA+B;AACjD,QAAM,OAAO,iBAAiB,MAAM,WAAW;AAC/C,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,wBAAwB,MAAM,IAAI,EAAE;AAC/D,MAAI,CAAC,oBAAoB,KAAK,IAAI,KAAK,SAAS,UAAU,SAAS;AACjE,UAAM,IAAI,MAAM,kGAAkG;AACpH,QAAM,aAAa,kBAAkB,MAAM,cAAc;AACzD,MAAI,eAAe,UAAa,CAAC,yBAAyB,KAAK,UAAU;AACvE,UAAM,IAAI,MAAM,8DAA8D;AAChF,QAAM,QAAQ;AAAA,IACZ,EAAE,MAAMC,MAAK,sBAAsB,GAAG,IAAI,YAAY,GAAG,MAAM,aAAa,EAAE,MAAM,aAAa,kBAAkB,MAAM,eAAe,GAAG,WAAW,CAAC,EAAE;AAAA,IACzJ,EAAE,MAAMA,MAAK,sBAAsB,GAAG,IAAI,aAAa,GAAG,MAAM,YAAY,IAAI,EAAE;AAAA,EACpF;AACA,QAAM,YAAYA,MAAK,sBAAsB,YAAY;AACzD,QAAM,SAAS,OAAO,SAAiBD,UAAS,IAAI,EAAE,KAAK,MAAM,MAAM,MAAM,KAAK;AAClF,aAAW,QAAQ,OAAO;AACxB,QAAI,MAAM,OAAO,KAAK,IAAI,EAAG,OAAM,IAAI,MAAM,GAAG,KAAK,IAAI,sCAAsC;AAAA,EACjG;AACA,QAAM,MAAM,sBAAsB,EAAE,WAAW,KAAK,CAAC;AACrD,QAAM,UAAU,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAC7C,aAAW,QAAQ,MAAO,OAAM,UAAU,KAAK,MAAM,KAAK,MAAM,EAAE,MAAM,KAAK,CAAC;AAC9E,MAAI,CAAE,MAAM,OAAO,SAAS,GAAI;AAC9B,UAAM,UAAU,WAAW,gBAAgB,EAAE,MAAM,KAAK,CAAC;AACzD,YAAQ,KAAK,SAAS;AAAA,EACxB;AACA;AAAA,IACE,QAAQ,MAAM,QAAQ,IAClB,KAAK,UAAU,EAAE,QAAQ,GAAG,MAAM,CAAC,IACnC,GAAG,QAAQ,IAAI,CAAC,SAAS,SAAS,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,oIAAuI,MAAM,CAAC,EAAG,IAAI;AAAA,EAC/M;AACF;AAEA,eAAe,sBAAuC;AACpD,QAAM,SAAS,MAAME,SAAQ,oBAAoB,EAAE,MAAM,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,YAAY,CAAC;AAC1G,MAAI,MAAM,WAAW;AACnB,UAAM,IAAI;AAAA,MACR,MAAM,WAAW,IACb,MAAM,oBAAoB,gDAC1B,wBAAwB,oBAAoB,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,IACxE;AACF,SAAOD,MAAK,sBAAsB,MAAM,CAAC,CAAE;AAC7C;AAEA,eAAe,KAAK,EAAE,MAAM,QAAQ,OAAO,KAAK,GAA2B;AACzE,QAAM,OAAO,iBAAiB,MAAM,WAAW,KAAM,MAAM,oBAAoB;AAC/E,QAAM,UAAU,MAAM,gBAAgB,IAAI;AAC1C,aAAW,WAAW,QAAQ,SAAU,SAAQ,MAAM,YAAY,OAAO,EAAE;AAC3E,QAAM,gBAAgB,MAAM,qBAAqB,MAAM,QAAQ,KAAK;AACpE,QAAM,SAAS,MAAM,QAAsC,QAAQ,OAAO,OAAO,OAAO;AAAA,IACtF;AAAA,IACA,YAAY,QAAQ;AAAA,IACpB,SAAS,QAAQ;AAAA,EACnB,CAAC;AACD,QAAM,SAAS,MAAM,QAAQ,QAAQ,OAAO,OAAO,IAAI;AACvD,MAAI,MAAM;AACR,mBAAe,KAAK,UAAU,EAAE,GAAG,QAAQ,UAAU,QAAQ,SAAS,GAAG,MAAM,CAAC,CAAC;AACjF;AAAA,EACF;AACA;AAAA,IACE;AAAA,MACE,UAAU,OAAO,IAAI,KAAK,OAAO,EAAE;AAAA,MACnC,UAAU,OAAO,MAAM,MAAM;AAAA,MAC7B,iBAAiB,OAAO,aAAa,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,MAAM;AAAA,IAC9E,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAEA,SAAS,aAAa,QAA4B;AAChD,QAAM,IAAI,OAAO;AACjB,SAAO;AAAA,IACL,GAAG,OAAO,IAAI,KAAK,OAAO,EAAE;AAAA,IAC5B,EAAE;AAAA,IACF,gBAAgB,OAAO,aAAa;AAAA,IACpC,SAAS,EAAE,IAAI;AAAA,IACf,QAAQ,EAAE,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,IAAI,IAAI,YAAO,EAAE;AAAA,IAC/D,WAAW,OAAO,QAAQ,EAAE,MAAM,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,GAAG,UAAU,EAAE,MAAM,UAAU,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,IACxI,YAAY,EAAE,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,IAClE,YAAY,EAAE,OAAO,mBAAmB,EAAE,WAAW,SAAS,KAAK,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE,cAAc;AAAA,IAC/G,iBAAiB,OAAO,aAAa,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,IAAI,KAAK,MAAM;AAAA,IAC5F,UAAU,OAAO,MAAM,MAAM;AAAA,EAC/B,EAAE,KAAK,IAAI;AACb;AAEA,eAAe,UAAU,EAAE,QAAQ,OAAO,KAAK,GAA2B;AACxE,QAAM,QAAQ,MAAM,WAA+I,QAAQ,OAAO,KAAK;AACvL;AAAA,IACE,OACI,KAAK,UAAU,OAAO,MAAM,CAAC,IAC7B,MAAM,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,iBAAiB,GAAG,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,IAAI,KAAK;AAAA,EAC9H;AACF;AAEA,eAAe,SAAS,KAA6B;AACnD,QAAM,SAAS,MAAM,QAAQ,IAAI,QAAQ,IAAI,OAAO,OAAO,KAAK,MAAM,CAAC;AACvE,iBAAe,IAAI,OAAO,KAAK,UAAU,QAAQ,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC;AAClF;AAGA,IAAM,yBAAyB,IAAI;AAGnC,eAAe,gBAAgB,KAAc,YAAwB,KAA4B;AAC/F,QAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,aAAW,EAAE,IAAI,KAAK,WAAW,OAAO;AAEtC,QAAI,CAAC,uBAAuB,KAAK,GAAG,EAAG,OAAM,IAAI,MAAM,8BAA8B,GAAG,sCAAsC;AAC9H,UAAM,EAAE,IAAI,IAAI,MAAM;AAAA,MACpB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,MACA,GAAG,KAAK,IAAI,mBAAmB,WAAW,EAAE,CAAC,UAAU,mBAAmB,GAAG,CAAC;AAAA,IAChF;AACA,UAAME,UAAS,IAAI,IAAI,GAAG;AAC1B,QAAIA,QAAO,aAAa,YAAY,CAAC,CAAC,aAAa,WAAW,EAAE,SAASA,QAAO,QAAQ;AACtF,YAAM,IAAI,MAAM,6BAA6B,GAAG,SAASA,QAAO,QAAQ,GAAG;AAC7E,UAAM,WAAW,MAAM,MAAMA,SAAQ,EAAE,UAAU,QAAQ,CAAC;AAC1D,QAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,kCAAkC,GAAG,YAAY,SAAS,MAAM,IAAI;AACtG,UAAM,UAAUF,MAAK,KAAK,GAAG,GAAG,MAAM,GAAGG,YAAW,OAAO,KAAK,MAAM,SAAS,YAAY,CAAC,GAAG,EAAE,iBAAiB,uBAAuB,CAAC,CAAC;AAAA,EAC7I;AACA,UAAQ,MAAM,cAAc,WAAW,MAAM,MAAM,eAAe,WAAW,MAAM,WAAW,IAAI,KAAK,GAAG,OAAO,GAAG,EAAE;AACxH;AAEA,eAAe,UAAU,KAA6B;AACpD,QAAM,aAAa,MAAM,QAAQ,IAAI,QAAQ,IAAI,OAAO,OAAO,KAAK,OAAO,CAAC;AAC5E,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,WAAW,kBAAkB,IAAI,MAAM,YAAY;AACzD,MAAI,SAAU,OAAM,gBAAgB,KAAK,YAAY,QAAQ;AAC7D;AAAA,IACE,IAAI,OACA,KAAK,UAAU,OAAO,MAAM,CAAC,IAC7B,MAAM,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,KAAK,EAAE,aAAa,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE,WAAW,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,GAAG,EAAE,KAAK,IAAI,KAAK;AAAA,EACnJ;AACF;AAEA,eAAe,YAAY,KAA6B;AACtD,QAAM,OAAO,OAAO,KAAK,SAAS;AAClC,QAAM,OAAO,MAAM,YAAY,IAAI,QAAQ,IAAI,OAAO,GAAG,KAAK,IAAI,mBAAmB,IAAI,CAAC,UAAU;AACpG,iBAAe,IAAI,OAAO,KAAK,UAAU,EAAE,MAAM,SAAS,KAAK,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC7F;AAiBA,eAAe,SAAS,KAA6B;AACnD,QAAM,MAAM,IAAI,YAAY,CAAC;AAC7B,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,wBAAwB,MAAM,IAAI,EAAE;AAC9D,QAAM,UAAU,kBAAkB,IAAI,MAAM,WAAW;AACvD,MAAI,YAAY,UAAa,CAAC,aAAa,KAAK,OAAO,EAAG,OAAM,IAAI,MAAM,4CAA4C;AACtH,QAAM,aAAa,MAAM,QAAQ,IAAI,QAAQ,IAAI,OAAO,OAAO,KAAK,MAAM,CAAC;AAC3E,QAAM,QAAQ,YAAY,SAAY,KAAK,YAAY,OAAO;AAC9D,QAAM,SAAS,MAAM,QAAoB,IAAI,QAAQ,IAAI,OAAO,OAAO,GAAG,KAAK,IAAI,mBAAmB,WAAW,EAAE,CAAC,UAAU,mBAAmB,GAAG,CAAC,GAAG,KAAK,EAAE;AAC/J;AAAA,IACE,IAAI,OACA,KAAK,UAAU,QAAQ,MAAM,CAAC,IAC9B;AAAA,MACE,GAAG,OAAO,GAAG,MAAM,OAAO,OAAO,GAAG,OAAO,YAAY,OAAO,gBAAgB,cAAc,gBAAgB,OAAO,aAAa,GAAG,KAAK,OAAO,KAAK;AAAA,MACpJ,WAAW,OAAO,MAAM;AAAA,MACxB,UAAU,OAAO,YAAY,KAAK,OAAO,WAAW;AAAA,MACpD,aAAa,KAAK,UAAU,OAAO,UAAU,MAAM,CAAC,CAAC;AAAA,MACrD;AAAA,MACA,GAAG,OAAO,SAAS;AAAA,QACjB,CAAC,MAAM,MAAM,EAAE,OAAO,KAAK,EAAE,SAAS,KAAK,EAAE,aAAa,mBAAmB,KAAK,EAAE,aAAa,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE,MAAM,KAAK,EAAE;AAAA,MACjJ;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACjB;AACF;AAEA,eAAe,WAAW,KAA6B;AACrD,QAAM,OAAO,OAAO,KAAK,SAAS;AAClC,QAAM,MAAM,IAAI,YAAY,CAAC;AAC7B,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,wBAAwB,MAAM,SAAS,CAAC,EAAE;AACpE,QAAM,aAAa,MAAM,QAAQ,IAAI,QAAQ,IAAI,OAAO,IAAI;AAC5D,QAAM,QAAQ,IAAI,QAAQ,IAAI,OAAO,UAAU,GAAG,KAAK,IAAI,mBAAmB,WAAW,EAAE,CAAC,UAAU,mBAAmB,GAAG,CAAC,EAAE;AAC/H,iBAAe,IAAI,OAAO,KAAK,UAAU,EAAE,MAAM,MAAM,KAAK,SAAS,KAAK,CAAC,IAAI,gBAAgB,GAAG,SAAS,IAAI,EAAE;AACnH;AAEA,eAAe,QAAQ,KAA6B;AAClD,QAAM,EAAE,MAAM,QAAQ,OAAO,KAAK,IAAI;AACtC,QAAM,OAAO,OAAO,KAAK,UAAU;AACnC,QAAM,MAAM,SAAS,MAAM,OAAO;AAClC,QAAM,QAAQ,SAAS,MAAM,SAAS;AACtC,QAAM,iBAAiB,YAAY,IAAI;AACvC,QAAM,SAAS,SAAS,MAAM,UAAU;AACxC,QAAM,mBAAmB,kBAAkB,MAAM,gBAAgB;AACjE,QAAM,UAAU,QAAQ,MAAM,WAAW;AACzC,QAAM,SAAS,kBAAkB,MAAM,UAAU;AACjD,MAAI,UAAU,CAAC,QAAS,OAAM,IAAI,MAAM,oCAAoC;AAC5E,MAAI,CAAC,4BAA4B,KAAK,GAAG;AACvC,UAAM,IAAI,MAAM,+GAA+G;AAEjI,QAAM,WAAW,MAAM,SAAS,gBAAgB,mBAAmB,MAAM,gCAAgC,cAAc,cAAc,EAAE;AACvI,MAAI;AACJ,MAAI,kBAAkB;AACpB,UAAM,SAAS,uBAAuB,UAAU,MAAM,SAAS,kBAAkB,kBAAkB,gBAAgB,EAAE,CAAC;AACtH,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,cAAc,GAAG,gBAAgB,iCAAiC,aAAa,OAAO,KAAK,CAAC;AACxG,mBAAe,OAAO;AAAA,EACxB;AAEA,QAAM,aAAa,MAAM,QAAQ,QAAQ,OAAO,IAAI;AACpD,QAAM,YAAY,WAAW,WAAW,SAAS;AACjD,MAAI,aAAa,CAAC,aAAc,OAAM,IAAI,MAAM,GAAG,IAAI,kDAAkD;AACzG,MAAI,CAAC,aAAa,aAAc,OAAM,IAAI,MAAM,GAAG,IAAI,+DAA+D;AAEtH,QAAM,SAAS,MAAM,WAAW,KAAK;AACrC,QAAM,UAAU,qBAAqB,OAAO,SAAS,WAAW,WAAW,MAAM,OAAO;AACxF,MAAI,QAAQ;AACV,UAAM,IAAI,MAAM,iDAAiD,QAAQ,KAAK,IAAI,CAAC,kCAAkC;AAEvH,QAAM,WAAW,GAAG,KAAK,IAAI,mBAAmB,WAAW,EAAE,CAAC;AAC9D,QAAM,SAAS,MAAM,QAAqB,QAAQ,OAAO,QAAQ,GAAG,QAAQ,YAAY;AAAA,IACtF,QAAQ,OAAO;AAAA,IACf,YAAY,OAAO;AAAA,IACnB,OAAO,OAAO;AAAA,EAChB,CAAC;AACD,QAAM,eAAe,OAAO,WAAW;AACvC,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,WAAW,MAAM,MAAM,OAAO,KAAK,EAAE,QAAQ,OAAO,SAAS,OAAO,SAAS,MAAM,IAAI,WAAW,OAAO,OAAO,EAAE,CAAC;AACzH,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,gCAAgC,SAAS,MAAM,OAAO,MAAM,SAAS,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC,EAAE;AAAA,EAChH;AACA,QAAM,SAAS,MAAM,QAA0C,QAAQ,OAAO,QAAQ,GAAG,QAAQ,UAAU;AAAA,IACzG;AAAA,IACA,OAAO,kBAAkB,MAAM,SAAS,KAAK;AAAA,IAC7C,QAAQ,OAAO;AAAA,IACf;AAAA,IACA;AAAA,IACA,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,IACvC,GAAI,UAAU,EAAE,SAAS,KAAK,IAAI,CAAC;AAAA,IACnC,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,EAC7B,CAAC;AACD,QAAM,SAAS,EAAE,MAAM,MAAM,KAAK,SAAS,OAAO,SAAS,QAAQ,OAAO,QAAQ,OAAO,OAAO,OAAO,aAAa;AACpH;AAAA,IACE,OACI,KAAK,UAAU,QAAQ,MAAM,CAAC,IAC9B,GAAG,UAAU,kBAAkB,OAAO,OAAO,YAAY,GAAG,OAAO,IAAI,KAAK,cAAc,GAAG,OAAO,IAAI,EAAE;AAAA,SAAY,OAAO,MAAM,KAAK,OAAO,KAAK,uBAAuB,eAAe,6CAA6C,UAAU;AAAA,EACvP;AACF;AAGA,IAAM,WAAiG;AAAA,EACrG;AAAA,EACA,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,KAAK,CAAC,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,KAAK,GAAG,IAAI,QAAQ,IAAI,KAAK;AAAA,EACzE,KAAK,CAAC,QAAQ,OAAO,IAAI,MAAM,OAAO,KAAK,KAAK,GAAG,IAAI,QAAQ,IAAI,KAAK;AAAA,EACxE,MAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,OAAO,KAAK,MAAM,GAAG,IAAI,QAAQ,IAAI,KAAK;AAAA,EAC5E,SAAS,CAAC,QAAQ,YAAY,IAAI,MAAM,IAAI,aAAa,IAAI,QAAQ,IAAI,KAAK;AAChF;AAEA,eAAsB,eAAe,MAA+B;AAClE,QAAM,CAAC,SAAS,GAAG,IAAI,IAAI;AAC3B,MAAI,CAAC,WAAW,YAAY,UAAU,QAAQ,MAAM,UAAU,IAAI,GAAG;AACnE,cAAU,YAAY,SAAS,KAAK,CAAC,IAAI,OAAO;AAChD;AAAA,EACF;AACA,MAAI,YAAY,SAAS;AACvB,UAAM,iBAAiB,QAAQ,IAAI;AACnC;AAAA,EACF;AACA,MAAI,OAAO;AACX,MAAI;AACF,QAAI,CAAC,OAAO,OAAO,OAAO,OAAO,EAAG,OAAM,IAAI,MAAM,yBAAyB,OAAO,EAAE;AACtF,UAAM,MAAM;AAEZ,QAAI,OAAO,SAAS,GAAG,EAAG,UAAS,MAAM,OAAO;AAEhD,eAAW,QAAQ,YAAY,OAAO,CAACC,UAASA,UAAS,YAAY,GAAG;AACtE,UAAI,KAAK,SAAS,IAAI,KAAK,kBAAkB,MAAM,IAAI,MAAM,OAAW,OAAM,IAAI,MAAM,GAAG,IAAI,oBAAoB;AAAA,IACrH;AACA,UAAM,cAAc,kBAAkB,MAAM,WAAW;AAEvD,QAAI,YAAY,UAAU,YAAY,GAAG,KAAK,GAAI,OAAM,IAAI,MAAM,wBAAwB,MAAM,GAAG,CAAC,EAAE;AACtG,QAAI,QAAQ,QAAQ;AAClB,YAAM,KAAK,IAAI;AAAA,IACjB,OAAO;AACL,YAAM,EAAE,QAAQ,MAAM,IAAI,MAAM,cAAc,IAAI;AAClD,YAAM,MAAM,EAAE,MAAM,MAAM,aAAa,QAAQ,OAAO,MAAM,QAAQ,MAAM,QAAQ,EAAE;AACpF,aAAQ,MAAM,SAAS,GAAG,EAAE,GAAG,KAAM;AAAA,IACvC;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAChF,WAAO;AAAA,EACT;AACA,MAAI,SAAS,EAAG,SAAQ,KAAK,IAAI;AACnC;","names":["readFile","readdir","gunzipSync","join","required","run","target","readFile","readFile","readFile","join","readdir","target","gunzipSync","flag"]}
|
|
@@ -5,19 +5,19 @@ import {
|
|
|
5
5
|
getArgValues,
|
|
6
6
|
getPositionalArg,
|
|
7
7
|
selectProperty
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-EWK44F6V.js";
|
|
9
9
|
import "./chunk-S3Q7MDCS.js";
|
|
10
10
|
import {
|
|
11
11
|
getArgValue,
|
|
12
12
|
hasFlag,
|
|
13
13
|
resolveConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-4MFMPC5P.js";
|
|
15
15
|
import {
|
|
16
16
|
writeRawOutput
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-2OHYMT3A.js";
|
|
18
18
|
import {
|
|
19
19
|
isActiveExplorationCycleStatus
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-RHWPZKRV.js";
|
|
21
21
|
import "./chunk-TOWZAG3I.js";
|
|
22
22
|
|
|
23
23
|
// src/exploration.ts
|
|
@@ -182,4 +182,4 @@ async function runExploration(argv) {
|
|
|
182
182
|
export {
|
|
183
183
|
runExploration
|
|
184
184
|
};
|
|
185
|
-
//# sourceMappingURL=exploration-
|
|
185
|
+
//# sourceMappingURL=exploration-LCGKRGOQ.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __cr } from "module"; import { fileURLToPath as __fup } from "url"; import { dirname as __dn } from "path"; const require = __cr(import.meta.url); const __filename = __fup(import.meta.url); const __dirname = __dn(__filename);
|
|
2
2
|
import {
|
|
3
3
|
printServedGuide
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-O7B2IYCZ.js";
|
|
5
5
|
import {
|
|
6
6
|
apiRequest,
|
|
7
7
|
getApplicationArg,
|
|
@@ -9,22 +9,22 @@ import {
|
|
|
9
9
|
getScalarArgValue,
|
|
10
10
|
resolveCredentialId,
|
|
11
11
|
selectProperty
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-EWK44F6V.js";
|
|
13
13
|
import "./chunk-S3Q7MDCS.js";
|
|
14
14
|
import {
|
|
15
15
|
hasFlag,
|
|
16
16
|
resolveConfig,
|
|
17
17
|
resolveOrgAppUrl
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-4MFMPC5P.js";
|
|
19
19
|
import {
|
|
20
20
|
stripTerminalControls,
|
|
21
21
|
writeRawOutput
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-2OHYMT3A.js";
|
|
23
23
|
import {
|
|
24
24
|
ADHOC_TEST_INSTRUCTIONS_MAX_LENGTH,
|
|
25
25
|
EXPLORATORY_EFFORT_VALUES,
|
|
26
26
|
REVIEW_FLAVOR_VALUES
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-RHWPZKRV.js";
|
|
28
28
|
import "./chunk-TOWZAG3I.js";
|
|
29
29
|
|
|
30
30
|
// src/exploratory-test.ts
|
|
@@ -331,4 +331,4 @@ export {
|
|
|
331
331
|
handleRun,
|
|
332
332
|
runExploratoryTest
|
|
333
333
|
};
|
|
334
|
-
//# sourceMappingURL=exploratory-test-
|
|
334
|
+
//# sourceMappingURL=exploratory-test-SGECQGIX.js.map
|
|
@@ -2,18 +2,18 @@ import { createRequire as __cr } from "module"; import { fileURLToPath as __fup
|
|
|
2
2
|
import {
|
|
3
3
|
printFinding,
|
|
4
4
|
printTriageSummary
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BDOL622T.js";
|
|
6
6
|
import {
|
|
7
7
|
formatElapsedDurationMs,
|
|
8
8
|
formatRecordedUtcTimestamp
|
|
9
9
|
} from "./chunk-2TIRL6ZK.js";
|
|
10
10
|
import {
|
|
11
11
|
printServedGuide
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-O7B2IYCZ.js";
|
|
13
13
|
import {
|
|
14
14
|
streamExternalRun
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import "./chunk-
|
|
15
|
+
} from "./chunk-5OYWNS6D.js";
|
|
16
|
+
import "./chunk-EWK44F6V.js";
|
|
17
17
|
import {
|
|
18
18
|
attachCliDiagnosticMetadata
|
|
19
19
|
} from "./chunk-W7CFLOEI.js";
|
|
@@ -24,15 +24,15 @@ import {
|
|
|
24
24
|
getArgValue,
|
|
25
25
|
hasFlag,
|
|
26
26
|
resolveConfig
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-4MFMPC5P.js";
|
|
28
28
|
import {
|
|
29
29
|
stripTerminalControls,
|
|
30
30
|
writeRawOutput,
|
|
31
31
|
writeUntrustedText
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-2OHYMT3A.js";
|
|
33
33
|
import {
|
|
34
34
|
elapsedTestAttemptMs
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-RHWPZKRV.js";
|
|
36
36
|
import "./chunk-TOWZAG3I.js";
|
|
37
37
|
|
|
38
38
|
// src/external-run.ts
|
|
@@ -215,7 +215,7 @@ var EXPANDED_TRACE_FILES = [
|
|
|
215
215
|
"`browser/trace.zip` \u2014 the raw trace (open with `npx playwright show-trace`)"
|
|
216
216
|
];
|
|
217
217
|
async function expandLocalTrace(root, traceZipPath) {
|
|
218
|
-
const { expandTraceWorkspace, inProcessTraceReader } = await import("./src-
|
|
218
|
+
const { expandTraceWorkspace, inProcessTraceReader } = await import("./src-VLV36QYH.js");
|
|
219
219
|
return expandTraceWorkspace({
|
|
220
220
|
workspaceRoot: root,
|
|
221
221
|
traceZipPath,
|
|
@@ -1250,4 +1250,4 @@ export {
|
|
|
1250
1250
|
__externalRunInternals,
|
|
1251
1251
|
runExternalRun
|
|
1252
1252
|
};
|
|
1253
|
-
//# sourceMappingURL=external-run-
|
|
1253
|
+
//# sourceMappingURL=external-run-2AJAI5O7.js.map
|
|
@@ -5,17 +5,17 @@ import {
|
|
|
5
5
|
getTargetOrg,
|
|
6
6
|
parseLifecycleStage,
|
|
7
7
|
toLifecycleLabel
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-EWK44F6V.js";
|
|
9
9
|
import "./chunk-S3Q7MDCS.js";
|
|
10
10
|
import {
|
|
11
11
|
getArgValue,
|
|
12
12
|
hasFlag,
|
|
13
13
|
resolveConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-4MFMPC5P.js";
|
|
15
15
|
import {
|
|
16
16
|
writeRawOutput
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
17
|
+
} from "./chunk-2OHYMT3A.js";
|
|
18
|
+
import "./chunk-RHWPZKRV.js";
|
|
19
19
|
import "./chunk-TOWZAG3I.js";
|
|
20
20
|
|
|
21
21
|
// src/feature-flag.ts
|
|
@@ -856,4 +856,4 @@ async function runFeatureFlag(argv) {
|
|
|
856
856
|
export {
|
|
857
857
|
runFeatureFlag
|
|
858
858
|
};
|
|
859
|
-
//# sourceMappingURL=feature-flag-
|
|
859
|
+
//# sourceMappingURL=feature-flag-P7N4WQIH.js.map
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { createRequire as __cr } from "module"; import { fileURLToPath as __fup } from "url"; import { dirname as __dn } from "path"; const require = __cr(import.meta.url); const __filename = __fup(import.meta.url); const __dirname = __dn(__filename);
|
|
2
2
|
import {
|
|
3
3
|
detectAgent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-VMAR67FF.js";
|
|
5
5
|
import {
|
|
6
6
|
apiRequest,
|
|
7
7
|
readStdin
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-EWK44F6V.js";
|
|
9
9
|
import "./chunk-S3Q7MDCS.js";
|
|
10
10
|
import {
|
|
11
11
|
GLOBAL_VALUE_FLAGS,
|
|
12
12
|
getArgValue,
|
|
13
13
|
hasFlag,
|
|
14
14
|
resolveConfig
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-4MFMPC5P.js";
|
|
16
16
|
import {
|
|
17
17
|
version,
|
|
18
18
|
writeRawOutput,
|
|
19
19
|
writeUntrustedText
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-2OHYMT3A.js";
|
|
21
21
|
import {
|
|
22
22
|
AGENT_FEEDBACK_TOPICS
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-RHWPZKRV.js";
|
|
24
24
|
import "./chunk-TOWZAG3I.js";
|
|
25
25
|
|
|
26
26
|
// src/feedback.ts
|
|
@@ -137,4 +137,4 @@ async function runFeedback(argv) {
|
|
|
137
137
|
export {
|
|
138
138
|
runFeedback
|
|
139
139
|
};
|
|
140
|
-
//# sourceMappingURL=feedback-
|
|
140
|
+
//# sourceMappingURL=feedback-LAT7TQ2T.js.map
|
|
@@ -10,18 +10,18 @@ import {
|
|
|
10
10
|
getPositionalArg,
|
|
11
11
|
resolveEnvironmentByNameOrId,
|
|
12
12
|
selectProperty
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-EWK44F6V.js";
|
|
14
14
|
import "./chunk-S3Q7MDCS.js";
|
|
15
15
|
import {
|
|
16
16
|
getArgValue,
|
|
17
17
|
hasFlag,
|
|
18
18
|
resolveConfig,
|
|
19
19
|
resolveOrgAppUrl
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-4MFMPC5P.js";
|
|
21
21
|
import {
|
|
22
22
|
writeRawOutput
|
|
23
|
-
} from "./chunk-
|
|
24
|
-
import "./chunk-
|
|
23
|
+
} from "./chunk-2OHYMT3A.js";
|
|
24
|
+
import "./chunk-RHWPZKRV.js";
|
|
25
25
|
import "./chunk-TOWZAG3I.js";
|
|
26
26
|
|
|
27
27
|
// src/flow/index.ts
|
|
@@ -2188,4 +2188,4 @@ async function runFlow(argv) {
|
|
|
2188
2188
|
export {
|
|
2189
2189
|
runFlow
|
|
2190
2190
|
};
|
|
2191
|
-
//# sourceMappingURL=flow-
|
|
2191
|
+
//# sourceMappingURL=flow-NH2DC6AP.js.map
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
apiRequest,
|
|
4
4
|
getTargetOrg,
|
|
5
5
|
requireOrgAdmin
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-EWK44F6V.js";
|
|
7
7
|
import {
|
|
8
8
|
openUrl
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-K2IDR6FR.js";
|
|
10
10
|
import "./chunk-S3Q7MDCS.js";
|
|
11
11
|
import {
|
|
12
12
|
decodeJwtPayload,
|
|
@@ -14,9 +14,9 @@ import {
|
|
|
14
14
|
hasFlag,
|
|
15
15
|
resolveConfig,
|
|
16
16
|
resolveOrgAppUrl
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
17
|
+
} from "./chunk-4MFMPC5P.js";
|
|
18
|
+
import "./chunk-2OHYMT3A.js";
|
|
19
|
+
import "./chunk-RHWPZKRV.js";
|
|
20
20
|
import "./chunk-TOWZAG3I.js";
|
|
21
21
|
|
|
22
22
|
// src/github.ts
|
|
@@ -156,4 +156,4 @@ export {
|
|
|
156
156
|
githubConnectUrl,
|
|
157
157
|
runGithub
|
|
158
158
|
};
|
|
159
|
-
//# sourceMappingURL=github-
|
|
159
|
+
//# sourceMappingURL=github-FCEKBLXI.js.map
|