@maycombhq/atticus 2.0.0-beta.18 → 2.0.0-beta.21
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 +8 -4
- package/dist/{chunk-MUSJJ6CQ.js → chunk-265LWMOA.js} +16 -16
- package/dist/chunk-26WBY34Y.js +37 -0
- package/dist/{chunk-6H5JG5GL.js → chunk-26Z7OGQW.js} +63 -30
- package/dist/{chunk-4REDBQOZ.js → chunk-2D7PWSOK.js} +20 -20
- package/dist/{chunk-YPH6ZJ6R.js → chunk-2HH3UCZM.js} +4 -4
- package/dist/{chunk-RTUUX7PX.js → chunk-2HTEMYTB.js} +12 -26
- package/dist/{chunk-EHQUY26D.js → chunk-2UCRFXFZ.js} +11 -11
- package/dist/{chunk-ILDGIXNH.js → chunk-2V2ZPQQU.js} +81 -13
- package/dist/{chunk-YSEZQ6D3.js → chunk-36RY7ZXM.js} +107 -64
- package/dist/{chunk-QXFDM2FZ.js → chunk-37WE3LS2.js} +3 -3
- package/dist/{chunk-BAXM3JFQ.js → chunk-3AQ2R5NL.js} +1212 -754
- package/dist/chunk-3G6S7LAA.js +43 -0
- package/dist/{chunk-7TOAS7KI.js → chunk-3J5I7ZOU.js} +4 -4
- package/dist/{chunk-TAKAEJRD.js → chunk-3LZ6P5EP.js} +1 -1
- package/dist/chunk-3SSTNB4E.js +191 -0
- package/dist/chunk-3TD6S4TC.js +49 -0
- package/dist/{chunk-UUL6ZGMU.js → chunk-3UTYPHN3.js} +1 -1
- package/dist/{chunk-6AP2ZUUM.js → chunk-3WON4G3M.js} +2 -2
- package/dist/{chunk-AXY6LBW4.js → chunk-42EPP7OB.js} +12 -12
- package/dist/{chunk-QKMDT7VU.js → chunk-455SYIIE.js} +2 -2
- package/dist/{chunk-MFUFB3LN.js → chunk-4B6BT75O.js} +110 -20
- package/dist/{chunk-75MYLZSB.js → chunk-4CLK2RJO.js} +7 -7
- package/dist/chunk-4CYTJ5TZ.js +38 -0
- package/dist/{chunk-IH7RANGB.js → chunk-4D62IZII.js} +5 -5
- package/dist/{chunk-2QMZOCWN.js → chunk-4FOAYLI4.js} +14 -7
- package/dist/{chunk-V3UEPUHT.js → chunk-4KNOJC6J.js} +294 -215
- package/dist/{chunk-O6ILVBYB.js → chunk-4PYC2UGC.js} +1 -1
- package/dist/{chunk-EZBAS5BL.js → chunk-4SLBCEPD.js} +82 -50
- package/dist/{chunk-VIRTPODJ.js → chunk-4TKVU2I2.js} +6 -14
- package/dist/{chunk-IVCDU443.js → chunk-4WXRPQDE.js} +281 -51
- package/dist/{chunk-RMEEHH24.js → chunk-5CMPVC3N.js} +24 -24
- package/dist/chunk-5G7ILBUG.js +66 -0
- package/dist/{chunk-Z75XDWQR.js → chunk-5PV7S2ZP.js} +3 -3
- package/dist/{chunk-WWPC2AZ2.js → chunk-5QUOPNLN.js} +4 -4
- package/dist/{chunk-7OVH2L7L.js → chunk-5TDRBOAV.js} +5 -5
- package/dist/{chunk-YXUIUOQZ.js → chunk-5WERBKLE.js} +199 -63
- package/dist/{chunk-6WNNXEG6.js → chunk-62DLJSLV.js} +8 -8
- package/dist/{chunk-KCQS52TH.js → chunk-64AADMTW.js} +99 -25
- package/dist/{chunk-KLRUXRPN.js → chunk-67BP7HXL.js} +17 -17
- package/dist/chunk-6DQYZU2W.js +379 -0
- package/dist/{chunk-RONDYDMQ.js → chunk-6EXDI5GI.js} +51 -34
- package/dist/chunk-6FNAKCET.js +38 -0
- package/dist/{chunk-6SNEA73E.js → chunk-75ASLHBT.js} +21 -15
- package/dist/{chunk-EFT4KM6K.js → chunk-75ZOZFGH.js} +18 -18
- package/dist/{chunk-B3KW7EQW.js → chunk-77O633L5.js} +12 -12
- package/dist/{chunk-TLDL2ZZI.js → chunk-7AB6OWTV.js} +3 -3
- package/dist/{chunk-R5YXY6NT.js → chunk-7CZHUZBL.js} +25 -25
- package/dist/{chunk-F4D4G2A6.js → chunk-7FHNFCHK.js} +306 -125
- package/dist/{chunk-CC5RNYZF.js → chunk-7FUIVIBG.js} +19 -9
- package/dist/{chunk-UBTOSSNK.js → chunk-7QPCGTPS.js} +21 -21
- package/dist/{chunk-CDLTRJ4N.js → chunk-A2G72UI4.js} +7 -7
- package/dist/{chunk-YGSOQ5LX.js → chunk-AE4P57KK.js} +23 -17
- package/dist/{chunk-PGQL5YGH.js → chunk-AHW3RY3X.js} +7 -7
- package/dist/chunk-AM6FP6JW.js +43 -0
- package/dist/{chunk-DYNC6BAQ.js → chunk-AOCWFA7T.js} +93 -10
- package/dist/{chunk-CYX36GKZ.js → chunk-API5TOUB.js} +1 -1
- package/dist/{chunk-BJ5T3KDF.js → chunk-AZDITBCT.js} +3 -3
- package/dist/{chunk-U6GZSUMC.js → chunk-BA2HUMDN.js} +25 -3
- package/dist/chunk-BA3U7ALS.js +99 -0
- package/dist/{chunk-63565QTF.js → chunk-BC6KKZ67.js} +5 -5
- package/dist/{chunk-XO5RQKNM.js → chunk-BEPCKDCP.js} +1843 -577
- package/dist/{chunk-KUH62AQ3.js → chunk-BPPU3PW7.js} +4 -4
- package/dist/{chunk-52ULYRV4.js → chunk-BVWWPBKD.js} +18 -18
- package/dist/{chunk-R2FGEBIU.js → chunk-BXZ4PKIT.js} +13 -11
- package/dist/{chunk-4BU26GFB.js → chunk-C7CEK3KW.js} +4 -4
- package/dist/chunk-CFH3QH26.js +29 -0
- package/dist/chunk-CG6CULP6.js +170 -0
- package/dist/chunk-CLD4RVTA.js +45 -0
- package/dist/{chunk-BU543ZEC.js → chunk-CNPY4NTZ.js} +13 -13
- package/dist/{chunk-PLBIWEPV.js → chunk-CNU5Q2D5.js} +32 -31
- package/dist/{chunk-JTYYEYRR.js → chunk-COYN3UAN.js} +124 -21
- package/dist/{chunk-TNCROWPQ.js → chunk-CPK7QSBG.js} +10 -10
- package/dist/{chunk-43E6XX67.js → chunk-D2WSW4GU.js} +1 -1
- package/dist/{chunk-SHEUEHKC.js → chunk-D57MFJPP.js} +3 -3
- package/dist/chunk-D5KV5PSK.js +45 -0
- package/dist/chunk-D5MASS4I.js +48 -0
- package/dist/{chunk-TQYBXDVH.js → chunk-DCWN3HFV.js} +1 -1
- package/dist/{chunk-FF4IGX4Z.js → chunk-DDJPM5YX.js} +2 -2
- package/dist/chunk-DN4A2Q2O.js +57 -0
- package/dist/{chunk-4ZCFCIEL.js → chunk-DUPZPDCJ.js} +52 -16
- package/dist/{chunk-CUJ5TIEB.js → chunk-E2VXBSIR.js} +4 -4
- package/dist/{chunk-BX47X5DJ.js → chunk-E57AOFYN.js} +13 -13
- package/dist/{chunk-SSTI7GAV.js → chunk-ECLXZWAG.js} +12 -12
- package/dist/{chunk-KYK3TA4Q.js → chunk-EDZ45WIR.js} +14 -14
- package/dist/chunk-EFCQSMXB.js +37 -0
- package/dist/{chunk-YC2K3FJG.js → chunk-EZIN5E5B.js} +8 -8
- package/dist/{chunk-MIZNACDI.js → chunk-F6H2RJ3N.js} +1 -1
- package/dist/{chunk-EMZVHDJP.js → chunk-FAJDKNSD.js} +7 -3
- package/dist/chunk-FGAGWYZB.js +47 -0
- package/dist/{chunk-KBGQ3IAM.js → chunk-FLVZFTLQ.js} +18 -18
- package/dist/{chunk-2NNXLH53.js → chunk-FQ6WH6PB.js} +22 -7
- package/dist/{chunk-QWSLMVHI.js → chunk-FRHD22WM.js} +61 -23
- package/dist/{chunk-5MEN4SM5.js → chunk-FVMPFCDS.js} +4 -4
- package/dist/{chunk-KLRZKW7Y.js → chunk-FY3QIRTL.js} +3 -3
- package/dist/{chunk-B3SWPNJF.js → chunk-FYBF5MB2.js} +13 -11
- package/dist/{chunk-CVZCW3NI.js → chunk-G5YJBNDZ.js} +14 -5
- package/dist/{chunk-U6EPS5PF.js → chunk-G6IQYM25.js} +5 -5
- package/dist/chunk-G6X4YL4D.js +161 -0
- package/dist/{chunk-DOSX3MRW.js → chunk-GC2VK3JT.js} +25 -25
- package/dist/{chunk-EEWBTFRP.js → chunk-GCS3FZOB.js} +27 -3
- package/dist/{chunk-6H6OPNEP.js → chunk-GDZB57IU.js} +5 -5
- package/dist/chunk-GIFMBCTW.js +221 -0
- package/dist/{chunk-X5WYPIH3.js → chunk-GK4PYVEC.js} +18 -8
- package/dist/{chunk-VBSJ5NRB.js → chunk-GNWAOVFQ.js} +5 -5
- package/dist/{chunk-TXFDQRBL.js → chunk-GS76RXQE.js} +11 -11
- package/dist/{chunk-U3YC4RGC.js → chunk-GSGIZ2OO.js} +23 -23
- package/dist/chunk-GUYL7RMK.js +60 -0
- package/dist/{chunk-AZYBHPV4.js → chunk-GX74YWR7.js} +14 -13
- package/dist/{chunk-YY7VP7KW.js → chunk-HE3HRDNZ.js} +2 -2
- package/dist/{chunk-Z7HYYDZM.js → chunk-HGHRSF3E.js} +14 -13
- package/dist/{chunk-Q2X4IREC.js → chunk-HK3VOHIE.js} +106 -36
- package/dist/{chunk-P5JYMO7Y.js → chunk-HS4BGB4G.js} +22 -22
- package/dist/{chunk-IOW6BF3U.js → chunk-HSZMPH5T.js} +798 -141
- package/dist/{chunk-L3T33FA7.js → chunk-HWD4JPU7.js} +4 -2
- package/dist/{chunk-7NYCH5HY.js → chunk-HXXP2NTE.js} +6 -6
- package/dist/{chunk-7S7OFVIU.js → chunk-I2A3Z5AK.js} +4 -4
- package/dist/{chunk-WQSDKX7M.js → chunk-ICHDSWEY.js} +7 -7
- package/dist/chunk-IFFRGC3N.js +31 -0
- package/dist/{chunk-HMZQAIR5.js → chunk-IFHDV6KQ.js} +24 -17
- package/dist/chunk-J2O4LFVI.js +80 -0
- package/dist/chunk-J5AAZ6OJ.js +161 -0
- package/dist/{chunk-CVRWAG76.js → chunk-JAABT3DA.js} +3 -3
- package/dist/chunk-JITJP64K.js +34 -0
- package/dist/chunk-JKIGL3XQ.js +162 -0
- package/dist/chunk-JRVNXLZP.js +615 -0
- package/dist/chunk-JRXHON4E.js +41 -0
- package/dist/{chunk-XFCK5B27.js → chunk-JS6WMC3J.js} +8 -8
- package/dist/chunk-JU4QNJSR.js +62 -0
- package/dist/{chunk-IPSFMTK2.js → chunk-JYMIB5XY.js} +152 -42
- package/dist/{chunk-L336AJCZ.js → chunk-JYTIHTIK.js} +8 -6
- package/dist/{chunk-VEJYZEPC.js → chunk-K332XW7K.js} +135 -16
- package/dist/{chunk-KCF7TFOE.js → chunk-K6JB6XTX.js} +11 -11
- package/dist/{chunk-LFIIX4OV.js → chunk-KDAHXQIE.js} +46 -34
- package/dist/chunk-KYZMRSPS.js +93 -0
- package/dist/chunk-L4CESDPB.js +22 -0
- package/dist/{chunk-3LR4522O.js → chunk-LEBR5NHW.js} +14 -14
- package/dist/{chunk-US3QZU23.js → chunk-LIJJCBQI.js} +67 -7
- package/dist/{chunk-XLHL6WTI.js → chunk-LIRVU3HW.js} +16 -16
- package/dist/{chunk-BAT4CBB7.js → chunk-LN77DXBM.js} +19 -10
- package/dist/{chunk-E5FM44EJ.js → chunk-LNWEWYCM.js} +2474 -315
- package/dist/{chunk-TX4OGZKU.js → chunk-LO3BLMVG.js} +3 -3
- package/dist/{chunk-RUOGHYSK.js → chunk-LPV6T362.js} +5 -5
- package/dist/{chunk-2T5CQH4R.js → chunk-LQH4P45K.js} +1 -1
- package/dist/chunk-LU4MQVAL.js +41 -0
- package/dist/{chunk-HW4RRIJA.js → chunk-LWDNKE4X.js} +12 -10
- package/dist/chunk-M4H2UG4R.js +218 -0
- package/dist/{chunk-CANMOOE6.js → chunk-M6D2U3YM.js} +3 -3
- package/dist/{chunk-AB5E5HCN.js → chunk-MD7KUEJ3.js} +14 -272
- package/dist/{chunk-ENTAAEDK.js → chunk-MMZUN7ZO.js} +20 -20
- package/dist/{chunk-L4MHJG3I.js → chunk-MZGRDONP.js} +46 -36
- package/dist/{chunk-IYI2S6BB.js → chunk-N3RUGTGV.js} +18 -18
- package/dist/{chunk-WZRCGGXG.js → chunk-NCB6656Z.js} +7 -7
- package/dist/{chunk-SBE773JU.js → chunk-NRQ65LTQ.js} +5 -5
- package/dist/{chunk-NRPMPZWJ.js → chunk-NTAVOWYD.js} +117 -18
- package/dist/{chunk-UJBZS5I7.js → chunk-NYOABJNK.js} +36 -27
- package/dist/{chunk-LXAPJ3BL.js → chunk-O4IKAIZ2.js} +24 -20
- package/dist/{chunk-MMB2OHUY.js → chunk-ODMBPDDV.js} +48 -13
- package/dist/chunk-OKUB6RJA.js +533 -0
- package/dist/{chunk-MKFYQQ5Q.js → chunk-OMPENNWY.js} +4 -1
- package/dist/chunk-OPQZISG3.js +25 -0
- package/dist/{chunk-ROJMXG4E.js → chunk-OV57AHCG.js} +24 -24
- package/dist/{chunk-7KGXDIWV.js → chunk-OZJ3JLYI.js} +9 -8
- package/dist/{chunk-G5BYKJIM.js → chunk-P2VBXX7N.js} +11 -10
- package/dist/{chunk-YK6CSODO.js → chunk-PAINMSID.js} +4353 -1106
- package/dist/chunk-PKJAV25S.js +43 -0
- package/dist/{chunk-R5MNPIMD.js → chunk-PNQLCRSS.js} +4 -4
- package/dist/{chunk-3SMMFQED.js → chunk-PQH56YF6.js} +37 -5
- package/dist/chunk-PRTBPXYA.js +50 -0
- package/dist/{chunk-FF4ZMLSL.js → chunk-PRW3HXM3.js} +2 -2
- package/dist/chunk-PRZ7KMWL.js +42 -0
- package/dist/{chunk-IFV6MKYV.js → chunk-PTQ3ZALZ.js} +42 -4
- package/dist/{chunk-ELQSLAP6.js → chunk-PUEWDYGP.js} +2 -2
- package/dist/{chunk-F2ZCZYIK.js → chunk-Q26LDIUV.js} +12 -11
- package/dist/chunk-Q46QDDMF.js +277 -0
- package/dist/chunk-QBNWF5ZU.js +19 -0
- package/dist/{chunk-ANETFNTV.js → chunk-QE527XRY.js} +24 -21
- package/dist/{chunk-QNMLLYTN.js → chunk-QHJJMZLX.js} +397 -32
- package/dist/chunk-QJCJOMW3.js +425 -0
- package/dist/{chunk-3HOONZUE.js → chunk-QKMRFNMA.js} +15 -15
- package/dist/{chunk-7S6VJ643.js → chunk-QOOEYDNJ.js} +101 -13
- package/dist/{chunk-4YNKN4DF.js → chunk-QSIDVFB7.js} +20 -18
- package/dist/{chunk-2IT7SIJY.js → chunk-RA33EYS4.js} +19 -18
- package/dist/{chunk-P7NV3FEJ.js → chunk-RALY3E5U.js} +4 -4
- package/dist/{chunk-6NESNLVU.js → chunk-S2RY3BOD.js} +35 -21
- package/dist/chunk-SB5GRUFM.js +54 -0
- package/dist/{chunk-EUQHM2CH.js → chunk-SH27FYPF.js} +18 -18
- package/dist/chunk-T74WQQGS.js +40 -0
- package/dist/{chunk-LGDW4G73.js → chunk-TGVVUKTG.js} +2 -2
- package/dist/chunk-THN26IEF.js +48 -0
- package/dist/{chunk-ZV2VCBMQ.js → chunk-TJH2EUAZ.js} +18 -12
- package/dist/{chunk-NGT5LLSE.js → chunk-TQ4TG57V.js} +6 -6
- package/dist/{chunk-WEDXFJPG.js → chunk-TQTRWENN.js} +12 -12
- package/dist/{chunk-ZRWS54RI.js → chunk-TSM6T6GQ.js} +23 -23
- package/dist/{chunk-KET7KOVE.js → chunk-TW3KOSQK.js} +15 -7
- package/dist/{chunk-RBXDHCN7.js → chunk-TWQRPM76.js} +2 -2
- package/dist/{chunk-IO6DQCZX.js → chunk-TYD6I4CZ.js} +4 -4
- package/dist/{chunk-5NLJH6R4.js → chunk-U3NBK4EU.js} +56 -17
- package/dist/{chunk-U542BJME.js → chunk-UDXWIPCB.js} +7 -7
- package/dist/{chunk-OSB6AKF2.js → chunk-UEVZZZU2.js} +4 -4
- package/dist/{chunk-5ZV7BK22.js → chunk-UF4UHCIG.js} +2 -2
- package/dist/{chunk-PHJOOL6U.js → chunk-UFE36WJH.js} +4 -4
- package/dist/{chunk-IHRP4OYV.js → chunk-URIKUID7.js} +12 -12
- package/dist/chunk-UYLBRRFK.js +1106 -0
- package/dist/chunk-UZACEG2C.js +515 -0
- package/dist/{chunk-LR4XBH4L.js → chunk-VAMHOHUU.js} +12 -12
- package/dist/{chunk-S5PSGAQ2.js → chunk-VUVGX5L2.js} +1 -1
- package/dist/{chunk-2TG2QGKW.js → chunk-VYOCPTUB.js} +18 -16
- package/dist/{chunk-VTEDQ6GY.js → chunk-WAZEXEJH.js} +175 -3
- package/dist/{chunk-UTSFKZ72.js → chunk-WCEF7H6L.js} +3 -3
- package/dist/{chunk-DXPUYG5L.js → chunk-WEOMJHPV.js} +12 -12
- package/dist/{chunk-NFKBU2UH.js → chunk-WFU77T3A.js} +5 -5
- package/dist/chunk-WIWTJMMR.js +292 -0
- package/dist/{chunk-MRFSUAJH.js → chunk-WNTIOBOG.js} +18 -18
- package/dist/{chunk-UROTYIGJ.js → chunk-X2CUXTWU.js} +6 -6
- package/dist/chunk-X7EMBM5X.js +34 -0
- package/dist/{chunk-OO5TKEAG.js → chunk-XEQCQO66.js} +8 -8
- package/dist/{chunk-NBQO75XT.js → chunk-XG4WJHLQ.js} +17 -1
- package/dist/{chunk-ZQC7MNQB.js → chunk-XOL3GFW2.js} +101 -30
- package/dist/{chunk-GXDATVSY.js → chunk-XQ3YZ4QW.js} +22 -22
- package/dist/{chunk-GTW54D3D.js → chunk-Y6K3CJBU.js} +726 -88
- package/dist/{chunk-CQCAJI6G.js → chunk-YAH5IQAL.js} +5 -5
- package/dist/{chunk-U6TD7UOH.js → chunk-YBOVNMHC.js} +51 -14
- package/dist/{chunk-OJICVOZH.js → chunk-YF5DZCPN.js} +79 -39
- package/dist/chunk-YIGBJNH4.js +37 -0
- package/dist/{chunk-7C7OZARH.js → chunk-YJ3TBOTK.js} +25 -25
- package/dist/{chunk-HXFSM4LG.js → chunk-YKTE2RU3.js} +2 -2
- package/dist/{chunk-7IM4BVVH.js → chunk-YO2PKTXT.js} +268 -36
- package/dist/{chunk-Z3UU7XV6.js → chunk-YTTNTQOX.js} +15 -15
- package/dist/{chunk-2ZICHO3V.js → chunk-YWAKDNMH.js} +183 -33
- package/dist/{chunk-OXOSJXOI.js → chunk-YZDZOEV4.js} +4 -4
- package/dist/{chunk-MRCETHW5.js → chunk-Z3QFH7YG.js} +4 -4
- package/dist/{chunk-5KZTRD4V.js → chunk-Z6VLC5X4.js} +17 -17
- package/dist/{chunk-EDURU5DF.js → chunk-ZFQMMU5Y.js} +2 -2
- package/dist/{chunk-3GLDB4IT.js → chunk-ZKYRDV7A.js} +12 -12
- package/dist/{chunk-GBGJ6WSO.js → chunk-ZLS6PU2O.js} +3 -3
- package/dist/{chunk-JZOOX3PQ.js → chunk-ZOSD4FXV.js} +3 -3
- package/dist/chunk-ZPDDEVQX.js +47 -0
- package/dist/{chunk-2TTSX7NB.js → chunk-ZQLRCA2V.js} +7 -7
- package/dist/{chunk-ESP3RUUR.js → chunk-ZX7235KR.js} +128 -54
- package/dist/{chunk-MH4XG5XS.js → chunk-ZZFHLRQW.js} +18 -16
- package/dist/files.json +559 -439
- package/dist/packages/sdk/npm/index.js +4679 -2672
- package/dist/packages/ui/dist/assets/{elk-api-BuFBvNyV.js → elk-api-CowTnhEJ.js} +2 -2
- package/dist/packages/ui/dist/assets/index-Dw20IRhQ.css +1 -0
- package/dist/packages/ui/dist/assets/index-z2wv0d5d.js +47 -0
- package/dist/packages/ui/dist/index.html +2 -2
- package/package.json +3 -3
- package/dist/chunk-25TJC2CL.js +0 -48
- package/dist/chunk-3Q5RHGCA.js +0 -47
- package/dist/chunk-4W7FOGAB.js +0 -41
- package/dist/chunk-6AF3CVJT.js +0 -48
- package/dist/chunk-A3KEXFQS.js +0 -34
- package/dist/chunk-BAUINGGJ.js +0 -41
- package/dist/chunk-BOFUCRJX.js +0 -47
- package/dist/chunk-GGKGILIP.js +0 -54
- package/dist/chunk-IKN6C67W.js +0 -53
- package/dist/chunk-K7MYVIFK.js +0 -54
- package/dist/chunk-KHA5LVPE.js +0 -34
- package/dist/chunk-LSXGM6MB.js +0 -37
- package/dist/chunk-M54TDRM3.js +0 -29
- package/dist/chunk-M5GF4NAB.js +0 -45
- package/dist/chunk-UTZGBCXE.js +0 -38
- package/dist/chunk-UVTSMBM4.js +0 -43
- package/dist/chunk-XXE3S3OG.js +0 -44
- package/dist/chunk-YJRQCUVJ.js +0 -43
- package/dist/chunk-ZFTK4BDN.js +0 -41
- package/dist/chunk-ZMARAW37.js +0 -38
- package/dist/packages/ui/dist/assets/index-C5QnK82A.css +0 -1
- package/dist/packages/ui/dist/assets/index-CQ0a1cBg.js +0 -29
|
@@ -9,7 +9,10 @@ import {
|
|
|
9
9
|
external_exports,
|
|
10
10
|
require_dist,
|
|
11
11
|
toCanonicalYaml
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-PAINMSID.js";
|
|
13
|
+
import {
|
|
14
|
+
renameRetrying
|
|
15
|
+
} from "./chunk-ODMBPDDV.js";
|
|
13
16
|
import {
|
|
14
17
|
__toESM
|
|
15
18
|
} from "./chunk-TV45EUGM.js";
|
|
@@ -116,10 +119,190 @@ function workItemsCsv(stories, o = {}) {
|
|
|
116
119
|
`).join("");
|
|
117
120
|
}
|
|
118
121
|
|
|
122
|
+
// packages/adapters/dist/common.js
|
|
123
|
+
var Approval = external_exports.strictObject({
|
|
124
|
+
/** The person who approved: a handle from the Git host or directory. */
|
|
125
|
+
by: external_exports.string().min(1),
|
|
126
|
+
at: external_exports.iso.datetime({ offset: true }),
|
|
127
|
+
scope: external_exports.enum(["once", "standing"]).default("once"),
|
|
128
|
+
/** What was approved, e.g. a finding, hand-off PR or artifact path. */
|
|
129
|
+
ref: external_exports.string().min(1)
|
|
130
|
+
});
|
|
131
|
+
var AdapterError = class extends Error {
|
|
132
|
+
adapter;
|
|
133
|
+
code;
|
|
134
|
+
retryable;
|
|
135
|
+
constructor(adapter, code, message, retryable = code === "rate-limited" || code === "unavailable") {
|
|
136
|
+
super(`${adapter}: ${message}`);
|
|
137
|
+
this.adapter = adapter;
|
|
138
|
+
this.code = code;
|
|
139
|
+
this.retryable = retryable;
|
|
140
|
+
this.name = "AdapterError";
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
function requireApproval(adapter, approval, opts = {}) {
|
|
144
|
+
const r = Approval.safeParse(approval);
|
|
145
|
+
if (!r.success) {
|
|
146
|
+
throw new AdapterError(adapter, "not-approved", "this write needs a person's approval (by, at, ref)");
|
|
147
|
+
}
|
|
148
|
+
if (r.data.scope === "standing" && !opts.allowStanding) {
|
|
149
|
+
throw new AdapterError(adapter, "not-approved", "a standing approval can't cover this write; it needs approval each time");
|
|
150
|
+
}
|
|
151
|
+
return r.data;
|
|
152
|
+
}
|
|
153
|
+
var MockBase = class {
|
|
154
|
+
name;
|
|
155
|
+
journal = [];
|
|
156
|
+
failures = [];
|
|
157
|
+
constructor(name) {
|
|
158
|
+
this.name = name;
|
|
159
|
+
}
|
|
160
|
+
failNext(code, method) {
|
|
161
|
+
this.failures.push(method === void 0 ? { code } : { code, method });
|
|
162
|
+
}
|
|
163
|
+
/** Record a call and raise an injected failure if one is due. */
|
|
164
|
+
call(method, args, approval) {
|
|
165
|
+
const i = this.failures.findIndex((f) => f.method === void 0 || f.method === method);
|
|
166
|
+
if (i !== -1) {
|
|
167
|
+
const [f] = this.failures.splice(i, 1);
|
|
168
|
+
throw new AdapterError(this.name, f.code, `injected ${f.code} on ${method}`);
|
|
169
|
+
}
|
|
170
|
+
this.journal.push(approval ? { adapter: this.name, method, args, approval } : { adapter: this.name, method, args });
|
|
171
|
+
}
|
|
172
|
+
notFound(what) {
|
|
173
|
+
throw new AdapterError(this.name, "not-found", `${what} not found`);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
// packages/adapters/dist/git-host.js
|
|
178
|
+
function mergeBlockers(pr) {
|
|
179
|
+
const out = [];
|
|
180
|
+
if (pr.state === "merged" || pr.state === "closed")
|
|
181
|
+
out.push(`the PR is ${pr.state}`);
|
|
182
|
+
if (pr.state === "draft")
|
|
183
|
+
out.push("the PR is a draft");
|
|
184
|
+
const latest = /* @__PURE__ */ new Map();
|
|
185
|
+
for (const r of pr.reviews)
|
|
186
|
+
if (r.state !== "commented")
|
|
187
|
+
latest.set(r.by, r.state);
|
|
188
|
+
if ([...latest.values()].includes("changes-requested"))
|
|
189
|
+
out.push("changes are requested");
|
|
190
|
+
const missing = pr.requiredReviewers.filter((r) => latest.get(r) !== "approved");
|
|
191
|
+
if (pr.requiredReviewers.length > 0 && missing.length === pr.requiredReviewers.length) {
|
|
192
|
+
out.push(`needs approval from ${pr.requiredReviewers.join(" or ")}`);
|
|
193
|
+
}
|
|
194
|
+
if (pr.requiredReviewers.length === 0 && ![...latest.values()].includes("approved"))
|
|
195
|
+
out.push("needs at least one approval");
|
|
196
|
+
const failing = pr.checks.filter((c) => c.status !== "passed").map((c) => `${c.name} ${c.status}`);
|
|
197
|
+
if (failing.length > 0)
|
|
198
|
+
out.push(`checks not passing: ${failing.join(", ")}`);
|
|
199
|
+
return out;
|
|
200
|
+
}
|
|
201
|
+
var MockGitHost = class extends MockBase {
|
|
202
|
+
repos = /* @__PURE__ */ new Map();
|
|
203
|
+
prs = /* @__PURE__ */ new Map();
|
|
204
|
+
numbers = /* @__PURE__ */ new Map();
|
|
205
|
+
constructor(repos = []) {
|
|
206
|
+
super("git-host");
|
|
207
|
+
for (const r of repos) {
|
|
208
|
+
const defaultBranch = r.defaultBranch ?? "main";
|
|
209
|
+
this.repos.set(r.repo, {
|
|
210
|
+
repo: r.repo,
|
|
211
|
+
defaultBranch,
|
|
212
|
+
protectedBranches: r.protectedBranches ?? [defaultBranch]
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
key = (repo, n) => `${repo}#${n}`;
|
|
217
|
+
async getRepo(repo) {
|
|
218
|
+
this.call("getRepo", [repo]);
|
|
219
|
+
return { ...this.repos.get(repo) ?? this.notFound(`repo ${repo}`) };
|
|
220
|
+
}
|
|
221
|
+
async getPullRequest(repo, number) {
|
|
222
|
+
this.call("getPullRequest", [repo, number]);
|
|
223
|
+
return structuredClone(this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`));
|
|
224
|
+
}
|
|
225
|
+
async listPullRequests(repo, q) {
|
|
226
|
+
this.call("listPullRequests", [repo, q]);
|
|
227
|
+
return [...this.prs.values()].filter((p2) => p2.repo === repo && (!q.head || p2.head === q.head) && (!q.state || p2.state === q.state)).map((p2) => structuredClone(p2));
|
|
228
|
+
}
|
|
229
|
+
async createPullRequest(input, approval) {
|
|
230
|
+
const a = requireApproval(this.name, approval);
|
|
231
|
+
this.call("createPullRequest", [input], a);
|
|
232
|
+
const info = this.repos.get(input.repo) ?? this.notFound(`repo ${input.repo}`);
|
|
233
|
+
if (info.protectedBranches.includes(input.head)) {
|
|
234
|
+
throw new AdapterError(this.name, "invalid", `${input.head} is protected and can't be a PR's source branch`);
|
|
235
|
+
}
|
|
236
|
+
if ([...this.prs.values()].some((p2) => p2.repo === input.repo && p2.head === input.head && (p2.state === "open" || p2.state === "draft"))) {
|
|
237
|
+
throw new AdapterError(this.name, "conflict", `an open PR from ${input.head} already exists`);
|
|
238
|
+
}
|
|
239
|
+
const n = (this.numbers.get(input.repo) ?? 0) + 1;
|
|
240
|
+
this.numbers.set(input.repo, n);
|
|
241
|
+
const pr = {
|
|
242
|
+
repo: input.repo,
|
|
243
|
+
number: n,
|
|
244
|
+
url: `https://git.example.com/${input.repo}/pull/${n}`,
|
|
245
|
+
title: input.title,
|
|
246
|
+
body: input.body,
|
|
247
|
+
head: input.head,
|
|
248
|
+
base: input.base,
|
|
249
|
+
state: input.draft ? "draft" : "open",
|
|
250
|
+
reviews: [],
|
|
251
|
+
checks: [],
|
|
252
|
+
requiredReviewers: []
|
|
253
|
+
};
|
|
254
|
+
this.prs.set(this.key(input.repo, n), pr);
|
|
255
|
+
return structuredClone(pr);
|
|
256
|
+
}
|
|
257
|
+
async comment(repo, number, body, approval) {
|
|
258
|
+
const a = requireApproval(this.name, approval);
|
|
259
|
+
this.call("comment", [repo, number, body], a);
|
|
260
|
+
if (!this.prs.has(this.key(repo, number)))
|
|
261
|
+
this.notFound(`PR ${repo}#${number}`);
|
|
262
|
+
}
|
|
263
|
+
async merge(repo, number, approval) {
|
|
264
|
+
const a = requireApproval(this.name, approval);
|
|
265
|
+
this.call("merge", [repo, number], a);
|
|
266
|
+
const pr = this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`);
|
|
267
|
+
const blockers = mergeBlockers(pr);
|
|
268
|
+
if (blockers.length > 0)
|
|
269
|
+
throw new AdapterError(this.name, "conflict", `can't merge: ${blockers.join("; ")}`);
|
|
270
|
+
pr.state = "merged";
|
|
271
|
+
return structuredClone(pr);
|
|
272
|
+
}
|
|
273
|
+
async closePullRequest(repo, number, approval) {
|
|
274
|
+
const a = requireApproval(this.name, approval);
|
|
275
|
+
this.call("closePullRequest", [repo, number], a);
|
|
276
|
+
const pr = this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`);
|
|
277
|
+
if (pr.state === "merged")
|
|
278
|
+
throw new AdapterError(this.name, "conflict", `PR ${number} is merged and can't be closed`);
|
|
279
|
+
pr.state = "closed";
|
|
280
|
+
return structuredClone(pr);
|
|
281
|
+
}
|
|
282
|
+
/** Test helpers: what reviewers and CI would do on the host. */
|
|
283
|
+
review(repo, number, by, state) {
|
|
284
|
+
(this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`)).reviews.push({
|
|
285
|
+
by,
|
|
286
|
+
state
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
setChecks(repo, number, checks) {
|
|
290
|
+
(this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`)).checks = checks;
|
|
291
|
+
}
|
|
292
|
+
requireReviewers(repo, number, reviewers) {
|
|
293
|
+
(this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`)).requiredReviewers = reviewers;
|
|
294
|
+
}
|
|
295
|
+
markReady(repo, number) {
|
|
296
|
+
const pr = this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`);
|
|
297
|
+
if (pr.state === "draft")
|
|
298
|
+
pr.state = "open";
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
|
|
119
302
|
// packages/adapters/dist/manual/steps.js
|
|
120
303
|
var import_yaml = __toESM(require_dist(), 1);
|
|
121
304
|
import { createHash } from "node:crypto";
|
|
122
|
-
import { mkdir, readdir, readFile,
|
|
305
|
+
import { mkdir, readdir, readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
123
306
|
import { dirname, join } from "node:path";
|
|
124
307
|
var LEADING = [
|
|
125
308
|
"schemaVersion",
|
|
@@ -170,7 +353,7 @@ async function writeAtomic(path, text) {
|
|
|
170
353
|
const tmp = `${path}.tmp`;
|
|
171
354
|
try {
|
|
172
355
|
await writeFile(tmp, text, "utf8");
|
|
173
|
-
await
|
|
356
|
+
await renameRetrying(tmp, path);
|
|
174
357
|
} catch (e) {
|
|
175
358
|
await rm(tmp, { force: true });
|
|
176
359
|
throw e;
|
|
@@ -456,186 +639,6 @@ function exportStep(step, format) {
|
|
|
456
639
|
};
|
|
457
640
|
}
|
|
458
641
|
|
|
459
|
-
// packages/adapters/dist/common.js
|
|
460
|
-
var Approval = external_exports.strictObject({
|
|
461
|
-
/** The person who approved: a handle from the Git host or directory. */
|
|
462
|
-
by: external_exports.string().min(1),
|
|
463
|
-
at: external_exports.iso.datetime({ offset: true }),
|
|
464
|
-
scope: external_exports.enum(["once", "standing"]).default("once"),
|
|
465
|
-
/** What was approved, e.g. a finding, hand-off PR or artifact path. */
|
|
466
|
-
ref: external_exports.string().min(1)
|
|
467
|
-
});
|
|
468
|
-
var AdapterError = class extends Error {
|
|
469
|
-
adapter;
|
|
470
|
-
code;
|
|
471
|
-
retryable;
|
|
472
|
-
constructor(adapter, code, message, retryable = code === "rate-limited" || code === "unavailable") {
|
|
473
|
-
super(`${adapter}: ${message}`);
|
|
474
|
-
this.adapter = adapter;
|
|
475
|
-
this.code = code;
|
|
476
|
-
this.retryable = retryable;
|
|
477
|
-
this.name = "AdapterError";
|
|
478
|
-
}
|
|
479
|
-
};
|
|
480
|
-
function requireApproval(adapter, approval, opts = {}) {
|
|
481
|
-
const r = Approval.safeParse(approval);
|
|
482
|
-
if (!r.success) {
|
|
483
|
-
throw new AdapterError(adapter, "not-approved", "this write needs a person's approval (by, at, ref)");
|
|
484
|
-
}
|
|
485
|
-
if (r.data.scope === "standing" && !opts.allowStanding) {
|
|
486
|
-
throw new AdapterError(adapter, "not-approved", "a standing approval can't cover this write; it needs approval each time");
|
|
487
|
-
}
|
|
488
|
-
return r.data;
|
|
489
|
-
}
|
|
490
|
-
var MockBase = class {
|
|
491
|
-
name;
|
|
492
|
-
journal = [];
|
|
493
|
-
failures = [];
|
|
494
|
-
constructor(name) {
|
|
495
|
-
this.name = name;
|
|
496
|
-
}
|
|
497
|
-
failNext(code, method) {
|
|
498
|
-
this.failures.push(method === void 0 ? { code } : { code, method });
|
|
499
|
-
}
|
|
500
|
-
/** Record a call and raise an injected failure if one is due. */
|
|
501
|
-
call(method, args, approval) {
|
|
502
|
-
const i = this.failures.findIndex((f) => f.method === void 0 || f.method === method);
|
|
503
|
-
if (i !== -1) {
|
|
504
|
-
const [f] = this.failures.splice(i, 1);
|
|
505
|
-
throw new AdapterError(this.name, f.code, `injected ${f.code} on ${method}`);
|
|
506
|
-
}
|
|
507
|
-
this.journal.push(approval ? { adapter: this.name, method, args, approval } : { adapter: this.name, method, args });
|
|
508
|
-
}
|
|
509
|
-
notFound(what) {
|
|
510
|
-
throw new AdapterError(this.name, "not-found", `${what} not found`);
|
|
511
|
-
}
|
|
512
|
-
};
|
|
513
|
-
|
|
514
|
-
// packages/adapters/dist/git-host.js
|
|
515
|
-
function mergeBlockers(pr) {
|
|
516
|
-
const out = [];
|
|
517
|
-
if (pr.state === "merged" || pr.state === "closed")
|
|
518
|
-
out.push(`the PR is ${pr.state}`);
|
|
519
|
-
if (pr.state === "draft")
|
|
520
|
-
out.push("the PR is a draft");
|
|
521
|
-
const latest = /* @__PURE__ */ new Map();
|
|
522
|
-
for (const r of pr.reviews)
|
|
523
|
-
if (r.state !== "commented")
|
|
524
|
-
latest.set(r.by, r.state);
|
|
525
|
-
if ([...latest.values()].includes("changes-requested"))
|
|
526
|
-
out.push("changes are requested");
|
|
527
|
-
const missing = pr.requiredReviewers.filter((r) => latest.get(r) !== "approved");
|
|
528
|
-
if (pr.requiredReviewers.length > 0 && missing.length === pr.requiredReviewers.length) {
|
|
529
|
-
out.push(`needs approval from ${pr.requiredReviewers.join(" or ")}`);
|
|
530
|
-
}
|
|
531
|
-
if (pr.requiredReviewers.length === 0 && ![...latest.values()].includes("approved"))
|
|
532
|
-
out.push("needs at least one approval");
|
|
533
|
-
const failing = pr.checks.filter((c) => c.status !== "passed").map((c) => `${c.name} ${c.status}`);
|
|
534
|
-
if (failing.length > 0)
|
|
535
|
-
out.push(`checks not passing: ${failing.join(", ")}`);
|
|
536
|
-
return out;
|
|
537
|
-
}
|
|
538
|
-
var MockGitHost = class extends MockBase {
|
|
539
|
-
repos = /* @__PURE__ */ new Map();
|
|
540
|
-
prs = /* @__PURE__ */ new Map();
|
|
541
|
-
numbers = /* @__PURE__ */ new Map();
|
|
542
|
-
constructor(repos = []) {
|
|
543
|
-
super("git-host");
|
|
544
|
-
for (const r of repos) {
|
|
545
|
-
const defaultBranch = r.defaultBranch ?? "main";
|
|
546
|
-
this.repos.set(r.repo, {
|
|
547
|
-
repo: r.repo,
|
|
548
|
-
defaultBranch,
|
|
549
|
-
protectedBranches: r.protectedBranches ?? [defaultBranch]
|
|
550
|
-
});
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
key = (repo, n) => `${repo}#${n}`;
|
|
554
|
-
async getRepo(repo) {
|
|
555
|
-
this.call("getRepo", [repo]);
|
|
556
|
-
return { ...this.repos.get(repo) ?? this.notFound(`repo ${repo}`) };
|
|
557
|
-
}
|
|
558
|
-
async getPullRequest(repo, number) {
|
|
559
|
-
this.call("getPullRequest", [repo, number]);
|
|
560
|
-
return structuredClone(this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`));
|
|
561
|
-
}
|
|
562
|
-
async listPullRequests(repo, q) {
|
|
563
|
-
this.call("listPullRequests", [repo, q]);
|
|
564
|
-
return [...this.prs.values()].filter((p2) => p2.repo === repo && (!q.head || p2.head === q.head) && (!q.state || p2.state === q.state)).map((p2) => structuredClone(p2));
|
|
565
|
-
}
|
|
566
|
-
async createPullRequest(input, approval) {
|
|
567
|
-
const a = requireApproval(this.name, approval);
|
|
568
|
-
this.call("createPullRequest", [input], a);
|
|
569
|
-
const info = this.repos.get(input.repo) ?? this.notFound(`repo ${input.repo}`);
|
|
570
|
-
if (info.protectedBranches.includes(input.head)) {
|
|
571
|
-
throw new AdapterError(this.name, "invalid", `${input.head} is protected and can't be a PR's source branch`);
|
|
572
|
-
}
|
|
573
|
-
if ([...this.prs.values()].some((p2) => p2.repo === input.repo && p2.head === input.head && (p2.state === "open" || p2.state === "draft"))) {
|
|
574
|
-
throw new AdapterError(this.name, "conflict", `an open PR from ${input.head} already exists`);
|
|
575
|
-
}
|
|
576
|
-
const n = (this.numbers.get(input.repo) ?? 0) + 1;
|
|
577
|
-
this.numbers.set(input.repo, n);
|
|
578
|
-
const pr = {
|
|
579
|
-
repo: input.repo,
|
|
580
|
-
number: n,
|
|
581
|
-
url: `https://git.example.com/${input.repo}/pull/${n}`,
|
|
582
|
-
title: input.title,
|
|
583
|
-
body: input.body,
|
|
584
|
-
head: input.head,
|
|
585
|
-
base: input.base,
|
|
586
|
-
state: input.draft ? "draft" : "open",
|
|
587
|
-
reviews: [],
|
|
588
|
-
checks: [],
|
|
589
|
-
requiredReviewers: []
|
|
590
|
-
};
|
|
591
|
-
this.prs.set(this.key(input.repo, n), pr);
|
|
592
|
-
return structuredClone(pr);
|
|
593
|
-
}
|
|
594
|
-
async comment(repo, number, body, approval) {
|
|
595
|
-
const a = requireApproval(this.name, approval);
|
|
596
|
-
this.call("comment", [repo, number, body], a);
|
|
597
|
-
if (!this.prs.has(this.key(repo, number)))
|
|
598
|
-
this.notFound(`PR ${repo}#${number}`);
|
|
599
|
-
}
|
|
600
|
-
async merge(repo, number, approval) {
|
|
601
|
-
const a = requireApproval(this.name, approval);
|
|
602
|
-
this.call("merge", [repo, number], a);
|
|
603
|
-
const pr = this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`);
|
|
604
|
-
const blockers = mergeBlockers(pr);
|
|
605
|
-
if (blockers.length > 0)
|
|
606
|
-
throw new AdapterError(this.name, "conflict", `can't merge: ${blockers.join("; ")}`);
|
|
607
|
-
pr.state = "merged";
|
|
608
|
-
return structuredClone(pr);
|
|
609
|
-
}
|
|
610
|
-
async closePullRequest(repo, number, approval) {
|
|
611
|
-
const a = requireApproval(this.name, approval);
|
|
612
|
-
this.call("closePullRequest", [repo, number], a);
|
|
613
|
-
const pr = this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`);
|
|
614
|
-
if (pr.state === "merged")
|
|
615
|
-
throw new AdapterError(this.name, "conflict", `PR ${number} is merged and can't be closed`);
|
|
616
|
-
pr.state = "closed";
|
|
617
|
-
return structuredClone(pr);
|
|
618
|
-
}
|
|
619
|
-
/** Test helpers: what reviewers and CI would do on the host. */
|
|
620
|
-
review(repo, number, by, state) {
|
|
621
|
-
(this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`)).reviews.push({
|
|
622
|
-
by,
|
|
623
|
-
state
|
|
624
|
-
});
|
|
625
|
-
}
|
|
626
|
-
setChecks(repo, number, checks) {
|
|
627
|
-
(this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`)).checks = checks;
|
|
628
|
-
}
|
|
629
|
-
requireReviewers(repo, number, reviewers) {
|
|
630
|
-
(this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`)).requiredReviewers = reviewers;
|
|
631
|
-
}
|
|
632
|
-
markReady(repo, number) {
|
|
633
|
-
const pr = this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`);
|
|
634
|
-
if (pr.state === "draft")
|
|
635
|
-
pr.state = "open";
|
|
636
|
-
}
|
|
637
|
-
};
|
|
638
|
-
|
|
639
642
|
// packages/adapters/dist/read-only.js
|
|
640
643
|
var MockWiki = class extends MockBase {
|
|
641
644
|
pages = /* @__PURE__ */ new Map();
|
|
@@ -914,6 +917,16 @@ function changeOfBranch(branch) {
|
|
|
914
917
|
const m = /^(?:handoff|task|change)\/([a-z0-9][a-z0-9._-]*)(?:\/|$)/.exec(branch);
|
|
915
918
|
return m?.[1];
|
|
916
919
|
}
|
|
920
|
+
var localOf = (open) => Number(open.inputs.number);
|
|
921
|
+
function recordedOf(open) {
|
|
922
|
+
const n = open.state === "done" ? Number(open.recorded?.values.number) : NaN;
|
|
923
|
+
return Number.isInteger(n) && n > 0 ? n : void 0;
|
|
924
|
+
}
|
|
925
|
+
var prName = (open) => {
|
|
926
|
+
const n = recordedOf(open);
|
|
927
|
+
return n ? `PR #${n}` : `the PR from ${String(open.inputs.head)}`;
|
|
928
|
+
};
|
|
929
|
+
var prSlug = (verb, open) => `${verb}-pr-${String(open.inputs.head)}`;
|
|
917
930
|
var ManualGitHost = class extends ManualBase {
|
|
918
931
|
constructor(opts) {
|
|
919
932
|
super("git-host", "git-host", opts);
|
|
@@ -930,22 +943,38 @@ var ManualGitHost = class extends ManualBase {
|
|
|
930
943
|
async prSteps(repo) {
|
|
931
944
|
return (await this.opts.store.list({ system: "git-host", action: "open-pull-request" })).filter((s) => !repo || s.inputs.repo === repo);
|
|
932
945
|
}
|
|
933
|
-
|
|
946
|
+
/** The steps of one PR, by the number Atticus gave it (which never changes). */
|
|
947
|
+
async related(open, action) {
|
|
948
|
+
const repo = String(open.inputs.repo);
|
|
949
|
+
const number = localOf(open);
|
|
934
950
|
return (await this.opts.store.list({ system: "git-host", action })).filter((s) => s.inputs.repo === repo && s.inputs.number === number);
|
|
935
951
|
}
|
|
952
|
+
/**
|
|
953
|
+
* Review round 44: the number the PR goes by. The recorded one, unless it is the number Atticus
|
|
954
|
+
* gave another PR in the repo, or one recorded for another PR too: then the number Atticus gave
|
|
955
|
+
* it, so no number a caller holds ever names two PRs (new numbers skip recorded ones).
|
|
956
|
+
*/
|
|
957
|
+
async numberOf(open) {
|
|
958
|
+
const local = localOf(open);
|
|
959
|
+
const rec = recordedOf(open);
|
|
960
|
+
if (rec === void 0 || rec === local)
|
|
961
|
+
return local;
|
|
962
|
+
const others = (await this.prSteps(String(open.inputs.repo))).filter((s) => s.id !== open.id);
|
|
963
|
+
return others.some((s) => localOf(s) === rec || recordedOf(s) === rec) ? local : rec;
|
|
964
|
+
}
|
|
936
965
|
async toPr(open) {
|
|
937
966
|
const repo = String(open.inputs.repo);
|
|
938
|
-
const number =
|
|
967
|
+
const number = localOf(open);
|
|
939
968
|
const rec = open.state === "done" ? open.recorded?.values : void 0;
|
|
940
|
-
const
|
|
941
|
-
const
|
|
969
|
+
const reports = (await this.related(open, "report-pull-request")).filter((s) => s.state === "done").sort((a, b) => a.recorded.at < b.recorded.at ? -1 : 1);
|
|
970
|
+
const merged = (await this.related(open, "merge-pull-request")).some((s) => s.state === "done") || reports.some((s) => s.recorded?.values.merged === true);
|
|
942
971
|
const last = reports.at(-1)?.recorded?.values;
|
|
943
972
|
const list = (v) => Array.isArray(v) ? v.map(String) : [];
|
|
944
973
|
const reviews = [
|
|
945
974
|
...list(last?.approvers).map((by) => ({ by, state: "approved" })),
|
|
946
975
|
...list(last?.changesRequestedBy).map((by) => ({ by, state: "changes-requested" }))
|
|
947
976
|
];
|
|
948
|
-
const closed = (await this.related(
|
|
977
|
+
const closed = (await this.related(open, "close-pull-request")).some((s) => s.state === "done");
|
|
949
978
|
let state = open.state === "done" ? open.inputs.draft ? "draft" : "open" : "draft";
|
|
950
979
|
if (open.state === "skipped" || closed)
|
|
951
980
|
state = "closed";
|
|
@@ -953,7 +982,7 @@ var ManualGitHost = class extends ManualBase {
|
|
|
953
982
|
state = "merged";
|
|
954
983
|
return {
|
|
955
984
|
repo,
|
|
956
|
-
number,
|
|
985
|
+
number: await this.numberOf(open),
|
|
957
986
|
url: typeof rec?.url === "string" ? rec.url : `manual://git-host/${repo}/pull/${number}`,
|
|
958
987
|
title: String(open.inputs.title ?? ""),
|
|
959
988
|
body: open.fields.find((f) => f.name === "Description")?.value ?? "",
|
|
@@ -965,13 +994,56 @@ var ManualGitHost = class extends ManualBase {
|
|
|
965
994
|
requiredReviewers: []
|
|
966
995
|
};
|
|
967
996
|
}
|
|
997
|
+
/**
|
|
998
|
+
* The PR by the number Atticus gave it (which a caller may have kept from before the person
|
|
999
|
+
* recorded the real one, and which no other PR in the repo has), else by the recorded number
|
|
1000
|
+
* it goes by (numberOf). Review round 44: a recorded number equal to another PR's own number
|
|
1001
|
+
* finds that other PR, never this one, so a caller can't be handed another change's PR.
|
|
1002
|
+
*/
|
|
968
1003
|
async find(repo, number) {
|
|
969
|
-
const
|
|
970
|
-
|
|
1004
|
+
const all = await this.prSteps(repo);
|
|
1005
|
+
const local = all.find((x) => localOf(x) === number);
|
|
1006
|
+
if (local)
|
|
1007
|
+
return local;
|
|
1008
|
+
for (const x of all)
|
|
1009
|
+
if (await this.numberOf(x) === number)
|
|
1010
|
+
return x;
|
|
1011
|
+
if (all.filter((x) => recordedOf(x) === number).length > 1)
|
|
1012
|
+
throw new AdapterError(this.name, "conflict", `#${number} was recorded for more than one pull request in ${repo}: correct the number on the step of the one it isn't (atticus todo), or use the number Atticus gave it`);
|
|
1013
|
+
return this.notFound(`PR ${repo}#${number}`, "no manual step opened it");
|
|
971
1014
|
}
|
|
972
1015
|
async getPullRequest(repo, number) {
|
|
973
1016
|
this.journal.push({ method: "getPullRequest" });
|
|
974
|
-
|
|
1017
|
+
const open = await this.find(repo, number);
|
|
1018
|
+
const pr = await this.toPr(open);
|
|
1019
|
+
await this.settle(open, pr);
|
|
1020
|
+
return pr;
|
|
1021
|
+
}
|
|
1022
|
+
/**
|
|
1023
|
+
* Keeps a PR's steps in step with what was recorded: a reviews step still open on a PR that
|
|
1024
|
+
* reads merged or closed is skipped, saying why; a task's PR open on the host, with its reviews
|
|
1025
|
+
* recorded but not its merge, gets a step to record that it merged (a task's PR has no gate to
|
|
1026
|
+
* make a Merge step; a hand-off's gets one when it syncs). Steps only: nothing is sent.
|
|
1027
|
+
*/
|
|
1028
|
+
async settle(open, pr) {
|
|
1029
|
+
const waiting = (await this.related(open, "report-pull-request")).filter((s) => s.state === "open");
|
|
1030
|
+
if (pr.state === "merged" || pr.state === "closed") {
|
|
1031
|
+
for (const s of waiting)
|
|
1032
|
+
await recordStep(this.opts.store, s.id, {
|
|
1033
|
+
by: "atticus",
|
|
1034
|
+
at: this.now(),
|
|
1035
|
+
skip: true,
|
|
1036
|
+
note: `${prName(open)} is ${pr.state} on the Git host: nothing left to record.`
|
|
1037
|
+
});
|
|
1038
|
+
return;
|
|
1039
|
+
}
|
|
1040
|
+
if (pr.state !== "open" || waiting.length > 0)
|
|
1041
|
+
return;
|
|
1042
|
+
if (!String(open.inputs.head).startsWith("task/"))
|
|
1043
|
+
return;
|
|
1044
|
+
if ((await this.related(open, "merge-pull-request")).some((s) => s.state === "open"))
|
|
1045
|
+
return;
|
|
1046
|
+
await this.askForReviews(open, open.change);
|
|
975
1047
|
}
|
|
976
1048
|
async listPullRequests(repo, q) {
|
|
977
1049
|
this.journal.push({ method: "listPullRequests" });
|
|
@@ -986,15 +1058,16 @@ var ManualGitHost = class extends ManualBase {
|
|
|
986
1058
|
/** A report step for the PR's reviews and checks, unless one is still open. */
|
|
987
1059
|
async askForReviews(open, change) {
|
|
988
1060
|
const repo = String(open.inputs.repo);
|
|
989
|
-
const number =
|
|
990
|
-
const reports = await this.related(
|
|
1061
|
+
const number = localOf(open);
|
|
1062
|
+
const reports = await this.related(open, "report-pull-request");
|
|
991
1063
|
if (reports.some((s) => s.state === "open"))
|
|
992
1064
|
return;
|
|
1065
|
+
const again = reports.some((s) => s.state === "done") && recordedOf(open) !== void 0;
|
|
993
1066
|
await this.step("report", {
|
|
994
|
-
slug:
|
|
1067
|
+
slug: prSlug("report", open),
|
|
995
1068
|
action: "report-pull-request",
|
|
996
1069
|
key: `git-host|report|${repo}|${number}|${reports.length}`,
|
|
997
|
-
title: `Record the reviews and checks on
|
|
1070
|
+
title: again ? `Record that ${prName(open)} (${open.inputs.title}) merged, or its reviews again` : `Record the reviews and checks on ${prName(open)} (${open.inputs.title}), and whether it merged`,
|
|
998
1071
|
where: `Git host: ${repo}, the pull request opened for step ${open.id}`,
|
|
999
1072
|
...change ? { change } : {},
|
|
1000
1073
|
inputs: { repo, number },
|
|
@@ -1004,7 +1077,8 @@ var ManualGitHost = class extends ManualBase {
|
|
|
1004
1077
|
],
|
|
1005
1078
|
instructions: [
|
|
1006
1079
|
"Once reviewers have acted, record who approved, who asked for changes and whether the checks pass.",
|
|
1007
|
-
"Name people by their handle on the Git host. Only what is recorded here counts for approval."
|
|
1080
|
+
"Name people by their handle on the Git host. Only what is recorded here counts for approval.",
|
|
1081
|
+
"Once it is merged on the Git host, record Merged on the Git host: yes here, and Atticus reads it as merged."
|
|
1008
1082
|
],
|
|
1009
1083
|
result: [
|
|
1010
1084
|
{ name: "approvers", label: "Approved by", format: "handles", required: false },
|
|
@@ -1014,7 +1088,8 @@ var ManualGitHost = class extends ManualBase {
|
|
|
1014
1088
|
format: "handles",
|
|
1015
1089
|
required: false
|
|
1016
1090
|
},
|
|
1017
|
-
{ name: "checksPassing", label: "All checks pass", format: "yes-no", required: true }
|
|
1091
|
+
{ name: "checksPassing", label: "All checks pass", format: "yes-no", required: true },
|
|
1092
|
+
{ name: "merged", label: "Merged on the Git host", format: "yes-no", required: false }
|
|
1018
1093
|
],
|
|
1019
1094
|
dependsOn: [open.id]
|
|
1020
1095
|
});
|
|
@@ -1032,14 +1107,15 @@ var ManualGitHost = class extends ManualBase {
|
|
|
1032
1107
|
if (pr.state === "open" || pr.state === "draft")
|
|
1033
1108
|
throw new AdapterError(this.name, "conflict", `an open PR from ${input.head} already exists`);
|
|
1034
1109
|
}
|
|
1035
|
-
const number = existing.reduce((n, s) => Math.max(n,
|
|
1110
|
+
const number = existing.reduce((n, s) => Math.max(n, localOf(s), recordedOf(s) ?? 0), 0) + 1;
|
|
1036
1111
|
const change = this.opts.change ?? changeOfBranch(input.head);
|
|
1037
1112
|
const proc = this.procedureFor("open-pull-request");
|
|
1038
1113
|
const open = await this.step("createPullRequest", {
|
|
1039
1114
|
slug: `open-pr-${input.head}`,
|
|
1040
1115
|
action: "open-pull-request",
|
|
1041
1116
|
key: `git-host|pr|${input.repo}|${input.head}|${number}`,
|
|
1042
|
-
|
|
1117
|
+
// Ninth UX walk: the release PRs of three repos had one title on Home; the repo tells them apart.
|
|
1118
|
+
title: `Open a pull request in ${input.repo} from ${input.head} into ${input.base}`,
|
|
1043
1119
|
where: `Git host: ${input.repo}, new pull request`,
|
|
1044
1120
|
...change ? { change } : {},
|
|
1045
1121
|
...proc ?? {},
|
|
@@ -1077,13 +1153,13 @@ var ManualGitHost = class extends ManualBase {
|
|
|
1077
1153
|
const open = await this.find(repo, number);
|
|
1078
1154
|
const change = open.change;
|
|
1079
1155
|
await this.step("comment", {
|
|
1080
|
-
slug:
|
|
1156
|
+
slug: prSlug("comment", open),
|
|
1081
1157
|
action: "comment-pull-request",
|
|
1082
|
-
key: `git-host|comment|${repo}|${
|
|
1083
|
-
title: `Post a comment on
|
|
1158
|
+
key: `git-host|comment|${repo}|${localOf(open)}|${shortHash(body)}`,
|
|
1159
|
+
title: `Post a comment on ${prName(open)} (${open.inputs.title})`,
|
|
1084
1160
|
where: `Git host: ${repo}, the pull request opened for step ${open.id}`,
|
|
1085
1161
|
...change ? { change } : {},
|
|
1086
|
-
inputs: { repo, number },
|
|
1162
|
+
inputs: { repo, number: localOf(open) },
|
|
1087
1163
|
fields: [{ name: "Comment", value: body }],
|
|
1088
1164
|
instructions: ["Post the comment below on the pull request."],
|
|
1089
1165
|
dependsOn: [open.id]
|
|
@@ -1104,13 +1180,13 @@ var ManualGitHost = class extends ManualBase {
|
|
|
1104
1180
|
if (pr.state === "closed")
|
|
1105
1181
|
return pr;
|
|
1106
1182
|
await this.step("closePullRequest", {
|
|
1107
|
-
slug:
|
|
1183
|
+
slug: prSlug("close", open),
|
|
1108
1184
|
action: "close-pull-request",
|
|
1109
|
-
key: `git-host|close|${repo}|${
|
|
1110
|
-
title: `Close
|
|
1185
|
+
key: `git-host|close|${repo}|${localOf(open)}`,
|
|
1186
|
+
title: `Close ${prName(open)} (${open.inputs.title}) without merging`,
|
|
1111
1187
|
where: `Git host: ${repo}, ${pr.url}`,
|
|
1112
1188
|
...open.change ? { change: open.change } : {},
|
|
1113
|
-
inputs: { repo, number },
|
|
1189
|
+
inputs: { repo, number: localOf(open) },
|
|
1114
1190
|
fields: [{ name: "Pull request", value: pr.url }],
|
|
1115
1191
|
instructions: [
|
|
1116
1192
|
"The change went back to the product owner: close the pull request on the Git host without merging it, then mark this step done."
|
|
@@ -1128,19 +1204,21 @@ var ManualGitHost = class extends ManualBase {
|
|
|
1128
1204
|
const blockers = mergeBlockers(pr);
|
|
1129
1205
|
if (blockers.length > 0)
|
|
1130
1206
|
throw new AdapterError(this.name, "conflict", `can't merge: ${blockers.join("; ")}`);
|
|
1207
|
+
const recorder = (await this.related(open, "report-pull-request")).filter((s) => s.state === "done" && s.recorded).sort((a2, b) => a2.recorded.at < b.recorded.at ? -1 : 1).at(-1)?.recorded?.by;
|
|
1208
|
+
const approvedBy = pr.reviews.filter((r) => r.state === "approved").map((r) => r.by).join(", ");
|
|
1131
1209
|
const step = await this.step("merge", {
|
|
1132
|
-
slug:
|
|
1210
|
+
slug: prSlug("merge", open),
|
|
1133
1211
|
action: "merge-pull-request",
|
|
1134
|
-
key: `git-host|merge|${repo}|${
|
|
1135
|
-
title: `Merge
|
|
1212
|
+
key: `git-host|merge|${repo}|${localOf(open)}`,
|
|
1213
|
+
title: `Merge ${prName(open)} (${open.inputs.title}) on the Git host`,
|
|
1136
1214
|
where: `Git host: ${repo}, ${pr.url}`,
|
|
1137
1215
|
...open.change ? { change: open.change } : {},
|
|
1138
|
-
inputs: { repo, number },
|
|
1216
|
+
inputs: { repo, number: localOf(open) },
|
|
1139
1217
|
fields: [
|
|
1140
1218
|
{ name: "Pull request", value: pr.url },
|
|
1141
1219
|
{
|
|
1142
1220
|
name: "Approved by",
|
|
1143
|
-
value:
|
|
1221
|
+
value: approvedBy && recorder ? `${approvedBy} (recorded by ${recorder})` : approvedBy
|
|
1144
1222
|
}
|
|
1145
1223
|
],
|
|
1146
1224
|
instructions: [
|
|
@@ -1150,7 +1228,7 @@ var ManualGitHost = class extends ManualBase {
|
|
|
1150
1228
|
result: [{ name: "mergedBy", label: "Merged by", format: "handles", required: false }],
|
|
1151
1229
|
dependsOn: [open.id]
|
|
1152
1230
|
}, a);
|
|
1153
|
-
throw new AdapterError(this.name, "unavailable", `a person merges
|
|
1231
|
+
throw new AdapterError(this.name, "unavailable", `a person merges ${prName(open)} on the Git host: do step ${step.id} (atticus todo), then sync again`, false);
|
|
1154
1232
|
}
|
|
1155
1233
|
};
|
|
1156
1234
|
|
|
@@ -1184,7 +1262,7 @@ var ManualWiki = class extends ManualBase {
|
|
|
1184
1262
|
const full = join2(d, e.name);
|
|
1185
1263
|
if (e.isDirectory())
|
|
1186
1264
|
await walk(full);
|
|
1187
|
-
else if (/\.(md|markdown)$/i.test(e.name)) {
|
|
1265
|
+
else if (e.isFile() && /\.(md|markdown)$/i.test(e.name)) {
|
|
1188
1266
|
const id = relative(root, full).split(sep).join("/");
|
|
1189
1267
|
const body = await readFile2(full, "utf8");
|
|
1190
1268
|
const title = /^#\s+(.+)$/m.exec(body)?.[1]?.trim() ?? e.name.replace(/\.(md|markdown)$/i, "");
|
|
@@ -1714,6 +1792,7 @@ export {
|
|
|
1714
1792
|
requireApproval,
|
|
1715
1793
|
workItemsCsv,
|
|
1716
1794
|
mergeBlockers,
|
|
1795
|
+
MockGitHost,
|
|
1717
1796
|
fileStepStore,
|
|
1718
1797
|
checkResult,
|
|
1719
1798
|
StepError,
|