@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
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
import { run_event_stream, type RunEvent } from '#scripts/run/event/run-event-stream'
|
|
3
|
+
import { run_ship_stage } from '#scripts/run/ship/run-ship-stage'
|
|
4
|
+
import { lane_ledger, type LedgerEntry, type StageEntry } from './lane-ledger'
|
|
5
|
+
import { lane_stop_stats } from './lane-stop-stats'
|
|
6
|
+
|
|
7
|
+
// The bounded board stream is not a historical stage store. Completed ledger intervals survive
|
|
8
|
+
// compaction and archive rotation; merge them with surviving events before attributing lane time.
|
|
9
|
+
const { EVENT_KIND } = run_event_stream
|
|
10
|
+
const { PHASE, STAGE } = run_ship_stage
|
|
11
|
+
const SHIP_STAGES: ReadonlySet<string> = new Set([
|
|
12
|
+
...Object.values(STAGE),
|
|
13
|
+
lane_ledger.PRE_DETACH_STAGE,
|
|
14
|
+
])
|
|
15
|
+
|
|
16
|
+
function is_ship(entry: LedgerEntry, issue: number): entry is StageEntry {
|
|
17
|
+
return (
|
|
18
|
+
entry.kind === lane_ledger.KIND.STAGE && entry.issue === issue && SHIP_STAGES.has(entry.stage)
|
|
19
|
+
)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function event_at(at_ms: number, issue: number, words: string): RunEvent {
|
|
23
|
+
return {
|
|
24
|
+
pos: 0,
|
|
25
|
+
at: new Date(at_ms).toISOString(),
|
|
26
|
+
kind: EVENT_KIND.SHIP_STAGE,
|
|
27
|
+
text: `${issue_cite.plain_for('program', issue)} ${words}`,
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function interval_events(entry: StageEntry, issue: number): Array<RunEvent> {
|
|
32
|
+
const end_ms = Date.parse(entry.at)
|
|
33
|
+
if (!Number.isFinite(end_ms) || entry.elapsed_ms <= 0) return []
|
|
34
|
+
|
|
35
|
+
return [
|
|
36
|
+
event_at(end_ms - entry.elapsed_ms, issue, `${entry.stage} ${PHASE.START}`),
|
|
37
|
+
event_at(end_ms, issue, `${entry.stage} ${PHASE.DONE}`),
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function is_lane_ship(event: RunEvent, issue: number): boolean {
|
|
42
|
+
return event.kind === EVENT_KIND.SHIP_STAGE && lane_stop_stats.issue_of(event) === issue
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function change(active: Map<string, RunEvent>, event: RunEvent): void {
|
|
46
|
+
if (event.kind === EVENT_KIND.STOP) {
|
|
47
|
+
active.clear()
|
|
48
|
+
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const { stage, phase } = run_ship_stage.words_of(event.text)
|
|
53
|
+
if (phase === PHASE.SKIPPED) return
|
|
54
|
+
if (phase === PHASE.START) active.set(stage, event)
|
|
55
|
+
else active.delete(stage)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Parallel stages occupy one wall-clock interval. The most recently started stage owns an overlap;
|
|
59
|
+
// when it ends, the still-running stage resumes rather than opening a false gap.
|
|
60
|
+
function exclusive(events: ReadonlyArray<RunEvent>, issue: number): Array<RunEvent> {
|
|
61
|
+
const active = new Map<string, RunEvent>()
|
|
62
|
+
|
|
63
|
+
return events.map((event) => {
|
|
64
|
+
change(active, event)
|
|
65
|
+
const latest = [...active.values()].at(-1)
|
|
66
|
+
if (latest === undefined) return event
|
|
67
|
+
const { stage } = run_ship_stage.words_of(latest.text)
|
|
68
|
+
|
|
69
|
+
return event_at(Date.parse(event.at), issue, `${stage} ${PHASE.START}`)
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function stop_events(entries: ReadonlyArray<LedgerEntry>, issue: number): Array<RunEvent> {
|
|
74
|
+
return entries.flatMap((entry) =>
|
|
75
|
+
entry.kind === lane_ledger.KIND.STOP && entry.issue === issue
|
|
76
|
+
? { ...event_at(Date.parse(entry.at), issue, entry.reason), kind: EVENT_KIND.STOP }
|
|
77
|
+
: [],
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function of(
|
|
82
|
+
entries: ReadonlyArray<LedgerEntry>,
|
|
83
|
+
events: ReadonlyArray<RunEvent>,
|
|
84
|
+
issue: number,
|
|
85
|
+
): ReadonlyArray<RunEvent> {
|
|
86
|
+
const restored = entries
|
|
87
|
+
.filter((entry) => is_ship(entry, issue))
|
|
88
|
+
.flatMap((entry) => interval_events(entry, issue))
|
|
89
|
+
const ship = [
|
|
90
|
+
...events.filter((event) => is_lane_ship(event, issue)),
|
|
91
|
+
...restored,
|
|
92
|
+
...stop_events(entries, issue),
|
|
93
|
+
].toSorted((left, right) => Date.parse(left.at) - Date.parse(right.at))
|
|
94
|
+
|
|
95
|
+
return [
|
|
96
|
+
...events.filter((event) => !is_lane_ship(event, issue)),
|
|
97
|
+
...exclusive(ship, issue),
|
|
98
|
+
].toSorted((left, right) => Date.parse(left.at) - Date.parse(right.at))
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const lane_stage_events = { of }
|
|
102
|
+
|
|
103
|
+
export { lane_stage_events }
|
|
@@ -22,6 +22,7 @@ import { lane_size_stats } from './lane-size-stats'
|
|
|
22
22
|
import { lane_split_stats } from './lane-split-stats'
|
|
23
23
|
import { lane_stage_stats } from './lane-stage-stats'
|
|
24
24
|
import type { StatsWindow } from './lane-stats'
|
|
25
|
+
import { lane_stop_check_stats } from './lane-stop-check-stats'
|
|
25
26
|
import { lane_stop_stats } from './lane-stop-stats'
|
|
26
27
|
import { lane_test_related_stats } from './lane-test-related-stats'
|
|
27
28
|
import type { ToolCall } from './lane-transcript-calls'
|
|
@@ -61,6 +62,8 @@ function stop_tables(
|
|
|
61
62
|
): Array<string> {
|
|
62
63
|
return [
|
|
63
64
|
lane_stop_stats.table(entries, window, events),
|
|
65
|
+
lane_stop_check_stats.check_table(entries, window, events),
|
|
66
|
+
lane_stop_check_stats.longest_table(entries, window, events),
|
|
64
67
|
lane_chain_stop_stats.table(entries, window),
|
|
65
68
|
lane_gap_stats.table(entries, window, events),
|
|
66
69
|
lane_cut_stats.table(entries, window, events),
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
|
+
import type { RunEvent } from '#scripts/run/event/run-event-stream'
|
|
3
|
+
import { run_ship_stage } from '#scripts/run/ship/run-ship-stage'
|
|
4
|
+
import { run_ship_stop_cause } from '#scripts/run/ship/run-ship-stop-cause'
|
|
5
|
+
import type { LedgerEntry } from './lane-ledger'
|
|
6
|
+
import { lane_stage_stats } from './lane-stage-stats'
|
|
7
|
+
import { lane_stats, type StatsWindow } from './lane-stats'
|
|
8
|
+
import { lane_stop_stats, type StopWait } from './lane-stop-stats'
|
|
9
|
+
|
|
10
|
+
// What the stop table's waits were spent on (joshuafolkken/kit#7333), printed by `josh lane:stats` under
|
|
11
|
+
// it: the period's followup `check` stops by the CI check that failed — so the check worth fixing first
|
|
12
|
+
// is a number — and the period's longest stops, each with its issue and the instant it stopped, so a
|
|
13
|
+
// wait that ran overnight or on a person reads as itself. The waits are the stop table's own
|
|
14
|
+
// (`lane-stop-stats.ts`).
|
|
15
|
+
|
|
16
|
+
const CHECK_COLUMNS = [
|
|
17
|
+
'failed check',
|
|
18
|
+
'stops',
|
|
19
|
+
'wait total (min)',
|
|
20
|
+
'wait max (min)',
|
|
21
|
+
'not resumed',
|
|
22
|
+
] as const
|
|
23
|
+
const LONGEST_COLUMNS = ['longest stop', 'issue', 'stopped at', 'causes', 'wait (min)'] as const
|
|
24
|
+
const LONGEST_ROWS = 10
|
|
25
|
+
// A followup check stop recorded before it named its checks, or whose wait named none.
|
|
26
|
+
const NO_CHECK = 'none named'
|
|
27
|
+
const CAUSE_SEPARATOR = ', '
|
|
28
|
+
const { STAGE } = run_ship_stage
|
|
29
|
+
const { CAUSE } = run_ship_stop_cause
|
|
30
|
+
|
|
31
|
+
function is_followup_check({ stop }: StopWait): boolean {
|
|
32
|
+
return stop.reason === STAGE.FOLLOWUP && stop.cause === CAUSE.CHECK
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function checks_of({ stop }: StopWait): ReadonlyArray<string> {
|
|
36
|
+
return stop.checks ?? [NO_CHECK]
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface CheckRow {
|
|
40
|
+
cells: Array<string>
|
|
41
|
+
total_ms: number
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// One failed check's row; a stop that named two checks counts once under each.
|
|
45
|
+
function check_row(check: string, waits: ReadonlyArray<StopWait>): CheckRow {
|
|
46
|
+
const of_check = waits.filter((wait) => checks_of(wait).includes(check))
|
|
47
|
+
const ended = of_check
|
|
48
|
+
.map((wait) => wait.wait_ms)
|
|
49
|
+
.filter((value) => lane_stage_stats.is_number(value))
|
|
50
|
+
const total = lane_stop_stats.total(ended)
|
|
51
|
+
const cells = [
|
|
52
|
+
check,
|
|
53
|
+
String(of_check.length),
|
|
54
|
+
lane_stage_stats.cell(total),
|
|
55
|
+
lane_stage_stats.cell(lane_stats.peak(ended)),
|
|
56
|
+
String(of_check.length - ended.length),
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
return { cells, total_ms: total ?? 0 }
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function header(columns: ReadonlyArray<string>): Array<string> {
|
|
63
|
+
return [lane_stats.to_row(columns), lane_stats.to_row(columns.map(() => '---'))]
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// The period's followup check stops by failed check, the longest total wait first.
|
|
67
|
+
function check_table(
|
|
68
|
+
entries: ReadonlyArray<LedgerEntry>,
|
|
69
|
+
window: StatsWindow,
|
|
70
|
+
events: ReadonlyArray<RunEvent> = [],
|
|
71
|
+
): string {
|
|
72
|
+
const waits = lane_stop_stats
|
|
73
|
+
.waits_in(entries, window, events)
|
|
74
|
+
.filter((wait) => is_followup_check(wait))
|
|
75
|
+
const checks = new Set(waits.flatMap((wait) => checks_of(wait)))
|
|
76
|
+
const rows = [...checks].map((check) => check_row(check, waits))
|
|
77
|
+
const ranked = rows.toSorted((left, right) => right.total_ms - left.total_ms)
|
|
78
|
+
|
|
79
|
+
return [...header(CHECK_COLUMNS), ...ranked.map(({ cells }) => lane_stats.to_row(cells))].join(
|
|
80
|
+
'\n',
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// A followup check stop's failed checks, any other stop's causes.
|
|
85
|
+
function causes_cell(wait: StopWait): string {
|
|
86
|
+
return (is_followup_check(wait) ? checks_of(wait) : wait.causes).join(CAUSE_SEPARATOR)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function longest_row(wait: StopWait): string {
|
|
90
|
+
return lane_stats.to_row([
|
|
91
|
+
wait.reason,
|
|
92
|
+
issue_cite.plain_for('terminal', wait.stop.issue),
|
|
93
|
+
wait.stop.at,
|
|
94
|
+
causes_cell(wait),
|
|
95
|
+
lane_stage_stats.cell(wait.wait_ms),
|
|
96
|
+
])
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// The period's ended stops, the longest wait first, at most `LONGEST_ROWS` of them.
|
|
100
|
+
function longest_table(
|
|
101
|
+
entries: ReadonlyArray<LedgerEntry>,
|
|
102
|
+
window: StatsWindow,
|
|
103
|
+
events: ReadonlyArray<RunEvent> = [],
|
|
104
|
+
): string {
|
|
105
|
+
const ended = lane_stop_stats
|
|
106
|
+
.waits_in(entries, window, events)
|
|
107
|
+
.filter((wait) => lane_stage_stats.is_number(wait.wait_ms))
|
|
108
|
+
const ranked = ended.toSorted((left, right) => (right.wait_ms ?? 0) - (left.wait_ms ?? 0))
|
|
109
|
+
|
|
110
|
+
const rows = ranked.slice(0, LONGEST_ROWS).map((wait) => longest_row(wait))
|
|
111
|
+
|
|
112
|
+
return [...header(LONGEST_COLUMNS), ...rows].join('\n')
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const lane_stop_check_stats = { LONGEST_ROWS, NO_CHECK, check_table, longest_table }
|
|
116
|
+
|
|
117
|
+
export { lane_stop_check_stats }
|
|
@@ -48,8 +48,10 @@ const NO_CAUSES = '-'
|
|
|
48
48
|
const NOTICED = ' (noticed)'
|
|
49
49
|
|
|
50
50
|
// `causes` is a preflight stop's unmet preconditions or a review stop's blocking finding kinds, every
|
|
51
|
-
// one of them, else the stop's one cause.
|
|
51
|
+
// one of them, else the stop's one cause. `stop` is the ledger entry, read for its issue, its instant
|
|
52
|
+
// and a followup stop's failed checks (`lane-stop-check-stats.ts`).
|
|
52
53
|
interface StopWait {
|
|
54
|
+
stop: StopEntry
|
|
53
55
|
reason: string
|
|
54
56
|
causes: ReadonlyArray<string>
|
|
55
57
|
wait_ms: number | undefined
|
|
@@ -143,6 +145,7 @@ function waits_of(
|
|
|
143
145
|
notices: ReadonlyArray<IssueAt>,
|
|
144
146
|
): Array<StopWait> {
|
|
145
147
|
return entries.filter(is_stop).map((stop) => ({
|
|
148
|
+
stop,
|
|
146
149
|
reason: stop.reason,
|
|
147
150
|
causes: causes_of(stop, notices),
|
|
148
151
|
wait_ms: wait_ms(instant_of(stop), ends),
|
|
@@ -183,15 +186,25 @@ function reason_row(reason: string, waits: ReadonlyArray<StopWait>): string {
|
|
|
183
186
|
])
|
|
184
187
|
}
|
|
185
188
|
|
|
186
|
-
// The period's
|
|
187
|
-
// wait may end after the period's last stop. `events` is the run's event stream, read
|
|
189
|
+
// The period's stops with their waits: `entries` is the whole ledger, filtered here to `window` — only
|
|
190
|
+
// the stops are; a wait may end after the period's last stop. `events` is the run's event stream, read
|
|
191
|
+
// for its parks.
|
|
192
|
+
function waits_in(
|
|
193
|
+
entries: ReadonlyArray<LedgerEntry>,
|
|
194
|
+
window: StatsWindow,
|
|
195
|
+
events: ReadonlyArray<RunEvent> = [],
|
|
196
|
+
): Array<StopWait> {
|
|
197
|
+
const ends = ends_of(entries, parks_of(events))
|
|
198
|
+
|
|
199
|
+
return waits_of(lane_stats.in_window(entries, window), ends, notices_of(entries))
|
|
200
|
+
}
|
|
201
|
+
|
|
188
202
|
function table(
|
|
189
203
|
entries: ReadonlyArray<LedgerEntry>,
|
|
190
204
|
window: StatsWindow,
|
|
191
205
|
events: ReadonlyArray<RunEvent> = [],
|
|
192
206
|
): string {
|
|
193
|
-
const
|
|
194
|
-
const waits = waits_of(lane_stats.in_window(entries, window), ends, notices_of(entries))
|
|
207
|
+
const waits = waits_in(entries, window, events)
|
|
195
208
|
|
|
196
209
|
return [
|
|
197
210
|
lane_stats.to_row(COLUMNS),
|
|
@@ -200,6 +213,17 @@ function table(
|
|
|
200
213
|
].join('\n')
|
|
201
214
|
}
|
|
202
215
|
|
|
203
|
-
const lane_stop_stats = {
|
|
216
|
+
const lane_stop_stats = {
|
|
217
|
+
REASONS,
|
|
218
|
+
dispatches_of,
|
|
219
|
+
ends_of,
|
|
220
|
+
events_of,
|
|
221
|
+
issue_of,
|
|
222
|
+
table,
|
|
223
|
+
total,
|
|
224
|
+
wait_ms,
|
|
225
|
+
waits_in,
|
|
226
|
+
}
|
|
204
227
|
|
|
228
|
+
export type { StopWait }
|
|
205
229
|
export { lane_stop_stats }
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { git_pr_checks_failed } from '#scripts/gh/git-pr-checks-failed'
|
|
1
2
|
import { issue_cite } from '#scripts/issue/issue-cite'
|
|
2
3
|
import { lane_ci_path_stats } from './lane-ci-path-stats'
|
|
3
4
|
import type { LedgerEntry } from './lane-ledger'
|
|
@@ -28,28 +29,19 @@ const KNOWN: ReadonlyArray<KnownCause> = [
|
|
|
28
29
|
},
|
|
29
30
|
{ key: 'byte budget', log: /byte budget/iu },
|
|
30
31
|
]
|
|
31
|
-
// `git-pr-checks-eval.ts`'s `PR checks failed (failed checks: <a>, <b>; …).`, ended by the next
|
|
32
|
-
// reason or the closing `).` so a matrix name such as `Unit Tests (3/6)` stays whole.
|
|
33
|
-
const FAILED_CHECKS = /failed checks: (?<names>.+?)(?=; |\)\.$)/gmu
|
|
34
32
|
const NAME_SEPARATOR = ', '
|
|
35
33
|
|
|
36
34
|
function key_of(check: string): string {
|
|
37
35
|
return KNOWN.find((known) => known.check?.test(check) === true)?.key ?? check.toLowerCase()
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
function failed_checks(log: string): Array<string> {
|
|
41
|
-
return [...log.matchAll(FAILED_CHECKS)]
|
|
42
|
-
.flatMap((match) => (match.groups?.['names'] ?? '').split(NAME_SEPARATOR))
|
|
43
|
-
.map((name) => name.trim())
|
|
44
|
-
.filter((name) => name !== '')
|
|
45
|
-
}
|
|
46
|
-
|
|
47
38
|
function log_keys(log: string | undefined): Array<string> {
|
|
48
39
|
if (log === undefined) return []
|
|
49
40
|
|
|
50
41
|
const verdicts = KNOWN.filter((known) => known.log?.test(log) === true)
|
|
42
|
+
const failed = git_pr_checks_failed.names_of(log)
|
|
51
43
|
|
|
52
|
-
return [...
|
|
44
|
+
return [...failed.map((check) => key_of(check)), ...verdicts.map(({ key }) => key)]
|
|
53
45
|
}
|
|
54
46
|
|
|
55
47
|
// `issue`'s cause keys, each once: from its ship `log` (`undefined` when gone) and its ledger rows.
|
|
@@ -28,6 +28,7 @@ const state_schema = z.object({
|
|
|
28
28
|
owner_nonce: z.string(),
|
|
29
29
|
child_pid: z.number().int().positive().optional(),
|
|
30
30
|
child_process_start: z.string().optional(),
|
|
31
|
+
resume_cut: z.string().optional(),
|
|
31
32
|
epoch: z.number().int().nonnegative(),
|
|
32
33
|
})
|
|
33
34
|
|
|
@@ -140,15 +141,26 @@ function remove_stale_owner(target: string, previous: SupervisorOwner | undefine
|
|
|
140
141
|
return true
|
|
141
142
|
}
|
|
142
143
|
|
|
144
|
+
function previous_resume(
|
|
145
|
+
lane_directory: string,
|
|
146
|
+
owner: SupervisorOwner | undefined,
|
|
147
|
+
): string | undefined {
|
|
148
|
+
if (owner === undefined) return undefined
|
|
149
|
+
|
|
150
|
+
return read_state(lane_directory, owner.nonce)?.resume_cut
|
|
151
|
+
}
|
|
152
|
+
|
|
143
153
|
function claim(issue: string, lane_directory: string, nonce: string): SupervisorOwner | undefined {
|
|
144
154
|
const target = marker_path(lane_directory)
|
|
145
155
|
const previous = read(lane_directory)
|
|
146
156
|
if (!remove_stale_owner(target, previous)) return undefined
|
|
147
157
|
const child = carried_child(lane_directory, previous)
|
|
158
|
+
const resume_cut = previous_resume(lane_directory, previous)
|
|
148
159
|
const owner = { issue, nonce, ...process_identity.own_fields() }
|
|
149
160
|
if (!stamp_file.create_stamp(target, owner)) return undefined
|
|
150
161
|
stamp_file.replace_stamp(state_path(lane_directory), {
|
|
151
162
|
owner_nonce: nonce,
|
|
163
|
+
resume_cut,
|
|
152
164
|
epoch: 0,
|
|
153
165
|
...(child !== undefined && {
|
|
154
166
|
child_pid: child.pid,
|
|
@@ -67,6 +67,7 @@ interface Generation {
|
|
|
67
67
|
owner: SupervisorOwner
|
|
68
68
|
profile: AgentProfile
|
|
69
69
|
invocation?: string
|
|
70
|
+
resume_cut?: string | undefined
|
|
70
71
|
}
|
|
71
72
|
|
|
72
73
|
function completion_code(result: ChildResult, ship: string): number {
|
|
@@ -81,6 +82,7 @@ function record_child(generation: Generation, child_pid: number): void {
|
|
|
81
82
|
owner_nonce: owner.nonce,
|
|
82
83
|
epoch,
|
|
83
84
|
child_pid,
|
|
85
|
+
resume_cut: generation.resume_cut,
|
|
84
86
|
...(child_process_start !== undefined && { child_process_start }),
|
|
85
87
|
})
|
|
86
88
|
}
|
|
@@ -97,8 +99,34 @@ function child_result(
|
|
|
97
99
|
return { kind: 'abnormal', note }
|
|
98
100
|
}
|
|
99
101
|
|
|
100
|
-
|
|
102
|
+
// An unchanged, unspent handoff after its successor exited is a failed resume, not a new cut.
|
|
103
|
+
// Persist the attempt before launching so a recovered supervisor makes the same decision.
|
|
104
|
+
async function prepare_generation(generation: Generation): Promise<Generation | undefined> {
|
|
105
|
+
const { lane, owner } = generation
|
|
106
|
+
const cut = await standing_cut(lane.issue)
|
|
107
|
+
if (cut === undefined) return { ...generation, resume_cut: undefined }
|
|
108
|
+
const resume_cut = JSON.stringify(cut)
|
|
109
|
+
|
|
110
|
+
if (read_state(lane.directory, owner.nonce)?.resume_cut === resume_cut) {
|
|
111
|
+
console.error(
|
|
112
|
+
`OpenAI supervisor ${session_cite.issue(lane.issue)}: resume did not adopt cut ${cut.cut_at}; stopping with work and cut preserved`,
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
return undefined
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return { ...generation, resume_cut }
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
async function launch_child(generation: Generation): Promise<ChildResult> {
|
|
101
122
|
const { lane, profile, is_resume } = generation
|
|
123
|
+
|
|
124
|
+
update(lane.directory, generation.owner, {
|
|
125
|
+
owner_nonce: generation.owner.nonce,
|
|
126
|
+
epoch: generation.epoch,
|
|
127
|
+
resume_cut: generation.resume_cut,
|
|
128
|
+
})
|
|
129
|
+
|
|
102
130
|
const result = await detached_launch.launch_attached(
|
|
103
131
|
{
|
|
104
132
|
argv: child_argv(lane, profile, is_resume, generation.invocation),
|
|
@@ -124,6 +152,13 @@ async function stop_invocation(issue: string): Promise<string> {
|
|
|
124
152
|
return current?.stop_invocation ?? lane_child_invocation.ship_stop_invocation(issue)
|
|
125
153
|
}
|
|
126
154
|
|
|
155
|
+
async function run_child(generation: Generation): Promise<ChildResult> {
|
|
156
|
+
const ready = await prepare_generation(generation)
|
|
157
|
+
if (ready === undefined) return { kind: LAUNCH_FAILED_KIND, note: 'cut resume failed' }
|
|
158
|
+
|
|
159
|
+
return await launch_child(ready)
|
|
160
|
+
}
|
|
161
|
+
|
|
127
162
|
async function run_generations(generation: Generation): Promise<number> {
|
|
128
163
|
const prior = await openai_lane_ship.current(generation.lane.issue)
|
|
129
164
|
const result = await run_child(generation)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import os from 'node:os'
|
|
2
|
+
|
|
3
|
+
// A string drawn on a screen with the home directory written out as `~`: the absolute path carries
|
|
4
|
+
// the OS account name, which is often the user's real name and leaks in a screenshot or a recording
|
|
5
|
+
// (joshuafolkken/kit#7342). A home that is the root, or unknown, names no account and is left as is.
|
|
6
|
+
const TILDE = '~'
|
|
7
|
+
const ROOT = '/'
|
|
8
|
+
// The home only where a path segment ends, so a sibling account such as `/Users/anna` beside
|
|
9
|
+
// `/Users/ann` is not drawn as `~a`.
|
|
10
|
+
const SEGMENT_CONTINUES = /^[\w.-]/u
|
|
11
|
+
|
|
12
|
+
function mask(text: string): string {
|
|
13
|
+
const home = os.homedir()
|
|
14
|
+
if (home === '' || home === ROOT) return text
|
|
15
|
+
|
|
16
|
+
const [head = '', ...rest] = text.split(home)
|
|
17
|
+
const masked = rest.map((part) => `${SEGMENT_CONTINUES.test(part) ? home : TILDE}${part}`)
|
|
18
|
+
|
|
19
|
+
return `${head}${masked.join('')}`
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const home_tilde = { mask }
|
|
23
|
+
|
|
24
|
+
export { home_tilde }
|
|
@@ -25,6 +25,29 @@ const GATE_STEPS_SCHEMA = z
|
|
|
25
25
|
message: 'step names must be unique',
|
|
26
26
|
})
|
|
27
27
|
const GATE_SCHEMA = z.object({ steps: GATE_STEPS_SCHEMA.optional() })
|
|
28
|
+
// A worker profile a lane may run on: `profiles` runs weakest first, which is the escalation order.
|
|
29
|
+
// The model and effort are checked against the agent rules by `agent-worker-profile.ts`.
|
|
30
|
+
const WORKER_PROFILE_SCHEMA = z.strictObject({
|
|
31
|
+
name: z.string().min(1),
|
|
32
|
+
model: z.string().min(1),
|
|
33
|
+
effort: z.string().min(1),
|
|
34
|
+
when: z.string().min(1),
|
|
35
|
+
})
|
|
36
|
+
const WORKER_PROFILES_SCHEMA = z
|
|
37
|
+
.array(WORKER_PROFILE_SCHEMA)
|
|
38
|
+
.min(1)
|
|
39
|
+
.refine((profiles) => new Set(profiles.map((profile) => profile.name)).size === profiles.length, {
|
|
40
|
+
message: 'profile names must be unique',
|
|
41
|
+
})
|
|
42
|
+
const WORKER_SCHEMA = z
|
|
43
|
+
.strictObject({
|
|
44
|
+
default: z.string().min(1),
|
|
45
|
+
escalate: z.boolean().default(false),
|
|
46
|
+
profiles: WORKER_PROFILES_SCHEMA,
|
|
47
|
+
})
|
|
48
|
+
.refine((worker) => worker.profiles.some((profile) => profile.name === worker.default), {
|
|
49
|
+
message: 'default must name one of the profiles',
|
|
50
|
+
})
|
|
28
51
|
const josh_schemas = {
|
|
29
52
|
format: z.object({ josh: z.object({ format: FORMAT_SCHEMA.optional() }).optional() }),
|
|
30
53
|
gate_steps: z.object({ josh: z.object({ gate: GATE_SCHEMA.optional() }).optional() }),
|
|
@@ -33,6 +56,7 @@ const josh_schemas = {
|
|
|
33
56
|
josh: z.object({ progress_interval_minutes: z.number().positive() }).optional(),
|
|
34
57
|
}),
|
|
35
58
|
review_gate: z.object({ josh: z.object({ review_gate: REVIEW_GATE_SCHEMA }).optional() }),
|
|
59
|
+
worker: z.object({ josh: z.object({ worker: WORKER_SCHEMA.optional() }).optional() }),
|
|
36
60
|
}
|
|
37
61
|
|
|
38
62
|
function manifest_path(directory: string): string {
|
|
@@ -81,6 +105,8 @@ const package_manifest = {
|
|
|
81
105
|
|
|
82
106
|
type GateStepDefinition = z.infer<typeof GATE_STEP_SCHEMA>
|
|
83
107
|
type FormatScope = z.infer<typeof FORMAT_SCHEMA>
|
|
108
|
+
type WorkerConfig = z.infer<typeof WORKER_SCHEMA>
|
|
109
|
+
type WorkerProfileDefinition = z.infer<typeof WORKER_PROFILE_SCHEMA>
|
|
84
110
|
|
|
85
|
-
export type { FormatScope, GateStepDefinition }
|
|
111
|
+
export type { FormatScope, GateStepDefinition, WorkerConfig, WorkerProfileDefinition }
|
|
86
112
|
export { PACKAGE_JSON, REVIEW_GATE_SCHEMA, package_manifest }
|