@joshuafolkken/kit 1.3000.0 → 1.3044.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/workflow-commands/backlogrun-steps.md +1 -1
- package/.claude/skills/workflow-commands/kickoff.md +6 -0
- package/.claude/skills/workflow-commands/progress-watcher.md +10 -8
- package/dist/.inputs-verified.json +1 -1
- package/dist/commands/adopt.js +12 -12
- package/dist/commands/auto-ok-judge-cli.js +18 -14
- package/dist/commands/auto-ok-main.js +42 -40
- package/dist/commands/backlog-budget-main.js +3 -3
- package/dist/commands/backlog-drive-cli.js +276 -188
- package/dist/commands/backlog-next-main.js +77 -75
- package/dist/commands/backlog-offer-main.js +80 -78
- package/dist/commands/backlog-plan-cli.js +96 -97
- package/dist/commands/backlog-triage-cli.js +94 -92
- package/dist/commands/backlogrun-cli.js +212 -206
- package/dist/commands/behavior-cli.js +12 -13
- package/dist/commands/bump-version-main.js +2 -2
- package/dist/commands/bytes-command.js +61 -22
- package/dist/commands/check-related.js +61 -60
- package/dist/commands/{chunk-X7PN54LZ.js → chunk-22DVQCP6.js} +16 -6
- package/dist/commands/{chunk-UTBVTCQN.js → chunk-24OATKOF.js} +301 -168
- package/dist/commands/{chunk-7GHOFHUS.js → chunk-24ZDAWML.js} +3 -3
- package/dist/commands/{chunk-HBNB3TLG.js → chunk-2BB5ZR2F.js} +13 -7
- package/dist/commands/{chunk-F22G3VDB.js → chunk-2BC33QPY.js} +1 -1
- package/dist/commands/{chunk-72EW7AVI.js → chunk-2BJJUTZA.js} +2 -2
- package/dist/commands/{chunk-XDQOWUVT.js → chunk-2CXT6MBR.js} +4 -4
- package/dist/commands/{chunk-TVJE67O2.js → chunk-2EZTYLO4.js} +6 -6
- package/dist/commands/{chunk-JLYW7CP6.js → chunk-2PHOLX62.js} +1 -1
- package/dist/commands/{chunk-6EU5ZCDP.js → chunk-2QM72JCJ.js} +23 -87
- package/dist/commands/{chunk-EFHSCUFN.js → chunk-2VFPUPSG.js} +2 -2
- package/dist/commands/{chunk-ATRMETHT.js → chunk-2XAH3MHV.js} +1 -1
- package/dist/commands/{chunk-T2E724HN.js → chunk-34JJYCIY.js} +2 -2
- package/dist/commands/{chunk-REMKUFAC.js → chunk-34KZDKQJ.js} +1 -1
- package/dist/commands/{chunk-GK2KY4MO.js → chunk-352KLSFX.js} +3 -3
- package/dist/commands/{chunk-7S6VRZOH.js → chunk-3AEDZZNL.js} +5 -5
- package/dist/commands/{chunk-KVJDDECB.js → chunk-3B2HEFNO.js} +2 -2
- package/dist/commands/{chunk-HZBTXKT2.js → chunk-3Z425MM3.js} +2 -2
- package/dist/commands/{chunk-J3G2R64I.js → chunk-3ZOX4G4U.js} +3 -3
- package/dist/commands/{chunk-LRS2OS5J.js → chunk-452HWOJ7.js} +2 -2
- package/dist/commands/{chunk-HRT4KWP4.js → chunk-475EFIJV.js} +1 -1
- package/dist/commands/{chunk-4HBVHYNL.js → chunk-47UZB54M.js} +3 -3
- package/dist/commands/{chunk-H4LYG37R.js → chunk-4DN4XVPL.js} +6 -6
- package/dist/commands/{chunk-TMLNI3YW.js → chunk-4HERA2GY.js} +1 -1
- package/dist/commands/{chunk-W6V4DWC5.js → chunk-4JI35CVO.js} +1 -1
- package/dist/commands/{chunk-YT342DRV.js → chunk-4L4LNWZ7.js} +2 -2
- package/dist/commands/{chunk-ZZAH3YQP.js → chunk-4N32QKJZ.js} +6 -6
- package/dist/commands/{chunk-GDUK5YPO.js → chunk-4NRSFLG7.js} +12 -12
- package/dist/commands/{chunk-O5QZ2S6X.js → chunk-4OKRPAUT.js} +4 -4
- package/dist/commands/{chunk-QDFDB4CF.js → chunk-4Q64PG46.js} +13 -13
- package/dist/commands/{chunk-HO52D6JY.js → chunk-4UDTQVDD.js} +14 -14
- package/dist/commands/{chunk-HPVLI26Z.js → chunk-4WR2LEZL.js} +6 -6
- package/dist/commands/{chunk-DP7WIGQ4.js → chunk-4ZJOC6OK.js} +4 -4
- package/dist/commands/{chunk-WTRDWEUQ.js → chunk-4ZQM4I7R.js} +12 -12
- package/dist/commands/{chunk-OTZJXU2R.js → chunk-54X37JEJ.js} +8 -8
- package/dist/commands/{chunk-A5V7EWIX.js → chunk-56KW5EOK.js} +2 -2
- package/dist/commands/chunk-5CG3XU3O.js +74 -0
- package/dist/commands/{chunk-FC33R5UN.js → chunk-5ESZLHDZ.js} +13 -15
- package/dist/commands/{chunk-OVA7STGP.js → chunk-5FBRMARM.js} +9 -9
- package/dist/commands/{chunk-SK2LJBFS.js → chunk-5PCK53WP.js} +3 -3
- package/dist/commands/{chunk-6NV2F7QH.js → chunk-5RG4S66L.js} +1 -1
- package/dist/commands/{chunk-JOARHU3M.js → chunk-5UJGACVN.js} +1 -1
- package/dist/commands/{chunk-NKOET4FB.js → chunk-5Y7B7FDL.js} +2 -2
- package/dist/commands/{chunk-XMBRXCIE.js → chunk-5Z6E5ZUV.js} +4 -4
- package/dist/commands/{chunk-RZ4OKKPM.js → chunk-5ZNUH4LV.js} +2 -2
- package/dist/commands/{chunk-7CHCZBNF.js → chunk-6CFHLMKM.js} +4 -4
- package/dist/commands/{chunk-TXXYC7EV.js → chunk-6DDK5XWK.js} +1 -1
- package/dist/commands/{chunk-2TQXCH2K.js → chunk-6GQX752S.js} +3 -3
- package/dist/commands/{chunk-RY6ZDHKB.js → chunk-6MAZ55GF.js} +107 -84
- package/dist/commands/{chunk-SNFLV7VV.js → chunk-6RUWU2SB.js} +2 -2
- package/dist/commands/{chunk-D4SZK7H2.js → chunk-6TIVDEKG.js} +2 -2
- package/dist/commands/{chunk-RIQ75QWR.js → chunk-6UCWAFQY.js} +55 -43
- package/dist/commands/{chunk-4D5KWMFL.js → chunk-6YURRFRU.js} +19 -19
- package/dist/commands/{chunk-7MOZEEFJ.js → chunk-6YVURZAJ.js} +1 -1
- package/dist/commands/{chunk-73JOEKIC.js → chunk-6Z4YZG7P.js} +5 -5
- package/dist/commands/{chunk-NJ53AWJU.js → chunk-77BIN247.js} +9 -9
- package/dist/commands/{chunk-MZHOPRI6.js → chunk-7ABHNNY3.js} +7 -7
- package/dist/commands/{chunk-6WTVAL4D.js → chunk-7C7FOKJK.js} +1 -1
- package/dist/commands/{chunk-KVSSLDA3.js → chunk-7HAGC6SW.js} +5 -5
- package/dist/commands/{chunk-IG22Y5MA.js → chunk-7KKUFLH5.js} +1 -1
- package/dist/commands/{chunk-ZQ3CKRMP.js → chunk-7MJYLUF4.js} +2 -2
- package/dist/commands/{chunk-6UGFS3EU.js → chunk-7NHZCI5Y.js} +11 -11
- package/dist/commands/{chunk-FB3D7CX5.js → chunk-7OQ56DVW.js} +5 -7
- package/dist/commands/{chunk-EK327QOS.js → chunk-7VWPGTZO.js} +10 -10
- package/dist/commands/{chunk-WSOF74K4.js → chunk-7YZXS3AK.js} +3 -3
- package/dist/commands/{chunk-N6TYL3B2.js → chunk-AAUDI7WJ.js} +2 -2
- package/dist/commands/{chunk-3GF52L5F.js → chunk-AC26ZUG5.js} +12 -24
- package/dist/commands/{chunk-EK2Y6B4X.js → chunk-ACZ52JPI.js} +7 -7
- package/dist/commands/{chunk-VD72V5VX.js → chunk-AJ65WNJB.js} +4 -4
- package/dist/commands/{chunk-MYWRGF5A.js → chunk-AK7SEO4Y.js} +2 -2
- package/dist/commands/{chunk-IBEKFLWG.js → chunk-ALDAS2WG.js} +9 -9
- package/dist/commands/{chunk-W32DIQEP.js → chunk-ARFBIJFS.js} +1 -1
- package/dist/commands/{chunk-F3WBEEYC.js → chunk-AVVMDVGO.js} +5 -5
- package/dist/commands/chunk-AXXEMVRJ.js +23 -0
- package/dist/commands/{chunk-GIGKMIPQ.js → chunk-B3M5WSGN.js} +1 -1
- package/dist/commands/{chunk-4Z5723GA.js → chunk-B7ZNIEDV.js} +5 -4
- package/dist/commands/{chunk-B3XFOHDX.js → chunk-BCUDQWYK.js} +10 -4
- package/dist/commands/{chunk-PR3JCPP7.js → chunk-BMKWSWWE.js} +1 -1
- package/dist/commands/{chunk-RZJAUVMI.js → chunk-BMM4RHCG.js} +2 -2
- package/dist/commands/{chunk-LAKVPOJQ.js → chunk-BMTYUJNT.js} +2 -2
- package/dist/commands/{chunk-DAJCUSPG.js → chunk-BRHPRDDV.js} +3 -3
- package/dist/commands/{chunk-UZAU6UI6.js → chunk-BRUBX64M.js} +2 -2
- package/dist/commands/{chunk-BFLFPKQQ.js → chunk-BTZJDHQT.js} +4 -4
- package/dist/commands/{chunk-AI5K4QJO.js → chunk-BYFC6MD2.js} +1 -1
- package/dist/commands/{chunk-JGTLNFFE.js → chunk-BYGJ3BCJ.js} +10 -10
- package/dist/commands/{chunk-5HWZFL4D.js → chunk-C54QXJD6.js} +51 -18
- package/dist/commands/{chunk-LMS6N6GE.js → chunk-CBAKBWSZ.js} +7 -7
- package/dist/commands/{chunk-7EAMUVIO.js → chunk-CFHRNTE5.js} +1 -1
- package/dist/commands/{chunk-UIWAMLQH.js → chunk-CGYDIYHD.js} +2 -2
- package/dist/commands/{chunk-4QYW2IL7.js → chunk-CHKYPF5O.js} +1 -1
- package/dist/commands/{chunk-5HCPSV45.js → chunk-CJBW6BWG.js} +8 -8
- package/dist/commands/chunk-CKUKK7JG.js +252 -0
- package/dist/commands/{chunk-4PES3BAA.js → chunk-CMHGDCGN.js} +3 -3
- package/dist/commands/{chunk-F6OWP2AY.js → chunk-CNGTHSUS.js} +22 -22
- package/dist/commands/{chunk-B2EA2HCY.js → chunk-COGKULQH.js} +4 -4
- package/dist/commands/{chunk-S7XWXG4M.js → chunk-CP2J4RV2.js} +175 -81
- package/dist/commands/{chunk-YGDNUTTI.js → chunk-CQUZ6TNQ.js} +2 -2
- package/dist/commands/chunk-CQZI7RIK.js +72 -0
- package/dist/commands/chunk-CVJHQOI3.js +153 -0
- package/dist/commands/{chunk-2MJ4OCDL.js → chunk-CWCKCZS6.js} +1 -1
- package/dist/commands/chunk-D5OHVIPM.js +17 -0
- package/dist/commands/{chunk-TPKFVVJQ.js → chunk-D6D6WQR6.js} +2 -2
- package/dist/commands/{chunk-5PAEXYIY.js → chunk-D7JRJI44.js} +69 -6
- package/dist/commands/{chunk-LOSOLCCW.js → chunk-D7OAU32Z.js} +1 -1
- package/dist/commands/{chunk-VZHC2I3T.js → chunk-DAAX7XDS.js} +8 -8
- package/dist/commands/{chunk-OHVAEJSM.js → chunk-DEZF7QZZ.js} +5 -5
- package/dist/commands/{chunk-CA6F5OXK.js → chunk-DYZOOWVW.js} +124 -21
- package/dist/commands/{chunk-TKGBF75Y.js → chunk-EDKOSZ3K.js} +5 -5
- package/dist/commands/{chunk-YPNTORQD.js → chunk-EFDVE5P5.js} +1 -1
- package/dist/commands/{chunk-EH3LVYOX.js → chunk-EGIHAEMT.js} +1 -1
- package/dist/commands/{chunk-7P4X4TQL.js → chunk-EKLU6QR7.js} +4 -4
- package/dist/commands/{chunk-ILQZFUDC.js → chunk-ELY76WAR.js} +2 -2
- package/dist/commands/{chunk-2VLHFILE.js → chunk-EM3HAZF6.js} +2 -2
- package/dist/commands/{chunk-F2HFWLQR.js → chunk-EMTZAGT5.js} +20 -1
- package/dist/commands/{chunk-GA4VIFHD.js → chunk-ERG4QRNG.js} +2 -2
- package/dist/commands/{chunk-ICEMFE2V.js → chunk-EUGNQCYK.js} +1 -1
- package/dist/commands/{chunk-3HU3LPIF.js → chunk-EXDFKKMH.js} +2 -2
- package/dist/commands/{chunk-ISPBJVXM.js → chunk-EXWB34R2.js} +7 -7
- package/dist/commands/{chunk-FNOSSXLG.js → chunk-EYMPBHDN.js} +2 -2
- package/dist/commands/{chunk-7V5UVKFG.js → chunk-EZ7IPKIH.js} +2 -2
- package/dist/commands/{chunk-KQWSENCT.js → chunk-F6IQHZYY.js} +3 -3
- package/dist/commands/{chunk-7ZECP3J6.js → chunk-FDS65XOJ.js} +5 -5
- package/dist/commands/{chunk-KXRFGPZD.js → chunk-FGG7V473.js} +21 -5
- package/dist/commands/{chunk-PZ6VWHOO.js → chunk-FHFWNNUC.js} +1 -1
- package/dist/commands/{chunk-XBRD2BDL.js → chunk-FJX7AENO.js} +2 -2
- package/dist/commands/{chunk-M42SLJCD.js → chunk-FKZ5E4JD.js} +4 -4
- package/dist/commands/{chunk-F2J6DGDM.js → chunk-FMZWRDKH.js} +8 -8
- package/dist/commands/{chunk-DSBK66US.js → chunk-FOKCRIAN.js} +10 -10
- package/dist/commands/{chunk-OI7KM4K3.js → chunk-FQGWO2ZH.js} +2 -2
- package/dist/commands/{chunk-2IESYBZH.js → chunk-FURNDIT3.js} +3 -3
- package/dist/commands/chunk-FVDQNMP6.js +93 -0
- package/dist/commands/{chunk-PZU6FZO6.js → chunk-FWU3H4TX.js} +1 -1
- package/dist/commands/{chunk-RYZ3RQRH.js → chunk-G3HBYHFA.js} +1 -1
- package/dist/commands/{chunk-HCA5QG2U.js → chunk-G4E4M2P4.js} +2 -2
- package/dist/commands/{chunk-VJLZ3IQQ.js → chunk-G5KSL2Q2.js} +1 -1
- package/dist/commands/{chunk-Y5ZW3KN5.js → chunk-G6XC7V6Y.js} +2 -2
- package/dist/commands/{chunk-73EBNBUW.js → chunk-GCPP5XIG.js} +1 -1
- package/dist/commands/{chunk-Q3463XNL.js → chunk-GITT5A5A.js} +3 -3
- package/dist/commands/{chunk-T2IO4LEB.js → chunk-GLC47H7I.js} +10 -10
- package/dist/commands/{chunk-GA6E4VGO.js → chunk-GUR54ELE.js} +1 -1
- package/dist/commands/{chunk-7IT23HIR.js → chunk-GY4DMCKS.js} +2 -2
- package/dist/commands/{chunk-PZ4ITSLG.js → chunk-H6JQRHDC.js} +3 -3
- package/dist/commands/{chunk-ZHZSZNE2.js → chunk-HATKF6VX.js} +2 -2
- package/dist/commands/{chunk-ELWNRE6E.js → chunk-HH3CVIFU.js} +5 -5
- package/dist/commands/{chunk-7GMTJDO2.js → chunk-HHMMGDMP.js} +6 -6
- package/dist/commands/{chunk-VD5674LW.js → chunk-HI5WPM6C.js} +2 -2
- package/dist/commands/{chunk-JUUBDYFZ.js → chunk-HQSWPRUF.js} +4 -4
- package/dist/commands/{chunk-ZAJD6T6E.js → chunk-HVCQYZVD.js} +2 -2
- package/dist/commands/chunk-HWEZRNPL.js +66 -0
- package/dist/commands/{chunk-J6GIVMXI.js → chunk-HX3FFIO5.js} +18 -3
- package/dist/commands/{chunk-GU5ML3Y3.js → chunk-HXDTA5VU.js} +13 -68
- package/dist/commands/{chunk-BNXE3NVB.js → chunk-I2KCGKJI.js} +1 -1
- package/dist/commands/{chunk-LC7SBONO.js → chunk-IAD4WLLI.js} +1 -1
- package/dist/commands/{chunk-WWC5L3AO.js → chunk-IB5TT73I.js} +2 -2
- package/dist/commands/{chunk-HOSZITJM.js → chunk-IBAYXCMU.js} +2 -2
- package/dist/commands/chunk-IGDJNXX2.js +49 -0
- package/dist/commands/{chunk-OJ4LGBVD.js → chunk-ILIITIMQ.js} +3 -3
- package/dist/commands/{chunk-CUR2WNYB.js → chunk-IRGDMSTI.js} +3 -3
- package/dist/commands/{chunk-PZTWQYRI.js → chunk-IYJEBWW5.js} +3 -3
- package/dist/commands/{chunk-A3D2XHOJ.js → chunk-J22PSIXR.js} +40 -9
- package/dist/commands/{chunk-O27H6NN6.js → chunk-J66YBAAM.js} +3 -5
- package/dist/commands/{chunk-P6RGQXHI.js → chunk-J6WKZRV2.js} +2 -2
- package/dist/commands/{chunk-NFEBQED3.js → chunk-J7IO3AYH.js} +2 -2
- package/dist/commands/{chunk-T57W3UWK.js → chunk-JAKC2BHX.js} +1 -1
- package/dist/commands/{chunk-3EO2XN3A.js → chunk-JCAQ7B6J.js} +4 -4
- package/dist/commands/{chunk-QQZOQ7AM.js → chunk-JFLFGLE4.js} +1 -1
- package/dist/commands/{chunk-ZDSDPKCD.js → chunk-JIGBNCDR.js} +1 -1
- package/dist/commands/{chunk-Q5N2J2UF.js → chunk-JJHWTFWQ.js} +5 -7
- package/dist/commands/{chunk-EI6JG5DF.js → chunk-JKOGWGQM.js} +1 -1
- package/dist/commands/{chunk-RK4HE5NW.js → chunk-JM6EVOFN.js} +4 -4
- package/dist/commands/{chunk-EBNIX2TC.js → chunk-JV24VP2O.js} +1 -1
- package/dist/commands/{chunk-BCK5LW4F.js → chunk-JVKXJ763.js} +3 -3
- package/dist/commands/{chunk-D5TAR6TV.js → chunk-JZHY7D6D.js} +1 -1
- package/dist/commands/{chunk-CRNPPKP2.js → chunk-JZK33TA5.js} +1 -1
- package/dist/commands/{chunk-UOAG2XQT.js → chunk-K275REYP.js} +3 -3
- package/dist/commands/{chunk-HESMKHEB.js → chunk-K4G3HOKS.js} +2 -2
- package/dist/commands/{chunk-L6XN3EXI.js → chunk-K64EIHD2.js} +1 -1
- package/dist/commands/{chunk-RINVPTA2.js → chunk-KCFOP5RI.js} +28 -28
- package/dist/commands/{chunk-O26Y2FOJ.js → chunk-KGE4AS2Y.js} +1 -1
- package/dist/commands/{chunk-EWA72KO7.js → chunk-KK2SL42W.js} +2 -2
- package/dist/commands/{chunk-MMXZKLDU.js → chunk-KK7TEL5G.js} +10 -4
- package/dist/commands/{chunk-UEURNXE5.js → chunk-KKIMVXAP.js} +2 -2
- package/dist/commands/{chunk-MAGJFH5T.js → chunk-KODXWMBX.js} +6 -6
- package/dist/commands/{chunk-D4HNS43Q.js → chunk-KPSKWTOS.js} +17 -17
- package/dist/commands/{chunk-VFJYOAOQ.js → chunk-KTV2HNWB.js} +2 -2
- package/dist/commands/{chunk-OWR2TCOY.js → chunk-KWYQR5MK.js} +5 -5
- package/dist/commands/{chunk-FNQW6NY7.js → chunk-KXK2A2HB.js} +6 -2
- package/dist/commands/{chunk-O5FVBIRI.js → chunk-KZ5BBBMO.js} +5 -5
- package/dist/commands/{chunk-JUJFIATR.js → chunk-KZ7HD37E.js} +6 -6
- package/dist/commands/{chunk-2YCKPX3A.js → chunk-KZZWPUJW.js} +1 -1
- package/dist/commands/{chunk-MYNM3YMR.js → chunk-L7DAL54N.js} +3 -3
- package/dist/commands/{chunk-NOXLKIPR.js → chunk-LAR76BFA.js} +1 -1
- package/dist/commands/{chunk-ZA3W73PF.js → chunk-LB557AHJ.js} +3 -3
- package/dist/commands/{chunk-LYEKT3IN.js → chunk-LEB2VP7F.js} +1 -1
- package/dist/commands/{chunk-WQJ7O3C3.js → chunk-LJXKVLYI.js} +1 -1
- package/dist/commands/{chunk-CHX4QTP4.js → chunk-LJZERYLG.js} +1 -1
- package/dist/commands/{chunk-PF22VUWB.js → chunk-LOOFYHUM.js} +76 -26
- package/dist/commands/{chunk-HIPO6HUG.js → chunk-LPSULLNK.js} +1 -1
- package/dist/commands/{chunk-G47ZNQVG.js → chunk-LR22UK5W.js} +1 -1
- package/dist/commands/{chunk-SV4FHQE7.js → chunk-LT7QSHR4.js} +14 -14
- package/dist/commands/{chunk-HIB5G2X6.js → chunk-LUXWDMKI.js} +7 -7
- package/dist/commands/{chunk-XH6BGVVP.js → chunk-LX7TIEMI.js} +9 -36
- package/dist/commands/{chunk-OGNTJ5JB.js → chunk-LYO6TX5L.js} +1 -1
- package/dist/commands/{chunk-JLREFWJ4.js → chunk-LZ5QXE5N.js} +6 -6
- package/dist/commands/{chunk-WW3TX742.js → chunk-LZPPSOTP.js} +4 -4
- package/dist/commands/{chunk-5WIZR5SC.js → chunk-M4UV3BEV.js} +11 -11
- package/dist/commands/{chunk-LNBUIOK6.js → chunk-M6JDU5EK.js} +4 -4
- package/dist/commands/{chunk-VZSJCFRT.js → chunk-MFBNNTBM.js} +4 -4
- package/dist/commands/{chunk-KHWTJ4F7.js → chunk-MI2OS6TL.js} +3 -3
- package/dist/commands/{chunk-VZCQZFPH.js → chunk-MLW4S35K.js} +19 -8
- package/dist/commands/{chunk-RIUPRMLW.js → chunk-MN425CU6.js} +1 -1
- package/dist/commands/{chunk-7W3D3WRW.js → chunk-MOIOSCZM.js} +2 -2
- package/dist/commands/{chunk-3BNNMJOT.js → chunk-MRORPFSO.js} +20 -320
- package/dist/commands/{chunk-LA5WTOAM.js → chunk-MUGTOJUL.js} +12 -12
- package/dist/commands/{chunk-L6LU2633.js → chunk-MVHPRYHE.js} +1 -1
- package/dist/commands/{chunk-EKCKCX5S.js → chunk-MWO6FOSZ.js} +123 -21
- package/dist/commands/{chunk-AVUGMOHZ.js → chunk-N7QTMTST.js} +2 -2
- package/dist/commands/{chunk-LMSS4ARB.js → chunk-NDBX7LSS.js} +1 -1
- package/dist/commands/{chunk-BEE7OAQ5.js → chunk-NDWZTWXV.js} +21 -2
- package/dist/commands/{chunk-6TESOL3L.js → chunk-NEGJ77RV.js} +7 -7
- package/dist/commands/{chunk-LCEJXF7A.js → chunk-NEGRE5VW.js} +4 -4
- package/dist/commands/{chunk-IXX4SXIP.js → chunk-NFPD2P3V.js} +1 -1
- package/dist/commands/chunk-NHIW7JE6.js +335 -0
- package/dist/commands/{chunk-CJSFC5YI.js → chunk-NILSN7A4.js} +7 -7
- package/dist/commands/{chunk-W4J6YTFE.js → chunk-NOLFSPOB.js} +2 -2
- package/dist/commands/chunk-NT67QTZO.js +65 -0
- package/dist/commands/{chunk-NJT5L6IC.js → chunk-NU7W6QGT.js} +33 -4
- package/dist/commands/chunk-NUR4FQHM.js +21 -0
- package/dist/commands/{chunk-OKKQI4ZG.js → chunk-OAAVY2JK.js} +1 -1
- package/dist/commands/chunk-OF4BY4N7.js +32 -0
- package/dist/commands/{chunk-W47I2KDY.js → chunk-OGS2DK7I.js} +3 -3
- package/dist/commands/{chunk-MS6Q3Z7V.js → chunk-OIPV3PWW.js} +6 -6
- package/dist/commands/{chunk-T33QDAWD.js → chunk-OIX2363L.js} +1 -1
- package/dist/commands/{chunk-GPMSYXYO.js → chunk-OJ65BZBV.js} +283 -15
- package/dist/commands/{chunk-34LAULSC.js → chunk-OKZWEVR4.js} +3 -3
- package/dist/commands/{chunk-2CXAVVST.js → chunk-OL6IF4JC.js} +1 -1
- package/dist/commands/{chunk-6JVNRY5A.js → chunk-OMPRILFH.js} +1 -1
- package/dist/commands/{chunk-VGHSZLYQ.js → chunk-OOWGH2RG.js} +1 -1
- package/dist/commands/{chunk-ERGZPWKP.js → chunk-OP2RFVLS.js} +1 -1
- package/dist/commands/{chunk-UU6GCJGM.js → chunk-ORKVN2LO.js} +2 -2
- package/dist/commands/{chunk-RHII5XI6.js → chunk-OSBWXZJ4.js} +24 -24
- package/dist/commands/{chunk-D3SHCUBC.js → chunk-OVWPZDWP.js} +2 -2
- package/dist/commands/{chunk-Z4HYBFZD.js → chunk-OWYK2BEJ.js} +108 -46
- package/dist/commands/{chunk-P4O67FP5.js → chunk-OX3VQLV2.js} +6 -6
- package/dist/commands/{chunk-L6TU7FC2.js → chunk-OZJP77UM.js} +4 -4
- package/dist/commands/{chunk-SNO7CY2B.js → chunk-P3H3DKTE.js} +2 -2
- package/dist/commands/{chunk-2OIX4JLA.js → chunk-P5SOYWH2.js} +3 -3
- package/dist/commands/{chunk-M4PEC7YW.js → chunk-PHLOTUB7.js} +54 -37
- package/dist/commands/{chunk-73KBUQKI.js → chunk-PTNQCCIB.js} +2 -2
- package/dist/commands/{chunk-4P2LCVGO.js → chunk-PTZEFQUX.js} +8 -8
- package/dist/commands/{chunk-DJVMC3U2.js → chunk-Q426ZSZ4.js} +1 -1
- package/dist/commands/{chunk-US6X7JXC.js → chunk-Q7EEIOAD.js} +4 -4
- package/dist/commands/{chunk-LE7TFPMU.js → chunk-QABRNGQV.js} +2 -2
- package/dist/commands/{chunk-NGKB632X.js → chunk-QDFVVRQP.js} +3 -3
- package/dist/commands/{chunk-36M2UV6C.js → chunk-QGATHT4S.js} +38 -4
- package/dist/commands/{chunk-DIB2Z2OS.js → chunk-QJRVDE7T.js} +1 -1
- package/dist/commands/{chunk-KUJQWO6M.js → chunk-QKTTKAXM.js} +2 -2
- package/dist/commands/{chunk-DXZW4V7J.js → chunk-QMDKDQKW.js} +3 -3
- package/dist/commands/{chunk-VW5SGE7A.js → chunk-QOSC5RKD.js} +1 -1
- package/dist/commands/{chunk-ENLWXAHD.js → chunk-QV5FKMOU.js} +1 -1
- package/dist/commands/{chunk-32SNWQJP.js → chunk-R2THGPI3.js} +2 -2
- package/dist/commands/{chunk-RVHBWSIG.js → chunk-R54Z2Z3X.js} +2 -2
- package/dist/commands/{chunk-CJAA5GAF.js → chunk-RG53UFNW.js} +15 -15
- package/dist/commands/{chunk-HJKZDDDI.js → chunk-RHKCWJQX.js} +1 -1
- package/dist/commands/{chunk-RPDWFUQO.js → chunk-RKIAX4DZ.js} +36 -84
- package/dist/commands/{chunk-LE2T3FGJ.js → chunk-RLBFEHHC.js} +2 -4
- package/dist/commands/{chunk-5GBZ43UA.js → chunk-RMDLFLPE.js} +1 -1
- package/dist/commands/{chunk-U2UH4VM4.js → chunk-RN2YDNLF.js} +2 -2
- package/dist/commands/{chunk-GQHUFNXN.js → chunk-RRAIRS2T.js} +1 -1
- package/dist/commands/{chunk-DRCTDVI2.js → chunk-RUQY5TS3.js} +3 -3
- package/dist/commands/{chunk-WGULS5DA.js → chunk-RW64VHEB.js} +1 -0
- package/dist/commands/{chunk-4G7NKNAZ.js → chunk-RXYMJPJB.js} +3 -3
- package/dist/commands/{chunk-B33BTNB4.js → chunk-S4M6UWR2.js} +21 -5
- package/dist/commands/{chunk-4Q4FXBUQ.js → chunk-SASX3W2M.js} +2 -2
- package/dist/commands/{chunk-TIXJY22D.js → chunk-SJ2ZN575.js} +5 -5
- package/dist/commands/{chunk-NSZTSCBW.js → chunk-SP7DKYGU.js} +13 -13
- package/dist/commands/{chunk-T3FD3Q73.js → chunk-SRG6PKVS.js} +1 -1
- package/dist/commands/{chunk-QA22PBCJ.js → chunk-SSL6A3Y4.js} +3 -3
- package/dist/commands/{chunk-4BEIYKI2.js → chunk-SV4FZR24.js} +2 -0
- package/dist/commands/{chunk-HZSQI6TD.js → chunk-SVTS7ACS.js} +2 -2
- package/dist/commands/{chunk-F7XLEK55.js → chunk-SVV4U5AR.js} +1 -1
- package/dist/commands/{chunk-RRQFITJE.js → chunk-SXJM4DZ5.js} +1 -1
- package/dist/commands/{chunk-OIDMJASD.js → chunk-SYB3M632.js} +1 -1
- package/dist/commands/{chunk-UJOZ2MGX.js → chunk-SYOXIKB7.js} +6 -6
- package/dist/commands/{chunk-5SB37YDW.js → chunk-SZG5HDNP.js} +3 -3
- package/dist/commands/{chunk-R2CF6VZE.js → chunk-T4F33UKZ.js} +4 -4
- package/dist/commands/{chunk-ESQEEL4O.js → chunk-TAEGXID2.js} +2 -2
- package/dist/commands/chunk-TEPYEUYG.js +585 -0
- package/dist/commands/{chunk-LUMCYDGE.js → chunk-TFLHYC2F.js} +2 -2
- package/dist/commands/{chunk-V5OIPYA6.js → chunk-TJKM56WJ.js} +4 -4
- package/dist/commands/{chunk-CYQ3ZF7R.js → chunk-TLAB552K.js} +86 -13
- package/dist/commands/{chunk-ST32OGPY.js → chunk-TP6L4W3W.js} +5 -5
- package/dist/commands/{chunk-C26LKDBE.js → chunk-TR7WWYD5.js} +1 -1
- package/dist/commands/{chunk-PWYXY46Y.js → chunk-TYNH2R66.js} +15 -15
- package/dist/commands/{chunk-AZUE65NT.js → chunk-U5P6G3UV.js} +2 -2
- package/dist/commands/{chunk-REPANBLS.js → chunk-U7Y6RKLK.js} +1 -1
- package/dist/commands/{chunk-55I7OYHI.js → chunk-UIMMWH7U.js} +1 -1
- package/dist/commands/{chunk-72J2G2E7.js → chunk-UKBBWMLE.js} +20 -20
- package/dist/commands/{chunk-VTLL6CKO.js → chunk-UNMSZGSG.js} +14 -14
- package/dist/commands/chunk-UOVUUVDK.js +18 -0
- package/dist/commands/{chunk-JNWHX25C.js → chunk-URDT2O2K.js} +1 -1
- package/dist/commands/{chunk-FGZQSSGH.js → chunk-UREXZJDB.js} +1 -1
- package/dist/commands/{chunk-O4WBADCX.js → chunk-UTHUX7VU.js} +3 -3
- package/dist/commands/{chunk-PDDKRHHS.js → chunk-V5OUZFWK.js} +3 -3
- package/dist/commands/{chunk-N4O5I55P.js → chunk-VCPGFBMN.js} +8 -8
- package/dist/commands/{chunk-WN7NK3NY.js → chunk-VGPIQNDB.js} +1 -1
- package/dist/commands/{chunk-HOGFJHBT.js → chunk-VJS2MCLA.js} +1 -1
- package/dist/commands/{chunk-4YI4SLRJ.js → chunk-VK6D5CWA.js} +8 -8
- package/dist/commands/{chunk-4LWRCPS5.js → chunk-VOF3N4WO.js} +3 -3
- package/dist/commands/{chunk-AM44D7NF.js → chunk-VQRT32JB.js} +1 -1
- package/dist/commands/{chunk-AS3GWVAN.js → chunk-VQVPAVQ3.js} +1 -1
- package/dist/commands/{chunk-6VTJO5L2.js → chunk-VV4TQYGD.js} +3 -3
- package/dist/commands/{chunk-WIE7VUBE.js → chunk-W7DRUOF7.js} +5 -5
- package/dist/commands/{chunk-HH2KDLTP.js → chunk-WAEN2RTT.js} +2 -2
- package/dist/commands/{chunk-NKKH3PBE.js → chunk-WB4T3VY2.js} +18 -1
- package/dist/commands/{chunk-DNJC7X73.js → chunk-WCEUMOKK.js} +2 -2
- package/dist/commands/{chunk-BK6Q4VCA.js → chunk-WTH6NTXU.js} +4 -4
- package/dist/commands/{chunk-WG6GYBRJ.js → chunk-WWVYEHQT.js} +2 -1
- package/dist/commands/{chunk-P4CWLRT2.js → chunk-X3TNPALI.js} +1 -1
- package/dist/commands/{chunk-LZNYHWRO.js → chunk-XC6GG5JR.js} +3 -3
- package/dist/commands/{chunk-RI7EQYKL.js → chunk-XFWI6WHH.js} +2 -2
- package/dist/commands/{chunk-BY3POLIQ.js → chunk-XHGWMD3L.js} +7 -7
- package/dist/commands/{chunk-BPSJSHYD.js → chunk-XI2ABCRX.js} +2 -2
- package/dist/commands/{chunk-TS4ZK46L.js → chunk-XKSUBUIH.js} +5 -5
- package/dist/commands/{chunk-K7GL3BGI.js → chunk-XPBF5DG3.js} +4 -4
- package/dist/commands/{chunk-6SKMZGER.js → chunk-XUMYPESL.js} +20 -8
- package/dist/commands/{chunk-QS5USD4T.js → chunk-XXC32PVL.js} +5 -4
- package/dist/commands/{chunk-ORSI7Y55.js → chunk-XXN2EZBY.js} +1 -1
- package/dist/commands/{chunk-IZVM2TTH.js → chunk-XZQWEVR3.js} +2 -2
- package/dist/commands/{chunk-E3CXOVPQ.js → chunk-Y27PTXXI.js} +1 -1
- package/dist/commands/{chunk-337QQM4C.js → chunk-Y4EBUI6M.js} +106 -5
- package/dist/commands/{chunk-WRX3MINT.js → chunk-YAU3LYNF.js} +1 -1
- package/dist/commands/{chunk-JB7R3A4A.js → chunk-YDURQICF.js} +4 -4
- package/dist/commands/{chunk-RX5JSPPH.js → chunk-YGFOGA7C.js} +11 -11
- package/dist/commands/{chunk-S6SXMBF2.js → chunk-YHJ2AJMA.js} +2 -2
- package/dist/commands/{chunk-MVPUQLN5.js → chunk-YM77CF4D.js} +4 -4
- package/dist/commands/{chunk-ZYIMQHCB.js → chunk-YNPRJCEO.js} +6 -6
- package/dist/commands/{chunk-3UKJFWKS.js → chunk-YTBQAD5W.js} +3 -3
- package/dist/commands/{chunk-KIVOZY2J.js → chunk-ZBZ5DDCH.js} +66 -64
- package/dist/commands/{chunk-TAPDXK34.js → chunk-ZLRUHSOP.js} +1 -1
- package/dist/commands/{chunk-XYAK53TK.js → chunk-ZNR75OXP.js} +2 -1
- package/dist/commands/{chunk-CADFBQJJ.js → chunk-ZSOR4ISJ.js} +4 -4
- package/dist/commands/{chunk-6NRTLH6I.js → chunk-ZYFHYQA7.js} +1 -1
- package/dist/commands/{chunk-Q7TV3OV6.js → chunk-ZZFFSQF4.js} +4 -4
- package/dist/commands/{chunk-PDAY76AN.js → chunk-ZZULXNC2.js} +1 -1
- package/dist/commands/{chunk-5Y7QQYTU.js → chunk-ZZXO6TFH.js} +1 -1
- package/dist/commands/code-symbol-cli.js +4 -4
- package/dist/commands/codex-hook-adapter.js +99 -100
- package/dist/commands/command-derive.js +10 -10
- package/dist/commands/cost-audit-main.js +94 -92
- package/dist/commands/cspell-cached.js +24 -23
- package/dist/commands/defect-origin-main.js +19 -18
- package/dist/commands/defect-report-main.js +15 -14
- package/dist/commands/disposition-cli.js +67 -64
- package/dist/commands/doctor.js +3 -3
- package/dist/commands/document-read-cli.js +89 -9
- package/dist/commands/document-section-main.js +89 -9
- package/dist/commands/edit-files-cli.js +1 -1
- package/dist/commands/effect-audit-cli.js +20 -19
- package/dist/commands/epic-audit-main.js +55 -53
- package/dist/commands/epic-bundle-main.js +87 -85
- package/dist/commands/epic-check.js +16 -15
- package/dist/commands/epic-main.js +93 -91
- package/dist/commands/epic-next-main.js +51 -49
- package/dist/commands/format-edited-cli.js +30 -32
- package/dist/commands/format.js +11 -10
- package/dist/commands/fresh-machine-cli.js +6 -6
- package/dist/commands/git-followup-workflow.js +137 -122
- package/dist/commands/git-workflow.js +28 -27
- package/dist/commands/github-release-cli.js +26 -3
- package/dist/commands/hook-ledger-cli.js +74 -126
- package/dist/commands/init-main.js +20 -19
- package/dist/commands/inputs.json +1909 -1878
- package/dist/commands/issue-ack-cli.js +5 -5
- package/dist/commands/issue-already-done-cli.js +63 -58
- package/dist/commands/issue-body-cli.js +44 -42
- package/dist/commands/issue-cite-main.js +11 -10
- package/dist/commands/issue-comment-main.js +15 -11
- package/dist/commands/issue-consolidate-cli.js +31 -30
- package/dist/commands/issue-file-main.js +114 -110
- package/dist/commands/issue-fold-existing-cli.js +88 -86
- package/dist/commands/issue-fold-main.js +26 -25
- package/dist/commands/issue-lint-main.js +38 -37
- package/dist/commands/issue-measured-cli.js +66 -61
- package/dist/commands/issue-plan-cli.js +103 -101
- package/dist/commands/issue-premise-unmet-cli.js +66 -61
- package/dist/commands/issue-priority-cli.js +13 -12
- package/dist/commands/issue-read-main.js +18 -17
- package/dist/commands/issue-release-class-cli.js +12 -11
- package/dist/commands/issue-release-main.js +13 -12
- package/dist/commands/issue-scout-main.js +89 -87
- package/dist/commands/issue-spill-main.js +114 -110
- package/dist/commands/issue-state-main.js +16 -15
- package/dist/commands/issue-tick-cli.js +14 -13
- package/dist/commands/josh-completion.js +10 -10
- package/dist/commands/lane-adopt-cli.js +19 -19
- package/dist/commands/lane-breakdown-cli.js +154 -126
- package/dist/commands/lane-cli.js +131 -125
- package/dist/commands/lane-launch-main.js +17 -17
- package/dist/commands/lane-limit-cli.js +81 -79
- package/dist/commands/lane-measure-cli.js +246 -130
- package/dist/commands/lane-pause-cli.js +15 -15
- package/dist/commands/lane-plan-cli.js +108 -101
- package/dist/commands/lane-resolve-cli.js +20 -19
- package/dist/commands/lane-restart-cli.js +124 -118
- package/dist/commands/lane-why-cli.js +85 -82
- package/dist/commands/lane-withdraw-cli.js +49 -48
- package/dist/commands/latest-corepack.js +3 -3
- package/dist/commands/latest-if-required-cli.js +9 -9
- package/dist/commands/latest-scope-main.js +5 -5
- package/dist/commands/latest-update.js +3 -3
- package/dist/commands/lines-command.js +3 -3
- package/dist/commands/lint-parallel-main.js +32 -31
- package/dist/commands/lint-related.js +79 -60
- package/dist/commands/lint-rule.js +32 -31
- package/dist/commands/lockfile-policy.js +11 -11
- package/dist/commands/main-merge-main.js +5 -5
- package/dist/commands/main-sync-main.js +5 -5
- package/dist/commands/managed-config-scope-cli.js +3 -3
- package/dist/commands/measure-rerun-cli.js +10 -10
- package/dist/commands/metrics-command.js +91 -58
- package/dist/commands/observation-record-cli.js +3 -3
- package/dist/commands/observations-flush-cli.js +27 -25
- package/dist/commands/oracle-list-cli.js +2 -2
- package/dist/commands/overrides-check.js +4 -4
- package/dist/commands/package-scout-cli.js +67 -26
- package/dist/commands/plan-consumers-main.js +4 -4
- package/dist/commands/plan-scaffold-cli.js +132 -91
- package/dist/commands/pr-classification-main.js +3 -3
- package/dist/commands/pre-commit-lint.js +11 -12
- package/dist/commands/pre-commit-type-check.js +25 -24
- package/dist/commands/pre-push-unit.js +33 -33
- package/dist/commands/pretool-guard-cli.js +90 -91
- package/dist/commands/project-profile-cli.js +5 -4
- package/dist/commands/propagate.js +15 -15
- package/dist/commands/prose-stale-cli.js +20 -19
- package/dist/commands/publishable-range-check.js +4 -4
- package/dist/commands/read-files-cli.js +2 -2
- package/dist/commands/read-set-cli.js +61 -24
- package/dist/commands/refactor-scan-cli.js +6 -6
- package/dist/commands/release-cli.js +64 -36
- package/dist/commands/release-scope-main.js +19 -18
- package/dist/commands/rename-cli.js +27 -29
- package/dist/commands/reserved-run.js +3 -3
- package/dist/commands/retrospective-cli.js +104 -102
- package/dist/commands/review-attest-cli.js +6 -6
- package/dist/commands/review-brief-main.js +127 -109
- package/dist/commands/review-findings-cli.js +2 -2
- package/dist/commands/review-pair-cli.js +110 -84
- package/dist/commands/review-record-main.js +108 -83
- package/dist/commands/review-round2-cli.js +46 -45
- package/dist/commands/review-stops-cli.js +16 -16
- package/dist/commands/review-submit-cli.js +127 -109
- package/dist/commands/rule-list.js +58 -60
- package/dist/commands/rule-value-cli.js +226 -74
- package/dist/commands/run-add-cli.js +28 -27
- package/dist/commands/run-board-main.js +136 -132
- package/dist/commands/run-carry-cli.js +127 -124
- package/dist/commands/run-chain-cli.js +116 -93
- package/dist/commands/run-cut-cli.js +124 -119
- package/dist/commands/run-ending-cli.js +19 -22
- package/dist/commands/run-entry-cli.js +183 -180
- package/dist/commands/run-event-cli.js +5 -5
- package/dist/commands/run-handoff-cli.js +52 -28
- package/dist/commands/run-handoff-lanes-cli.js +15 -15
- package/dist/commands/run-hold-main.js +64 -62
- package/dist/commands/run-liveness-cli.js +11 -11
- package/dist/commands/run-merge-main.js +119 -116
- package/dist/commands/run-next-cli.js +87 -86
- package/dist/commands/run-park-cli.js +111 -92
- package/dist/commands/run-pause-cli.js +147 -133
- package/dist/commands/run-pickup-cli.js +13 -13
- package/dist/commands/run-prep-main.js +83 -82
- package/dist/commands/run-prime-cli.js +107 -87
- package/dist/commands/run-progress-main.js +123 -107
- package/dist/commands/run-report-cli.js +25 -24
- package/dist/commands/run-review-cli.js +168 -149
- package/dist/commands/run-ship-cli.js +208 -203
- package/dist/commands/run-ship-evidence-cli.js +38 -37
- package/dist/commands/run-ship-wait-main.js +40 -37
- package/dist/commands/run-split-cli.js +127 -125
- package/dist/commands/run-stale-main.js +36 -35
- package/dist/commands/run-status-cli.js +16 -15
- package/dist/commands/run-step-cli.js +173 -164
- package/dist/commands/run-tail-cli.js +1 -1
- package/dist/commands/run-tidy-main.js +30 -29
- package/dist/commands/run-wake-main.js +137 -119
- package/dist/commands/run-watcher-guard-cli.js +30 -29
- package/dist/commands/secretlint-scan.js +2 -2
- package/dist/commands/selfcheck-cli.js +27 -26
- package/dist/commands/session-language-main.js +48 -28
- package/dist/commands/sonar-hotspots-cli.js +3 -3
- package/dist/commands/split-assess-cli.js +24 -23
- package/dist/commands/split-child-recover-cli.js +13 -12
- package/dist/commands/start.js +37 -35
- package/dist/commands/stash-pop-main.js +3 -3
- package/dist/commands/stash-push-main.js +3 -3
- package/dist/commands/stop-guard.js +144 -143
- package/dist/commands/sync-main.js +11 -10
- package/dist/commands/telegram-test-main.js +5 -5
- package/dist/commands/test-declared.js +9 -8
- package/dist/commands/test-e2e-guard.js +23 -22
- package/dist/commands/test-pinned-main.js +26 -25
- package/dist/commands/test-reach-cli.js +15 -14
- package/dist/commands/test-red-main.js +5 -5
- package/dist/commands/{test-related-ZT2AO62I.js → test-related-ZCNC46MS.js} +31 -31
- package/dist/commands/test-related-main.js +51 -50
- package/dist/commands/test-unit-guard-main.js +9 -8
- package/dist/commands/time-cli.js +24 -27
- package/dist/commands/time-density-cli.js +8 -9
- package/dist/commands/tree-status-cli.js +4 -4
- package/dist/commands/type-check-command.js +8 -7
- package/dist/commands/ui-shot-cli.js +4 -4
- package/dist/commands/uninstall.js +20 -19
- package/dist/commands/unused-members-cli.js +9 -8
- package/dist/commands/upstream-interrupt-main.js +115 -111
- package/dist/commands/verification-gate.js +46 -46
- package/dist/commands/version-check.js +5 -5
- package/dist/hooks/{chunk-LWD43Z3C.js → chunk-5CUXGQT6.js} +1667 -107
- package/dist/hooks/{chunk-4YXV2REH.js → chunk-5R5YFQR5.js} +8 -8
- package/dist/hooks/{chunk-LKQBEKBI.js → chunk-6RLY27FT.js} +8 -8
- package/dist/hooks/{chunk-CICKRHTB.js → chunk-AO4TOV4V.js} +119 -2679
- package/dist/hooks/{chunk-NUPVO7RI.js → chunk-G5WSPYJ6.js} +4296 -1687
- package/dist/hooks/{chunk-UU4PTPEZ.js → chunk-HHIVWGHX.js} +250 -125
- package/dist/hooks/{chunk-P7BPAU26.js → chunk-IURJANNZ.js} +2 -2
- package/dist/hooks/{chunk-6RR6JZSB.js → chunk-OV22V63P.js} +357 -1744
- package/dist/hooks/{chunk-RQXECHAS.js → chunk-SXABK6UV.js} +57 -45
- package/dist/hooks/codex-hook-adapter.js +11 -11
- package/dist/hooks/daemon.js +1053 -690
- package/dist/hooks/format-edited.js +5 -5
- package/dist/hooks/inputs.json +542 -527
- package/dist/hooks/pretool-guard.js +7 -7
- package/dist/hooks/session-lang.js +293 -16
- package/dist/hooks/stop-guard.js +225 -48
- package/dist/inputs.json +65 -65
- package/dist/josh.js +73 -19
- package/dist/self-sync-guard/index.js +18 -1
- package/dist/version/index.js +18 -1
- package/package.json +3 -3
- package/pnpm-workspace.yaml +5 -13
- package/prompts/collaboration-workflow/issue-template.en.md +56 -52
- package/scripts/agent/agent-argv.ts +20 -6
- package/scripts/agent/agent-phase-profile.ts +89 -0
- package/scripts/agent/agent-role-profile.ts +3 -71
- package/scripts/agent/agent-ship-cap.ts +44 -0
- package/scripts/agent/agent-worker-profile.ts +154 -0
- package/scripts/agent/claude-agent-argv.ts +1 -1
- package/scripts/agent/lane-instructions.ts +29 -3
- package/scripts/auto-ok/auto-ok-judge-cli.ts +3 -0
- package/scripts/auto-ok/auto-ok-judge-write.ts +2 -1
- package/scripts/auto-ok/auto-ok-judge.ts +4 -2
- package/scripts/backlog/backlog-drive-escalate.ts +115 -0
- package/scripts/backlog/backlog-drive-stalled-retry.ts +48 -10
- package/scripts/document/document-scan.ts +35 -1
- package/scripts/gh/git-pr-checks-failed.ts +24 -0
- package/scripts/hooks/implementation-shell-deny-expansion.ts +20 -0
- package/scripts/hooks/implementation-shell-deny-git.ts +128 -0
- package/scripts/hooks/implementation-shell-deny.ts +14 -138
- package/scripts/hooks/implementation-shell.ts +28 -5
- package/scripts/hooks/step-zero-notice.ts +9 -6
- package/scripts/hooks/stop-actions.ts +4 -2
- package/scripts/init/init-logic-workspace.ts +1 -1
- package/scripts/issue/issue-auto-ok.ts +43 -4
- package/scripts/issue/issue-body-keys.ts +4 -0
- package/scripts/issue/issue-comment-cli.ts +15 -2
- package/scripts/issue/issue-evidence-exit.ts +6 -2
- package/scripts/issue/issue-file-cli.ts +5 -1
- package/scripts/issue/issue-file-pass.ts +14 -7
- package/scripts/issue/issue-file-worker.ts +95 -0
- package/scripts/issue/issue-file.ts +1 -1
- package/scripts/issue/issue-outcome.ts +107 -0
- package/scripts/issue/issue-read.ts +12 -7
- package/scripts/issue/issue-watch-diff.ts +2 -1
- package/scripts/josh/josh-commands-ai.ts +2 -2
- package/scripts/josh/josh-commands-development.ts +21 -5
- package/scripts/josh/josh-commands-issue-write.ts +3 -2
- package/scripts/josh/josh-commands-lint.ts +1 -1
- package/scripts/josh/josh-commands-project.ts +7 -2
- package/scripts/josh/josh-commands-run.ts +10 -2
- package/scripts/josh/josh-commands-workflow.ts +5 -0
- package/scripts/josh/session-language-cli.ts +1 -1
- package/scripts/lane/lane-breakdown-cli.ts +14 -4
- package/scripts/lane/lane-breakdown-text.ts +7 -0
- package/scripts/lane/lane-breakdown.ts +21 -1
- package/scripts/lane/lane-dispatch-prepare.ts +83 -0
- package/scripts/lane/lane-dispatch.ts +3 -53
- package/scripts/lane/lane-elapsed-time.ts +118 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +4 -1
- package/scripts/lane/lane-net-time.ts +35 -7
- package/scripts/lane/lane-overrun.ts +1 -1
- package/scripts/lane/lane-plan-cli.ts +7 -3
- package/scripts/lane/lane-plan-estimate.ts +57 -0
- package/scripts/lane/lane-plan-size.ts +11 -20
- package/scripts/lane/lane-plan.ts +1 -0
- package/scripts/lane/lane-relaunch.ts +9 -4
- package/scripts/lane/lane-stage-budget.ts +6 -1
- package/scripts/lane/lane-stage-events.ts +103 -0
- package/scripts/lane/lane-stats-tables.ts +3 -0
- package/scripts/lane/lane-stop-check-stats.ts +117 -0
- package/scripts/lane/lane-stop-stats.ts +30 -6
- package/scripts/lane/lane-why-causes.ts +3 -11
- package/scripts/lane/openai-lane-supervisor-owner.ts +12 -0
- package/scripts/lane/openai-lane-supervisor.ts +36 -1
- package/scripts/lib/home-tilde.ts +24 -0
- package/scripts/lib/package-manifest.ts +27 -1
- package/scripts/observations/observation-ledger-archive.ts +180 -0
- package/scripts/observations/observation-ledger-home.ts +1 -0
- package/scripts/observations/observation-ledger.ts +5 -0
- package/scripts/observations/observations-flush-transaction.ts +358 -0
- package/scripts/observations/observations-flush.ts +72 -172
- package/scripts/plan/plan-scaffold-cli.ts +17 -6
- package/scripts/plan/plan-scaffold.ts +11 -0
- package/scripts/release/github-release-notes.ts +24 -0
- package/scripts/release/github-release-runs.ts +32 -6
- package/scripts/release/github-release.ts +10 -2
- package/scripts/release/release-progress.ts +22 -10
- package/scripts/release/release-publish-run.ts +39 -6
- package/scripts/repo/repository-labels.ts +23 -11
- package/scripts/review/review-comment-round.ts +10 -5
- package/scripts/rules/broad-investigation-shell.ts +2 -2
- package/scripts/rules/codex-prompt.ts +63 -0
- package/scripts/rules/direct-issue-comment.ts +62 -2
- package/scripts/rules/direct-issue-read.ts +55 -2
- package/scripts/rules/guard-remedy.ts +10 -4
- package/scripts/rules/issue-citation.ts +20 -9
- package/scripts/rules/last-prompt.ts +8 -4
- package/scripts/rules/rule-value-cli.ts +85 -4
- package/scripts/rules/rule-value-trend.ts +108 -0
- package/scripts/rules/shell-redirects.ts +19 -7
- package/scripts/rules/shell-segments.ts +145 -20
- package/scripts/rules/shell-tokens.ts +66 -0
- package/scripts/rules/standalone-gh-call.ts +63 -0
- package/scripts/rules/unasked-filing.ts +12 -4
- package/scripts/run/board/run-board-closed.ts +10 -1
- package/scripts/run/board/run-board-decision-read.ts +52 -12
- package/scripts/run/board/run-board-decision.ts +5 -0
- package/scripts/run/board/run-board-ending-reason.ts +21 -7
- package/scripts/run/board/run-board-github.ts +8 -1
- package/scripts/run/board/run-board-header.ts +4 -5
- package/scripts/run/board/run-board-layout.ts +5 -3
- package/scripts/run/board/run-board-link.ts +2 -0
- package/scripts/run/board/run-board-operation.ts +6 -2
- package/scripts/run/board/run-board-pause-fixture.json +12 -0
- package/scripts/run/board/run-board-pause.ts +87 -0
- package/scripts/run/board/run-board-plan-shared.ts +2 -0
- package/scripts/run/board/run-board-read.ts +7 -1
- package/scripts/run/board/run-board-render-condition.ts +10 -1
- package/scripts/run/board/run-board-render-title.ts +7 -0
- package/scripts/run/board/run-board-roots.ts +25 -2
- package/scripts/run/board/run-board-settle.ts +16 -2
- package/scripts/run/board/run-board-setup.ts +13 -7
- package/scripts/run/board/run-board-snapshot.ts +4 -0
- package/scripts/run/board/run-board-status.ts +13 -1
- package/scripts/run/board/run-board-tick.ts +7 -1
- package/scripts/run/cut/run-cut-cli.ts +2 -1
- package/scripts/run/park/run-park-cli.ts +13 -1
- package/scripts/run/park/run-park-escalate.ts +102 -0
- package/scripts/run/park/run-stalled.ts +29 -7
- package/scripts/run/review/run-review-early-push.ts +6 -6
- package/scripts/run/ship/run-ship-stop-cause.ts +12 -1
- package/scripts/split/split-assess.ts +14 -5
- package/scripts/test/test-related-touched.ts +21 -3
- package/scripts/test/test-related.ts +1 -1
- package/dist/commands/chunk-6WEVLIZE.js +0 -29
- package/dist/commands/chunk-E2ZCUKHT.js +0 -274
- package/dist/commands/chunk-NMLCPYBN.js +0 -134
- package/dist/commands/chunk-QEIO2ZNQ.js +0 -324
- package/dist/commands/chunk-QWX7EBC6.js +0 -112
- package/dist/commands/chunk-RQRLW4XK.js +0 -20
- package/dist/commands/chunk-UCQJDYE3.js +0 -21
- package/dist/commands/chunk-W4YH2DF3.js +0 -58
- package/dist/commands/{chunk-LRA3PXHS.js → chunk-ENKFCOVY.js} +3 -3
- package/dist/commands/{chunk-RUWV4INF.js → chunk-HQGNXR6I.js} +3 -3
|
@@ -71,55 +71,59 @@ The `en` column of `issue-template.md`'s template; its rules and label table →
|
|
|
71
71
|
|
|
72
72
|
### Correspondence table
|
|
73
73
|
|
|
74
|
-
| Kind | ja | en
|
|
75
|
-
| ------- | -------------- |
|
|
76
|
-
| key | 種別 | Type
|
|
77
|
-
| key | 目的 | Purpose
|
|
78
|
-
| key | 互換性 | Compatibility
|
|
79
|
-
| key | リリース分類 | Release classification
|
|
80
|
-
| key | 人の判断 | Human judgement
|
|
81
|
-
| key | 判定規則 | Decision rule
|
|
82
|
-
| key | 中止条件 | Close condition
|
|
83
|
-
| key | 優先度 | Priority
|
|
84
|
-
| key | セキュリティ | Security
|
|
85
|
-
| key | 原因の park | Cause park
|
|
86
|
-
| key | 原因のレーン | Cause lane
|
|
87
|
-
| key | 原因の損失 | Cause loss
|
|
88
|
-
| key | 実施順 | Order
|
|
89
|
-
| key | 原因 | Cause
|
|
90
|
-
| key | 規模見積もり | Size estimate
|
|
91
|
-
| key | 分割しない理由 | No-split reason
|
|
92
|
-
| key | 行を増やさない | No added lines
|
|
93
|
-
| key | 先行リファクタ | Refactor first
|
|
94
|
-
| key | 強制 | Enforcement
|
|
95
|
-
| key | 計測 | Measurement
|
|
96
|
-
| key | 計測宣言 | Measure declaration
|
|
97
|
-
| key | 前提 | Premise
|
|
98
|
-
| key | 計測宣言なし | No measure declaration
|
|
99
|
-
| key | 実施可能条件 | Sample gate
|
|
100
|
-
| key | 実施可能日 | Not before
|
|
101
|
-
| key | 出どころ | Source
|
|
102
|
-
|
|
|
103
|
-
|
|
|
104
|
-
|
|
|
105
|
-
| value |
|
|
106
|
-
| value |
|
|
107
|
-
| value |
|
|
108
|
-
| value |
|
|
109
|
-
| value |
|
|
110
|
-
| value |
|
|
111
|
-
| value |
|
|
112
|
-
| value |
|
|
113
|
-
| value |
|
|
114
|
-
| value |
|
|
115
|
-
| value |
|
|
116
|
-
| value |
|
|
117
|
-
| value |
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
|
|
|
121
|
-
| heading |
|
|
122
|
-
| heading |
|
|
123
|
-
| heading |
|
|
124
|
-
| heading |
|
|
125
|
-
| heading |
|
|
74
|
+
| Kind | ja | en |
|
|
75
|
+
| ------- | -------------- | ------------------------------ |
|
|
76
|
+
| key | 種別 | Type |
|
|
77
|
+
| key | 目的 | Purpose |
|
|
78
|
+
| key | 互換性 | Compatibility |
|
|
79
|
+
| key | リリース分類 | Release classification |
|
|
80
|
+
| key | 人の判断 | Human judgement |
|
|
81
|
+
| key | 判定規則 | Decision rule |
|
|
82
|
+
| key | 中止条件 | Close condition |
|
|
83
|
+
| key | 優先度 | Priority |
|
|
84
|
+
| key | セキュリティ | Security |
|
|
85
|
+
| key | 原因の park | Cause park |
|
|
86
|
+
| key | 原因のレーン | Cause lane |
|
|
87
|
+
| key | 原因の損失 | Cause loss |
|
|
88
|
+
| key | 実施順 | Order |
|
|
89
|
+
| key | 原因 | Cause |
|
|
90
|
+
| key | 規模見積もり | Size estimate |
|
|
91
|
+
| key | 分割しない理由 | No-split reason |
|
|
92
|
+
| key | 行を増やさない | No added lines |
|
|
93
|
+
| key | 先行リファクタ | Refactor first |
|
|
94
|
+
| key | 強制 | Enforcement |
|
|
95
|
+
| key | 計測 | Measurement |
|
|
96
|
+
| key | 計測宣言 | Measure declaration |
|
|
97
|
+
| key | 前提 | Premise |
|
|
98
|
+
| key | 計測宣言なし | No measure declaration |
|
|
99
|
+
| key | 実施可能条件 | Sample gate |
|
|
100
|
+
| key | 実施可能日 | Not before |
|
|
101
|
+
| key | 出どころ | Source |
|
|
102
|
+
| key | 出所 | Constraint source |
|
|
103
|
+
| key | 参照 | Constraint reference |
|
|
104
|
+
| key | 指示 | Constraint instruction |
|
|
105
|
+
| value | 不具合 | defect |
|
|
106
|
+
| value | 非不具合 | non-defect |
|
|
107
|
+
| value | 振る舞い変更 | behavior change |
|
|
108
|
+
| value | 機能追加 | feature |
|
|
109
|
+
| value | 機能改善 | improvement |
|
|
110
|
+
| value | 時間短縮 | time saving |
|
|
111
|
+
| value | 不具合修正 | bug fix |
|
|
112
|
+
| value | 破壊的変更 | breaking change |
|
|
113
|
+
| value | 不要 | not needed |
|
|
114
|
+
| value | 要 | needed |
|
|
115
|
+
| value | 通常 | normal |
|
|
116
|
+
| value | 高 | high |
|
|
117
|
+
| value | 緊急 | critical |
|
|
118
|
+
| value | 最後 | last |
|
|
119
|
+
| value | 不明 | unknown |
|
|
120
|
+
| value | なし | none |
|
|
121
|
+
| heading | 背景 | Background |
|
|
122
|
+
| heading | 現象 | Symptom |
|
|
123
|
+
| heading | 期待結果 | Expected result |
|
|
124
|
+
| heading | 受け入れ条件 | Acceptance criteria |
|
|
125
|
+
| heading | 発火点 | Trigger |
|
|
126
|
+
| heading | ベースライン | Baseline |
|
|
127
|
+
| heading | 再現 | Reproduction |
|
|
128
|
+
| heading | 期待効果 | Expected effect |
|
|
129
|
+
| heading | 自動実行の制約 | Automatic execution constraint |
|
|
@@ -7,6 +7,8 @@ import {
|
|
|
7
7
|
type AgentRole,
|
|
8
8
|
type ProfileResult,
|
|
9
9
|
} from './agent-role-profile'
|
|
10
|
+
import { agent_ship_cap } from './agent-ship-cap'
|
|
11
|
+
import { agent_worker_profile } from './agent-worker-profile'
|
|
10
12
|
import { claude_agent_argv } from './claude-agent-argv'
|
|
11
13
|
import { codex_agent_argv } from './codex-agent-argv'
|
|
12
14
|
|
|
@@ -20,6 +22,12 @@ interface AgentArgv {
|
|
|
20
22
|
type AgentArgvResult =
|
|
21
23
|
{ kind: 'argv'; argv: AgentArgv; profile: AgentProfile } | { kind: 'rejected'; note: string }
|
|
22
24
|
|
|
25
|
+
// Where a cut relaunch runs, and how it reads its Issue's labels when `josh.worker` asks for them.
|
|
26
|
+
interface ResumeSite {
|
|
27
|
+
cwd: string
|
|
28
|
+
labels: () => Promise<ReadonlyArray<string> | undefined>
|
|
29
|
+
}
|
|
30
|
+
|
|
23
31
|
// **`session_id` forces the fresh session's id, and only the Claude path can honour it**.
|
|
24
32
|
// Codex has no such flag, and the run-state report reads Claude transcripts
|
|
25
33
|
// alone, so an OpenAI scheduler simply builds as before; whiff attribution is a Claude-transcript
|
|
@@ -105,19 +113,25 @@ function profiled_in(invocation: string, resolved: ProfileResult, cwd: string):
|
|
|
105
113
|
// **A cut relaunch's profile, resolved for the phase the resumed child is entering**.
|
|
106
114
|
// A stored lane profile takes the phase's model where the phase has one (pre-gate: Sonnet, or
|
|
107
115
|
// `JOSH_WORKER_SHIP_MODEL`) and the phase's effort; a lane without one resolves the worker for the
|
|
108
|
-
// phase. An env override wins over the phase in either path.
|
|
109
|
-
|
|
116
|
+
// phase. An env override wins over the phase in either path. The phase's model is then capped at the
|
|
117
|
+
// Issue's `josh.worker` profile, whose labels `site.labels` reads only when the setting exists.
|
|
118
|
+
async function resume_argv(
|
|
110
119
|
invocation: string,
|
|
111
120
|
profile: AgentProfile | undefined,
|
|
112
121
|
phase: string,
|
|
113
|
-
|
|
114
|
-
): AgentArgvResult {
|
|
122
|
+
site: ResumeSite,
|
|
123
|
+
): Promise<AgentArgvResult> {
|
|
115
124
|
const resolved =
|
|
116
125
|
profile === undefined
|
|
117
126
|
? agent_role_profile.resolve(agent_role_profile.WORKER, process.env, phase)
|
|
118
127
|
: agent_role_profile.with_phase(profile, phase)
|
|
128
|
+
const capped = await agent_ship_cap.capped(
|
|
129
|
+
resolved,
|
|
130
|
+
phase,
|
|
131
|
+
async () => await agent_worker_profile.resolve(site.cwd, site.labels),
|
|
132
|
+
)
|
|
119
133
|
|
|
120
|
-
return profiled_in(invocation,
|
|
134
|
+
return profiled_in(invocation, capped, site.cwd)
|
|
121
135
|
}
|
|
122
136
|
|
|
123
137
|
function resolve_in(
|
|
@@ -155,5 +169,5 @@ const agent_argv = {
|
|
|
155
169
|
with_resume_in,
|
|
156
170
|
}
|
|
157
171
|
|
|
158
|
-
export type { AgentArgv, AgentArgvResult }
|
|
172
|
+
export type { AgentArgv, AgentArgvResult, ResumeSite }
|
|
159
173
|
export { agent_argv }
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import {
|
|
2
|
+
agent_profile_schema,
|
|
3
|
+
type AgentEffort,
|
|
4
|
+
type AgentPhase,
|
|
5
|
+
type AgentRole,
|
|
6
|
+
} from './agent-profile-schema'
|
|
7
|
+
import { agent_provider, type AgentEnvironment, type AgentProvider } from './agent-provider'
|
|
8
|
+
|
|
9
|
+
const { OPENAI_PROVIDER, trimmed } = agent_provider
|
|
10
|
+
const { PHASE_SCHEMA, PRE_GATE_PHASE } = agent_profile_schema
|
|
11
|
+
|
|
12
|
+
interface PhaseModel {
|
|
13
|
+
key: string
|
|
14
|
+
value: string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type PhaseTable<Value> = Readonly<Partial<Record<AgentRole, Partial<Record<AgentPhase, Value>>>>>
|
|
18
|
+
|
|
19
|
+
const SONNET_MODEL = 'claude-sonnet-5-5'
|
|
20
|
+
|
|
21
|
+
// **Effort as a function of the run phase, not the role alone**. For the first
|
|
22
|
+
// merge only the mechanical ship/bookkeeping region is lowered: the pre-gate resume drives the gate,
|
|
23
|
+
// commit, PR and merge, applying fixes the gate has already named — work delegation.md calls the opposite
|
|
24
|
+
// of judgement. The design-judgment implementation phases keep the role default, as does any role/phase
|
|
25
|
+
// with no entry, and the review's own judgement is the reviewer role's, untouched by lowering
|
|
26
|
+
// the worker here. The investigation phase — highest output density — is left for a later merge, once
|
|
27
|
+
// the delegation half of this Issue has moved its reading out.
|
|
28
|
+
const SHIP_EFFORT: AgentEffort = 'low'
|
|
29
|
+
const PHASE_EFFORT: PhaseTable<AgentEffort> = {
|
|
30
|
+
worker: { [PRE_GATE_PHASE]: SHIP_EFFORT },
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// **The ship phase may run on a model of its own** (joshuafolkken/kit#5343), read from its key ahead of
|
|
34
|
+
// the role's and applied on the same cut relaunch as `SHIP_EFFORT`. Unset, the phase runs on its default:
|
|
35
|
+
// Sonnet held the ship phase's duration and stop rates against Opus across a lane trial (joshuafolkken/kit#5346).
|
|
36
|
+
const PHASE_MODELS: PhaseTable<PhaseModel> = {
|
|
37
|
+
worker: { [PRE_GATE_PHASE]: { key: 'JOSH_WORKER_SHIP_MODEL', value: SONNET_MODEL } },
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function phase_model_keys(): ReadonlyArray<string> {
|
|
41
|
+
return Object.values(PHASE_MODELS).flatMap((phases) =>
|
|
42
|
+
Object.values(phases).map(({ key }) => key),
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// A role's entry in a phase table; `undefined` for a phase-less or unrecognized phase, or no entry.
|
|
47
|
+
function phase_entry<Value>(
|
|
48
|
+
table: PhaseTable<Value>,
|
|
49
|
+
role: AgentRole,
|
|
50
|
+
phase: string | undefined,
|
|
51
|
+
): Value | undefined {
|
|
52
|
+
const parsed = PHASE_SCHEMA.safeParse(phase)
|
|
53
|
+
|
|
54
|
+
return parsed.success ? table[role]?.[parsed.data] : undefined
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// The phase's own model — its key when set, else its default; `undefined` for a phase with no entry or
|
|
58
|
+
// an OpenAI session, whose model is never read from env.
|
|
59
|
+
function phase_model(
|
|
60
|
+
role: AgentRole,
|
|
61
|
+
provider: AgentProvider,
|
|
62
|
+
phase: string | undefined,
|
|
63
|
+
environment: AgentEnvironment,
|
|
64
|
+
): PhaseModel | undefined {
|
|
65
|
+
const entry = provider === OPENAI_PROVIDER ? undefined : phase_entry(PHASE_MODELS, role, phase)
|
|
66
|
+
if (entry === undefined) return undefined
|
|
67
|
+
|
|
68
|
+
return { key: entry.key, value: trimmed(environment[entry.key]) ?? entry.value }
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// The effort a phase resolves to before any env override: the phase's own value where the table names
|
|
72
|
+
// one, otherwise the fallback. A phase-less or unrecognized call returns the
|
|
73
|
+
// fallback unchanged, which is what keeps every existing caller reading the current default.
|
|
74
|
+
function phase_effort(
|
|
75
|
+
role: AgentRole,
|
|
76
|
+
phase: string | undefined,
|
|
77
|
+
fallback: AgentEffort,
|
|
78
|
+
): AgentEffort {
|
|
79
|
+
return phase_entry(PHASE_EFFORT, role, phase) ?? fallback
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const agent_phase_profile = {
|
|
83
|
+
SONNET_MODEL,
|
|
84
|
+
phase_effort,
|
|
85
|
+
phase_model,
|
|
86
|
+
phase_model_keys,
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export { agent_phase_profile }
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { agent_consultation_model } from './agent-consultation-model'
|
|
2
|
+
import { agent_phase_profile } from './agent-phase-profile'
|
|
2
3
|
import {
|
|
3
4
|
agent_profile_schema,
|
|
4
5
|
type AgentEffort,
|
|
5
|
-
type AgentPhase,
|
|
6
6
|
type AgentProfile,
|
|
7
7
|
type AgentRole,
|
|
8
8
|
} from './agent-profile-schema'
|
|
@@ -27,6 +27,7 @@ const {
|
|
|
27
27
|
warn_of_default,
|
|
28
28
|
} = agent_provider
|
|
29
29
|
const { consultation_provider } = agent_consultation_model
|
|
30
|
+
const { SONNET_MODEL, phase_effort, phase_model, phase_model_keys } = agent_phase_profile
|
|
30
31
|
|
|
31
32
|
const {
|
|
32
33
|
DEFAULT_PROFILES,
|
|
@@ -34,7 +35,6 @@ const {
|
|
|
34
35
|
IMPLEMENTATION_PHASE,
|
|
35
36
|
OPENAI_MODEL,
|
|
36
37
|
OPENAI_PROFILES,
|
|
37
|
-
PHASE_SCHEMA,
|
|
38
38
|
PRE_GATE_PHASE,
|
|
39
39
|
REVIEWER,
|
|
40
40
|
SCHEDULER,
|
|
@@ -52,13 +52,6 @@ interface Override {
|
|
|
52
52
|
value: string | undefined
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
interface PhaseModel {
|
|
56
|
-
key: string
|
|
57
|
-
value: string
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
type PhaseTable<Value> = Readonly<Partial<Record<AgentRole, Partial<Record<AgentPhase, Value>>>>>
|
|
61
|
-
|
|
62
55
|
// What a resolution is keyed on beyond the role: the run phase (effort) and the review round (profile).
|
|
63
56
|
interface AgentStage {
|
|
64
57
|
phase?: string | undefined
|
|
@@ -73,7 +66,6 @@ const PROVIDER_PROFILES = { anthropic: DEFAULT_PROFILES, openai: OPENAI_PROFILES
|
|
|
73
66
|
// first only checks that the first round's findings were fixed, so its model and effort are set apart:
|
|
74
67
|
// its own keys win, then the reviewer's, then its own default.
|
|
75
68
|
const FIRST_REVIEW_ROUND = 1
|
|
76
|
-
const SONNET_MODEL = 'claude-sonnet-5-5'
|
|
77
69
|
const VERIFICATION_PROFILES: Readonly<Record<AgentProvider, AgentProfile>> = {
|
|
78
70
|
anthropic: {
|
|
79
71
|
...DEFAULT_PROFILES.reviewer,
|
|
@@ -99,25 +91,6 @@ const INVESTIGATION_MODELS: Readonly<Record<AgentProvider, string>> = {
|
|
|
99
91
|
}
|
|
100
92
|
const INVESTIGATION_MODEL_KEY = 'JOSH_INVESTIGATION_MODEL'
|
|
101
93
|
|
|
102
|
-
// **Effort as a function of the run phase, not the role alone**. For the first
|
|
103
|
-
// merge only the mechanical ship/bookkeeping region is lowered: the pre-gate resume drives the gate,
|
|
104
|
-
// commit, PR and merge, applying fixes the gate has already named — work delegation.md calls the opposite
|
|
105
|
-
// of judgement. The design-judgment implementation phases keep the role default, as does any role/phase
|
|
106
|
-
// with no entry, and the review's own judgement is the reviewer role's, untouched by lowering
|
|
107
|
-
// the worker here. The investigation phase — highest output density — is left for a later merge, once
|
|
108
|
-
// the delegation half of this Issue has moved its reading out.
|
|
109
|
-
const SHIP_EFFORT: AgentEffort = 'low'
|
|
110
|
-
const PHASE_EFFORT: PhaseTable<AgentEffort> = {
|
|
111
|
-
worker: { [PRE_GATE_PHASE]: SHIP_EFFORT },
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// **The ship phase may run on a model of its own** (joshuafolkken/kit#5343), read from its key ahead of
|
|
115
|
-
// the role's and applied on the same cut relaunch as `SHIP_EFFORT`. Unset, the phase runs on its default:
|
|
116
|
-
// Sonnet held the ship phase's duration and stop rates against Opus across a lane trial (joshuafolkken/kit#5346).
|
|
117
|
-
const PHASE_MODELS: PhaseTable<PhaseModel> = {
|
|
118
|
-
worker: { [PRE_GATE_PHASE]: { key: 'JOSH_WORKER_SHIP_MODEL', value: SONNET_MODEL } },
|
|
119
|
-
}
|
|
120
|
-
|
|
121
94
|
const ENV_KEYS: Readonly<Record<AgentRole, { model: string; effort: string }>> = {
|
|
122
95
|
scheduler: { model: 'JOSH_SCHEDULER_MODEL', effort: 'JOSH_SCHEDULER_EFFORT' },
|
|
123
96
|
worker: { model: 'JOSH_WORKER_MODEL', effort: 'JOSH_WORKER_EFFORT' },
|
|
@@ -126,12 +99,6 @@ const ENV_KEYS: Readonly<Record<AgentRole, { model: string; effort: string }>> =
|
|
|
126
99
|
|
|
127
100
|
const LEGACY_WORKER_KEYS = { model: 'JOSH_LANE_MODEL', effort: 'JOSH_LANE_EFFORT' }
|
|
128
101
|
|
|
129
|
-
function phase_model_keys(): ReadonlyArray<string> {
|
|
130
|
-
return Object.values(PHASE_MODELS).flatMap((phases) =>
|
|
131
|
-
Object.values(phases).map(({ key }) => key),
|
|
132
|
-
)
|
|
133
|
-
}
|
|
134
|
-
|
|
135
102
|
// Every env key a profile is read from. The unit suite blanks them so a lane's model and effort never
|
|
136
103
|
// reach its fixtures (joshuafolkken/kit#5863); its test pins each to the pattern its config blanks.
|
|
137
104
|
const PROFILE_KEYS: ReadonlyArray<string> = [
|
|
@@ -175,31 +142,6 @@ function override_value(
|
|
|
175
142
|
: { key, value: trimmed(environment[key]) }
|
|
176
143
|
}
|
|
177
144
|
|
|
178
|
-
// A role's entry in a phase table; `undefined` for a phase-less or unrecognized phase, or no entry.
|
|
179
|
-
function phase_entry<Value>(
|
|
180
|
-
table: PhaseTable<Value>,
|
|
181
|
-
role: AgentRole,
|
|
182
|
-
phase: string | undefined,
|
|
183
|
-
): Value | undefined {
|
|
184
|
-
const parsed = PHASE_SCHEMA.safeParse(phase)
|
|
185
|
-
|
|
186
|
-
return parsed.success ? table[role]?.[parsed.data] : undefined
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// The phase's own model — its key when set, else its default; `undefined` for a phase with no entry or
|
|
190
|
-
// an OpenAI session, whose model is never read from env.
|
|
191
|
-
function phase_model(
|
|
192
|
-
role: AgentRole,
|
|
193
|
-
provider: AgentProvider,
|
|
194
|
-
phase: string | undefined,
|
|
195
|
-
environment: AgentEnvironment,
|
|
196
|
-
): PhaseModel | undefined {
|
|
197
|
-
const entry = provider === OPENAI_PROVIDER ? undefined : phase_entry(PHASE_MODELS, role, phase)
|
|
198
|
-
if (entry === undefined) return undefined
|
|
199
|
-
|
|
200
|
-
return { key: entry.key, value: trimmed(environment[entry.key]) ?? entry.value }
|
|
201
|
-
}
|
|
202
|
-
|
|
203
145
|
function model_override(
|
|
204
146
|
role: AgentRole,
|
|
205
147
|
environment: AgentEnvironment,
|
|
@@ -237,17 +179,6 @@ function validate(profile: AgentProfile, model_key: string): ProfileResult {
|
|
|
237
179
|
return { kind: 'profile', profile }
|
|
238
180
|
}
|
|
239
181
|
|
|
240
|
-
// The effort a phase resolves to before any env override: the phase's own value where the table names
|
|
241
|
-
// one, otherwise the fallback. A phase-less or unrecognized call returns the
|
|
242
|
-
// fallback unchanged, which is what keeps every existing caller reading the current default.
|
|
243
|
-
function phase_effort(
|
|
244
|
-
role: AgentRole,
|
|
245
|
-
phase: string | undefined,
|
|
246
|
-
fallback: AgentEffort,
|
|
247
|
-
): AgentEffort {
|
|
248
|
-
return phase_entry(PHASE_EFFORT, role, phase) ?? fallback
|
|
249
|
-
}
|
|
250
|
-
|
|
251
182
|
// The effort a stored profile takes in a phase: an env override wins, then the phase value, then the
|
|
252
183
|
// profile's own effort. A cut relaunch that keeps a lane's stored model resolves
|
|
253
184
|
// the effort through this so a person's `JOSH_WORKER_EFFORT` is never overwritten by the phase value.
|
|
@@ -374,6 +305,7 @@ const agent_role_profile = {
|
|
|
374
305
|
resolve,
|
|
375
306
|
resolve_provider,
|
|
376
307
|
resolve_review,
|
|
308
|
+
validate,
|
|
377
309
|
warn_of_default,
|
|
378
310
|
with_phase,
|
|
379
311
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { agent_phase_profile } from './agent-phase-profile'
|
|
2
|
+
import type { AgentProfile, ProfileResult } from './agent-role-profile'
|
|
3
|
+
import type { WorkerResult } from './agent-worker-profile'
|
|
4
|
+
|
|
5
|
+
// **The ship phase never runs above the Issue's `josh.worker` profile** (joshuafolkken/kit#7354): a
|
|
6
|
+
// phase with a model of its own takes the weaker of that model and the Issue's, ranked by the order of
|
|
7
|
+
// `profiles`, weakest first. A ship model no profile names cannot be ranked, so it is kept: a cap never
|
|
8
|
+
// raises the phase above its own model. A repository without the setting, and a phase
|
|
9
|
+
// without a model of its own, keep the resolved profile and never read the setting or the labels.
|
|
10
|
+
|
|
11
|
+
type ResolvedWorker = Extract<WorkerResult, { kind: 'worker' }>
|
|
12
|
+
|
|
13
|
+
function has_phase_model(profile: AgentProfile, phase: string): boolean {
|
|
14
|
+
return agent_phase_profile.phase_model(profile.role, profile.provider, phase, {}) !== undefined
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function weaker(profile: AgentProfile, resolved: ResolvedWorker): AgentProfile {
|
|
18
|
+
const { worker, settings } = resolved
|
|
19
|
+
const rank = settings.profiles.findIndex((entry) => entry.agent.model === profile.model)
|
|
20
|
+
const limit = settings.profiles.findIndex((entry) => entry.name === worker.name)
|
|
21
|
+
|
|
22
|
+
return rank <= limit ? profile : { ...profile, model: worker.agent.model }
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function capped_by(profile: AgentProfile, result: WorkerResult): ProfileResult {
|
|
26
|
+
if (result.kind === 'unset') return { kind: 'profile', profile }
|
|
27
|
+
|
|
28
|
+
return result.kind === 'rejected' ? result : { kind: 'profile', profile: weaker(profile, result) }
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// `worker` is called only for a phase with a model of its own, so every other relaunch reads nothing.
|
|
32
|
+
async function capped(
|
|
33
|
+
resolved: ProfileResult,
|
|
34
|
+
phase: string,
|
|
35
|
+
worker: () => Promise<WorkerResult>,
|
|
36
|
+
): Promise<ProfileResult> {
|
|
37
|
+
if (resolved.kind === 'rejected' || !has_phase_model(resolved.profile, phase)) return resolved
|
|
38
|
+
|
|
39
|
+
return capped_by(resolved.profile, await worker())
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const agent_ship_cap = { capped }
|
|
43
|
+
|
|
44
|
+
export { agent_ship_cap }
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { json_value } from '#scripts/lib/json-value'
|
|
2
|
+
import {
|
|
3
|
+
package_manifest,
|
|
4
|
+
type WorkerConfig,
|
|
5
|
+
type WorkerProfileDefinition,
|
|
6
|
+
} from '#scripts/lib/package-manifest'
|
|
7
|
+
import { file_reader } from '#scripts/lib/read-file'
|
|
8
|
+
import type { z } from 'zod'
|
|
9
|
+
import { agent_profile_schema, type AgentProfile } from './agent-profile-schema'
|
|
10
|
+
import type { Rejected } from './agent-provider'
|
|
11
|
+
import { agent_role_profile } from './agent-role-profile'
|
|
12
|
+
|
|
13
|
+
// The per-Issue worker profile a repository opts into with `josh.worker` in its `package.json`: the
|
|
14
|
+
// Issue's `worker:<name>` label picks a profile, else the configured default. A repository without the
|
|
15
|
+
// setting answers `unset` before any label is fetched, so it keeps today's launch unchanged.
|
|
16
|
+
const { EFFORT_SCHEMA, PROFILE_SCHEMA, WORKER } = agent_profile_schema
|
|
17
|
+
const CONFIG_KEY = 'josh.worker'
|
|
18
|
+
const LABEL_PREFIX = 'worker:'
|
|
19
|
+
|
|
20
|
+
interface WorkerProfile {
|
|
21
|
+
name: string
|
|
22
|
+
when: string
|
|
23
|
+
agent: AgentProfile
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface WorkerSettings {
|
|
27
|
+
default: string
|
|
28
|
+
escalate: boolean
|
|
29
|
+
profiles: ReadonlyArray<WorkerProfile>
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
interface Unset {
|
|
33
|
+
kind: 'unset'
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
type SettingsResult = Rejected | Unset | { kind: 'settings'; settings: WorkerSettings }
|
|
37
|
+
type WorkerResult =
|
|
38
|
+
Rejected | Unset | { kind: 'worker'; worker: WorkerProfile; settings: WorkerSettings }
|
|
39
|
+
type ProfileCheck = Rejected | { kind: 'profile'; worker: WorkerProfile }
|
|
40
|
+
|
|
41
|
+
const UNSET: Unset = { kind: 'unset' }
|
|
42
|
+
|
|
43
|
+
function rejected(note: string): Rejected {
|
|
44
|
+
return { kind: 'rejected', note: `${CONFIG_KEY} ${note}` }
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// A schema rejection: its issue path already starts at `josh.worker`, so it is not prefixed again.
|
|
48
|
+
function schema_rejection(error: z.ZodError): Rejected {
|
|
49
|
+
const [issue] = error.issues
|
|
50
|
+
if (issue === undefined) return rejected('is invalid')
|
|
51
|
+
|
|
52
|
+
return { kind: 'rejected', note: `${issue.path.join('.')}: ${issue.message}` }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function checked_profile(definition: WorkerProfileDefinition): ProfileCheck {
|
|
56
|
+
const { name, model, effort, when } = definition
|
|
57
|
+
const parsed = PROFILE_SCHEMA.safeParse({ role: WORKER, model, effort })
|
|
58
|
+
|
|
59
|
+
if (!parsed.success) {
|
|
60
|
+
return rejected(
|
|
61
|
+
`profile ${name}: effort ${effort} is not one of ${EFFORT_SCHEMA.options.join(', ')}`,
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const checked = agent_role_profile.validate(parsed.data, `${CONFIG_KEY} profile ${name} model`)
|
|
66
|
+
|
|
67
|
+
return checked.kind === 'rejected'
|
|
68
|
+
? checked
|
|
69
|
+
: { kind: 'profile', worker: { name, when, agent: checked.profile } }
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function checked_settings(config: WorkerConfig): SettingsResult {
|
|
73
|
+
const profiles: Array<WorkerProfile> = []
|
|
74
|
+
|
|
75
|
+
for (const definition of config.profiles) {
|
|
76
|
+
const checked = checked_profile(definition)
|
|
77
|
+
if (checked.kind === 'rejected') return checked
|
|
78
|
+
profiles.push(checked.worker)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
kind: 'settings',
|
|
83
|
+
settings: { default: config.default, escalate: config.escalate, profiles },
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// A manifest that cannot be read or parsed names no setting, so it reads as an empty object.
|
|
88
|
+
function manifest_value(directory: string): unknown {
|
|
89
|
+
const text = file_reader.read_if_readable(package_manifest.manifest_path(directory))
|
|
90
|
+
if (text === undefined) return {}
|
|
91
|
+
|
|
92
|
+
return json_value.parse_or_undefined(text) ?? {}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// The repository's `josh.worker`: `unset` when the manifest names none (or cannot be read), a rejection
|
|
96
|
+
// with its reason when the setting breaks a rule, otherwise the checked profiles.
|
|
97
|
+
function read(directory: string): SettingsResult {
|
|
98
|
+
const parsed = package_manifest.josh_schemas.worker.safeParse(manifest_value(directory))
|
|
99
|
+
if (!parsed.success) return schema_rejection(parsed.error)
|
|
100
|
+
|
|
101
|
+
const config = parsed.data.josh?.worker
|
|
102
|
+
|
|
103
|
+
return config === undefined ? UNSET : checked_settings(config)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function profile_named(settings: WorkerSettings, name: string): WorkerProfile | undefined {
|
|
107
|
+
return settings.profiles.find((profile) => profile.name === name)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function for_labels(settings: WorkerSettings, labels: ReadonlyArray<string>): WorkerResult {
|
|
111
|
+
const names = labels
|
|
112
|
+
.filter((label) => label.startsWith(LABEL_PREFIX))
|
|
113
|
+
.map((label) => label.slice(LABEL_PREFIX.length))
|
|
114
|
+
|
|
115
|
+
if (names.length > 1) {
|
|
116
|
+
return rejected(`allows one ${LABEL_PREFIX}<name> label, got ${names.join(', ')}`)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const [name = settings.default] = names
|
|
120
|
+
const worker = profile_named(settings, name)
|
|
121
|
+
if (worker === undefined) return rejected(`has no profile for the label ${LABEL_PREFIX}${name}`)
|
|
122
|
+
|
|
123
|
+
return { kind: 'worker', worker, settings }
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// The profile an Issue's worker runs on. `fetch_labels` is called only once a setting exists, so a
|
|
127
|
+
// repository without one never asks GitHub for the Issue's labels. A label read that fails answers
|
|
128
|
+
// `undefined` and is refused: falling back to the default could run a `worker:<name>` Issue on the
|
|
129
|
+
// wrong model.
|
|
130
|
+
async function resolve(
|
|
131
|
+
directory: string,
|
|
132
|
+
fetch_labels: () => Promise<ReadonlyArray<string> | undefined>,
|
|
133
|
+
): Promise<WorkerResult> {
|
|
134
|
+
const result = read(directory)
|
|
135
|
+
if (result.kind !== 'settings') return result
|
|
136
|
+
|
|
137
|
+
const labels = await fetch_labels()
|
|
138
|
+
if (labels === undefined) return rejected('could not read the Issue labels')
|
|
139
|
+
|
|
140
|
+
return for_labels(result.settings, labels)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// The profile one step above `worker` in the escalation order, or `undefined` at the top.
|
|
144
|
+
function next(settings: WorkerSettings, worker: WorkerProfile): WorkerProfile | undefined {
|
|
145
|
+
const index = settings.profiles.findIndex((profile) => profile.name === worker.name)
|
|
146
|
+
if (index === -1) return undefined
|
|
147
|
+
|
|
148
|
+
return settings.profiles[index + 1]
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const agent_worker_profile = { LABEL_PREFIX, for_labels, next, read, resolve }
|
|
152
|
+
|
|
153
|
+
export type { SettingsResult, WorkerProfile, WorkerResult, WorkerSettings }
|
|
154
|
+
export { agent_worker_profile }
|
|
@@ -110,7 +110,7 @@ function tool_flags(role: AgentRole, cwd: string = process.cwd()): ReadonlyArray
|
|
|
110
110
|
function instruction_flags(profile: AgentProfile, cwd?: string): ReadonlyArray<string> {
|
|
111
111
|
if (profile.role === agent_role_profile.SCHEDULER) return []
|
|
112
112
|
|
|
113
|
-
return lane_instructions.flags(cwd)
|
|
113
|
+
return lane_instructions.flags(cwd, profile.role === agent_role_profile.WORKER)
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
function build(
|