@joshuafolkken/kit 1.3000.0 → 1.3041.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/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-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-UTBVTCQN.js → chunk-IF3EIFK4.js} +267 -153
- 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-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-WW3TX742.js → chunk-Z3WGHIVB.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 +1907 -1876
- 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 +551 -536
- package/dist/hooks/pretool-guard.js +7 -7
- package/dist/hooks/session-lang.js +292 -15
- 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/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-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-render-condition.ts +10 -1
- package/scripts/run/board/run-board-render-title.ts +7 -0
- package/scripts/run/board/run-board-settle.ts +16 -2
- package/scripts/run/board/run-board-snapshot.ts +4 -0
- package/scripts/run/board/run-board-status.ts +11 -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
|
@@ -1,103 +1,18 @@
|
|
|
1
1
|
import { canonical_command } from '#scripts/josh/josh-aliases'
|
|
2
2
|
import { josh_read_only } from '#scripts/josh/josh-read-only'
|
|
3
3
|
import { gh_api } from '#scripts/rules/gh-api'
|
|
4
|
-
import {
|
|
4
|
+
import type { ProgramCall } from '#scripts/rules/git-argv'
|
|
5
|
+
import {
|
|
6
|
+
implementation_shell_deny_expansion as expansion,
|
|
7
|
+
type Refusal,
|
|
8
|
+
} from './implementation-shell-deny-expansion'
|
|
9
|
+
import { implementation_shell_deny_git } from './implementation-shell-deny-git'
|
|
5
10
|
|
|
6
11
|
// The calls a consultation scope refuses before execution (joshuafolkken/kit#6586): the ones no
|
|
7
12
|
// later check can take back. Every other call runs — a runtime file it changes is restored after the
|
|
8
13
|
// call (`bash-revert.ts`), but a ref, the shared stash, a GitHub record or an installed dependency is
|
|
9
14
|
// not a runtime file.
|
|
10
15
|
|
|
11
|
-
type Refusal = string | undefined
|
|
12
|
-
|
|
13
|
-
// Subcommands that move a ref, the index, the worktree or the shared stash in every spelling.
|
|
14
|
-
const GIT_WRITES: ReadonlySet<string> = new Set([
|
|
15
|
-
'add',
|
|
16
|
-
'am',
|
|
17
|
-
'apply',
|
|
18
|
-
'bisect',
|
|
19
|
-
'checkout',
|
|
20
|
-
'checkout-index',
|
|
21
|
-
'cherry-pick',
|
|
22
|
-
'clean',
|
|
23
|
-
'commit',
|
|
24
|
-
'credential',
|
|
25
|
-
'fetch',
|
|
26
|
-
'filter-branch',
|
|
27
|
-
'gc',
|
|
28
|
-
'init',
|
|
29
|
-
'maintenance',
|
|
30
|
-
'merge',
|
|
31
|
-
'mv',
|
|
32
|
-
'pack-refs',
|
|
33
|
-
'prune',
|
|
34
|
-
'prune-packed',
|
|
35
|
-
'pull',
|
|
36
|
-
'push',
|
|
37
|
-
'read-tree',
|
|
38
|
-
'rebase',
|
|
39
|
-
'repack',
|
|
40
|
-
'replace',
|
|
41
|
-
'reset',
|
|
42
|
-
'restore',
|
|
43
|
-
'revert',
|
|
44
|
-
'rm',
|
|
45
|
-
'send-email',
|
|
46
|
-
'sparse-checkout',
|
|
47
|
-
'stage',
|
|
48
|
-
'submodule',
|
|
49
|
-
'switch',
|
|
50
|
-
'symbolic-ref',
|
|
51
|
-
'update-index',
|
|
52
|
-
'update-ref',
|
|
53
|
-
])
|
|
54
|
-
const BRANCH_CHANGE =
|
|
55
|
-
/^--(?:delete|move|copy|force|set-upstream-to|unset-upstream|edit-description)/u
|
|
56
|
-
const BRANCH_CHANGE_LETTERS = 'dDmMcCfu'
|
|
57
|
-
const CONFIG_READ = /^(?:--get|--list$|-l$)/u
|
|
58
|
-
// The flags that put `git branch` / `git tag` in list mode, where a name is a pattern, not a new ref.
|
|
59
|
-
const LIST_MODE =
|
|
60
|
-
/^(?:-l$|--list$|-n\d*$|--contains|--no-contains|--points-at|--merged|--no-merged)/u
|
|
61
|
-
// List flags whose value is the next word, so the value is not read as a new ref's name.
|
|
62
|
-
const LIST_VALUE_FLAGS: ReadonlySet<string> = new Set(['--sort', '--format'])
|
|
63
|
-
const REFLOG_WRITES: ReadonlySet<string> = new Set(['expire', 'delete'])
|
|
64
|
-
// A global that rewrites git's configuration or launcher, or an option that writes a file or runs one.
|
|
65
|
-
const GIT_WRITE_FLAGS = /^-c$|^--(?:config-env|exec-path|output|ext-diff|textconv)/u
|
|
66
|
-
// A word the shell expands before the call, so it may spell any subcommand or flag.
|
|
67
|
-
const DYNAMIC = /[$`]/u
|
|
68
|
-
const QUOTES = /['"\\]/gu
|
|
69
|
-
|
|
70
|
-
function is_dynamic(word: string): boolean {
|
|
71
|
-
return DYNAMIC.test(word)
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function is_branch_change(argument: string): boolean {
|
|
75
|
-
return BRANCH_CHANGE.test(argument) || git_argv.short_cluster_has(argument, BRANCH_CHANGE_LETTERS)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function names_a_reference(args: ReadonlyArray<string>): boolean {
|
|
79
|
-
return args.some(
|
|
80
|
-
(argument, index) => !argument.startsWith('-') && !LIST_VALUE_FLAGS.has(args[index - 1] ?? ''),
|
|
81
|
-
)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// `git branch` / `git tag` only list when no word names a new ref, or a flag puts them in list mode.
|
|
85
|
-
function is_listing(args: ReadonlyArray<string>): boolean {
|
|
86
|
-
return !names_a_reference(args) || args.some((argument) => LIST_MODE.test(argument))
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Subcommands with a read spelling: the predicate says whether the arguments only read.
|
|
90
|
-
const GIT_READ_FORMS: ReadonlyMap<string, (args: ReadonlyArray<string>) => boolean> = new Map([
|
|
91
|
-
['branch', (args) => is_listing(args) && args.every((argument) => !is_branch_change(argument))],
|
|
92
|
-
['stash', (args) => ['list', 'show'].includes(args[0] ?? '')],
|
|
93
|
-
['worktree', (args) => args[0] === 'list'],
|
|
94
|
-
['notes', (args) => ['list', 'show'].includes(args[0] ?? '')],
|
|
95
|
-
['remote', (args) => ['', '-v', 'show', 'get-url'].includes(args[0] ?? '')],
|
|
96
|
-
['config', (args) => args.some((argument) => CONFIG_READ.test(argument))],
|
|
97
|
-
['tag', is_listing],
|
|
98
|
-
['reflog', (args) => !REFLOG_WRITES.has(args[0] ?? '')],
|
|
99
|
-
])
|
|
100
|
-
|
|
101
16
|
// A verb that changes a GitHub record or the checkout. The first verb after the group is the call's,
|
|
102
17
|
// so a flag between the group and the verb (`gh issue -R o/r close`) does not hide it, and a read
|
|
103
18
|
// verb's argument (`gh issue list --search close`) is not read as one.
|
|
@@ -218,45 +133,6 @@ const JOSH_SHARED_WRITES: ReadonlySet<string> = new Set([
|
|
|
218
133
|
'uninstall',
|
|
219
134
|
])
|
|
220
135
|
|
|
221
|
-
function expansion_refusal(program: string, word: string): string {
|
|
222
|
-
return `\`${program} ${word}\`, an expansion that may spell a write`
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// A read spelling holds only when every argument is literal: an expanded one may be `-D` or `expire`.
|
|
226
|
-
function is_git_write(subcommand: string, args: ReadonlyArray<string>): boolean {
|
|
227
|
-
if (GIT_WRITES.has(subcommand)) return true
|
|
228
|
-
|
|
229
|
-
const read_form = GIT_READ_FORMS.get(subcommand)
|
|
230
|
-
if (read_form === undefined) return false
|
|
231
|
-
|
|
232
|
-
return args.some((argument) => is_dynamic(argument)) || !read_form(args)
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// A quoted program runs as the bare one: `"git" push` is `git push`.
|
|
236
|
-
function parsed_git(segment: string): ReturnType<typeof git_argv.parse> {
|
|
237
|
-
return git_argv.parse(segment) ?? git_argv.parse(segment.replaceAll(QUOTES, ''))
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// A quoted subcommand runs as the bare one too: `git 'push'` is `git push`.
|
|
241
|
-
function subcommand_refusal(segment: string): Refusal {
|
|
242
|
-
const call = parsed_git(segment)
|
|
243
|
-
if (call?.subcommand === undefined) return undefined
|
|
244
|
-
if (is_dynamic(call.subcommand)) return expansion_refusal('git', call.subcommand)
|
|
245
|
-
|
|
246
|
-
const subcommand = call.subcommand.replaceAll(QUOTES, '')
|
|
247
|
-
const args = call.args.map((argument) => argument.replaceAll(QUOTES, ''))
|
|
248
|
-
|
|
249
|
-
return is_git_write(subcommand, args) ? `\`git ${subcommand}\`, a git write` : undefined
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
function git_refusal(segment: string, args: ReadonlyArray<string>): Refusal {
|
|
253
|
-
if (args.some((argument) => GIT_WRITE_FLAGS.test(argument))) {
|
|
254
|
-
return 'a git option that rewrites its configuration, runs a program or writes a file'
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
return subcommand_refusal(segment)
|
|
258
|
-
}
|
|
259
|
-
|
|
260
136
|
function is_gh_api_write(args: ReadonlyArray<string>): boolean {
|
|
261
137
|
if (args.includes('graphql')) return args.some((argument) => GRAPHQL_MUTATION.test(argument))
|
|
262
138
|
|
|
@@ -264,15 +140,15 @@ function is_gh_api_write(args: ReadonlyArray<string>): boolean {
|
|
|
264
140
|
}
|
|
265
141
|
|
|
266
142
|
function is_gh_verb(argument: string): boolean {
|
|
267
|
-
return GH_WRITES.has(argument) || GH_READS.has(argument) || is_dynamic(argument)
|
|
143
|
+
return GH_WRITES.has(argument) || GH_READS.has(argument) || expansion.is_dynamic(argument)
|
|
268
144
|
}
|
|
269
145
|
|
|
270
146
|
function verb_refusal(group: string, args: ReadonlyArray<string>): Refusal {
|
|
271
147
|
const verb = args.slice(1).find((argument) => is_gh_verb(argument))
|
|
272
148
|
if (verb === undefined || GH_READS.has(verb)) return undefined
|
|
273
149
|
|
|
274
|
-
return is_dynamic(verb)
|
|
275
|
-
?
|
|
150
|
+
return expansion.is_dynamic(verb)
|
|
151
|
+
? expansion.refusal(`gh ${group}`, verb)
|
|
276
152
|
: `\`gh ${group} ${verb}\`, a GitHub write`
|
|
277
153
|
}
|
|
278
154
|
|
|
@@ -280,7 +156,7 @@ function gh_refusal(args: ReadonlyArray<string>): Refusal {
|
|
|
280
156
|
const group = args[0] ?? ''
|
|
281
157
|
if (group === 'api') return is_gh_api_write(args) ? 'a `gh api` call other than GET' : undefined
|
|
282
158
|
|
|
283
|
-
return is_dynamic(group) ?
|
|
159
|
+
return expansion.is_dynamic(group) ? expansion.refusal('gh', group) : verb_refusal(group, args)
|
|
284
160
|
}
|
|
285
161
|
|
|
286
162
|
function is_flag(argument: string): boolean {
|
|
@@ -308,7 +184,7 @@ function package_actions(call: ProgramCall): Array<string> {
|
|
|
308
184
|
}
|
|
309
185
|
|
|
310
186
|
function action_refusal(manager: string, action: string): Refusal {
|
|
311
|
-
if (is_dynamic(action)) return
|
|
187
|
+
if (expansion.is_dynamic(action)) return expansion.refusal(manager, action)
|
|
312
188
|
|
|
313
189
|
return PACKAGE_WRITES.has(action) ? `\`${action}\`, a dependency change` : undefined
|
|
314
190
|
}
|
|
@@ -321,7 +197,7 @@ function package_refusal(call: ProgramCall): Refusal {
|
|
|
321
197
|
|
|
322
198
|
function josh_refusal(args: ReadonlyArray<string>): Refusal {
|
|
323
199
|
const command = canonical_command(args[0] ?? '')
|
|
324
|
-
if (is_dynamic(command)) return
|
|
200
|
+
if (expansion.is_dynamic(command)) return expansion.refusal('josh', command)
|
|
325
201
|
if (!JOSH_SHARED_WRITES.has(command)) return undefined
|
|
326
202
|
|
|
327
203
|
const rule = josh_read_only.refusal(args)
|
|
@@ -331,8 +207,8 @@ function josh_refusal(args: ReadonlyArray<string>): Refusal {
|
|
|
331
207
|
|
|
332
208
|
// The irreversible operation the call is, or `undefined` when it runs.
|
|
333
209
|
function refusal(segment: string, call: ProgramCall): Refusal {
|
|
334
|
-
if (is_dynamic(call.name)) return `\`${call.name}\`, a program an expansion names`
|
|
335
|
-
if (call.name === 'git') return
|
|
210
|
+
if (expansion.is_dynamic(call.name)) return `\`${call.name}\`, a program an expansion names`
|
|
211
|
+
if (call.name === 'git') return implementation_shell_deny_git.refusal(segment, call.args)
|
|
336
212
|
if (call.name === 'gh') return gh_refusal(call.args)
|
|
337
213
|
if (call.name === 'josh') return josh_refusal(call.args)
|
|
338
214
|
|
|
@@ -35,10 +35,27 @@ const DYNAMIC_PATH = /[$`*?{}\\]/u
|
|
|
35
35
|
// runs: `if x; then git push; fi` and `(cd x && git push)` launch `git push`.
|
|
36
36
|
const COMPOUND_HEAD = /^\s*(?:[({!]\s*|(?:if|then|else|elif|while|until|do)\s+)+/u
|
|
37
37
|
const COMPOUND_CLOSERS = new Set([')', '}', ' ', '\t', '\n'])
|
|
38
|
-
const KEYWORDS: ReadonlySet<string> = new Set([
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
const KEYWORDS: ReadonlySet<string> = new Set([
|
|
39
|
+
'for',
|
|
40
|
+
'do',
|
|
41
|
+
'done',
|
|
42
|
+
'then',
|
|
43
|
+
'else',
|
|
44
|
+
'fi',
|
|
45
|
+
'case',
|
|
46
|
+
'select',
|
|
47
|
+
'function',
|
|
48
|
+
'esac',
|
|
49
|
+
])
|
|
50
|
+
// The shared cut reads a `case` arm and a `{` function body as segments of their own
|
|
51
|
+
// (joshuafolkken/kit#7340). What it leaves unread — a function head with another body, or an arm
|
|
52
|
+
// pattern still on its segment — is refused rather than guessed.
|
|
53
|
+
const FUNCTION_START = /^(?:function\s|[\w.:-]+\s*\(\s*\))/u
|
|
54
|
+
// `body_of` has stripped the head's closing `)` and trailing blanks with the other closers.
|
|
55
|
+
const FUNCTION_HEAD = /^(?:function\s+)?[\w.:-]+(?:\s*\()?$/u
|
|
56
|
+
// An arm's command may touch its `)` (`b)git push`), so a `)` anywhere in the first word, outside an
|
|
57
|
+
// expansion, is a pattern.
|
|
58
|
+
const UNREAD_ARMS: ReadonlyArray<RegExp> = [/^case\s[\s\S]*\)/u, /^[^\s$`]*\)/u]
|
|
42
59
|
const ARGUMENT_QUOTES = /['"\\]/gu
|
|
43
60
|
const TIME_PROGRAM = /(?:^|\/)time$/u
|
|
44
61
|
const TIME_WRITE = /^-(?:[A-Za-z]*o|-o)/u
|
|
@@ -174,9 +191,15 @@ function command_refusal(segment: string, root: string): Refusal {
|
|
|
174
191
|
return call === undefined ? undefined : call_refusal(body_of(segment), call, root)
|
|
175
192
|
}
|
|
176
193
|
|
|
194
|
+
function is_unread_body(body: string): boolean {
|
|
195
|
+
if (FUNCTION_START.test(body)) return !FUNCTION_HEAD.test(body)
|
|
196
|
+
|
|
197
|
+
return UNREAD_ARMS.some((pattern) => pattern.test(body))
|
|
198
|
+
}
|
|
199
|
+
|
|
177
200
|
function segment_refusal(segment: string, root: string): Refusal {
|
|
178
201
|
if (wrapper_writes(segment)) return 'a time output file'
|
|
179
|
-
if (
|
|
202
|
+
if (is_unread_body(body_of(segment))) return 'a `case` arm or function body'
|
|
180
203
|
|
|
181
204
|
const target = redirected_paths(segment).find((redirected) => unsafe_path(redirected, root))
|
|
182
205
|
|
|
@@ -12,9 +12,9 @@ import { test_declared_logic } from '#scripts/test/test-declared-logic'
|
|
|
12
12
|
// code", so the hook that delivers it is the one that sees that write: the first `Edit` / `Write` of a
|
|
13
13
|
// runtime file in the session.
|
|
14
14
|
//
|
|
15
|
-
// **A runtime file only.**
|
|
16
|
-
//
|
|
17
|
-
// spends it. A path outside the working tree
|
|
15
|
+
// **A runtime file only.** `test_declared_logic.is_exempt` shares the commit-time classification;
|
|
16
|
+
// project scratch records in `.josh/tmp` are also non-runtime. A doc, prompt or scratch record neither
|
|
17
|
+
// shows the notice nor spends it. A path outside the working tree is not this project's code.
|
|
18
18
|
//
|
|
19
19
|
// **Once per session**, on a stamp keyed by the transcript like every other guard record here. A stamp
|
|
20
20
|
// that cannot be written stays silent rather than repeating the notice on every edit.
|
|
@@ -44,8 +44,8 @@ function is_external(relative: string): boolean {
|
|
|
44
44
|
return relative.startsWith(PARENT_PREFIX) || path.isAbsolute(relative)
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
function is_scratch_record(file_path: string): boolean {
|
|
48
|
-
const relative = path.relative(
|
|
47
|
+
function is_scratch_record(file_path: string, scratch_root = tmpdir()): boolean {
|
|
48
|
+
const relative = path.relative(scratch_root, file_path)
|
|
49
49
|
const is_scratch = !is_external(relative)
|
|
50
50
|
|
|
51
51
|
return is_scratch && ['.md', '.json', '.txt'].includes(path.extname(file_path))
|
|
@@ -66,7 +66,10 @@ function is_runtime_file(
|
|
|
66
66
|
): boolean {
|
|
67
67
|
const relative = path.relative(root, path.resolve(root, file_path))
|
|
68
68
|
|
|
69
|
-
if (
|
|
69
|
+
if (
|
|
70
|
+
is_scratch_record(path.resolve(root, file_path), path.join(root, '.josh/tmp')) ||
|
|
71
|
+
should_skip_external(relative, path.resolve(root, file_path), should_include_external)
|
|
72
|
+
) {
|
|
70
73
|
return false
|
|
71
74
|
}
|
|
72
75
|
|
|
@@ -2,6 +2,7 @@ import { git_gh_repo } from '#scripts/gh/git-gh-repo'
|
|
|
2
2
|
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
3
3
|
import { session_cite } from '#scripts/issue/session-cite'
|
|
4
4
|
import { bounded_pool } from '#scripts/lib/bounded-pool'
|
|
5
|
+
import { home_tilde } from '#scripts/lib/home-tilde'
|
|
5
6
|
import { stdout_on_stderr } from '#scripts/lib/stdout-on-stderr'
|
|
6
7
|
import { telegram_test } from '#scripts/notify/telegram-test'
|
|
7
8
|
import type { CliValues } from '#scripts/notify/telegram-test-logic'
|
|
@@ -71,13 +72,14 @@ async function issue_url_of(issue: string): Promise<string | undefined> {
|
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
|
|
74
|
-
// The body is the reply's opening copied into a Telegram, so its bare `#N` are linked (`issue-citation.md`)
|
|
75
|
+
// The body is the reply's opening copied into a Telegram, so its bare `#N` are linked (`issue-citation.md`)
|
|
76
|
+
// and its home directory is written as `~` before the cut (joshuafolkken/kit#7342).
|
|
75
77
|
// The choices are the reply's own decision lines (joshuafolkken/kit#3961).
|
|
76
78
|
function notify_values(issue_url: string | undefined, action: NotifyAction): CliValues {
|
|
77
79
|
const { recommended, alternative } = action.decision
|
|
78
80
|
const values: CliValues = {
|
|
79
81
|
'task-type': 'confirmation',
|
|
80
|
-
body: session_cite.text(summary_of(action.message)),
|
|
82
|
+
body: session_cite.text(summary_of(home_tilde.mask(action.message))),
|
|
81
83
|
recommended,
|
|
82
84
|
...(alternative !== undefined && { alternative: [alternative] }),
|
|
83
85
|
}
|
|
@@ -155,7 +155,7 @@ function carry_npmrc_setting(template: string, npmrc: string, setting: MovedNpmr
|
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
// Lines kit's own install needs but a consumer must not receive, fenced by `# kit-only:start` and
|
|
158
|
-
// `# kit-only:end` — e.g.
|
|
158
|
+
// `# kit-only:end` — e.g. a cross-major override of ESLint's dependencies (#5500).
|
|
159
159
|
const KIT_ONLY_REGION_PATTERN =
|
|
160
160
|
/^[ \t]*# kit-only:start\b.*\n(?:.*\n)*?[ \t]*# kit-only:end\b.*\n/gmu
|
|
161
161
|
|
|
@@ -16,11 +16,11 @@ import { markdown_section } from './markdown-section'
|
|
|
16
16
|
// of an Issue already open reuses `exclusion_of` rather than a second list (joshuafolkken/kit#3854).
|
|
17
17
|
// The order: `--no-auto-ok`, a filing to another repository (whose own `backlogrun` would implement
|
|
18
18
|
// and merge it though nobody opted that repository in), a label that keeps a person in the loop, and
|
|
19
|
-
// last the body's judgement declaration (`JUDGEMENT_NEEDED` / `JUDGEMENT_NOT_NEEDED`): whether a
|
|
19
|
+
// last the body's recorded user prohibition or judgement declaration (`JUDGEMENT_NEEDED` / `JUDGEMENT_NOT_NEEDED`): whether a
|
|
20
20
|
// policy decision, an external account or a human visual check is needed.
|
|
21
21
|
|
|
22
22
|
interface AutoOkFiling {
|
|
23
|
-
// `--no-auto-ok`:
|
|
23
|
+
// `--no-auto-ok`: an existing exclusion or a verified original user prohibition.
|
|
24
24
|
is_opted_out: boolean
|
|
25
25
|
is_cross_repository: boolean
|
|
26
26
|
// Every label the filing carries, including the ones the body's declarations add.
|
|
@@ -53,6 +53,26 @@ const APPLIED: AutoOkDecision = {
|
|
|
53
53
|
is_applied: true,
|
|
54
54
|
reason: 'no exclusion holds and the body declares no judgement is needed',
|
|
55
55
|
}
|
|
56
|
+
const CONSTRAINT_HEADING = issue_body_keys.heading('auto_execution_constraint')
|
|
57
|
+
const CONSTRAINT_SOURCE = `${issue_body_keys.prefix('constraint_source')} user`
|
|
58
|
+
const CONSTRAINT_REFERENCE = `${issue_body_keys.prefix('constraint_reference')} `
|
|
59
|
+
const CONSTRAINT_INSTRUCTION = `${issue_body_keys.prefix('constraint_instruction')} `
|
|
60
|
+
const CONSTRAINT_FIELDS = [CONSTRAINT_REFERENCE, CONSTRAINT_INSTRUCTION]
|
|
61
|
+
const CONSTRAINT_PROBLEM = `--no-auto-ok without an exclusion needs ${CONSTRAINT_HEADING}: ${CONSTRAINT_SOURCE}, ${CONSTRAINT_REFERENCE}<original user prompt or comment URL>, ${CONSTRAINT_INSTRUCTION}<verbatim prohibition>; verify the cited user instruction, not an agent inference or a later judgement. Kickoff ending at planning is not an opt-out.`
|
|
62
|
+
const USER_CONSTRAINT: AutoOkDecision = {
|
|
63
|
+
is_applied: false,
|
|
64
|
+
reason: 'a user prohibition is recorded under 自動実行の制約',
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function user_constraint_of(body: string): AutoOkDecision | undefined {
|
|
68
|
+
const section = markdown_section.section_lines(body, CONSTRAINT_HEADING).join('\n')
|
|
69
|
+
const lines = markdown_section.unfenced_lines(section).map((line) => line.trim())
|
|
70
|
+
const has_fields = CONSTRAINT_FIELDS.every((prefix) =>
|
|
71
|
+
lines.some((line) => line.startsWith(prefix) && line.slice(prefix.length).trim() !== ''),
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
return has_fields && lines.includes(CONSTRAINT_SOURCE) ? USER_CONSTRAINT : undefined
|
|
75
|
+
}
|
|
56
76
|
|
|
57
77
|
// The labels that keep a person in the loop, each with the reason it withholds `auto-ok`. A
|
|
58
78
|
// `breaking-change` declared in the body arrives here as its label, added before the decision.
|
|
@@ -102,18 +122,37 @@ function decision_problem(body: string): string | undefined {
|
|
|
102
122
|
return has_rule ? DECISION_PROBLEM : undefined
|
|
103
123
|
}
|
|
104
124
|
|
|
125
|
+
function body_decision(body: string): AutoOkDecision {
|
|
126
|
+
return user_constraint_of(body) ?? (judgement_of(body) === false ? APPLIED : JUDGEMENT)
|
|
127
|
+
}
|
|
128
|
+
|
|
105
129
|
function decide(filing: AutoOkFiling): AutoOkDecision {
|
|
106
130
|
if (filing.is_opted_out) return OPTED_OUT
|
|
107
131
|
if (filing.is_cross_repository) return CROSS_REPOSITORY
|
|
108
132
|
|
|
109
|
-
return exclusion_of(filing.labels) ?? (
|
|
133
|
+
return exclusion_of(filing.labels) ?? body_decision(filing.body)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function opt_out_problem(filing: AutoOkFiling): string | undefined {
|
|
137
|
+
if (!filing.is_opted_out || user_constraint_of(filing.body) !== undefined) return undefined
|
|
138
|
+
const without_opt_out = decide({ ...filing, is_opted_out: false })
|
|
139
|
+
|
|
140
|
+
return without_opt_out.is_applied ? CONSTRAINT_PROBLEM : undefined
|
|
110
141
|
}
|
|
111
142
|
|
|
112
143
|
function line_of(decision: AutoOkDecision): string {
|
|
113
144
|
return `auto-ok: ${decision.is_applied ? 'applied' : 'not applied'} — ${decision.reason}`
|
|
114
145
|
}
|
|
115
146
|
|
|
116
|
-
const issue_auto_ok = {
|
|
147
|
+
const issue_auto_ok = {
|
|
148
|
+
declaration_problem,
|
|
149
|
+
decide,
|
|
150
|
+
decision_problem,
|
|
151
|
+
exclusion_of,
|
|
152
|
+
line_of,
|
|
153
|
+
opt_out_problem,
|
|
154
|
+
user_constraint_of,
|
|
155
|
+
}
|
|
117
156
|
|
|
118
157
|
export type { AutoOkDecision, AutoOkFiling }
|
|
119
158
|
export { issue_auto_ok }
|
|
@@ -42,6 +42,9 @@ const KEYS = {
|
|
|
42
42
|
sample_gate: { ja: '実施可能条件', en: 'Sample gate' },
|
|
43
43
|
not_before: { ja: '実施可能日', en: 'Not before' },
|
|
44
44
|
source: { ja: '出どころ', en: 'Source' },
|
|
45
|
+
constraint_source: { ja: '出所', en: 'Constraint source' },
|
|
46
|
+
constraint_reference: { ja: '参照', en: 'Constraint reference' },
|
|
47
|
+
constraint_instruction: { ja: '指示', en: 'Constraint instruction' },
|
|
45
48
|
} as const satisfies Record<string, Row>
|
|
46
49
|
|
|
47
50
|
const VALUES = {
|
|
@@ -72,6 +75,7 @@ const HEADINGS = {
|
|
|
72
75
|
baseline: { ja: 'ベースライン', en: 'Baseline' },
|
|
73
76
|
reproduction: { ja: '再現', en: 'Reproduction' },
|
|
74
77
|
expected_effect: { ja: '期待効果', en: 'Expected effect' },
|
|
78
|
+
auto_execution_constraint: { ja: '自動実行の制約', en: 'Automatic execution constraint' },
|
|
75
79
|
} as const satisfies Record<string, Row>
|
|
76
80
|
|
|
77
81
|
// The size estimate's value: `<files>` and `<lines>` stand for its counts.
|
|
@@ -3,6 +3,7 @@ import { issue_number_shape } from '#scripts/issue/issue-number-shape'
|
|
|
3
3
|
import { cli_body } from '#scripts/josh/cli-body'
|
|
4
4
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
5
5
|
import { error_text } from '#scripts/lib/error-message'
|
|
6
|
+
import { issue_outcome } from './issue-outcome'
|
|
6
7
|
|
|
7
8
|
// `josh issue:comment <N> --body <text> | --body-file <path>` — post one comment to an issue (a PR
|
|
8
9
|
// comment is an issue comment over REST) and print the comment URL.
|
|
@@ -28,7 +29,12 @@ interface CommentRequest {
|
|
|
28
29
|
|
|
29
30
|
// The read is strict: an unknown flag refuses the call rather than being
|
|
30
31
|
// ignored. `cli_body.resolve` owns the both-flags-at-once refusal and the file read.
|
|
31
|
-
const OPTIONS = {
|
|
32
|
+
const OPTIONS = {
|
|
33
|
+
body: { type: 'string' },
|
|
34
|
+
'body-file': { type: 'string' },
|
|
35
|
+
outcome: { type: 'string' },
|
|
36
|
+
'evidence-url': { type: 'string' },
|
|
37
|
+
} as const
|
|
32
38
|
|
|
33
39
|
// `resolve` may throw when both body flags are given, which `run` reports — the message names the two
|
|
34
40
|
// flags a caller must pick between.
|
|
@@ -47,7 +53,14 @@ function parse_request(argv: ReadonlyArray<string>): CommentRequest | undefined
|
|
|
47
53
|
|
|
48
54
|
if (body === undefined || body.length === 0) return undefined
|
|
49
55
|
|
|
50
|
-
return {
|
|
56
|
+
return {
|
|
57
|
+
issue_number,
|
|
58
|
+
body: issue_outcome.body_of({
|
|
59
|
+
body,
|
|
60
|
+
summary: parsed.values.outcome,
|
|
61
|
+
url: parsed.values['evidence-url'],
|
|
62
|
+
}),
|
|
63
|
+
}
|
|
51
64
|
}
|
|
52
65
|
|
|
53
66
|
// A both-flags refusal and a file-read failure both surface as an `Error` from `resolve`, and its
|
|
@@ -4,6 +4,7 @@ import { cli_body } from '#scripts/josh/cli-body'
|
|
|
4
4
|
import { cli_flags } from '#scripts/lib/cli-flags'
|
|
5
5
|
import { error_text } from '#scripts/lib/error-message'
|
|
6
6
|
import { run_hold_cli } from '#scripts/run/hold/run-hold-cli'
|
|
7
|
+
import { issue_outcome } from './issue-outcome'
|
|
7
8
|
|
|
8
9
|
// The shape every evidence exit shares — `josh issue:already-done` and `josh issue:measured`: the
|
|
9
10
|
// evidence comment, the exit's own finishing write, then the `run:release`, in that order.
|
|
@@ -14,7 +15,7 @@ import { run_hold_cli } from '#scripts/run/hold/run-hold-cli'
|
|
|
14
15
|
|
|
15
16
|
const FAILURE_EXIT_CODE = 1
|
|
16
17
|
const EVIDENCE_FILE_FLAG = '--evidence-file'
|
|
17
|
-
const OPTIONS = { 'evidence-file': { type: 'string' } } as const
|
|
18
|
+
const OPTIONS = { 'evidence-file': { type: 'string' }, outcome: { type: 'string' } } as const
|
|
18
19
|
|
|
19
20
|
interface EvidenceRequest {
|
|
20
21
|
issue_number: string
|
|
@@ -41,7 +42,10 @@ function parse_request(argv: ReadonlyArray<string>): EvidenceRequest | undefined
|
|
|
41
42
|
const evidence = cli_body.read_file_or_stdin(file_path).trim()
|
|
42
43
|
if (evidence.length === 0) throw new Error(`Evidence file is empty: ${file_path}`)
|
|
43
44
|
|
|
44
|
-
return {
|
|
45
|
+
return {
|
|
46
|
+
issue_number,
|
|
47
|
+
evidence: issue_outcome.body_of({ body: evidence, summary: parsed.values.outcome }),
|
|
48
|
+
}
|
|
45
49
|
}
|
|
46
50
|
|
|
47
51
|
// A file-read failure or an empty file is an `Error` naming the path, printed as-is; every other
|
|
@@ -23,6 +23,7 @@ import { issue_file_deferral } from './issue-file-deferral'
|
|
|
23
23
|
import { issue_file_fold } from './issue-file-fold'
|
|
24
24
|
import { issue_file_interrupt } from './issue-file-interrupt'
|
|
25
25
|
import { issue_file_pass, type Filing } from './issue-file-pass'
|
|
26
|
+
import { issue_file_worker } from './issue-file-worker'
|
|
26
27
|
import { has_label_name, has_parked_label, RUN_SOLO_LABEL } from './issue-labels'
|
|
27
28
|
import { issue_priority } from './issue-priority'
|
|
28
29
|
import { issue_release_cli } from './issue-release-cli'
|
|
@@ -72,7 +73,10 @@ function party_refusal(target: string): string | undefined {
|
|
|
72
73
|
// rather than printed, so it is printed here — otherwise the filing fails with no reason given. A label
|
|
73
74
|
// the create applies is provisioned first, so it never arrives with a generated color.
|
|
74
75
|
async function create(filing: Filing, labels: ReadonlyArray<string>): Promise<string | undefined> {
|
|
75
|
-
repository_labels.ensure_labels(
|
|
76
|
+
repository_labels.ensure_labels(
|
|
77
|
+
filing.target,
|
|
78
|
+
issue_file_worker.label_definitions(filing, labels),
|
|
79
|
+
)
|
|
76
80
|
const request = git_gh_issue_write.issue_create_request({
|
|
77
81
|
title: filing.args.title,
|
|
78
82
|
body: filing.body,
|
|
@@ -2,10 +2,11 @@ import { git_gh_issue_list, MAX_SCANNED } from '#scripts/gh/git-gh-issue-list'
|
|
|
2
2
|
import type { ImplementRate } from '#scripts/lane/lane-implement-rate'
|
|
3
3
|
import { lane_net_read } from '#scripts/lane/lane-net-read'
|
|
4
4
|
import type { SizeRatios } from '#scripts/lane/lane-size-stats'
|
|
5
|
-
import { issue_auto_ok } from './issue-auto-ok'
|
|
5
|
+
import { issue_auto_ok, type AutoOkFiling } from './issue-auto-ok'
|
|
6
6
|
import { issue_cap_files } from './issue-cap-files'
|
|
7
7
|
import { issue_file, type FileArguments } from './issue-file'
|
|
8
8
|
import { issue_file_lane_hint } from './issue-file-lane-hint'
|
|
9
|
+
import { issue_file_worker } from './issue-file-worker'
|
|
9
10
|
import { issue_lint_cli } from './issue-lint-cli'
|
|
10
11
|
import { issue_priority } from './issue-priority'
|
|
11
12
|
import { issue_sample_required } from './issue-sample-required'
|
|
@@ -32,6 +33,15 @@ interface Filing {
|
|
|
32
33
|
scouted?: ScoutOutcome | undefined
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
function auto_ok_filing(filing: Filing): AutoOkFiling {
|
|
37
|
+
return {
|
|
38
|
+
is_opted_out: filing.args.is_auto_ok_opted_out,
|
|
39
|
+
is_cross_repository: !issue_file.is_same_repository(filing.target, filing.current),
|
|
40
|
+
labels: issue_file.labels_of(filing.args, filing.body),
|
|
41
|
+
body: filing.body,
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
35
45
|
// Every refusal the body and the arguments carry, read locally — `[]` when the body is admitted.
|
|
36
46
|
function refusals_of(
|
|
37
47
|
filing: Filing,
|
|
@@ -43,6 +53,7 @@ function refusals_of(
|
|
|
43
53
|
size_estimate.guide_problem(filing.body, filing.args.route, rate, growth),
|
|
44
54
|
issue_sample_required.problem(filing.body),
|
|
45
55
|
issue_auto_ok.declaration_problem(filing.body),
|
|
56
|
+
issue_auto_ok.opt_out_problem(auto_ok_filing(filing)),
|
|
46
57
|
issue_priority.problem(filing.body, filing.args.labels),
|
|
47
58
|
issue_file.origin_problem(filing.body, filing.target, filing.current),
|
|
48
59
|
]
|
|
@@ -157,12 +168,7 @@ async function is_scout_clear(filing: Filing): Promise<boolean> {
|
|
|
157
168
|
// The decision reads the labels the body's declarations add, so a declared breaking change is excluded
|
|
158
169
|
// like its label.
|
|
159
170
|
function labels_of(filing: Filing): ReadonlyArray<string> | undefined {
|
|
160
|
-
const auto_ok = issue_auto_ok.decide(
|
|
161
|
-
is_opted_out: filing.args.is_auto_ok_opted_out,
|
|
162
|
-
is_cross_repository: !issue_file.is_same_repository(filing.target, filing.current),
|
|
163
|
-
labels: issue_file.labels_of(filing.args, filing.body),
|
|
164
|
-
body: filing.body,
|
|
165
|
-
})
|
|
171
|
+
const auto_ok = issue_auto_ok.decide(auto_ok_filing(filing))
|
|
166
172
|
|
|
167
173
|
console.info(issue_auto_ok.line_of(auto_ok))
|
|
168
174
|
const labels = issue_file.labels_of(filing.args, filing.body, auto_ok.is_applied)
|
|
@@ -224,6 +230,7 @@ async function labels_in_one_pass(filing: Filing): Promise<ReadonlyArray<string>
|
|
|
224
230
|
const verdicts = [
|
|
225
231
|
is_body_clear,
|
|
226
232
|
labels !== undefined,
|
|
233
|
+
issue_file_worker.is_worker_clear(filing, labels ?? filing.args.labels),
|
|
227
234
|
await is_source_clear(filing),
|
|
228
235
|
await is_wip_clear(filing),
|
|
229
236
|
await is_scout_clear(filing),
|