@joshuafolkken/kit 1.3000.0 → 1.3044.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/workflow-commands/backlogrun-steps.md +1 -1
- package/.claude/skills/workflow-commands/kickoff.md +6 -0
- package/.claude/skills/workflow-commands/progress-watcher.md +10 -8
- package/dist/.inputs-verified.json +1 -1
- package/dist/commands/adopt.js +12 -12
- package/dist/commands/auto-ok-judge-cli.js +18 -14
- package/dist/commands/auto-ok-main.js +42 -40
- package/dist/commands/backlog-budget-main.js +3 -3
- package/dist/commands/backlog-drive-cli.js +276 -188
- package/dist/commands/backlog-next-main.js +77 -75
- package/dist/commands/backlog-offer-main.js +80 -78
- package/dist/commands/backlog-plan-cli.js +96 -97
- package/dist/commands/backlog-triage-cli.js +94 -92
- package/dist/commands/backlogrun-cli.js +212 -206
- package/dist/commands/behavior-cli.js +12 -13
- package/dist/commands/bump-version-main.js +2 -2
- package/dist/commands/bytes-command.js +61 -22
- package/dist/commands/check-related.js +61 -60
- package/dist/commands/{chunk-X7PN54LZ.js → chunk-22DVQCP6.js} +16 -6
- package/dist/commands/{chunk-UTBVTCQN.js → chunk-24OATKOF.js} +301 -168
- package/dist/commands/{chunk-7GHOFHUS.js → chunk-24ZDAWML.js} +3 -3
- package/dist/commands/{chunk-HBNB3TLG.js → chunk-2BB5ZR2F.js} +13 -7
- package/dist/commands/{chunk-F22G3VDB.js → chunk-2BC33QPY.js} +1 -1
- package/dist/commands/{chunk-72EW7AVI.js → chunk-2BJJUTZA.js} +2 -2
- package/dist/commands/{chunk-XDQOWUVT.js → chunk-2CXT6MBR.js} +4 -4
- package/dist/commands/{chunk-TVJE67O2.js → chunk-2EZTYLO4.js} +6 -6
- package/dist/commands/{chunk-JLYW7CP6.js → chunk-2PHOLX62.js} +1 -1
- package/dist/commands/{chunk-6EU5ZCDP.js → chunk-2QM72JCJ.js} +23 -87
- package/dist/commands/{chunk-EFHSCUFN.js → chunk-2VFPUPSG.js} +2 -2
- package/dist/commands/{chunk-ATRMETHT.js → chunk-2XAH3MHV.js} +1 -1
- package/dist/commands/{chunk-T2E724HN.js → chunk-34JJYCIY.js} +2 -2
- package/dist/commands/{chunk-REMKUFAC.js → chunk-34KZDKQJ.js} +1 -1
- package/dist/commands/{chunk-GK2KY4MO.js → chunk-352KLSFX.js} +3 -3
- package/dist/commands/{chunk-7S6VRZOH.js → chunk-3AEDZZNL.js} +5 -5
- package/dist/commands/{chunk-KVJDDECB.js → chunk-3B2HEFNO.js} +2 -2
- package/dist/commands/{chunk-HZBTXKT2.js → chunk-3Z425MM3.js} +2 -2
- package/dist/commands/{chunk-J3G2R64I.js → chunk-3ZOX4G4U.js} +3 -3
- package/dist/commands/{chunk-LRS2OS5J.js → chunk-452HWOJ7.js} +2 -2
- package/dist/commands/{chunk-HRT4KWP4.js → chunk-475EFIJV.js} +1 -1
- package/dist/commands/{chunk-4HBVHYNL.js → chunk-47UZB54M.js} +3 -3
- package/dist/commands/{chunk-H4LYG37R.js → chunk-4DN4XVPL.js} +6 -6
- package/dist/commands/{chunk-TMLNI3YW.js → chunk-4HERA2GY.js} +1 -1
- package/dist/commands/{chunk-W6V4DWC5.js → chunk-4JI35CVO.js} +1 -1
- package/dist/commands/{chunk-YT342DRV.js → chunk-4L4LNWZ7.js} +2 -2
- package/dist/commands/{chunk-ZZAH3YQP.js → chunk-4N32QKJZ.js} +6 -6
- package/dist/commands/{chunk-GDUK5YPO.js → chunk-4NRSFLG7.js} +12 -12
- package/dist/commands/{chunk-O5QZ2S6X.js → chunk-4OKRPAUT.js} +4 -4
- package/dist/commands/{chunk-QDFDB4CF.js → chunk-4Q64PG46.js} +13 -13
- package/dist/commands/{chunk-HO52D6JY.js → chunk-4UDTQVDD.js} +14 -14
- package/dist/commands/{chunk-HPVLI26Z.js → chunk-4WR2LEZL.js} +6 -6
- package/dist/commands/{chunk-DP7WIGQ4.js → chunk-4ZJOC6OK.js} +4 -4
- package/dist/commands/{chunk-WTRDWEUQ.js → chunk-4ZQM4I7R.js} +12 -12
- package/dist/commands/{chunk-OTZJXU2R.js → chunk-54X37JEJ.js} +8 -8
- package/dist/commands/{chunk-A5V7EWIX.js → chunk-56KW5EOK.js} +2 -2
- package/dist/commands/chunk-5CG3XU3O.js +74 -0
- package/dist/commands/{chunk-FC33R5UN.js → chunk-5ESZLHDZ.js} +13 -15
- package/dist/commands/{chunk-OVA7STGP.js → chunk-5FBRMARM.js} +9 -9
- package/dist/commands/{chunk-SK2LJBFS.js → chunk-5PCK53WP.js} +3 -3
- package/dist/commands/{chunk-6NV2F7QH.js → chunk-5RG4S66L.js} +1 -1
- package/dist/commands/{chunk-JOARHU3M.js → chunk-5UJGACVN.js} +1 -1
- package/dist/commands/{chunk-NKOET4FB.js → chunk-5Y7B7FDL.js} +2 -2
- package/dist/commands/{chunk-XMBRXCIE.js → chunk-5Z6E5ZUV.js} +4 -4
- package/dist/commands/{chunk-RZ4OKKPM.js → chunk-5ZNUH4LV.js} +2 -2
- package/dist/commands/{chunk-7CHCZBNF.js → chunk-6CFHLMKM.js} +4 -4
- package/dist/commands/{chunk-TXXYC7EV.js → chunk-6DDK5XWK.js} +1 -1
- package/dist/commands/{chunk-2TQXCH2K.js → chunk-6GQX752S.js} +3 -3
- package/dist/commands/{chunk-RY6ZDHKB.js → chunk-6MAZ55GF.js} +107 -84
- package/dist/commands/{chunk-SNFLV7VV.js → chunk-6RUWU2SB.js} +2 -2
- package/dist/commands/{chunk-D4SZK7H2.js → chunk-6TIVDEKG.js} +2 -2
- package/dist/commands/{chunk-RIQ75QWR.js → chunk-6UCWAFQY.js} +55 -43
- package/dist/commands/{chunk-4D5KWMFL.js → chunk-6YURRFRU.js} +19 -19
- package/dist/commands/{chunk-7MOZEEFJ.js → chunk-6YVURZAJ.js} +1 -1
- package/dist/commands/{chunk-73JOEKIC.js → chunk-6Z4YZG7P.js} +5 -5
- package/dist/commands/{chunk-NJ53AWJU.js → chunk-77BIN247.js} +9 -9
- package/dist/commands/{chunk-MZHOPRI6.js → chunk-7ABHNNY3.js} +7 -7
- package/dist/commands/{chunk-6WTVAL4D.js → chunk-7C7FOKJK.js} +1 -1
- package/dist/commands/{chunk-KVSSLDA3.js → chunk-7HAGC6SW.js} +5 -5
- package/dist/commands/{chunk-IG22Y5MA.js → chunk-7KKUFLH5.js} +1 -1
- package/dist/commands/{chunk-ZQ3CKRMP.js → chunk-7MJYLUF4.js} +2 -2
- package/dist/commands/{chunk-6UGFS3EU.js → chunk-7NHZCI5Y.js} +11 -11
- package/dist/commands/{chunk-FB3D7CX5.js → chunk-7OQ56DVW.js} +5 -7
- package/dist/commands/{chunk-EK327QOS.js → chunk-7VWPGTZO.js} +10 -10
- package/dist/commands/{chunk-WSOF74K4.js → chunk-7YZXS3AK.js} +3 -3
- package/dist/commands/{chunk-N6TYL3B2.js → chunk-AAUDI7WJ.js} +2 -2
- package/dist/commands/{chunk-3GF52L5F.js → chunk-AC26ZUG5.js} +12 -24
- package/dist/commands/{chunk-EK2Y6B4X.js → chunk-ACZ52JPI.js} +7 -7
- package/dist/commands/{chunk-VD72V5VX.js → chunk-AJ65WNJB.js} +4 -4
- package/dist/commands/{chunk-MYWRGF5A.js → chunk-AK7SEO4Y.js} +2 -2
- package/dist/commands/{chunk-IBEKFLWG.js → chunk-ALDAS2WG.js} +9 -9
- package/dist/commands/{chunk-W32DIQEP.js → chunk-ARFBIJFS.js} +1 -1
- package/dist/commands/{chunk-F3WBEEYC.js → chunk-AVVMDVGO.js} +5 -5
- package/dist/commands/chunk-AXXEMVRJ.js +23 -0
- package/dist/commands/{chunk-GIGKMIPQ.js → chunk-B3M5WSGN.js} +1 -1
- package/dist/commands/{chunk-4Z5723GA.js → chunk-B7ZNIEDV.js} +5 -4
- package/dist/commands/{chunk-B3XFOHDX.js → chunk-BCUDQWYK.js} +10 -4
- package/dist/commands/{chunk-PR3JCPP7.js → chunk-BMKWSWWE.js} +1 -1
- package/dist/commands/{chunk-RZJAUVMI.js → chunk-BMM4RHCG.js} +2 -2
- package/dist/commands/{chunk-LAKVPOJQ.js → chunk-BMTYUJNT.js} +2 -2
- package/dist/commands/{chunk-DAJCUSPG.js → chunk-BRHPRDDV.js} +3 -3
- package/dist/commands/{chunk-UZAU6UI6.js → chunk-BRUBX64M.js} +2 -2
- package/dist/commands/{chunk-BFLFPKQQ.js → chunk-BTZJDHQT.js} +4 -4
- package/dist/commands/{chunk-AI5K4QJO.js → chunk-BYFC6MD2.js} +1 -1
- package/dist/commands/{chunk-JGTLNFFE.js → chunk-BYGJ3BCJ.js} +10 -10
- package/dist/commands/{chunk-5HWZFL4D.js → chunk-C54QXJD6.js} +51 -18
- package/dist/commands/{chunk-LMS6N6GE.js → chunk-CBAKBWSZ.js} +7 -7
- package/dist/commands/{chunk-7EAMUVIO.js → chunk-CFHRNTE5.js} +1 -1
- package/dist/commands/{chunk-UIWAMLQH.js → chunk-CGYDIYHD.js} +2 -2
- package/dist/commands/{chunk-4QYW2IL7.js → chunk-CHKYPF5O.js} +1 -1
- package/dist/commands/{chunk-5HCPSV45.js → chunk-CJBW6BWG.js} +8 -8
- package/dist/commands/chunk-CKUKK7JG.js +252 -0
- package/dist/commands/{chunk-4PES3BAA.js → chunk-CMHGDCGN.js} +3 -3
- package/dist/commands/{chunk-F6OWP2AY.js → chunk-CNGTHSUS.js} +22 -22
- package/dist/commands/{chunk-B2EA2HCY.js → chunk-COGKULQH.js} +4 -4
- package/dist/commands/{chunk-S7XWXG4M.js → chunk-CP2J4RV2.js} +175 -81
- package/dist/commands/{chunk-YGDNUTTI.js → chunk-CQUZ6TNQ.js} +2 -2
- package/dist/commands/chunk-CQZI7RIK.js +72 -0
- package/dist/commands/chunk-CVJHQOI3.js +153 -0
- package/dist/commands/{chunk-2MJ4OCDL.js → chunk-CWCKCZS6.js} +1 -1
- package/dist/commands/chunk-D5OHVIPM.js +17 -0
- package/dist/commands/{chunk-TPKFVVJQ.js → chunk-D6D6WQR6.js} +2 -2
- package/dist/commands/{chunk-5PAEXYIY.js → chunk-D7JRJI44.js} +69 -6
- package/dist/commands/{chunk-LOSOLCCW.js → chunk-D7OAU32Z.js} +1 -1
- package/dist/commands/{chunk-VZHC2I3T.js → chunk-DAAX7XDS.js} +8 -8
- package/dist/commands/{chunk-OHVAEJSM.js → chunk-DEZF7QZZ.js} +5 -5
- package/dist/commands/{chunk-CA6F5OXK.js → chunk-DYZOOWVW.js} +124 -21
- package/dist/commands/{chunk-TKGBF75Y.js → chunk-EDKOSZ3K.js} +5 -5
- package/dist/commands/{chunk-YPNTORQD.js → chunk-EFDVE5P5.js} +1 -1
- package/dist/commands/{chunk-EH3LVYOX.js → chunk-EGIHAEMT.js} +1 -1
- package/dist/commands/{chunk-7P4X4TQL.js → chunk-EKLU6QR7.js} +4 -4
- package/dist/commands/{chunk-ILQZFUDC.js → chunk-ELY76WAR.js} +2 -2
- package/dist/commands/{chunk-2VLHFILE.js → chunk-EM3HAZF6.js} +2 -2
- package/dist/commands/{chunk-F2HFWLQR.js → chunk-EMTZAGT5.js} +20 -1
- package/dist/commands/{chunk-GA4VIFHD.js → chunk-ERG4QRNG.js} +2 -2
- package/dist/commands/{chunk-ICEMFE2V.js → chunk-EUGNQCYK.js} +1 -1
- package/dist/commands/{chunk-3HU3LPIF.js → chunk-EXDFKKMH.js} +2 -2
- package/dist/commands/{chunk-ISPBJVXM.js → chunk-EXWB34R2.js} +7 -7
- package/dist/commands/{chunk-FNOSSXLG.js → chunk-EYMPBHDN.js} +2 -2
- package/dist/commands/{chunk-7V5UVKFG.js → chunk-EZ7IPKIH.js} +2 -2
- package/dist/commands/{chunk-KQWSENCT.js → chunk-F6IQHZYY.js} +3 -3
- package/dist/commands/{chunk-7ZECP3J6.js → chunk-FDS65XOJ.js} +5 -5
- package/dist/commands/{chunk-KXRFGPZD.js → chunk-FGG7V473.js} +21 -5
- package/dist/commands/{chunk-PZ6VWHOO.js → chunk-FHFWNNUC.js} +1 -1
- package/dist/commands/{chunk-XBRD2BDL.js → chunk-FJX7AENO.js} +2 -2
- package/dist/commands/{chunk-M42SLJCD.js → chunk-FKZ5E4JD.js} +4 -4
- package/dist/commands/{chunk-F2J6DGDM.js → chunk-FMZWRDKH.js} +8 -8
- package/dist/commands/{chunk-DSBK66US.js → chunk-FOKCRIAN.js} +10 -10
- package/dist/commands/{chunk-OI7KM4K3.js → chunk-FQGWO2ZH.js} +2 -2
- package/dist/commands/{chunk-2IESYBZH.js → chunk-FURNDIT3.js} +3 -3
- package/dist/commands/chunk-FVDQNMP6.js +93 -0
- package/dist/commands/{chunk-PZU6FZO6.js → chunk-FWU3H4TX.js} +1 -1
- package/dist/commands/{chunk-RYZ3RQRH.js → chunk-G3HBYHFA.js} +1 -1
- package/dist/commands/{chunk-HCA5QG2U.js → chunk-G4E4M2P4.js} +2 -2
- package/dist/commands/{chunk-VJLZ3IQQ.js → chunk-G5KSL2Q2.js} +1 -1
- package/dist/commands/{chunk-Y5ZW3KN5.js → chunk-G6XC7V6Y.js} +2 -2
- package/dist/commands/{chunk-73EBNBUW.js → chunk-GCPP5XIG.js} +1 -1
- package/dist/commands/{chunk-Q3463XNL.js → chunk-GITT5A5A.js} +3 -3
- package/dist/commands/{chunk-T2IO4LEB.js → chunk-GLC47H7I.js} +10 -10
- package/dist/commands/{chunk-GA6E4VGO.js → chunk-GUR54ELE.js} +1 -1
- package/dist/commands/{chunk-7IT23HIR.js → chunk-GY4DMCKS.js} +2 -2
- package/dist/commands/{chunk-PZ4ITSLG.js → chunk-H6JQRHDC.js} +3 -3
- package/dist/commands/{chunk-ZHZSZNE2.js → chunk-HATKF6VX.js} +2 -2
- package/dist/commands/{chunk-ELWNRE6E.js → chunk-HH3CVIFU.js} +5 -5
- package/dist/commands/{chunk-7GMTJDO2.js → chunk-HHMMGDMP.js} +6 -6
- package/dist/commands/{chunk-VD5674LW.js → chunk-HI5WPM6C.js} +2 -2
- package/dist/commands/{chunk-JUUBDYFZ.js → chunk-HQSWPRUF.js} +4 -4
- package/dist/commands/{chunk-ZAJD6T6E.js → chunk-HVCQYZVD.js} +2 -2
- package/dist/commands/chunk-HWEZRNPL.js +66 -0
- package/dist/commands/{chunk-J6GIVMXI.js → chunk-HX3FFIO5.js} +18 -3
- package/dist/commands/{chunk-GU5ML3Y3.js → chunk-HXDTA5VU.js} +13 -68
- package/dist/commands/{chunk-BNXE3NVB.js → chunk-I2KCGKJI.js} +1 -1
- package/dist/commands/{chunk-LC7SBONO.js → chunk-IAD4WLLI.js} +1 -1
- package/dist/commands/{chunk-WWC5L3AO.js → chunk-IB5TT73I.js} +2 -2
- package/dist/commands/{chunk-HOSZITJM.js → chunk-IBAYXCMU.js} +2 -2
- package/dist/commands/chunk-IGDJNXX2.js +49 -0
- package/dist/commands/{chunk-OJ4LGBVD.js → chunk-ILIITIMQ.js} +3 -3
- package/dist/commands/{chunk-CUR2WNYB.js → chunk-IRGDMSTI.js} +3 -3
- package/dist/commands/{chunk-PZTWQYRI.js → chunk-IYJEBWW5.js} +3 -3
- package/dist/commands/{chunk-A3D2XHOJ.js → chunk-J22PSIXR.js} +40 -9
- package/dist/commands/{chunk-O27H6NN6.js → chunk-J66YBAAM.js} +3 -5
- package/dist/commands/{chunk-P6RGQXHI.js → chunk-J6WKZRV2.js} +2 -2
- package/dist/commands/{chunk-NFEBQED3.js → chunk-J7IO3AYH.js} +2 -2
- package/dist/commands/{chunk-T57W3UWK.js → chunk-JAKC2BHX.js} +1 -1
- package/dist/commands/{chunk-3EO2XN3A.js → chunk-JCAQ7B6J.js} +4 -4
- package/dist/commands/{chunk-QQZOQ7AM.js → chunk-JFLFGLE4.js} +1 -1
- package/dist/commands/{chunk-ZDSDPKCD.js → chunk-JIGBNCDR.js} +1 -1
- package/dist/commands/{chunk-Q5N2J2UF.js → chunk-JJHWTFWQ.js} +5 -7
- package/dist/commands/{chunk-EI6JG5DF.js → chunk-JKOGWGQM.js} +1 -1
- package/dist/commands/{chunk-RK4HE5NW.js → chunk-JM6EVOFN.js} +4 -4
- package/dist/commands/{chunk-EBNIX2TC.js → chunk-JV24VP2O.js} +1 -1
- package/dist/commands/{chunk-BCK5LW4F.js → chunk-JVKXJ763.js} +3 -3
- package/dist/commands/{chunk-D5TAR6TV.js → chunk-JZHY7D6D.js} +1 -1
- package/dist/commands/{chunk-CRNPPKP2.js → chunk-JZK33TA5.js} +1 -1
- package/dist/commands/{chunk-UOAG2XQT.js → chunk-K275REYP.js} +3 -3
- package/dist/commands/{chunk-HESMKHEB.js → chunk-K4G3HOKS.js} +2 -2
- package/dist/commands/{chunk-L6XN3EXI.js → chunk-K64EIHD2.js} +1 -1
- package/dist/commands/{chunk-RINVPTA2.js → chunk-KCFOP5RI.js} +28 -28
- package/dist/commands/{chunk-O26Y2FOJ.js → chunk-KGE4AS2Y.js} +1 -1
- package/dist/commands/{chunk-EWA72KO7.js → chunk-KK2SL42W.js} +2 -2
- package/dist/commands/{chunk-MMXZKLDU.js → chunk-KK7TEL5G.js} +10 -4
- package/dist/commands/{chunk-UEURNXE5.js → chunk-KKIMVXAP.js} +2 -2
- package/dist/commands/{chunk-MAGJFH5T.js → chunk-KODXWMBX.js} +6 -6
- package/dist/commands/{chunk-D4HNS43Q.js → chunk-KPSKWTOS.js} +17 -17
- package/dist/commands/{chunk-VFJYOAOQ.js → chunk-KTV2HNWB.js} +2 -2
- package/dist/commands/{chunk-OWR2TCOY.js → chunk-KWYQR5MK.js} +5 -5
- package/dist/commands/{chunk-FNQW6NY7.js → chunk-KXK2A2HB.js} +6 -2
- package/dist/commands/{chunk-O5FVBIRI.js → chunk-KZ5BBBMO.js} +5 -5
- package/dist/commands/{chunk-JUJFIATR.js → chunk-KZ7HD37E.js} +6 -6
- package/dist/commands/{chunk-2YCKPX3A.js → chunk-KZZWPUJW.js} +1 -1
- package/dist/commands/{chunk-MYNM3YMR.js → chunk-L7DAL54N.js} +3 -3
- package/dist/commands/{chunk-NOXLKIPR.js → chunk-LAR76BFA.js} +1 -1
- package/dist/commands/{chunk-ZA3W73PF.js → chunk-LB557AHJ.js} +3 -3
- package/dist/commands/{chunk-LYEKT3IN.js → chunk-LEB2VP7F.js} +1 -1
- package/dist/commands/{chunk-WQJ7O3C3.js → chunk-LJXKVLYI.js} +1 -1
- package/dist/commands/{chunk-CHX4QTP4.js → chunk-LJZERYLG.js} +1 -1
- package/dist/commands/{chunk-PF22VUWB.js → chunk-LOOFYHUM.js} +76 -26
- package/dist/commands/{chunk-HIPO6HUG.js → chunk-LPSULLNK.js} +1 -1
- package/dist/commands/{chunk-G47ZNQVG.js → chunk-LR22UK5W.js} +1 -1
- package/dist/commands/{chunk-SV4FHQE7.js → chunk-LT7QSHR4.js} +14 -14
- package/dist/commands/{chunk-HIB5G2X6.js → chunk-LUXWDMKI.js} +7 -7
- package/dist/commands/{chunk-XH6BGVVP.js → chunk-LX7TIEMI.js} +9 -36
- package/dist/commands/{chunk-OGNTJ5JB.js → chunk-LYO6TX5L.js} +1 -1
- package/dist/commands/{chunk-JLREFWJ4.js → chunk-LZ5QXE5N.js} +6 -6
- package/dist/commands/{chunk-WW3TX742.js → chunk-LZPPSOTP.js} +4 -4
- package/dist/commands/{chunk-5WIZR5SC.js → chunk-M4UV3BEV.js} +11 -11
- package/dist/commands/{chunk-LNBUIOK6.js → chunk-M6JDU5EK.js} +4 -4
- package/dist/commands/{chunk-VZSJCFRT.js → chunk-MFBNNTBM.js} +4 -4
- package/dist/commands/{chunk-KHWTJ4F7.js → chunk-MI2OS6TL.js} +3 -3
- package/dist/commands/{chunk-VZCQZFPH.js → chunk-MLW4S35K.js} +19 -8
- package/dist/commands/{chunk-RIUPRMLW.js → chunk-MN425CU6.js} +1 -1
- package/dist/commands/{chunk-7W3D3WRW.js → chunk-MOIOSCZM.js} +2 -2
- package/dist/commands/{chunk-3BNNMJOT.js → chunk-MRORPFSO.js} +20 -320
- package/dist/commands/{chunk-LA5WTOAM.js → chunk-MUGTOJUL.js} +12 -12
- package/dist/commands/{chunk-L6LU2633.js → chunk-MVHPRYHE.js} +1 -1
- package/dist/commands/{chunk-EKCKCX5S.js → chunk-MWO6FOSZ.js} +123 -21
- package/dist/commands/{chunk-AVUGMOHZ.js → chunk-N7QTMTST.js} +2 -2
- package/dist/commands/{chunk-LMSS4ARB.js → chunk-NDBX7LSS.js} +1 -1
- package/dist/commands/{chunk-BEE7OAQ5.js → chunk-NDWZTWXV.js} +21 -2
- package/dist/commands/{chunk-6TESOL3L.js → chunk-NEGJ77RV.js} +7 -7
- package/dist/commands/{chunk-LCEJXF7A.js → chunk-NEGRE5VW.js} +4 -4
- package/dist/commands/{chunk-IXX4SXIP.js → chunk-NFPD2P3V.js} +1 -1
- package/dist/commands/chunk-NHIW7JE6.js +335 -0
- package/dist/commands/{chunk-CJSFC5YI.js → chunk-NILSN7A4.js} +7 -7
- package/dist/commands/{chunk-W4J6YTFE.js → chunk-NOLFSPOB.js} +2 -2
- package/dist/commands/chunk-NT67QTZO.js +65 -0
- package/dist/commands/{chunk-NJT5L6IC.js → chunk-NU7W6QGT.js} +33 -4
- package/dist/commands/chunk-NUR4FQHM.js +21 -0
- package/dist/commands/{chunk-OKKQI4ZG.js → chunk-OAAVY2JK.js} +1 -1
- package/dist/commands/chunk-OF4BY4N7.js +32 -0
- package/dist/commands/{chunk-W47I2KDY.js → chunk-OGS2DK7I.js} +3 -3
- package/dist/commands/{chunk-MS6Q3Z7V.js → chunk-OIPV3PWW.js} +6 -6
- package/dist/commands/{chunk-T33QDAWD.js → chunk-OIX2363L.js} +1 -1
- package/dist/commands/{chunk-GPMSYXYO.js → chunk-OJ65BZBV.js} +283 -15
- package/dist/commands/{chunk-34LAULSC.js → chunk-OKZWEVR4.js} +3 -3
- package/dist/commands/{chunk-2CXAVVST.js → chunk-OL6IF4JC.js} +1 -1
- package/dist/commands/{chunk-6JVNRY5A.js → chunk-OMPRILFH.js} +1 -1
- package/dist/commands/{chunk-VGHSZLYQ.js → chunk-OOWGH2RG.js} +1 -1
- package/dist/commands/{chunk-ERGZPWKP.js → chunk-OP2RFVLS.js} +1 -1
- package/dist/commands/{chunk-UU6GCJGM.js → chunk-ORKVN2LO.js} +2 -2
- package/dist/commands/{chunk-RHII5XI6.js → chunk-OSBWXZJ4.js} +24 -24
- package/dist/commands/{chunk-D3SHCUBC.js → chunk-OVWPZDWP.js} +2 -2
- package/dist/commands/{chunk-Z4HYBFZD.js → chunk-OWYK2BEJ.js} +108 -46
- package/dist/commands/{chunk-P4O67FP5.js → chunk-OX3VQLV2.js} +6 -6
- package/dist/commands/{chunk-L6TU7FC2.js → chunk-OZJP77UM.js} +4 -4
- package/dist/commands/{chunk-SNO7CY2B.js → chunk-P3H3DKTE.js} +2 -2
- package/dist/commands/{chunk-2OIX4JLA.js → chunk-P5SOYWH2.js} +3 -3
- package/dist/commands/{chunk-M4PEC7YW.js → chunk-PHLOTUB7.js} +54 -37
- package/dist/commands/{chunk-73KBUQKI.js → chunk-PTNQCCIB.js} +2 -2
- package/dist/commands/{chunk-4P2LCVGO.js → chunk-PTZEFQUX.js} +8 -8
- package/dist/commands/{chunk-DJVMC3U2.js → chunk-Q426ZSZ4.js} +1 -1
- package/dist/commands/{chunk-US6X7JXC.js → chunk-Q7EEIOAD.js} +4 -4
- package/dist/commands/{chunk-LE7TFPMU.js → chunk-QABRNGQV.js} +2 -2
- package/dist/commands/{chunk-NGKB632X.js → chunk-QDFVVRQP.js} +3 -3
- package/dist/commands/{chunk-36M2UV6C.js → chunk-QGATHT4S.js} +38 -4
- package/dist/commands/{chunk-DIB2Z2OS.js → chunk-QJRVDE7T.js} +1 -1
- package/dist/commands/{chunk-KUJQWO6M.js → chunk-QKTTKAXM.js} +2 -2
- package/dist/commands/{chunk-DXZW4V7J.js → chunk-QMDKDQKW.js} +3 -3
- package/dist/commands/{chunk-VW5SGE7A.js → chunk-QOSC5RKD.js} +1 -1
- package/dist/commands/{chunk-ENLWXAHD.js → chunk-QV5FKMOU.js} +1 -1
- package/dist/commands/{chunk-32SNWQJP.js → chunk-R2THGPI3.js} +2 -2
- package/dist/commands/{chunk-RVHBWSIG.js → chunk-R54Z2Z3X.js} +2 -2
- package/dist/commands/{chunk-CJAA5GAF.js → chunk-RG53UFNW.js} +15 -15
- package/dist/commands/{chunk-HJKZDDDI.js → chunk-RHKCWJQX.js} +1 -1
- package/dist/commands/{chunk-RPDWFUQO.js → chunk-RKIAX4DZ.js} +36 -84
- package/dist/commands/{chunk-LE2T3FGJ.js → chunk-RLBFEHHC.js} +2 -4
- package/dist/commands/{chunk-5GBZ43UA.js → chunk-RMDLFLPE.js} +1 -1
- package/dist/commands/{chunk-U2UH4VM4.js → chunk-RN2YDNLF.js} +2 -2
- package/dist/commands/{chunk-GQHUFNXN.js → chunk-RRAIRS2T.js} +1 -1
- package/dist/commands/{chunk-DRCTDVI2.js → chunk-RUQY5TS3.js} +3 -3
- package/dist/commands/{chunk-WGULS5DA.js → chunk-RW64VHEB.js} +1 -0
- package/dist/commands/{chunk-4G7NKNAZ.js → chunk-RXYMJPJB.js} +3 -3
- package/dist/commands/{chunk-B33BTNB4.js → chunk-S4M6UWR2.js} +21 -5
- package/dist/commands/{chunk-4Q4FXBUQ.js → chunk-SASX3W2M.js} +2 -2
- package/dist/commands/{chunk-TIXJY22D.js → chunk-SJ2ZN575.js} +5 -5
- package/dist/commands/{chunk-NSZTSCBW.js → chunk-SP7DKYGU.js} +13 -13
- package/dist/commands/{chunk-T3FD3Q73.js → chunk-SRG6PKVS.js} +1 -1
- package/dist/commands/{chunk-QA22PBCJ.js → chunk-SSL6A3Y4.js} +3 -3
- package/dist/commands/{chunk-4BEIYKI2.js → chunk-SV4FZR24.js} +2 -0
- package/dist/commands/{chunk-HZSQI6TD.js → chunk-SVTS7ACS.js} +2 -2
- package/dist/commands/{chunk-F7XLEK55.js → chunk-SVV4U5AR.js} +1 -1
- package/dist/commands/{chunk-RRQFITJE.js → chunk-SXJM4DZ5.js} +1 -1
- package/dist/commands/{chunk-OIDMJASD.js → chunk-SYB3M632.js} +1 -1
- package/dist/commands/{chunk-UJOZ2MGX.js → chunk-SYOXIKB7.js} +6 -6
- package/dist/commands/{chunk-5SB37YDW.js → chunk-SZG5HDNP.js} +3 -3
- package/dist/commands/{chunk-R2CF6VZE.js → chunk-T4F33UKZ.js} +4 -4
- package/dist/commands/{chunk-ESQEEL4O.js → chunk-TAEGXID2.js} +2 -2
- package/dist/commands/chunk-TEPYEUYG.js +585 -0
- package/dist/commands/{chunk-LUMCYDGE.js → chunk-TFLHYC2F.js} +2 -2
- package/dist/commands/{chunk-V5OIPYA6.js → chunk-TJKM56WJ.js} +4 -4
- package/dist/commands/{chunk-CYQ3ZF7R.js → chunk-TLAB552K.js} +86 -13
- package/dist/commands/{chunk-ST32OGPY.js → chunk-TP6L4W3W.js} +5 -5
- package/dist/commands/{chunk-C26LKDBE.js → chunk-TR7WWYD5.js} +1 -1
- package/dist/commands/{chunk-PWYXY46Y.js → chunk-TYNH2R66.js} +15 -15
- package/dist/commands/{chunk-AZUE65NT.js → chunk-U5P6G3UV.js} +2 -2
- package/dist/commands/{chunk-REPANBLS.js → chunk-U7Y6RKLK.js} +1 -1
- package/dist/commands/{chunk-55I7OYHI.js → chunk-UIMMWH7U.js} +1 -1
- package/dist/commands/{chunk-72J2G2E7.js → chunk-UKBBWMLE.js} +20 -20
- package/dist/commands/{chunk-VTLL6CKO.js → chunk-UNMSZGSG.js} +14 -14
- package/dist/commands/chunk-UOVUUVDK.js +18 -0
- package/dist/commands/{chunk-JNWHX25C.js → chunk-URDT2O2K.js} +1 -1
- package/dist/commands/{chunk-FGZQSSGH.js → chunk-UREXZJDB.js} +1 -1
- package/dist/commands/{chunk-O4WBADCX.js → chunk-UTHUX7VU.js} +3 -3
- package/dist/commands/{chunk-PDDKRHHS.js → chunk-V5OUZFWK.js} +3 -3
- package/dist/commands/{chunk-N4O5I55P.js → chunk-VCPGFBMN.js} +8 -8
- package/dist/commands/{chunk-WN7NK3NY.js → chunk-VGPIQNDB.js} +1 -1
- package/dist/commands/{chunk-HOGFJHBT.js → chunk-VJS2MCLA.js} +1 -1
- package/dist/commands/{chunk-4YI4SLRJ.js → chunk-VK6D5CWA.js} +8 -8
- package/dist/commands/{chunk-4LWRCPS5.js → chunk-VOF3N4WO.js} +3 -3
- package/dist/commands/{chunk-AM44D7NF.js → chunk-VQRT32JB.js} +1 -1
- package/dist/commands/{chunk-AS3GWVAN.js → chunk-VQVPAVQ3.js} +1 -1
- package/dist/commands/{chunk-6VTJO5L2.js → chunk-VV4TQYGD.js} +3 -3
- package/dist/commands/{chunk-WIE7VUBE.js → chunk-W7DRUOF7.js} +5 -5
- package/dist/commands/{chunk-HH2KDLTP.js → chunk-WAEN2RTT.js} +2 -2
- package/dist/commands/{chunk-NKKH3PBE.js → chunk-WB4T3VY2.js} +18 -1
- package/dist/commands/{chunk-DNJC7X73.js → chunk-WCEUMOKK.js} +2 -2
- package/dist/commands/{chunk-BK6Q4VCA.js → chunk-WTH6NTXU.js} +4 -4
- package/dist/commands/{chunk-WG6GYBRJ.js → chunk-WWVYEHQT.js} +2 -1
- package/dist/commands/{chunk-P4CWLRT2.js → chunk-X3TNPALI.js} +1 -1
- package/dist/commands/{chunk-LZNYHWRO.js → chunk-XC6GG5JR.js} +3 -3
- package/dist/commands/{chunk-RI7EQYKL.js → chunk-XFWI6WHH.js} +2 -2
- package/dist/commands/{chunk-BY3POLIQ.js → chunk-XHGWMD3L.js} +7 -7
- package/dist/commands/{chunk-BPSJSHYD.js → chunk-XI2ABCRX.js} +2 -2
- package/dist/commands/{chunk-TS4ZK46L.js → chunk-XKSUBUIH.js} +5 -5
- package/dist/commands/{chunk-K7GL3BGI.js → chunk-XPBF5DG3.js} +4 -4
- package/dist/commands/{chunk-6SKMZGER.js → chunk-XUMYPESL.js} +20 -8
- package/dist/commands/{chunk-QS5USD4T.js → chunk-XXC32PVL.js} +5 -4
- package/dist/commands/{chunk-ORSI7Y55.js → chunk-XXN2EZBY.js} +1 -1
- package/dist/commands/{chunk-IZVM2TTH.js → chunk-XZQWEVR3.js} +2 -2
- package/dist/commands/{chunk-E3CXOVPQ.js → chunk-Y27PTXXI.js} +1 -1
- package/dist/commands/{chunk-337QQM4C.js → chunk-Y4EBUI6M.js} +106 -5
- package/dist/commands/{chunk-WRX3MINT.js → chunk-YAU3LYNF.js} +1 -1
- package/dist/commands/{chunk-JB7R3A4A.js → chunk-YDURQICF.js} +4 -4
- package/dist/commands/{chunk-RX5JSPPH.js → chunk-YGFOGA7C.js} +11 -11
- package/dist/commands/{chunk-S6SXMBF2.js → chunk-YHJ2AJMA.js} +2 -2
- package/dist/commands/{chunk-MVPUQLN5.js → chunk-YM77CF4D.js} +4 -4
- package/dist/commands/{chunk-ZYIMQHCB.js → chunk-YNPRJCEO.js} +6 -6
- package/dist/commands/{chunk-3UKJFWKS.js → chunk-YTBQAD5W.js} +3 -3
- package/dist/commands/{chunk-KIVOZY2J.js → chunk-ZBZ5DDCH.js} +66 -64
- package/dist/commands/{chunk-TAPDXK34.js → chunk-ZLRUHSOP.js} +1 -1
- package/dist/commands/{chunk-XYAK53TK.js → chunk-ZNR75OXP.js} +2 -1
- package/dist/commands/{chunk-CADFBQJJ.js → chunk-ZSOR4ISJ.js} +4 -4
- package/dist/commands/{chunk-6NRTLH6I.js → chunk-ZYFHYQA7.js} +1 -1
- package/dist/commands/{chunk-Q7TV3OV6.js → chunk-ZZFFSQF4.js} +4 -4
- package/dist/commands/{chunk-PDAY76AN.js → chunk-ZZULXNC2.js} +1 -1
- package/dist/commands/{chunk-5Y7QQYTU.js → chunk-ZZXO6TFH.js} +1 -1
- package/dist/commands/code-symbol-cli.js +4 -4
- package/dist/commands/codex-hook-adapter.js +99 -100
- package/dist/commands/command-derive.js +10 -10
- package/dist/commands/cost-audit-main.js +94 -92
- package/dist/commands/cspell-cached.js +24 -23
- package/dist/commands/defect-origin-main.js +19 -18
- package/dist/commands/defect-report-main.js +15 -14
- package/dist/commands/disposition-cli.js +67 -64
- package/dist/commands/doctor.js +3 -3
- package/dist/commands/document-read-cli.js +89 -9
- package/dist/commands/document-section-main.js +89 -9
- package/dist/commands/edit-files-cli.js +1 -1
- package/dist/commands/effect-audit-cli.js +20 -19
- package/dist/commands/epic-audit-main.js +55 -53
- package/dist/commands/epic-bundle-main.js +87 -85
- package/dist/commands/epic-check.js +16 -15
- package/dist/commands/epic-main.js +93 -91
- package/dist/commands/epic-next-main.js +51 -49
- package/dist/commands/format-edited-cli.js +30 -32
- package/dist/commands/format.js +11 -10
- package/dist/commands/fresh-machine-cli.js +6 -6
- package/dist/commands/git-followup-workflow.js +137 -122
- package/dist/commands/git-workflow.js +28 -27
- package/dist/commands/github-release-cli.js +26 -3
- package/dist/commands/hook-ledger-cli.js +74 -126
- package/dist/commands/init-main.js +20 -19
- package/dist/commands/inputs.json +1909 -1878
- package/dist/commands/issue-ack-cli.js +5 -5
- package/dist/commands/issue-already-done-cli.js +63 -58
- package/dist/commands/issue-body-cli.js +44 -42
- package/dist/commands/issue-cite-main.js +11 -10
- package/dist/commands/issue-comment-main.js +15 -11
- package/dist/commands/issue-consolidate-cli.js +31 -30
- package/dist/commands/issue-file-main.js +114 -110
- package/dist/commands/issue-fold-existing-cli.js +88 -86
- package/dist/commands/issue-fold-main.js +26 -25
- package/dist/commands/issue-lint-main.js +38 -37
- package/dist/commands/issue-measured-cli.js +66 -61
- package/dist/commands/issue-plan-cli.js +103 -101
- package/dist/commands/issue-premise-unmet-cli.js +66 -61
- package/dist/commands/issue-priority-cli.js +13 -12
- package/dist/commands/issue-read-main.js +18 -17
- package/dist/commands/issue-release-class-cli.js +12 -11
- package/dist/commands/issue-release-main.js +13 -12
- package/dist/commands/issue-scout-main.js +89 -87
- package/dist/commands/issue-spill-main.js +114 -110
- package/dist/commands/issue-state-main.js +16 -15
- package/dist/commands/issue-tick-cli.js +14 -13
- package/dist/commands/josh-completion.js +10 -10
- package/dist/commands/lane-adopt-cli.js +19 -19
- package/dist/commands/lane-breakdown-cli.js +154 -126
- package/dist/commands/lane-cli.js +131 -125
- package/dist/commands/lane-launch-main.js +17 -17
- package/dist/commands/lane-limit-cli.js +81 -79
- package/dist/commands/lane-measure-cli.js +246 -130
- package/dist/commands/lane-pause-cli.js +15 -15
- package/dist/commands/lane-plan-cli.js +108 -101
- package/dist/commands/lane-resolve-cli.js +20 -19
- package/dist/commands/lane-restart-cli.js +124 -118
- package/dist/commands/lane-why-cli.js +85 -82
- package/dist/commands/lane-withdraw-cli.js +49 -48
- package/dist/commands/latest-corepack.js +3 -3
- package/dist/commands/latest-if-required-cli.js +9 -9
- package/dist/commands/latest-scope-main.js +5 -5
- package/dist/commands/latest-update.js +3 -3
- package/dist/commands/lines-command.js +3 -3
- package/dist/commands/lint-parallel-main.js +32 -31
- package/dist/commands/lint-related.js +79 -60
- package/dist/commands/lint-rule.js +32 -31
- package/dist/commands/lockfile-policy.js +11 -11
- package/dist/commands/main-merge-main.js +5 -5
- package/dist/commands/main-sync-main.js +5 -5
- package/dist/commands/managed-config-scope-cli.js +3 -3
- package/dist/commands/measure-rerun-cli.js +10 -10
- package/dist/commands/metrics-command.js +91 -58
- package/dist/commands/observation-record-cli.js +3 -3
- package/dist/commands/observations-flush-cli.js +27 -25
- package/dist/commands/oracle-list-cli.js +2 -2
- package/dist/commands/overrides-check.js +4 -4
- package/dist/commands/package-scout-cli.js +67 -26
- package/dist/commands/plan-consumers-main.js +4 -4
- package/dist/commands/plan-scaffold-cli.js +132 -91
- package/dist/commands/pr-classification-main.js +3 -3
- package/dist/commands/pre-commit-lint.js +11 -12
- package/dist/commands/pre-commit-type-check.js +25 -24
- package/dist/commands/pre-push-unit.js +33 -33
- package/dist/commands/pretool-guard-cli.js +90 -91
- package/dist/commands/project-profile-cli.js +5 -4
- package/dist/commands/propagate.js +15 -15
- package/dist/commands/prose-stale-cli.js +20 -19
- package/dist/commands/publishable-range-check.js +4 -4
- package/dist/commands/read-files-cli.js +2 -2
- package/dist/commands/read-set-cli.js +61 -24
- package/dist/commands/refactor-scan-cli.js +6 -6
- package/dist/commands/release-cli.js +64 -36
- package/dist/commands/release-scope-main.js +19 -18
- package/dist/commands/rename-cli.js +27 -29
- package/dist/commands/reserved-run.js +3 -3
- package/dist/commands/retrospective-cli.js +104 -102
- package/dist/commands/review-attest-cli.js +6 -6
- package/dist/commands/review-brief-main.js +127 -109
- package/dist/commands/review-findings-cli.js +2 -2
- package/dist/commands/review-pair-cli.js +110 -84
- package/dist/commands/review-record-main.js +108 -83
- package/dist/commands/review-round2-cli.js +46 -45
- package/dist/commands/review-stops-cli.js +16 -16
- package/dist/commands/review-submit-cli.js +127 -109
- package/dist/commands/rule-list.js +58 -60
- package/dist/commands/rule-value-cli.js +226 -74
- package/dist/commands/run-add-cli.js +28 -27
- package/dist/commands/run-board-main.js +136 -132
- package/dist/commands/run-carry-cli.js +127 -124
- package/dist/commands/run-chain-cli.js +116 -93
- package/dist/commands/run-cut-cli.js +124 -119
- package/dist/commands/run-ending-cli.js +19 -22
- package/dist/commands/run-entry-cli.js +183 -180
- package/dist/commands/run-event-cli.js +5 -5
- package/dist/commands/run-handoff-cli.js +52 -28
- package/dist/commands/run-handoff-lanes-cli.js +15 -15
- package/dist/commands/run-hold-main.js +64 -62
- package/dist/commands/run-liveness-cli.js +11 -11
- package/dist/commands/run-merge-main.js +119 -116
- package/dist/commands/run-next-cli.js +87 -86
- package/dist/commands/run-park-cli.js +111 -92
- package/dist/commands/run-pause-cli.js +147 -133
- package/dist/commands/run-pickup-cli.js +13 -13
- package/dist/commands/run-prep-main.js +83 -82
- package/dist/commands/run-prime-cli.js +107 -87
- package/dist/commands/run-progress-main.js +123 -107
- package/dist/commands/run-report-cli.js +25 -24
- package/dist/commands/run-review-cli.js +168 -149
- package/dist/commands/run-ship-cli.js +208 -203
- package/dist/commands/run-ship-evidence-cli.js +38 -37
- package/dist/commands/run-ship-wait-main.js +40 -37
- package/dist/commands/run-split-cli.js +127 -125
- package/dist/commands/run-stale-main.js +36 -35
- package/dist/commands/run-status-cli.js +16 -15
- package/dist/commands/run-step-cli.js +173 -164
- package/dist/commands/run-tail-cli.js +1 -1
- package/dist/commands/run-tidy-main.js +30 -29
- package/dist/commands/run-wake-main.js +137 -119
- package/dist/commands/run-watcher-guard-cli.js +30 -29
- package/dist/commands/secretlint-scan.js +2 -2
- package/dist/commands/selfcheck-cli.js +27 -26
- package/dist/commands/session-language-main.js +48 -28
- package/dist/commands/sonar-hotspots-cli.js +3 -3
- package/dist/commands/split-assess-cli.js +24 -23
- package/dist/commands/split-child-recover-cli.js +13 -12
- package/dist/commands/start.js +37 -35
- package/dist/commands/stash-pop-main.js +3 -3
- package/dist/commands/stash-push-main.js +3 -3
- package/dist/commands/stop-guard.js +144 -143
- package/dist/commands/sync-main.js +11 -10
- package/dist/commands/telegram-test-main.js +5 -5
- package/dist/commands/test-declared.js +9 -8
- package/dist/commands/test-e2e-guard.js +23 -22
- package/dist/commands/test-pinned-main.js +26 -25
- package/dist/commands/test-reach-cli.js +15 -14
- package/dist/commands/test-red-main.js +5 -5
- package/dist/commands/{test-related-ZT2AO62I.js → test-related-ZCNC46MS.js} +31 -31
- package/dist/commands/test-related-main.js +51 -50
- package/dist/commands/test-unit-guard-main.js +9 -8
- package/dist/commands/time-cli.js +24 -27
- package/dist/commands/time-density-cli.js +8 -9
- package/dist/commands/tree-status-cli.js +4 -4
- package/dist/commands/type-check-command.js +8 -7
- package/dist/commands/ui-shot-cli.js +4 -4
- package/dist/commands/uninstall.js +20 -19
- package/dist/commands/unused-members-cli.js +9 -8
- package/dist/commands/upstream-interrupt-main.js +115 -111
- package/dist/commands/verification-gate.js +46 -46
- package/dist/commands/version-check.js +5 -5
- package/dist/hooks/{chunk-LWD43Z3C.js → chunk-5CUXGQT6.js} +1667 -107
- package/dist/hooks/{chunk-4YXV2REH.js → chunk-5R5YFQR5.js} +8 -8
- package/dist/hooks/{chunk-LKQBEKBI.js → chunk-6RLY27FT.js} +8 -8
- package/dist/hooks/{chunk-CICKRHTB.js → chunk-AO4TOV4V.js} +119 -2679
- package/dist/hooks/{chunk-NUPVO7RI.js → chunk-G5WSPYJ6.js} +4296 -1687
- package/dist/hooks/{chunk-UU4PTPEZ.js → chunk-HHIVWGHX.js} +250 -125
- package/dist/hooks/{chunk-P7BPAU26.js → chunk-IURJANNZ.js} +2 -2
- package/dist/hooks/{chunk-6RR6JZSB.js → chunk-OV22V63P.js} +357 -1744
- package/dist/hooks/{chunk-RQXECHAS.js → chunk-SXABK6UV.js} +57 -45
- package/dist/hooks/codex-hook-adapter.js +11 -11
- package/dist/hooks/daemon.js +1053 -690
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +542 -527
- package/dist/hooks/pretool-guard.js +7 -7
- package/dist/hooks/session-lang.js +293 -16
- package/dist/hooks/stop-guard.js +225 -48
- package/dist/inputs.json +65 -65
- package/dist/josh.js +73 -19
- package/dist/self-sync-guard/index.js +18 -1
- package/dist/version/index.js +18 -1
- package/package.json +3 -3
- package/pnpm-workspace.yaml +5 -13
- package/prompts/collaboration-workflow/issue-template.en.md +56 -52
- package/scripts/agent/agent-argv.ts +20 -6
- package/scripts/agent/agent-phase-profile.ts +89 -0
- package/scripts/agent/agent-role-profile.ts +3 -71
- package/scripts/agent/agent-ship-cap.ts +44 -0
- package/scripts/agent/agent-worker-profile.ts +154 -0
- package/scripts/agent/claude-agent-argv.ts +1 -1
- package/scripts/agent/lane-instructions.ts +29 -3
- package/scripts/auto-ok/auto-ok-judge-cli.ts +3 -0
- package/scripts/auto-ok/auto-ok-judge-write.ts +2 -1
- package/scripts/auto-ok/auto-ok-judge.ts +4 -2
- package/scripts/backlog/backlog-drive-escalate.ts +115 -0
- package/scripts/backlog/backlog-drive-stalled-retry.ts +48 -10
- package/scripts/document/document-scan.ts +35 -1
- package/scripts/gh/git-pr-checks-failed.ts +24 -0
- package/scripts/hooks/implementation-shell-deny-expansion.ts +20 -0
- package/scripts/hooks/implementation-shell-deny-git.ts +128 -0
- package/scripts/hooks/implementation-shell-deny.ts +14 -138
- package/scripts/hooks/implementation-shell.ts +28 -5
- package/scripts/hooks/step-zero-notice.ts +9 -6
- package/scripts/hooks/stop-actions.ts +4 -2
- package/scripts/init/init-logic-workspace.ts +1 -1
- package/scripts/issue/issue-auto-ok.ts +43 -4
- package/scripts/issue/issue-body-keys.ts +4 -0
- package/scripts/issue/issue-comment-cli.ts +15 -2
- package/scripts/issue/issue-evidence-exit.ts +6 -2
- package/scripts/issue/issue-file-cli.ts +5 -1
- package/scripts/issue/issue-file-pass.ts +14 -7
- package/scripts/issue/issue-file-worker.ts +95 -0
- package/scripts/issue/issue-file.ts +1 -1
- package/scripts/issue/issue-outcome.ts +107 -0
- package/scripts/issue/issue-read.ts +12 -7
- package/scripts/issue/issue-watch-diff.ts +2 -1
- package/scripts/josh/josh-commands-ai.ts +2 -2
- package/scripts/josh/josh-commands-development.ts +21 -5
- package/scripts/josh/josh-commands-issue-write.ts +3 -2
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-project.ts +7 -2
- package/scripts/josh/josh-commands-run.ts +10 -2
- package/scripts/josh/josh-commands-workflow.ts +5 -0
- package/scripts/josh/session-language-cli.ts +1 -1
- package/scripts/lane/lane-breakdown-cli.ts +14 -4
- package/scripts/lane/lane-breakdown-text.ts +7 -0
- package/scripts/lane/lane-breakdown.ts +21 -1
- package/scripts/lane/lane-dispatch-prepare.ts +83 -0
- package/scripts/lane/lane-dispatch.ts +3 -53
- package/scripts/lane/lane-elapsed-time.ts +118 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +4 -1
- package/scripts/lane/lane-net-time.ts +35 -7
- package/scripts/lane/lane-overrun.ts +1 -1
- package/scripts/lane/lane-plan-cli.ts +7 -3
- package/scripts/lane/lane-plan-estimate.ts +57 -0
- package/scripts/lane/lane-plan-size.ts +11 -20
- package/scripts/lane/lane-plan.ts +1 -0
- package/scripts/lane/lane-relaunch.ts +9 -4
- package/scripts/lane/lane-stage-budget.ts +6 -1
- package/scripts/lane/lane-stage-events.ts +103 -0
- package/scripts/lane/lane-stats-tables.ts +3 -0
- package/scripts/lane/lane-stop-check-stats.ts +117 -0
- package/scripts/lane/lane-stop-stats.ts +30 -6
- package/scripts/lane/lane-why-causes.ts +3 -11
- package/scripts/lane/openai-lane-supervisor-owner.ts +12 -0
- package/scripts/lane/openai-lane-supervisor.ts +36 -1
- package/scripts/lib/home-tilde.ts +24 -0
- package/scripts/lib/package-manifest.ts +27 -1
- package/scripts/observations/observation-ledger-archive.ts +180 -0
- package/scripts/observations/observation-ledger-home.ts +1 -0
- package/scripts/observations/observation-ledger.ts +5 -0
- package/scripts/observations/observations-flush-transaction.ts +358 -0
- package/scripts/observations/observations-flush.ts +72 -172
- package/scripts/plan/plan-scaffold-cli.ts +17 -6
- package/scripts/plan/plan-scaffold.ts +11 -0
- package/scripts/release/github-release-notes.ts +24 -0
- package/scripts/release/github-release-runs.ts +32 -6
- package/scripts/release/github-release.ts +10 -2
- package/scripts/release/release-progress.ts +22 -10
- package/scripts/release/release-publish-run.ts +39 -6
- package/scripts/repo/repository-labels.ts +23 -11
- package/scripts/review/review-comment-round.ts +10 -5
- package/scripts/rules/broad-investigation-shell.ts +2 -2
- package/scripts/rules/codex-prompt.ts +63 -0
- package/scripts/rules/direct-issue-comment.ts +62 -2
- package/scripts/rules/direct-issue-read.ts +55 -2
- package/scripts/rules/guard-remedy.ts +10 -4
- package/scripts/rules/issue-citation.ts +20 -9
- package/scripts/rules/last-prompt.ts +8 -4
- package/scripts/rules/rule-value-cli.ts +85 -4
- package/scripts/rules/rule-value-trend.ts +108 -0
- package/scripts/rules/shell-redirects.ts +19 -7
- package/scripts/rules/shell-segments.ts +145 -20
- package/scripts/rules/shell-tokens.ts +66 -0
- package/scripts/rules/standalone-gh-call.ts +63 -0
- package/scripts/rules/unasked-filing.ts +12 -4
- package/scripts/run/board/run-board-closed.ts +10 -1
- package/scripts/run/board/run-board-decision-read.ts +52 -12
- package/scripts/run/board/run-board-decision.ts +5 -0
- package/scripts/run/board/run-board-ending-reason.ts +21 -7
- package/scripts/run/board/run-board-github.ts +8 -1
- package/scripts/run/board/run-board-header.ts +4 -5
- package/scripts/run/board/run-board-layout.ts +5 -3
- package/scripts/run/board/run-board-link.ts +2 -0
- package/scripts/run/board/run-board-operation.ts +6 -2
- package/scripts/run/board/run-board-pause-fixture.json +12 -0
- package/scripts/run/board/run-board-pause.ts +87 -0
- package/scripts/run/board/run-board-plan-shared.ts +2 -0
- package/scripts/run/board/run-board-read.ts +7 -1
- package/scripts/run/board/run-board-render-condition.ts +10 -1
- package/scripts/run/board/run-board-render-title.ts +7 -0
- package/scripts/run/board/run-board-roots.ts +25 -2
- package/scripts/run/board/run-board-settle.ts +16 -2
- package/scripts/run/board/run-board-setup.ts +13 -7
- package/scripts/run/board/run-board-snapshot.ts +4 -0
- package/scripts/run/board/run-board-status.ts +13 -1
- package/scripts/run/board/run-board-tick.ts +7 -1
- package/scripts/run/cut/run-cut-cli.ts +2 -1
- package/scripts/run/park/run-park-cli.ts +13 -1
- package/scripts/run/park/run-park-escalate.ts +102 -0
- package/scripts/run/park/run-stalled.ts +29 -7
- package/scripts/run/review/run-review-early-push.ts +6 -6
- package/scripts/run/ship/run-ship-stop-cause.ts +12 -1
- package/scripts/split/split-assess.ts +14 -5
- package/scripts/test/test-related-touched.ts +21 -3
- package/scripts/test/test-related.ts +1 -1
- package/dist/commands/chunk-6WEVLIZE.js +0 -29
- package/dist/commands/chunk-E2ZCUKHT.js +0 -274
- package/dist/commands/chunk-NMLCPYBN.js +0 -134
- package/dist/commands/chunk-QEIO2ZNQ.js +0 -324
- package/dist/commands/chunk-QWX7EBC6.js +0 -112
- package/dist/commands/chunk-RQRLW4XK.js +0 -20
- package/dist/commands/chunk-UCQJDYE3.js +0 -21
- package/dist/commands/chunk-W4YH2DF3.js +0 -58
- package/dist/commands/{chunk-LRA3PXHS.js → chunk-ENKFCOVY.js} +3 -3
- package/dist/commands/{chunk-RUWV4INF.js → chunk-HQGNXR6I.js} +3 -3
|
@@ -5,6 +5,7 @@ import { document_section } from '#scripts/document/document-section'
|
|
|
5
5
|
import { distributed_paths } from '#scripts/init/distributed-paths'
|
|
6
6
|
import { find_package_directory } from '#scripts/josh/package-directory'
|
|
7
7
|
import { stamp_file } from '#scripts/josh/stamp-file'
|
|
8
|
+
import { run_park_escalate } from '#scripts/run/park/run-park-escalate'
|
|
8
9
|
|
|
9
10
|
interface LaneSet {
|
|
10
11
|
text: string
|
|
@@ -28,6 +29,14 @@ const SETTINGS_FLAG = '--settings'
|
|
|
28
29
|
const PROMPT_FILE_PREFIX = 'josh-lane-instructions-'
|
|
29
30
|
const PROMPT_FILE_SUFFIX = '.md'
|
|
30
31
|
const PACKAGE_DIRECTORY = find_package_directory(path.dirname(fileURLToPath(import.meta.url)))
|
|
32
|
+
// Appended only where `josh.worker.escalate` is true, so a repository without it keeps today's text
|
|
33
|
+
// to the byte (joshuafolkken/kit#7356).
|
|
34
|
+
const ESCALATION_GUIDE = [
|
|
35
|
+
'',
|
|
36
|
+
'## Escalation',
|
|
37
|
+
'',
|
|
38
|
+
'- This Issue needs a stronger model than the one you run on → `pnpm josh run:park <N> --escalate "<reason>"`, then stop. The reason is required and recorded; the lane resumes one profile up, or goes to a person at the top profile.',
|
|
39
|
+
].join('\n')
|
|
31
40
|
|
|
32
41
|
// An include that resolves to nothing is `undefined`, never an empty string, so a renamed heading
|
|
33
42
|
// fails the whole composition rather than silently dropping a rule.
|
|
@@ -63,7 +72,7 @@ function composed_from(lane_markdown: string, rules_path: string): string | unde
|
|
|
63
72
|
return rules === undefined ? undefined : compose(lane_markdown, rules)
|
|
64
73
|
}
|
|
65
74
|
|
|
66
|
-
function
|
|
75
|
+
function rules_set(cwd: string, package_directory: string): LaneSet | undefined {
|
|
67
76
|
const lane_markdown = document_section.read_optional(path.join(package_directory, LANE_DOCUMENT))
|
|
68
77
|
|
|
69
78
|
if (lane_markdown === undefined) return undefined
|
|
@@ -77,6 +86,19 @@ function composed_set(cwd: string, package_directory: string): LaneSet | undefin
|
|
|
77
86
|
return undefined
|
|
78
87
|
}
|
|
79
88
|
|
|
89
|
+
// Only a worker can declare an escalation: a review session never parks the Issue it reads.
|
|
90
|
+
function composed_set(
|
|
91
|
+
cwd: string,
|
|
92
|
+
package_directory: string,
|
|
93
|
+
is_worker = false,
|
|
94
|
+
): LaneSet | undefined {
|
|
95
|
+
const set = rules_set(cwd, package_directory)
|
|
96
|
+
|
|
97
|
+
if (set === undefined || !is_worker || !run_park_escalate.is_enabled(cwd)) return set
|
|
98
|
+
|
|
99
|
+
return { ...set, text: `${set.text}${ESCALATION_GUIDE}` }
|
|
100
|
+
}
|
|
101
|
+
|
|
80
102
|
function composed_in(
|
|
81
103
|
cwd: string,
|
|
82
104
|
package_directory: string = PACKAGE_DIRECTORY,
|
|
@@ -108,8 +130,7 @@ function excluded_settings(rules_path: string, cwd: string): string {
|
|
|
108
130
|
|
|
109
131
|
// No flags when the set cannot be composed or safely written: the child then loads `CLAUDE.md` as
|
|
110
132
|
// before, which costs tokens but never loses a rule.
|
|
111
|
-
function
|
|
112
|
-
const set = composed_set(cwd, PACKAGE_DIRECTORY)
|
|
133
|
+
function flags_of(set: LaneSet | undefined, cwd: string): ReadonlyArray<string> {
|
|
113
134
|
const prompt_file = set === undefined ? undefined : written(set.text)
|
|
114
135
|
|
|
115
136
|
if (set === undefined || prompt_file === undefined) return []
|
|
@@ -117,6 +138,11 @@ function flags(cwd: string = process.cwd()): ReadonlyArray<string> {
|
|
|
117
138
|
return [PROMPT_FILE_FLAG, prompt_file, SETTINGS_FLAG, excluded_settings(set.rules_path, cwd)]
|
|
118
139
|
}
|
|
119
140
|
|
|
141
|
+
// `is_worker` adds the escalation guide where the repository allows one (joshuafolkken/kit#7356).
|
|
142
|
+
function flags(cwd: string = process.cwd(), is_worker = false): ReadonlyArray<string> {
|
|
143
|
+
return flags_of(composed_set(cwd, PACKAGE_DIRECTORY, is_worker), cwd)
|
|
144
|
+
}
|
|
145
|
+
|
|
120
146
|
function tokens_of(text: string): string {
|
|
121
147
|
return cost_tokens.estimate(text).toLocaleString('en-US')
|
|
122
148
|
}
|
|
@@ -67,6 +67,9 @@ function parse_request(argv: ReadonlyArray<string>): JudgeRequest | undefined {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
async function list(): Promise<number> {
|
|
70
|
+
console.error(
|
|
71
|
+
'Judge original user instructions separately from automated plans and prior decisions; kickoff planning alone is not an opt-out. Verify the reference and verbatim prohibition under 自動実行の制約 before treating it as a user constraint (docs/how-to/auto-ok-provenance.md).',
|
|
72
|
+
)
|
|
70
73
|
const owed = await auto_ok_judge_read.owed()
|
|
71
74
|
|
|
72
75
|
if (owed === undefined) {
|
|
@@ -89,7 +89,8 @@ async function apply_to(
|
|
|
89
89
|
read: IssueRead,
|
|
90
90
|
answers: RunLabelFlags,
|
|
91
91
|
): Promise<number> {
|
|
92
|
-
const exclusion =
|
|
92
|
+
const exclusion =
|
|
93
|
+
issue_auto_ok.exclusion_of(read.labels) ?? issue_auto_ok.user_constraint_of(read.body)
|
|
93
94
|
|
|
94
95
|
if (exclusion !== undefined) return refused(issue, issue_auto_ok.line_of(exclusion))
|
|
95
96
|
|
|
@@ -26,9 +26,11 @@ interface JudgeIssue {
|
|
|
26
26
|
is_trusted: boolean
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
// Legacy records owe one reading under the provenance contract. Current records still use the
|
|
30
|
+
// existing body/person-comment invalidation, rather than re-judging every issue on every offer.
|
|
31
|
+
const MARKER_PREFIX = '<!-- josh:auto-ok-judged v=2 body='
|
|
30
32
|
const MARKER_SUFFIX = ' -->'
|
|
31
|
-
const MARKER_PATTERN = /<!-- josh:auto-ok-judged body=(?<digest>[\da-f]+) -->/u
|
|
33
|
+
const MARKER_PATTERN = /<!-- josh:auto-ok-judged v=2 body=(?<digest>[\da-f]+) -->/u
|
|
32
34
|
const DIGEST_LENGTH = 16
|
|
33
35
|
const CRLF = '\r\n'
|
|
34
36
|
const LF = '\n'
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import {
|
|
2
|
+
agent_worker_profile,
|
|
3
|
+
type WorkerProfile,
|
|
4
|
+
type WorkerSettings,
|
|
5
|
+
} from '#scripts/agent/agent-worker-profile'
|
|
6
|
+
import { git_gh_issue_write } from '#scripts/gh/git-gh-issue-write'
|
|
7
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
8
|
+
import { NEEDS_DECISION_LABEL } from '#scripts/issue/issue-labels'
|
|
9
|
+
import { issue_park } from '#scripts/issue/issue-park'
|
|
10
|
+
|
|
11
|
+
// joshuafolkken/kit#7357: a worker's escalation park (joshuafolkken/kit#7356) resumes the same lane one
|
|
12
|
+
// `josh.worker` profile up. The Issue's `worker:<name>` label moves to the next profile, so the
|
|
13
|
+
// re-dispatch resolves it and records it in the lane's `.env`, and every later resume keeps it. At the
|
|
14
|
+
// top profile the Issue goes to a person. A repository without `josh.worker.escalate` is left as before.
|
|
15
|
+
|
|
16
|
+
interface EscalatePorts {
|
|
17
|
+
labels: () => Promise<ReadonlyArray<string> | undefined>
|
|
18
|
+
retry: (issue: number) => Promise<void>
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface Move {
|
|
22
|
+
from: WorkerProfile
|
|
23
|
+
to: WorkerProfile
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function label_of(worker: WorkerProfile): string {
|
|
27
|
+
return `${agent_worker_profile.LABEL_PREFIX}${worker.name}`
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function enabled_settings(directory: string): WorkerSettings | undefined {
|
|
31
|
+
const result = agent_worker_profile.read(directory)
|
|
32
|
+
if (result.kind !== 'settings') return undefined
|
|
33
|
+
|
|
34
|
+
return result.settings.escalate ? result.settings : undefined
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async function current_worker(
|
|
38
|
+
settings: WorkerSettings,
|
|
39
|
+
read_labels: EscalatePorts['labels'],
|
|
40
|
+
): Promise<WorkerProfile | undefined> {
|
|
41
|
+
const labels = await read_labels()
|
|
42
|
+
if (labels === undefined) return undefined
|
|
43
|
+
const result = agent_worker_profile.for_labels(settings, labels)
|
|
44
|
+
|
|
45
|
+
return result.kind === 'worker' ? result.worker : undefined
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// The new label goes on before the old one comes off: a failure in between leaves two `worker:` labels,
|
|
49
|
+
// which the dispatch refuses, never a lane resumed on the old profile.
|
|
50
|
+
async function relabel(issue: string, move: Move): Promise<boolean> {
|
|
51
|
+
if (!(await git_gh_issue_write.issue_add_label(issue, label_of(move.to)))) return false
|
|
52
|
+
|
|
53
|
+
return await git_gh_issue_write.issue_clear_label(issue, label_of(move.from))
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function agent_of(worker: WorkerProfile): string {
|
|
57
|
+
return `${worker.agent.model} / ${worker.agent.effort}`
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function step_note(move: Move, reason: string): string {
|
|
61
|
+
return [
|
|
62
|
+
`Escalated the worker from \`${label_of(move.from)}\` (${agent_of(move.from)}) to \`${label_of(move.to)}\` (${agent_of(move.to)}); the lane resumes in the same worktree.`,
|
|
63
|
+
`- Reason: ${reason}`,
|
|
64
|
+
].join('\n')
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
async function step_up(
|
|
68
|
+
issue: number,
|
|
69
|
+
move: Move,
|
|
70
|
+
reason: string,
|
|
71
|
+
retry: EscalatePorts['retry'],
|
|
72
|
+
): Promise<void> {
|
|
73
|
+
if (!(await relabel(String(issue), move))) {
|
|
74
|
+
console.error(
|
|
75
|
+
`Could not move ${issue_cite.plain_for('program', issue)} to ${label_of(move.to)}. Left for a person.`,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
return
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
await git_gh_issue_write.issue_try_comment(String(issue), step_note(move, reason))
|
|
82
|
+
await retry(issue)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function top_note(top: WorkerProfile, reason: string): string {
|
|
86
|
+
return [
|
|
87
|
+
`Parked with \`${NEEDS_DECISION_LABEL}\`: the worker asked for a stronger profile, but \`${label_of(top)}\` is the top of josh.worker.profiles.`,
|
|
88
|
+
`- Reason: ${reason}`,
|
|
89
|
+
'- Next: a person decides how to go on.',
|
|
90
|
+
].join('\n')
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async function hand_over(issue: number, top: WorkerProfile, reason: string): Promise<void> {
|
|
94
|
+
await issue_park.apply(String(issue), NEEDS_DECISION_LABEL, top_note(top, reason))
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// The settings are read before the labels, so a repository without escalation costs no GitHub read.
|
|
98
|
+
async function escalate(
|
|
99
|
+
issue: number,
|
|
100
|
+
reason: string,
|
|
101
|
+
ports: EscalatePorts,
|
|
102
|
+
directory = process.cwd(),
|
|
103
|
+
): Promise<void> {
|
|
104
|
+
const settings = enabled_settings(directory)
|
|
105
|
+
if (settings === undefined) return
|
|
106
|
+
const from = await current_worker(settings, ports.labels)
|
|
107
|
+
if (from === undefined) return
|
|
108
|
+
const to = agent_worker_profile.next(settings, from)
|
|
109
|
+
|
|
110
|
+
await (to === undefined
|
|
111
|
+
? hand_over(issue, from, reason)
|
|
112
|
+
: step_up(issue, { from, to }, reason, ports.retry))
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export const backlog_drive_escalate = { escalate }
|
|
@@ -19,6 +19,7 @@ import { run_event_stream_emit } from '#scripts/run/event/run-event-stream-emit'
|
|
|
19
19
|
import { run_stalled } from '#scripts/run/park/run-stalled'
|
|
20
20
|
import { run_ship_stage } from '#scripts/run/ship/run-ship-stage'
|
|
21
21
|
import { backlog_budget } from './backlog-budget'
|
|
22
|
+
import { backlog_drive_escalate } from './backlog-drive-escalate'
|
|
22
23
|
import { backlog_drive_retry } from './backlog-drive-retry'
|
|
23
24
|
import { backlog_yield_cap } from './backlog-yield-cap'
|
|
24
25
|
|
|
@@ -26,11 +27,13 @@ import { backlog_yield_cap } from './backlog-yield-cap'
|
|
|
26
27
|
// park whose check shows its cause gone — through `run:add --retry`, at most `RETRY_CAP` times per
|
|
27
28
|
// issue, counted off the whole stream so a restarted drive counts the retries before it. A recorded
|
|
28
29
|
// ship stop is checked by its stage; a park with no stop by its cause: `run:merge`'s three wait for the
|
|
29
|
-
// next sweep, a yield-cap park for its window.
|
|
30
|
+
// next sweep, a yield-cap park for its window. A worker's escalation park is resumed one `josh.worker`
|
|
31
|
+
// profile up (`backlog-drive-escalate.ts`). Any other park, or a protected label, stays for a person;
|
|
30
32
|
// one at the cap is restated once with `CAP_NOTE` and its cause, which its board row shows.
|
|
31
33
|
|
|
32
34
|
const RETRY_CAP = 2
|
|
33
35
|
const CAP_NOTE = `auto-retry cap ${String(RETRY_CAP)} reached`
|
|
36
|
+
const RESUME_REFUSED = 'escalated one profile up, but run:add refused the resume'
|
|
34
37
|
const { PARK } = run_event_stream.EVENT_KIND
|
|
35
38
|
const last_sweep = { at: -Infinity }
|
|
36
39
|
|
|
@@ -95,19 +98,23 @@ function latest_parks(events: ReadonlyArray<RunEvent>): ReadonlyMap<number, RunE
|
|
|
95
98
|
return parks
|
|
96
99
|
}
|
|
97
100
|
|
|
98
|
-
//
|
|
99
|
-
// cannot be read is not re-offered.
|
|
100
|
-
async function
|
|
101
|
+
// The labels of an issue still open, still `run:stalled` and free of a protected label `run:add` would
|
|
102
|
+
// refuse, else `undefined`. An issue that cannot be read is not re-offered.
|
|
103
|
+
async function stalled_labels(issue: number): Promise<ReadonlyArray<string> | undefined> {
|
|
101
104
|
const read = await run_add_issue.read(issue)
|
|
102
105
|
|
|
103
|
-
if (read === undefined) return
|
|
106
|
+
if (read === undefined) return undefined
|
|
104
107
|
const labels = epic_issue.label_names(read)
|
|
105
|
-
|
|
106
|
-
return (
|
|
108
|
+
const is_stalled =
|
|
107
109
|
epic_issue.is_open(read.state) &&
|
|
108
110
|
has_label_name(labels, RUN_STALLED_LABEL) &&
|
|
109
111
|
run_add.protected_label(labels) === undefined
|
|
110
|
-
|
|
112
|
+
|
|
113
|
+
return is_stalled ? labels : undefined
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async function is_still_stalled(issue: number): Promise<boolean> {
|
|
117
|
+
return (await stalled_labels(issue)) !== undefined
|
|
111
118
|
}
|
|
112
119
|
|
|
113
120
|
// The check a park's recorded stop has, or with no stop its cause; none for a stage or cause with no
|
|
@@ -137,14 +144,18 @@ async function note_cap(issue: number, park: RunEvent): Promise<void> {
|
|
|
137
144
|
|
|
138
145
|
// A refused `run:add` (a settled or withdrawn issue, an unreadable lane, a failed label write) leaves the
|
|
139
146
|
// park for a person instead of ending the drive.
|
|
140
|
-
async function retry_cleared(issue: number): Promise<
|
|
147
|
+
async function retry_cleared(issue: number): Promise<boolean> {
|
|
141
148
|
try {
|
|
142
149
|
await backlog_drive_retry.add_retry(
|
|
143
150
|
issue,
|
|
144
151
|
`${issue_cite.plain_for('program', issue)} automatically`,
|
|
145
152
|
)
|
|
153
|
+
|
|
154
|
+
return true
|
|
146
155
|
} catch (error) {
|
|
147
156
|
console.error(`${String(error)} Left for a person.`)
|
|
157
|
+
|
|
158
|
+
return false
|
|
148
159
|
}
|
|
149
160
|
}
|
|
150
161
|
|
|
@@ -170,6 +181,33 @@ async function retry_park(issue: number, park: RunEvent, context: SweepContext):
|
|
|
170
181
|
await (is_capped ? note_cap(issue, park) : retry_cleared(issue))
|
|
171
182
|
}
|
|
172
183
|
|
|
184
|
+
function is_escalation(park: RunEvent): boolean {
|
|
185
|
+
const cause = run_stalled.cause_in(park.text) ?? ''
|
|
186
|
+
|
|
187
|
+
return run_stalled.class_of(cause) === run_stalled.ESCALATION_REQUESTED.short
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// A refused resume restates the park with a cause of its own, so the next sweep does not read the
|
|
191
|
+
// escalation again and step the already moved label up a second time.
|
|
192
|
+
async function resume_escalated(issue: number): Promise<void> {
|
|
193
|
+
if (await retry_cleared(issue)) return
|
|
194
|
+
|
|
195
|
+
await run_event_stream_emit.emit(PARK, run_stalled.park_event(issue, RESUME_REFUSED))
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// A worker's escalation is not retried on its profile but resumed one up (joshuafolkken/kit#7357);
|
|
199
|
+
// the retry cap does not count it, since the profile order bounds it.
|
|
200
|
+
async function escalate_park(issue: number, park: RunEvent): Promise<void> {
|
|
201
|
+
await backlog_drive_escalate.escalate(issue, run_stalled.cause_in(park.text) ?? '', {
|
|
202
|
+
labels: async () => await stalled_labels(issue),
|
|
203
|
+
retry: resume_escalated,
|
|
204
|
+
})
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
async function settle_park(issue: number, park: RunEvent, context: SweepContext): Promise<void> {
|
|
208
|
+
await (is_escalation(park) ? escalate_park(issue, park) : retry_park(issue, park, context))
|
|
209
|
+
}
|
|
210
|
+
|
|
173
211
|
async function retry_all(
|
|
174
212
|
parks: ReadonlyArray<[number, RunEvent]>,
|
|
175
213
|
context: SweepContext,
|
|
@@ -177,7 +215,7 @@ async function retry_all(
|
|
|
177
215
|
const [first, ...rest] = parks
|
|
178
216
|
|
|
179
217
|
if (first === undefined) return
|
|
180
|
-
await
|
|
218
|
+
await settle_park(first[0], first[1], context)
|
|
181
219
|
await retry_all(rest, context)
|
|
182
220
|
}
|
|
183
221
|
|
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
// would otherwise read "will" as a command name.
|
|
7
7
|
const COMMAND_PATTERN = /`(?:pnpm )?josh ([a-z][a-z0-9:-]+)/gu
|
|
8
8
|
|
|
9
|
+
// A flag a command reference passes — `` `pnpm josh ship --detach` `` — read up to the next shell
|
|
10
|
+
// separator, so a flag of a chained command is not read as this command's (#7331).
|
|
11
|
+
const CODE_SPAN_PATTERN = /`([^`\n]+)`/gu
|
|
12
|
+
const COMMAND_SEPARATOR_PATTERN = /&&|\|\||[|;]/u
|
|
13
|
+
const INVOCATION_PATTERN = /\bjosh ([a-z][a-z0-9:-]+)/u
|
|
14
|
+
const FLAG_PATTERN = /(?<![\w-])--[a-z][a-z0-9-]*/gu
|
|
15
|
+
|
|
9
16
|
// A label the documents operate on — applied (`labels[]=…`), removed (`…/labels/<name>`) or created
|
|
10
17
|
// (`labels -f name=…`). Prose that merely names a label is not scanned; a mistyped name only breaks
|
|
11
18
|
// where a command carries it.
|
|
@@ -54,6 +61,26 @@ function command_references(text: string): Array<string> {
|
|
|
54
61
|
.filter((name) => !name.endsWith(':'))
|
|
55
62
|
}
|
|
56
63
|
|
|
64
|
+
// The long flags a text spells, without a `=value`: `--shard=<n>` reads as `--shard`.
|
|
65
|
+
function flag_names(text: string): Array<string> {
|
|
66
|
+
return text.match(FLAG_PATTERN) ?? []
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function invocation_flags(segment: string): Array<FlagReference> {
|
|
70
|
+
const match = INVOCATION_PATTERN.exec(segment)
|
|
71
|
+
if (match === null) return []
|
|
72
|
+
const [invocation, command = ''] = match
|
|
73
|
+
const rest = segment.slice(match.index + invocation.length)
|
|
74
|
+
|
|
75
|
+
return flag_names(rest).map((flag) => ({ command, flag }))
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function command_flag_references(text: string): Array<FlagReference> {
|
|
79
|
+
return matches(text, CODE_SPAN_PATTERN)
|
|
80
|
+
.flatMap((span) => (span[1] ?? '').split(COMMAND_SEPARATOR_PATTERN))
|
|
81
|
+
.flatMap((segment) => invocation_flags(segment))
|
|
82
|
+
}
|
|
83
|
+
|
|
57
84
|
// A `<placeholder>` inside a command, and `label:<n>` after the char class stops at `<`, both leave a
|
|
58
85
|
// token that is not a real label. Real labels never end in a colon and never carry angle brackets.
|
|
59
86
|
function is_real_label(token: string): boolean {
|
|
@@ -79,6 +106,11 @@ interface SectionReference {
|
|
|
79
106
|
heading: string
|
|
80
107
|
}
|
|
81
108
|
|
|
109
|
+
interface FlagReference {
|
|
110
|
+
command: string
|
|
111
|
+
flag: string
|
|
112
|
+
}
|
|
113
|
+
|
|
82
114
|
function section_references(text: string): Array<SectionReference> {
|
|
83
115
|
return matches(text.replaceAll(LINK_TARGET_PATTERN, ''), SECTION_PATTERN)
|
|
84
116
|
.map(({ groups }) => ({ file: groups?.['file'] ?? '', heading: groups?.['heading'] ?? '' }))
|
|
@@ -127,7 +159,9 @@ function reference_forms(title: string): Array<string> {
|
|
|
127
159
|
const document_scan = {
|
|
128
160
|
adjacent_references,
|
|
129
161
|
bare_arrow_references,
|
|
162
|
+
command_flag_references,
|
|
130
163
|
command_references,
|
|
164
|
+
flag_names,
|
|
131
165
|
label_references,
|
|
132
166
|
link_targets,
|
|
133
167
|
normalize_reference,
|
|
@@ -135,5 +169,5 @@ const document_scan = {
|
|
|
135
169
|
section_references,
|
|
136
170
|
}
|
|
137
171
|
|
|
138
|
-
export type { SectionReference }
|
|
172
|
+
export type { FlagReference, SectionReference }
|
|
139
173
|
export { document_scan }
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { FAILURE_REASON_CHECKS } from './git-pr-checks-eval'
|
|
2
|
+
|
|
3
|
+
// The check names a failed checks wait reported — `git-pr-checks-eval.ts`'s `PR checks failed
|
|
4
|
+
// (failed checks: <a>, <b>; …).` — read back by `josh lane:why` from a ship log and by `josh ship` into
|
|
5
|
+
// a followup `check` stop's record (joshuafolkken/kit#7333). The list ends at the next reason or the
|
|
6
|
+
// closing `).`, so a matrix name such as `Unit Tests (3/6)` stays whole.
|
|
7
|
+
|
|
8
|
+
const FAILED_CHECKS = new RegExp(
|
|
9
|
+
String.raw`${FAILURE_REASON_CHECKS}: (?<names>.+?)(?=; |\)\.$)`,
|
|
10
|
+
'gmu',
|
|
11
|
+
)
|
|
12
|
+
const NAME_SEPARATOR = ', '
|
|
13
|
+
|
|
14
|
+
// Every check name `text` lists as failed, in order, each list read whole.
|
|
15
|
+
function names_of(text: string): Array<string> {
|
|
16
|
+
return [...text.matchAll(FAILED_CHECKS)]
|
|
17
|
+
.flatMap((match) => (match.groups?.['names'] ?? '').split(NAME_SEPARATOR))
|
|
18
|
+
.map((name) => name.trim())
|
|
19
|
+
.filter((name) => name !== '')
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const git_pr_checks_failed = { names_of }
|
|
23
|
+
|
|
24
|
+
export { git_pr_checks_failed }
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// What every consultation-scope refusal group shares (joshuafolkken/kit#6586): the refusal's shape and
|
|
2
|
+
// the word the shell expands before the call, which may spell any write.
|
|
3
|
+
|
|
4
|
+
type Refusal = string | undefined
|
|
5
|
+
|
|
6
|
+
// A word the shell expands before the call, so it may spell any subcommand or flag.
|
|
7
|
+
const DYNAMIC = /[$`]/u
|
|
8
|
+
|
|
9
|
+
function is_dynamic(word: string): boolean {
|
|
10
|
+
return DYNAMIC.test(word)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function refusal(program: string, word: string): string {
|
|
14
|
+
return `\`${program} ${word}\`, an expansion that may spell a write`
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const implementation_shell_deny_expansion = { is_dynamic, refusal }
|
|
18
|
+
|
|
19
|
+
export { implementation_shell_deny_expansion }
|
|
20
|
+
export type { Refusal }
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { git_argv } from '#scripts/rules/git-argv'
|
|
2
|
+
import {
|
|
3
|
+
implementation_shell_deny_expansion as expansion,
|
|
4
|
+
type Refusal,
|
|
5
|
+
} from './implementation-shell-deny-expansion'
|
|
6
|
+
|
|
7
|
+
// The git calls a consultation scope refuses before execution (joshuafolkken/kit#6586).
|
|
8
|
+
|
|
9
|
+
// Subcommands that move a ref, the index, the worktree or the shared stash in every spelling.
|
|
10
|
+
const GIT_WRITES: ReadonlySet<string> = new Set([
|
|
11
|
+
'add',
|
|
12
|
+
'am',
|
|
13
|
+
'apply',
|
|
14
|
+
'bisect',
|
|
15
|
+
'checkout',
|
|
16
|
+
'checkout-index',
|
|
17
|
+
'cherry-pick',
|
|
18
|
+
'clean',
|
|
19
|
+
'commit',
|
|
20
|
+
'credential',
|
|
21
|
+
'fetch',
|
|
22
|
+
'filter-branch',
|
|
23
|
+
'gc',
|
|
24
|
+
'init',
|
|
25
|
+
'maintenance',
|
|
26
|
+
'merge',
|
|
27
|
+
'mv',
|
|
28
|
+
'pack-refs',
|
|
29
|
+
'prune',
|
|
30
|
+
'prune-packed',
|
|
31
|
+
'pull',
|
|
32
|
+
'push',
|
|
33
|
+
'read-tree',
|
|
34
|
+
'rebase',
|
|
35
|
+
'repack',
|
|
36
|
+
'replace',
|
|
37
|
+
'reset',
|
|
38
|
+
'restore',
|
|
39
|
+
'revert',
|
|
40
|
+
'rm',
|
|
41
|
+
'send-email',
|
|
42
|
+
'sparse-checkout',
|
|
43
|
+
'stage',
|
|
44
|
+
'submodule',
|
|
45
|
+
'switch',
|
|
46
|
+
'symbolic-ref',
|
|
47
|
+
'update-index',
|
|
48
|
+
'update-ref',
|
|
49
|
+
])
|
|
50
|
+
const BRANCH_CHANGE =
|
|
51
|
+
/^--(?:delete|move|copy|force|set-upstream-to|unset-upstream|edit-description)/u
|
|
52
|
+
const BRANCH_CHANGE_LETTERS = 'dDmMcCfu'
|
|
53
|
+
const CONFIG_READ = /^(?:--get|--list$|-l$)/u
|
|
54
|
+
// The flags that put `git branch` / `git tag` in list mode, where a name is a pattern, not a new ref.
|
|
55
|
+
const LIST_MODE =
|
|
56
|
+
/^(?:-l$|--list$|-n\d*$|--contains|--no-contains|--points-at|--merged|--no-merged)/u
|
|
57
|
+
// List flags whose value is the next word, so the value is not read as a new ref's name.
|
|
58
|
+
const LIST_VALUE_FLAGS: ReadonlySet<string> = new Set(['--sort', '--format'])
|
|
59
|
+
const REFLOG_WRITES: ReadonlySet<string> = new Set(['expire', 'delete'])
|
|
60
|
+
// A global that rewrites git's configuration or launcher, or an option that writes a file or runs one.
|
|
61
|
+
const GIT_WRITE_FLAGS = /^-c$|^--(?:config-env|exec-path|output|ext-diff|textconv)/u
|
|
62
|
+
const QUOTES = /['"\\]/gu
|
|
63
|
+
|
|
64
|
+
function is_branch_change(argument: string): boolean {
|
|
65
|
+
return BRANCH_CHANGE.test(argument) || git_argv.short_cluster_has(argument, BRANCH_CHANGE_LETTERS)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function names_a_reference(args: ReadonlyArray<string>): boolean {
|
|
69
|
+
return args.some(
|
|
70
|
+
(argument, index) => !argument.startsWith('-') && !LIST_VALUE_FLAGS.has(args[index - 1] ?? ''),
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// `git branch` / `git tag` only list when no word names a new ref, or a flag puts them in list mode.
|
|
75
|
+
function is_listing(args: ReadonlyArray<string>): boolean {
|
|
76
|
+
return !names_a_reference(args) || args.some((argument) => LIST_MODE.test(argument))
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Subcommands with a read spelling: the predicate says whether the arguments only read.
|
|
80
|
+
const GIT_READ_FORMS: ReadonlyMap<string, (args: ReadonlyArray<string>) => boolean> = new Map([
|
|
81
|
+
['branch', (args) => is_listing(args) && args.every((argument) => !is_branch_change(argument))],
|
|
82
|
+
['stash', (args) => ['list', 'show'].includes(args[0] ?? '')],
|
|
83
|
+
['worktree', (args) => args[0] === 'list'],
|
|
84
|
+
['notes', (args) => ['list', 'show'].includes(args[0] ?? '')],
|
|
85
|
+
['remote', (args) => ['', '-v', 'show', 'get-url'].includes(args[0] ?? '')],
|
|
86
|
+
['config', (args) => args.some((argument) => CONFIG_READ.test(argument))],
|
|
87
|
+
['tag', is_listing],
|
|
88
|
+
['reflog', (args) => !REFLOG_WRITES.has(args[0] ?? '')],
|
|
89
|
+
])
|
|
90
|
+
|
|
91
|
+
// A read spelling holds only when every argument is literal: an expanded one may be `-D` or `expire`.
|
|
92
|
+
function is_git_write(subcommand: string, args: ReadonlyArray<string>): boolean {
|
|
93
|
+
if (GIT_WRITES.has(subcommand)) return true
|
|
94
|
+
|
|
95
|
+
const read_form = GIT_READ_FORMS.get(subcommand)
|
|
96
|
+
if (read_form === undefined) return false
|
|
97
|
+
|
|
98
|
+
return args.some((argument) => expansion.is_dynamic(argument)) || !read_form(args)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// A quoted program runs as the bare one: `"git" push` is `git push`.
|
|
102
|
+
function parsed_git(segment: string): ReturnType<typeof git_argv.parse> {
|
|
103
|
+
return git_argv.parse(segment) ?? git_argv.parse(segment.replaceAll(QUOTES, ''))
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// A quoted subcommand runs as the bare one too: `git 'push'` is `git push`.
|
|
107
|
+
function subcommand_refusal(segment: string): Refusal {
|
|
108
|
+
const call = parsed_git(segment)
|
|
109
|
+
if (call?.subcommand === undefined) return undefined
|
|
110
|
+
if (expansion.is_dynamic(call.subcommand)) return expansion.refusal('git', call.subcommand)
|
|
111
|
+
|
|
112
|
+
const subcommand = call.subcommand.replaceAll(QUOTES, '')
|
|
113
|
+
const args = call.args.map((argument) => argument.replaceAll(QUOTES, ''))
|
|
114
|
+
|
|
115
|
+
return is_git_write(subcommand, args) ? `\`git ${subcommand}\`, a git write` : undefined
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function refusal(segment: string, args: ReadonlyArray<string>): Refusal {
|
|
119
|
+
if (args.some((argument) => GIT_WRITE_FLAGS.test(argument))) {
|
|
120
|
+
return 'a git option that rewrites its configuration, runs a program or writes a file'
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return subcommand_refusal(segment)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const implementation_shell_deny_git = { refusal }
|
|
127
|
+
|
|
128
|
+
export { implementation_shell_deny_git }
|