@maycombhq/atticus 2.0.0-beta.27.1 → 2.0.0-beta.28
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-N5DLB74D.js → chunk-22MCNFEB.js} +4 -4
- package/dist/{chunk-C5DY4R7R.js → chunk-25GG2NAU.js} +2 -2
- package/dist/{chunk-YAPVAYZN.js → chunk-2C3KACPH.js} +3 -3
- package/dist/{chunk-NNURP7VO.js → chunk-2D5YPHEF.js} +11 -11
- package/dist/{chunk-3CMGSQIA.js → chunk-2E3TK22H.js} +2 -2
- package/dist/{chunk-GZSOZYEP.js → chunk-2E725C6E.js} +2 -2
- package/dist/{chunk-AOQG37K4.js → chunk-2FJ2GBMY.js} +8 -2
- package/dist/{chunk-JF2HM2IF.js → chunk-2GP3OTVG.js} +3 -3
- package/dist/{chunk-QLT3WYTD.js → chunk-2Q5TFDLI.js} +3 -3
- package/dist/{chunk-JGR4X2UA.js → chunk-2YB35HY6.js} +19 -19
- package/dist/{chunk-7LOXUBRB.js → chunk-2Z2CIBGD.js} +11 -11
- package/dist/{chunk-ZNZYMUBK.js → chunk-32KKFIIP.js} +23 -23
- package/dist/{chunk-TPKDYSHO.js → chunk-3AZEQIXD.js} +9 -9
- package/dist/{chunk-MNOZDE6W.js → chunk-3BOKR3RU.js} +10 -10
- package/dist/chunk-3MKQXZWB.js +67 -0
- package/dist/{chunk-JRXFZB6J.js → chunk-3MXX45EF.js} +3 -3
- package/dist/{chunk-MA44TMTL.js → chunk-3STTGZFW.js} +1 -1
- package/dist/{chunk-P7H5WZH6.js → chunk-3URSPNDW.js} +6 -6
- package/dist/{chunk-6ESJWPR3.js → chunk-3YR2EYJP.js} +4 -4
- package/dist/{chunk-WNPGLGCJ.js → chunk-42CRNKOT.js} +1 -1
- package/dist/{chunk-2WPUSHB6.js → chunk-43DFUZ5J.js} +9 -9
- package/dist/{chunk-DDRTAEFZ.js → chunk-4BIG3Y3L.js} +7 -7
- package/dist/{chunk-PPKH6ULR.js → chunk-4EBXR37M.js} +1 -1
- package/dist/{chunk-SRIU7L4Z.js → chunk-4GR77BYQ.js} +11 -11
- package/dist/{chunk-66CMRGI2.js → chunk-4OITEXVX.js} +18 -18
- package/dist/{chunk-UGJSKAZ2.js → chunk-4PYY4TMT.js} +3 -3
- package/dist/{chunk-LH52QGNY.js → chunk-4QCR6HE3.js} +7 -7
- package/dist/{chunk-DNKYWTVZ.js → chunk-5DTLTADG.js} +14 -14
- package/dist/{chunk-INCFIDCB.js → chunk-5KRMFM3P.js} +1 -1
- package/dist/{chunk-O5BUMSB3.js → chunk-5PWXWUW3.js} +6 -6
- package/dist/{chunk-AQLDQK2M.js → chunk-5RCX7YFH.js} +3 -3
- package/dist/{chunk-7BOGXFZ3.js → chunk-5U4KA353.js} +7 -7
- package/dist/{chunk-MP7W6OKP.js → chunk-65VII57C.js} +12 -12
- package/dist/{chunk-EFDUC35B.js → chunk-665VDAU4.js} +2 -2
- package/dist/{chunk-3NGHSBVS.js → chunk-6D7HF6V4.js} +21 -21
- package/dist/{chunk-R7VX5BSP.js → chunk-6J4PQWNI.js} +12 -12
- package/dist/{chunk-MUXYUIBV.js → chunk-6LGI3LIF.js} +3 -3
- package/dist/{chunk-ZQZRNVNS.js → chunk-6LIHNYLJ.js} +20 -20
- package/dist/{chunk-UMIZYX3U.js → chunk-6RKZYQTL.js} +12 -12
- package/dist/chunk-6WIYOGDU.js +23 -0
- package/dist/{chunk-ZIAMPN7N.js → chunk-72FLXGSN.js} +3 -3
- package/dist/{chunk-USYDJY63.js → chunk-7CBLSYKC.js} +12 -12
- package/dist/{chunk-6DHGNY3O.js → chunk-7DMQXEKN.js} +12 -12
- package/dist/chunk-7GBVL7JC.js +51 -0
- package/dist/{chunk-FVT6LUOC.js → chunk-7IEQFI4L.js} +4 -4
- package/dist/{chunk-LAPVW2F6.js → chunk-7NU54VAT.js} +3 -3
- package/dist/{chunk-PVJZR4JB.js → chunk-7O22X554.js} +372 -37
- package/dist/{chunk-5CIW5RMP.js → chunk-7RBQP7PY.js} +3 -3
- package/dist/{chunk-VSED7FYC.js → chunk-7SJ7D6Q7.js} +4 -4
- package/dist/{chunk-XKWPEY4B.js → chunk-7SVS7PBB.js} +10 -10
- package/dist/{chunk-6MSACVCY.js → chunk-7T73PJED.js} +17 -17
- package/dist/{chunk-LCQIRCOT.js → chunk-A2PNCDY2.js} +5 -5
- package/dist/{chunk-ELZGWEK4.js → chunk-A5IJVTLL.js} +4 -4
- package/dist/{chunk-QXXEOH3A.js → chunk-ABY7IKHT.js} +3 -3
- package/dist/{chunk-MSNEGKI3.js → chunk-AGTB5CRY.js} +13 -11
- package/dist/{chunk-X5B7KYPD.js → chunk-AIM4ER32.js} +1 -1
- package/dist/{chunk-CLM5Z3R5.js → chunk-AKC5NKH6.js} +4 -4
- package/dist/{chunk-HNU4AQXB.js → chunk-AKMOH4JL.js} +17 -17
- package/dist/{chunk-OBQL7GX4.js → chunk-APVNK4WC.js} +23 -23
- package/dist/{chunk-5YX7MJWW.js → chunk-AQOFIHBO.js} +20 -20
- package/dist/{chunk-6OTGCKYH.js → chunk-AT7JJQGK.js} +6 -6
- package/dist/{chunk-2J2GMERV.js → chunk-ATMILKLM.js} +12 -12
- package/dist/{chunk-VVLWEM2Y.js → chunk-AWICXXAC.js} +4 -4
- package/dist/{chunk-QU3ENIJV.js → chunk-AY7Z2MFH.js} +22 -22
- package/dist/{chunk-PGAXZLNF.js → chunk-B23Z4Y25.js} +9 -9
- package/dist/{chunk-AHAEHBH5.js → chunk-B6N2QL5F.js} +7 -7
- package/dist/{chunk-YRHKEXTP.js → chunk-BCMXPM2J.js} +7 -7
- package/dist/{chunk-L4WFMAHI.js → chunk-BEDHU324.js} +11 -11
- package/dist/{chunk-QNXMVJMA.js → chunk-BJZ5BPJU.js} +4 -4
- package/dist/{chunk-FT55WYNB.js → chunk-BKHDWJYK.js} +18 -18
- package/dist/{chunk-3M3MDBOG.js → chunk-BPWOKVPJ.js} +1 -1
- package/dist/{chunk-3YL2GZZH.js → chunk-BULKZIYH.js} +20 -20
- package/dist/{chunk-4NPWOUI2.js → chunk-CBYJQD7C.js} +2 -2
- package/dist/{chunk-OUALZ5RA.js → chunk-CLH4QLIH.js} +1 -1
- package/dist/{chunk-W6OY2PMB.js → chunk-CP4KZA33.js} +6 -6
- package/dist/{chunk-V6BP4XHZ.js → chunk-CSP2VZQ2.js} +20 -20
- package/dist/{chunk-ORGB6645.js → chunk-CX7WKIUV.js} +12 -12
- package/dist/{chunk-4FLIW5PJ.js → chunk-CXGGT3LX.js} +1 -1
- package/dist/{chunk-Y6S7VCYN.js → chunk-CYPQ3PBB.js} +3 -3
- package/dist/{chunk-XZY4GTCX.js → chunk-D6GPG32H.js} +2 -2
- package/dist/{chunk-DTW37FJ6.js → chunk-D6WUJFQH.js} +12 -12
- package/dist/{chunk-UXETN43F.js → chunk-DEQGTRMM.js} +5 -5
- package/dist/{chunk-VWCNMDMZ.js → chunk-DJLVEPNP.js} +2 -2
- package/dist/{chunk-JD3QDLM2.js → chunk-DR2NZ2O6.js} +24 -24
- package/dist/{chunk-KOITA526.js → chunk-DSLVJKCF.js} +19 -19
- package/dist/{chunk-OOZKLLW7.js → chunk-DXSZXPFF.js} +23 -23
- package/dist/{chunk-GEHB2LMA.js → chunk-E2V7Z5PS.js} +26 -26
- package/dist/{chunk-YTPND655.js → chunk-E4AUZ5AC.js} +14 -14
- package/dist/{chunk-CPB4XMFI.js → chunk-E7O2WMDW.js} +5 -5
- package/dist/{chunk-DNDIT3LD.js → chunk-EC6YA766.js} +5 -5
- package/dist/{chunk-2AIOOA3U.js → chunk-EGHG6K65.js} +4 -4
- package/dist/{chunk-W5UMEIYG.js → chunk-ESOOGVOM.js} +17 -17
- package/dist/{chunk-ZT6GPGZ4.js → chunk-EVWTVCFN.js} +34 -34
- package/dist/{chunk-XRTECHVH.js → chunk-EXGL7CWI.js} +6 -6
- package/dist/{chunk-IPSZDVLI.js → chunk-FEJPEDDX.js} +4 -4
- package/dist/{chunk-BUBKKEUV.js → chunk-FHTOS6DU.js} +2 -2
- package/dist/{chunk-LP6BFBE5.js → chunk-FIYGZJF6.js} +4 -4
- package/dist/{chunk-NNRQZUVW.js → chunk-FJ6YX4K2.js} +22 -22
- package/dist/{chunk-I57IH5X6.js → chunk-FRSDREKQ.js} +1 -1
- package/dist/{chunk-LKLB5IJ7.js → chunk-FUKL7PUS.js} +4 -4
- package/dist/{chunk-U36V664P.js → chunk-G4USCLYQ.js} +87 -42
- package/dist/{chunk-5KR2DHDW.js → chunk-G5CXRFI5.js} +14 -14
- package/dist/{chunk-MBIJNU3D.js → chunk-G5ZQLW5K.js} +500 -369
- package/dist/{chunk-OILAH2C7.js → chunk-GAACSJWG.js} +17 -17
- package/dist/{chunk-44XGOSUU.js → chunk-GCT6HBIU.js} +4 -4
- package/dist/{chunk-CHS5BJ34.js → chunk-GGCRLU4L.js} +3 -3
- package/dist/{chunk-S6TLXRBR.js → chunk-GNY4LOHN.js} +3 -3
- package/dist/{chunk-VTQ55N4O.js → chunk-GOB2TYE5.js} +14 -14
- package/dist/{chunk-UDM7LXNJ.js → chunk-H4JC4U44.js} +3 -3
- package/dist/{chunk-I4P72R2F.js → chunk-H7BHL2KV.js} +21 -21
- package/dist/{chunk-J4L64TUA.js → chunk-HBBMRFSQ.js} +25 -25
- package/dist/{chunk-RDFRB26Z.js → chunk-HBRMXFMC.js} +3 -3
- package/dist/chunk-HBWRKIJI.js +68 -0
- package/dist/{chunk-OUGTAOGA.js → chunk-HE4O7PLD.js} +1 -1
- package/dist/{chunk-HOEZQRZU.js → chunk-HPKQIRQR.js} +5 -5
- package/dist/{chunk-XIIT4PVT.js → chunk-HQG5AGT2.js} +2 -2
- package/dist/{chunk-O6UC7ASJ.js → chunk-HWXEPWHW.js} +5 -5
- package/dist/{chunk-L3KSU4QU.js → chunk-HZ65CLTT.js} +8 -8
- package/dist/{chunk-FZ2K3IXP.js → chunk-HZPHNRHV.js} +23 -23
- package/dist/{chunk-SFCFL7Y5.js → chunk-I3ZJTM2T.js} +3 -1
- package/dist/{chunk-FADIWOA5.js → chunk-IEGOFWZC.js} +2 -2
- package/dist/{chunk-4BK5EJ2C.js → chunk-IQYR73ED.js} +6 -6
- package/dist/{chunk-DS2OZXBN.js → chunk-J3G3YZSE.js} +17 -17
- package/dist/{chunk-W4SWXJZQ.js → chunk-J5AJRTID.js} +14 -14
- package/dist/{chunk-QK3UFHFC.js → chunk-JCZSY5ZC.js} +1 -1
- package/dist/{chunk-2ANBMA74.js → chunk-JMU2NZ4W.js} +2 -2
- package/dist/{chunk-HDWVR5KD.js → chunk-JNAJH2KI.js} +1 -1
- package/dist/{chunk-DVQCYF3V.js → chunk-JQARUMXI.js} +2 -2
- package/dist/{chunk-Z245SJ64.js → chunk-JS2QR752.js} +20 -20
- package/dist/{chunk-D566V3T3.js → chunk-JTTTC5AI.js} +11 -11
- package/dist/{chunk-3PN7KJBA.js → chunk-JUY5VPJL.js} +19 -19
- package/dist/{chunk-JA7AUBHU.js → chunk-JZ5UJ5AM.js} +19 -19
- package/dist/{chunk-5GCCG3GJ.js → chunk-KIRQVVEQ.js} +2 -2
- package/dist/{chunk-SF3HXNXR.js → chunk-KLTHX4MU.js} +3 -3
- package/dist/{chunk-7GZ46N4V.js → chunk-KNHV3DEJ.js} +14 -14
- package/dist/{chunk-6GX3OFEZ.js → chunk-KOTDH7M2.js} +5 -5
- package/dist/{chunk-FBNJZ3VH.js → chunk-KS3XFDGF.js} +2 -2
- package/dist/{chunk-XRNMQZFC.js → chunk-L72673XW.js} +8 -8
- package/dist/{chunk-SKVLJL2E.js → chunk-LBLYKXFO.js} +23 -23
- package/dist/{chunk-LCWC6NDE.js → chunk-LD35W2PC.js} +3 -3
- package/dist/{chunk-TM2WY65Q.js → chunk-LD5YRRZW.js} +20 -20
- package/dist/{chunk-MA73J3E6.js → chunk-LDHTS4DI.js} +10 -10
- package/dist/{chunk-EHXEJFHD.js → chunk-LHSKJEIP.js} +2 -2
- package/dist/{chunk-SSYD4XIW.js → chunk-LQM2YZUX.js} +15 -15
- package/dist/{chunk-QPAANKUR.js → chunk-LSRKXZI4.js} +4 -4
- package/dist/{chunk-TRSNIJNM.js → chunk-LWCWGLLZ.js} +3 -3
- package/dist/{chunk-2FORECYK.js → chunk-LWUWPGQV.js} +6 -6
- package/dist/{chunk-VGXE7XFO.js → chunk-M4XMRGH3.js} +14 -14
- package/dist/{chunk-6VFR3DYS.js → chunk-M5RJE72K.js} +8 -8
- package/dist/{chunk-NK6JCNJX.js → chunk-M76MYSFZ.js} +16 -16
- package/dist/{chunk-6TXB2WR6.js → chunk-M7H7U62C.js} +4 -4
- package/dist/{chunk-BSGOUHL6.js → chunk-MBBWY2MA.js} +12 -12
- package/dist/{chunk-5YEUAZZE.js → chunk-MM2SZYPS.js} +4 -4
- package/dist/{chunk-3BQDBTQJ.js → chunk-MO6D2ZO6.js} +8 -8
- package/dist/{chunk-JOG5O2ZH.js → chunk-MUTSQOQ7.js} +11 -11
- package/dist/{chunk-GBJRFFDW.js → chunk-MVZYCDIX.js} +1 -1
- package/dist/{chunk-TMMGQBLO.js → chunk-MWEJAEX5.js} +15 -15
- package/dist/{chunk-3PBIZBWN.js → chunk-MZ2ITC2C.js} +1 -1
- package/dist/{chunk-HBHPOKL2.js → chunk-MZ7LTRE4.js} +4 -4
- package/dist/{chunk-AXJCABA5.js → chunk-N2IVTVXW.js} +5 -5
- package/dist/{chunk-YIGSUTW2.js → chunk-N5IGQQM4.js} +3 -3
- package/dist/{chunk-LTVOQJKT.js → chunk-NC6ET2OI.js} +3 -3
- package/dist/{chunk-S5O57P5P.js → chunk-NNRU2B3U.js} +13 -13
- package/dist/{chunk-NJ5IEZIG.js → chunk-NQFBTZWW.js} +7 -7
- package/dist/{chunk-TFN2N227.js → chunk-NT4SCIRT.js} +3 -3
- package/dist/{chunk-LQEMCF43.js → chunk-NTWOEULN.js} +12 -12
- package/dist/{chunk-NWAMUD7B.js → chunk-NWZPMZUR.js} +22 -22
- package/dist/{chunk-7HUCEHUK.js → chunk-O77FAGKZ.js} +12 -12
- package/dist/chunk-ODCC5CRP.js +62 -0
- package/dist/{chunk-YBAJ5SAR.js → chunk-OFHPXH3N.js} +4 -4
- package/dist/{chunk-OY2VC2IU.js → chunk-OHAMT5OA.js} +21 -21
- package/dist/{chunk-D3L5SO27.js → chunk-OJ7KHS4P.js} +2 -2
- package/dist/{chunk-I2NGDERG.js → chunk-OJE4JK45.js} +12 -12
- package/dist/{chunk-AZBP5DTU.js → chunk-OMGEHUXV.js} +9 -9
- package/dist/chunk-ON2W7SWK.js +60 -0
- package/dist/{chunk-VX5CORDG.js → chunk-OU35MAMV.js} +19 -19
- package/dist/{chunk-GF6GBHFN.js → chunk-OUVEXAM2.js} +7 -7
- package/dist/{chunk-G33UIUG3.js → chunk-OXDMFJHR.js} +2 -2
- package/dist/{chunk-W7NNZFIL.js → chunk-OZN3KT74.js} +15 -15
- package/dist/{chunk-RX2SMQV3.js → chunk-P37XFTBW.js} +14 -14
- package/dist/{chunk-JWIAVNEC.js → chunk-P6WPQQ5K.js} +15 -15
- package/dist/{chunk-KMBI6IQD.js → chunk-PEIGHDVC.js} +4 -4
- package/dist/{chunk-523NRKHF.js → chunk-PHXTGKLG.js} +2 -2
- package/dist/{chunk-Z5CIRZNO.js → chunk-PI5G43TD.js} +42 -42
- package/dist/{chunk-APYIIVBH.js → chunk-PKQJANRL.js} +31 -31
- package/dist/{chunk-Q7YDUGVZ.js → chunk-PL4EFATK.js} +1 -1
- package/dist/{chunk-CWKQRP6Y.js → chunk-PNU5SNYP.js} +23 -23
- package/dist/{chunk-QUFZDWPC.js → chunk-PTFOD2OZ.js} +4 -4
- package/dist/{chunk-R6KZWNZM.js → chunk-PUORKWTG.js} +27 -27
- package/dist/{chunk-UDM6HGF4.js → chunk-PXUNPXAB.js} +4 -4
- package/dist/{chunk-U4K34CXK.js → chunk-PZY4M3AZ.js} +16 -16
- package/dist/{chunk-5ZFLP2IK.js → chunk-Q2KK7SXF.js} +3 -3
- package/dist/{chunk-HUMM4S5I.js → chunk-QAKAUMAK.js} +3 -3
- package/dist/{chunk-WPZCSFND.js → chunk-QEODQXAV.js} +16 -16
- package/dist/{chunk-QQUAEM3U.js → chunk-QIUQHNEC.js} +22 -22
- package/dist/{chunk-TMETWJFO.js → chunk-QKDVSKSI.js} +7 -7
- package/dist/{chunk-PCIENCB7.js → chunk-QYK2G2YA.js} +12 -12
- package/dist/{chunk-6H62UHY5.js → chunk-QZIXAFV2.js} +109 -15
- package/dist/{chunk-QXSYFB5L.js → chunk-R3BSM6HV.js} +3 -3
- package/dist/{chunk-GZILYRGC.js → chunk-R5X4CNVG.js} +2 -2
- package/dist/{chunk-RZEYZOLW.js → chunk-RA5Y7WI7.js} +12 -12
- package/dist/{chunk-WTLFRINF.js → chunk-RGL7ZSJ7.js} +32 -32
- package/dist/{chunk-5PAIR73N.js → chunk-RIXLWV3X.js} +22 -22
- package/dist/{chunk-YHS7TSQS.js → chunk-RKDZ2LAO.js} +4 -4
- package/dist/{chunk-R7NPDUBL.js → chunk-RLGDSUJM.js} +12 -12
- package/dist/{chunk-RTHQIGGY.js → chunk-RUCNERM2.js} +23 -23
- package/dist/{chunk-RZYRUXSU.js → chunk-RV32IY7X.js} +1 -1
- package/dist/{chunk-BV7WB32T.js → chunk-RXCYV2QS.js} +22 -22
- package/dist/{chunk-HPCGQAYH.js → chunk-SFWTGHHU.js} +14 -14
- package/dist/{chunk-IDFUGYTS.js → chunk-SG4PMGZS.js} +12 -12
- package/dist/{chunk-AKZTCZ6F.js → chunk-SGFFO45X.js} +1 -1
- package/dist/{chunk-KZ5G3KEN.js → chunk-STJYW2X2.js} +3 -3
- package/dist/{chunk-YPXBGNUV.js → chunk-SU2JHMIS.js} +17 -17
- package/dist/{chunk-3PG6QOQF.js → chunk-T62FEOSG.js} +8 -8
- package/dist/{chunk-TQISA4VW.js → chunk-T7FFW2NN.js} +19 -19
- package/dist/{chunk-WJWSB65O.js → chunk-T7QW62TW.js} +204 -10
- package/dist/{chunk-WNRIL6JQ.js → chunk-TCHA7MWY.js} +12 -12
- package/dist/{chunk-IPMPLTEG.js → chunk-TCYVFE6T.js} +2 -2
- package/dist/{chunk-7SO6CGJH.js → chunk-TEESLG4C.js} +8 -8
- package/dist/{chunk-OY6H7JX6.js → chunk-TIQMGQPM.js} +3 -3
- package/dist/chunk-TQP6HR52.js +43 -0
- package/dist/{chunk-FYRBBFIF.js → chunk-TUYZSEKB.js} +4 -4
- package/dist/{chunk-4UVTNHA6.js → chunk-TYC6ILJ5.js} +1 -1
- package/dist/chunk-U25OIWWE.js +55 -0
- package/dist/{chunk-4HMOOBIR.js → chunk-U3SLTDOW.js} +10 -10
- package/dist/{chunk-ZW3OEHLT.js → chunk-UMP3TCNX.js} +25 -25
- package/dist/{chunk-OUDGBJC2.js → chunk-UZ45RC2L.js} +3 -3
- package/dist/{chunk-NWQ76YQ5.js → chunk-V44VIUP2.js} +16 -16
- package/dist/{chunk-SJ2Z3AWF.js → chunk-VEI22AS7.js} +2 -2
- package/dist/{chunk-M25UUEKC.js → chunk-VKBJ4JDV.js} +21 -21
- package/dist/{chunk-I5X4WU7U.js → chunk-VMNBSQIV.js} +2 -2
- package/dist/{chunk-TOSHT6NJ.js → chunk-VQKBO73Y.js} +6 -6
- package/dist/{chunk-DX7WEXYG.js → chunk-VQX2XXTI.js} +13 -13
- package/dist/{chunk-DGNTEKF6.js → chunk-VTE3MIWY.js} +119 -119
- package/dist/{chunk-YZUOOTC3.js → chunk-VX5WA6M2.js} +22 -22
- package/dist/{chunk-5A4FHGTI.js → chunk-W66GLVBI.js} +15 -15
- package/dist/{chunk-2MRYL45Z.js → chunk-W7U3NIUF.js} +102 -10
- package/dist/{chunk-CWJDZ5VP.js → chunk-WAEYJ6XE.js} +5 -5
- package/dist/{chunk-ELJ5Q4J2.js → chunk-WX2EYZTA.js} +2 -2
- package/dist/{chunk-FBG3QHOL.js → chunk-WZPPCEAK.js} +8 -8
- package/dist/{chunk-TUMHMISE.js → chunk-X3JAILX6.js} +18 -18
- package/dist/{chunk-V7DGFWDB.js → chunk-X4HPOZCJ.js} +22 -22
- package/dist/{chunk-J3ZUKQLV.js → chunk-XGOLAZSH.js} +4 -4
- package/dist/{chunk-3XNE6XXF.js → chunk-XLONNKSI.js} +4 -4
- package/dist/{chunk-ZOAX7W5S.js → chunk-XNZCTQ5C.js} +8 -8
- package/dist/{chunk-TLSL7OII.js → chunk-XPE3V7ZN.js} +7 -7
- package/dist/{chunk-B4WPO6FX.js → chunk-XSLFANKH.js} +12 -12
- package/dist/{chunk-LJEEVZIH.js → chunk-Y3AA4RZA.js} +12 -12
- package/dist/{chunk-SP5BWA5H.js → chunk-Y55ADAF3.js} +27 -27
- package/dist/chunk-YM2X57FO.js +157 -0
- package/dist/{chunk-GLNSLQSV.js → chunk-YRK6FTYB.js} +21 -21
- package/dist/{chunk-UEUPEUZX.js → chunk-YV75FKIY.js} +3 -3
- package/dist/{chunk-PT77IUYQ.js → chunk-Z56NN3AX.js} +19 -19
- package/dist/{chunk-EM6DKBTJ.js → chunk-ZBW2UO5M.js} +3 -3
- package/dist/{chunk-ZCARJ77R.js → chunk-ZGOQY4UB.js} +27 -27
- package/dist/{chunk-A3QZZEJA.js → chunk-ZHNZZ642.js} +63 -37
- package/dist/{chunk-NV5S63YK.js → chunk-ZLPTFC2O.js} +4 -4
- package/dist/{chunk-E7Q52EOO.js → chunk-ZLQQJBPF.js} +5 -5
- package/dist/{chunk-23OQZY5Z.js → chunk-ZUSKC4YT.js} +6 -6
- package/dist/{chunk-3TWERSTY.js → chunk-ZVCF5PBG.js} +11 -11
- package/dist/files.json +588 -580
- package/dist/fixtures/forge/slots/build.json +1 -1
- package/dist/packages/sdk/npm/index.js +144 -1
- package/dist/packages/ui/dist/assets/{elk-api-CPE6PVL8.js → elk-api-dCIOhvlC.js} +2 -2
- package/dist/packages/ui/dist/assets/index-B1Jr0xH8.js +63 -0
- package/dist/packages/ui/dist/assets/index-BqafgeqY.css +1 -0
- package/dist/packages/ui/dist/index.html +2 -2
- package/package.json +5 -5
- package/dist/chunk-CBFQO2F2.js +0 -62
- package/dist/chunk-EHT2KP5A.js +0 -43
- package/dist/chunk-FFIHRQ3O.js +0 -67
- package/dist/chunk-G4TFQ4EG.js +0 -60
- package/dist/chunk-MIKRDA2P.js +0 -68
- package/dist/chunk-RCPWEZD7.js +0 -47
- package/dist/chunk-WTGQJXRJ.js +0 -55
- package/dist/packages/ui/dist/assets/index-BYcVqj0l.js +0 -65
- package/dist/packages/ui/dist/assets/index-DF52Ejvz.css +0 -1
|
@@ -3,19 +3,27 @@ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
|
|
|
3
3
|
var require = __atticusCreateRequire(import.meta.url);
|
|
4
4
|
var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
|
|
5
5
|
var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
|
|
6
|
+
import {
|
|
7
|
+
uiCiteRoutes
|
|
8
|
+
} from "./chunk-R3BSM6HV.js";
|
|
9
|
+
import "./chunk-3YR2EYJP.js";
|
|
6
10
|
import {
|
|
7
11
|
uiComponentTypeRoutes
|
|
8
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-PHXTGKLG.js";
|
|
13
|
+
import {
|
|
14
|
+
historyEntry,
|
|
15
|
+
listHistory
|
|
16
|
+
} from "./chunk-HQG5AGT2.js";
|
|
9
17
|
import {
|
|
10
18
|
changeProblems,
|
|
11
19
|
missingChangeWords
|
|
12
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-VEI22AS7.js";
|
|
13
21
|
import {
|
|
14
22
|
FORCE_STEPS,
|
|
15
23
|
appLines,
|
|
16
24
|
hasKeptResume,
|
|
17
25
|
mapRepoOf
|
|
18
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-3MXX45EF.js";
|
|
19
27
|
import {
|
|
20
28
|
allRuns,
|
|
21
29
|
answerOf,
|
|
@@ -23,14 +31,18 @@ import {
|
|
|
23
31
|
listRuns,
|
|
24
32
|
partStates,
|
|
25
33
|
runTranscript
|
|
26
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-665VDAU4.js";
|
|
27
35
|
import {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
defencesScan,
|
|
37
|
+
evalRun
|
|
38
|
+
} from "./chunk-EGHG6K65.js";
|
|
39
|
+
import {
|
|
40
|
+
listReports,
|
|
41
|
+
readQuality
|
|
42
|
+
} from "./chunk-LDHTS4DI.js";
|
|
31
43
|
import {
|
|
32
44
|
conformanceCommand
|
|
33
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-PXUNPXAB.js";
|
|
34
46
|
import {
|
|
35
47
|
outcomeList,
|
|
36
48
|
outcomeRecord,
|
|
@@ -39,11 +51,10 @@ import {
|
|
|
39
51
|
releaseNotesCommand,
|
|
40
52
|
releasePlanCommand,
|
|
41
53
|
releaseSecurityCommand
|
|
42
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-7RBQP7PY.js";
|
|
43
55
|
import {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
} from "./chunk-XIIT4PVT.js";
|
|
56
|
+
estimateOf
|
|
57
|
+
} from "./chunk-N2IVTVXW.js";
|
|
47
58
|
import {
|
|
48
59
|
changeArchive,
|
|
49
60
|
changeHandoff,
|
|
@@ -51,17 +62,17 @@ import {
|
|
|
51
62
|
changeReleasePrs,
|
|
52
63
|
changeSync,
|
|
53
64
|
syncAfterManualStep
|
|
54
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-T7FFW2NN.js";
|
|
55
66
|
import {
|
|
56
67
|
executorsCheck,
|
|
57
68
|
todoDone,
|
|
58
69
|
todoRun,
|
|
59
70
|
todoShow
|
|
60
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-XGOLAZSH.js";
|
|
61
72
|
import {
|
|
62
73
|
inputsSha256,
|
|
63
74
|
loadExecutors
|
|
64
|
-
} from "./chunk-
|
|
75
|
+
} from "./chunk-TCYVFE6T.js";
|
|
65
76
|
import {
|
|
66
77
|
isSandbox,
|
|
67
78
|
learnCheck,
|
|
@@ -69,59 +80,103 @@ import {
|
|
|
69
80
|
lessonsFor,
|
|
70
81
|
readProgress,
|
|
71
82
|
sandboxCreate
|
|
72
|
-
} from "./chunk-
|
|
73
|
-
import {
|
|
74
|
-
defencesScan,
|
|
75
|
-
evalRun
|
|
76
|
-
} from "./chunk-2AIOOA3U.js";
|
|
77
|
-
import {
|
|
78
|
-
listReports,
|
|
79
|
-
readQuality
|
|
80
|
-
} from "./chunk-MA73J3E6.js";
|
|
81
|
-
import {
|
|
82
|
-
estimateOf
|
|
83
|
-
} from "./chunk-AXJCABA5.js";
|
|
83
|
+
} from "./chunk-M5RJE72K.js";
|
|
84
84
|
import {
|
|
85
85
|
changeMapBody,
|
|
86
86
|
changeMapOf,
|
|
87
87
|
targetFlowsOf
|
|
88
|
-
} from "./chunk-
|
|
89
|
-
import "./chunk-
|
|
90
|
-
import {
|
|
91
|
-
readServiceRequests
|
|
92
|
-
} from "./chunk-MNOZDE6W.js";
|
|
88
|
+
} from "./chunk-HWXEPWHW.js";
|
|
89
|
+
import "./chunk-M7H7U62C.js";
|
|
93
90
|
import {
|
|
94
91
|
runDone,
|
|
95
92
|
taskRun,
|
|
96
93
|
taskRunNotWaiting
|
|
97
|
-
} from "./chunk-
|
|
94
|
+
} from "./chunk-T62FEOSG.js";
|
|
95
|
+
import {
|
|
96
|
+
readServiceRequests
|
|
97
|
+
} from "./chunk-3BOKR3RU.js";
|
|
98
98
|
import {
|
|
99
99
|
changeNextStep
|
|
100
|
-
} from "./chunk-
|
|
100
|
+
} from "./chunk-LWUWPGQV.js";
|
|
101
101
|
import {
|
|
102
102
|
digestCommand
|
|
103
|
-
} from "./chunk-
|
|
103
|
+
} from "./chunk-EXGL7CWI.js";
|
|
104
104
|
import {
|
|
105
105
|
reconcileCommand
|
|
106
|
-
} from "./chunk-
|
|
106
|
+
} from "./chunk-2GP3OTVG.js";
|
|
107
107
|
import {
|
|
108
108
|
sourcesAdd,
|
|
109
109
|
sourcesSync
|
|
110
|
-
} from "./chunk-
|
|
110
|
+
} from "./chunk-VQKBO73Y.js";
|
|
111
111
|
import {
|
|
112
112
|
INPUTS_SOURCE_ID
|
|
113
|
-
} from "./chunk-
|
|
113
|
+
} from "./chunk-ZBW2UO5M.js";
|
|
114
|
+
import {
|
|
115
|
+
MACHINE_CHECKING,
|
|
116
|
+
baselineCommand,
|
|
117
|
+
setupSteps
|
|
118
|
+
} from "./chunk-EC6YA766.js";
|
|
119
|
+
import {
|
|
120
|
+
catalogRecords,
|
|
121
|
+
openChanges,
|
|
122
|
+
systemGuide
|
|
123
|
+
} from "./chunk-HBRMXFMC.js";
|
|
124
|
+
import {
|
|
125
|
+
doctorChecks
|
|
126
|
+
} from "./chunk-RA5Y7WI7.js";
|
|
127
|
+
import {
|
|
128
|
+
readMe,
|
|
129
|
+
writeMe
|
|
130
|
+
} from "./chunk-MZDHFWTN.js";
|
|
131
|
+
import {
|
|
132
|
+
readNextState,
|
|
133
|
+
uiOnboardingRoutes
|
|
134
|
+
} from "./chunk-RUCNERM2.js";
|
|
135
|
+
import "./chunk-JQARUMXI.js";
|
|
136
|
+
import {
|
|
137
|
+
buildTask,
|
|
138
|
+
cancelTaskRunWait,
|
|
139
|
+
findTaskRunOfRun,
|
|
140
|
+
previewTaskRun,
|
|
141
|
+
raiseTaskPr,
|
|
142
|
+
readTaskRun,
|
|
143
|
+
readyTasksOf,
|
|
144
|
+
runReadyTasks,
|
|
145
|
+
saveTaskRun,
|
|
146
|
+
settleTaskPr,
|
|
147
|
+
stopAllBuilds,
|
|
148
|
+
taskRunOfRun
|
|
149
|
+
} from "./chunk-2Z2CIBGD.js";
|
|
114
150
|
import {
|
|
115
151
|
boxesOf,
|
|
116
152
|
candidatesOf,
|
|
117
153
|
uiLinkRoutes
|
|
118
|
-
} from "./chunk-
|
|
154
|
+
} from "./chunk-ZHNZZ642.js";
|
|
155
|
+
import "./chunk-Y3AA4RZA.js";
|
|
156
|
+
import {
|
|
157
|
+
idFromUrl
|
|
158
|
+
} from "./chunk-PEIGHDVC.js";
|
|
159
|
+
import "./chunk-X7XVMYIL.js";
|
|
160
|
+
import {
|
|
161
|
+
matchDone,
|
|
162
|
+
quotesOf,
|
|
163
|
+
readMatch,
|
|
164
|
+
runMatch
|
|
165
|
+
} from "./chunk-TEESLG4C.js";
|
|
166
|
+
import "./chunk-ZVCF5PBG.js";
|
|
167
|
+
import "./chunk-NQFBTZWW.js";
|
|
168
|
+
import {
|
|
169
|
+
copilotAcpAllowed
|
|
170
|
+
} from "./chunk-B23Z4Y25.js";
|
|
171
|
+
import "./chunk-H7BHL2KV.js";
|
|
172
|
+
import "./chunk-AKC5NKH6.js";
|
|
173
|
+
import "./chunk-R5X4CNVG.js";
|
|
119
174
|
import {
|
|
120
175
|
DecideError,
|
|
121
176
|
correctDecision,
|
|
122
177
|
decisionsView,
|
|
123
178
|
undoBatch
|
|
124
|
-
} from "./chunk-
|
|
179
|
+
} from "./chunk-JTTTC5AI.js";
|
|
125
180
|
import {
|
|
126
181
|
answerAudit,
|
|
127
182
|
auditLines,
|
|
@@ -129,147 +184,92 @@ import {
|
|
|
129
184
|
precisionOf,
|
|
130
185
|
prepareAudit,
|
|
131
186
|
writeAudit
|
|
132
|
-
} from "./chunk-
|
|
133
|
-
import {
|
|
134
|
-
readNextState,
|
|
135
|
-
uiOnboardingRoutes
|
|
136
|
-
} from "./chunk-RTHQIGGY.js";
|
|
137
|
-
import "./chunk-DVQCYF3V.js";
|
|
138
|
-
import {
|
|
139
|
-
idFromUrl
|
|
140
|
-
} from "./chunk-KMBI6IQD.js";
|
|
141
|
-
import "./chunk-X7XVMYIL.js";
|
|
142
|
-
import {
|
|
143
|
-
matchDone,
|
|
144
|
-
quotesOf,
|
|
145
|
-
readMatch,
|
|
146
|
-
runMatch
|
|
147
|
-
} from "./chunk-7SO6CGJH.js";
|
|
148
|
-
import "./chunk-3TWERSTY.js";
|
|
149
|
-
import "./chunk-NJ5IEZIG.js";
|
|
187
|
+
} from "./chunk-3URSPNDW.js";
|
|
150
188
|
import {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
import "./chunk-
|
|
155
|
-
import "./chunk-
|
|
189
|
+
scanCommand,
|
|
190
|
+
scanSummaryLines
|
|
191
|
+
} from "./chunk-7SVS7PBB.js";
|
|
192
|
+
import "./chunk-7IEQFI4L.js";
|
|
193
|
+
import "./chunk-XLONNKSI.js";
|
|
156
194
|
import {
|
|
157
195
|
answersMayHaveChanged,
|
|
158
196
|
checkoutsStamp,
|
|
159
197
|
keepAnswersWhileWatched,
|
|
160
198
|
keptAnswer,
|
|
161
199
|
uiTrustRoutes
|
|
162
|
-
} from "./chunk-
|
|
200
|
+
} from "./chunk-U3SLTDOW.js";
|
|
163
201
|
import {
|
|
164
202
|
contractCheckOf,
|
|
165
203
|
estateJoinOnFile,
|
|
166
204
|
stampOf
|
|
167
|
-
} from "./chunk-
|
|
168
|
-
import "./chunk-YHS7TSQS.js";
|
|
169
|
-
import {
|
|
170
|
-
readRepos
|
|
171
|
-
} from "./chunk-FBNJZ3VH.js";
|
|
205
|
+
} from "./chunk-43DFUZ5J.js";
|
|
172
206
|
import {
|
|
173
207
|
filesUnder,
|
|
174
208
|
memoByFiles,
|
|
175
209
|
recheckNow,
|
|
176
210
|
uiFactsRoutes
|
|
177
|
-
} from "./chunk-
|
|
178
|
-
import
|
|
179
|
-
safeMessage,
|
|
180
|
-
withFileLock
|
|
181
|
-
} from "./chunk-SFCFL7Y5.js";
|
|
182
|
-
import "./chunk-I2NGDERG.js";
|
|
211
|
+
} from "./chunk-4QCR6HE3.js";
|
|
212
|
+
import "./chunk-OJE4JK45.js";
|
|
183
213
|
import {
|
|
184
214
|
syncNextOf
|
|
185
215
|
} from "./chunk-EHXDB3SA.js";
|
|
186
|
-
import "./chunk-
|
|
187
|
-
import "./chunk-
|
|
188
|
-
import "./chunk-YAPVAYZN.js";
|
|
189
|
-
import {
|
|
190
|
-
MACHINE_CHECKING,
|
|
191
|
-
baselineCommand,
|
|
192
|
-
setupSteps
|
|
193
|
-
} from "./chunk-DNDIT3LD.js";
|
|
216
|
+
import "./chunk-HE4O7PLD.js";
|
|
217
|
+
import "./chunk-RKDZ2LAO.js";
|
|
194
218
|
import {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
} from "./chunk-
|
|
219
|
+
safeMessage,
|
|
220
|
+
withFileLock
|
|
221
|
+
} from "./chunk-I3ZJTM2T.js";
|
|
198
222
|
import {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
readTaskRun,
|
|
205
|
-
readyTasksOf,
|
|
206
|
-
runReadyTasks,
|
|
207
|
-
saveTaskRun,
|
|
208
|
-
settleTaskPr,
|
|
209
|
-
stopAllBuilds,
|
|
210
|
-
taskRunOfRun
|
|
211
|
-
} from "./chunk-7LOXUBRB.js";
|
|
212
|
-
import "./chunk-UXETN43F.js";
|
|
213
|
-
import "./chunk-VVLWEM2Y.js";
|
|
223
|
+
readRepos
|
|
224
|
+
} from "./chunk-KS3XFDGF.js";
|
|
225
|
+
import "./chunk-SG4PMGZS.js";
|
|
226
|
+
import "./chunk-2C3KACPH.js";
|
|
227
|
+
import "./chunk-AWICXXAC.js";
|
|
214
228
|
import {
|
|
215
229
|
checkoutOf
|
|
216
|
-
} from "./chunk-
|
|
217
|
-
import "./chunk-
|
|
218
|
-
import
|
|
219
|
-
intakeContext
|
|
220
|
-
} from "./chunk-44XGOSUU.js";
|
|
221
|
-
import "./chunk-ELZGWEK4.js";
|
|
222
|
-
import {
|
|
223
|
-
scanCommand,
|
|
224
|
-
scanSummaryLines
|
|
225
|
-
} from "./chunk-XKWPEY4B.js";
|
|
226
|
-
import "./chunk-FVT6LUOC.js";
|
|
227
|
-
import {
|
|
228
|
-
catalogRecords,
|
|
229
|
-
openChanges,
|
|
230
|
-
systemGuide
|
|
231
|
-
} from "./chunk-RDFRB26Z.js";
|
|
232
|
-
import {
|
|
233
|
-
doctorChecks
|
|
234
|
-
} from "./chunk-RZEYZOLW.js";
|
|
230
|
+
} from "./chunk-LSRKXZI4.js";
|
|
231
|
+
import "./chunk-IEGOFWZC.js";
|
|
232
|
+
import "./chunk-DEQGTRMM.js";
|
|
235
233
|
import {
|
|
236
234
|
isMetarepo
|
|
237
235
|
} from "./chunk-3G4YI4ZU.js";
|
|
238
236
|
import {
|
|
239
237
|
workspaceOpen,
|
|
240
238
|
workspaceSync
|
|
241
|
-
} from "./chunk-
|
|
242
|
-
import "./chunk-
|
|
243
|
-
import "./chunk-
|
|
239
|
+
} from "./chunk-SFWTGHHU.js";
|
|
240
|
+
import "./chunk-PL4EFATK.js";
|
|
241
|
+
import "./chunk-E7O2WMDW.js";
|
|
244
242
|
import {
|
|
245
243
|
readChangeTasks,
|
|
246
244
|
readStory,
|
|
247
245
|
setTaskDone
|
|
248
|
-
} from "./chunk-
|
|
246
|
+
} from "./chunk-HZ65CLTT.js";
|
|
249
247
|
import {
|
|
250
248
|
planStories,
|
|
251
249
|
snowDraft,
|
|
252
250
|
snowSubmit
|
|
253
|
-
} from "./chunk-
|
|
254
|
-
import "./chunk-
|
|
251
|
+
} from "./chunk-7SJ7D6Q7.js";
|
|
252
|
+
import "./chunk-TYC6ILJ5.js";
|
|
255
253
|
import {
|
|
256
254
|
ciArchiveGate
|
|
257
|
-
} from "./chunk-
|
|
255
|
+
} from "./chunk-4BIG3Y3L.js";
|
|
258
256
|
import {
|
|
259
257
|
traceMatrix
|
|
260
|
-
} from "./chunk-
|
|
258
|
+
} from "./chunk-IQYR73ED.js";
|
|
261
259
|
import "./chunk-MUWDB4R4.js";
|
|
262
260
|
import {
|
|
263
261
|
archiveGate
|
|
264
|
-
} from "./chunk-
|
|
265
|
-
import "./chunk-
|
|
266
|
-
import "./chunk-
|
|
267
|
-
import "./chunk-3BQDBTQJ.js";
|
|
268
|
-
import "./chunk-HOEZQRZU.js";
|
|
262
|
+
} from "./chunk-XPE3V7ZN.js";
|
|
263
|
+
import "./chunk-MO6D2ZO6.js";
|
|
264
|
+
import "./chunk-HPKQIRQR.js";
|
|
269
265
|
import {
|
|
270
266
|
initiativeStatus,
|
|
271
267
|
readView
|
|
272
|
-
} from "./chunk-
|
|
268
|
+
} from "./chunk-ZUSKC4YT.js";
|
|
269
|
+
import {
|
|
270
|
+
intakeContext
|
|
271
|
+
} from "./chunk-GCT6HBIU.js";
|
|
272
|
+
import "./chunk-A5IJVTLL.js";
|
|
273
273
|
import {
|
|
274
274
|
CORRECTIONS_FILE,
|
|
275
275
|
FEATURE_FILE,
|
|
@@ -319,14 +319,14 @@ import {
|
|
|
319
319
|
syncWorkItems,
|
|
320
320
|
threadReplies,
|
|
321
321
|
writeSketch
|
|
322
|
-
} from "./chunk-
|
|
322
|
+
} from "./chunk-D6WUJFQH.js";
|
|
323
323
|
import {
|
|
324
324
|
FeaturePlacement,
|
|
325
325
|
STAGES,
|
|
326
326
|
STAGE_PHASE,
|
|
327
327
|
fieldNames,
|
|
328
328
|
rerunOf
|
|
329
|
-
} from "./chunk-
|
|
329
|
+
} from "./chunk-5KRMFM3P.js";
|
|
330
330
|
import {
|
|
331
331
|
HttpError,
|
|
332
332
|
badRequest,
|
|
@@ -337,7 +337,7 @@ import {
|
|
|
337
337
|
requireConfirmation,
|
|
338
338
|
startServer,
|
|
339
339
|
strParam
|
|
340
|
-
} from "./chunk-
|
|
340
|
+
} from "./chunk-KOTDH7M2.js";
|
|
341
341
|
import {
|
|
342
342
|
addressRefusal,
|
|
343
343
|
asTheApp,
|
|
@@ -345,19 +345,19 @@ import {
|
|
|
345
345
|
requireConfirmedModel,
|
|
346
346
|
servingTheApp,
|
|
347
347
|
whereKeyGoes
|
|
348
|
-
} from "./chunk-
|
|
348
|
+
} from "./chunk-TIQMGQPM.js";
|
|
349
349
|
import "./chunk-4XK3HLOH.js";
|
|
350
350
|
import {
|
|
351
351
|
ASSISTANT_FORMATS,
|
|
352
352
|
readProbes,
|
|
353
353
|
whatRunsWhere
|
|
354
|
-
} from "./chunk-
|
|
354
|
+
} from "./chunk-OXDMFJHR.js";
|
|
355
355
|
import {
|
|
356
356
|
critic,
|
|
357
357
|
criticStats,
|
|
358
358
|
findingAction
|
|
359
|
-
} from "./chunk-
|
|
360
|
-
import "./chunk-
|
|
359
|
+
} from "./chunk-WAEYJ6XE.js";
|
|
360
|
+
import "./chunk-5PWXWUW3.js";
|
|
361
361
|
import "./chunk-VOGCSYOI.js";
|
|
362
362
|
import {
|
|
363
363
|
layerRules,
|
|
@@ -371,7 +371,7 @@ import {
|
|
|
371
371
|
readStoryIndex,
|
|
372
372
|
reviewedGates,
|
|
373
373
|
roundsOf
|
|
374
|
-
} from "./chunk-
|
|
374
|
+
} from "./chunk-FIYGZJF6.js";
|
|
375
375
|
import {
|
|
376
376
|
ChangeOwnersError,
|
|
377
377
|
artifactFiles,
|
|
@@ -393,7 +393,7 @@ import {
|
|
|
393
393
|
setChangeOwners,
|
|
394
394
|
unmergedTaskBranches,
|
|
395
395
|
unmergedTaskWords
|
|
396
|
-
} from "./chunk-
|
|
396
|
+
} from "./chunk-OFHPXH3N.js";
|
|
397
397
|
import "./chunk-23TTURB2.js";
|
|
398
398
|
import {
|
|
399
399
|
componentRenames,
|
|
@@ -408,14 +408,14 @@ import {
|
|
|
408
408
|
readCatalog,
|
|
409
409
|
readCrossCheck,
|
|
410
410
|
targetPicker
|
|
411
|
-
} from "./chunk-
|
|
411
|
+
} from "./chunk-QZIXAFV2.js";
|
|
412
412
|
import {
|
|
413
413
|
NoSuchNode,
|
|
414
414
|
buildEstate,
|
|
415
415
|
focusView,
|
|
416
416
|
nodeView,
|
|
417
417
|
viewKey
|
|
418
|
-
} from "./chunk-
|
|
418
|
+
} from "./chunk-N5IGQQM4.js";
|
|
419
419
|
import {
|
|
420
420
|
OrgPackProposal,
|
|
421
421
|
SNAPSHOT_FILE,
|
|
@@ -439,42 +439,42 @@ import {
|
|
|
439
439
|
snapshotDates,
|
|
440
440
|
snapshotSources,
|
|
441
441
|
writeReview
|
|
442
|
-
} from "./chunk-
|
|
443
|
-
import "./chunk-
|
|
442
|
+
} from "./chunk-22MCNFEB.js";
|
|
443
|
+
import "./chunk-CBYJQD7C.js";
|
|
444
444
|
import {
|
|
445
445
|
fileStepStore,
|
|
446
446
|
manualAdapter,
|
|
447
447
|
stepOfProvisional
|
|
448
|
-
} from "./chunk-
|
|
449
|
-
import "./chunk-
|
|
448
|
+
} from "./chunk-FRSDREKQ.js";
|
|
449
|
+
import "./chunk-A2PNCDY2.js";
|
|
450
450
|
import {
|
|
451
451
|
baseClonePath,
|
|
452
452
|
changeWorktreesDir,
|
|
453
453
|
cloneUrlKey,
|
|
454
454
|
loadRepos,
|
|
455
455
|
readChangeRepos
|
|
456
|
-
} from "./chunk-
|
|
456
|
+
} from "./chunk-AIM4ER32.js";
|
|
457
457
|
import {
|
|
458
458
|
COMMON_SETTINGS,
|
|
459
459
|
PROVIDER_SETTINGS,
|
|
460
460
|
defaultKeyStore,
|
|
461
461
|
keyEnvFromEnvironment,
|
|
462
462
|
looksLikeKey
|
|
463
|
-
} from "./chunk-
|
|
463
|
+
} from "./chunk-2E725C6E.js";
|
|
464
464
|
import {
|
|
465
465
|
readServiceRequestExports,
|
|
466
466
|
readVendorSpec,
|
|
467
467
|
readWorkItemExports
|
|
468
|
-
} from "./chunk-
|
|
468
|
+
} from "./chunk-FEJPEDDX.js";
|
|
469
469
|
import {
|
|
470
470
|
batchSections,
|
|
471
471
|
providerFactoryFor
|
|
472
|
-
} from "./chunk-
|
|
473
|
-
import "./chunk-
|
|
474
|
-
import "./chunk-
|
|
475
|
-
import "./chunk-
|
|
476
|
-
import "./chunk-
|
|
477
|
-
import "./chunk-
|
|
472
|
+
} from "./chunk-W7U3NIUF.js";
|
|
473
|
+
import "./chunk-WX2EYZTA.js";
|
|
474
|
+
import "./chunk-D6GPG32H.js";
|
|
475
|
+
import "./chunk-BPWOKVPJ.js";
|
|
476
|
+
import "./chunk-JCZSY5ZC.js";
|
|
477
|
+
import "./chunk-MZ2ITC2C.js";
|
|
478
478
|
import {
|
|
479
479
|
ADAPTER_FIELDS,
|
|
480
480
|
ADAPTER_KINDS,
|
|
@@ -547,7 +547,7 @@ import {
|
|
|
547
547
|
specRepos,
|
|
548
548
|
undeclareLink,
|
|
549
549
|
writeOrgPackFile
|
|
550
|
-
} from "./chunk-
|
|
550
|
+
} from "./chunk-T7QW62TW.js";
|
|
551
551
|
import {
|
|
552
552
|
FileChangedError,
|
|
553
553
|
RUN_LOG_READ_MAX,
|
|
@@ -606,7 +606,7 @@ import {
|
|
|
606
606
|
|
|
607
607
|
// packages/cli/dist/ui-commands.js
|
|
608
608
|
import { spawn } from "node:child_process";
|
|
609
|
-
import { join as
|
|
609
|
+
import { join as join19 } from "node:path";
|
|
610
610
|
|
|
611
611
|
// packages/ui/dist-lib/index.js
|
|
612
612
|
import { dirname, join } from "node:path";
|
|
@@ -1046,6 +1046,9 @@ function uiActivityRoutes(r, ctx, deps = {}) {
|
|
|
1046
1046
|
});
|
|
1047
1047
|
}
|
|
1048
1048
|
|
|
1049
|
+
// packages/cli/dist/ui-api-catalog.js
|
|
1050
|
+
import { join as join3 } from "node:path";
|
|
1051
|
+
|
|
1049
1052
|
// packages/cli/dist/ui-api-steps.js
|
|
1050
1053
|
import { readdir } from "node:fs/promises";
|
|
1051
1054
|
import { dirname as dirname2 } from "node:path";
|
|
@@ -1072,19 +1075,19 @@ async function changesWithWorktrees(root) {
|
|
|
1072
1075
|
function uiStepRoutes(r, ctx, asJob) {
|
|
1073
1076
|
const root = ctx.root;
|
|
1074
1077
|
return r.add("POST", "/api/facts/apply-all", async () => {
|
|
1075
|
-
const { verifyAllCommand } = await import("./chunk-
|
|
1078
|
+
const { verifyAllCommand } = await import("./chunk-6D7HF6V4.js");
|
|
1076
1079
|
return asJob("Applying to every repo", () => captured((io) => verifyAllCommand(root, { write: true, verbose: false, json: false }, io)));
|
|
1077
1080
|
}).add("POST", "/api/estate/join", async () => {
|
|
1078
|
-
const { estateJoin } = await import("./chunk-
|
|
1081
|
+
const { estateJoin } = await import("./chunk-AQOFIHBO.js");
|
|
1079
1082
|
return asJob("Joining the estate's flows", () => captured((io) => estateJoin(root, { json: false }, io)));
|
|
1080
1083
|
}).add("POST", "/api/knowledge/sources/sync", async () => {
|
|
1081
|
-
const { sourcesSync: sourcesSync2 } = await import("./chunk-
|
|
1084
|
+
const { sourcesSync: sourcesSync2 } = await import("./chunk-E4AUZ5AC.js");
|
|
1082
1085
|
return asJob("Syncing every wiki", () => captured((io) => sourcesSync2(root, io, { json: false })));
|
|
1083
1086
|
}).add("POST", "/api/workspace/prune", async ({ body }) => {
|
|
1084
1087
|
const change = body?.change;
|
|
1085
1088
|
if (change !== void 0 && (typeof change !== "string" || !ID2.test(change)))
|
|
1086
1089
|
throw badRequest("change is a change id, or left out for every change with worktrees.");
|
|
1087
|
-
const { workspacePrune } = await import("./chunk-
|
|
1090
|
+
const { workspacePrune } = await import("./chunk-ON2W7SWK.js");
|
|
1088
1091
|
return asJob(change ? `Cleaning up ${change}'s worktrees` : "Cleaning up worktrees", () => captured(async (io) => {
|
|
1089
1092
|
const list = change ? [change] : await changesWithWorktrees(root);
|
|
1090
1093
|
if (!list.length) {
|
|
@@ -1099,7 +1102,7 @@ function uiStepRoutes(r, ctx, asJob) {
|
|
|
1099
1102
|
return code;
|
|
1100
1103
|
}));
|
|
1101
1104
|
}).add("GET", "/api/changes/{changeId}/tasks/{taskId}/context", async ({ params }) => {
|
|
1102
|
-
const { taskContextCli } = await import("./chunk-
|
|
1105
|
+
const { taskContextCli } = await import("./chunk-OHAMT5OA.js");
|
|
1103
1106
|
const lines = [];
|
|
1104
1107
|
const errs = [];
|
|
1105
1108
|
const code = await taskContextCli(root, params.changeId, params.taskId, { markdown: true }, { out: (l) => lines.push(l), err: (l) => errs.push(l) });
|
|
@@ -1110,7 +1113,7 @@ function uiStepRoutes(r, ctx, asJob) {
|
|
|
1110
1113
|
const on = body?.on;
|
|
1111
1114
|
if (typeof on !== "boolean")
|
|
1112
1115
|
throw badRequest("on is true or false.");
|
|
1113
|
-
const { setLocalRecording } = await import("./chunk-
|
|
1116
|
+
const { setLocalRecording } = await import("./chunk-CYPQ3PBB.js");
|
|
1114
1117
|
await setLocalRecording(root, on);
|
|
1115
1118
|
ctx.events.publish({ type: "file.changed", path: ".atticus/me.yaml" });
|
|
1116
1119
|
return { status: 200, body: { on } };
|
|
@@ -1164,7 +1167,7 @@ function coalesced(work) {
|
|
|
1164
1167
|
}
|
|
1165
1168
|
function uiCatalogRoutes(r, ctx, asJob) {
|
|
1166
1169
|
const root = ctx.root;
|
|
1167
|
-
const buildViewNow = coalesced(async () => (await import("./chunk-
|
|
1170
|
+
const buildViewNow = coalesced(async () => (await import("./chunk-XSLFANKH.js")).catalogBuildView(root));
|
|
1168
1171
|
const repoOf2 = (params) => {
|
|
1169
1172
|
const repo = params.repo ?? "";
|
|
1170
1173
|
if (!REPO.test(repo))
|
|
@@ -1186,7 +1189,7 @@ function uiCatalogRoutes(r, ctx, asJob) {
|
|
|
1186
1189
|
throw notFound(`${repo} isn't a repo the manifests list.`);
|
|
1187
1190
|
const head = await headOf(root, repo);
|
|
1188
1191
|
const promoted = await promotedStates(root, repo, one.items.filter((i) => i.state === "readers-only").map((i) => i.key));
|
|
1189
|
-
const { readersValueSha } = await import("./chunk-
|
|
1192
|
+
const { readersValueSha } = await import("./chunk-MUTSQOQ7.js");
|
|
1190
1193
|
const items = one.items.map((i) => {
|
|
1191
1194
|
const p = i.state === "readers-only" ? promoted.get(i.key) : void 0;
|
|
1192
1195
|
const sha5 = i.state === "readers-only" || i.state === "disagree" ? { readersSha256: readersValueSha(i.readers?.value) } : {};
|
|
@@ -1204,8 +1207,8 @@ function uiCatalogRoutes(r, ctx, asJob) {
|
|
|
1204
1207
|
const v = await readCrossCheck(root, { repo });
|
|
1205
1208
|
if (!v.repos[0])
|
|
1206
1209
|
throw notFound(`${repo} isn't a repo the manifests list.`);
|
|
1207
|
-
const { planPromote } = await import("./chunk-
|
|
1208
|
-
const { checkoutLineOf } = await import("./chunk-
|
|
1210
|
+
const { planPromote } = await import("./chunk-AGTB5CRY.js");
|
|
1211
|
+
const { checkoutLineOf } = await import("./chunk-MUTSQOQ7.js");
|
|
1209
1212
|
const { next: _next, ...plan } = await planPromote(root, repo, key, {
|
|
1210
1213
|
lineOf: checkoutLineOf(root, repo)
|
|
1211
1214
|
});
|
|
@@ -1217,14 +1220,14 @@ function uiCatalogRoutes(r, ctx, asJob) {
|
|
|
1217
1220
|
const v = await readCrossCheck(root, { repo });
|
|
1218
1221
|
if (!v.repos[0])
|
|
1219
1222
|
throw notFound(`${repo} isn't a repo the manifests list.`);
|
|
1220
|
-
const { planPromote } = await import("./chunk-
|
|
1221
|
-
const { catalogCrossCheck, checkoutLineOf } = await import("./chunk-
|
|
1223
|
+
const { planPromote } = await import("./chunk-AGTB5CRY.js");
|
|
1224
|
+
const { catalogCrossCheck, checkoutLineOf } = await import("./chunk-MUTSQOQ7.js");
|
|
1222
1225
|
const plan = await planPromote(root, repo, b.key, { lineOf: checkoutLineOf(root, repo) });
|
|
1223
1226
|
if (!plan.can)
|
|
1224
1227
|
throw conflict(`${b.key} can't be promoted now: ${plan.why}. Nothing written.`);
|
|
1225
1228
|
if (plan.sha256 !== b.sha256)
|
|
1226
1229
|
throw conflict(`The fact promoting ${b.key} writes isn't the one the page showed any more. Nothing written: look at it again.`);
|
|
1227
|
-
const { verifyCommand } = await import("./chunk-
|
|
1230
|
+
const { verifyCommand } = await import("./chunk-6D7HF6V4.js");
|
|
1228
1231
|
return asJob(`Promote on ${repo}`, () => captured(async (io) => {
|
|
1229
1232
|
const code = await catalogCrossCheck(root, { repo, promote: b.key, expect: b.sha256 }, io);
|
|
1230
1233
|
if (code !== 0)
|
|
@@ -1238,7 +1241,7 @@ function uiCatalogRoutes(r, ctx, asJob) {
|
|
|
1238
1241
|
const one = v.repos[0];
|
|
1239
1242
|
if (!one)
|
|
1240
1243
|
throw notFound(`${repo} isn't a repo the manifests list.`);
|
|
1241
|
-
const { catalogCrossCheck, readersValueSha } = await import("./chunk-
|
|
1244
|
+
const { catalogCrossCheck, readersValueSha } = await import("./chunk-MUTSQOQ7.js");
|
|
1242
1245
|
const item2 = one.items.find((i) => i.key === b.key);
|
|
1243
1246
|
if (b.undo) {
|
|
1244
1247
|
if (!item2?.dismissed)
|
|
@@ -1263,11 +1266,11 @@ function uiCatalogRoutes(r, ctx, asJob) {
|
|
|
1263
1266
|
if (counted && b.plan === void 0)
|
|
1264
1267
|
throw badRequest("plan is GET /api/build's pending.plan for the list being confirmed.");
|
|
1265
1268
|
if (b.plan !== void 0) {
|
|
1266
|
-
const { catalogBuildView } = await import("./chunk-
|
|
1269
|
+
const { catalogBuildView } = await import("./chunk-XSLFANKH.js");
|
|
1267
1270
|
if ((await catalogBuildView(root)).pending.plan !== b.plan)
|
|
1268
1271
|
throw conflict("What the build would remove or discard isn't what the page listed any more. Nothing written: look at the list again.");
|
|
1269
1272
|
}
|
|
1270
|
-
const { catalogBuild } = await import("./chunk-
|
|
1273
|
+
const { catalogBuild } = await import("./chunk-7O22X554.js");
|
|
1271
1274
|
const flags = [
|
|
1272
1275
|
...b.allowRemovals !== void 0 ? [`--allow-removals ${b.allowRemovals}`] : [],
|
|
1273
1276
|
...b.discardEdits !== void 0 ? [`--discard-edits ${b.discardEdits}`] : []
|
|
@@ -1279,27 +1282,27 @@ function uiCatalogRoutes(r, ctx, asJob) {
|
|
|
1279
1282
|
}, io)));
|
|
1280
1283
|
}).add("POST", "/api/build/edits/curate", async ({ body }) => {
|
|
1281
1284
|
const b = parse(api_exports.CatalogEditsRequest, body);
|
|
1282
|
-
const { catalogBuildView } = await import("./chunk-
|
|
1285
|
+
const { catalogBuildView } = await import("./chunk-XSLFANKH.js");
|
|
1283
1286
|
const view3 = await catalogBuildView(root);
|
|
1284
1287
|
const now = view3.pending.refused;
|
|
1285
1288
|
const edits = now?.reasons.includes("hand-edits") ? now.edits ?? [] : [];
|
|
1286
1289
|
if (edits.length !== b.count || view3.pending.plan !== b.plan)
|
|
1287
1290
|
throw conflict(edits.length !== b.count ? `The page listed ${b.count} hand ${b.count === 1 ? "edit" : "edits"}; there ${edits.length === 1 ? "is" : "are"} ${edits.length} now. Nothing was made curated: look at the list again.` : "The hand edits aren't the ones the page listed any more. Nothing was made curated: look at the list again.");
|
|
1288
|
-
const { catalogBuild, catalogEdits } = await import("./chunk-
|
|
1291
|
+
const { catalogBuild, catalogEdits } = await import("./chunk-7O22X554.js");
|
|
1289
1292
|
return asJob("Make the hand edits curated, then build", () => captured(async (io) => {
|
|
1290
1293
|
const code = await catalogEdits(root, { curate: true, by: ctx.user, plan: b.plan }, io);
|
|
1291
1294
|
return code === 0 ? catalogBuild(root, {}, io) : code;
|
|
1292
1295
|
}));
|
|
1293
1296
|
}).add("GET", "/api/build/undo", async ({ query }) => {
|
|
1294
1297
|
const n = intParam(query, "n", 1, 1e6);
|
|
1295
|
-
const { catalogUndoView } = await import("./chunk-
|
|
1298
|
+
const { catalogUndoView } = await import("./chunk-XSLFANKH.js");
|
|
1296
1299
|
return {
|
|
1297
1300
|
status: 200,
|
|
1298
1301
|
body: api_exports.CatalogUndoView.parse(await catalogUndoView(root, n))
|
|
1299
1302
|
};
|
|
1300
1303
|
}).add("POST", "/api/build/undo", async ({ body }) => {
|
|
1301
1304
|
const b = parse(api_exports.CatalogUndoRequest, body);
|
|
1302
|
-
const { catalogUndoView } = await import("./chunk-
|
|
1305
|
+
const { catalogUndoView } = await import("./chunk-XSLFANKH.js");
|
|
1303
1306
|
const v = await catalogUndoView(root, b.n);
|
|
1304
1307
|
if (!v.plan)
|
|
1305
1308
|
throw conflict(v.problem ?? `There are fewer than ${b.n} builds to undo here.`);
|
|
@@ -1307,30 +1310,30 @@ function uiCatalogRoutes(r, ctx, asJob) {
|
|
|
1307
1310
|
throw conflict(`The page listed ${b.files} ${b.files === 1 ? "file" : "files"} to put back; taking back the ${b.n === 1 ? "latest build" : `${b.n} latest builds`} puts back ${v.plan.files.length} now. Nothing was undone: look at the list again.`);
|
|
1308
1311
|
if (v.plan.hash !== b.plan)
|
|
1309
1312
|
throw conflict("The builds to take back or their files aren't the ones the page listed any more. Nothing was undone: look at the list again.");
|
|
1310
|
-
const { catalogUndo } = await import("./chunk-
|
|
1313
|
+
const { catalogUndo } = await import("./chunk-7O22X554.js");
|
|
1311
1314
|
return asJob(`atticus catalog undo ${b.n} --yes`, () => captured((io) => catalogUndo(root, { n: b.n, yes: true, plan: b.plan }, io)));
|
|
1312
1315
|
}).add("GET", "/api/build/prune", async () => {
|
|
1313
|
-
const { catalogPruneView } = await import("./chunk-
|
|
1316
|
+
const { catalogPruneView } = await import("./chunk-XSLFANKH.js");
|
|
1314
1317
|
return {
|
|
1315
1318
|
status: 200,
|
|
1316
1319
|
body: api_exports.CatalogPruneView.parse(await catalogPruneView(root))
|
|
1317
1320
|
};
|
|
1318
1321
|
}).add("POST", "/api/build/prune", async ({ body }) => {
|
|
1319
1322
|
const b = parse(api_exports.CatalogPruneRequest, body);
|
|
1320
|
-
const { catalogPruneView } = await import("./chunk-
|
|
1323
|
+
const { catalogPruneView } = await import("./chunk-XSLFANKH.js");
|
|
1321
1324
|
const v = await catalogPruneView(root);
|
|
1322
1325
|
if (v.files.length !== b.count)
|
|
1323
1326
|
throw conflict(`The page listed ${b.count} ${b.count === 1 ? "file" : "files"} to remove; there ${v.files.length === 1 ? "is" : "are"} ${v.files.length} now. Nothing was removed: look at the list again.`);
|
|
1324
1327
|
if (v.plan !== b.plan)
|
|
1325
1328
|
throw conflict("The files to remove aren't the ones the page listed any more. Nothing was removed: look at the list again.");
|
|
1326
|
-
const { catalogPrune } = await import("./chunk-
|
|
1329
|
+
const { catalogPrune } = await import("./chunk-7O22X554.js");
|
|
1327
1330
|
return asJob("atticus catalog prune --yes", () => captured((io) => catalogPrune(root, { yes: true, plan: b.plan }, io)));
|
|
1328
1331
|
}).add("GET", "/api/build/upgrade", async () => {
|
|
1329
|
-
const { catalogUpgradeView } = await import("./chunk-
|
|
1332
|
+
const { catalogUpgradeView } = await import("./chunk-XSLFANKH.js");
|
|
1330
1333
|
return { status: 200, body: api_exports.CatalogUpgradeView.parse(await catalogUpgradeView(root)) };
|
|
1331
1334
|
}).add("POST", "/api/build/upgrade", async ({ body }) => {
|
|
1332
1335
|
const b = parse(api_exports.CatalogUpgradeRequest, body);
|
|
1333
|
-
const { catalogUpgradeView } = await import("./chunk-
|
|
1336
|
+
const { catalogUpgradeView } = await import("./chunk-XSLFANKH.js");
|
|
1334
1337
|
const v = await catalogUpgradeView(root);
|
|
1335
1338
|
if (!v.pending)
|
|
1336
1339
|
throw conflict("Nothing to upgrade: catalog/sources is here already.");
|
|
@@ -1343,8 +1346,67 @@ function uiCatalogRoutes(r, ctx, asJob) {
|
|
|
1343
1346
|
throw conflict("The first build changes nothing now, so there is nothing to accept. Nothing written: look at the list again.");
|
|
1344
1347
|
if (v.writes.length !== b.count || v.plan !== b.plan)
|
|
1345
1348
|
throw conflict(`The page listed ${b.count} ${b.count === 1 ? "file" : "files"} to write; the upgrade writes ${v.writes.length === b.count ? "other files" : `${v.writes.length}`} now. Nothing written: look at the list again.`);
|
|
1346
|
-
const { upgradeCommand } = await import("./chunk-
|
|
1349
|
+
const { upgradeCommand } = await import("./chunk-PNU5SNYP.js");
|
|
1347
1350
|
return asJob(accept ? `atticus upgrade --yes --accept-changes ${accept}` : "atticus upgrade --yes", () => captured((io) => upgradeCommand(root, { by: ctx.user, yes: true, ...accept ? { acceptChanges: accept } : {} }, io)));
|
|
1351
|
+
}).add("POST", "/api/links/delete", async ({ body }) => {
|
|
1352
|
+
const b = parse(api_exports.LinkDeleteRequest, body);
|
|
1353
|
+
const now = new Set((await readCatalog(join3(catalogDirOf(root), "generated"), { fresh: true })).records.filter((x) => x.kind === "Interface").map((x) => x.id));
|
|
1354
|
+
const missing = b.interfaces.filter((id) => !now.has(id));
|
|
1355
|
+
if (missing.length)
|
|
1356
|
+
throw notFound(`${missing.slice(0, 5).join(", ")}${missing.length > 5 ? ` and ${missing.length - 5} more` : ""} ${missing.length === 1 ? "isn't an Interface" : "aren't Interfaces"} of the catalog now: the link may be gone already. Nothing written.`);
|
|
1357
|
+
const { deleteLink } = await import("./chunk-7O22X554.js");
|
|
1358
|
+
return asJob(`Delete the link ${b.from} \u2192 ${b.to}`, () => captured((io) => deleteLink(root, { interfaces: b.interfaces, from: b.from, to: b.to, by: ctx.user }, io)));
|
|
1359
|
+
}).add("GET", "/api/links/deleted", async () => {
|
|
1360
|
+
const { deletedLinks, suppressedNow } = await import("./chunk-7O22X554.js");
|
|
1361
|
+
const suppressed = await suppressedNow(root).catch(() => void 0);
|
|
1362
|
+
return {
|
|
1363
|
+
status: 200,
|
|
1364
|
+
body: api_exports.DeletedLinksView.parse(await deletedLinks(root, suppressed ? { suppressed } : {}))
|
|
1365
|
+
};
|
|
1366
|
+
}).add("POST", "/api/links/deleted/undo", async ({ body }) => {
|
|
1367
|
+
const b = parse(api_exports.LinkUndeleteRequest, body);
|
|
1368
|
+
const { deletedLinks, undeleteLink } = await import("./chunk-7O22X554.js");
|
|
1369
|
+
const v = await deletedLinks(root);
|
|
1370
|
+
const held = new Map(v.links.flatMap((l2) => l2.decisions.map((d) => [d.id, l2])));
|
|
1371
|
+
const missing = b.decisions.filter((id) => !held.has(id));
|
|
1372
|
+
if (missing.length)
|
|
1373
|
+
throw notFound(`${missing.slice(0, 5).join(", ")} ${missing.length === 1 ? "isn't a link" : "aren't links"} deleted on the canvas. Nothing removed.`);
|
|
1374
|
+
const l = held.get(b.decisions[0]);
|
|
1375
|
+
return asJob(`Bring back the link ${l.from} \u2192 ${l.to}`, () => captured((io) => undeleteLink(root, { decisions: b.decisions }, io)));
|
|
1376
|
+
}).add("POST", "/api/map/edits", async ({ body }) => {
|
|
1377
|
+
const b = parse(api_exports.MapEditsRequest, body);
|
|
1378
|
+
const { checkMapEdits } = await import("./chunk-YM2X57FO.js");
|
|
1379
|
+
const { problems, callers, waitsOn } = await checkMapEdits(root, b.edits);
|
|
1380
|
+
if (problems.length)
|
|
1381
|
+
throw new HttpError(422, "Some changes can't be made", `${problems.length} of the ${b.edits.length} changes can't be made: ${problems.map((p) => `change ${p.edit + 1}: ${p.message}`).join(" ")} Nothing was written.`, { problems });
|
|
1382
|
+
const { applyMapEdits } = await import("./chunk-7O22X554.js");
|
|
1383
|
+
const n = b.edits.length;
|
|
1384
|
+
return asJob(`Apply ${n} change${n === 1 ? "" : "s"} to the map`, async () => {
|
|
1385
|
+
const { lastBuildOf } = await import("./chunk-XSLFANKH.js");
|
|
1386
|
+
const before = JSON.stringify(await lastBuildOf(root) ?? null);
|
|
1387
|
+
let ran;
|
|
1388
|
+
const res = await captured(async (io) => {
|
|
1389
|
+
ran = await applyMapEdits(root, { edits: b.edits, by: ctx.user }, io);
|
|
1390
|
+
return ran.code;
|
|
1391
|
+
});
|
|
1392
|
+
let refused4;
|
|
1393
|
+
if (ran && !ran.built && ran.edits.every((x) => x.state === "saved")) {
|
|
1394
|
+
const { lastBuildOf: lastBuildOf2 } = await import("./chunk-XSLFANKH.js");
|
|
1395
|
+
const last = await lastBuildOf2(root);
|
|
1396
|
+
if (last?.outcome === "refused" && last.refused && JSON.stringify(last) !== before)
|
|
1397
|
+
refused4 = last.refused;
|
|
1398
|
+
}
|
|
1399
|
+
return {
|
|
1400
|
+
...res,
|
|
1401
|
+
extra: {
|
|
1402
|
+
edits: ran?.edits ?? [],
|
|
1403
|
+
built: ran?.built ?? false,
|
|
1404
|
+
callers,
|
|
1405
|
+
waitsOn,
|
|
1406
|
+
...refused4 ? { refused: refused4 } : {}
|
|
1407
|
+
}
|
|
1408
|
+
};
|
|
1409
|
+
});
|
|
1348
1410
|
});
|
|
1349
1411
|
}
|
|
1350
1412
|
|
|
@@ -1352,14 +1414,14 @@ function uiCatalogRoutes(r, ctx, asJob) {
|
|
|
1352
1414
|
import { createHash as createHash3 } from "node:crypto";
|
|
1353
1415
|
import { existsSync } from "node:fs";
|
|
1354
1416
|
import { mkdir, readdir as readdir2, readFile as readFile2, stat as stat2 } from "node:fs/promises";
|
|
1355
|
-
import { dirname as dirname3, join as
|
|
1417
|
+
import { dirname as dirname3, join as join5 } from "node:path";
|
|
1356
1418
|
var import_yaml2 = __toESM(require_dist(), 1);
|
|
1357
1419
|
|
|
1358
1420
|
// packages/cli/dist/handoff-autodone.js
|
|
1359
1421
|
var import_yaml = __toESM(require_dist(), 1);
|
|
1360
1422
|
import { createHash as createHash2 } from "node:crypto";
|
|
1361
1423
|
import { readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
1362
|
-
import { join as
|
|
1424
|
+
import { join as join4 } from "node:path";
|
|
1363
1425
|
var AUTO_AGENTS = /* @__PURE__ */ new Set([
|
|
1364
1426
|
"change-drafter",
|
|
1365
1427
|
"feature-placer",
|
|
@@ -1379,13 +1441,13 @@ var agentOf = (s) => {
|
|
|
1379
1441
|
var sha = (t) => createHash2("sha256").update(t).digest("hex");
|
|
1380
1442
|
var AUTO_CHECKED = "checked-by-app.json";
|
|
1381
1443
|
async function markCheckedByApp(root, change, runId) {
|
|
1382
|
-
await writeFile(
|
|
1444
|
+
await writeFile(join4(runsDirOf(root), change, runId, AUTO_CHECKED), JSON.stringify({ at: (/* @__PURE__ */ new Date()).toISOString() }) + "\n", "utf8");
|
|
1383
1445
|
}
|
|
1384
1446
|
async function unmarkCheckedByApp(root, change, runId) {
|
|
1385
|
-
await rm(
|
|
1447
|
+
await rm(join4(runsDirOf(root), change, runId, AUTO_CHECKED), { force: true });
|
|
1386
1448
|
}
|
|
1387
1449
|
async function checkedByApp(root, change, runId) {
|
|
1388
|
-
return stat(
|
|
1450
|
+
return stat(join4(runsDirOf(root), change, runId, AUTO_CHECKED)).then(() => true, () => false);
|
|
1389
1451
|
}
|
|
1390
1452
|
function answerComplete(s, text) {
|
|
1391
1453
|
if (!text.trim())
|
|
@@ -1411,11 +1473,11 @@ async function answerFile(root, s) {
|
|
|
1411
1473
|
const out = s.run.request.outputPath;
|
|
1412
1474
|
if (!out)
|
|
1413
1475
|
return void 0;
|
|
1414
|
-
const inRun =
|
|
1476
|
+
const inRun = join4(s.dir, out);
|
|
1415
1477
|
if (s.run.request.outputIn === "run" || s.run.parts?.length)
|
|
1416
1478
|
return inRun;
|
|
1417
|
-
const { changesDirOf: changesDirOf2 } = await import("./chunk-
|
|
1418
|
-
return
|
|
1479
|
+
const { changesDirOf: changesDirOf2 } = await import("./chunk-4EBXR37M.js");
|
|
1480
|
+
return join4(changesDirOf2(root), s.run.request.change, out);
|
|
1419
1481
|
}
|
|
1420
1482
|
async function dueRuns(root, o) {
|
|
1421
1483
|
const due = [];
|
|
@@ -1526,7 +1588,7 @@ async function openTaskWorktree(root, change, task, gitHost) {
|
|
|
1526
1588
|
}).catch(() => void 0);
|
|
1527
1589
|
if (!p)
|
|
1528
1590
|
return void 0;
|
|
1529
|
-
const text = await readFile2(
|
|
1591
|
+
const text = await readFile2(join5(changesDirOf(root), change, "repos.yaml"), "utf8").catch(() => "");
|
|
1530
1592
|
let has = false;
|
|
1531
1593
|
try {
|
|
1532
1594
|
const d = (0, import_yaml2.parse)(text);
|
|
@@ -1626,14 +1688,14 @@ async function changeDetail(root, id) {
|
|
|
1626
1688
|
for (const f of findings)
|
|
1627
1689
|
if (f.state === "open")
|
|
1628
1690
|
open[f.severity] += 1;
|
|
1629
|
-
const dir =
|
|
1691
|
+
const dir = join5(changesDirOf(root), id);
|
|
1630
1692
|
const phases = report.type.phases;
|
|
1631
1693
|
const current = report.phase ? phases.indexOf(report.phase) : phases.length;
|
|
1632
1694
|
const artifacts = [];
|
|
1633
1695
|
const blockedArtifacts = new Set(report.blockers.map((b) => b.artifact).filter(Boolean));
|
|
1634
1696
|
const templateOnly = new Set(report.blockers.filter((b) => b.code === "unfilled-artifact").map((b) => b.artifact));
|
|
1635
1697
|
const cctx = await loadChangeContext(root);
|
|
1636
|
-
const onStages = (await Promise.all(cctx.policy.stages.map((s) => readFile2(
|
|
1698
|
+
const onStages = (await Promise.all(cctx.policy.stages.map((s) => readFile2(join5(dir, ...s.loop.split("/"))).then(() => true, () => false)))).some(Boolean);
|
|
1637
1699
|
const type = report.type.artifacts;
|
|
1638
1700
|
const ofStages = cctx.policy.stages.flatMap((s) => s.artifacts).filter((a, i, all) => type.includes(a) && all.indexOf(a) === i);
|
|
1639
1701
|
const due = /* @__PURE__ */ new Set();
|
|
@@ -1667,7 +1729,7 @@ async function changeDetail(root, id) {
|
|
|
1667
1729
|
state: c.state,
|
|
1668
1730
|
// ADR 0191 (app-only audit): the repos it names and its target flows' ("Name its repos on its
|
|
1669
1731
|
// brief" stayed after the stories named them; the brief has no repos).
|
|
1670
|
-
repos: await (await import("./chunk-
|
|
1732
|
+
repos: await (await import("./chunk-Z56NN3AX.js")).changeRepos(root, c),
|
|
1671
1733
|
openFindings: open,
|
|
1672
1734
|
updatedAt: c.history.at(-1)?.at ?? c.createdAt,
|
|
1673
1735
|
...fast ? { fastPath: true } : {},
|
|
@@ -1691,10 +1753,10 @@ async function applyFirstOf(root, files) {
|
|
|
1691
1753
|
const repo = /(?:^|\/)facts\/([^/]+)\.corrections\.jsonl$/.exec(f.path)?.[1] ?? await answeredMapQuestionRepo(root, f.path);
|
|
1692
1754
|
if (!repo || out.includes(repo))
|
|
1693
1755
|
continue;
|
|
1694
|
-
const saved = await mtime(
|
|
1756
|
+
const saved = await mtime(join5(root, ...f.path.split("/")));
|
|
1695
1757
|
if (saved === void 0)
|
|
1696
1758
|
continue;
|
|
1697
|
-
const applied = await mtime(
|
|
1759
|
+
const applied = await mtime(join5(specDirOf(root, repo), SPEC_HEADER_FILE)) ?? await mtime(join5(factsDirOf(root), `${repo}.verify.yaml`));
|
|
1698
1760
|
if (applied === void 0 || saved > applied)
|
|
1699
1761
|
out.push(repo);
|
|
1700
1762
|
}
|
|
@@ -1703,7 +1765,7 @@ async function applyFirstOf(root, files) {
|
|
|
1703
1765
|
async function answeredMapQuestionRepo(root, path) {
|
|
1704
1766
|
if (!/(?:^|\/)questions\/q-[^/]+\.yaml$/.test(path))
|
|
1705
1767
|
return void 0;
|
|
1706
|
-
const q = await readFile2(
|
|
1768
|
+
const q = await readFile2(join5(root, ...path.split("/")), "utf8").then((t) => (0, import_yaml2.parse)(t), () => void 0);
|
|
1707
1769
|
if (!q || q.state !== "answered" || typeof q.repo !== "string")
|
|
1708
1770
|
return void 0;
|
|
1709
1771
|
const rerun = String(q.rerun ?? "").trim();
|
|
@@ -1711,7 +1773,7 @@ async function answeredMapQuestionRepo(root, path) {
|
|
|
1711
1773
|
return of?.[1] === q.repo ? q.repo : void 0;
|
|
1712
1774
|
}
|
|
1713
1775
|
async function taskViews(root, change, prs) {
|
|
1714
|
-
const dir =
|
|
1776
|
+
const dir = join5(changesDirOf(root), change);
|
|
1715
1777
|
let tasks = readChangeTasks(await readChangeFiles(dir));
|
|
1716
1778
|
const states = prs ? await Promise.all(tasks.map((t) => settleTaskPr(root, change, t.id, {
|
|
1717
1779
|
...prs.gitHost ? { gitHost: prs.gitHost } : {},
|
|
@@ -1765,12 +1827,12 @@ async function taskViews(root, change, prs) {
|
|
|
1765
1827
|
return out;
|
|
1766
1828
|
}
|
|
1767
1829
|
async function runView(root, change, runId) {
|
|
1768
|
-
const dir =
|
|
1769
|
-
const text = await readFile2(
|
|
1830
|
+
const dir = join5(runsDirOf(root), change, runId);
|
|
1831
|
+
const text = await readFile2(join5(dir, "run.json"), "utf8").catch(() => void 0);
|
|
1770
1832
|
if (!text)
|
|
1771
1833
|
return void 0;
|
|
1772
1834
|
const r = JSON.parse(text);
|
|
1773
|
-
const manifest = await readFile2(
|
|
1835
|
+
const manifest = await readFile2(join5(dir, "context-manifest.json"), "utf8").catch(() => "");
|
|
1774
1836
|
const tr = await taskRunOfRun(root, change, runId).catch(() => void 0);
|
|
1775
1837
|
return {
|
|
1776
1838
|
schemaVersion: RUN_SCHEMA_VERSION,
|
|
@@ -1820,7 +1882,7 @@ async function artifactPath(root, id, artifact, o = {}) {
|
|
|
1820
1882
|
const a = ChangeArtifact.safeParse(artifact);
|
|
1821
1883
|
if (!a.success)
|
|
1822
1884
|
throw badRequest(`${artifact} is not an artifact. Use one of ${ChangeArtifact.options.join(", ")}.`);
|
|
1823
|
-
const dir =
|
|
1885
|
+
const dir = join5(changesDirOf(root), id);
|
|
1824
1886
|
const files = o.listed ?? await artifactFiles(dir, a.data);
|
|
1825
1887
|
if (o.file) {
|
|
1826
1888
|
if (!files.includes(o.file))
|
|
@@ -1838,7 +1900,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
1838
1900
|
const { root, user, jobs } = ctx;
|
|
1839
1901
|
const confirmed2 = (write, target, given) => requireConfirmation(ctx.confirmations, write, target, given);
|
|
1840
1902
|
const readyView = async (change) => {
|
|
1841
|
-
const { deployOrderOf } = await import("./chunk-
|
|
1903
|
+
const { deployOrderOf } = await import("./chunk-RGL7ZSJ7.js");
|
|
1842
1904
|
const repoOrder = await deployOrderOf(root, change);
|
|
1843
1905
|
const prStates = /* @__PURE__ */ new Map();
|
|
1844
1906
|
for (const t of await taskViews(root, change, {
|
|
@@ -1866,7 +1928,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
1866
1928
|
throw badRequest("plan is the refusal's plan (its job's result's refused.plan) for the list being confirmed.");
|
|
1867
1929
|
if (b.plan === void 0)
|
|
1868
1930
|
return;
|
|
1869
|
-
const { lastBuildOf } = await import("./chunk-
|
|
1931
|
+
const { lastBuildOf } = await import("./chunk-XSLFANKH.js");
|
|
1870
1932
|
const last = await lastBuildOf(root);
|
|
1871
1933
|
if (last?.outcome !== "refused" || !ofCommand(last.command) || last.refused?.plan !== b.plan)
|
|
1872
1934
|
throw conflict("What the build would remove or discard isn't what the page listed any more. Nothing written: look at the list again.");
|
|
@@ -1881,7 +1943,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
1881
1943
|
c.progress(1, 1, res.code === 0 ? "Done" : "Stopped");
|
|
1882
1944
|
ctx.events.publish({ type: "file.changed", path: "." });
|
|
1883
1945
|
const raw = [...res.out, ...res.err];
|
|
1884
|
-
const { appLines: appLines2 } = await import("./chunk-
|
|
1946
|
+
const { appLines: appLines2 } = await import("./chunk-ZLQQJBPF.js");
|
|
1885
1947
|
const lines = appLines2(raw);
|
|
1886
1948
|
const next = res.code === 0 ? void 0 : syncNextOf(raw);
|
|
1887
1949
|
return {
|
|
@@ -1913,7 +1975,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
1913
1975
|
};
|
|
1914
1976
|
const doneMayStart = async (runId) => {
|
|
1915
1977
|
const before = await findRun(root, runId);
|
|
1916
|
-
const { hasKeptResume: hasKeptResume2 } = await import("./chunk-
|
|
1978
|
+
const { hasKeptResume: hasKeptResume2 } = await import("./chunk-ZLQQJBPF.js");
|
|
1917
1979
|
const onlyResume = before.state === "validated" && await hasKeptResume2(root, runId);
|
|
1918
1980
|
if (before.state === "validated" && !onlyResume || before.state === "cancelled")
|
|
1919
1981
|
throw conflict(`Run ${runId} is already ${before.state}.`);
|
|
@@ -1935,17 +1997,17 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
1935
1997
|
}
|
|
1936
1998
|
const after = await findRun(root, runId);
|
|
1937
1999
|
ctx.events.publish({ type: "run.changed", runId: after.runId, state: after.state });
|
|
1938
|
-
const { resumeAfterDone, appLines: appLines2 } = await import("./chunk-
|
|
2000
|
+
const { resumeAfterDone, appLines: appLines2 } = await import("./chunk-ZLQQJBPF.js");
|
|
1939
2001
|
if (res.code !== 0)
|
|
1940
2002
|
throw refused({ ...res, out: appLines2(res.out), err: appLines2(res.err) });
|
|
1941
2003
|
const stepRunner = deps.runStep ?? (async (args) => {
|
|
1942
|
-
const { main } = await import("./chunk-
|
|
2004
|
+
const { main } = await import("./chunk-VTE3MIWY.js");
|
|
1943
2005
|
const out = [];
|
|
1944
2006
|
const err = [];
|
|
1945
2007
|
const code = await main([...args, "--root", root], { out: (l) => out.push(l), err: (l) => err.push(l) }, { quiet: true });
|
|
1946
2008
|
return { code, out, err };
|
|
1947
2009
|
});
|
|
1948
|
-
const { hasKeptResume: kept } = await import("./chunk-
|
|
2010
|
+
const { hasKeptResume: kept } = await import("./chunk-ZLQQJBPF.js");
|
|
1949
2011
|
const resumed = !await kept(root, after.runId) ? void 0 : await trackedLocal(ctx, `Finishing the step: ${after.runId}`, () => resumeAfterDone(root, stepRunner, after.change, after.runId), { meta: { handoffRun: after.runId } }).catch((e) => ({ lines: [e.message] }));
|
|
1950
2012
|
if (resumed)
|
|
1951
2013
|
ctx.events.publish({ type: "file.changed", path: changesRelOf(root) });
|
|
@@ -1965,7 +2027,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
1965
2027
|
};
|
|
1966
2028
|
startAutoDone(ctx, (runId) => doneRun(runId, "app"), deps.autoDone ?? {});
|
|
1967
2029
|
return r.add("POST", "/api/facts/{repo}/apply", async ({ params, body }) => {
|
|
1968
|
-
const { verifyCommand } = await import("./chunk-
|
|
2030
|
+
const { verifyCommand } = await import("./chunk-6D7HF6V4.js");
|
|
1969
2031
|
const b = parseBody(api_exports.FactsApplyRequest, body);
|
|
1970
2032
|
const repo = params.repo;
|
|
1971
2033
|
if (!FACTS_REPO.test(repo))
|
|
@@ -1974,7 +2036,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
1974
2036
|
throw notFound(`There is no repo ${repo} in this workspace.`);
|
|
1975
2037
|
await refusalStillListed(b, (c) => c === `atticus verify ${repo} --write`);
|
|
1976
2038
|
return asJob(`Applying to ${repo}`, async () => {
|
|
1977
|
-
const { lastBuildOf } = await import("./chunk-
|
|
2039
|
+
const { lastBuildOf } = await import("./chunk-XSLFANKH.js");
|
|
1978
2040
|
const before = JSON.stringify(await lastBuildOf(root) ?? null);
|
|
1979
2041
|
const ran = await run((io) => verifyCommand(root, repo, {
|
|
1980
2042
|
write: true,
|
|
@@ -1991,7 +2053,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
1991
2053
|
});
|
|
1992
2054
|
}).add("GET", "/api/upgrade", async () => {
|
|
1993
2055
|
const r2 = await keptAnswer(root, "upgrade", async () => {
|
|
1994
|
-
const { newerAtticusOf, upgradeCheck } = await import("./chunk-
|
|
2056
|
+
const { newerAtticusOf, upgradeCheck } = await import("./chunk-PNU5SNYP.js");
|
|
1995
2057
|
const c = await upgradeCheck(root);
|
|
1996
2058
|
const stamp3 = c.stamp?.atticus ?? newerAtticusOf(c);
|
|
1997
2059
|
const body = {
|
|
@@ -2002,11 +2064,11 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2002
2064
|
};
|
|
2003
2065
|
return { status: 200, body };
|
|
2004
2066
|
});
|
|
2005
|
-
const { upgradedPaths, UPGRADE_STAMP } = await import("./chunk-
|
|
2067
|
+
const { upgradedPaths, UPGRADE_STAMP } = await import("./chunk-OZN3KT74.js");
|
|
2006
2068
|
const upgraded = upgradedPaths(root).filter((p) => p !== UPGRADE_STAMP);
|
|
2007
2069
|
return { ...r2, body: { ...r2.body, upgraded } };
|
|
2008
2070
|
}).add("POST", "/api/upgrade", async () => {
|
|
2009
|
-
const { newerThan, newerWords, upgradeCheck, upgradeCommand } = await import("./chunk-
|
|
2071
|
+
const { newerThan, newerWords, upgradeCheck, upgradeCommand } = await import("./chunk-PNU5SNYP.js");
|
|
2010
2072
|
const c = await upgradeCheck(root);
|
|
2011
2073
|
if (c.newer)
|
|
2012
2074
|
throw conflict(newerWords(c));
|
|
@@ -2014,12 +2076,12 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2014
2076
|
throw conflict(`Nothing to upgrade: up to date for Atticus ${c.atticus}.`);
|
|
2015
2077
|
return asJob("Upgrading the metarepo", async () => {
|
|
2016
2078
|
const ran = await run((io) => upgradeCommand(root, { by: user }, io));
|
|
2017
|
-
const { upgradedPaths, UPGRADE_STAMP } = await import("./chunk-
|
|
2079
|
+
const { upgradedPaths, UPGRADE_STAMP } = await import("./chunk-OZN3KT74.js");
|
|
2018
2080
|
const upgraded = upgradedPaths(root).filter((p) => p !== UPGRADE_STAMP);
|
|
2019
2081
|
return { ...ran, extra: { upgraded } };
|
|
2020
2082
|
});
|
|
2021
2083
|
}).add("GET", "/api/propose", async ({ query }) => {
|
|
2022
|
-
const { proposePlan, PROPOSE_SCOPES } = await import("./chunk-
|
|
2084
|
+
const { proposePlan, PROPOSE_SCOPES } = await import("./chunk-OZN3KT74.js");
|
|
2023
2085
|
const scope = query.get("scope") ?? "";
|
|
2024
2086
|
if (!PROPOSE_SCOPES.includes(scope))
|
|
2025
2087
|
throw refused({
|
|
@@ -2042,7 +2104,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2042
2104
|
}).add("POST", "/api/propose", async ({ body }) => {
|
|
2043
2105
|
const b = parseBody(api_exports.ProposeRequest, body);
|
|
2044
2106
|
confirmed2("propose", b.scope, b.confirmation);
|
|
2045
|
-
const { proposeForReview } = await import("./chunk-
|
|
2107
|
+
const { proposeForReview } = await import("./chunk-OZN3KT74.js");
|
|
2046
2108
|
return asJob("Proposing for review", () => run((io) => proposeForReview(root, {
|
|
2047
2109
|
scope: b.scope,
|
|
2048
2110
|
by: user,
|
|
@@ -2051,15 +2113,15 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2051
2113
|
...b.branch ? { branch: b.branch } : {}
|
|
2052
2114
|
}, io)));
|
|
2053
2115
|
}).add("POST", "/api/propose/bring-in", async () => {
|
|
2054
|
-
const { bringInMerged } = await import("./chunk-
|
|
2116
|
+
const { bringInMerged } = await import("./chunk-OZN3KT74.js");
|
|
2055
2117
|
return asJob("Bringing in what merged", () => run((io) => bringInMerged(root, io)));
|
|
2056
2118
|
}).add("POST", "/api/propose/upstream", async ({ body }) => {
|
|
2057
2119
|
const b = parseBody(api_exports.UpstreamRequest, body);
|
|
2058
|
-
const { setUpstream } = await import("./chunk-
|
|
2120
|
+
const { setUpstream } = await import("./chunk-OZN3KT74.js");
|
|
2059
2121
|
return asJob(`Setting the upstream to ${b.upstream}`, () => run((io) => setUpstream(root, b.upstream, io)));
|
|
2060
2122
|
}).add("POST", "/api/changes/{changeId}/conformance", async ({ params }) => {
|
|
2061
2123
|
await readChange(root, params.changeId);
|
|
2062
|
-
const { changeConformCommand } = await import("./chunk-
|
|
2124
|
+
const { changeConformCommand } = await import("./chunk-VKBJ4JDV.js");
|
|
2063
2125
|
return asJob(`Checking ${params.changeId}'s code against its design`, () => run((io) => changeConformCommand(root, params.changeId, { findingsAnswer: true }, io)));
|
|
2064
2126
|
}).add("GET", "/api/change-types", async () => {
|
|
2065
2127
|
const op = await loadOrgPack(orgPackDirOf(root));
|
|
@@ -2148,7 +2210,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2148
2210
|
const art = ChangeArtifact.safeParse(params.artifact);
|
|
2149
2211
|
if (!art.success)
|
|
2150
2212
|
await artifactPath(root, params.changeId, params.artifact);
|
|
2151
|
-
const dir =
|
|
2213
|
+
const dir = join5(changesDirOf(root), params.changeId);
|
|
2152
2214
|
const listed = art.success ? await artifactFiles(dir, art.data) : [];
|
|
2153
2215
|
const files = [];
|
|
2154
2216
|
const problems = /* @__PURE__ */ Object.create(null);
|
|
@@ -2168,7 +2230,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2168
2230
|
file,
|
|
2169
2231
|
listed
|
|
2170
2232
|
});
|
|
2171
|
-
content = await readFile2(
|
|
2233
|
+
content = await readFile2(join5(dir, rel), "utf8").catch((e) => {
|
|
2172
2234
|
if (e.code === "ENOENT")
|
|
2173
2235
|
throw notFound(`${file} isn't there any more: it was deleted or moved.`);
|
|
2174
2236
|
return "";
|
|
@@ -2194,7 +2256,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2194
2256
|
orNew: true,
|
|
2195
2257
|
file: query.get("file")
|
|
2196
2258
|
});
|
|
2197
|
-
const content = await readFile2(
|
|
2259
|
+
const content = await readFile2(join5(changesDirOf(root), params.changeId, rel), "utf8").catch(() => "");
|
|
2198
2260
|
return {
|
|
2199
2261
|
status: 200,
|
|
2200
2262
|
body: {
|
|
@@ -2211,15 +2273,15 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2211
2273
|
orNew: true,
|
|
2212
2274
|
file: query.get("file")
|
|
2213
2275
|
});
|
|
2214
|
-
const file =
|
|
2276
|
+
const file = join5(changesDirOf(root), params.changeId, rel);
|
|
2215
2277
|
const was = await readFile2(file, "utf8").catch(() => void 0);
|
|
2216
2278
|
const now = was ?? "";
|
|
2217
2279
|
if (sha2(now) !== b.baseSha256)
|
|
2218
2280
|
throw conflict(`${rel} changed since you opened it. Reload it, then make your edit again.`);
|
|
2219
2281
|
await mkdir(dirname3(file), { recursive: true });
|
|
2220
2282
|
await writeFileIfUnchanged(file, was, b.content);
|
|
2221
|
-
const { recordPersonSave: recordPersonSave2 } = await import("./chunk-
|
|
2222
|
-
await recordPersonSave2(
|
|
2283
|
+
const { recordPersonSave: recordPersonSave2 } = await import("./chunk-SU2JHMIS.js");
|
|
2284
|
+
await recordPersonSave2(join5(changesDirOf(root), params.changeId), params.changeId, {
|
|
2223
2285
|
file: rel,
|
|
2224
2286
|
who: user,
|
|
2225
2287
|
at: (deps.now ? new Date(deps.now) : /* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -2444,7 +2506,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2444
2506
|
})));
|
|
2445
2507
|
if (res.code !== 0)
|
|
2446
2508
|
throw refused(res);
|
|
2447
|
-
const repos = await readFile2(
|
|
2509
|
+
const repos = await readFile2(join5(changesDirOf(root), params.changeId, "repos.yaml"), "utf8").catch(() => "");
|
|
2448
2510
|
return { status: 200, body: { lines: res.out, reposYaml: repos } };
|
|
2449
2511
|
}).add("POST", "/api/changes/{changeId}/handoff", async ({ params, body }) => {
|
|
2450
2512
|
await readChange(root, params.changeId);
|
|
@@ -2516,7 +2578,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2516
2578
|
const res = await run((io) => changeSync(root, params.changeId, { by: user, approve, ...b.repo ? { repo: b.repo } : {} }, io, changeDeps));
|
|
2517
2579
|
if (res.code === 2)
|
|
2518
2580
|
throw refused(res);
|
|
2519
|
-
const { appLines: appLines2 } = await import("./chunk-
|
|
2581
|
+
const { appLines: appLines2 } = await import("./chunk-ZLQQJBPF.js");
|
|
2520
2582
|
return {
|
|
2521
2583
|
status: 200,
|
|
2522
2584
|
body: {
|
|
@@ -2526,14 +2588,14 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2526
2588
|
};
|
|
2527
2589
|
}).add("GET", "/api/changes/{changeId}/inputs", async ({ params }) => {
|
|
2528
2590
|
const c = await readChange(root, params.changeId);
|
|
2529
|
-
const { readChangeInputs } = await import("./chunk-
|
|
2591
|
+
const { readChangeInputs } = await import("./chunk-CP4KZA33.js");
|
|
2530
2592
|
return {
|
|
2531
2593
|
status: 200,
|
|
2532
|
-
body: api_exports.ChangeInputList.parse(await readChangeInputs(
|
|
2594
|
+
body: api_exports.ChangeInputList.parse(await readChangeInputs(join5(changesDirOf(root), c.id)))
|
|
2533
2595
|
};
|
|
2534
2596
|
}).add("GET", "/api/changes/{changeId}/prototypes", async ({ params }) => {
|
|
2535
2597
|
const c = await readChange(root, params.changeId);
|
|
2536
|
-
const { changePrototypes } = await import("./chunk-
|
|
2598
|
+
const { changePrototypes } = await import("./chunk-GOB2TYE5.js");
|
|
2537
2599
|
return {
|
|
2538
2600
|
status: 200,
|
|
2539
2601
|
body: api_exports.ChangePrototypeList.parse(await changePrototypes(root, c.id))
|
|
@@ -2541,7 +2603,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2541
2603
|
}).add("POST", "/api/changes/{changeId}/prototypes", async ({ params, body }) => {
|
|
2542
2604
|
const c = await readChange(root, params.changeId);
|
|
2543
2605
|
const b = parseBody(api_exports.ComparePrototypeRequest, body);
|
|
2544
|
-
const { attachPrototype, changePrototypes } = await import("./chunk-
|
|
2606
|
+
const { attachPrototype, changePrototypes } = await import("./chunk-GOB2TYE5.js");
|
|
2545
2607
|
const res = await run((io) => attachPrototype(root, c.id, b.repo, { by: user, ...deps.now ? { now: new Date(deps.now) } : {} }, io));
|
|
2546
2608
|
if (res.code !== 0)
|
|
2547
2609
|
throw refused(res);
|
|
@@ -2559,7 +2621,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2559
2621
|
const bytes = new Uint8Array(Buffer.from(b.content, "base64"));
|
|
2560
2622
|
if (bytes.length > MAX_ATTACH)
|
|
2561
2623
|
throw new HttpError(413, "The file is too large", "Attach a file of 15 MB or less.");
|
|
2562
|
-
const { attachFiles } = await import("./chunk-
|
|
2624
|
+
const { attachFiles } = await import("./chunk-OHAMT5OA.js");
|
|
2563
2625
|
const r2 = await attachFiles(root, c.id, [{ name: b.name, bytes }], user);
|
|
2564
2626
|
if (!r2.added.length)
|
|
2565
2627
|
throw new HttpError(422, "Atticus can't attach that", r2.refused[0]?.why ?? "", {
|
|
@@ -2568,7 +2630,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2568
2630
|
return { status: 201, body: api_exports.AttachResult.parse(r2) };
|
|
2569
2631
|
}, { maxBody: Math.ceil(MAX_ATTACH * 4 / 3) + 64 * 1024 }).add("GET", "/api/changes/{changeId}/runs", async ({ params }) => {
|
|
2570
2632
|
await readChange(root, params.changeId);
|
|
2571
|
-
const dir =
|
|
2633
|
+
const dir = join5(runsDirOf(root), params.changeId);
|
|
2572
2634
|
const out = [];
|
|
2573
2635
|
for (const id of (await readdir2(dir).catch(() => [])).sort()) {
|
|
2574
2636
|
const v = await runView(root, params.changeId, id);
|
|
@@ -2580,7 +2642,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2580
2642
|
await readChange(root, params.changeId);
|
|
2581
2643
|
const b = parseBody(api_exports.StartRunRequest, body);
|
|
2582
2644
|
await requireConfirmedModel(root, b.runtime);
|
|
2583
|
-
const before = new Set(await readdir2(
|
|
2645
|
+
const before = new Set(await readdir2(join5(runsDirOf(root), params.changeId)).catch(() => []));
|
|
2584
2646
|
let res;
|
|
2585
2647
|
if (b.task) {
|
|
2586
2648
|
let level = b.autonomy ? b.autonomy === "draft-and-pr" ? "pr" : b.autonomy === "plan-only" ? "plan" : "draft" : void 0;
|
|
@@ -2625,7 +2687,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2625
2687
|
throw badRequest(`Start ${b.agent} from its screen; this call starts task runs, the story writer and the critic.`);
|
|
2626
2688
|
if (res.code === 2)
|
|
2627
2689
|
throw refused(res);
|
|
2628
|
-
const after = (await readdir2(
|
|
2690
|
+
const after = (await readdir2(join5(runsDirOf(root), params.changeId)).catch(() => [])).filter((x) => !before.has(x)).sort();
|
|
2629
2691
|
if (after.length === 0)
|
|
2630
2692
|
throw refused(res);
|
|
2631
2693
|
const v = await runView(root, params.changeId, after.at(-1));
|
|
@@ -2678,7 +2740,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2678
2740
|
const owner = await findTaskRunOfRun(root, v.runId);
|
|
2679
2741
|
if (owner && owner.waiting !== v.runId)
|
|
2680
2742
|
throw conflict(taskRunNotWaiting(v.runId, owner));
|
|
2681
|
-
const file =
|
|
2743
|
+
const file = join5(runsDirOf(root), v.change, v.runId, "run.json");
|
|
2682
2744
|
const was = await readFile2(file, "utf8");
|
|
2683
2745
|
const rec = JSON.parse(was);
|
|
2684
2746
|
rec.state = "prepared";
|
|
@@ -2723,7 +2785,7 @@ function uiRoutes(r, ctx, deps = {}) {
|
|
|
2723
2785
|
throw conflict(`Run ${v.runId} is already ${v.state}.`);
|
|
2724
2786
|
if (doneBusy.has(v.runId))
|
|
2725
2787
|
throw conflict(`Done for ${v.runId} is running; wait for it to finish.`);
|
|
2726
|
-
const file =
|
|
2788
|
+
const file = join5(runsDirOf(root), v.change, v.runId, "run.json");
|
|
2727
2789
|
const cancelRun = async () => {
|
|
2728
2790
|
const was = await readFile2(file, "utf8");
|
|
2729
2791
|
const rec = JSON.parse(was);
|
|
@@ -2880,7 +2942,7 @@ var import_yaml3 = __toESM(require_dist(), 1);
|
|
|
2880
2942
|
import { createHash as createHash4 } from "node:crypto";
|
|
2881
2943
|
import { readdir as readdir3, readFile as readFile3, stat as stat3 } from "node:fs/promises";
|
|
2882
2944
|
import { homedir } from "node:os";
|
|
2883
|
-
import { join as
|
|
2945
|
+
import { join as join6, resolve } from "node:path";
|
|
2884
2946
|
async function run2(f) {
|
|
2885
2947
|
const out = [];
|
|
2886
2948
|
const err = [];
|
|
@@ -2956,9 +3018,9 @@ async function filesUnder2(dir, prefix = "") {
|
|
|
2956
3018
|
for (const e of entries.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
2957
3019
|
const rel = prefix ? `${prefix}/${e.name}` : e.name;
|
|
2958
3020
|
if (e.isDirectory())
|
|
2959
|
-
out.push(...await filesUnder2(
|
|
3021
|
+
out.push(...await filesUnder2(join6(dir, e.name), rel));
|
|
2960
3022
|
else
|
|
2961
|
-
out.push({ path: rel, bytes: (await stat3(
|
|
3023
|
+
out.push({ path: rel, bytes: (await stat3(join6(dir, e.name))).size });
|
|
2962
3024
|
}
|
|
2963
3025
|
return out;
|
|
2964
3026
|
}
|
|
@@ -3019,7 +3081,7 @@ async function findStep(root, id, change) {
|
|
|
3019
3081
|
return s;
|
|
3020
3082
|
}
|
|
3021
3083
|
var sha3 = (s) => createHash4("sha256").update(s).digest("hex");
|
|
3022
|
-
var snowText = (dir) => readFile3(
|
|
3084
|
+
var snowText = (dir) => readFile3(join6(dir, "snow.md"), "utf8").catch(() => "");
|
|
3023
3085
|
var SyncEntries = external_exports.object({
|
|
3024
3086
|
requests: external_exports.array(external_exports.object({ key: external_exports.string(), id: external_exports.string() })).default([])
|
|
3025
3087
|
});
|
|
@@ -3034,7 +3096,7 @@ async function changeRequests(root, change, templates, steps) {
|
|
|
3034
3096
|
};
|
|
3035
3097
|
let synced = [];
|
|
3036
3098
|
try {
|
|
3037
|
-
synced = SyncEntries.parse((0, import_yaml3.parse)(await readFile3(
|
|
3099
|
+
synced = SyncEntries.parse((0, import_yaml3.parse)(await readFile3(join6(dir, SYNC_FILE), "utf8"))).requests;
|
|
3038
3100
|
} catch {
|
|
3039
3101
|
}
|
|
3040
3102
|
return drafts.map((d) => {
|
|
@@ -3288,7 +3350,7 @@ function uiRunRoutes(r, ctx, deps = {}) {
|
|
|
3288
3350
|
const b = parseBody2(api_exports.FillRequestFieldsRequest, body);
|
|
3289
3351
|
const dir = changeFolder(root, c.id);
|
|
3290
3352
|
const rel2 = `${changesRelOf(root)}/${c.id}/snow.md`;
|
|
3291
|
-
const was = await readFile3(
|
|
3353
|
+
const was = await readFile3(join6(dir, "snow.md"), "utf8").catch(() => void 0);
|
|
3292
3354
|
if (was === void 0)
|
|
3293
3355
|
throw notFound(`${c.id} has no snow.md: draft its requests first.`);
|
|
3294
3356
|
if (sha3(was) !== b.baseSha256)
|
|
@@ -3301,7 +3363,7 @@ function uiRunRoutes(r, ctx, deps = {}) {
|
|
|
3301
3363
|
throw new HttpError(422, "Atticus can't fill that", e.message);
|
|
3302
3364
|
throw e;
|
|
3303
3365
|
}
|
|
3304
|
-
await writeFileIfUnchanged(
|
|
3366
|
+
await writeFileIfUnchanged(join6(dir, "snow.md"), was, next);
|
|
3305
3367
|
ctx.events.publish({ type: "file.changed", path: rel2 });
|
|
3306
3368
|
const op = await pack();
|
|
3307
3369
|
const now = (await changeRequests(root, c.id, op.serviceRequests, [])).find((r2) => r2.heading === b.heading);
|
|
@@ -3465,8 +3527,8 @@ function uiRunRoutes(r, ctx, deps = {}) {
|
|
|
3465
3527
|
}).add("GET", "/api/governance", async () => {
|
|
3466
3528
|
const conf = jsonOf(await run2((io) => conformanceCommand(orgPackDirOf(root), { kind: "org-pack", json: true }, io)));
|
|
3467
3529
|
const constitution = await loadConstitution();
|
|
3468
|
-
const org = await readPackFiles(root,
|
|
3469
|
-
const team = await readPackFiles(root,
|
|
3530
|
+
const org = await readPackFiles(root, join6(orgPackDirOf(root), "checklists"));
|
|
3531
|
+
const team = await readPackFiles(root, join6(orgPackDirOf(root), "teams"));
|
|
3470
3532
|
const layered = layerRules([
|
|
3471
3533
|
{ pack: constitution, file: "built-in", origin: "constitution" },
|
|
3472
3534
|
...org.packs.map((p) => ({ ...p, origin: "org" })),
|
|
@@ -3565,12 +3627,12 @@ function uiRunRoutes(r, ctx, deps = {}) {
|
|
|
3565
3627
|
};
|
|
3566
3628
|
const items = [];
|
|
3567
3629
|
for (const c of await openChanges2(root)) {
|
|
3568
|
-
const dir =
|
|
3630
|
+
const dir = join6(changeFolder(root, c.id), "review", "defences");
|
|
3569
3631
|
for (const f of (await readdir3(dir).catch(() => [])).sort()) {
|
|
3570
3632
|
if (!f.endsWith(".json"))
|
|
3571
3633
|
continue;
|
|
3572
3634
|
try {
|
|
3573
|
-
const list = JSON.parse(await readFile3(
|
|
3635
|
+
const list = JSON.parse(await readFile3(join6(dir, f), "utf8"));
|
|
3574
3636
|
for (const q of list)
|
|
3575
3637
|
items.push({
|
|
3576
3638
|
change: c.id,
|
|
@@ -3870,7 +3932,7 @@ function uiKnowRoutes(r, ctx, o = {}) {
|
|
|
3870
3932
|
const args = build(arg);
|
|
3871
3933
|
if (!args)
|
|
3872
3934
|
throw badRequest(`The ${name} view needs an id: /api/view/${name}/<id>.`);
|
|
3873
|
-
const { main } = await import("./chunk-
|
|
3935
|
+
const { main } = await import("./chunk-VTE3MIWY.js");
|
|
3874
3936
|
const out = [];
|
|
3875
3937
|
const err = [];
|
|
3876
3938
|
const code = await main([...args, "--json", "--root", ctx.root], { out: (l) => out.push(l), err: (l) => err.push(l) }, { quiet: true });
|
|
@@ -3900,7 +3962,7 @@ function uiKnowRoutes(r, ctx, o = {}) {
|
|
|
3900
3962
|
return { status: 200, body: { code, data: body, problems: err } };
|
|
3901
3963
|
};
|
|
3902
3964
|
const text = async (args) => {
|
|
3903
|
-
const { main } = await import("./chunk-
|
|
3965
|
+
const { main } = await import("./chunk-VTE3MIWY.js");
|
|
3904
3966
|
const out = [];
|
|
3905
3967
|
const err = [];
|
|
3906
3968
|
const code = await main([...args, "--root", ctx.root], { out: (l) => out.push(l), err: (l) => err.push(l) }, { quiet: true });
|
|
@@ -3918,7 +3980,7 @@ function uiKnowRoutes(r, ctx, o = {}) {
|
|
|
3918
3980
|
throw badRequest("Some fields aren't right.", {
|
|
3919
3981
|
errors: b.error.issues.map((i) => ({ path: i.path.join("."), message: i.message }))
|
|
3920
3982
|
});
|
|
3921
|
-
const { triageDecide } = await import("./chunk-
|
|
3983
|
+
const { triageDecide } = await import("./chunk-65VII57C.js");
|
|
3922
3984
|
const out = [];
|
|
3923
3985
|
const err = [];
|
|
3924
3986
|
const code = await triageDecide(ctx.root, params.itemId, b.data.option, { by: ctx.user, ...b.data.reason ? { reason: b.data.reason } : {} }, { out: (l) => out.push(l), err: (l) => err.push(l) });
|
|
@@ -4045,7 +4107,7 @@ function refused3(r) {
|
|
|
4045
4107
|
return r.code === 2 ? badRequest(detail) : new HttpError(422, "Atticus refused", detail);
|
|
4046
4108
|
}
|
|
4047
4109
|
function uiInitiativeRoutes(r, ctx) {
|
|
4048
|
-
const commands = () => import("./chunk-
|
|
4110
|
+
const commands = () => import("./chunk-J5AJRTID.js");
|
|
4049
4111
|
const changed = () => ctx.events.publish({ type: "file.changed", path: "catalog/curated" });
|
|
4050
4112
|
return r.add("POST", "/api/initiatives", async ({ body }) => {
|
|
4051
4113
|
const b = parseBody3(api_exports.NewInitiativeRequest, body);
|
|
@@ -4124,9 +4186,9 @@ function uiQuestionRoutes(r, ctx, deps = {}) {
|
|
|
4124
4186
|
throw badRequest("role is product, architecture, analysis or delivery, or left out.");
|
|
4125
4187
|
const onFile = await listQuestions(ctx.root);
|
|
4126
4188
|
const every = { ...onFile, questions: onFile.questions.filter((q) => !q.finding) };
|
|
4127
|
-
const { routeQuestions } = await import("./chunk-
|
|
4189
|
+
const { routeQuestions } = await import("./chunk-GGCRLU4L.js");
|
|
4128
4190
|
const routedAll = await routeQuestions(ctx.root, every.questions, mine ? { mine: ctx.user } : {});
|
|
4129
|
-
const { stageQuestions, roleWithStage, isChangeQuestion, countByRole, personsRoles } = await import("./chunk-
|
|
4191
|
+
const { stageQuestions, roleWithStage, isChangeQuestion, countByRole, personsRoles } = await import("./chunk-JNAJH2KI.js");
|
|
4130
4192
|
const stages = await stageQuestions(ctx.root);
|
|
4131
4193
|
const roleOf = (q) => roleWithStage(q, stages);
|
|
4132
4194
|
for (const q of every.questions) {
|
|
@@ -4177,13 +4239,13 @@ function uiQuestionRoutes(r, ctx, deps = {}) {
|
|
|
4177
4239
|
return { status: 200, body };
|
|
4178
4240
|
};
|
|
4179
4241
|
return r.add("GET", "/api/questions", async ({ query }) => keptAnswer(ctx.root, `questions?${query.toString()}&by=${ctx.user}`, () => questionsAnswer(query), () => checkoutsStamp(ctx.root))).add("GET", "/api/owner-questions", async () => keptAnswer(ctx.root, "owner-questions", async () => {
|
|
4180
|
-
const { ownerQuestions } = await import("./chunk-
|
|
4242
|
+
const { ownerQuestions } = await import("./chunk-LQM2YZUX.js");
|
|
4181
4243
|
return { status: 200, body: await ownerQuestions(ctx.root, { now: now() }) };
|
|
4182
4244
|
})).add("POST", "/api/owner-questions/{id}/answer", async ({ params, body }) => {
|
|
4183
4245
|
const b = api_exports.OwnerAnswerRequest.safeParse(body ?? {});
|
|
4184
4246
|
if (!b.success || !b.data.answer.trim())
|
|
4185
4247
|
throw badRequest('Answer with { answer: "what the owner said" }.');
|
|
4186
|
-
const { answerOwnerQuestion, OwnerQuestionError } = await import("./chunk-
|
|
4248
|
+
const { answerOwnerQuestion, OwnerQuestionError } = await import("./chunk-LQM2YZUX.js");
|
|
4187
4249
|
try {
|
|
4188
4250
|
const r2 = await answerOwnerQuestion(ctx.root, params.id, b.data.answer, {
|
|
4189
4251
|
by: ctx.user,
|
|
@@ -4208,13 +4270,13 @@ function uiQuestionRoutes(r, ctx, deps = {}) {
|
|
|
4208
4270
|
throw notFound(`There is no question ${params.id}.`);
|
|
4209
4271
|
if (q.askedBy.step !== TARGETS_STEP_ID && q.askedBy.step !== TOPICS_STEP_ID)
|
|
4210
4272
|
throw new HttpError(422, "That question doesn't ask where a call goes or who owns a topic", `${q.id} isn't a targets or topics question, so it has no picker.`);
|
|
4211
|
-
const { pickerOf } = await import("./chunk-
|
|
4273
|
+
const { pickerOf } = await import("./chunk-6J4PQWNI.js");
|
|
4212
4274
|
return { status: 200, body: { picks: await pickerOf(ctx.root) } };
|
|
4213
4275
|
}).add("GET", "/api/questions/{id}/evidence", async ({ params }) => {
|
|
4214
4276
|
const q = await readQuestion(ctx.root, params.id).catch(() => void 0);
|
|
4215
4277
|
if (!q)
|
|
4216
4278
|
throw notFound(`There is no question ${params.id}.`);
|
|
4217
|
-
const { evidenceExcerpts } = await import("./chunk-
|
|
4279
|
+
const { evidenceExcerpts } = await import("./chunk-GNY4LOHN.js");
|
|
4218
4280
|
return {
|
|
4219
4281
|
status: 200,
|
|
4220
4282
|
body: {
|
|
@@ -4259,7 +4321,7 @@ function uiQuestionRoutes(r, ctx, deps = {}) {
|
|
|
4259
4321
|
const q0 = await readQuestion(ctx.root, params.id).catch(() => void 0);
|
|
4260
4322
|
if (!q0)
|
|
4261
4323
|
throw notFound(`There is no question ${params.id}.`);
|
|
4262
|
-
const { targetAnswerOf, offerLine } = await import("./chunk-
|
|
4324
|
+
const { targetAnswerOf, offerLine } = await import("./chunk-6J4PQWNI.js");
|
|
4263
4325
|
const t = await targetAnswerOf(ctx.root, q0, target, {
|
|
4264
4326
|
...addSystem ? { addSystem } : {},
|
|
4265
4327
|
...name ? { name } : {}
|
|
@@ -4548,7 +4610,7 @@ function uiAcrossRoutes(r, ctx) {
|
|
|
4548
4610
|
var import_yaml4 = __toESM(require_dist(), 1);
|
|
4549
4611
|
import { readdir as readdir5, readFile as readFile4 } from "node:fs/promises";
|
|
4550
4612
|
import { existsSync as existsSync2 } from "node:fs";
|
|
4551
|
-
import { join as
|
|
4613
|
+
import { join as join7 } from "node:path";
|
|
4552
4614
|
var lensOf = (v, fallback) => {
|
|
4553
4615
|
if (v === null)
|
|
4554
4616
|
return fallback;
|
|
@@ -4613,7 +4675,7 @@ function uiGraphRoutes(r, ctx) {
|
|
|
4613
4675
|
const viewsRel = diagramsRelOf(ctx.root) + "/views";
|
|
4614
4676
|
const readLayout = async (view3) => {
|
|
4615
4677
|
try {
|
|
4616
|
-
const f = DiagramLayout.safeParse((0, import_yaml4.parse)(await readFile4(
|
|
4678
|
+
const f = DiagramLayout.safeParse((0, import_yaml4.parse)(await readFile4(join7(ctx.root, layoutRel(view3)), "utf8")));
|
|
4617
4679
|
if (!f.success)
|
|
4618
4680
|
throw new HttpError(422, "Atticus refused", `${layoutRel(view3)} isn't a layout file.`);
|
|
4619
4681
|
return f.data;
|
|
@@ -4669,11 +4731,11 @@ function uiGraphRoutes(r, ctx) {
|
|
|
4669
4731
|
}
|
|
4670
4732
|
};
|
|
4671
4733
|
}).add("GET", "/api/graph/views", async () => {
|
|
4672
|
-
const dir =
|
|
4734
|
+
const dir = join7(ctx.root, ...viewsRel.split("/"));
|
|
4673
4735
|
const names = (await readdir5(dir).catch(() => [])).filter((n) => n.endsWith(".yaml")).sort();
|
|
4674
4736
|
const views = [];
|
|
4675
4737
|
for (const n of names) {
|
|
4676
|
-
const v = api_exports.SavedCanvasView.safeParse((0, import_yaml4.parse)(await readFile4(
|
|
4738
|
+
const v = api_exports.SavedCanvasView.safeParse((0, import_yaml4.parse)(await readFile4(join7(dir, n), "utf8").catch(() => "")));
|
|
4677
4739
|
if (v.success)
|
|
4678
4740
|
views.push(v.data);
|
|
4679
4741
|
}
|
|
@@ -4689,9 +4751,9 @@ function uiGraphRoutes(r, ctx) {
|
|
|
4689
4751
|
});
|
|
4690
4752
|
const v = { ...b.data, by: ctx.user, at: (/* @__PURE__ */ new Date()).toISOString() };
|
|
4691
4753
|
const rel = `${viewsRel}/${v.name}.yaml`;
|
|
4692
|
-
if (existsSync2(
|
|
4754
|
+
if (existsSync2(join7(ctx.root, rel)) && query.get("replace") !== "1")
|
|
4693
4755
|
throw conflict(`There is a view ${v.name} already (${rel}): pick another name, or replace it.`);
|
|
4694
|
-
await writeFileAtomic(
|
|
4756
|
+
await writeFileAtomic(join7(ctx.root, rel), (0, import_yaml4.stringify)(v));
|
|
4695
4757
|
ctx.events.publish({ type: "file.changed", path: rel });
|
|
4696
4758
|
return { status: 200, body: v };
|
|
4697
4759
|
}).add("GET", "/api/code-link", async ({ query }) => {
|
|
@@ -4712,7 +4774,7 @@ function uiGraphRoutes(r, ctx) {
|
|
|
4712
4774
|
missing: `There is no checkout of ${repo} here (atticus sync clones it into the workspace).`
|
|
4713
4775
|
}
|
|
4714
4776
|
};
|
|
4715
|
-
const path =
|
|
4777
|
+
const path = join7(dir, ...m[1].split("/"));
|
|
4716
4778
|
return {
|
|
4717
4779
|
status: 200,
|
|
4718
4780
|
body: {
|
|
@@ -4751,7 +4813,7 @@ function uiGraphRoutes(r, ctx) {
|
|
|
4751
4813
|
at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
4752
4814
|
positions: sorted
|
|
4753
4815
|
});
|
|
4754
|
-
await writeFileAtomic(
|
|
4816
|
+
await writeFileAtomic(join7(ctx.root, layoutRel(view3)), (0, import_yaml4.stringify)(file));
|
|
4755
4817
|
ctx.events.publish({ type: "file.changed", path: layoutRel(view3) });
|
|
4756
4818
|
return {
|
|
4757
4819
|
status: 200,
|
|
@@ -4762,7 +4824,7 @@ function uiGraphRoutes(r, ctx) {
|
|
|
4762
4824
|
|
|
4763
4825
|
// packages/cli/dist/ui-api-specs.js
|
|
4764
4826
|
import { stat as stat4 } from "node:fs/promises";
|
|
4765
|
-
import { join as
|
|
4827
|
+
import { join as join8 } from "node:path";
|
|
4766
4828
|
var idOf2 = (v, what) => {
|
|
4767
4829
|
if (!RecordId.safeParse(v).success)
|
|
4768
4830
|
throw badRequest(`${v} isn't a ${what} id. Ids are lowercase: a-z, 0-9, '.', '_' and '-'.`);
|
|
@@ -4867,8 +4929,8 @@ function uiSpecRoutes(r, ctx) {
|
|
|
4867
4929
|
return { status: 200, body };
|
|
4868
4930
|
});
|
|
4869
4931
|
const deltasOf = async (change) => {
|
|
4870
|
-
const dir =
|
|
4871
|
-
if (!await stat4(
|
|
4932
|
+
const dir = join8(changesDirOf(root), change);
|
|
4933
|
+
if (!await stat4(join8(dir, "change.yaml")).catch(() => void 0))
|
|
4872
4934
|
throw notFound(`There is no change ${change}.`);
|
|
4873
4935
|
return readDeltas(dir);
|
|
4874
4936
|
};
|
|
@@ -4892,7 +4954,7 @@ function uiSpecRoutes(r, ctx) {
|
|
|
4892
4954
|
});
|
|
4893
4955
|
r.add("GET", "/api/changes/{changeId}/conformance", async ({ params }) => {
|
|
4894
4956
|
const change = idOf2(params.changeId, "change");
|
|
4895
|
-
const { conformanceOf } = await import("./chunk-
|
|
4957
|
+
const { conformanceOf } = await import("./chunk-YRK6FTYB.js");
|
|
4896
4958
|
const c = await conformanceOf(root, change);
|
|
4897
4959
|
if (!c)
|
|
4898
4960
|
throw notFound(`There is no change ${change}.`);
|
|
@@ -4907,7 +4969,7 @@ function uiSpecRoutes(r, ctx) {
|
|
|
4907
4969
|
});
|
|
4908
4970
|
r.add("GET", "/api/changes/{changeId}/impact", async ({ params }) => {
|
|
4909
4971
|
const change = idOf2(params.changeId, "change");
|
|
4910
|
-
const { changeImpactOf } = await import("./chunk-
|
|
4972
|
+
const { changeImpactOf } = await import("./chunk-2YB35HY6.js");
|
|
4911
4973
|
const i = await changeImpactOf(root, change);
|
|
4912
4974
|
if (!i)
|
|
4913
4975
|
throw notFound(`There is no change ${change}.`);
|
|
@@ -4943,7 +5005,7 @@ function uiSpecRoutes(r, ctx) {
|
|
|
4943
5005
|
// packages/cli/dist/ui-api-knowledge.js
|
|
4944
5006
|
var import_yaml5 = __toESM(require_dist(), 1);
|
|
4945
5007
|
import { readFile as readFile5, stat as stat5 } from "node:fs/promises";
|
|
4946
|
-
import { join as
|
|
5008
|
+
import { join as join9 } from "node:path";
|
|
4947
5009
|
var STALE_DAYS = 14;
|
|
4948
5010
|
var SLUG = /^[a-z0-9][a-z0-9-]*$/;
|
|
4949
5011
|
var DAY = 864e5;
|
|
@@ -5028,7 +5090,7 @@ function uiKnowledgeRoutes(r, ctx, deps = {}) {
|
|
|
5028
5090
|
const changed = (path) => ctx.events.publish({ type: "file.changed", path });
|
|
5029
5091
|
const appliesView = async (change) => {
|
|
5030
5092
|
const file = `${changesRelOf(root)}/${change}/knowledge.yaml`;
|
|
5031
|
-
const present = await exists(
|
|
5093
|
+
const present = await exists(join9(changeFolder(root, change), "knowledge.yaml"));
|
|
5032
5094
|
const doc = present ? await readKnowledgeApplies(root, change) : void 0;
|
|
5033
5095
|
if (present && !doc)
|
|
5034
5096
|
throw new HttpError(422, "Atticus can't read that file", `${file} isn't a valid knowledge list.`);
|
|
@@ -5060,8 +5122,8 @@ function uiKnowledgeRoutes(r, ctx, deps = {}) {
|
|
|
5060
5122
|
const slash = id.indexOf("/");
|
|
5061
5123
|
return hash > 0 && slash > 0 && slash < hash ? { source: id.slice(0, slash), page: id.slice(slash + 1, hash) } : void 0;
|
|
5062
5124
|
};
|
|
5063
|
-
const { knowledgePages } = await import("./chunk-
|
|
5064
|
-
const { sectionOf } = await import("./chunk-
|
|
5125
|
+
const { knowledgePages } = await import("./chunk-Z56NN3AX.js");
|
|
5126
|
+
const { sectionOf } = await import("./chunk-OUVEXAM2.js");
|
|
5065
5127
|
const pages = doc?.items.some((i) => i.id.includes("#")) ? await knowledgePages(root) : [];
|
|
5066
5128
|
const records = doc?.items.length ? new Map((await readKnowledge(root, { cacheRoot: root })).items.map((r2) => [r2.id, r2])) : /* @__PURE__ */ new Map();
|
|
5067
5129
|
const passageOf = (id) => {
|
|
@@ -5132,7 +5194,7 @@ function uiKnowledgeRoutes(r, ctx, deps = {}) {
|
|
|
5132
5194
|
const op = await loadOrgPack(orgPackDirOf(root));
|
|
5133
5195
|
const platforms = [];
|
|
5134
5196
|
for (const { platform } of op.profiles) {
|
|
5135
|
-
const text = await readFile5(
|
|
5197
|
+
const text = await readFile5(join9(proposalsDirOf(root), "orgpack", `${platform}.yaml`), "utf8").catch(() => void 0);
|
|
5136
5198
|
const data = text === void 0 ? void 0 : (0, import_yaml5.parse)(text);
|
|
5137
5199
|
const proposals = Array.isArray(data?.proposals) ? data.proposals.flatMap((p) => {
|
|
5138
5200
|
const x = OrgPackProposal.safeParse(p);
|
|
@@ -5163,7 +5225,7 @@ function uiKnowledgeRoutes(r, ctx, deps = {}) {
|
|
|
5163
5225
|
const date = (await snapshotDates(root, w.id))[0];
|
|
5164
5226
|
let snapshot;
|
|
5165
5227
|
if (date) {
|
|
5166
|
-
const file =
|
|
5228
|
+
const file = join9(knowledgeDirOf(root), "snapshots", w.id, date, SNAPSHOT_FILE);
|
|
5167
5229
|
const text = await readFile5(file, "utf8").catch(() => void 0);
|
|
5168
5230
|
const m = text === void 0 ? void 0 : SnapshotManifest.safeParse((0, import_yaml5.parse)(text));
|
|
5169
5231
|
if (m?.success)
|
|
@@ -5352,7 +5414,7 @@ function uiKnowledgeRoutes(r, ctx, deps = {}) {
|
|
|
5352
5414
|
if (source !== void 0)
|
|
5353
5415
|
idOf3(source, "source");
|
|
5354
5416
|
const ids = await snapshotSources(root);
|
|
5355
|
-
const { inputsPassagePages, pastableArg } = await import("./chunk-
|
|
5417
|
+
const { inputsPassagePages, pastableArg } = await import("./chunk-Z56NN3AX.js");
|
|
5356
5418
|
const live = !ids.includes(INPUTS_SOURCE_ID) && (!source || source === INPUTS_SOURCE_ID) ? await inputsPassagePages(root) : [];
|
|
5357
5419
|
if (source && !ids.includes(source) && !(source === INPUTS_SOURCE_ID && live.length))
|
|
5358
5420
|
throw notFound(`${source} has no snapshot yet: atticus sources sync --source ${source}.`);
|
|
@@ -5423,7 +5485,7 @@ function uiKnowledgeRoutes(r, ctx, deps = {}) {
|
|
|
5423
5485
|
const change = idOf3(params.changeId, "change");
|
|
5424
5486
|
if (!await exists(changeFolder(root, change)))
|
|
5425
5487
|
throw notFound(`There is no change ${change}.`);
|
|
5426
|
-
const fileExists = await exists(
|
|
5488
|
+
const fileExists = await exists(join9(changeFolder(root, change), NEEDS_FILE));
|
|
5427
5489
|
const f = await readNeeds(root, change);
|
|
5428
5490
|
if (fileExists && !f)
|
|
5429
5491
|
throw new HttpError(422, "Atticus can't read that file", `${changesRelOf(root)}/${change}/${NEEDS_FILE} isn't a valid needs file.`);
|
|
@@ -5540,13 +5602,13 @@ git commit -m "${change}: the knowledge that applies"`
|
|
|
5540
5602
|
|
|
5541
5603
|
// packages/cli/dist/ui-api-runs.js
|
|
5542
5604
|
import { readFile as readFile6 } from "node:fs/promises";
|
|
5543
|
-
import { join as
|
|
5605
|
+
import { join as join10 } from "node:path";
|
|
5544
5606
|
var import_yaml6 = __toESM(require_dist(), 1);
|
|
5545
5607
|
async function serverModel(root) {
|
|
5546
5608
|
return (await configuredModel(root))?.type ?? null;
|
|
5547
5609
|
}
|
|
5548
5610
|
async function configuredModel(root) {
|
|
5549
|
-
const text = await readFile6(
|
|
5611
|
+
const text = await readFile6(join10(orgPackDirOf(root), "runtime.yaml"), "utf8").catch(() => void 0);
|
|
5550
5612
|
if (!text)
|
|
5551
5613
|
return null;
|
|
5552
5614
|
let y;
|
|
@@ -5567,7 +5629,7 @@ async function configuredModel(root) {
|
|
|
5567
5629
|
function uiModelRunRoutes(r, ctx, deps = {}) {
|
|
5568
5630
|
const root = ctx.root;
|
|
5569
5631
|
const runStep = deps.runStep ?? (async (args) => {
|
|
5570
|
-
const { main } = await import("./chunk-
|
|
5632
|
+
const { main } = await import("./chunk-VTE3MIWY.js");
|
|
5571
5633
|
const out = [];
|
|
5572
5634
|
const err = [];
|
|
5573
5635
|
const code = await main([...args, "--root", root], { out: (l) => out.push(l), err: (l) => err.push(l) }, { quiet: true });
|
|
@@ -5575,7 +5637,7 @@ function uiModelRunRoutes(r, ctx, deps = {}) {
|
|
|
5575
5637
|
});
|
|
5576
5638
|
return r.add("POST", "/api/runs/handoff", async ({ body }) => {
|
|
5577
5639
|
const words = stepWords(body);
|
|
5578
|
-
const { prepareStep } = await import("./chunk-
|
|
5640
|
+
const { prepareStep } = await import("./chunk-ZLQQJBPF.js");
|
|
5579
5641
|
const { code, prepared } = await prepareStep(root, runStep, words);
|
|
5580
5642
|
ctx.events.publish({ type: "file.changed", path: runsRelOf(root) });
|
|
5581
5643
|
if (!prepared.runId && code !== 0) {
|
|
@@ -5593,7 +5655,7 @@ function uiModelRunRoutes(r, ctx, deps = {}) {
|
|
|
5593
5655
|
const busy = ctx.jobs.runningOf("step");
|
|
5594
5656
|
if (busy)
|
|
5595
5657
|
throw conflict(`An AI step is running on this server (${busy.id}): wait for it to finish, or cancel it.`);
|
|
5596
|
-
const { commandTitleInputsOf } = await import("./chunk-
|
|
5658
|
+
const { commandTitleInputsOf } = await import("./chunk-VTE3MIWY.js");
|
|
5597
5659
|
const log = { command: commandTitleInputsOf([...words, "--mode", "model"]) };
|
|
5598
5660
|
const job = ctx.jobs.start("step", async (c) => {
|
|
5599
5661
|
c.progress(0, 1, `Running atticus ${words.join(" ")} with ${model}`);
|
|
@@ -5775,7 +5837,8 @@ var CopilotRun = class {
|
|
|
5775
5837
|
return out;
|
|
5776
5838
|
}
|
|
5777
5839
|
/** How it ended: done, stopped by a person, or failed with the error said. */
|
|
5778
|
-
|
|
5840
|
+
/** `said` replaces the run's last line (beta.28: a Stop whose work is still ending says so). */
|
|
5841
|
+
finish(state, at, message, said) {
|
|
5779
5842
|
const v = this.view;
|
|
5780
5843
|
v.state = state;
|
|
5781
5844
|
v.finishedAt = at;
|
|
@@ -5789,7 +5852,7 @@ var CopilotRun = class {
|
|
|
5789
5852
|
}
|
|
5790
5853
|
this.current = "run";
|
|
5791
5854
|
return this.push("run", [
|
|
5792
|
-
state === "done" ? "The run finished." : state === "stopped" ? "Stopped. The next run carries on from here." : `The run stopped: ${message ?? "an error"}`
|
|
5855
|
+
said ?? (state === "done" ? "The run finished." : state === "stopped" ? "Stopped. The next run carries on from here." : `The run stopped: ${message ?? "an error"}`)
|
|
5793
5856
|
]);
|
|
5794
5857
|
}
|
|
5795
5858
|
/** The state without the lines, for the live event. */
|
|
@@ -5801,15 +5864,35 @@ var CopilotRun = class {
|
|
|
5801
5864
|
|
|
5802
5865
|
// packages/cli/dist/ui-api-copilot-runs.js
|
|
5803
5866
|
var defaultStarter = (root) => async (o, io, deps) => {
|
|
5804
|
-
const { mapAllCommand } = await import("./chunk-
|
|
5867
|
+
const { mapAllCommand } = await import("./chunk-G4USCLYQ.js");
|
|
5805
5868
|
return mapAllCommand(root, o, io, {
|
|
5806
5869
|
...deps,
|
|
5807
|
-
makeAcp: async () => (await import("./chunk-
|
|
5870
|
+
makeAcp: async () => (await import("./chunk-X4HPOZCJ.js")).acpStepRunner(root)
|
|
5808
5871
|
});
|
|
5809
5872
|
};
|
|
5873
|
+
var STOP_GRACE_MS = 15e3;
|
|
5874
|
+
var cutOff = (phase) => `The run didn't end within a few seconds of Stop, so it is shown stopped here; it was last ${phase}. Its work is still ending: a new run can start once it has.`;
|
|
5875
|
+
var WORK_ENDED = "The stopped run's work has ended: a new run can start.";
|
|
5876
|
+
function phaseOf(e) {
|
|
5877
|
+
switch (e?.type) {
|
|
5878
|
+
case void 0:
|
|
5879
|
+
case "plan":
|
|
5880
|
+
return "planning the run";
|
|
5881
|
+
case "repo":
|
|
5882
|
+
return `starting ${e.repo}`;
|
|
5883
|
+
case "session":
|
|
5884
|
+
return `in a Copilot session (${e.repo}, ${e.label})`;
|
|
5885
|
+
case "session.end":
|
|
5886
|
+
return `verifying and saving what a session of ${e.repo} wrote`;
|
|
5887
|
+
case "verify":
|
|
5888
|
+
return `saving where the run stands after verifying ${e.repo}`;
|
|
5889
|
+
case "repo.stopped":
|
|
5890
|
+
return `stopping its read of ${e.repo}`;
|
|
5891
|
+
}
|
|
5892
|
+
}
|
|
5810
5893
|
var TAIL = 200;
|
|
5811
5894
|
var NOT_ALLOWED = "runtime.yaml doesn't allow copilot-acp here (schemaVersion 3, copilot-acp in modes.allowed and copilot in assistants.allowed), so the app can't start Copilot itself. Read through Copilot Chat instead: atticus map --all in a terminal gives each part to paste.";
|
|
5812
|
-
var defaultCheck = async (root) => (await import("./chunk-
|
|
5895
|
+
var defaultCheck = async (root) => (await import("./chunk-ABY7IKHT.js")).generateAssistantFiles(root, {
|
|
5813
5896
|
check: true,
|
|
5814
5897
|
assistants: ["copilot"]
|
|
5815
5898
|
});
|
|
@@ -5820,7 +5903,7 @@ async function allowedHere(root, check) {
|
|
|
5820
5903
|
const allowed = copilotAcpAllowed(op);
|
|
5821
5904
|
if (!allowed)
|
|
5822
5905
|
return { allowed, ...c.model ? { model: c.model } : {} };
|
|
5823
|
-
const { assistantFilesState, limitFor, limitToOffer } = await import("./chunk-
|
|
5906
|
+
const { assistantFilesState, limitFor, limitToOffer } = await import("./chunk-G4USCLYQ.js");
|
|
5824
5907
|
const known = await limitFor(root, op, void 0).catch(() => void 0);
|
|
5825
5908
|
const offer = known ? void 0 : await limitToOffer(root);
|
|
5826
5909
|
const limit = known ? {
|
|
@@ -5857,9 +5940,13 @@ function uiCopilotRunRoutes(r, ctx, deps = {}) {
|
|
|
5857
5940
|
const check = deps.assistantFiles ?? defaultCheck;
|
|
5858
5941
|
const now = deps.now ?? (() => /* @__PURE__ */ new Date());
|
|
5859
5942
|
const flushMs = deps.flushMs ?? 100;
|
|
5943
|
+
const stopGraceMs = deps.stopGraceMs ?? STOP_GRACE_MS;
|
|
5860
5944
|
let run5;
|
|
5861
5945
|
let allowed;
|
|
5862
5946
|
let seq = 0;
|
|
5947
|
+
const stopTimers = /* @__PURE__ */ new Map();
|
|
5948
|
+
const lastEvent = /* @__PURE__ */ new Map();
|
|
5949
|
+
let ending;
|
|
5863
5950
|
let starting = false;
|
|
5864
5951
|
const pending = /* @__PURE__ */ new Map();
|
|
5865
5952
|
let timer;
|
|
@@ -5917,6 +6004,8 @@ function uiCopilotRunRoutes(r, ctx, deps = {}) {
|
|
|
5917
6004
|
throw badRequest("Name the repos to read (repos), or pick stale, gaps or all.");
|
|
5918
6005
|
if (run5?.view.state === "running")
|
|
5919
6006
|
throw conflict(`A Copilot run is under way (${run5.view.runId}, started ${run5.view.startedAt}): stop it, or wait for it to finish.`);
|
|
6007
|
+
if (ending)
|
|
6008
|
+
throw conflict(`The stopped run ${ending.view.runId} is still ending its work (it was last ${phaseOf(lastEvent.get(ending))}): a new run can start once it has.`);
|
|
5920
6009
|
if (starting)
|
|
5921
6010
|
throw conflict("A Copilot run is starting: wait for it, then stop it if need be.");
|
|
5922
6011
|
const busy = ctx.jobs.runningOf("step");
|
|
@@ -5936,13 +6025,13 @@ function uiCopilotRunRoutes(r, ctx, deps = {}) {
|
|
|
5936
6025
|
throw new HttpError(400, "The model's limit is needed", "Atticus doesn't know your model's limit, and a part planned too big overflows the reader: give it in the dialog (Your model's limit, in tokens), the context window of the model Copilot uses. It is kept on this machine for the next run.", { code: "limit-unknown" });
|
|
5937
6026
|
}
|
|
5938
6027
|
if (a.assistantFiles?.edited.length) {
|
|
5939
|
-
const { assistantFilesEditedWords } = await import("./chunk-
|
|
6028
|
+
const { assistantFilesEditedWords } = await import("./chunk-G4USCLYQ.js");
|
|
5940
6029
|
throw new HttpError(409, "Assistant files edited by hand", assistantFilesEditedWords(a.assistantFiles.edited), { code: "assistant-files-edited", files: a.assistantFiles.edited });
|
|
5941
6030
|
}
|
|
5942
6031
|
if (ctx.jobs.runningOf("step")?.state === "running")
|
|
5943
6032
|
throw conflict("An AI step started on this server meanwhile: wait for it to finish.");
|
|
5944
6033
|
if (b.data.maxTokens !== void 0) {
|
|
5945
|
-
const { saveLastLimit } = await import("./chunk-
|
|
6034
|
+
const { saveLastLimit } = await import("./chunk-G4USCLYQ.js");
|
|
5946
6035
|
await saveLastLimit(ctx.root, b.data.maxTokens, now().getTime());
|
|
5947
6036
|
allowed = void 0;
|
|
5948
6037
|
}
|
|
@@ -5960,36 +6049,62 @@ function uiCopilotRunRoutes(r, ctx, deps = {}) {
|
|
|
5960
6049
|
run5 = me;
|
|
5961
6050
|
let lastErr;
|
|
5962
6051
|
const job = ctx.jobs.start("step", async (c) => {
|
|
6052
|
+
const live = () => me.view.state === "running";
|
|
5963
6053
|
const io = {
|
|
5964
|
-
out: (l) =>
|
|
6054
|
+
out: (l) => {
|
|
6055
|
+
if (live())
|
|
6056
|
+
queue(me.line(l));
|
|
6057
|
+
},
|
|
5965
6058
|
err: (l) => {
|
|
6059
|
+
if (!live())
|
|
6060
|
+
return;
|
|
5966
6061
|
lastErr = l;
|
|
5967
6062
|
queue(me.line(l));
|
|
5968
6063
|
}
|
|
5969
6064
|
};
|
|
5970
6065
|
const onEvent = (e) => {
|
|
6066
|
+
if (!live())
|
|
6067
|
+
return;
|
|
6068
|
+
lastEvent.set(me, e);
|
|
5971
6069
|
for (const n of me.event(e))
|
|
5972
6070
|
queue(n);
|
|
5973
6071
|
const p = me.view.progress;
|
|
5974
6072
|
c.progress(p.repoIndex, p.repos, p.session ?? p.repo ?? "Planning");
|
|
5975
6073
|
state();
|
|
5976
6074
|
};
|
|
5977
|
-
const signal =
|
|
6075
|
+
const signal = c.signal;
|
|
6076
|
+
const ended = () => {
|
|
6077
|
+
if (ending === me)
|
|
6078
|
+
ending = void 0;
|
|
6079
|
+
lastEvent.delete(me);
|
|
6080
|
+
queue(me.line(WORK_ENDED));
|
|
6081
|
+
flush();
|
|
6082
|
+
if (run5 === me)
|
|
6083
|
+
state();
|
|
6084
|
+
ctx.events.publish({ type: "file.changed", path: "facts" });
|
|
6085
|
+
};
|
|
5978
6086
|
let code;
|
|
5979
6087
|
try {
|
|
5980
|
-
code = await start(optionsOf(b.data), io, {
|
|
5981
|
-
...signal ? { signal } : {},
|
|
5982
|
-
onEvent
|
|
5983
|
-
});
|
|
6088
|
+
code = await start(optionsOf(b.data), io, { signal, onEvent });
|
|
5984
6089
|
} catch (e) {
|
|
5985
6090
|
const msg = e instanceof Error ? e.message : String(e);
|
|
5986
|
-
|
|
6091
|
+
if (!live()) {
|
|
6092
|
+
ended();
|
|
6093
|
+
return { errors: [msg] };
|
|
6094
|
+
}
|
|
6095
|
+
lastEvent.delete(me);
|
|
6096
|
+
queue(me.finish(signal.aborted ? "stopped" : "failed", now().toISOString(), msg));
|
|
5987
6097
|
flush();
|
|
5988
6098
|
state();
|
|
5989
6099
|
ctx.events.publish({ type: "file.changed", path: "facts" });
|
|
5990
6100
|
return { errors: [msg] };
|
|
5991
6101
|
}
|
|
5992
|
-
|
|
6102
|
+
if (!live()) {
|
|
6103
|
+
ended();
|
|
6104
|
+
return { result: { code, runId } };
|
|
6105
|
+
}
|
|
6106
|
+
lastEvent.delete(me);
|
|
6107
|
+
const stopped = signal.aborted;
|
|
5993
6108
|
queue(me.finish(stopped ? "stopped" : code === 0 ? "done" : "failed", now().toISOString(), stopped || code === 0 ? void 0 : lastErr ?? `atticus map --all ended with ${code}`));
|
|
5994
6109
|
flush();
|
|
5995
6110
|
state();
|
|
@@ -6015,9 +6130,25 @@ function uiCopilotRunRoutes(r, ctx, deps = {}) {
|
|
|
6015
6130
|
throw notFound(`There is no run ${params.runId}.`);
|
|
6016
6131
|
if (run5.view.state !== "running")
|
|
6017
6132
|
throw conflict(`${params.runId} has already ${run5.view.state === "done" ? "finished" : run5.view.state}.`);
|
|
6018
|
-
|
|
6019
|
-
|
|
6020
|
-
|
|
6133
|
+
const r0 = run5;
|
|
6134
|
+
ctx.jobs.cancel(r0.view.jobId);
|
|
6135
|
+
queue(r0.line("Stopping: the session under way is cancelled..."));
|
|
6136
|
+
if (!stopTimers.has(r0)) {
|
|
6137
|
+
const t = setTimeout(() => {
|
|
6138
|
+
stopTimers.delete(r0);
|
|
6139
|
+
if (r0.view.state !== "running")
|
|
6140
|
+
return;
|
|
6141
|
+
ending = r0;
|
|
6142
|
+
queue(r0.finish("stopped", now().toISOString(), void 0, cutOff(phaseOf(lastEvent.get(r0)))));
|
|
6143
|
+
flush();
|
|
6144
|
+
if (run5 === r0)
|
|
6145
|
+
state();
|
|
6146
|
+
ctx.events.publish({ type: "file.changed", path: "facts" });
|
|
6147
|
+
}, stopGraceMs);
|
|
6148
|
+
t.unref?.();
|
|
6149
|
+
stopTimers.set(r0, t);
|
|
6150
|
+
}
|
|
6151
|
+
return { status: 200, body: structuredClone(r0.view) };
|
|
6021
6152
|
});
|
|
6022
6153
|
}
|
|
6023
6154
|
|
|
@@ -6170,7 +6301,7 @@ function uiDecisionRoutes(r, ctx, deps = {}) {
|
|
|
6170
6301
|
ctx.events.publish({ type: "file.changed", path });
|
|
6171
6302
|
return { status: 200, body: out };
|
|
6172
6303
|
}).add("GET", "/api/propose-answers", async () => {
|
|
6173
|
-
const { openDecideRun, PROPOSE_CHANGE } = await import("./chunk-
|
|
6304
|
+
const { openDecideRun, PROPOSE_CHANGE } = await import("./chunk-LD35W2PC.js");
|
|
6174
6305
|
const run5 = await openDecideRun(ctx.root, PROPOSE_CHANGE);
|
|
6175
6306
|
const body = run5 ? {
|
|
6176
6307
|
state: "waiting",
|
|
@@ -6184,7 +6315,7 @@ function uiDecisionRoutes(r, ctx, deps = {}) {
|
|
|
6184
6315
|
const op = await loadOrgPack(orgPackDirOf(ctx.root));
|
|
6185
6316
|
if (op.runtime.ai === "off")
|
|
6186
6317
|
throw conflict("runtime.yaml turns AI off here (ai: off): answer the questions yourself.");
|
|
6187
|
-
const { startProposeHandoff } = await import("./chunk-
|
|
6318
|
+
const { startProposeHandoff } = await import("./chunk-X4HPOZCJ.js");
|
|
6188
6319
|
const h = await startProposeHandoff(ctx.root, { now: now() });
|
|
6189
6320
|
const body = {
|
|
6190
6321
|
state: "waiting",
|
|
@@ -6213,7 +6344,7 @@ function uiDecisionRoutes(r, ctx, deps = {}) {
|
|
|
6213
6344
|
// packages/cli/dist/ui-api-sketch.js
|
|
6214
6345
|
import { createHash as createHash5 } from "node:crypto";
|
|
6215
6346
|
import { readFile as readFile7 } from "node:fs/promises";
|
|
6216
|
-
import { join as
|
|
6347
|
+
import { join as join11 } from "node:path";
|
|
6217
6348
|
var CHANGE = /^[a-z0-9][a-z0-9._-]{0,199}$/;
|
|
6218
6349
|
var drawnOf = (deltas) => drawnStrokes(deltas);
|
|
6219
6350
|
function uiSketchRoutes(r, ctx) {
|
|
@@ -6230,7 +6361,7 @@ git commit -m "${safeMessage(`${change}: drawn on the canvas`)}"`;
|
|
|
6230
6361
|
const m = await changeMapOf(root, change);
|
|
6231
6362
|
if (!m)
|
|
6232
6363
|
throw notFound(`There is no change ${change}.`);
|
|
6233
|
-
const dir =
|
|
6364
|
+
const dir = join11(changesDirOf(root), change);
|
|
6234
6365
|
const { deltas } = await readDeltas(dir);
|
|
6235
6366
|
return {
|
|
6236
6367
|
status: 200,
|
|
@@ -6262,7 +6393,7 @@ git commit -m "${safeMessage(`${change}: drawn on the canvas`)}"`;
|
|
|
6262
6393
|
throw notFound(`There is no change ${change}.`);
|
|
6263
6394
|
const estate = await loadEstate(root, t.records);
|
|
6264
6395
|
const by = ctx.user ?? "a person";
|
|
6265
|
-
return withFileLock(
|
|
6396
|
+
return withFileLock(join11(dir, TARGET_DIR), async () => {
|
|
6266
6397
|
const fingerprint = await sketchFingerprint(dir);
|
|
6267
6398
|
const { deltas, problems } = await readDeltas(dir);
|
|
6268
6399
|
const answer = (extra) => ({
|
|
@@ -6290,7 +6421,7 @@ git commit -m "${safeMessage(`${change}: drawn on the canvas`)}"`;
|
|
|
6290
6421
|
const plan = await planSketchWrite(dir, res.deltas, res.changed, estate, by);
|
|
6291
6422
|
const files = (await Promise.all(plan.map(async (f) => ({
|
|
6292
6423
|
file: `${changesRelOf(root)}/${change}/${f.file}`,
|
|
6293
|
-
changes: changedLines(lfOnly(await readFile7(
|
|
6424
|
+
changes: changedLines(lfOnly(await readFile7(join11(dir, ...f.file.split("/")), "utf8").catch(() => "")), lfOnly(f.now ?? ""))
|
|
6294
6425
|
})))).filter((f) => f.changes.length);
|
|
6295
6426
|
if (b.data.preview)
|
|
6296
6427
|
return { status: 200, body: answer({ files, drawn: drawnOf(res.deltas) }) };
|
|
@@ -6416,7 +6547,7 @@ git commit -m "${safeMessage(`${repo}: ${[owner ? `owner ${owner}` : "", system
|
|
|
6416
6547
|
|
|
6417
6548
|
// packages/cli/dist/ui-api-declared.js
|
|
6418
6549
|
import { readFile as readFile8 } from "node:fs/promises";
|
|
6419
|
-
import { join as
|
|
6550
|
+
import { join as join12 } from "node:path";
|
|
6420
6551
|
var REPO3 = /^[A-Za-z0-9._-]{1,200}$/;
|
|
6421
6552
|
var says = (c) => {
|
|
6422
6553
|
const what = `${c.target.kind} ${c.target.value} (${c.target.file}:${c.target.line})`;
|
|
@@ -6569,7 +6700,7 @@ git commit -m "${safeMessage(`profile: ${b.data.system}: a declaration undone`)}
|
|
|
6569
6700
|
if (!REPO3.test(repo))
|
|
6570
6701
|
throw badRequest(`${JSON.stringify(repo)} isn't a repo name.`);
|
|
6571
6702
|
const rel = `${factsRelOf(ctx.root)}/${repo}.corrections.jsonl`;
|
|
6572
|
-
const text = await readFile8(
|
|
6703
|
+
const text = await readFile8(join12(factsDirOf(ctx.root), `${repo}.corrections.jsonl`), "utf8").catch(() => "");
|
|
6573
6704
|
for (const line of text.split(/\r?\n/).filter((l) => l.trim())) {
|
|
6574
6705
|
const c = parseCorrections(line).corrections[0];
|
|
6575
6706
|
if (!c)
|
|
@@ -6636,7 +6767,7 @@ var import_yaml7 = __toESM(require_dist(), 1);
|
|
|
6636
6767
|
import { execFileSync } from "node:child_process";
|
|
6637
6768
|
import { existsSync as existsSync3 } from "node:fs";
|
|
6638
6769
|
import { readFile as readFile9 } from "node:fs/promises";
|
|
6639
|
-
import { basename, dirname as dirname4, join as
|
|
6770
|
+
import { basename, dirname as dirname4, join as join13, relative, sep as sep2 } from "node:path";
|
|
6640
6771
|
var unprocessable = (detail) => new HttpError(422, "The settings aren't valid", detail);
|
|
6641
6772
|
var ENV_NAME = /^[A-Za-z_][A-Za-z0-9_]{0,127}$/;
|
|
6642
6773
|
function canonical(v) {
|
|
@@ -6665,7 +6796,7 @@ function uiAiRoutes(r, ctx, deps = {}) {
|
|
|
6665
6796
|
const root = ctx.root;
|
|
6666
6797
|
const env = deps.env ?? process.env;
|
|
6667
6798
|
const keys = () => deps.keys ?? defaultKeyStore();
|
|
6668
|
-
const file = () =>
|
|
6799
|
+
const file = () => join13(orgPackDirOf(root), "runtime.yaml");
|
|
6669
6800
|
const rel = () => relative(root, file()).split(sep2).join("/");
|
|
6670
6801
|
const build = async (op, type, settings) => {
|
|
6671
6802
|
if (deps.provider)
|
|
@@ -6841,7 +6972,7 @@ function uiDocumentRoutes(r, ctx) {
|
|
|
6841
6972
|
const root = ctx.root;
|
|
6842
6973
|
const changed = (path) => ctx.events.publish({ type: "file.changed", path });
|
|
6843
6974
|
return r.add("GET", "/api/knowledge/documents", async () => {
|
|
6844
|
-
const { listDocuments } = await import("./chunk-
|
|
6975
|
+
const { listDocuments } = await import("./chunk-O77FAGKZ.js");
|
|
6845
6976
|
return { status: 200, body: api_exports.DocumentList.parse(await listDocuments(root)) };
|
|
6846
6977
|
}).add("POST", "/api/knowledge/documents", async ({ body }) => {
|
|
6847
6978
|
const b = api_exports.AttachFileRequest.safeParse(body ?? {});
|
|
@@ -6850,7 +6981,7 @@ function uiDocumentRoutes(r, ctx) {
|
|
|
6850
6981
|
const bytes = new Uint8Array(Buffer.from(b.data.content, "base64"));
|
|
6851
6982
|
if (bytes.length > MAX_FILE)
|
|
6852
6983
|
throw new HttpError(413, "The file is too large", "Add a file of 15 MB or less.");
|
|
6853
|
-
const { addToInbox } = await import("./chunk-
|
|
6984
|
+
const { addToInbox } = await import("./chunk-65VII57C.js");
|
|
6854
6985
|
const res = await addToInbox(root, [{ name: b.data.name, bytes }]);
|
|
6855
6986
|
if (!res.added.length)
|
|
6856
6987
|
throw new HttpError(422, "Atticus can't add that", res.refused[0]?.why ?? "", {
|
|
@@ -6860,7 +6991,7 @@ function uiDocumentRoutes(r, ctx) {
|
|
|
6860
6991
|
changed(a.path);
|
|
6861
6992
|
return { status: 201, body: api_exports.AddDocumentResult.parse(res) };
|
|
6862
6993
|
}, { maxBody: Math.ceil(MAX_FILE * 4 / 3) + 64 * 1024 }).add("POST", "/api/changes/{changeId}/inputs/{name}/promote", async ({ params }) => {
|
|
6863
|
-
const { AttachError, promoteChangeInput } = await import("./chunk-
|
|
6994
|
+
const { AttachError, promoteChangeInput } = await import("./chunk-OHAMT5OA.js");
|
|
6864
6995
|
try {
|
|
6865
6996
|
const res = await promoteChangeInput(root, params.changeId, params.name);
|
|
6866
6997
|
changed(res.path);
|
|
@@ -6877,13 +7008,13 @@ function uiDocumentRoutes(r, ctx) {
|
|
|
6877
7008
|
function uiRepoRoutes(r, ctx) {
|
|
6878
7009
|
const root = ctx.root;
|
|
6879
7010
|
return r.add("GET", "/api/repos/branches", async () => {
|
|
6880
|
-
const { repoBranches } = await import("./chunk-
|
|
7011
|
+
const { repoBranches } = await import("./chunk-NTWOEULN.js");
|
|
6881
7012
|
return { status: 200, body: api_exports.RepoBranchesList.parse(await repoBranches(root)) };
|
|
6882
7013
|
}).add("GET", "/api/repos/compare", async ({ query }) => {
|
|
6883
7014
|
const branch = query.get("branch")?.trim() ?? "";
|
|
6884
7015
|
if (!branch)
|
|
6885
7016
|
throw badRequest("Say which branch: ?branch=<name>.");
|
|
6886
|
-
const { compareBranch } = await import("./chunk-
|
|
7017
|
+
const { compareBranch } = await import("./chunk-NTWOEULN.js");
|
|
6887
7018
|
const c = await compareBranch(root, branch);
|
|
6888
7019
|
if (!c)
|
|
6889
7020
|
throw notFound(`${branch} hasn't been scanned beside the baseline yet.`);
|
|
@@ -6892,7 +7023,7 @@ function uiRepoRoutes(r, ctx) {
|
|
|
6892
7023
|
const b = api_exports.EditRepoBranchesRequest.safeParse(body ?? {});
|
|
6893
7024
|
if (!b.success)
|
|
6894
7025
|
throw badRequest("Send defaultBranch and branches as branch names.");
|
|
6895
|
-
const { editRepoBranches, RepoEditError } = await import("./chunk-
|
|
7026
|
+
const { editRepoBranches, RepoEditError } = await import("./chunk-NTWOEULN.js");
|
|
6896
7027
|
try {
|
|
6897
7028
|
const file = await editRepoBranches(root, params.repoId, b.data);
|
|
6898
7029
|
ctx.events.publish({ type: "file.changed", path: file });
|
|
@@ -6912,7 +7043,7 @@ function uiRepoRoutes(r, ctx) {
|
|
|
6912
7043
|
const b = api_exports.EditRepoBuildRequest.safeParse(body ?? {});
|
|
6913
7044
|
if (!b.success)
|
|
6914
7045
|
throw badRequest('Send the build command as build ("" clears it), up to 500 characters.');
|
|
6915
|
-
const { editRepoBuild, RepoEditError } = await import("./chunk-
|
|
7046
|
+
const { editRepoBuild, RepoEditError } = await import("./chunk-NTWOEULN.js");
|
|
6916
7047
|
try {
|
|
6917
7048
|
const r2 = await editRepoBuild(root, params.repoId, b.data);
|
|
6918
7049
|
ctx.events.publish({ type: "file.changed", path: r2.file });
|
|
@@ -6933,7 +7064,7 @@ function uiRepoRoutes(r, ctx) {
|
|
|
6933
7064
|
const b = api_exports.SetOrgPackOwnerRequest.safeParse(body ?? {});
|
|
6934
7065
|
if (!b.success)
|
|
6935
7066
|
throw badRequest("Send the owner as one handle: { owner }.");
|
|
6936
|
-
const { setOrgPackOwner, OwnerEditError } = await import("./chunk-
|
|
7067
|
+
const { setOrgPackOwner, OwnerEditError } = await import("./chunk-RV32IY7X.js");
|
|
6937
7068
|
try {
|
|
6938
7069
|
const r2 = await setOrgPackOwner(root, b.data.owner, b.data.was);
|
|
6939
7070
|
ctx.events.publish({ type: "file.changed", path: r2.file });
|
|
@@ -6954,7 +7085,7 @@ function uiRepoRoutes(r, ctx) {
|
|
|
6954
7085
|
const b = api_exports.EditRepoDescriptionRequest.safeParse(body ?? {});
|
|
6955
7086
|
if (!b.success)
|
|
6956
7087
|
throw badRequest("Send what the repo is as text, or accept: true to confirm the draft, or reject: true to drop it.");
|
|
6957
|
-
const { editRepoDescription, RepoEditError } = await import("./chunk-
|
|
7088
|
+
const { editRepoDescription, RepoEditError } = await import("./chunk-NTWOEULN.js");
|
|
6958
7089
|
try {
|
|
6959
7090
|
const r2 = await editRepoDescription(root, params.repoId, b.data);
|
|
6960
7091
|
ctx.events.publish({ type: "file.changed", path: r2.file });
|
|
@@ -6983,7 +7114,7 @@ function changeIdOf(v) {
|
|
|
6983
7114
|
function uiCockpitRoutes(r, ctx) {
|
|
6984
7115
|
return r.add("GET", "/api/changes/{changeId}/cockpit", async ({ params }) => {
|
|
6985
7116
|
const id = changeIdOf(params.changeId);
|
|
6986
|
-
const { cockpit } = await import("./chunk-
|
|
7117
|
+
const { cockpit } = await import("./chunk-3MKQXZWB.js");
|
|
6987
7118
|
try {
|
|
6988
7119
|
return await keptAnswer(ctx.root, `cockpit:${id}:${ctx.user}`, async () => ({
|
|
6989
7120
|
status: 200,
|
|
@@ -6991,13 +7122,13 @@ function uiCockpitRoutes(r, ctx) {
|
|
|
6991
7122
|
}), () => checkoutsStamp(ctx.root));
|
|
6992
7123
|
} catch (e) {
|
|
6993
7124
|
if (e instanceof Error && e.name === "ChangeFileError") {
|
|
6994
|
-
const { missingChangeWords: missingChangeWords2 } = await import("./chunk-
|
|
7125
|
+
const { missingChangeWords: missingChangeWords2 } = await import("./chunk-M4XMRGH3.js");
|
|
6995
7126
|
throw notFound(await missingChangeWords2(ctx.root, id));
|
|
6996
7127
|
}
|
|
6997
7128
|
throw e;
|
|
6998
7129
|
}
|
|
6999
7130
|
}).add("GET", "/api/past-changes", async ({ query }) => {
|
|
7000
|
-
const { changeAboutText, similarChanges } = await import("./chunk-
|
|
7131
|
+
const { changeAboutText, similarChanges } = await import("./chunk-TUYZSEKB.js");
|
|
7001
7132
|
const given = query.get("change");
|
|
7002
7133
|
const change = given ? changeIdOf(given) : void 0;
|
|
7003
7134
|
const text = change ? await changeAboutText(ctx.root, change) : query.get("text")?.trim();
|
|
@@ -7016,11 +7147,11 @@ function uiCockpitRoutes(r, ctx) {
|
|
|
7016
7147
|
const b = api_exports.AttachPastChangeRequest.safeParse(body ?? {});
|
|
7017
7148
|
if (!b.success)
|
|
7018
7149
|
throw badRequest("Say which archived change: { like: <its folder or id> }.");
|
|
7019
|
-
const { attachPastChange, findPastChange } = await import("./chunk-
|
|
7150
|
+
const { attachPastChange, findPastChange } = await import("./chunk-TUYZSEKB.js");
|
|
7020
7151
|
const folder = await findPastChange(ctx.root, b.data.like);
|
|
7021
7152
|
if (!folder)
|
|
7022
7153
|
throw notFound(`There is no archived change ${b.data.like}.`);
|
|
7023
|
-
const { AttachError } = await import("./chunk-
|
|
7154
|
+
const { AttachError } = await import("./chunk-OHAMT5OA.js");
|
|
7024
7155
|
try {
|
|
7025
7156
|
const name = await attachPastChange(ctx.root, params.changeId, folder, ctx.user);
|
|
7026
7157
|
ctx.events.publish({ type: "file.changed", path: `inputs/${name}` });
|
|
@@ -7142,7 +7273,7 @@ git commit -m "${repo}: a person's sample audit answers"`
|
|
|
7142
7273
|
|
|
7143
7274
|
// packages/cli/dist/ui-api-outside.js
|
|
7144
7275
|
import { readFile as readFile10 } from "node:fs/promises";
|
|
7145
|
-
import { join as
|
|
7276
|
+
import { join as join14 } from "node:path";
|
|
7146
7277
|
var SPECS = /* @__PURE__ */ new Set(["openapi", "swagger"]);
|
|
7147
7278
|
var cmp = (a, b) => a < b ? -1 : a > b ? 1 : 0;
|
|
7148
7279
|
var OUTSIDE_ADD_SPEC = (id) => [
|
|
@@ -7173,7 +7304,7 @@ async function outsideView(root) {
|
|
|
7173
7304
|
const system = systems.find((s) => s.id === d.systems[0]);
|
|
7174
7305
|
if (!system || specs.has(system.id))
|
|
7175
7306
|
continue;
|
|
7176
|
-
const body = await readFile10(
|
|
7307
|
+
const body = await readFile10(join14(inputsDirOf(root), ...d.path.split("/").slice(1)), "utf8");
|
|
7177
7308
|
const spec = readVendorSpec(d.path, body, system.id);
|
|
7178
7309
|
if (spec)
|
|
7179
7310
|
specs.set(system.id, spec);
|
|
@@ -7219,7 +7350,7 @@ async function outsideView(root) {
|
|
|
7219
7350
|
const manifests = estateRepos(op);
|
|
7220
7351
|
const clashes = (hosts) => hosts.flatMap((h) => manifests.filter((m) => [...m.hosts ?? [], ...(m.modules ?? []).flatMap((x) => x.hosts ?? [])].some((p) => hostMatches(p, h))).map((m) => ({ host: h, repo: m.id })));
|
|
7221
7352
|
const contracts = await contractCheckOf(root).catch(() => void 0);
|
|
7222
|
-
const catalog = records.length ? records : (await readCatalog(
|
|
7353
|
+
const catalog = records.length ? records : (await readCatalog(join14(catalogDirOf(root), "generated"), { cacheRoot: root })).records;
|
|
7223
7354
|
const ifaces = catalog.filter((r) => r.kind === "Interface");
|
|
7224
7355
|
const componentsOf = (id) => /* @__PURE__ */ new Set([
|
|
7225
7356
|
id,
|
|
@@ -7388,11 +7519,11 @@ function uiContractsRoutes(r, ctx, o = {}) {
|
|
|
7388
7519
|
var import_yaml8 = __toESM(require_dist(), 1);
|
|
7389
7520
|
import { createHash as createHash6 } from "node:crypto";
|
|
7390
7521
|
import { readFile as readFile12, stat as stat7 } from "node:fs/promises";
|
|
7391
|
-
import { join as
|
|
7522
|
+
import { join as join16 } from "node:path";
|
|
7392
7523
|
|
|
7393
7524
|
// packages/cli/dist/ui-api-drafts.js
|
|
7394
7525
|
import { readdir as readdir6, readFile as readFile11, stat as stat6 } from "node:fs/promises";
|
|
7395
|
-
import { join as
|
|
7526
|
+
import { join as join15 } from "node:path";
|
|
7396
7527
|
var ID5 = /^[a-z0-9][a-z0-9._-]{0,99}$/;
|
|
7397
7528
|
var CORRECTION_ID = /^c-[0-9a-f]{10}$/;
|
|
7398
7529
|
var exists2 = (p) => stat6(p).then(() => true, () => false);
|
|
@@ -7411,7 +7542,7 @@ var ON_PAGE = {
|
|
|
7411
7542
|
var pageOfFile = (f) => Object.keys(ON_PAGE).find((p) => ON_PAGE[p](f));
|
|
7412
7543
|
async function walk(dir, sub = "") {
|
|
7413
7544
|
const out = [];
|
|
7414
|
-
for (const e of await readdir6(
|
|
7545
|
+
for (const e of await readdir6(join15(dir, sub), { withFileTypes: true }).catch(() => [])) {
|
|
7415
7546
|
if (e.name.startsWith("."))
|
|
7416
7547
|
continue;
|
|
7417
7548
|
const rel = sub ? `${sub}/${e.name}` : e.name;
|
|
@@ -7455,7 +7586,7 @@ async function stageDraftsView(root, change, page) {
|
|
|
7455
7586
|
const p = prov[f];
|
|
7456
7587
|
if (!p)
|
|
7457
7588
|
continue;
|
|
7458
|
-
const text = await readFile11(
|
|
7589
|
+
const text = await readFile11(join15(dir, ...f.split("/")), "utf8").catch(() => "") ?? "";
|
|
7459
7590
|
files.push({
|
|
7460
7591
|
file: f,
|
|
7461
7592
|
path: `${rel}/${f}`,
|
|
@@ -7499,7 +7630,7 @@ function uiDraftRoutes(r, ctx, deps = {}) {
|
|
|
7499
7630
|
const changeOf = async (v) => {
|
|
7500
7631
|
if (!ID5.test(v))
|
|
7501
7632
|
throw badRequest(`${JSON.stringify(v)} isn't a change id.`);
|
|
7502
|
-
if (!await exists2(
|
|
7633
|
+
if (!await exists2(join15(changeFolder(ctx.root, v), "change.yaml")))
|
|
7503
7634
|
throw notFound(`There is no change ${v}.`);
|
|
7504
7635
|
return v;
|
|
7505
7636
|
};
|
|
@@ -7687,7 +7818,7 @@ function draftedOf(text) {
|
|
|
7687
7818
|
async function placementView(root, change) {
|
|
7688
7819
|
const rel = `${changesRelOf(root)}/${change}`;
|
|
7689
7820
|
const dir = changeFolder(root, change);
|
|
7690
|
-
const read = (f) => readFile12(
|
|
7821
|
+
const read = (f) => readFile12(join16(dir, f), "utf8").catch(() => void 0);
|
|
7691
7822
|
const source = await read(FEATURE_FILE);
|
|
7692
7823
|
const content = await read("feature.md") ?? "";
|
|
7693
7824
|
return {
|
|
@@ -7712,7 +7843,7 @@ function uiStageRoutes(r, ctx, deps = {}) {
|
|
|
7712
7843
|
const changeOf = async (v) => {
|
|
7713
7844
|
if (!ID6.test(v))
|
|
7714
7845
|
throw badRequest(`${JSON.stringify(v)} isn't a change id.`);
|
|
7715
|
-
if (!await exists3(
|
|
7846
|
+
if (!await exists3(join16(changeFolder(ctx.root, v), "change.yaml")))
|
|
7716
7847
|
throw notFound(`There is no change ${v}.`);
|
|
7717
7848
|
return v;
|
|
7718
7849
|
};
|
|
@@ -7727,7 +7858,7 @@ function uiStageRoutes(r, ctx, deps = {}) {
|
|
|
7727
7858
|
errors: b.error.issues.map((i) => ({ path: i.path.join("."), message: i.message }))
|
|
7728
7859
|
});
|
|
7729
7860
|
const dir = changeFolder(ctx.root, change);
|
|
7730
|
-
const file =
|
|
7861
|
+
const file = join16(dir, FEATURE_FILE);
|
|
7731
7862
|
const was = await readFile12(file, "utf8").catch(() => void 0);
|
|
7732
7863
|
if (sha4(was ?? "") !== b.data.baseSha256)
|
|
7733
7864
|
throw conflict(`${FEATURE_FILE} changed since you opened it. Reload it, then edit again.`);
|
|
@@ -7750,7 +7881,7 @@ function uiStageRoutes(r, ctx, deps = {}) {
|
|
|
7750
7881
|
${own.join("\n")}`;
|
|
7751
7882
|
await writeFileIfUnchanged(file, was, saved);
|
|
7752
7883
|
const md = renderFeature(p.data);
|
|
7753
|
-
await writeFileAtomic(
|
|
7884
|
+
await writeFileAtomic(join16(dir, "feature.md"), md);
|
|
7754
7885
|
for (const [f, content] of [
|
|
7755
7886
|
[FEATURE_FILE, saved],
|
|
7756
7887
|
["feature.md", md]
|
|
@@ -7824,7 +7955,7 @@ git commit -m "${change}: a comment on ${f.finding.id}"`,
|
|
|
7824
7955
|
// packages/cli/dist/ui-api-thread.js
|
|
7825
7956
|
var import_yaml9 = __toESM(require_dist(), 1);
|
|
7826
7957
|
import { stat as stat8 } from "node:fs/promises";
|
|
7827
|
-
import { join as
|
|
7958
|
+
import { join as join17 } from "node:path";
|
|
7828
7959
|
var ID7 = /^[a-z0-9][a-z0-9._-]{0,99}$/;
|
|
7829
7960
|
var STAGE_AGENT = {
|
|
7830
7961
|
proposal: "change-drafter",
|
|
@@ -7952,7 +8083,7 @@ async function stageThreadView(root, change, stage) {
|
|
|
7952
8083
|
const writes = new Set(Object.keys(loop.written ?? {}));
|
|
7953
8084
|
const source = loop.source;
|
|
7954
8085
|
for (const f of review.findings) {
|
|
7955
|
-
const at = f.finding.createdAt ?? await fileTime(
|
|
8086
|
+
const at = f.finding.createdAt ?? await fileTime(join17(root, ...f.file.split("/"))) ?? loop.updatedAt;
|
|
7956
8087
|
const art = f.finding.artifact;
|
|
7957
8088
|
const assistantWrites = writes.has(art) || !!source && (art === source || art.startsWith(`${source.replace(/\/$/, "")}/`));
|
|
7958
8089
|
const edit = assistantWrites ? void 0 : editOf(art, f.finding.locator.line);
|
|
@@ -8055,7 +8186,7 @@ function uiThreadRoutes(r, ctx, deps = {}) {
|
|
|
8055
8186
|
const changeOf = async (v) => {
|
|
8056
8187
|
if (!ID7.test(v))
|
|
8057
8188
|
throw badRequest(`${JSON.stringify(v)} isn't a change id.`);
|
|
8058
|
-
if (!await stat8(
|
|
8189
|
+
if (!await stat8(join17(changeFolder(ctx.root, v), "change.yaml")).catch(() => void 0))
|
|
8059
8190
|
throw notFound(await missingChangeWords(ctx.root, v));
|
|
8060
8191
|
return v;
|
|
8061
8192
|
};
|
|
@@ -8133,7 +8264,7 @@ function uiThreadRoutes(r, ctx, deps = {}) {
|
|
|
8133
8264
|
var import_yaml10 = __toESM(require_dist(), 1);
|
|
8134
8265
|
import { execFile } from "node:child_process";
|
|
8135
8266
|
import { readFile as readFile13, stat as stat9 } from "node:fs/promises";
|
|
8136
|
-
import { basename as basename2, isAbsolute, join as
|
|
8267
|
+
import { basename as basename2, isAbsolute, join as join18, resolve as resolve2 } from "node:path";
|
|
8137
8268
|
|
|
8138
8269
|
// packages/cli/dist/setup-repos.js
|
|
8139
8270
|
function normaliseCloneUrl(given) {
|
|
@@ -8248,7 +8379,7 @@ function uiSetupRoutes(r, ctx, deps = {}) {
|
|
|
8248
8379
|
};
|
|
8249
8380
|
return r.add("GET", "/api/setup/metarepo", async () => {
|
|
8250
8381
|
const origin = await originOf(root);
|
|
8251
|
-
const { metarepoIdFromUrl } = await import("./chunk-
|
|
8382
|
+
const { metarepoIdFromUrl } = await import("./chunk-PZY4M3AZ.js");
|
|
8252
8383
|
const folder = basename2(root);
|
|
8253
8384
|
const body = {
|
|
8254
8385
|
metarepo: isMetarepo(root),
|
|
@@ -8266,7 +8397,7 @@ function uiSetupRoutes(r, ctx, deps = {}) {
|
|
|
8266
8397
|
const b = parseBody4(api_exports.CreateMetarepoRequest, body);
|
|
8267
8398
|
if (isMetarepo(root))
|
|
8268
8399
|
throw conflict(`${root} is a metarepo already.`);
|
|
8269
|
-
const { initCommand } = await import("./chunk-
|
|
8400
|
+
const { initCommand } = await import("./chunk-DXSZXPFF.js");
|
|
8270
8401
|
const res = await run4((io) => initCommand(root, {
|
|
8271
8402
|
name: b.name,
|
|
8272
8403
|
platform: b.platform,
|
|
@@ -8291,7 +8422,7 @@ function uiSetupRoutes(r, ctx, deps = {}) {
|
|
|
8291
8422
|
if (!await stat9(dir).then((s) => s.isDirectory(), () => false))
|
|
8292
8423
|
throw notFound(`There is no folder ${dir} on this machine.`);
|
|
8293
8424
|
const open = deps.openFolder ?? (async (d) => {
|
|
8294
|
-
const { startUi: startUi2 } = await import("./chunk-
|
|
8425
|
+
const { startUi: startUi2 } = await import("./chunk-G5ZQLW5K.js");
|
|
8295
8426
|
const srv = await startUi2(d, {
|
|
8296
8427
|
port: 0,
|
|
8297
8428
|
user,
|
|
@@ -8324,7 +8455,7 @@ function uiSetupRoutes(r, ctx, deps = {}) {
|
|
|
8324
8455
|
};
|
|
8325
8456
|
return { status: 200, body: ask };
|
|
8326
8457
|
}
|
|
8327
|
-
const { reposDiscover, AdoptError } = await import("./chunk-
|
|
8458
|
+
const { reposDiscover, AdoptError } = await import("./chunk-PZY4M3AZ.js");
|
|
8328
8459
|
const found = await reposDiscover(root, { dir }, { dryRun: true, ...b.platform ? { platform: b.platform } : {} }).catch((e) => {
|
|
8329
8460
|
if (e instanceof AdoptError)
|
|
8330
8461
|
throw unprocessable2(e.message.replace(/ with --platform\b/g, " (choose the platform)"));
|
|
@@ -8341,7 +8472,7 @@ function uiSetupRoutes(r, ctx, deps = {}) {
|
|
|
8341
8472
|
detected: { signals: f.detection.signals, confidence: f.detection.confidence }
|
|
8342
8473
|
}));
|
|
8343
8474
|
} else {
|
|
8344
|
-
const { cloneAt, typeOf } = await import("./chunk-
|
|
8475
|
+
const { cloneAt, typeOf } = await import("./chunk-4PYY4TMT.js");
|
|
8345
8476
|
for (const given of pastedUrls(b.urls ?? "").slice(0, 500)) {
|
|
8346
8477
|
const c = candidateOf(given);
|
|
8347
8478
|
const clone = await cloneAt(c.url);
|
|
@@ -8412,13 +8543,13 @@ function uiSetupRoutes(r, ctx, deps = {}) {
|
|
|
8412
8543
|
const id = params.repoId;
|
|
8413
8544
|
if (!(await loadRepos(root).catch(() => [])).some((x) => x.id === id))
|
|
8414
8545
|
throw notFound(`There is no repo ${id} in any manifest.`);
|
|
8415
|
-
const { repoFor } = await import("./chunk-
|
|
8546
|
+
const { repoFor } = await import("./chunk-72FLXGSN.js");
|
|
8416
8547
|
const repo = await repoFor(root, id);
|
|
8417
8548
|
if (!repo)
|
|
8418
8549
|
throw conflict(`${id} isn't cloned here yet, so there are no files to read its type from: clone it first (Sync on Onboarding, or atticus workspace sync).`);
|
|
8419
8550
|
const op = await loadOrgPack(orgPackDirOf(root));
|
|
8420
8551
|
if (op.repoTypes.length) {
|
|
8421
|
-
const { repoTypeDetect } = await import("./chunk-
|
|
8552
|
+
const { repoTypeDetect } = await import("./chunk-4OITEXVX.js");
|
|
8422
8553
|
const res = await run4((io) => repoTypeDetect(root, id, { json: true }, io));
|
|
8423
8554
|
if (res.code !== 0)
|
|
8424
8555
|
throw unprocessable2([...res.err, ...res.out].join("\n"));
|
|
@@ -8432,7 +8563,7 @@ function uiSetupRoutes(r, ctx, deps = {}) {
|
|
|
8432
8563
|
};
|
|
8433
8564
|
return { status: 200, body: body2 };
|
|
8434
8565
|
}
|
|
8435
|
-
const { typeOf } = await import("./chunk-
|
|
8566
|
+
const { typeOf } = await import("./chunk-4PYY4TMT.js");
|
|
8436
8567
|
const t = await typeOf(repo.dir, void 0);
|
|
8437
8568
|
const body = {
|
|
8438
8569
|
repo: id,
|
|
@@ -8571,9 +8702,9 @@ function uiSetupRoutes(r, ctx, deps = {}) {
|
|
|
8571
8702
|
}).add("POST", "/api/setup/sources", async ({ body }) => {
|
|
8572
8703
|
needMetarepo();
|
|
8573
8704
|
const b = parseBody4(api_exports.SourceRequest, body);
|
|
8574
|
-
const file =
|
|
8705
|
+
const file = join18(orgPackDirOf(root), "sources.yaml");
|
|
8575
8706
|
const before = await readFile13(file, "utf8").catch(() => "");
|
|
8576
|
-
const { sourcesAdd: sourcesAdd2 } = await import("./chunk-
|
|
8707
|
+
const { sourcesAdd: sourcesAdd2 } = await import("./chunk-E4AUZ5AC.js");
|
|
8577
8708
|
const res = await run4((io) => sourcesAdd2(root, b.type, b.location.trim(), io, {
|
|
8578
8709
|
...b.id ? { id: b.id } : {},
|
|
8579
8710
|
...b.path ? { path: b.path } : {},
|
|
@@ -8596,7 +8727,7 @@ function uiSetupRoutes(r, ctx, deps = {}) {
|
|
|
8596
8727
|
};
|
|
8597
8728
|
}
|
|
8598
8729
|
const after = await readFile13(file, "utf8").catch(() => "");
|
|
8599
|
-
const { changedLines: changedLines2, lfOnly: lfOnly2 } = await import("./chunk-
|
|
8730
|
+
const { changedLines: changedLines2, lfOnly: lfOnly2 } = await import("./chunk-4EBXR37M.js");
|
|
8600
8731
|
changed(path);
|
|
8601
8732
|
return {
|
|
8602
8733
|
status: 200,
|
|
@@ -8622,7 +8753,7 @@ function uiRolesRoutes(r, ctx, deps = {}) {
|
|
|
8622
8753
|
const now = deps.now ?? (() => /* @__PURE__ */ new Date());
|
|
8623
8754
|
const sending = /* @__PURE__ */ new Set();
|
|
8624
8755
|
ctx.askKnowledge = async (q) => {
|
|
8625
|
-
const { knowledgeAnswerOf } = await import("./chunk-
|
|
8756
|
+
const { knowledgeAnswerOf } = await import("./chunk-Z56NN3AX.js");
|
|
8626
8757
|
return api_exports.KnowledgeAnswerView.parse(await knowledgeAnswerOf(root, q));
|
|
8627
8758
|
};
|
|
8628
8759
|
const exists4 = async (id) => {
|
|
@@ -8683,7 +8814,7 @@ function uiRolesRoutes(r, ctx, deps = {}) {
|
|
|
8683
8814
|
const id = changeIdOf2(params.changeId);
|
|
8684
8815
|
if (!await exists4(id))
|
|
8685
8816
|
throw notFound(`There is no change ${id}.`);
|
|
8686
|
-
const { ownerSuggestions } = await import("./chunk-
|
|
8817
|
+
const { ownerSuggestions } = await import("./chunk-Z56NN3AX.js");
|
|
8687
8818
|
return {
|
|
8688
8819
|
status: 200,
|
|
8689
8820
|
body: api_exports.OwnerSuggestionList.parse(await ownerSuggestions(root, id))
|
|
@@ -8795,12 +8926,12 @@ function uiRolesRoutes(r, ctx, deps = {}) {
|
|
|
8795
8926
|
const b = api_exports.SendOwnerAskRequest.safeParse(body ?? {});
|
|
8796
8927
|
if (!b.success)
|
|
8797
8928
|
throw badRequest("Send { confirmation? }.");
|
|
8798
|
-
const { ownerQuestions } = await import("./chunk-
|
|
8929
|
+
const { ownerQuestions } = await import("./chunk-LQM2YZUX.js");
|
|
8799
8930
|
const list = await ownerQuestions(root, { now: now() });
|
|
8800
8931
|
const q = list.questions.find((x) => x.id === params.id);
|
|
8801
8932
|
if (!q)
|
|
8802
8933
|
throw notFound(`There is no owner question ${params.id}.`);
|
|
8803
|
-
const { fallbackWords, notifierFor } = await import("./chunk-
|
|
8934
|
+
const { fallbackWords, notifierFor } = await import("./chunk-Z56NN3AX.js");
|
|
8804
8935
|
const n = await notifierFor(root, q.finding?.change, deps.notify, deps.adapterFactories ? { factories: deps.adapterFactories } : {});
|
|
8805
8936
|
const to = q.owner;
|
|
8806
8937
|
if (!n.notify || n.kind === "none")
|
|
@@ -8812,7 +8943,7 @@ function uiRolesRoutes(r, ctx, deps = {}) {
|
|
|
8812
8943
|
why: "No notifications are set up here (runtime.yaml adapters.notify): copy the question and ask the owner, then record what they said."
|
|
8813
8944
|
})
|
|
8814
8945
|
};
|
|
8815
|
-
const { ownerAskRef, recordedSendAt, recordOwnerSend } = await import("./chunk-
|
|
8946
|
+
const { ownerAskRef, recordedSendAt, recordOwnerSend } = await import("./chunk-LQM2YZUX.js");
|
|
8816
8947
|
if (sending.has(q.id))
|
|
8817
8948
|
throw new HttpError(409, "Being sent", `${q.id} is being sent to ${to} now, from another tab or window: reload to see it sent.`, { code: "being-sent" });
|
|
8818
8949
|
sending.add(q.id);
|
|
@@ -8886,7 +9017,7 @@ Answer it in Atticus (Questions \u203A Owner questions), or reply to ${ctx.user}
|
|
|
8886
9017
|
const id = strParam(query, "id")?.trim();
|
|
8887
9018
|
if (!id || id.length > 400 || /[\p{Cc}]/u.test(id))
|
|
8888
9019
|
throw badRequest("Say which section: ?id=<source>/<page>#<heading>.");
|
|
8889
|
-
const { passageOf } = await import("./chunk-
|
|
9020
|
+
const { passageOf } = await import("./chunk-Z56NN3AX.js");
|
|
8890
9021
|
const p = await passageOf(root, id);
|
|
8891
9022
|
if (!p)
|
|
8892
9023
|
throw notFound(`No page or section ${id} is in a snapshot or in inputs/.`);
|
|
@@ -8957,7 +9088,7 @@ async function startUi(root, o = {}, deps = {}) {
|
|
|
8957
9088
|
});
|
|
8958
9089
|
keepCatalogsInMemory(true);
|
|
8959
9090
|
servingTheApp(true);
|
|
8960
|
-
void readCatalog(
|
|
9091
|
+
void readCatalog(join19(catalogDirOf(root), "generated"), { cacheRoot: root }).catch(() => void 0);
|
|
8961
9092
|
let followed = { at: 0, yes: false };
|
|
8962
9093
|
const following = () => {
|
|
8963
9094
|
if (Date.now() - followed.at > 1e3)
|
|
@@ -8972,7 +9103,7 @@ async function startUi(root, o = {}, deps = {}) {
|
|
|
8972
9103
|
forgetCatalogs();
|
|
8973
9104
|
if (e.type === "file.changed" || e.type === "index.rebuilt" || e.type === "job.done") {
|
|
8974
9105
|
answersMayHaveChanged();
|
|
8975
|
-
keptFilesMayHaveChanged(e.type === "file.changed" && typeof e.path === "string" ?
|
|
9106
|
+
keptFilesMayHaveChanged(e.type === "file.changed" && typeof e.path === "string" ? join19(root, e.path) : void 0);
|
|
8976
9107
|
}
|
|
8977
9108
|
});
|
|
8978
9109
|
const close = srv.close;
|