@maycombhq/atticus 2.0.0-beta.25 → 2.0.0-beta.27
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/bin.js +3 -3
- package/dist/chunk-22A2K555.js +653 -0
- package/dist/{chunk-UTZMF5CV.js → chunk-23TTURB2.js} +1 -1
- package/dist/{chunk-F36DIKJ3.js → chunk-2666BPJE.js} +19 -19
- package/dist/{chunk-E2OP6JNF.js → chunk-2ALBHI4Q.js} +28 -27
- package/dist/chunk-2ANBMA74.js +107 -0
- package/dist/{chunk-S7UQFI4B.js → chunk-2HCW6HXK.js} +27 -26
- package/dist/{chunk-HV3KPEFH.js → chunk-2ISR6MWD.js} +15 -15
- package/dist/{chunk-QQD25YNF.js → chunk-2MRYL45Z.js} +50 -9
- package/dist/{chunk-KN4UQJ7R.js → chunk-3GNUHLAN.js} +4 -4
- package/dist/chunk-3GURU22K.js +44 -0
- package/dist/{chunk-4U3JLIRC.js → chunk-3M3MDBOG.js} +1 -1
- package/dist/{chunk-DJ4C5ELF.js → chunk-3PBIZBWN.js} +1 -1
- package/dist/{chunk-XUCHGEF5.js → chunk-3PWXVBCB.js} +83 -40
- package/dist/chunk-3W2QX6TT.js +58 -0
- package/dist/{chunk-CPFAWYVC.js → chunk-3Z7ATALI.js} +5 -5
- package/dist/{chunk-ZGULQAPZ.js → chunk-44SWXDD7.js} +8 -5
- package/dist/{chunk-LGE6H4UP.js → chunk-46N5O5H7.js} +5 -5
- package/dist/{chunk-SRLUADSY.js → chunk-4D4DNTFE.js} +4 -4
- package/dist/{chunk-DMQJDHXG.js → chunk-4EAT7HOX.js} +7 -5
- package/dist/{chunk-DPZD7WVX.js → chunk-4FLIW5PJ.js} +4 -4
- package/dist/{chunk-SGTAQNOP.js → chunk-4LWA5VMJ.js} +52 -37
- package/dist/{chunk-D45K3XKK.js → chunk-4ODVHNA6.js} +18 -17
- package/dist/{chunk-7QZDGM5V.js → chunk-4POSAXNC.js} +6 -6
- package/dist/{chunk-A3J75BO2.js → chunk-4PQ4KDOA.js} +16 -15
- package/dist/{chunk-2Y5FJQSF.js → chunk-4UVTNHA6.js} +1 -1
- package/dist/{chunk-KVVNAUIG.js → chunk-4XK3HLOH.js} +1 -0
- package/dist/{chunk-V7T6URII.js → chunk-523NRKHF.js} +4 -4
- package/dist/{chunk-7EAH2MFY.js → chunk-5GCCG3GJ.js} +11 -5
- package/dist/{chunk-7U6PBBXG.js → chunk-5XW6RUDV.js} +8 -8
- package/dist/{chunk-Y3J365UC.js → chunk-5YEUAZZE.js} +8 -8
- package/dist/{chunk-JWLABUXL.js → chunk-62LD7CSY.js} +13 -13
- package/dist/{chunk-LOJGNSPA.js → chunk-67Y2J55V.js} +22 -21
- package/dist/{chunk-UCKG6UE7.js → chunk-6DSZ4CL7.js} +37 -22
- package/dist/{chunk-FNP4M4VL.js → chunk-6G67LSBG.js} +283 -61
- package/dist/{chunk-5GLGLWAJ.js → chunk-6OEB4FTC.js} +20 -19
- package/dist/{chunk-5RKN5QIX.js → chunk-6OTGCKYH.js} +9 -9
- package/dist/{chunk-UI7ID4HG.js → chunk-6XLCMDIP.js} +13 -13
- package/dist/chunk-76DZJTU7.js +190 -0
- package/dist/chunk-7764GVJK.js +37 -0
- package/dist/{chunk-TKCNJJ2S.js → chunk-7BOGXFZ3.js} +11 -11
- package/dist/{chunk-Q52KWTG5.js → chunk-7CVHKNAF.js} +16 -15
- package/dist/{chunk-XF5UMMQL.js → chunk-7FEIS3KV.js} +25 -24
- package/dist/{chunk-UTYL4XVA.js → chunk-7GXM45T5.js} +26 -23
- package/dist/{chunk-4PW5SRKJ.js → chunk-7YMAMNMT.js} +17 -16
- package/dist/chunk-7YWS47SE.js +56 -0
- package/dist/{chunk-LZFKJ2BR.js → chunk-A3LVMCA5.js} +1 -1
- package/dist/{chunk-7YFUNWFM.js → chunk-A7ZJKLFC.js} +11 -11
- package/dist/chunk-AANQC5QP.js +47 -0
- package/dist/{chunk-LP5QGTCR.js → chunk-AIQLTDC3.js} +3 -3
- package/dist/{chunk-EPXYFJTY.js → chunk-AKZTCZ6F.js} +4 -4
- package/dist/{chunk-5267F4BS.js → chunk-ALCSTVWQ.js} +3 -3
- package/dist/{chunk-NMBHFSJQ.js → chunk-ALUHO7SE.js} +26 -25
- package/dist/{chunk-3WO7ASU7.js → chunk-AMZ4XMES.js} +8 -8
- package/dist/{chunk-JKEUPSCE.js → chunk-AOQG37K4.js} +8 -6
- package/dist/{chunk-3NA2VE45.js → chunk-ARXZTHEI.js} +16 -15
- package/dist/{chunk-W2W7YCFL.js → chunk-AS4CTARY.js} +16 -15
- package/dist/{chunk-7AKJ2XTW.js → chunk-AVUPW23W.js} +18 -17
- package/dist/{chunk-CMUJSPP4.js → chunk-B56FCIEJ.js} +12 -12
- package/dist/{chunk-K3OIBTCV.js → chunk-BABATPOZ.js} +18 -17
- package/dist/{chunk-VAZYNF6I.js → chunk-BIOKDLLX.js} +21 -19
- package/dist/{chunk-23QHP4JJ.js → chunk-BUBKKEUV.js} +5 -5
- package/dist/{chunk-N3OEBQTA.js → chunk-CDC6VECU.js} +3 -3
- package/dist/chunk-CHEFUNZ4.js +425 -0
- package/dist/{chunk-MM7YWUBB.js → chunk-CIFR3DPV.js} +6 -6
- package/dist/{chunk-JCKKAELC.js → chunk-CLBVKD4P.js} +16 -15
- package/dist/{chunk-HHZEXF7V.js → chunk-CLM5Z3R5.js} +5 -5
- package/dist/{chunk-M7XNX5IC.js → chunk-CLYV5MB6.js} +9 -9
- package/dist/{chunk-SHWHRCMU.js → chunk-CRYIBCGP.js} +37 -19
- package/dist/{chunk-6576X5BJ.js → chunk-D3L5SO27.js} +5 -5
- package/dist/chunk-DAZM2INZ.js +34 -0
- package/dist/{chunk-VBJHIRKV.js → chunk-DF4BXBB2.js} +6 -6
- package/dist/{chunk-U4HZ5CXL.js → chunk-E7Q52EOO.js} +11 -11
- package/dist/{chunk-MZTU5L6S.js → chunk-EFDUC35B.js} +3 -3
- package/dist/{chunk-GIOOA2ZO.js → chunk-EHXEJFHD.js} +5 -5
- package/dist/{chunk-M6HI36T3.js → chunk-ELJ5Q4J2.js} +2 -2
- package/dist/{chunk-MJAIBPI5.js → chunk-EM6DKBTJ.js} +3 -3
- package/dist/{chunk-YGS2YVF2.js → chunk-EMC46SU4.js} +38 -17
- package/dist/{chunk-CB6H7MH2.js → chunk-EQEDIWFQ.js} +25 -24
- package/dist/chunk-EW574EZI.js +57 -0
- package/dist/{chunk-JJEPU4VS.js → chunk-EYINWNXL.js} +5 -5
- package/dist/{chunk-MJOIMGS4.js → chunk-EYVYHYCA.js} +8 -8
- package/dist/{chunk-WGOQZ4PQ.js → chunk-F66542M6.js} +34 -9
- package/dist/{chunk-EUCATH2U.js → chunk-F74OMLNU.js} +6 -6
- package/dist/{chunk-G5P7F6RQ.js → chunk-FADIWOA5.js} +3 -3
- package/dist/{chunk-JMOZ6K5A.js → chunk-FC3ZVD3O.js} +3 -3
- package/dist/{chunk-XXJSGCDO.js → chunk-FG65LXED.js} +8 -8
- package/dist/{chunk-5WZV37WS.js → chunk-FKAUBC4Y.js} +8 -8
- package/dist/{chunk-WA644MUQ.js → chunk-FM3EEDS2.js} +15 -15
- package/dist/{chunk-XZQBFF65.js → chunk-FS4E7F6O.js} +403 -148
- package/dist/{chunk-Q6UYUCNS.js → chunk-FSYJPYLE.js} +16 -15
- package/dist/{chunk-H7GAPNGQ.js → chunk-G33UIUG3.js} +46 -20
- package/dist/{chunk-OEUTV6EL.js → chunk-G3F4BYML.js} +15 -14
- package/dist/{chunk-7UYRN4ON.js → chunk-GBJRFFDW.js} +5 -5
- package/dist/{chunk-7HW2CMIN.js → chunk-GF6GBHFN.js} +13 -11
- package/dist/{chunk-DCPI3ETH.js → chunk-GLHOUT5E.js} +26 -25
- package/dist/{chunk-VOBG7BLB.js → chunk-GM6GXO2A.js} +20 -19
- package/dist/{chunk-KJPKIU2R.js → chunk-GSJ2RXE7.js} +29 -28
- package/dist/{chunk-HU7VXMFV.js → chunk-GT72FDER.js} +6 -6
- package/dist/{chunk-SBNBVUOF.js → chunk-GW6ZH77P.js} +37 -36
- package/dist/{chunk-6WYOJCB4.js → chunk-GZILYRGC.js} +3 -3
- package/dist/{chunk-4SS5ZK47.js → chunk-GZSOZYEP.js} +3 -3
- package/dist/{chunk-N6SSI6XO.js → chunk-H25QNDKK.js} +58 -36
- package/dist/{chunk-DYVUNT4O.js → chunk-H3RKW4RF.js} +7 -7
- package/dist/chunk-H7M7ZH6H.js +52 -0
- package/dist/chunk-H7NRWSMP.js +55 -0
- package/dist/{chunk-KW4DIXUL.js → chunk-HDWVR5KD.js} +4 -4
- package/dist/{chunk-HR34F2AJ.js → chunk-HG24EF5S.js} +16 -15
- package/dist/chunk-HPNYSY5M.js +1068 -0
- package/dist/{chunk-3VC2XJ53.js → chunk-HUMM4S5I.js} +6 -6
- package/dist/{chunk-K373N5U6.js → chunk-HVPS2YCW.js} +11 -11
- package/dist/{chunk-IGOE6KPG.js → chunk-I34CXV2C.js} +185 -11
- package/dist/{chunk-U7YZ3IRI.js → chunk-I57IH5X6.js} +360 -271
- package/dist/{chunk-P56N3NPT.js → chunk-I5X4WU7U.js} +6 -6
- package/dist/chunk-IAVVJ34R.js +55 -0
- package/dist/chunk-IBJE2E2S.js +51 -0
- package/dist/{chunk-EXCXNDTQ.js → chunk-IF3X6FMO.js} +1 -1
- package/dist/{chunk-GAVEIYKH.js → chunk-IJHJIL6T.js} +154 -25
- package/dist/chunk-IM435QAM.js +72 -0
- package/dist/{chunk-7NLYSTEK.js → chunk-IMBJ7WAO.js} +6 -6
- package/dist/{chunk-EM7F6XEU.js → chunk-INCFIDCB.js} +2 -2
- package/dist/{chunk-AYWJMHSX.js → chunk-IPMPLTEG.js} +3 -3
- package/dist/{chunk-PGKCRK77.js → chunk-IPSZDVLI.js} +12 -12
- package/dist/{chunk-IMTAHDME.js → chunk-IX2EOYOU.js} +50 -13
- package/dist/{chunk-QE444DZ2.js → chunk-IXNMGPF7.js} +61 -28
- package/dist/{chunk-NL6GIEJU.js → chunk-J6GO3K7G.js} +19 -18
- package/dist/chunk-JBLM6IUA.js +42 -0
- package/dist/{chunk-IWQEZFVV.js → chunk-JL2VOYSL.js} +91 -93
- package/dist/{chunk-K77ILFUQ.js → chunk-JRXFZB6J.js} +8 -8
- package/dist/{chunk-UR6JGVX2.js → chunk-JTOLBS7R.js} +988 -410
- package/dist/{chunk-GD6FXN6R.js → chunk-K73BHPTQ.js} +19 -18
- package/dist/{chunk-PYVFLITV.js → chunk-KF7KVUNJ.js} +5 -5
- package/dist/{chunk-F4WKGX7K.js → chunk-KKUCBKJE.js} +20 -19
- package/dist/{chunk-U7F6E5M3.js → chunk-KLFFHBWG.js} +27 -26
- package/dist/{chunk-ROVOAF2O.js → chunk-KMYB2XO7.js} +21 -13
- package/dist/chunk-KNYQUWFN.js +52 -0
- package/dist/{chunk-KFDOL2Y4.js → chunk-KOAJPMU2.js} +31 -20
- package/dist/chunk-KRTSE73S.js +55 -0
- package/dist/{chunk-IW3QMW3X.js → chunk-L3AM5YRP.js} +28 -9
- package/dist/{chunk-334N6EI2.js → chunk-LCIIFAID.js} +22 -21
- package/dist/{chunk-DLNQ3HUM.js → chunk-LCQIRCOT.js} +55 -10
- package/dist/{chunk-QFOJ3UPU.js → chunk-LFHBAWIM.js} +13 -13
- package/dist/chunk-LIHEMWIT.js +39 -0
- package/dist/{chunk-T5QYYB5L.js → chunk-LJLYWILK.js} +14 -14
- package/dist/{chunk-E7PR4WMM.js → chunk-LNJKDS5C.js} +26 -25
- package/dist/{chunk-HHZ2ZKUD.js → chunk-LTHY7E2P.js} +16 -15
- package/dist/{chunk-4WIVTPGE.js → chunk-LTVOQJKT.js} +7 -7
- package/dist/{chunk-TIOYZDRB.js → chunk-LZO3JABE.js} +6 -6
- package/dist/{chunk-PXMV2LLY.js → chunk-M65AZ4ZE.js} +3 -5
- package/dist/chunk-MPNTEWNY.js +492 -0
- package/dist/chunk-MQGQ3AWK.js +58 -0
- package/dist/{chunk-NQLTWGF4.js → chunk-MUXYUIBV.js} +6 -6
- package/dist/{chunk-5R3FRI6H.js → chunk-MWRRJDXQ.js} +34 -31
- package/dist/{chunk-XY6FVBBV.js → chunk-MZDHFWTN.js} +2 -2
- package/dist/chunk-N2XCT5OX.js +68 -0
- package/dist/{chunk-C5LX54QK.js → chunk-N3JGYAMD.js} +15 -15
- package/dist/{chunk-RL7PETU6.js → chunk-N5DLB74D.js} +367 -71
- package/dist/{chunk-MJMEF7SD.js → chunk-NC3Q7RIB.js} +10 -10
- package/dist/{chunk-4GWQVT2C.js → chunk-NCNLX4DL.js} +19 -18
- package/dist/{chunk-3D74UADA.js → chunk-NGSGJLKW.js} +2 -2
- package/dist/{chunk-OOU4N2JQ.js → chunk-NN7K2LLN.js} +25 -24
- package/dist/{chunk-ELNIQYLR.js → chunk-NNURP7VO.js} +15 -15
- package/dist/chunk-NSQB24WR.js +56 -0
- package/dist/{chunk-MWOPED6I.js → chunk-NV5S63YK.js} +7 -7
- package/dist/{chunk-CTJHEG6A.js → chunk-NWMFVPEP.js} +2 -0
- package/dist/{chunk-7E3G5NCH.js → chunk-NYT6QGZA.js} +22 -18
- package/dist/chunk-OB2DAIJX.js +62 -0
- package/dist/{chunk-YAUMNRCB.js → chunk-OC3OXDTG.js} +13 -8
- package/dist/{chunk-DAHKLVHU.js → chunk-OD6RNYMQ.js} +16 -16
- package/dist/{chunk-7FUQAT2R.js → chunk-OFYBRMRG.js} +6 -6
- package/dist/chunk-OGTELPDN.js +43 -0
- package/dist/{chunk-BS52P2CM.js → chunk-OQ7SBQ2Z.js} +7 -7
- package/dist/{chunk-OMSH46JK.js → chunk-OUDGBJC2.js} +16 -9
- package/dist/{chunk-USH4VU5D.js → chunk-OUGTAOGA.js} +2 -2
- package/dist/chunk-OWP5FCYM.js +60 -0
- package/dist/{chunk-YEGGQG5E.js → chunk-P36PTWBM.js} +8 -8
- package/dist/{chunk-IKRM64KR.js → chunk-P6Y2J2QY.js} +12 -12
- package/dist/{chunk-P4QTTCVK.js → chunk-PDJL2HO5.js} +24 -22
- package/dist/{chunk-WDJGJ3HV.js → chunk-PPKH6ULR.js} +152 -20
- package/dist/{chunk-5OVSDV77.js → chunk-Q4PFF2ZE.js} +8 -8
- package/dist/chunk-Q7EUPQEG.js +5 -0
- package/dist/{chunk-YRKAJ42V.js → chunk-QC6GSNIK.js} +7074 -3456
- package/dist/chunk-QCRQNYGI.js +211 -0
- package/dist/chunk-QDF533AW.js +90 -0
- package/dist/chunk-QDGNDNBG.js +50 -0
- package/dist/{chunk-2ULVUSIP.js → chunk-QGMD3PYL.js} +31 -24
- package/dist/{chunk-QEP4HTJE.js → chunk-QLT3WYTD.js} +6 -6
- package/dist/{chunk-GX67TNFA.js → chunk-QNDMAKQS.js} +11 -3
- package/dist/{chunk-XM3JE4QY.js → chunk-QNXMVJMA.js} +8 -8
- package/dist/{chunk-XP5DF5MC.js → chunk-QPAANKUR.js} +13 -12
- package/dist/{chunk-SD3PGZSR.js → chunk-QS4VX3HZ.js} +1 -1
- package/dist/{chunk-ZD64ZR64.js → chunk-QSM4K6LI.js} +7 -7
- package/dist/{chunk-Z4N7BKLN.js → chunk-QUFZDWPC.js} +8 -8
- package/dist/{chunk-ELNLHU7Y.js → chunk-QXXEOH3A.js} +18 -6
- package/dist/{chunk-QA4O2GGC.js → chunk-R4TUWD4C.js} +17 -1
- package/dist/{chunk-TAIYQDIV.js → chunk-ROI64BAI.js} +22 -21
- package/dist/{chunk-NMGFXT4S.js → chunk-RPVL3RTX.js} +19 -18
- package/dist/{chunk-62FMA437.js → chunk-RUNHVUCW.js} +16 -15
- package/dist/{chunk-I2M7MXSV.js → chunk-RWYPLODE.js} +9 -9
- package/dist/{chunk-5K6ZKHZR.js → chunk-RZYRUXSU.js} +4 -4
- package/dist/{chunk-TVFADTAT.js → chunk-S6TLXRBR.js} +7 -7
- package/dist/{chunk-PCZ4C2V7.js → chunk-SCOP3J6X.js} +7 -7
- package/dist/{chunk-JXLUHMTC.js → chunk-SCP24MJX.js} +24 -23
- package/dist/{chunk-R6HJ4SDB.js → chunk-SF3HXNXR.js} +6 -6
- package/dist/{chunk-7F4GZ7U2.js → chunk-SFCFL7Y5.js} +1 -1
- package/dist/{chunk-5RDKQOY3.js → chunk-SHFY73RI.js} +53 -112
- package/dist/{chunk-H75SPCAW.js → chunk-SHIARIEZ.js} +20 -19
- package/dist/chunk-SMFFUFMN.js +1876 -0
- package/dist/{chunk-JQGWP3SC.js → chunk-SVOGRJO6.js} +197 -124
- package/dist/chunk-SVZAAOHJ.js +46 -0
- package/dist/{chunk-BJDVI5W6.js → chunk-SZOU32VF.js} +21 -20
- package/dist/{chunk-MXPKXCGP.js → chunk-T2MN24LZ.js} +1 -1
- package/dist/{chunk-A3AADMM2.js → chunk-TD5WWJLN.js} +6 -6
- package/dist/{chunk-SXF66YNZ.js → chunk-TFN2N227.js} +6 -6
- package/dist/{chunk-RSA5JJMN.js → chunk-TFXNOQEU.js} +28 -27
- package/dist/{chunk-BEDZNT62.js → chunk-TMETWJFO.js} +11 -11
- package/dist/chunk-TNSAIISO.js +50 -0
- package/dist/{chunk-IDTVBZQI.js → chunk-TRJO2I4S.js} +3 -3
- package/dist/{chunk-IFDCCCEN.js → chunk-TRSNIJNM.js} +7 -7
- package/dist/{chunk-GDGE7ZHC.js → chunk-U3Z2QZE3.js} +6 -6
- package/dist/{chunk-GVOQJPKA.js → chunk-U7L3ORPK.js} +22 -21
- package/dist/{chunk-5UJ7C7IH.js → chunk-UDM6HGF4.js} +6 -6
- package/dist/{chunk-Z3KEX7ON.js → chunk-UDM7LXNJ.js} +7 -7
- package/dist/chunk-UDTO3U6E.js +35 -0
- package/dist/{chunk-UVKJVTKX.js → chunk-UEUPEUZX.js} +3 -3
- package/dist/chunk-UWBODTY7.js +514 -0
- package/dist/{chunk-KGT5RIGE.js → chunk-UYYYQTPD.js} +84 -51
- package/dist/{chunk-LKRMVWXB.js → chunk-V34N6JAN.js} +32 -31
- package/dist/{chunk-RX56MZLX.js → chunk-V3Y5P7OS.js} +24 -23
- package/dist/chunk-V6MLVGTP.js +89 -0
- package/dist/chunk-VC2XHC7P.js +424 -0
- package/dist/{chunk-MM5OAVSW.js → chunk-VCYE4MUD.js} +29 -28
- package/dist/{chunk-AGAFNUYZ.js → chunk-VN2VJ6BV.js} +19 -15
- package/dist/{chunk-DBVQEPZB.js → chunk-VVLWEM2Y.js} +6 -6
- package/dist/{chunk-F56DNMDD.js → chunk-VWCNMDMZ.js} +5 -5
- package/dist/{chunk-LNGFTPU7.js → chunk-W2A4NHQD.js} +25 -24
- package/dist/{chunk-LQD3R6NZ.js → chunk-W6OY2PMB.js} +10 -10
- package/dist/{chunk-IP6TSICI.js → chunk-WC6DHBVG.js} +16 -15
- package/dist/{chunk-MELS6T5J.js → chunk-WCA3WIGG.js} +5 -5
- package/dist/{chunk-GLISHJ4G.js → chunk-WJWSB65O.js} +1602 -452
- package/dist/{chunk-77REYYY5.js → chunk-WNPGLGCJ.js} +5 -5
- package/dist/chunk-WTOVWEY3.js +67 -0
- package/dist/{chunk-WS7KBKP4.js → chunk-X5B7KYPD.js} +507 -20
- package/dist/{chunk-O6DJMDBR.js → chunk-X73WLHSN.js} +7 -7
- package/dist/{chunk-YGNQUFVZ.js → chunk-XIIT4PVT.js} +3 -3
- package/dist/{chunk-5P4PNGPL.js → chunk-XLTT5QCX.js} +28 -25
- package/dist/{chunk-NPZ4KXIV.js → chunk-XMIS25ZJ.js} +21 -20
- package/dist/{chunk-NB664KWQ.js → chunk-XPDQ4T6G.js} +27 -26
- package/dist/{chunk-EAGSM3XY.js → chunk-XRWUYOX3.js} +138 -22
- package/dist/{chunk-2VN4TLGI.js → chunk-XZY4GTCX.js} +14 -9
- package/dist/{chunk-QSKY7FE3.js → chunk-Y2TVTI4P.js} +121 -15
- package/dist/{chunk-XVQQ3BQS.js → chunk-Y2U4CSCA.js} +28 -27
- package/dist/chunk-Y2U63JKE.js +41 -0
- package/dist/{chunk-UJ535VWR.js → chunk-Y6S7VCYN.js} +6 -6
- package/dist/{chunk-SEBBJQWK.js → chunk-YAPMGK7E.js} +11 -11
- package/dist/{chunk-CNF7D3A7.js → chunk-YAPVAYZN.js} +3 -3
- package/dist/{chunk-B2U4AOZ5.js → chunk-YCBDNWX3.js} +78 -57
- package/dist/{chunk-CGVRLQAY.js → chunk-YIGSUTW2.js} +1329 -92
- package/dist/{chunk-J65TN6QU.js → chunk-YJTBE6AJ.js} +5 -5
- package/dist/chunk-YQ3IXQIH.js +185 -0
- package/dist/{chunk-ZJQ64T6M.js → chunk-YRHKEXTP.js} +11 -11
- package/dist/{chunk-MN2XDLDM.js → chunk-YSSFS3YC.js} +17 -17
- package/dist/{chunk-BPDS7KUR.js → chunk-YXG2VQJJ.js} +200 -56
- package/dist/{chunk-XC5ZDFW7.js → chunk-Z4GLFTEH.js} +8 -8
- package/dist/{chunk-7X3WLAKP.js → chunk-Z65FWO6A.js} +157 -89
- package/dist/{chunk-OW53P52N.js → chunk-ZDG637ZT.js} +22 -21
- package/dist/{chunk-BIQNPWGX.js → chunk-ZIAMPN7N.js} +6 -6
- package/dist/chunk-ZIIBQHCX.js +53 -0
- package/dist/{chunk-RFQW7XT3.js → chunk-ZJJMYPGZ.js} +57 -27
- package/dist/{chunk-Y6KPWRZJ.js → chunk-ZOAX7W5S.js} +11 -11
- package/dist/chunk-ZSSR5GGB.js +48 -0
- package/dist/files.json +655 -551
- package/dist/fixtures/forge/expected/crosscheck.json +726 -0
- package/dist/fixtures/forge/slots/README.md +13 -0
- package/dist/fixtures/forge/slots/build.json +2686 -0
- package/dist/fixtures/forge/slots/crosscheck/forge-ledger.crosscheck.yaml +8 -0
- package/dist/fixtures/forge/slots/facts/forge-ledger.jsonl +17 -0
- package/dist/fixtures/forge/slots/facts/forge-ledger.meta.json +9 -0
- package/dist/fixtures/forge/slots/legacy/joins.json +113 -0
- package/dist/fixtures/forge/slots/readers/forge-events.json +306 -0
- package/dist/fixtures/forge/slots/readers/forge-gateway.json +238 -0
- package/dist/fixtures/forge/slots/readers/forge-infra.json +264 -0
- package/dist/fixtures/forge/slots/readers/forge-ledger.json +756 -0
- package/dist/fixtures/forge/slots/readers/forge-portal-bff.json +349 -0
- package/dist/fixtures/forge/slots/readers/forge-portal-ui.json +214 -0
- package/dist/fixtures/forge/slots/readers/forge-reports-job.json +258 -0
- package/dist/packages/sdk/npm/index.js +3859 -2939
- package/dist/packages/ui/dist/assets/{elk-api-ts8TigYQ.js → elk-api-CPE6PVL8.js} +2 -2
- package/dist/packages/ui/dist/assets/index-BYcVqj0l.js +65 -0
- package/dist/packages/ui/dist/assets/index-DF52Ejvz.css +1 -0
- package/dist/packages/ui/dist/index.html +2 -2
- package/package.json +5 -5
- package/dist/chunk-24OXGB3P.js +0 -82
- package/dist/chunk-2RABF6RT.js +0 -36
- package/dist/chunk-5CPZIWIN.js +0 -38
- package/dist/chunk-7YSMZEO3.js +0 -55
- package/dist/chunk-AENMOZMM.js +0 -42
- package/dist/chunk-BDKYHCGI.js +0 -71
- package/dist/chunk-BMMTWRWE.js +0 -50
- package/dist/chunk-CQRFCWQV.js +0 -45
- package/dist/chunk-CVWKS6GO.js +0 -50
- package/dist/chunk-D2CGJ7RR.js +0 -46
- package/dist/chunk-D7QIZLWB.js +0 -38
- package/dist/chunk-DM3H4V2G.js +0 -62
- package/dist/chunk-EJGUEUXG.js +0 -51
- package/dist/chunk-ELKTDXV3.js +0 -67
- package/dist/chunk-EP7ZBZLT.js +0 -170
- package/dist/chunk-EXGXCVWC.js +0 -52
- package/dist/chunk-FJS2FZFZ.js +0 -41
- package/dist/chunk-G3ZFEHCX.js +0 -925
- package/dist/chunk-GAU2IFIC.js +0 -33
- package/dist/chunk-GPOL5H3B.js +0 -55
- package/dist/chunk-HD72AL3L.js +0 -43
- package/dist/chunk-K4C2DWOZ.js +0 -232
- package/dist/chunk-KY3BUZYI.js +0 -54
- package/dist/chunk-LMNCRSER.js +0 -257
- package/dist/chunk-LPXH2DA4.js +0 -40
- package/dist/chunk-MLUHBVCI.js +0 -45
- package/dist/chunk-ONB7M2AF.js +0 -52
- package/dist/chunk-QBK33722.js +0 -51
- package/dist/chunk-S7I7SLZN.js +0 -59
- package/dist/chunk-UCQB6NKS.js +0 -192
- package/dist/chunk-UKMA5JFE.js +0 -52
- package/dist/chunk-X7QLAUNS.js +0 -47
- package/dist/packages/ui/dist/assets/index-CIfmX7DJ.css +0 -1
- package/dist/packages/ui/dist/assets/index-DNtpSfZS.js +0 -63
|
@@ -9,16 +9,18 @@ import {
|
|
|
9
9
|
orgPackDirOf,
|
|
10
10
|
runsDirOf,
|
|
11
11
|
toCanonicalYaml
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WJWSB65O.js";
|
|
13
13
|
import {
|
|
14
|
+
killProcessTree,
|
|
15
|
+
trackTree,
|
|
14
16
|
withSharedFileLock
|
|
15
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-SMFFUFMN.js";
|
|
16
18
|
import {
|
|
17
19
|
ChangeRepos,
|
|
18
20
|
RecordId,
|
|
19
21
|
RepoManifest,
|
|
20
22
|
WORKSPACE_SCHEMA_VERSION
|
|
21
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-A3LVMCA5.js";
|
|
22
24
|
import {
|
|
23
25
|
require_dist
|
|
24
26
|
} from "./chunk-BQGDB6ZL.js";
|
|
@@ -40,6 +42,12 @@ var GitError = class extends Error {
|
|
|
40
42
|
this.name = "GitError";
|
|
41
43
|
}
|
|
42
44
|
};
|
|
45
|
+
var GitStoppedError = class extends GitError {
|
|
46
|
+
constructor(args) {
|
|
47
|
+
super(`git ${args[0] ?? ""} stopped`, args, null, "");
|
|
48
|
+
this.name = "GitStoppedError";
|
|
49
|
+
}
|
|
50
|
+
};
|
|
43
51
|
function createGit(opts = {}) {
|
|
44
52
|
const env = {
|
|
45
53
|
...opts.env ?? process.env,
|
|
@@ -48,15 +56,30 @@ function createGit(opts = {}) {
|
|
|
48
56
|
LC_ALL: "C"
|
|
49
57
|
};
|
|
50
58
|
const pre = process.platform === "win32" ? ["-c", "core.longpaths=true"] : [];
|
|
51
|
-
return (args, cwd) => new Promise((resolve, reject) => {
|
|
52
|
-
|
|
59
|
+
return (args, cwd, o = {}) => new Promise((resolve, reject) => {
|
|
60
|
+
const signal = o.signal;
|
|
61
|
+
if (signal?.aborted) {
|
|
62
|
+
reject(new GitStoppedError(args));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
let stopped = false;
|
|
66
|
+
const child = execFile("git", [...pre, ...args], {
|
|
53
67
|
cwd,
|
|
54
68
|
env,
|
|
55
69
|
timeout: opts.timeoutMs ?? 10 * 6e4,
|
|
56
70
|
maxBuffer: 64 * 1024 * 1024,
|
|
57
71
|
windowsHide: true,
|
|
58
|
-
encoding: "utf8"
|
|
72
|
+
encoding: "utf8",
|
|
73
|
+
// A git that may be stopped runs in its own process group (POSIX), so the stop takes
|
|
74
|
+
// what it started too. Only then: a terminal's Ctrl+C still reaches a plain git.
|
|
75
|
+
...signal && process.platform !== "win32" ? { detached: true } : {}
|
|
59
76
|
}, (err, stdout, stderr) => {
|
|
77
|
+
signal?.removeEventListener("abort", onAbort);
|
|
78
|
+
untrack?.();
|
|
79
|
+
if (stopped) {
|
|
80
|
+
reject(new GitStoppedError(args));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
60
83
|
if (err) {
|
|
61
84
|
const code = typeof err.code === "number" ? err.code : null;
|
|
62
85
|
const detail = (stderr || err.message).trim().split(/\r?\n/).slice(-3).join(" ");
|
|
@@ -65,6 +88,15 @@ function createGit(opts = {}) {
|
|
|
65
88
|
}
|
|
66
89
|
resolve({ stdout, stderr });
|
|
67
90
|
});
|
|
91
|
+
const onAbort = () => {
|
|
92
|
+
stopped = true;
|
|
93
|
+
killProcessTree(child);
|
|
94
|
+
};
|
|
95
|
+
const untrack = signal ? trackTree(child, (s) => {
|
|
96
|
+
stopped = true;
|
|
97
|
+
killProcessTree(child, s);
|
|
98
|
+
}) : void 0;
|
|
99
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
68
100
|
});
|
|
69
101
|
}
|
|
70
102
|
|
|
@@ -367,15 +399,22 @@ async function removeEditorWorkspaces(root, change) {
|
|
|
367
399
|
}
|
|
368
400
|
|
|
369
401
|
// packages/workspace/dist/state.js
|
|
370
|
-
async function checkoutState(dir, git = createGit()) {
|
|
371
|
-
const
|
|
402
|
+
async function checkoutState(dir, git = createGit(), o = {}) {
|
|
403
|
+
const head = (await git(["show", "-s", "--format=%H%n%cI", "HEAD"], dir)).stdout.trim();
|
|
404
|
+
const [commit = "", committedAt] = head.split("\n");
|
|
372
405
|
const status = (await git(["status", "--porcelain", "--untracked-files=normal"], dir)).stdout.trim();
|
|
373
|
-
|
|
406
|
+
const ignore = o.ignore ?? [];
|
|
407
|
+
const changed = status.split("\n").filter(Boolean).map((l) => l.slice(3).replace(/^"|"$/g, "")).flatMap((p) => p.split(" -> ")).filter((p) => !ignore.some((i) => p === i.replace(/\/$/, "") || p.startsWith(i)));
|
|
408
|
+
return {
|
|
409
|
+
commit: commit.trim(),
|
|
410
|
+
dirty: changed.length > 0,
|
|
411
|
+
...committedAt?.trim() ? { committedAt: committedAt.trim() } : {}
|
|
412
|
+
};
|
|
374
413
|
}
|
|
375
414
|
|
|
376
415
|
// packages/workspace/dist/manager.js
|
|
377
|
-
import { existsSync as existsSync2 } from "node:fs";
|
|
378
|
-
import { mkdir as mkdir3, readdir as readdir3, rm as rm2 } from "node:fs/promises";
|
|
416
|
+
import { constants as fsConstants, existsSync as existsSync2, statSync } from "node:fs";
|
|
417
|
+
import { copyFile, lstat, mkdir as mkdir3, readdir as readdir3, readFile as readFile3, readlink, realpath, rm as rm2, rmdir, symlink, unlink, writeFile as writeFile4 } from "node:fs/promises";
|
|
379
418
|
import { basename, dirname as dirname2, join as join4 } from "node:path";
|
|
380
419
|
var BASE_CLONE_WAIT_MS = 30 * 6e4;
|
|
381
420
|
function withBaseCloneLock(dest, id2, work, waitMs = BASE_CLONE_WAIT_MS) {
|
|
@@ -413,8 +452,79 @@ async function remoteDefaultBranch(dir, git = createGit()) {
|
|
|
413
452
|
return void 0;
|
|
414
453
|
}
|
|
415
454
|
}
|
|
455
|
+
var SYNC_CHECKOUT_MARK = "atticus-sync-checkout.json";
|
|
456
|
+
var TAKES_INDEX_LOCK = /* @__PURE__ */ new Set(["checkout", "status", "sparse-checkout", "read-tree", "reset"]);
|
|
457
|
+
var SHA = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/;
|
|
458
|
+
var PUT_BACK_DIR = "atticus-put-back";
|
|
459
|
+
function linkTextIsBlob(text, mode, blob, platform = process.platform) {
|
|
460
|
+
if (mode !== "120000")
|
|
461
|
+
return false;
|
|
462
|
+
if (platform !== "win32")
|
|
463
|
+
return text === blob;
|
|
464
|
+
const slashed = (s) => s.replaceAll("\\", "/");
|
|
465
|
+
return slashed(text) === slashed(blob);
|
|
466
|
+
}
|
|
467
|
+
function sayKept(kept) {
|
|
468
|
+
const said = kept.slice(0, 5).map((k2) => `your version of ${k2.path} was kept at ${k2.copy}`).join("; ");
|
|
469
|
+
const k = kept[0];
|
|
470
|
+
const folder = k.copy.slice(0, k.copy.length - k.path.length - 1);
|
|
471
|
+
return kept.length > 5 ? `${said}; and ${kept.length - 5} more, kept under ${folder}` : said;
|
|
472
|
+
}
|
|
473
|
+
function inGroups(paths, max = 8e3) {
|
|
474
|
+
const out = [];
|
|
475
|
+
let cur = [];
|
|
476
|
+
let len = 0;
|
|
477
|
+
for (const p of paths) {
|
|
478
|
+
if (cur.length > 0 && len + p.length + 1 > max) {
|
|
479
|
+
out.push(cur);
|
|
480
|
+
cur = [];
|
|
481
|
+
len = 0;
|
|
482
|
+
}
|
|
483
|
+
cur.push(p);
|
|
484
|
+
len += p.length + 1;
|
|
485
|
+
}
|
|
486
|
+
if (cur.length > 0)
|
|
487
|
+
out.push(cur);
|
|
488
|
+
return out;
|
|
489
|
+
}
|
|
490
|
+
async function throughLink(dest, dir) {
|
|
491
|
+
if (dir === "." || dir === "")
|
|
492
|
+
return false;
|
|
493
|
+
let at = dest;
|
|
494
|
+
for (const part of dir.split("/")) {
|
|
495
|
+
at = join4(at, part);
|
|
496
|
+
const st = await lstat(at).catch(() => void 0);
|
|
497
|
+
if (!st)
|
|
498
|
+
return false;
|
|
499
|
+
if (st.isSymbolicLink())
|
|
500
|
+
return true;
|
|
501
|
+
}
|
|
502
|
+
return false;
|
|
503
|
+
}
|
|
504
|
+
function statusEntries(z) {
|
|
505
|
+
return z.split("\0").filter((e) => e.length > 3).map((e) => [e.slice(0, 2), e.slice(3)]);
|
|
506
|
+
}
|
|
507
|
+
function sayPaths(entries) {
|
|
508
|
+
const said = entries.slice(0, 5).map(([xy, p]) => `${p} (${xy === "??" ? "not tracked" : "changed"})`).join(", ");
|
|
509
|
+
return entries.length > 5 ? `${said} and ${entries.length - 5} more` : said;
|
|
510
|
+
}
|
|
416
511
|
function createWorkspace(root, git = createGit(), opts = {}) {
|
|
417
|
-
const
|
|
512
|
+
const signal = opts.signal;
|
|
513
|
+
let busy;
|
|
514
|
+
let running;
|
|
515
|
+
let lockAtStop;
|
|
516
|
+
signal?.addEventListener("abort", () => {
|
|
517
|
+
if (busy && running && TAKES_INDEX_LOCK.has(running))
|
|
518
|
+
lockAtStop = lockOf(busy);
|
|
519
|
+
}, { once: true });
|
|
520
|
+
const g = async (args, cwd = root) => {
|
|
521
|
+
running = args[0];
|
|
522
|
+
try {
|
|
523
|
+
return await (signal ? git(args, cwd, { signal }) : git(args, cwd));
|
|
524
|
+
} finally {
|
|
525
|
+
running = void 0;
|
|
526
|
+
}
|
|
527
|
+
};
|
|
418
528
|
const withBaseClone = (dest, id2, work) => withBaseCloneLock(dest, id2, work, opts.lockWaitMs);
|
|
419
529
|
const head = async (cwd) => (await g(["rev-parse", "HEAD"], cwd)).stdout.trim();
|
|
420
530
|
const dirty = async (cwd) => (await g(["status", "--porcelain", "--untracked-files=normal"], cwd)).stdout.trim() !== "";
|
|
@@ -471,6 +581,344 @@ function createWorkspace(root, git = createGit(), opts = {}) {
|
|
|
471
581
|
await g(["checkout", "--quiet", "-B", branch, at], dest);
|
|
472
582
|
return { id: repo.id, action: "cloned", sha: await head(dest), from };
|
|
473
583
|
}
|
|
584
|
+
const markOf = (dest) => join4(dest, ".git", SYNC_CHECKOUT_MARK);
|
|
585
|
+
function lockOf(dest) {
|
|
586
|
+
try {
|
|
587
|
+
const st = statSync(join4(dest, ".git", "index.lock"), { throwIfNoEntry: false });
|
|
588
|
+
return st ? `${st.dev}:${st.ino}:${st.mtimeMs}` : void 0;
|
|
589
|
+
} catch {
|
|
590
|
+
return void 0;
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
async function dropKilledLock(dest, atStop) {
|
|
594
|
+
const now = lockOf(dest);
|
|
595
|
+
if (!now)
|
|
596
|
+
return true;
|
|
597
|
+
if (now !== atStop)
|
|
598
|
+
return false;
|
|
599
|
+
await rm2(join4(dest, ".git", "index.lock"), { force: true });
|
|
600
|
+
return true;
|
|
601
|
+
}
|
|
602
|
+
async function restoreBaseClone(repo, dest, atStop) {
|
|
603
|
+
const kept = [];
|
|
604
|
+
const no = (why) => ({ why, kept });
|
|
605
|
+
const mark = markOf(dest);
|
|
606
|
+
const keep = (what) => no(`${what}. Nothing was changed. To keep it, move it out of ${dest} (base clones are read-only) and sync again; or delete ${mark} to keep the clone as it is`);
|
|
607
|
+
const notOurs = (detail) => no(`its mark ${mark} isn't one a sync writes (${detail}). Nothing was changed. If nothing in ${dest} is yours, put it back with git -C ${dest} checkout --force ${repo.defaultBranch} and git -C ${dest} clean -fd, then delete the mark; or delete the mark to keep the clone as it is`);
|
|
608
|
+
let was;
|
|
609
|
+
try {
|
|
610
|
+
was = JSON.parse(await readFile3(mark, "utf8"));
|
|
611
|
+
} catch {
|
|
612
|
+
return notOurs("it can't be read");
|
|
613
|
+
}
|
|
614
|
+
if (typeof was !== "object" || was === null)
|
|
615
|
+
return notOurs("it can't be read");
|
|
616
|
+
const head2 = typeof was.head === "string" && SHA.test(was.head) ? was.head : "";
|
|
617
|
+
const target = typeof was.target === "string" && SHA.test(was.target) ? was.target : "";
|
|
618
|
+
if (!head2 || !target)
|
|
619
|
+
return notOurs("it names no commit it was on and none it fetched");
|
|
620
|
+
const branch = typeof was.branch === "string" ? was.branch : "";
|
|
621
|
+
if (branch !== repo.defaultBranch || branch.startsWith("-") || branch.startsWith("refs/"))
|
|
622
|
+
return notOurs(`its branch isn't ${repo.defaultBranch}, the manifest's`);
|
|
623
|
+
const ref = `refs/heads/${branch}`;
|
|
624
|
+
const read = async (args) => {
|
|
625
|
+
try {
|
|
626
|
+
return (await git(args, dest)).stdout.trim();
|
|
627
|
+
} catch {
|
|
628
|
+
return "";
|
|
629
|
+
}
|
|
630
|
+
};
|
|
631
|
+
const ok = (args) => git(args, dest).then(() => true, () => false);
|
|
632
|
+
try {
|
|
633
|
+
if ((await lstat(dest)).isSymbolicLink())
|
|
634
|
+
return keep(`${dest} is a link (to ${await realpath(dest).catch(() => "a folder that isn't there")}), not a base clone Atticus made`);
|
|
635
|
+
const noClone = no(`${dest} is no git clone of its own (its .git folder is broken). Nothing was changed. If nothing in it is yours, delete the folder ${dest} and sync again to clone it afresh; or delete ${mark} to keep it as it is`);
|
|
636
|
+
if (!(await lstat(join4(dest, ".git"))).isDirectory())
|
|
637
|
+
return noClone;
|
|
638
|
+
const top = await read(["rev-parse", "--show-toplevel"]);
|
|
639
|
+
if (!top || await realpath(top) !== await realpath(dest))
|
|
640
|
+
return noClone;
|
|
641
|
+
if (!await ok(["check-ref-format", ref]))
|
|
642
|
+
return notOurs(`${branch} is no branch name`);
|
|
643
|
+
if (await read(["symbolic-ref", "--quiet", "HEAD"]) !== ref)
|
|
644
|
+
return keep(`the base clone isn't on ${branch} as the sync left it`);
|
|
645
|
+
const origin = `refs/remotes/origin/${branch}`;
|
|
646
|
+
if (await read(["rev-parse", "--verify", "--quiet", origin]) !== target && !(await read(["rev-parse", "--verify", "--quiet", `${target}^{commit}`]) === target && (await ok(["merge-base", "--is-ancestor", target, origin]) || (await read(["reflog", "show", "--format=%H", origin, "--"])).split("\n").includes(target))))
|
|
647
|
+
return notOurs(`the commit it names as fetched was never origin/${branch}`);
|
|
648
|
+
const tip = await read(["rev-parse", "--verify", "--quiet", ref]);
|
|
649
|
+
if (tip !== head2 && tip !== target)
|
|
650
|
+
return keep(`${branch} is at ${tip.slice(0, 12) || "no commit"}, a commit that sync didn't leave`);
|
|
651
|
+
if (tip === target && target !== head2) {
|
|
652
|
+
const before = await read(["rev-parse", "--verify", "--quiet", `${ref}@{1}`]);
|
|
653
|
+
if (before !== head2 && !await ok(["reflog", "exists", ref]))
|
|
654
|
+
return no(`${branch} is at ${tip.slice(0, 12)}, the commit that sync fetched, but this clone's history can't show the sync left it (git keeps no reflog of ${branch} there). Nothing was changed. To let Atticus put it back, set ${branch} back to the commit it was on with git -C ${dest} update-ref ${ref} ${head2} ${target} and sync again; or delete ${mark} to keep the clone as it is`);
|
|
655
|
+
if (before !== head2)
|
|
656
|
+
return keep(`${branch} is at ${tip.slice(0, 12)} but wasn't moved there from ${head2.slice(0, 12)} by that sync`);
|
|
657
|
+
}
|
|
658
|
+
if (!await read(["rev-parse", "--verify", "--quiet", `${head2}^{commit}`]))
|
|
659
|
+
return notOurs(`it names a commit the clone hasn't got`);
|
|
660
|
+
const differ = (await git(["diff-tree", "-r", "-z", "--no-renames", "--no-commit-id", head2, target], dest)).stdout.split("\0");
|
|
661
|
+
const added = /* @__PURE__ */ new Set();
|
|
662
|
+
const inBoth = /* @__PURE__ */ new Set();
|
|
663
|
+
const blobs = /* @__PURE__ */ new Map();
|
|
664
|
+
const entries = /* @__PURE__ */ new Map();
|
|
665
|
+
const ignoreCase = await read(["config", "--bool", "core.ignorecase"]) === "true";
|
|
666
|
+
const keyOf = (p) => ignoreCase ? p.toLowerCase() : p;
|
|
667
|
+
const NONE = /^0+$/;
|
|
668
|
+
const swapped = [];
|
|
669
|
+
for (let i = 0; i + 1 < differ.length; i += 2) {
|
|
670
|
+
const [from, to, was2, now2, st] = differ[i].split(" ");
|
|
671
|
+
const p = differ[i + 1];
|
|
672
|
+
(st === "A" ? added : inBoth).add(p);
|
|
673
|
+
const modes = [from.slice(1), to];
|
|
674
|
+
if (modes.includes("160000") && !modes.includes("000000") && modes[0] !== modes[1])
|
|
675
|
+
swapped.push(p);
|
|
676
|
+
const known = blobs.get(keyOf(p)) ?? /* @__PURE__ */ new Set();
|
|
677
|
+
for (const b of [was2, now2])
|
|
678
|
+
if (b && !NONE.test(b))
|
|
679
|
+
known.add(b);
|
|
680
|
+
blobs.set(keyOf(p), known);
|
|
681
|
+
const both = entries.get(keyOf(p)) ?? [];
|
|
682
|
+
[was2, now2].forEach((b, k) => {
|
|
683
|
+
if (b && !NONE.test(b))
|
|
684
|
+
both.push([modes[k], b]);
|
|
685
|
+
});
|
|
686
|
+
entries.set(keyOf(p), both);
|
|
687
|
+
}
|
|
688
|
+
const inDiff = (p) => added.has(p) || inBoth.has(p);
|
|
689
|
+
const ownLinks = [];
|
|
690
|
+
for (const p of swapped) {
|
|
691
|
+
if (await throughLink(dest, dirname2(p)))
|
|
692
|
+
return keep(`a folder on the way to ${p} is a link, where one commit has a submodule and the other a file`);
|
|
693
|
+
const st = await lstat(join4(dest, p)).catch(() => void 0);
|
|
694
|
+
if (st?.isSymbolicLink()) {
|
|
695
|
+
const to = await readlink(join4(dest, p));
|
|
696
|
+
if (!await gitsOwnLink(dest, to, entries.get(keyOf(p)) ?? []))
|
|
697
|
+
return keep(`${p} is a link, where one commit has a submodule and the other a file`);
|
|
698
|
+
ownLinks.push(p);
|
|
699
|
+
} else if (st?.isDirectory() && (await readdir3(join4(dest, p))).length > 0)
|
|
700
|
+
return keep(`${p} is a folder with files in it, where one commit has a submodule and the other a file`);
|
|
701
|
+
}
|
|
702
|
+
const status = async (skip = []) => statusEntries((await git([
|
|
703
|
+
"status",
|
|
704
|
+
"--porcelain=v1",
|
|
705
|
+
"-z",
|
|
706
|
+
"--no-renames",
|
|
707
|
+
"--untracked-files=all",
|
|
708
|
+
"--ignore-submodules=none",
|
|
709
|
+
// each path as written, from the clone's top (a link of git's own, put back below)
|
|
710
|
+
...skip.length ? ["--", ...skip.map((p) => `:(top,exclude,literal)${p}`)] : []
|
|
711
|
+
], dest)).stdout);
|
|
712
|
+
const theirs = (await status(ownLinks)).filter(([, p]) => !inDiff(p));
|
|
713
|
+
if (theirs.length > 0)
|
|
714
|
+
return keep(`what that checkout didn't write is changed: ${sayPaths(theirs)}`);
|
|
715
|
+
const staged = /* @__PURE__ */ new Set();
|
|
716
|
+
const indexed = [];
|
|
717
|
+
for (const e of (await git(["ls-files", "--stage", "-z"], dest)).stdout.split("\0")) {
|
|
718
|
+
const tab = e.indexOf(" ");
|
|
719
|
+
if (tab >= 0)
|
|
720
|
+
indexed.push(e.slice(tab + 1));
|
|
721
|
+
if (tab < 0 || !inDiff(e.slice(tab + 1)))
|
|
722
|
+
continue;
|
|
723
|
+
const [, blob, stage] = e.slice(0, tab).split(" ");
|
|
724
|
+
if (stage !== "0" || !blobs.get(keyOf(e.slice(tab + 1)))?.has(blob))
|
|
725
|
+
staged.add(e.slice(tab + 1));
|
|
726
|
+
}
|
|
727
|
+
if (staged.size > 0)
|
|
728
|
+
return no(`what that checkout didn't write is staged: ${sayPaths([...staged].map((p) => ["A ", p]))}. Nothing was changed. To keep it, move it out of ${dest} (base clones are read-only) and unstage it there (git -C ${dest} restore --staged -- <path>), then sync again; or delete ${mark} to keep the clone as it is`);
|
|
729
|
+
if (!await dropKilledLock(dest, atStop))
|
|
730
|
+
return no(`git's lock ${join4(dest, ".git", "index.lock")} is there: if no git is running in ${dest}, delete it; the next sync puts the clone back (its mark ${mark} stays until then)`);
|
|
731
|
+
if (tip !== head2)
|
|
732
|
+
await git(["update-ref", "-m", "atticus: a stopped sync put back", ref, head2, tip], dest);
|
|
733
|
+
for (const p of ownLinks)
|
|
734
|
+
if ((await lstat(join4(dest, p)).catch(() => void 0))?.isSymbolicLink())
|
|
735
|
+
await unlink(join4(dest, p));
|
|
736
|
+
const now = (await status()).map(([, p]) => p);
|
|
737
|
+
const strays = ignoreCase ? await hiddenByCase(dest, [...added], now, indexed) : [];
|
|
738
|
+
kept.push(...await keepTheirs(dest, [...now, ...strays], (p) => blobs.get(keyOf(p)) ?? /* @__PURE__ */ new Set(), (p) => entries.get(keyOf(p)) ?? [], new Set(indexed)));
|
|
739
|
+
const back = now.filter((p) => inBoth.has(p));
|
|
740
|
+
const out = now.filter((p) => added.has(p));
|
|
741
|
+
for (const ps of inGroups(out))
|
|
742
|
+
await git(["update-index", "--force-remove", "--", ...ps], dest);
|
|
743
|
+
const lit = (ps) => ps.map((p) => `:(literal)${p}`);
|
|
744
|
+
const files = [];
|
|
745
|
+
for (const p of out) {
|
|
746
|
+
const st = await lstat(join4(dest, p)).catch(() => void 0);
|
|
747
|
+
if (st && !st.isDirectory() && !await throughLink(dest, dirname2(p)))
|
|
748
|
+
files.push(p);
|
|
749
|
+
}
|
|
750
|
+
for (const ps of inGroups(files))
|
|
751
|
+
await git(["clean", "-fq", "--", ...lit(ps)], dest);
|
|
752
|
+
for (const p of strays)
|
|
753
|
+
await rm2(join4(dest, p), { force: true });
|
|
754
|
+
const headFolders = /* @__PURE__ */ new Set();
|
|
755
|
+
for (const e of (await git(["ls-tree", "-r", "-t", "-z", head2], dest)).stdout.split("\0")) {
|
|
756
|
+
const [, type] = e.slice(0, Math.max(0, e.indexOf(" "))).split(" ");
|
|
757
|
+
if (type === "tree" || type === "commit")
|
|
758
|
+
headFolders.add(keyOf(e.slice(e.indexOf(" ") + 1)));
|
|
759
|
+
}
|
|
760
|
+
for (const p of added)
|
|
761
|
+
for (let d = dirname2(p); d !== "." && d !== "" && d !== "/"; d = dirname2(d))
|
|
762
|
+
if (headFolders.has(keyOf(d)) || await throughLink(dest, d) || !await rmdir(join4(dest, d)).then(() => true, () => false))
|
|
763
|
+
break;
|
|
764
|
+
for (const ps of inGroups(back))
|
|
765
|
+
await git(["checkout", "--quiet", head2, "--", ...lit(ps)], dest);
|
|
766
|
+
const left = await status();
|
|
767
|
+
if (left.length > 0)
|
|
768
|
+
return no(`putting it back left ${sayPaths(left)}; its mark ${mark} stays, so the next sync tries again${kept.length ? `; ${sayKept(kept)}` : ""}`);
|
|
769
|
+
await rm2(mark, { force: true });
|
|
770
|
+
return { kept };
|
|
771
|
+
} catch (e) {
|
|
772
|
+
return no(`${e.message}; its mark ${mark} stays, so the next sync tries again${kept.length ? `; ${sayKept(kept)}` : ""}`);
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
async function hiddenByCase(dest, added, listed, indexed) {
|
|
776
|
+
const seen = new Set(listed);
|
|
777
|
+
const exact = new Set(indexed);
|
|
778
|
+
const byCase = /* @__PURE__ */ new Map();
|
|
779
|
+
for (const q of indexed)
|
|
780
|
+
byCase.set(q.toLowerCase(), [...byCase.get(q.toLowerCase()) ?? [], q]);
|
|
781
|
+
const out = [];
|
|
782
|
+
for (const p of added) {
|
|
783
|
+
if (seen.has(p) || exact.has(p))
|
|
784
|
+
continue;
|
|
785
|
+
const others = byCase.get(p.toLowerCase()) ?? [];
|
|
786
|
+
if (others.length === 0)
|
|
787
|
+
continue;
|
|
788
|
+
const st = await lstat(join4(dest, p)).catch(() => void 0);
|
|
789
|
+
if (!st || st.isDirectory())
|
|
790
|
+
continue;
|
|
791
|
+
let same = false;
|
|
792
|
+
for (const q of others) {
|
|
793
|
+
const o = await lstat(join4(dest, q)).catch(() => void 0);
|
|
794
|
+
if (o && o.dev === st.dev && o.ino === st.ino)
|
|
795
|
+
same = true;
|
|
796
|
+
}
|
|
797
|
+
if (!same && !await throughLink(dest, dirname2(p)))
|
|
798
|
+
out.push(p);
|
|
799
|
+
}
|
|
800
|
+
return out;
|
|
801
|
+
}
|
|
802
|
+
async function gitsOwnLink(dest, to, entries) {
|
|
803
|
+
for (const [mode, b] of entries) {
|
|
804
|
+
if (mode !== "120000")
|
|
805
|
+
continue;
|
|
806
|
+
const text = (await git(["cat-file", "blob", b], dest).catch(() => void 0))?.stdout;
|
|
807
|
+
if (text !== void 0 && linkTextIsBlob(to, mode, text))
|
|
808
|
+
return true;
|
|
809
|
+
}
|
|
810
|
+
return false;
|
|
811
|
+
}
|
|
812
|
+
async function keepTheirs(dest, paths, known, entries, indexed) {
|
|
813
|
+
const files = [];
|
|
814
|
+
const links = [];
|
|
815
|
+
const seen = /* @__PURE__ */ new Map();
|
|
816
|
+
const first = [...new Set(paths)].sort((a, b) => +indexed.has(b) - +indexed.has(a));
|
|
817
|
+
for (const p of first) {
|
|
818
|
+
if (await throughLink(dest, dirname2(p)))
|
|
819
|
+
continue;
|
|
820
|
+
const st = await lstat(join4(dest, p), { bigint: true }).catch(() => void 0);
|
|
821
|
+
if (!st)
|
|
822
|
+
continue;
|
|
823
|
+
const id2 = `${st.dev}:${st.ino}`;
|
|
824
|
+
const was = seen.get(id2);
|
|
825
|
+
if (st.ino !== 0n && was !== void 0 && was.toLowerCase() === p.toLowerCase())
|
|
826
|
+
continue;
|
|
827
|
+
if (was === void 0)
|
|
828
|
+
seen.set(id2, p);
|
|
829
|
+
if (st.isFile())
|
|
830
|
+
files.push(p);
|
|
831
|
+
else if (st.isSymbolicLink())
|
|
832
|
+
links.push(p);
|
|
833
|
+
}
|
|
834
|
+
const theirs = [];
|
|
835
|
+
for (const ps of inGroups(files)) {
|
|
836
|
+
const ids = (await git(["hash-object", "--", ...ps], dest)).stdout.trim().split("\n");
|
|
837
|
+
ps.forEach((p, i) => {
|
|
838
|
+
if (!known(p).has(ids[i].trim()))
|
|
839
|
+
theirs.push(p);
|
|
840
|
+
});
|
|
841
|
+
}
|
|
842
|
+
const linkText = /* @__PURE__ */ new Map();
|
|
843
|
+
for (const p of links) {
|
|
844
|
+
const to = await readlink(join4(dest, p));
|
|
845
|
+
linkText.set(p, to);
|
|
846
|
+
if (!await gitsOwnLink(dest, to, entries(p)))
|
|
847
|
+
theirs.push(p);
|
|
848
|
+
}
|
|
849
|
+
if (theirs.length === 0)
|
|
850
|
+
return [];
|
|
851
|
+
const top = join4(dest, ".git", PUT_BACK_DIR);
|
|
852
|
+
await mkdir3(top, { recursive: true });
|
|
853
|
+
if (!(await lstat(top)).isDirectory())
|
|
854
|
+
throw new Error(`${top} isn't a folder of its own (a link?): nothing was copied there`);
|
|
855
|
+
const stamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
856
|
+
let at = join4(top, stamp);
|
|
857
|
+
for (let n = 2; ; n++) {
|
|
858
|
+
try {
|
|
859
|
+
await mkdir3(at);
|
|
860
|
+
break;
|
|
861
|
+
} catch (e) {
|
|
862
|
+
if (e.code !== "EEXIST" || n > 100)
|
|
863
|
+
throw e;
|
|
864
|
+
at = join4(top, `${stamp}-${n}`);
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
const out = [];
|
|
868
|
+
for (const p of theirs) {
|
|
869
|
+
const copy = join4(at, ...p.split("/"));
|
|
870
|
+
await mkdir3(dirname2(copy), { recursive: true });
|
|
871
|
+
const to = linkText.get(p);
|
|
872
|
+
try {
|
|
873
|
+
if (to === void 0)
|
|
874
|
+
await copyFile(join4(dest, p), copy, fsConstants.COPYFILE_EXCL);
|
|
875
|
+
else
|
|
876
|
+
await symlink(to, copy).catch(() => writeFile4(copy, to, { flag: "wx" }));
|
|
877
|
+
} catch (e) {
|
|
878
|
+
if (e.code !== "EEXIST")
|
|
879
|
+
throw e;
|
|
880
|
+
const c = await lstat(copy);
|
|
881
|
+
const there = c.isSymbolicLink() ? await readlink(copy) === to : c.isFile() && (await readFile3(copy)).equals(to === void 0 ? await readFile3(join4(dest, p)) : Buffer.from(to));
|
|
882
|
+
if (!there)
|
|
883
|
+
throw e;
|
|
884
|
+
continue;
|
|
885
|
+
}
|
|
886
|
+
out.push({ path: p, copy });
|
|
887
|
+
}
|
|
888
|
+
return out;
|
|
889
|
+
}
|
|
890
|
+
async function stoppedOne(repo, dest, made, updatedTo) {
|
|
891
|
+
if (made) {
|
|
892
|
+
const gone = await rm2(dest, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 }).then(() => true).catch(() => false);
|
|
893
|
+
return {
|
|
894
|
+
id: repo.id,
|
|
895
|
+
action: "stopped",
|
|
896
|
+
reason: gone ? "stopped: the clone it had started was taken away; sync again to clone it" : `stopped: the clone it had started couldn't be taken away; delete ${dest} before you sync again`
|
|
897
|
+
};
|
|
898
|
+
}
|
|
899
|
+
if (updatedTo !== void 0)
|
|
900
|
+
return {
|
|
901
|
+
id: repo.id,
|
|
902
|
+
action: "stopped",
|
|
903
|
+
sha: updatedTo,
|
|
904
|
+
reason: `stopped once the base clone was updated, to ${repo.defaultBranch} at ${updatedTo.slice(0, 12)}; sync again to finish`
|
|
905
|
+
};
|
|
906
|
+
if (existsSync2(markOf(dest))) {
|
|
907
|
+
const { why, kept } = await restoreBaseClone(repo, dest, lockAtStop);
|
|
908
|
+
return {
|
|
909
|
+
id: repo.id,
|
|
910
|
+
action: "stopped",
|
|
911
|
+
...kept.length ? { kept } : {},
|
|
912
|
+
reason: why ? `stopped in the base clone's checkout, and it wasn't put back as it was: ${why}` : `stopped: the base clone is back as it was before this sync${kept.length ? `; ${sayKept(kept)}` : ""}; sync again`
|
|
913
|
+
};
|
|
914
|
+
}
|
|
915
|
+
await dropKilledLock(dest, lockAtStop).catch(() => false);
|
|
916
|
+
return {
|
|
917
|
+
id: repo.id,
|
|
918
|
+
action: "stopped",
|
|
919
|
+
reason: "stopped: the base clone is as it was before this sync; sync again"
|
|
920
|
+
};
|
|
921
|
+
}
|
|
474
922
|
async function syncOne(repo, local) {
|
|
475
923
|
if (repo.archived)
|
|
476
924
|
return { id: repo.id, action: "skipped", reason: "archived" };
|
|
@@ -483,6 +931,14 @@ function createWorkspace(root, git = createGit(), opts = {}) {
|
|
|
483
931
|
const dest = baseClonePath(root, repo.id);
|
|
484
932
|
const branch = repo.defaultBranch;
|
|
485
933
|
const made = !existsSync2(dest);
|
|
934
|
+
busy = made ? void 0 : dest;
|
|
935
|
+
let earlier = [];
|
|
936
|
+
let updatedTo;
|
|
937
|
+
const said = (r) => earlier.length === 0 ? r : {
|
|
938
|
+
...r,
|
|
939
|
+
kept: [...earlier, ...r.kept ?? []],
|
|
940
|
+
reason: `${r.reason ? `${r.reason}; ` : ""}an earlier sync's stopped checkout was put back first: ${sayKept(earlier)}`
|
|
941
|
+
};
|
|
486
942
|
try {
|
|
487
943
|
if (made) {
|
|
488
944
|
await mkdir3(dirname2(dest), { recursive: true });
|
|
@@ -511,33 +967,56 @@ function createWorkspace(root, git = createGit(), opts = {}) {
|
|
|
511
967
|
...await remoteDefault(dest)
|
|
512
968
|
};
|
|
513
969
|
}
|
|
970
|
+
if (existsSync2(markOf(dest))) {
|
|
971
|
+
const { why, kept } = await restoreBaseClone(repo, dest);
|
|
972
|
+
if (why)
|
|
973
|
+
return {
|
|
974
|
+
id: repo.id,
|
|
975
|
+
action: "failed",
|
|
976
|
+
...kept.length ? { kept } : {},
|
|
977
|
+
reason: `an earlier sync was stopped in the base clone's checkout, and it wasn't put back: ${why}`
|
|
978
|
+
};
|
|
979
|
+
earlier = kept;
|
|
980
|
+
}
|
|
514
981
|
if (await dirty(dest)) {
|
|
515
|
-
return {
|
|
982
|
+
return said({
|
|
516
983
|
id: repo.id,
|
|
517
984
|
action: "skipped",
|
|
518
985
|
sha: await head(dest),
|
|
519
986
|
reason: "the base clone has local changes; base clones are read-only"
|
|
520
|
-
};
|
|
987
|
+
});
|
|
521
988
|
}
|
|
989
|
+
const before = await head(dest);
|
|
522
990
|
await g(["fetch", "--no-tags", "origin", `+refs/heads/${branch}:refs/remotes/origin/${branch}`], dest);
|
|
991
|
+
const target = (await g(["rev-parse", "--verify", "--quiet", `refs/remotes/origin/${branch}^{commit}`], dest)).stdout.trim();
|
|
992
|
+
await writeFile4(markOf(dest), `${JSON.stringify({ head: before, target, branch, at: (/* @__PURE__ */ new Date()).toISOString() })}
|
|
993
|
+
`, "utf8");
|
|
523
994
|
await g(["checkout", "--quiet", "-B", branch, `refs/remotes/origin/${branch}`], dest);
|
|
524
995
|
if (repo.sparse.length > 0)
|
|
525
996
|
await g(["sparse-checkout", "set", "--", ...repo.sparse], dest);
|
|
526
|
-
|
|
997
|
+
await rm2(markOf(dest), { force: true });
|
|
998
|
+
updatedTo = target;
|
|
999
|
+
return said({
|
|
527
1000
|
id: repo.id,
|
|
528
1001
|
action: "updated",
|
|
529
1002
|
sha: await head(dest),
|
|
530
1003
|
...await remoteDefault(dest)
|
|
531
|
-
};
|
|
1004
|
+
});
|
|
532
1005
|
} catch (err) {
|
|
1006
|
+
if (signal?.aborted || err instanceof GitStoppedError)
|
|
1007
|
+
return said(await stoppedOne(repo, dest, made, updatedTo));
|
|
533
1008
|
if (made)
|
|
534
1009
|
await rm2(dest, { recursive: true, force: true }).catch(() => void 0);
|
|
535
1010
|
const msg = err.message;
|
|
536
|
-
|
|
1011
|
+
const marked = !made && existsSync2(markOf(dest)) ? `; the base clone's checkout mark ${markOf(dest)} stays, so the next sync puts the clone back first` : "";
|
|
1012
|
+
return said({
|
|
537
1013
|
id: repo.id,
|
|
538
1014
|
action: "failed",
|
|
539
|
-
reason: /Filename too long/i.test(msg) ? `${msg.trim()} \u2014 a path in the repo is longer than Windows allows: run git config --global core.longpaths true, then sync again` : msg
|
|
540
|
-
};
|
|
1015
|
+
reason: /Filename too long/i.test(msg) ? `${msg.trim()} \u2014 a path in the repo is longer than Windows allows: run git config --global core.longpaths true, then sync again${marked}` : `${msg}${marked}`
|
|
1016
|
+
});
|
|
1017
|
+
} finally {
|
|
1018
|
+
busy = void 0;
|
|
1019
|
+
lockAtStop = void 0;
|
|
541
1020
|
}
|
|
542
1021
|
}
|
|
543
1022
|
async function worktreeFor(change, repo) {
|
|
@@ -602,11 +1081,16 @@ function createWorkspace(root, git = createGit(), opts = {}) {
|
|
|
602
1081
|
await ensureGitignore(root);
|
|
603
1082
|
const out = [];
|
|
604
1083
|
const local = opts2.from ? await localClones(opts2.from, git) : void 0;
|
|
605
|
-
for (const repo of repos)
|
|
1084
|
+
for (const repo of repos) {
|
|
1085
|
+
if (signal?.aborted) {
|
|
1086
|
+
out.push({ id: repo.id, action: "stopped", reason: "not started: the sync was stopped" });
|
|
1087
|
+
continue;
|
|
1088
|
+
}
|
|
606
1089
|
out.push(
|
|
607
1090
|
// Nothing to lock (nor a folder to make) for an archived or in-place repo.
|
|
608
1091
|
repo.archived || isInPlace(repo.url) ? await syncOne(repo, local) : await withBaseClone(baseClonePath(root, repo.id), repo.id, () => syncOne(repo, local))
|
|
609
1092
|
);
|
|
1093
|
+
}
|
|
610
1094
|
return out;
|
|
611
1095
|
},
|
|
612
1096
|
checkoutBranch(repo, branch) {
|
|
@@ -805,6 +1289,7 @@ function nearRepos(entry, listed) {
|
|
|
805
1289
|
|
|
806
1290
|
export {
|
|
807
1291
|
GitError,
|
|
1292
|
+
GitStoppedError,
|
|
808
1293
|
createGit,
|
|
809
1294
|
changedFiles,
|
|
810
1295
|
changesSince,
|
|
@@ -837,6 +1322,8 @@ export {
|
|
|
837
1322
|
inPlacePath,
|
|
838
1323
|
inPlaceDir,
|
|
839
1324
|
remoteDefaultBranch,
|
|
1325
|
+
SYNC_CHECKOUT_MARK,
|
|
1326
|
+
PUT_BACK_DIR,
|
|
840
1327
|
createWorkspace,
|
|
841
1328
|
toHandle,
|
|
842
1329
|
gitUser,
|
|
@@ -18,14 +18,14 @@ import {
|
|
|
18
18
|
proposedSince,
|
|
19
19
|
sha256,
|
|
20
20
|
startDecideRun
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
25
|
-
import "./chunk-
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-CTJHEG6A.js";
|
|
21
|
+
} from "./chunk-AMZ4XMES.js";
|
|
22
|
+
import "./chunk-2MRYL45Z.js";
|
|
23
|
+
import "./chunk-WJWSB65O.js";
|
|
24
|
+
import "./chunk-SMFFUFMN.js";
|
|
25
|
+
import "./chunk-A3LVMCA5.js";
|
|
26
|
+
import "./chunk-NWMFVPEP.js";
|
|
28
27
|
import "./chunk-BQGDB6ZL.js";
|
|
28
|
+
import "./chunk-R4TUWD4C.js";
|
|
29
29
|
import "./chunk-TV45EUGM.js";
|
|
30
30
|
export {
|
|
31
31
|
DECIDE_AGENTS,
|