@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.
Files changed (691) hide show
  1. package/.claude/skills/workflow-commands/backlogrun-steps.md +1 -1
  2. package/.claude/skills/workflow-commands/kickoff.md +6 -0
  3. package/.claude/skills/workflow-commands/progress-watcher.md +10 -8
  4. package/dist/.inputs-verified.json +1 -1
  5. package/dist/commands/adopt.js +12 -12
  6. package/dist/commands/auto-ok-judge-cli.js +18 -14
  7. package/dist/commands/auto-ok-main.js +42 -40
  8. package/dist/commands/backlog-budget-main.js +3 -3
  9. package/dist/commands/backlog-drive-cli.js +276 -188
  10. package/dist/commands/backlog-next-main.js +77 -75
  11. package/dist/commands/backlog-offer-main.js +80 -78
  12. package/dist/commands/backlog-plan-cli.js +96 -97
  13. package/dist/commands/backlog-triage-cli.js +94 -92
  14. package/dist/commands/backlogrun-cli.js +212 -206
  15. package/dist/commands/behavior-cli.js +12 -13
  16. package/dist/commands/bump-version-main.js +2 -2
  17. package/dist/commands/bytes-command.js +61 -22
  18. package/dist/commands/check-related.js +61 -60
  19. package/dist/commands/{chunk-X7PN54LZ.js → chunk-22DVQCP6.js} +16 -6
  20. package/dist/commands/{chunk-UTBVTCQN.js → chunk-24OATKOF.js} +301 -168
  21. package/dist/commands/{chunk-7GHOFHUS.js → chunk-24ZDAWML.js} +3 -3
  22. package/dist/commands/{chunk-HBNB3TLG.js → chunk-2BB5ZR2F.js} +13 -7
  23. package/dist/commands/{chunk-F22G3VDB.js → chunk-2BC33QPY.js} +1 -1
  24. package/dist/commands/{chunk-72EW7AVI.js → chunk-2BJJUTZA.js} +2 -2
  25. package/dist/commands/{chunk-XDQOWUVT.js → chunk-2CXT6MBR.js} +4 -4
  26. package/dist/commands/{chunk-TVJE67O2.js → chunk-2EZTYLO4.js} +6 -6
  27. package/dist/commands/{chunk-JLYW7CP6.js → chunk-2PHOLX62.js} +1 -1
  28. package/dist/commands/{chunk-6EU5ZCDP.js → chunk-2QM72JCJ.js} +23 -87
  29. package/dist/commands/{chunk-EFHSCUFN.js → chunk-2VFPUPSG.js} +2 -2
  30. package/dist/commands/{chunk-ATRMETHT.js → chunk-2XAH3MHV.js} +1 -1
  31. package/dist/commands/{chunk-T2E724HN.js → chunk-34JJYCIY.js} +2 -2
  32. package/dist/commands/{chunk-REMKUFAC.js → chunk-34KZDKQJ.js} +1 -1
  33. package/dist/commands/{chunk-GK2KY4MO.js → chunk-352KLSFX.js} +3 -3
  34. package/dist/commands/{chunk-7S6VRZOH.js → chunk-3AEDZZNL.js} +5 -5
  35. package/dist/commands/{chunk-KVJDDECB.js → chunk-3B2HEFNO.js} +2 -2
  36. package/dist/commands/{chunk-HZBTXKT2.js → chunk-3Z425MM3.js} +2 -2
  37. package/dist/commands/{chunk-J3G2R64I.js → chunk-3ZOX4G4U.js} +3 -3
  38. package/dist/commands/{chunk-LRS2OS5J.js → chunk-452HWOJ7.js} +2 -2
  39. package/dist/commands/{chunk-HRT4KWP4.js → chunk-475EFIJV.js} +1 -1
  40. package/dist/commands/{chunk-4HBVHYNL.js → chunk-47UZB54M.js} +3 -3
  41. package/dist/commands/{chunk-H4LYG37R.js → chunk-4DN4XVPL.js} +6 -6
  42. package/dist/commands/{chunk-TMLNI3YW.js → chunk-4HERA2GY.js} +1 -1
  43. package/dist/commands/{chunk-W6V4DWC5.js → chunk-4JI35CVO.js} +1 -1
  44. package/dist/commands/{chunk-YT342DRV.js → chunk-4L4LNWZ7.js} +2 -2
  45. package/dist/commands/{chunk-ZZAH3YQP.js → chunk-4N32QKJZ.js} +6 -6
  46. package/dist/commands/{chunk-GDUK5YPO.js → chunk-4NRSFLG7.js} +12 -12
  47. package/dist/commands/{chunk-O5QZ2S6X.js → chunk-4OKRPAUT.js} +4 -4
  48. package/dist/commands/{chunk-QDFDB4CF.js → chunk-4Q64PG46.js} +13 -13
  49. package/dist/commands/{chunk-HO52D6JY.js → chunk-4UDTQVDD.js} +14 -14
  50. package/dist/commands/{chunk-HPVLI26Z.js → chunk-4WR2LEZL.js} +6 -6
  51. package/dist/commands/{chunk-DP7WIGQ4.js → chunk-4ZJOC6OK.js} +4 -4
  52. package/dist/commands/{chunk-WTRDWEUQ.js → chunk-4ZQM4I7R.js} +12 -12
  53. package/dist/commands/{chunk-OTZJXU2R.js → chunk-54X37JEJ.js} +8 -8
  54. package/dist/commands/{chunk-A5V7EWIX.js → chunk-56KW5EOK.js} +2 -2
  55. package/dist/commands/chunk-5CG3XU3O.js +74 -0
  56. package/dist/commands/{chunk-FC33R5UN.js → chunk-5ESZLHDZ.js} +13 -15
  57. package/dist/commands/{chunk-OVA7STGP.js → chunk-5FBRMARM.js} +9 -9
  58. package/dist/commands/{chunk-SK2LJBFS.js → chunk-5PCK53WP.js} +3 -3
  59. package/dist/commands/{chunk-6NV2F7QH.js → chunk-5RG4S66L.js} +1 -1
  60. package/dist/commands/{chunk-JOARHU3M.js → chunk-5UJGACVN.js} +1 -1
  61. package/dist/commands/{chunk-NKOET4FB.js → chunk-5Y7B7FDL.js} +2 -2
  62. package/dist/commands/{chunk-XMBRXCIE.js → chunk-5Z6E5ZUV.js} +4 -4
  63. package/dist/commands/{chunk-RZ4OKKPM.js → chunk-5ZNUH4LV.js} +2 -2
  64. package/dist/commands/{chunk-7CHCZBNF.js → chunk-6CFHLMKM.js} +4 -4
  65. package/dist/commands/{chunk-TXXYC7EV.js → chunk-6DDK5XWK.js} +1 -1
  66. package/dist/commands/{chunk-2TQXCH2K.js → chunk-6GQX752S.js} +3 -3
  67. package/dist/commands/{chunk-RY6ZDHKB.js → chunk-6MAZ55GF.js} +107 -84
  68. package/dist/commands/{chunk-SNFLV7VV.js → chunk-6RUWU2SB.js} +2 -2
  69. package/dist/commands/{chunk-D4SZK7H2.js → chunk-6TIVDEKG.js} +2 -2
  70. package/dist/commands/{chunk-RIQ75QWR.js → chunk-6UCWAFQY.js} +55 -43
  71. package/dist/commands/{chunk-4D5KWMFL.js → chunk-6YURRFRU.js} +19 -19
  72. package/dist/commands/{chunk-7MOZEEFJ.js → chunk-6YVURZAJ.js} +1 -1
  73. package/dist/commands/{chunk-73JOEKIC.js → chunk-6Z4YZG7P.js} +5 -5
  74. package/dist/commands/{chunk-NJ53AWJU.js → chunk-77BIN247.js} +9 -9
  75. package/dist/commands/{chunk-MZHOPRI6.js → chunk-7ABHNNY3.js} +7 -7
  76. package/dist/commands/{chunk-6WTVAL4D.js → chunk-7C7FOKJK.js} +1 -1
  77. package/dist/commands/{chunk-KVSSLDA3.js → chunk-7HAGC6SW.js} +5 -5
  78. package/dist/commands/{chunk-IG22Y5MA.js → chunk-7KKUFLH5.js} +1 -1
  79. package/dist/commands/{chunk-ZQ3CKRMP.js → chunk-7MJYLUF4.js} +2 -2
  80. package/dist/commands/{chunk-6UGFS3EU.js → chunk-7NHZCI5Y.js} +11 -11
  81. package/dist/commands/{chunk-FB3D7CX5.js → chunk-7OQ56DVW.js} +5 -7
  82. package/dist/commands/{chunk-EK327QOS.js → chunk-7VWPGTZO.js} +10 -10
  83. package/dist/commands/{chunk-WSOF74K4.js → chunk-7YZXS3AK.js} +3 -3
  84. package/dist/commands/{chunk-N6TYL3B2.js → chunk-AAUDI7WJ.js} +2 -2
  85. package/dist/commands/{chunk-3GF52L5F.js → chunk-AC26ZUG5.js} +12 -24
  86. package/dist/commands/{chunk-EK2Y6B4X.js → chunk-ACZ52JPI.js} +7 -7
  87. package/dist/commands/{chunk-VD72V5VX.js → chunk-AJ65WNJB.js} +4 -4
  88. package/dist/commands/{chunk-MYWRGF5A.js → chunk-AK7SEO4Y.js} +2 -2
  89. package/dist/commands/{chunk-IBEKFLWG.js → chunk-ALDAS2WG.js} +9 -9
  90. package/dist/commands/{chunk-W32DIQEP.js → chunk-ARFBIJFS.js} +1 -1
  91. package/dist/commands/{chunk-F3WBEEYC.js → chunk-AVVMDVGO.js} +5 -5
  92. package/dist/commands/chunk-AXXEMVRJ.js +23 -0
  93. package/dist/commands/{chunk-GIGKMIPQ.js → chunk-B3M5WSGN.js} +1 -1
  94. package/dist/commands/{chunk-4Z5723GA.js → chunk-B7ZNIEDV.js} +5 -4
  95. package/dist/commands/{chunk-B3XFOHDX.js → chunk-BCUDQWYK.js} +10 -4
  96. package/dist/commands/{chunk-PR3JCPP7.js → chunk-BMKWSWWE.js} +1 -1
  97. package/dist/commands/{chunk-RZJAUVMI.js → chunk-BMM4RHCG.js} +2 -2
  98. package/dist/commands/{chunk-LAKVPOJQ.js → chunk-BMTYUJNT.js} +2 -2
  99. package/dist/commands/{chunk-DAJCUSPG.js → chunk-BRHPRDDV.js} +3 -3
  100. package/dist/commands/{chunk-UZAU6UI6.js → chunk-BRUBX64M.js} +2 -2
  101. package/dist/commands/{chunk-BFLFPKQQ.js → chunk-BTZJDHQT.js} +4 -4
  102. package/dist/commands/{chunk-AI5K4QJO.js → chunk-BYFC6MD2.js} +1 -1
  103. package/dist/commands/{chunk-JGTLNFFE.js → chunk-BYGJ3BCJ.js} +10 -10
  104. package/dist/commands/{chunk-5HWZFL4D.js → chunk-C54QXJD6.js} +51 -18
  105. package/dist/commands/{chunk-LMS6N6GE.js → chunk-CBAKBWSZ.js} +7 -7
  106. package/dist/commands/{chunk-7EAMUVIO.js → chunk-CFHRNTE5.js} +1 -1
  107. package/dist/commands/{chunk-UIWAMLQH.js → chunk-CGYDIYHD.js} +2 -2
  108. package/dist/commands/{chunk-4QYW2IL7.js → chunk-CHKYPF5O.js} +1 -1
  109. package/dist/commands/{chunk-5HCPSV45.js → chunk-CJBW6BWG.js} +8 -8
  110. package/dist/commands/chunk-CKUKK7JG.js +252 -0
  111. package/dist/commands/{chunk-4PES3BAA.js → chunk-CMHGDCGN.js} +3 -3
  112. package/dist/commands/{chunk-F6OWP2AY.js → chunk-CNGTHSUS.js} +22 -22
  113. package/dist/commands/{chunk-B2EA2HCY.js → chunk-COGKULQH.js} +4 -4
  114. package/dist/commands/{chunk-S7XWXG4M.js → chunk-CP2J4RV2.js} +175 -81
  115. package/dist/commands/{chunk-YGDNUTTI.js → chunk-CQUZ6TNQ.js} +2 -2
  116. package/dist/commands/chunk-CQZI7RIK.js +72 -0
  117. package/dist/commands/chunk-CVJHQOI3.js +153 -0
  118. package/dist/commands/{chunk-2MJ4OCDL.js → chunk-CWCKCZS6.js} +1 -1
  119. package/dist/commands/chunk-D5OHVIPM.js +17 -0
  120. package/dist/commands/{chunk-TPKFVVJQ.js → chunk-D6D6WQR6.js} +2 -2
  121. package/dist/commands/{chunk-5PAEXYIY.js → chunk-D7JRJI44.js} +69 -6
  122. package/dist/commands/{chunk-LOSOLCCW.js → chunk-D7OAU32Z.js} +1 -1
  123. package/dist/commands/{chunk-VZHC2I3T.js → chunk-DAAX7XDS.js} +8 -8
  124. package/dist/commands/{chunk-OHVAEJSM.js → chunk-DEZF7QZZ.js} +5 -5
  125. package/dist/commands/{chunk-CA6F5OXK.js → chunk-DYZOOWVW.js} +124 -21
  126. package/dist/commands/{chunk-TKGBF75Y.js → chunk-EDKOSZ3K.js} +5 -5
  127. package/dist/commands/{chunk-YPNTORQD.js → chunk-EFDVE5P5.js} +1 -1
  128. package/dist/commands/{chunk-EH3LVYOX.js → chunk-EGIHAEMT.js} +1 -1
  129. package/dist/commands/{chunk-7P4X4TQL.js → chunk-EKLU6QR7.js} +4 -4
  130. package/dist/commands/{chunk-ILQZFUDC.js → chunk-ELY76WAR.js} +2 -2
  131. package/dist/commands/{chunk-2VLHFILE.js → chunk-EM3HAZF6.js} +2 -2
  132. package/dist/commands/{chunk-F2HFWLQR.js → chunk-EMTZAGT5.js} +20 -1
  133. package/dist/commands/{chunk-GA4VIFHD.js → chunk-ERG4QRNG.js} +2 -2
  134. package/dist/commands/{chunk-ICEMFE2V.js → chunk-EUGNQCYK.js} +1 -1
  135. package/dist/commands/{chunk-3HU3LPIF.js → chunk-EXDFKKMH.js} +2 -2
  136. package/dist/commands/{chunk-ISPBJVXM.js → chunk-EXWB34R2.js} +7 -7
  137. package/dist/commands/{chunk-FNOSSXLG.js → chunk-EYMPBHDN.js} +2 -2
  138. package/dist/commands/{chunk-7V5UVKFG.js → chunk-EZ7IPKIH.js} +2 -2
  139. package/dist/commands/{chunk-KQWSENCT.js → chunk-F6IQHZYY.js} +3 -3
  140. package/dist/commands/{chunk-7ZECP3J6.js → chunk-FDS65XOJ.js} +5 -5
  141. package/dist/commands/{chunk-KXRFGPZD.js → chunk-FGG7V473.js} +21 -5
  142. package/dist/commands/{chunk-PZ6VWHOO.js → chunk-FHFWNNUC.js} +1 -1
  143. package/dist/commands/{chunk-XBRD2BDL.js → chunk-FJX7AENO.js} +2 -2
  144. package/dist/commands/{chunk-M42SLJCD.js → chunk-FKZ5E4JD.js} +4 -4
  145. package/dist/commands/{chunk-F2J6DGDM.js → chunk-FMZWRDKH.js} +8 -8
  146. package/dist/commands/{chunk-DSBK66US.js → chunk-FOKCRIAN.js} +10 -10
  147. package/dist/commands/{chunk-OI7KM4K3.js → chunk-FQGWO2ZH.js} +2 -2
  148. package/dist/commands/{chunk-2IESYBZH.js → chunk-FURNDIT3.js} +3 -3
  149. package/dist/commands/chunk-FVDQNMP6.js +93 -0
  150. package/dist/commands/{chunk-PZU6FZO6.js → chunk-FWU3H4TX.js} +1 -1
  151. package/dist/commands/{chunk-RYZ3RQRH.js → chunk-G3HBYHFA.js} +1 -1
  152. package/dist/commands/{chunk-HCA5QG2U.js → chunk-G4E4M2P4.js} +2 -2
  153. package/dist/commands/{chunk-VJLZ3IQQ.js → chunk-G5KSL2Q2.js} +1 -1
  154. package/dist/commands/{chunk-Y5ZW3KN5.js → chunk-G6XC7V6Y.js} +2 -2
  155. package/dist/commands/{chunk-73EBNBUW.js → chunk-GCPP5XIG.js} +1 -1
  156. package/dist/commands/{chunk-Q3463XNL.js → chunk-GITT5A5A.js} +3 -3
  157. package/dist/commands/{chunk-T2IO4LEB.js → chunk-GLC47H7I.js} +10 -10
  158. package/dist/commands/{chunk-GA6E4VGO.js → chunk-GUR54ELE.js} +1 -1
  159. package/dist/commands/{chunk-7IT23HIR.js → chunk-GY4DMCKS.js} +2 -2
  160. package/dist/commands/{chunk-PZ4ITSLG.js → chunk-H6JQRHDC.js} +3 -3
  161. package/dist/commands/{chunk-ZHZSZNE2.js → chunk-HATKF6VX.js} +2 -2
  162. package/dist/commands/{chunk-ELWNRE6E.js → chunk-HH3CVIFU.js} +5 -5
  163. package/dist/commands/{chunk-7GMTJDO2.js → chunk-HHMMGDMP.js} +6 -6
  164. package/dist/commands/{chunk-VD5674LW.js → chunk-HI5WPM6C.js} +2 -2
  165. package/dist/commands/{chunk-JUUBDYFZ.js → chunk-HQSWPRUF.js} +4 -4
  166. package/dist/commands/{chunk-ZAJD6T6E.js → chunk-HVCQYZVD.js} +2 -2
  167. package/dist/commands/chunk-HWEZRNPL.js +66 -0
  168. package/dist/commands/{chunk-J6GIVMXI.js → chunk-HX3FFIO5.js} +18 -3
  169. package/dist/commands/{chunk-GU5ML3Y3.js → chunk-HXDTA5VU.js} +13 -68
  170. package/dist/commands/{chunk-BNXE3NVB.js → chunk-I2KCGKJI.js} +1 -1
  171. package/dist/commands/{chunk-LC7SBONO.js → chunk-IAD4WLLI.js} +1 -1
  172. package/dist/commands/{chunk-WWC5L3AO.js → chunk-IB5TT73I.js} +2 -2
  173. package/dist/commands/{chunk-HOSZITJM.js → chunk-IBAYXCMU.js} +2 -2
  174. package/dist/commands/chunk-IGDJNXX2.js +49 -0
  175. package/dist/commands/{chunk-OJ4LGBVD.js → chunk-ILIITIMQ.js} +3 -3
  176. package/dist/commands/{chunk-CUR2WNYB.js → chunk-IRGDMSTI.js} +3 -3
  177. package/dist/commands/{chunk-PZTWQYRI.js → chunk-IYJEBWW5.js} +3 -3
  178. package/dist/commands/{chunk-A3D2XHOJ.js → chunk-J22PSIXR.js} +40 -9
  179. package/dist/commands/{chunk-O27H6NN6.js → chunk-J66YBAAM.js} +3 -5
  180. package/dist/commands/{chunk-P6RGQXHI.js → chunk-J6WKZRV2.js} +2 -2
  181. package/dist/commands/{chunk-NFEBQED3.js → chunk-J7IO3AYH.js} +2 -2
  182. package/dist/commands/{chunk-T57W3UWK.js → chunk-JAKC2BHX.js} +1 -1
  183. package/dist/commands/{chunk-3EO2XN3A.js → chunk-JCAQ7B6J.js} +4 -4
  184. package/dist/commands/{chunk-QQZOQ7AM.js → chunk-JFLFGLE4.js} +1 -1
  185. package/dist/commands/{chunk-ZDSDPKCD.js → chunk-JIGBNCDR.js} +1 -1
  186. package/dist/commands/{chunk-Q5N2J2UF.js → chunk-JJHWTFWQ.js} +5 -7
  187. package/dist/commands/{chunk-EI6JG5DF.js → chunk-JKOGWGQM.js} +1 -1
  188. package/dist/commands/{chunk-RK4HE5NW.js → chunk-JM6EVOFN.js} +4 -4
  189. package/dist/commands/{chunk-EBNIX2TC.js → chunk-JV24VP2O.js} +1 -1
  190. package/dist/commands/{chunk-BCK5LW4F.js → chunk-JVKXJ763.js} +3 -3
  191. package/dist/commands/{chunk-D5TAR6TV.js → chunk-JZHY7D6D.js} +1 -1
  192. package/dist/commands/{chunk-CRNPPKP2.js → chunk-JZK33TA5.js} +1 -1
  193. package/dist/commands/{chunk-UOAG2XQT.js → chunk-K275REYP.js} +3 -3
  194. package/dist/commands/{chunk-HESMKHEB.js → chunk-K4G3HOKS.js} +2 -2
  195. package/dist/commands/{chunk-L6XN3EXI.js → chunk-K64EIHD2.js} +1 -1
  196. package/dist/commands/{chunk-RINVPTA2.js → chunk-KCFOP5RI.js} +28 -28
  197. package/dist/commands/{chunk-O26Y2FOJ.js → chunk-KGE4AS2Y.js} +1 -1
  198. package/dist/commands/{chunk-EWA72KO7.js → chunk-KK2SL42W.js} +2 -2
  199. package/dist/commands/{chunk-MMXZKLDU.js → chunk-KK7TEL5G.js} +10 -4
  200. package/dist/commands/{chunk-UEURNXE5.js → chunk-KKIMVXAP.js} +2 -2
  201. package/dist/commands/{chunk-MAGJFH5T.js → chunk-KODXWMBX.js} +6 -6
  202. package/dist/commands/{chunk-D4HNS43Q.js → chunk-KPSKWTOS.js} +17 -17
  203. package/dist/commands/{chunk-VFJYOAOQ.js → chunk-KTV2HNWB.js} +2 -2
  204. package/dist/commands/{chunk-OWR2TCOY.js → chunk-KWYQR5MK.js} +5 -5
  205. package/dist/commands/{chunk-FNQW6NY7.js → chunk-KXK2A2HB.js} +6 -2
  206. package/dist/commands/{chunk-O5FVBIRI.js → chunk-KZ5BBBMO.js} +5 -5
  207. package/dist/commands/{chunk-JUJFIATR.js → chunk-KZ7HD37E.js} +6 -6
  208. package/dist/commands/{chunk-2YCKPX3A.js → chunk-KZZWPUJW.js} +1 -1
  209. package/dist/commands/{chunk-MYNM3YMR.js → chunk-L7DAL54N.js} +3 -3
  210. package/dist/commands/{chunk-NOXLKIPR.js → chunk-LAR76BFA.js} +1 -1
  211. package/dist/commands/{chunk-ZA3W73PF.js → chunk-LB557AHJ.js} +3 -3
  212. package/dist/commands/{chunk-LYEKT3IN.js → chunk-LEB2VP7F.js} +1 -1
  213. package/dist/commands/{chunk-WQJ7O3C3.js → chunk-LJXKVLYI.js} +1 -1
  214. package/dist/commands/{chunk-CHX4QTP4.js → chunk-LJZERYLG.js} +1 -1
  215. package/dist/commands/{chunk-PF22VUWB.js → chunk-LOOFYHUM.js} +76 -26
  216. package/dist/commands/{chunk-HIPO6HUG.js → chunk-LPSULLNK.js} +1 -1
  217. package/dist/commands/{chunk-G47ZNQVG.js → chunk-LR22UK5W.js} +1 -1
  218. package/dist/commands/{chunk-SV4FHQE7.js → chunk-LT7QSHR4.js} +14 -14
  219. package/dist/commands/{chunk-HIB5G2X6.js → chunk-LUXWDMKI.js} +7 -7
  220. package/dist/commands/{chunk-XH6BGVVP.js → chunk-LX7TIEMI.js} +9 -36
  221. package/dist/commands/{chunk-OGNTJ5JB.js → chunk-LYO6TX5L.js} +1 -1
  222. package/dist/commands/{chunk-JLREFWJ4.js → chunk-LZ5QXE5N.js} +6 -6
  223. package/dist/commands/{chunk-WW3TX742.js → chunk-LZPPSOTP.js} +4 -4
  224. package/dist/commands/{chunk-5WIZR5SC.js → chunk-M4UV3BEV.js} +11 -11
  225. package/dist/commands/{chunk-LNBUIOK6.js → chunk-M6JDU5EK.js} +4 -4
  226. package/dist/commands/{chunk-VZSJCFRT.js → chunk-MFBNNTBM.js} +4 -4
  227. package/dist/commands/{chunk-KHWTJ4F7.js → chunk-MI2OS6TL.js} +3 -3
  228. package/dist/commands/{chunk-VZCQZFPH.js → chunk-MLW4S35K.js} +19 -8
  229. package/dist/commands/{chunk-RIUPRMLW.js → chunk-MN425CU6.js} +1 -1
  230. package/dist/commands/{chunk-7W3D3WRW.js → chunk-MOIOSCZM.js} +2 -2
  231. package/dist/commands/{chunk-3BNNMJOT.js → chunk-MRORPFSO.js} +20 -320
  232. package/dist/commands/{chunk-LA5WTOAM.js → chunk-MUGTOJUL.js} +12 -12
  233. package/dist/commands/{chunk-L6LU2633.js → chunk-MVHPRYHE.js} +1 -1
  234. package/dist/commands/{chunk-EKCKCX5S.js → chunk-MWO6FOSZ.js} +123 -21
  235. package/dist/commands/{chunk-AVUGMOHZ.js → chunk-N7QTMTST.js} +2 -2
  236. package/dist/commands/{chunk-LMSS4ARB.js → chunk-NDBX7LSS.js} +1 -1
  237. package/dist/commands/{chunk-BEE7OAQ5.js → chunk-NDWZTWXV.js} +21 -2
  238. package/dist/commands/{chunk-6TESOL3L.js → chunk-NEGJ77RV.js} +7 -7
  239. package/dist/commands/{chunk-LCEJXF7A.js → chunk-NEGRE5VW.js} +4 -4
  240. package/dist/commands/{chunk-IXX4SXIP.js → chunk-NFPD2P3V.js} +1 -1
  241. package/dist/commands/chunk-NHIW7JE6.js +335 -0
  242. package/dist/commands/{chunk-CJSFC5YI.js → chunk-NILSN7A4.js} +7 -7
  243. package/dist/commands/{chunk-W4J6YTFE.js → chunk-NOLFSPOB.js} +2 -2
  244. package/dist/commands/chunk-NT67QTZO.js +65 -0
  245. package/dist/commands/{chunk-NJT5L6IC.js → chunk-NU7W6QGT.js} +33 -4
  246. package/dist/commands/chunk-NUR4FQHM.js +21 -0
  247. package/dist/commands/{chunk-OKKQI4ZG.js → chunk-OAAVY2JK.js} +1 -1
  248. package/dist/commands/chunk-OF4BY4N7.js +32 -0
  249. package/dist/commands/{chunk-W47I2KDY.js → chunk-OGS2DK7I.js} +3 -3
  250. package/dist/commands/{chunk-MS6Q3Z7V.js → chunk-OIPV3PWW.js} +6 -6
  251. package/dist/commands/{chunk-T33QDAWD.js → chunk-OIX2363L.js} +1 -1
  252. package/dist/commands/{chunk-GPMSYXYO.js → chunk-OJ65BZBV.js} +283 -15
  253. package/dist/commands/{chunk-34LAULSC.js → chunk-OKZWEVR4.js} +3 -3
  254. package/dist/commands/{chunk-2CXAVVST.js → chunk-OL6IF4JC.js} +1 -1
  255. package/dist/commands/{chunk-6JVNRY5A.js → chunk-OMPRILFH.js} +1 -1
  256. package/dist/commands/{chunk-VGHSZLYQ.js → chunk-OOWGH2RG.js} +1 -1
  257. package/dist/commands/{chunk-ERGZPWKP.js → chunk-OP2RFVLS.js} +1 -1
  258. package/dist/commands/{chunk-UU6GCJGM.js → chunk-ORKVN2LO.js} +2 -2
  259. package/dist/commands/{chunk-RHII5XI6.js → chunk-OSBWXZJ4.js} +24 -24
  260. package/dist/commands/{chunk-D3SHCUBC.js → chunk-OVWPZDWP.js} +2 -2
  261. package/dist/commands/{chunk-Z4HYBFZD.js → chunk-OWYK2BEJ.js} +108 -46
  262. package/dist/commands/{chunk-P4O67FP5.js → chunk-OX3VQLV2.js} +6 -6
  263. package/dist/commands/{chunk-L6TU7FC2.js → chunk-OZJP77UM.js} +4 -4
  264. package/dist/commands/{chunk-SNO7CY2B.js → chunk-P3H3DKTE.js} +2 -2
  265. package/dist/commands/{chunk-2OIX4JLA.js → chunk-P5SOYWH2.js} +3 -3
  266. package/dist/commands/{chunk-M4PEC7YW.js → chunk-PHLOTUB7.js} +54 -37
  267. package/dist/commands/{chunk-73KBUQKI.js → chunk-PTNQCCIB.js} +2 -2
  268. package/dist/commands/{chunk-4P2LCVGO.js → chunk-PTZEFQUX.js} +8 -8
  269. package/dist/commands/{chunk-DJVMC3U2.js → chunk-Q426ZSZ4.js} +1 -1
  270. package/dist/commands/{chunk-US6X7JXC.js → chunk-Q7EEIOAD.js} +4 -4
  271. package/dist/commands/{chunk-LE7TFPMU.js → chunk-QABRNGQV.js} +2 -2
  272. package/dist/commands/{chunk-NGKB632X.js → chunk-QDFVVRQP.js} +3 -3
  273. package/dist/commands/{chunk-36M2UV6C.js → chunk-QGATHT4S.js} +38 -4
  274. package/dist/commands/{chunk-DIB2Z2OS.js → chunk-QJRVDE7T.js} +1 -1
  275. package/dist/commands/{chunk-KUJQWO6M.js → chunk-QKTTKAXM.js} +2 -2
  276. package/dist/commands/{chunk-DXZW4V7J.js → chunk-QMDKDQKW.js} +3 -3
  277. package/dist/commands/{chunk-VW5SGE7A.js → chunk-QOSC5RKD.js} +1 -1
  278. package/dist/commands/{chunk-ENLWXAHD.js → chunk-QV5FKMOU.js} +1 -1
  279. package/dist/commands/{chunk-32SNWQJP.js → chunk-R2THGPI3.js} +2 -2
  280. package/dist/commands/{chunk-RVHBWSIG.js → chunk-R54Z2Z3X.js} +2 -2
  281. package/dist/commands/{chunk-CJAA5GAF.js → chunk-RG53UFNW.js} +15 -15
  282. package/dist/commands/{chunk-HJKZDDDI.js → chunk-RHKCWJQX.js} +1 -1
  283. package/dist/commands/{chunk-RPDWFUQO.js → chunk-RKIAX4DZ.js} +36 -84
  284. package/dist/commands/{chunk-LE2T3FGJ.js → chunk-RLBFEHHC.js} +2 -4
  285. package/dist/commands/{chunk-5GBZ43UA.js → chunk-RMDLFLPE.js} +1 -1
  286. package/dist/commands/{chunk-U2UH4VM4.js → chunk-RN2YDNLF.js} +2 -2
  287. package/dist/commands/{chunk-GQHUFNXN.js → chunk-RRAIRS2T.js} +1 -1
  288. package/dist/commands/{chunk-DRCTDVI2.js → chunk-RUQY5TS3.js} +3 -3
  289. package/dist/commands/{chunk-WGULS5DA.js → chunk-RW64VHEB.js} +1 -0
  290. package/dist/commands/{chunk-4G7NKNAZ.js → chunk-RXYMJPJB.js} +3 -3
  291. package/dist/commands/{chunk-B33BTNB4.js → chunk-S4M6UWR2.js} +21 -5
  292. package/dist/commands/{chunk-4Q4FXBUQ.js → chunk-SASX3W2M.js} +2 -2
  293. package/dist/commands/{chunk-TIXJY22D.js → chunk-SJ2ZN575.js} +5 -5
  294. package/dist/commands/{chunk-NSZTSCBW.js → chunk-SP7DKYGU.js} +13 -13
  295. package/dist/commands/{chunk-T3FD3Q73.js → chunk-SRG6PKVS.js} +1 -1
  296. package/dist/commands/{chunk-QA22PBCJ.js → chunk-SSL6A3Y4.js} +3 -3
  297. package/dist/commands/{chunk-4BEIYKI2.js → chunk-SV4FZR24.js} +2 -0
  298. package/dist/commands/{chunk-HZSQI6TD.js → chunk-SVTS7ACS.js} +2 -2
  299. package/dist/commands/{chunk-F7XLEK55.js → chunk-SVV4U5AR.js} +1 -1
  300. package/dist/commands/{chunk-RRQFITJE.js → chunk-SXJM4DZ5.js} +1 -1
  301. package/dist/commands/{chunk-OIDMJASD.js → chunk-SYB3M632.js} +1 -1
  302. package/dist/commands/{chunk-UJOZ2MGX.js → chunk-SYOXIKB7.js} +6 -6
  303. package/dist/commands/{chunk-5SB37YDW.js → chunk-SZG5HDNP.js} +3 -3
  304. package/dist/commands/{chunk-R2CF6VZE.js → chunk-T4F33UKZ.js} +4 -4
  305. package/dist/commands/{chunk-ESQEEL4O.js → chunk-TAEGXID2.js} +2 -2
  306. package/dist/commands/chunk-TEPYEUYG.js +585 -0
  307. package/dist/commands/{chunk-LUMCYDGE.js → chunk-TFLHYC2F.js} +2 -2
  308. package/dist/commands/{chunk-V5OIPYA6.js → chunk-TJKM56WJ.js} +4 -4
  309. package/dist/commands/{chunk-CYQ3ZF7R.js → chunk-TLAB552K.js} +86 -13
  310. package/dist/commands/{chunk-ST32OGPY.js → chunk-TP6L4W3W.js} +5 -5
  311. package/dist/commands/{chunk-C26LKDBE.js → chunk-TR7WWYD5.js} +1 -1
  312. package/dist/commands/{chunk-PWYXY46Y.js → chunk-TYNH2R66.js} +15 -15
  313. package/dist/commands/{chunk-AZUE65NT.js → chunk-U5P6G3UV.js} +2 -2
  314. package/dist/commands/{chunk-REPANBLS.js → chunk-U7Y6RKLK.js} +1 -1
  315. package/dist/commands/{chunk-55I7OYHI.js → chunk-UIMMWH7U.js} +1 -1
  316. package/dist/commands/{chunk-72J2G2E7.js → chunk-UKBBWMLE.js} +20 -20
  317. package/dist/commands/{chunk-VTLL6CKO.js → chunk-UNMSZGSG.js} +14 -14
  318. package/dist/commands/chunk-UOVUUVDK.js +18 -0
  319. package/dist/commands/{chunk-JNWHX25C.js → chunk-URDT2O2K.js} +1 -1
  320. package/dist/commands/{chunk-FGZQSSGH.js → chunk-UREXZJDB.js} +1 -1
  321. package/dist/commands/{chunk-O4WBADCX.js → chunk-UTHUX7VU.js} +3 -3
  322. package/dist/commands/{chunk-PDDKRHHS.js → chunk-V5OUZFWK.js} +3 -3
  323. package/dist/commands/{chunk-N4O5I55P.js → chunk-VCPGFBMN.js} +8 -8
  324. package/dist/commands/{chunk-WN7NK3NY.js → chunk-VGPIQNDB.js} +1 -1
  325. package/dist/commands/{chunk-HOGFJHBT.js → chunk-VJS2MCLA.js} +1 -1
  326. package/dist/commands/{chunk-4YI4SLRJ.js → chunk-VK6D5CWA.js} +8 -8
  327. package/dist/commands/{chunk-4LWRCPS5.js → chunk-VOF3N4WO.js} +3 -3
  328. package/dist/commands/{chunk-AM44D7NF.js → chunk-VQRT32JB.js} +1 -1
  329. package/dist/commands/{chunk-AS3GWVAN.js → chunk-VQVPAVQ3.js} +1 -1
  330. package/dist/commands/{chunk-6VTJO5L2.js → chunk-VV4TQYGD.js} +3 -3
  331. package/dist/commands/{chunk-WIE7VUBE.js → chunk-W7DRUOF7.js} +5 -5
  332. package/dist/commands/{chunk-HH2KDLTP.js → chunk-WAEN2RTT.js} +2 -2
  333. package/dist/commands/{chunk-NKKH3PBE.js → chunk-WB4T3VY2.js} +18 -1
  334. package/dist/commands/{chunk-DNJC7X73.js → chunk-WCEUMOKK.js} +2 -2
  335. package/dist/commands/{chunk-BK6Q4VCA.js → chunk-WTH6NTXU.js} +4 -4
  336. package/dist/commands/{chunk-WG6GYBRJ.js → chunk-WWVYEHQT.js} +2 -1
  337. package/dist/commands/{chunk-P4CWLRT2.js → chunk-X3TNPALI.js} +1 -1
  338. package/dist/commands/{chunk-LZNYHWRO.js → chunk-XC6GG5JR.js} +3 -3
  339. package/dist/commands/{chunk-RI7EQYKL.js → chunk-XFWI6WHH.js} +2 -2
  340. package/dist/commands/{chunk-BY3POLIQ.js → chunk-XHGWMD3L.js} +7 -7
  341. package/dist/commands/{chunk-BPSJSHYD.js → chunk-XI2ABCRX.js} +2 -2
  342. package/dist/commands/{chunk-TS4ZK46L.js → chunk-XKSUBUIH.js} +5 -5
  343. package/dist/commands/{chunk-K7GL3BGI.js → chunk-XPBF5DG3.js} +4 -4
  344. package/dist/commands/{chunk-6SKMZGER.js → chunk-XUMYPESL.js} +20 -8
  345. package/dist/commands/{chunk-QS5USD4T.js → chunk-XXC32PVL.js} +5 -4
  346. package/dist/commands/{chunk-ORSI7Y55.js → chunk-XXN2EZBY.js} +1 -1
  347. package/dist/commands/{chunk-IZVM2TTH.js → chunk-XZQWEVR3.js} +2 -2
  348. package/dist/commands/{chunk-E3CXOVPQ.js → chunk-Y27PTXXI.js} +1 -1
  349. package/dist/commands/{chunk-337QQM4C.js → chunk-Y4EBUI6M.js} +106 -5
  350. package/dist/commands/{chunk-WRX3MINT.js → chunk-YAU3LYNF.js} +1 -1
  351. package/dist/commands/{chunk-JB7R3A4A.js → chunk-YDURQICF.js} +4 -4
  352. package/dist/commands/{chunk-RX5JSPPH.js → chunk-YGFOGA7C.js} +11 -11
  353. package/dist/commands/{chunk-S6SXMBF2.js → chunk-YHJ2AJMA.js} +2 -2
  354. package/dist/commands/{chunk-MVPUQLN5.js → chunk-YM77CF4D.js} +4 -4
  355. package/dist/commands/{chunk-ZYIMQHCB.js → chunk-YNPRJCEO.js} +6 -6
  356. package/dist/commands/{chunk-3UKJFWKS.js → chunk-YTBQAD5W.js} +3 -3
  357. package/dist/commands/{chunk-KIVOZY2J.js → chunk-ZBZ5DDCH.js} +66 -64
  358. package/dist/commands/{chunk-TAPDXK34.js → chunk-ZLRUHSOP.js} +1 -1
  359. package/dist/commands/{chunk-XYAK53TK.js → chunk-ZNR75OXP.js} +2 -1
  360. package/dist/commands/{chunk-CADFBQJJ.js → chunk-ZSOR4ISJ.js} +4 -4
  361. package/dist/commands/{chunk-6NRTLH6I.js → chunk-ZYFHYQA7.js} +1 -1
  362. package/dist/commands/{chunk-Q7TV3OV6.js → chunk-ZZFFSQF4.js} +4 -4
  363. package/dist/commands/{chunk-PDAY76AN.js → chunk-ZZULXNC2.js} +1 -1
  364. package/dist/commands/{chunk-5Y7QQYTU.js → chunk-ZZXO6TFH.js} +1 -1
  365. package/dist/commands/code-symbol-cli.js +4 -4
  366. package/dist/commands/codex-hook-adapter.js +99 -100
  367. package/dist/commands/command-derive.js +10 -10
  368. package/dist/commands/cost-audit-main.js +94 -92
  369. package/dist/commands/cspell-cached.js +24 -23
  370. package/dist/commands/defect-origin-main.js +19 -18
  371. package/dist/commands/defect-report-main.js +15 -14
  372. package/dist/commands/disposition-cli.js +67 -64
  373. package/dist/commands/doctor.js +3 -3
  374. package/dist/commands/document-read-cli.js +89 -9
  375. package/dist/commands/document-section-main.js +89 -9
  376. package/dist/commands/edit-files-cli.js +1 -1
  377. package/dist/commands/effect-audit-cli.js +20 -19
  378. package/dist/commands/epic-audit-main.js +55 -53
  379. package/dist/commands/epic-bundle-main.js +87 -85
  380. package/dist/commands/epic-check.js +16 -15
  381. package/dist/commands/epic-main.js +93 -91
  382. package/dist/commands/epic-next-main.js +51 -49
  383. package/dist/commands/format-edited-cli.js +30 -32
  384. package/dist/commands/format.js +11 -10
  385. package/dist/commands/fresh-machine-cli.js +6 -6
  386. package/dist/commands/git-followup-workflow.js +137 -122
  387. package/dist/commands/git-workflow.js +28 -27
  388. package/dist/commands/github-release-cli.js +26 -3
  389. package/dist/commands/hook-ledger-cli.js +74 -126
  390. package/dist/commands/init-main.js +20 -19
  391. package/dist/commands/inputs.json +1909 -1878
  392. package/dist/commands/issue-ack-cli.js +5 -5
  393. package/dist/commands/issue-already-done-cli.js +63 -58
  394. package/dist/commands/issue-body-cli.js +44 -42
  395. package/dist/commands/issue-cite-main.js +11 -10
  396. package/dist/commands/issue-comment-main.js +15 -11
  397. package/dist/commands/issue-consolidate-cli.js +31 -30
  398. package/dist/commands/issue-file-main.js +114 -110
  399. package/dist/commands/issue-fold-existing-cli.js +88 -86
  400. package/dist/commands/issue-fold-main.js +26 -25
  401. package/dist/commands/issue-lint-main.js +38 -37
  402. package/dist/commands/issue-measured-cli.js +66 -61
  403. package/dist/commands/issue-plan-cli.js +103 -101
  404. package/dist/commands/issue-premise-unmet-cli.js +66 -61
  405. package/dist/commands/issue-priority-cli.js +13 -12
  406. package/dist/commands/issue-read-main.js +18 -17
  407. package/dist/commands/issue-release-class-cli.js +12 -11
  408. package/dist/commands/issue-release-main.js +13 -12
  409. package/dist/commands/issue-scout-main.js +89 -87
  410. package/dist/commands/issue-spill-main.js +114 -110
  411. package/dist/commands/issue-state-main.js +16 -15
  412. package/dist/commands/issue-tick-cli.js +14 -13
  413. package/dist/commands/josh-completion.js +10 -10
  414. package/dist/commands/lane-adopt-cli.js +19 -19
  415. package/dist/commands/lane-breakdown-cli.js +154 -126
  416. package/dist/commands/lane-cli.js +131 -125
  417. package/dist/commands/lane-launch-main.js +17 -17
  418. package/dist/commands/lane-limit-cli.js +81 -79
  419. package/dist/commands/lane-measure-cli.js +246 -130
  420. package/dist/commands/lane-pause-cli.js +15 -15
  421. package/dist/commands/lane-plan-cli.js +108 -101
  422. package/dist/commands/lane-resolve-cli.js +20 -19
  423. package/dist/commands/lane-restart-cli.js +124 -118
  424. package/dist/commands/lane-why-cli.js +85 -82
  425. package/dist/commands/lane-withdraw-cli.js +49 -48
  426. package/dist/commands/latest-corepack.js +3 -3
  427. package/dist/commands/latest-if-required-cli.js +9 -9
  428. package/dist/commands/latest-scope-main.js +5 -5
  429. package/dist/commands/latest-update.js +3 -3
  430. package/dist/commands/lines-command.js +3 -3
  431. package/dist/commands/lint-parallel-main.js +32 -31
  432. package/dist/commands/lint-related.js +79 -60
  433. package/dist/commands/lint-rule.js +32 -31
  434. package/dist/commands/lockfile-policy.js +11 -11
  435. package/dist/commands/main-merge-main.js +5 -5
  436. package/dist/commands/main-sync-main.js +5 -5
  437. package/dist/commands/managed-config-scope-cli.js +3 -3
  438. package/dist/commands/measure-rerun-cli.js +10 -10
  439. package/dist/commands/metrics-command.js +91 -58
  440. package/dist/commands/observation-record-cli.js +3 -3
  441. package/dist/commands/observations-flush-cli.js +27 -25
  442. package/dist/commands/oracle-list-cli.js +2 -2
  443. package/dist/commands/overrides-check.js +4 -4
  444. package/dist/commands/package-scout-cli.js +67 -26
  445. package/dist/commands/plan-consumers-main.js +4 -4
  446. package/dist/commands/plan-scaffold-cli.js +132 -91
  447. package/dist/commands/pr-classification-main.js +3 -3
  448. package/dist/commands/pre-commit-lint.js +11 -12
  449. package/dist/commands/pre-commit-type-check.js +25 -24
  450. package/dist/commands/pre-push-unit.js +33 -33
  451. package/dist/commands/pretool-guard-cli.js +90 -91
  452. package/dist/commands/project-profile-cli.js +5 -4
  453. package/dist/commands/propagate.js +15 -15
  454. package/dist/commands/prose-stale-cli.js +20 -19
  455. package/dist/commands/publishable-range-check.js +4 -4
  456. package/dist/commands/read-files-cli.js +2 -2
  457. package/dist/commands/read-set-cli.js +61 -24
  458. package/dist/commands/refactor-scan-cli.js +6 -6
  459. package/dist/commands/release-cli.js +64 -36
  460. package/dist/commands/release-scope-main.js +19 -18
  461. package/dist/commands/rename-cli.js +27 -29
  462. package/dist/commands/reserved-run.js +3 -3
  463. package/dist/commands/retrospective-cli.js +104 -102
  464. package/dist/commands/review-attest-cli.js +6 -6
  465. package/dist/commands/review-brief-main.js +127 -109
  466. package/dist/commands/review-findings-cli.js +2 -2
  467. package/dist/commands/review-pair-cli.js +110 -84
  468. package/dist/commands/review-record-main.js +108 -83
  469. package/dist/commands/review-round2-cli.js +46 -45
  470. package/dist/commands/review-stops-cli.js +16 -16
  471. package/dist/commands/review-submit-cli.js +127 -109
  472. package/dist/commands/rule-list.js +58 -60
  473. package/dist/commands/rule-value-cli.js +226 -74
  474. package/dist/commands/run-add-cli.js +28 -27
  475. package/dist/commands/run-board-main.js +136 -132
  476. package/dist/commands/run-carry-cli.js +127 -124
  477. package/dist/commands/run-chain-cli.js +116 -93
  478. package/dist/commands/run-cut-cli.js +124 -119
  479. package/dist/commands/run-ending-cli.js +19 -22
  480. package/dist/commands/run-entry-cli.js +183 -180
  481. package/dist/commands/run-event-cli.js +5 -5
  482. package/dist/commands/run-handoff-cli.js +52 -28
  483. package/dist/commands/run-handoff-lanes-cli.js +15 -15
  484. package/dist/commands/run-hold-main.js +64 -62
  485. package/dist/commands/run-liveness-cli.js +11 -11
  486. package/dist/commands/run-merge-main.js +119 -116
  487. package/dist/commands/run-next-cli.js +87 -86
  488. package/dist/commands/run-park-cli.js +111 -92
  489. package/dist/commands/run-pause-cli.js +147 -133
  490. package/dist/commands/run-pickup-cli.js +13 -13
  491. package/dist/commands/run-prep-main.js +83 -82
  492. package/dist/commands/run-prime-cli.js +107 -87
  493. package/dist/commands/run-progress-main.js +123 -107
  494. package/dist/commands/run-report-cli.js +25 -24
  495. package/dist/commands/run-review-cli.js +168 -149
  496. package/dist/commands/run-ship-cli.js +208 -203
  497. package/dist/commands/run-ship-evidence-cli.js +38 -37
  498. package/dist/commands/run-ship-wait-main.js +40 -37
  499. package/dist/commands/run-split-cli.js +127 -125
  500. package/dist/commands/run-stale-main.js +36 -35
  501. package/dist/commands/run-status-cli.js +16 -15
  502. package/dist/commands/run-step-cli.js +173 -164
  503. package/dist/commands/run-tail-cli.js +1 -1
  504. package/dist/commands/run-tidy-main.js +30 -29
  505. package/dist/commands/run-wake-main.js +137 -119
  506. package/dist/commands/run-watcher-guard-cli.js +30 -29
  507. package/dist/commands/secretlint-scan.js +2 -2
  508. package/dist/commands/selfcheck-cli.js +27 -26
  509. package/dist/commands/session-language-main.js +48 -28
  510. package/dist/commands/sonar-hotspots-cli.js +3 -3
  511. package/dist/commands/split-assess-cli.js +24 -23
  512. package/dist/commands/split-child-recover-cli.js +13 -12
  513. package/dist/commands/start.js +37 -35
  514. package/dist/commands/stash-pop-main.js +3 -3
  515. package/dist/commands/stash-push-main.js +3 -3
  516. package/dist/commands/stop-guard.js +144 -143
  517. package/dist/commands/sync-main.js +11 -10
  518. package/dist/commands/telegram-test-main.js +5 -5
  519. package/dist/commands/test-declared.js +9 -8
  520. package/dist/commands/test-e2e-guard.js +23 -22
  521. package/dist/commands/test-pinned-main.js +26 -25
  522. package/dist/commands/test-reach-cli.js +15 -14
  523. package/dist/commands/test-red-main.js +5 -5
  524. package/dist/commands/{test-related-ZT2AO62I.js → test-related-ZCNC46MS.js} +31 -31
  525. package/dist/commands/test-related-main.js +51 -50
  526. package/dist/commands/test-unit-guard-main.js +9 -8
  527. package/dist/commands/time-cli.js +24 -27
  528. package/dist/commands/time-density-cli.js +8 -9
  529. package/dist/commands/tree-status-cli.js +4 -4
  530. package/dist/commands/type-check-command.js +8 -7
  531. package/dist/commands/ui-shot-cli.js +4 -4
  532. package/dist/commands/uninstall.js +20 -19
  533. package/dist/commands/unused-members-cli.js +9 -8
  534. package/dist/commands/upstream-interrupt-main.js +115 -111
  535. package/dist/commands/verification-gate.js +46 -46
  536. package/dist/commands/version-check.js +5 -5
  537. package/dist/hooks/{chunk-LWD43Z3C.js → chunk-5CUXGQT6.js} +1667 -107
  538. package/dist/hooks/{chunk-4YXV2REH.js → chunk-5R5YFQR5.js} +8 -8
  539. package/dist/hooks/{chunk-LKQBEKBI.js → chunk-6RLY27FT.js} +8 -8
  540. package/dist/hooks/{chunk-CICKRHTB.js → chunk-AO4TOV4V.js} +119 -2679
  541. package/dist/hooks/{chunk-NUPVO7RI.js → chunk-G5WSPYJ6.js} +4296 -1687
  542. package/dist/hooks/{chunk-UU4PTPEZ.js → chunk-HHIVWGHX.js} +250 -125
  543. package/dist/hooks/{chunk-P7BPAU26.js → chunk-IURJANNZ.js} +2 -2
  544. package/dist/hooks/{chunk-6RR6JZSB.js → chunk-OV22V63P.js} +357 -1744
  545. package/dist/hooks/{chunk-RQXECHAS.js → chunk-SXABK6UV.js} +57 -45
  546. package/dist/hooks/codex-hook-adapter.js +11 -11
  547. package/dist/hooks/daemon.js +1053 -690
  548. package/dist/hooks/format-edited.js +5 -5
  549. package/dist/hooks/inputs.json +542 -527
  550. package/dist/hooks/pretool-guard.js +7 -7
  551. package/dist/hooks/session-lang.js +293 -16
  552. package/dist/hooks/stop-guard.js +225 -48
  553. package/dist/inputs.json +65 -65
  554. package/dist/josh.js +73 -19
  555. package/dist/self-sync-guard/index.js +18 -1
  556. package/dist/version/index.js +18 -1
  557. package/package.json +3 -3
  558. package/pnpm-workspace.yaml +5 -13
  559. package/prompts/collaboration-workflow/issue-template.en.md +56 -52
  560. package/scripts/agent/agent-argv.ts +20 -6
  561. package/scripts/agent/agent-phase-profile.ts +89 -0
  562. package/scripts/agent/agent-role-profile.ts +3 -71
  563. package/scripts/agent/agent-ship-cap.ts +44 -0
  564. package/scripts/agent/agent-worker-profile.ts +154 -0
  565. package/scripts/agent/claude-agent-argv.ts +1 -1
  566. package/scripts/agent/lane-instructions.ts +29 -3
  567. package/scripts/auto-ok/auto-ok-judge-cli.ts +3 -0
  568. package/scripts/auto-ok/auto-ok-judge-write.ts +2 -1
  569. package/scripts/auto-ok/auto-ok-judge.ts +4 -2
  570. package/scripts/backlog/backlog-drive-escalate.ts +115 -0
  571. package/scripts/backlog/backlog-drive-stalled-retry.ts +48 -10
  572. package/scripts/document/document-scan.ts +35 -1
  573. package/scripts/gh/git-pr-checks-failed.ts +24 -0
  574. package/scripts/hooks/implementation-shell-deny-expansion.ts +20 -0
  575. package/scripts/hooks/implementation-shell-deny-git.ts +128 -0
  576. package/scripts/hooks/implementation-shell-deny.ts +14 -138
  577. package/scripts/hooks/implementation-shell.ts +28 -5
  578. package/scripts/hooks/step-zero-notice.ts +9 -6
  579. package/scripts/hooks/stop-actions.ts +4 -2
  580. package/scripts/init/init-logic-workspace.ts +1 -1
  581. package/scripts/issue/issue-auto-ok.ts +43 -4
  582. package/scripts/issue/issue-body-keys.ts +4 -0
  583. package/scripts/issue/issue-comment-cli.ts +15 -2
  584. package/scripts/issue/issue-evidence-exit.ts +6 -2
  585. package/scripts/issue/issue-file-cli.ts +5 -1
  586. package/scripts/issue/issue-file-pass.ts +14 -7
  587. package/scripts/issue/issue-file-worker.ts +95 -0
  588. package/scripts/issue/issue-file.ts +1 -1
  589. package/scripts/issue/issue-outcome.ts +107 -0
  590. package/scripts/issue/issue-read.ts +12 -7
  591. package/scripts/issue/issue-watch-diff.ts +2 -1
  592. package/scripts/josh/josh-commands-ai.ts +2 -2
  593. package/scripts/josh/josh-commands-development.ts +21 -5
  594. package/scripts/josh/josh-commands-issue-write.ts +3 -2
  595. package/scripts/josh/josh-commands-lint.ts +1 -1
  596. package/scripts/josh/josh-commands-project.ts +7 -2
  597. package/scripts/josh/josh-commands-run.ts +10 -2
  598. package/scripts/josh/josh-commands-workflow.ts +5 -0
  599. package/scripts/josh/session-language-cli.ts +1 -1
  600. package/scripts/lane/lane-breakdown-cli.ts +14 -4
  601. package/scripts/lane/lane-breakdown-text.ts +7 -0
  602. package/scripts/lane/lane-breakdown.ts +21 -1
  603. package/scripts/lane/lane-dispatch-prepare.ts +83 -0
  604. package/scripts/lane/lane-dispatch.ts +3 -53
  605. package/scripts/lane/lane-elapsed-time.ts +118 -0
  606. package/scripts/lane/lane-ledger-schema-ship.ts +4 -1
  607. package/scripts/lane/lane-net-time.ts +35 -7
  608. package/scripts/lane/lane-overrun.ts +1 -1
  609. package/scripts/lane/lane-plan-cli.ts +7 -3
  610. package/scripts/lane/lane-plan-estimate.ts +57 -0
  611. package/scripts/lane/lane-plan-size.ts +11 -20
  612. package/scripts/lane/lane-plan.ts +1 -0
  613. package/scripts/lane/lane-relaunch.ts +9 -4
  614. package/scripts/lane/lane-stage-budget.ts +6 -1
  615. package/scripts/lane/lane-stage-events.ts +103 -0
  616. package/scripts/lane/lane-stats-tables.ts +3 -0
  617. package/scripts/lane/lane-stop-check-stats.ts +117 -0
  618. package/scripts/lane/lane-stop-stats.ts +30 -6
  619. package/scripts/lane/lane-why-causes.ts +3 -11
  620. package/scripts/lane/openai-lane-supervisor-owner.ts +12 -0
  621. package/scripts/lane/openai-lane-supervisor.ts +36 -1
  622. package/scripts/lib/home-tilde.ts +24 -0
  623. package/scripts/lib/package-manifest.ts +27 -1
  624. package/scripts/observations/observation-ledger-archive.ts +180 -0
  625. package/scripts/observations/observation-ledger-home.ts +1 -0
  626. package/scripts/observations/observation-ledger.ts +5 -0
  627. package/scripts/observations/observations-flush-transaction.ts +358 -0
  628. package/scripts/observations/observations-flush.ts +72 -172
  629. package/scripts/plan/plan-scaffold-cli.ts +17 -6
  630. package/scripts/plan/plan-scaffold.ts +11 -0
  631. package/scripts/release/github-release-notes.ts +24 -0
  632. package/scripts/release/github-release-runs.ts +32 -6
  633. package/scripts/release/github-release.ts +10 -2
  634. package/scripts/release/release-progress.ts +22 -10
  635. package/scripts/release/release-publish-run.ts +39 -6
  636. package/scripts/repo/repository-labels.ts +23 -11
  637. package/scripts/review/review-comment-round.ts +10 -5
  638. package/scripts/rules/broad-investigation-shell.ts +2 -2
  639. package/scripts/rules/codex-prompt.ts +63 -0
  640. package/scripts/rules/direct-issue-comment.ts +62 -2
  641. package/scripts/rules/direct-issue-read.ts +55 -2
  642. package/scripts/rules/guard-remedy.ts +10 -4
  643. package/scripts/rules/issue-citation.ts +20 -9
  644. package/scripts/rules/last-prompt.ts +8 -4
  645. package/scripts/rules/rule-value-cli.ts +85 -4
  646. package/scripts/rules/rule-value-trend.ts +108 -0
  647. package/scripts/rules/shell-redirects.ts +19 -7
  648. package/scripts/rules/shell-segments.ts +145 -20
  649. package/scripts/rules/shell-tokens.ts +66 -0
  650. package/scripts/rules/standalone-gh-call.ts +63 -0
  651. package/scripts/rules/unasked-filing.ts +12 -4
  652. package/scripts/run/board/run-board-closed.ts +10 -1
  653. package/scripts/run/board/run-board-decision-read.ts +52 -12
  654. package/scripts/run/board/run-board-decision.ts +5 -0
  655. package/scripts/run/board/run-board-ending-reason.ts +21 -7
  656. package/scripts/run/board/run-board-github.ts +8 -1
  657. package/scripts/run/board/run-board-header.ts +4 -5
  658. package/scripts/run/board/run-board-layout.ts +5 -3
  659. package/scripts/run/board/run-board-link.ts +2 -0
  660. package/scripts/run/board/run-board-operation.ts +6 -2
  661. package/scripts/run/board/run-board-pause-fixture.json +12 -0
  662. package/scripts/run/board/run-board-pause.ts +87 -0
  663. package/scripts/run/board/run-board-plan-shared.ts +2 -0
  664. package/scripts/run/board/run-board-read.ts +7 -1
  665. package/scripts/run/board/run-board-render-condition.ts +10 -1
  666. package/scripts/run/board/run-board-render-title.ts +7 -0
  667. package/scripts/run/board/run-board-roots.ts +25 -2
  668. package/scripts/run/board/run-board-settle.ts +16 -2
  669. package/scripts/run/board/run-board-setup.ts +13 -7
  670. package/scripts/run/board/run-board-snapshot.ts +4 -0
  671. package/scripts/run/board/run-board-status.ts +13 -1
  672. package/scripts/run/board/run-board-tick.ts +7 -1
  673. package/scripts/run/cut/run-cut-cli.ts +2 -1
  674. package/scripts/run/park/run-park-cli.ts +13 -1
  675. package/scripts/run/park/run-park-escalate.ts +102 -0
  676. package/scripts/run/park/run-stalled.ts +29 -7
  677. package/scripts/run/review/run-review-early-push.ts +6 -6
  678. package/scripts/run/ship/run-ship-stop-cause.ts +12 -1
  679. package/scripts/split/split-assess.ts +14 -5
  680. package/scripts/test/test-related-touched.ts +21 -3
  681. package/scripts/test/test-related.ts +1 -1
  682. package/dist/commands/chunk-6WEVLIZE.js +0 -29
  683. package/dist/commands/chunk-E2ZCUKHT.js +0 -274
  684. package/dist/commands/chunk-NMLCPYBN.js +0 -134
  685. package/dist/commands/chunk-QEIO2ZNQ.js +0 -324
  686. package/dist/commands/chunk-QWX7EBC6.js +0 -112
  687. package/dist/commands/chunk-RQRLW4XK.js +0 -20
  688. package/dist/commands/chunk-UCQJDYE3.js +0 -21
  689. package/dist/commands/chunk-W4YH2DF3.js +0 -58
  690. package/dist/commands/{chunk-LRA3PXHS.js → chunk-ENKFCOVY.js} +3 -3
  691. package/dist/commands/{chunk-RUWV4INF.js → chunk-HQGNXR6I.js} +3 -3
@@ -1,59 +1,45 @@
1
1
  import {
2
+ codex_prompt,
2
3
  concise_reply,
3
4
  cost_cli,
4
5
  cost_verdict,
5
- delegation_policy,
6
6
  doctor_consumer,
7
- duplicate_read_outcome,
8
- duplicate_reads,
9
7
  epic_busy,
10
8
  hook_ledger,
11
- investigation_reads,
12
- issue_watch_diff,
13
9
  lane_background,
14
- lane_guard_policy,
15
10
  lane_park,
16
11
  lane_plan,
17
12
  last_prompt,
18
13
  pre_gate_cut,
19
14
  project_checks,
20
15
  review_attest,
21
- run_cut,
22
- run_cut_handoff,
23
16
  run_preflight,
24
17
  run_stage,
25
18
  run_tail_rule,
26
19
  stop_rules,
27
- tail_commands,
28
- turn_filings
29
- } from "./chunk-6RR6JZSB.js";
20
+ tail_commands
21
+ } from "./chunk-OV22V63P.js";
30
22
  import {
31
23
  bash_revert,
32
24
  step_zero_notice
33
- } from "./chunk-LKQBEKBI.js";
25
+ } from "./chunk-6RLY27FT.js";
34
26
  import {
35
27
  COMMAND_MAP,
36
28
  core_weights,
37
- hook_context,
38
- hook_decision,
39
- hook_tool_payload,
40
- test_declared_logic,
41
- time_batch_guard,
42
- time_hook_transcript,
43
- time_markers,
44
- time_reported_failure,
45
- time_spans,
46
- time_transcript_line
47
- } from "./chunk-CICKRHTB.js";
29
+ test_declared_logic
30
+ } from "./chunk-AO4TOV4V.js";
48
31
  import {
49
32
  agent_consultation_model,
50
33
  agent_role_profile,
51
34
  consultation_handoff,
52
35
  main_model_reader
53
- } from "./chunk-RQXECHAS.js";
36
+ } from "./chunk-SXABK6UV.js";
54
37
  import {
55
38
  agent_headless,
56
39
  bash_triggers,
40
+ delegation_policy,
41
+ duplicate_read_outcome,
42
+ duplicate_reads,
57
43
  gh_api,
58
44
  gh_author_association,
59
45
  gh_call_kind,
@@ -63,21 +49,31 @@ import {
63
49
  git_gh_issue_read,
64
50
  interactive_ask,
65
51
  interpreter_options,
52
+ investigation_reads,
53
+ issue_watch_diff,
66
54
  lane_child_marker,
55
+ lane_guard_policy,
67
56
  lane_registry,
68
57
  repo_party,
58
+ run_cut,
59
+ run_cut_handoff,
69
60
  run_headless,
70
61
  run_hold,
71
62
  run_liveness,
72
63
  shell_segments,
64
+ shell_tokens,
73
65
  token_shape
74
- } from "./chunk-LWD43Z3C.js";
66
+ } from "./chunk-5CUXGQT6.js";
75
67
  import {
76
68
  PACKAGE_JSON,
77
69
  agent_session_role,
78
70
  canonical_command,
79
71
  cost_blocks,
80
72
  find_package_directory,
73
+ hook_context,
74
+ hook_decision,
75
+ hook_tool_payload,
76
+ issue_citation,
81
77
  issue_cite,
82
78
  lane_reap,
83
79
  package_manifest,
@@ -86,10 +82,16 @@ import {
86
82
  run_event_stream,
87
83
  run_event_stream_emit,
88
84
  session_cite,
85
+ time_batch_guard,
86
+ time_hook_transcript,
89
87
  time_josh_names,
88
+ time_markers,
89
+ time_reported_failure,
90
90
  time_shell,
91
+ time_spans,
92
+ time_transcript_line,
91
93
  transcript_tail
92
- } from "./chunk-NUPVO7RI.js";
94
+ } from "./chunk-G5WSPYJ6.js";
93
95
  import {
94
96
  error_text
95
97
  } from "./chunk-LRD2ERRI.js";
@@ -412,8 +414,8 @@ async function review_refusal_here() {
412
414
  return await review_refusal(await git_command.repository_root());
413
415
  }
414
416
  async function assert_read_here() {
415
- const refusal4 = await unread_refusal(await git_command.repository_root());
416
- if (refusal4 !== void 0) throw new Error(refusal4);
417
+ const refusal6 = await unread_refusal(await git_command.repository_root());
418
+ if (refusal6 !== void 0) throw new Error(refusal6);
417
419
  }
418
420
  var issue_watch_gate = {
419
421
  assert_read_here,
@@ -548,7 +550,6 @@ var LINE_COUNT_PREFIXES = ["--lines=", "-n", "-"];
548
550
  var DIGITS = /^\d+$/u;
549
551
  var FROM_LINE = /^\+\d+$/u;
550
552
  var QUOTES = /^['"]|['"]$/gu;
551
- var WHITESPACE = /\s+/u;
552
553
  var ASSIGNMENT = /^\w+=/u;
553
554
  var ALWAYS_BROAD = /* @__PURE__ */ new Set(["find", "for", "node", "python", "python3"]);
554
555
  var ANALYSIS_PREFIX = "josh cost:";
@@ -621,7 +622,7 @@ var COMMAND_TESTS = /* @__PURE__ */ new Map([
621
622
  ["cat", cat_reads_past_cap]
622
623
  ]);
623
624
  function words_of(segment) {
624
- const words = segment.split(WHITESPACE).map((word) => word.replaceAll(QUOTES, ""));
625
+ const words = shell_tokens.words_of(segment).map((word) => word.text.replaceAll(QUOTES, ""));
625
626
  const start = words.findIndex((word) => !ASSIGNMENT.test(word));
626
627
  return start === -1 ? [] : words.slice(start);
627
628
  }
@@ -1155,6 +1156,36 @@ var ROW6 = {
1155
1156
  };
1156
1157
  var direct_git_status = { DIRECT_GIT_STATUS_REASON, ROW: ROW6, is_covered_status };
1157
1158
 
1159
+ // scripts/rules/direct-issue-comment.ts
1160
+ import path3 from "node:path";
1161
+
1162
+ // scripts/rules/standalone-gh-call.ts
1163
+ var WORD_SEPARATOR = " ";
1164
+ var PLAIN_WORD = /^[\w./=-]+$/u;
1165
+ function line_of(words) {
1166
+ return words.join(WORD_SEPARATOR);
1167
+ }
1168
+ function is_plain_word(word) {
1169
+ return PLAIN_WORD.test(word);
1170
+ }
1171
+ function split_issue(rest) {
1172
+ const issues = rest.filter((word) => issue_number_shape.is_issue_number(word));
1173
+ const [issue] = issues;
1174
+ const flags = line_of(rest.filter((word) => !issue_number_shape.is_issue_number(word)));
1175
+ return issue !== void 0 && issues.length === 1 ? { issue, flags } : void 0;
1176
+ }
1177
+ function call_of(line, lead) {
1178
+ const words = line.trim().split(WORD_SEPARATOR);
1179
+ const is_lead = line_of(words.slice(0, lead.length)) === line_of(lead);
1180
+ return is_lead && words.every((word) => is_plain_word(word)) ? split_issue(words.slice(lead.length)) : void 0;
1181
+ }
1182
+ function input_of(call, command_of2) {
1183
+ if (call.name !== cost_blocks.BASH_TOOL || !json_value.is_record(call.input)) return void 0;
1184
+ const command = command_of2(time_shell.bash_command(call.input));
1185
+ return command === void 0 ? void 0 : { ...call.input, command };
1186
+ }
1187
+ var standalone_gh_call = { call_of, input_of, is_plain_word, line_of };
1188
+
1158
1189
  // scripts/rules/direct-issue-comment.ts
1159
1190
  var ISSUE_GROUP = "issue";
1160
1191
  var COMMENT_ACTION = "comment";
@@ -1214,6 +1245,28 @@ function is_any_comment(command) {
1214
1245
  return is_direct_issue_comment(command) || is_josh_comment(command);
1215
1246
  }
1216
1247
  var DIRECT_ISSUE_COMMENT_REASON = "\u26D4 direct issue comment: `gh issue comment` (or a `gh api` write to `\u2026/issues/<N>/comments`) posts without the run marker, so the run reads its own comment as a person updating the issue \u2014 the review goes stale and `pnpm josh followup` refuses the merge. Post with `pnpm josh issue:comment <N> --body-file <path>` instead (`shell-body.md`). **This rule fires on every occurrence, not once per run.**";
1248
+ var COMMENT_WORDS = ["gh", ISSUE_GROUP, COMMENT_ACTION];
1249
+ var BODY_FILE_SPELLING = /^(?:(?:-F|--body-file) |--body-file=)(?<file>[\w./-]+)$/u;
1250
+ var STDIN_PATH = "-";
1251
+ var ISSUE_COMMENT_COMMAND = "pnpm josh issue:comment";
1252
+ var BODY_FILE_FLAG = "--body-file";
1253
+ function body_file_of(flags, cwd) {
1254
+ const file = BODY_FILE_SPELLING.exec(flags)?.groups?.["file"];
1255
+ return file === void 0 || file === STDIN_PATH ? void 0 : path3.resolve(cwd, file);
1256
+ }
1257
+ function issue_comment_of(comment, cwd) {
1258
+ const resolved2 = body_file_of(comment.flags, cwd);
1259
+ return resolved2 !== void 0 && standalone_gh_call.is_plain_word(resolved2) ? standalone_gh_call.line_of([ISSUE_COMMENT_COMMAND, comment.issue, BODY_FILE_FLAG, resolved2]) : void 0;
1260
+ }
1261
+ function issue_comment_command(command, context) {
1262
+ const comment = standalone_gh_call.call_of(command, COMMENT_WORDS);
1263
+ const post = comment === void 0 ? void 0 : issue_comment_of(comment, context.cwd);
1264
+ return post !== void 0 && is_direct_issue_comment_in(command.trim(), context) ? post : void 0;
1265
+ }
1266
+ function issue_comment_input(call, _tail, context) {
1267
+ return standalone_gh_call.input_of(call, (command) => issue_comment_command(command, context));
1268
+ }
1269
+ var ISSUE_COMMENT_NOTE = "\u21BB direct issue comment: this `gh issue comment <N> --body-file <path>` ran as `pnpm josh issue:comment <N> --body-file <path>`, which posts the run marker (`shell-body.md`).";
1217
1270
  var ROW7 = {
1218
1271
  id: "direct-issue-comment",
1219
1272
  is_trigger: bash_triggers.on_bash_command(is_direct_issue_comment_in),
@@ -1221,14 +1274,22 @@ var ROW7 = {
1221
1274
  decide: () => true,
1222
1275
  keeps: bash_triggers.on_bash_command(is_josh_comment),
1223
1276
  reaches: bash_triggers.on_bash_command(is_any_comment),
1277
+ rewrite: issue_comment_input,
1278
+ rewrite_note: ISSUE_COMMENT_NOTE,
1224
1279
  about: {
1225
1280
  title: "Direct issue comment",
1226
1281
  topic: "`shell-body.md`",
1227
- fires: "a comment to the checkout's own repository outside `josh issue:comment` (`gh issue comment` with no `--repo`, or a `gh api` write to `repos/<owner>/<r>/issues/<N>/comments` whose owner is the `{owner}` placeholder or the checkout's own `owner/repo` spelled out); it points at `pnpm josh issue:comment`. Every occurrence",
1282
+ fires: "a comment to the checkout's own repository outside `josh issue:comment` (`gh issue comment` with no `--repo`, or a `gh api` write to `repos/<owner>/<r>/issues/<N>/comments` whose owner is the `{owner}` placeholder or the checkout's own `owner/repo` spelled out); it points at `pnpm josh issue:comment`. A line that is only `gh issue comment <N>` with one `--body-file` / `-F <path>` is rewritten to `pnpm josh issue:comment <N> --body-file <path>`; every other form is refused, every occurrence",
1228
1283
  quiet: "`pnpm josh issue:comment`, or reading the comments \u2014 the path that writes the run marker"
1229
1284
  }
1230
1285
  };
1231
- var direct_issue_comment = { DIRECT_ISSUE_COMMENT_REASON, ROW: ROW7, is_direct_issue_comment };
1286
+ var direct_issue_comment = {
1287
+ DIRECT_ISSUE_COMMENT_REASON,
1288
+ ISSUE_COMMENT_NOTE,
1289
+ ROW: ROW7,
1290
+ is_direct_issue_comment,
1291
+ issue_comment_command
1292
+ };
1232
1293
 
1233
1294
  // scripts/rules/prior-comment-read.ts
1234
1295
  var ISSUE_PATH_NUMBER = /issues\/(\d+)/gu;
@@ -1321,9 +1382,9 @@ function rewritable_path(command) {
1321
1382
  }
1322
1383
  function comments_command(command) {
1323
1384
  if (!is_body_only_issue_read(command)) return void 0;
1324
- const path8 = rewritable_path(command);
1325
- if (path8 === void 0) return void 0;
1326
- return `gh api --paginate ${path8}/comments --jq ${COMMENTS_JQ}
1385
+ const path9 = rewritable_path(command);
1386
+ if (path9 === void 0) return void 0;
1387
+ return `gh api --paginate ${path9}/comments --jq ${COMMENTS_JQ}
1327
1388
  ${command}`;
1328
1389
  }
1329
1390
  function comments_input(call, tail) {
@@ -1451,6 +1512,28 @@ function is_josh_read(command) {
1451
1512
  function is_any_read(command) {
1452
1513
  return is_direct_issue_read(command) || is_josh_read(command);
1453
1514
  }
1515
+ var VIEW_WORDS = ["gh", ISSUE_GROUP2, VIEW_ACTION];
1516
+ var REPO_SPELLING = /^(?:(?:-R|--repo) |--repo=)(?<repo>[\w.-]+\/[\w.-]+)$/u;
1517
+ var ISSUE_READ_COMMAND2 = "pnpm josh issue:read";
1518
+ var REPO_FLAG = "--repo";
1519
+ function carried_repo(flags) {
1520
+ if (flags === "") return [];
1521
+ const repo = REPO_SPELLING.exec(flags)?.groups?.["repo"];
1522
+ return repo === void 0 ? void 0 : [REPO_FLAG, repo];
1523
+ }
1524
+ function issue_read_of(view) {
1525
+ const repo = carried_repo(view.flags);
1526
+ return repo === void 0 ? void 0 : standalone_gh_call.line_of([ISSUE_READ_COMMAND2, view.issue, ...repo]);
1527
+ }
1528
+ function issue_read_command(command) {
1529
+ const view = standalone_gh_call.call_of(command, VIEW_WORDS);
1530
+ const read2 = view === void 0 ? void 0 : issue_read_of(view);
1531
+ return read2 !== void 0 && is_direct_issue_read(command.trim()) ? read2 : void 0;
1532
+ }
1533
+ function issue_read_input(call) {
1534
+ return standalone_gh_call.input_of(call, issue_read_command);
1535
+ }
1536
+ var ISSUE_READ_NOTE = "\u21BB direct issue read: this `gh issue view <N>` ran as `pnpm josh issue:read <N>`, which withholds a comment from an author without write access (`issue-comments.md`).";
1454
1537
  var DIRECT_ISSUE_READ_REASON = "\u26D4 direct issue read: pnpm josh issue:read <N>\nRun that in place of this read of `\u2026/issues/<N>`, its comments or its timeline (`gh api` or `gh issue view`) \u2014 it withholds a comment from an author without write access and marks an untrusted body as a report, which a raw read prints whole as if it were an instruction (`issue-comments.md`). **This rule fires on every occurrence, not once per run.**";
1455
1538
  var ROW9 = {
1456
1539
  id: "direct-issue-read",
@@ -1459,14 +1542,22 @@ var ROW9 = {
1459
1542
  decide: () => true,
1460
1543
  keeps: bash_triggers.on_bash_command(is_josh_read),
1461
1544
  reaches: bash_triggers.on_bash_command(is_any_read),
1545
+ rewrite: issue_read_input,
1546
+ rewrite_note: ISSUE_READ_NOTE,
1462
1547
  about: {
1463
1548
  title: "Direct issue read",
1464
1549
  topic: "`issue-comments.md`",
1465
- fires: "a `gh api` GET of the checkout's own `repos/<o>/<r>/issues/<N>`, `\u2026/comments` or `\u2026/timeline` (the `{owner}` placeholder or the origin spelled out), or a `gh issue view <N>` of it, with no projection or one naming the body (or, for the view, the comments); it points at `pnpm josh issue:read`. Every occurrence",
1550
+ fires: "a `gh api` GET of the checkout's own `repos/<o>/<r>/issues/<N>`, `\u2026/comments` or `\u2026/timeline` (the `{owner}` placeholder or the origin spelled out), or a `gh issue view <N>` of it, with no projection or one naming the body (or, for the view, the comments); it points at `pnpm josh issue:read`. A line that is only `gh issue view <N>`, with at most `-R` / `--repo <owner>/<repo>`, is rewritten to `pnpm josh issue:read <N>`; every other form is refused, every occurrence",
1466
1551
  quiet: "`pnpm josh issue:read` / `run:prep` / `run:entry`, a `--jq` / `--json` projection without the body or the comments, `gh issue view --web`, or another repository named outright"
1467
1552
  }
1468
1553
  };
1469
- var direct_issue_read = { DIRECT_ISSUE_READ_REASON, ROW: ROW9, is_direct_issue_read };
1554
+ var direct_issue_read = {
1555
+ DIRECT_ISSUE_READ_REASON,
1556
+ ISSUE_READ_NOTE,
1557
+ ROW: ROW9,
1558
+ is_direct_issue_read,
1559
+ issue_read_command
1560
+ };
1470
1561
 
1471
1562
  // scripts/rules/direct-vitest-run.ts
1472
1563
  var VITEST_PROGRAM = "vitest";
@@ -1942,10 +2033,10 @@ function is_interpreter_write(segment, body) {
1942
2033
  }
1943
2034
  var PERL = "perl";
1944
2035
  var PERL_IN_PLACE = /^-[A-Za-z0-9]*i/u;
1945
- var WHITESPACE2 = /\s+/u;
2036
+ var WHITESPACE = /\s+/u;
1946
2037
  function is_in_place_perl(segment) {
1947
2038
  if (time_shell.leading_word(segment) !== PERL) return false;
1948
- return segment.split(WHITESPACE2).some((word) => PERL_IN_PLACE.test(word));
2039
+ return segment.split(WHITESPACE).some((word) => PERL_IN_PLACE.test(word));
1949
2040
  }
1950
2041
  function has_body_interpreter(line) {
1951
2042
  return shell_segments.segments_of(line.text).some((segment) => is_interpreter_write(segment, line.body) || is_in_place_perl(segment));
@@ -2237,7 +2328,7 @@ var git_force = {
2237
2328
  };
2238
2329
 
2239
2330
  // scripts/rules/implementation-cut.ts
2240
- import path3 from "node:path";
2331
+ import path4 from "node:path";
2241
2332
 
2242
2333
  // scripts/run/cut/run-cut-decline.ts
2243
2334
  var DECLINE_PREFIX = "josh-run-cut-decline-";
@@ -2363,7 +2454,7 @@ function environment_for(transcript, source) {
2363
2454
  }
2364
2455
  return {
2365
2456
  ...source,
2366
- [agent_session_environment.SESSION_ID_KEY]: path3.basename(transcript, ".jsonl")
2457
+ [agent_session_environment.SESSION_ID_KEY]: path4.basename(transcript, ".jsonl")
2367
2458
  };
2368
2459
  }
2369
2460
  function session_verdict(transcript, directory, source) {
@@ -2410,8 +2501,8 @@ function file_path_of(call) {
2410
2501
  return typeof value === "string" ? value : "";
2411
2502
  }
2412
2503
  function is_handoff_write(call, directory, issue) {
2413
- const handoff = path3.resolve(directory, run_cut_handoff.handoff_path_of(issue));
2414
- return path3.resolve(directory, file_path_of(call)) === handoff;
2504
+ const handoff = path4.resolve(directory, run_cut_handoff.handoff_path_of(issue));
2505
+ return path4.resolve(directory, file_path_of(call)) === handoff;
2415
2506
  }
2416
2507
  function refusable_issue(call, state) {
2417
2508
  const issue = uncut_run_issue(state);
@@ -3565,17 +3656,17 @@ function word_before(segment, call) {
3565
3656
  const words = git_argv.words_of(segment);
3566
3657
  return words[words.length - call.args.length - BEFORE_PROGRAM] ?? "";
3567
3658
  }
3568
- function call_of(segment) {
3659
+ function call_of2(segment) {
3569
3660
  const call = git_argv.program_of(segment);
3570
3661
  if (call === void 0) return void 0;
3571
3662
  const is_lookup = LOOKUP_FLAGS.has(call.name) && plain_name(word_before(segment, call)) === LOOKUP_WRAPPER;
3572
3663
  return { name: is_lookup ? LOOKUP_WRAPPER : plain_name(call.name), args: call.args };
3573
3664
  }
3574
3665
  function resolved_call(segment) {
3575
- let call = call_of(segment);
3666
+ let call = call_of2(segment);
3576
3667
  let inner = inner_words_of(call);
3577
3668
  while (inner !== void 0) {
3578
- call = call_of(inner.join(" "));
3669
+ call = call_of2(inner.join(" "));
3579
3670
  inner = inner_words_of(call);
3580
3671
  }
3581
3672
  return call;
@@ -4252,11 +4343,11 @@ var ROW31 = {
4252
4343
  var index_guard = { INDEX_MUTATION_REASON, ROW: ROW31, is_index_mutation };
4253
4344
 
4254
4345
  // scripts/rules/protected-files.ts
4255
- import path5 from "node:path";
4346
+ import path6 from "node:path";
4256
4347
 
4257
4348
  // scripts/rules/secret-paths.ts
4258
4349
  import os3 from "node:os";
4259
- import path4 from "node:path";
4350
+ import path5 from "node:path";
4260
4351
  var TOKEN_QUOTES = /["']/gu;
4261
4352
  var BRACED_VARIABLE = /\$\{(\w+)\}/gu;
4262
4353
  var BACKSLASH = /\\/gu;
@@ -4273,7 +4364,7 @@ var HOME_PREFIXES = ["~/", "$HOME/"];
4273
4364
  var HOME_SECRET_FILES = /* @__PURE__ */ new Set([".netrc", ".curlrc", ".npmrc"]);
4274
4365
  var HOME_SECRET_DIRECTORIES = [".ssh", ".config/gh"];
4275
4366
  function is_environment_file(token) {
4276
- const name = path4.basename(token);
4367
+ const name = path5.basename(token);
4277
4368
  if (TRACKED_VARIANTS.has(name)) return false;
4278
4369
  return SECRET_FILES.has(name) || name.startsWith(ENVIRONMENT_VARIANT_PREFIX);
4279
4370
  }
@@ -4298,7 +4389,7 @@ function is_secret_token(token) {
4298
4389
  function spellings_of(word) {
4299
4390
  const token = word.replaceAll(TOKEN_QUOTES, "").replaceAll(BRACED_VARIABLE, "$$$1");
4300
4391
  return [token.replaceAll(BACKSLASH, ""), token.replaceAll(BACKSLASH, "/")].map(
4301
- (spelling) => path4.posix.normalize(spelling)
4392
+ (spelling) => path5.posix.normalize(spelling)
4302
4393
  );
4303
4394
  }
4304
4395
  function is_secret_path(word) {
@@ -4311,7 +4402,7 @@ var READ_MARK = "read";
4311
4402
  var WRITE_MARK = "write";
4312
4403
  var READ_OPERATOR = "<";
4313
4404
  var REDIRECT = />\||[<>]/gu;
4314
- var WHITESPACE3 = /\s+/u;
4405
+ var PIECE_END = "\0";
4315
4406
  var NEXT5 = 1;
4316
4407
  var ANY_MARK = /* @__PURE__ */ new Set([READ_MARK, WRITE_MARK]);
4317
4408
  var { SHELLS: SHELLS2 } = nested_commands;
@@ -4322,13 +4413,16 @@ function redirect_marks_of(segment, program) {
4322
4413
  function mark_of(operator) {
4323
4414
  return operator === READ_OPERATOR ? READ_MARK : WRITE_MARK;
4324
4415
  }
4325
- function marked_words(segment, program) {
4326
- const marks = redirect_marks_of(segment, program);
4327
- const spaced = segment.replaceAll(
4416
+ function marked_pieces(word, marks) {
4417
+ const pieced = word.text.replaceAll(
4328
4418
  REDIRECT,
4329
- (operator, offset) => marks.startsWith(operator, offset) ? ` ${mark_of(operator)} ` : operator
4419
+ (operator, offset) => marks.startsWith(operator, word.begin + offset) ? `${PIECE_END}${mark_of(operator)}${PIECE_END}` : operator
4330
4420
  );
4331
- return spaced.split(WHITESPACE3).filter((word) => word !== "");
4421
+ return pieced.split(PIECE_END).filter((piece) => piece !== "");
4422
+ }
4423
+ function marked_words(segment, program) {
4424
+ const marks = redirect_marks_of(segment, program);
4425
+ return shell_tokens.words_of(segment).flatMap((word) => marked_pieces(word, marks));
4332
4426
  }
4333
4427
  function targets_of(segment, program) {
4334
4428
  const words = marked_words(segment, program);
@@ -4342,7 +4436,7 @@ var GREP_TOOL = "Grep";
4342
4436
  var FILE_TOOLS = /* @__PURE__ */ new Set([READ_TOOL2, GREP_TOOL]);
4343
4437
  var { is_edit_tool: is_edit_tool4 } = edit_tool;
4344
4438
  var { is_secret_path: is_secret_path2 } = secret_paths;
4345
- var SETTINGS_FILE = path5.join(".claude", "settings.json");
4439
+ var SETTINGS_FILE = path6.join(".claude", "settings.json");
4346
4440
  var SHELL_PROGRAMS = /* @__PURE__ */ new Set([
4347
4441
  "cp",
4348
4442
  "install",
@@ -4407,9 +4501,9 @@ function is_secret_access(call) {
4407
4501
  }
4408
4502
  function is_consumer_settings_edit(call, is_kit_consumer) {
4409
4503
  if (!is_edit_tool4(call.name)) return false;
4410
- const file_path = path5.resolve(file_path_of2(call));
4411
- if (!file_path.endsWith(`${path5.sep}${SETTINGS_FILE}`)) return false;
4412
- return is_kit_consumer(path5.dirname(path5.dirname(file_path)));
4504
+ const file_path = path6.resolve(file_path_of2(call));
4505
+ if (!file_path.endsWith(`${path6.sep}${SETTINGS_FILE}`)) return false;
4506
+ return is_kit_consumer(path6.dirname(path6.dirname(file_path)));
4413
4507
  }
4414
4508
  function is_protected_file_call(call, is_kit_consumer = doctor_consumer.is_kit_consumer) {
4415
4509
  return is_secret_access(call) || is_consumer_settings_edit(call, is_kit_consumer);
@@ -5061,15 +5155,17 @@ var CHECK_FLAG = /\s--check\b/u;
5061
5155
  var QUOTED = /"[^"]*"|'[^']*'/gu;
5062
5156
  var UNASKED_FILING_REASON = "\u26D4 unasked filing: this interactive session files an Issue only on the person\u2019s explicit instruction (\u300C\u8D77\u7968\u300D, \u201Cfile an issue\u201D, or a command whose procedure files, such as `kickoff new`). Propose the Issue in the reply and file it once they confirm. It fires on every occurrence (`.claude/skills/workflow-commands/observation-filing.md`).";
5063
5157
  function is_instructed(prompt) {
5064
- const trimmed = prompt.trim();
5158
+ const trimmed = issue_citation.prose_lines(prompt).join("\n").replaceAll(/(?<!`)(`+)(?!`)[\s\S]*?(?<!`)\1(?!`)/gu, "").replaceAll(/「[^「」\n]*」|『[^『』\n]*』|"[^"\n]*"|'[^'\n]*'/gu, "").trim();
5065
5159
  return FILING_WORDS.some((pattern) => pattern.test(trimmed));
5066
5160
  }
5067
5161
  function reply_text(line) {
5068
- const parsed = ASSISTANT_LINE_SCHEMA.safeParse(json_value.parse_or_undefined(line));
5162
+ const parsed = ASSISTANT_LINE_SCHEMA.safeParse(
5163
+ json_value.parse_or_undefined(codex_prompt.normalize(line))
5164
+ );
5069
5165
  return parsed.success ? time_reported_failure.result_text(parsed.data.message.content) : "";
5070
5166
  }
5071
5167
  function is_person_line(line) {
5072
- return turn_filings.is_prompt_line(line) && last_prompt.person_prompt(line) !== void 0;
5168
+ return last_prompt.person_prompt(line) !== void 0;
5073
5169
  }
5074
5170
  function reply_before_prompt(tail) {
5075
5171
  const lines = tail.split("\n");
@@ -5346,6 +5442,7 @@ var HOLD_RELEASE = "the hook releases the hold itself; it blocks only when that
5346
5442
  var FILING_OFFER = "the filing needs a title and a body only the model can write";
5347
5443
  var CONCISE_REPLY = "the shorter reply is prose only the model can write";
5348
5444
  var NARROW_ENOUGH = "which reading is narrow enough to keep is the author\u2019s call";
5445
+ var BODY_TO_FILE = "the body moves to a file the call does not name";
5349
5446
  function rewrite() {
5350
5447
  return { remedy: "rewrite", why: REWRITTEN };
5351
5448
  }
@@ -5371,16 +5468,21 @@ var GUARD_REMEDIES = {
5371
5468
  "shell-body": judgment(
5372
5469
  "which part of the body the shell was meant to expand is the author's, not the hook's"
5373
5470
  ),
5374
- "raw-field-body": judgment("the body moves to a file the call does not name"),
5471
+ "raw-field-body": judgment(BODY_TO_FILE),
5375
5472
  "credential-body": judgment(
5376
5473
  "which text is the credential, and what replaces it, is the author\u2019s"
5377
5474
  ),
5378
5475
  "rule-body": judgment("a trigger-plus-pointer line is written, not derived"),
5379
5476
  "direct-filing": judgment(ANOTHER_COMMAND),
5380
5477
  "unasked-filing": judgment(NO_RUN),
5381
- "direct-issue-comment": judgment(ANOTHER_COMMAND),
5382
- "direct-issue-read": judgment(ANOTHER_COMMAND),
5383
- "direct-git-status": judgment(ANOTHER_COMMAND),
5478
+ // A standalone `gh issue comment <N> --body-file <path>` run as `pnpm josh issue:comment`; an inline
5479
+ // `--body` is refused, since `issue:comment` trims it and expands `\n` (joshuafolkken/kit#7330).
5480
+ "direct-issue-comment": rewrite(),
5481
+ "direct-issue-read": rewrite(),
5482
+ // a standalone `gh issue view <N>` run as `pnpm josh issue:read <N>`
5483
+ "direct-git-status": judgment(
5484
+ "the refusal is spent once per run and its reissue passes, so a rewrite saves at most one round trip while trading the long-format listing the call asked for for porcelain"
5485
+ ),
5384
5486
  "direct-vitest-run": judgment(ANOTHER_COMMAND),
5385
5487
  "direct-pr-create": judgment(ANOTHER_COMMAND),
5386
5488
  "pr-merge": judgment(ANOTHER_COMMAND),
@@ -5952,7 +6054,7 @@ var direct_gh_usage = { record: record2 };
5952
6054
  // scripts/hooks/hook-demoted.ts
5953
6055
  import { readFileSync as readFileSync3 } from "node:fs";
5954
6056
  import { mkdir, writeFile } from "node:fs/promises";
5955
- import path6 from "node:path";
6057
+ import path7 from "node:path";
5956
6058
  var DEMOTED_FILE = ".josh/hook-demoted.json";
5957
6059
  var NOTICE_HEADER = "\u2139 Demoted rule \u2014 this call ran; do not reissue it. The refusal it would have given:\n";
5958
6060
  var INDENT = " ";
@@ -5970,7 +6072,7 @@ function rules(environment = process.env) {
5970
6072
  async function write_rules(demoted, file = DEMOTED_FILE) {
5971
6073
  const sorted = [...demoted].toSorted((left, right) => left.localeCompare(right));
5972
6074
  const body = JSON.stringify({ rules: sorted }, void 0, INDENT);
5973
- await mkdir(path6.dirname(file), { recursive: true });
6075
+ await mkdir(path7.dirname(file), { recursive: true });
5974
6076
  await writeFile(file, `${body}
5975
6077
  `);
5976
6078
  }
@@ -5999,7 +6101,7 @@ var hook_demoted = {
5999
6101
  };
6000
6102
 
6001
6103
  // scripts/hooks/implementation-shell.ts
6002
- import path7 from "node:path";
6104
+ import path8 from "node:path";
6003
6105
 
6004
6106
  // scripts/josh/josh-read-only.ts
6005
6107
  var HELP_COMMANDS = /* @__PURE__ */ new Set(["help", "--help", "-h"]);
@@ -6027,7 +6129,17 @@ function refusal(args) {
6027
6129
  }
6028
6130
  var josh_read_only = { ALL_FLAG, entry_of: entry_of2, is_help_request, refusal };
6029
6131
 
6030
- // scripts/hooks/implementation-shell-deny.ts
6132
+ // scripts/hooks/implementation-shell-deny-expansion.ts
6133
+ var DYNAMIC = /[$`]/u;
6134
+ function is_dynamic(word) {
6135
+ return DYNAMIC.test(word);
6136
+ }
6137
+ function refusal2(program, word) {
6138
+ return `\`${program} ${word}\`, an expansion that may spell a write`;
6139
+ }
6140
+ var implementation_shell_deny_expansion = { is_dynamic, refusal: refusal2 };
6141
+
6142
+ // scripts/hooks/implementation-shell-deny-git.ts
6031
6143
  var GIT_WRITES = /* @__PURE__ */ new Set([
6032
6144
  "add",
6033
6145
  "am",
@@ -6075,11 +6187,7 @@ var LIST_MODE = /^(?:-l$|--list$|-n\d*$|--contains|--no-contains|--points-at|--m
6075
6187
  var LIST_VALUE_FLAGS = /* @__PURE__ */ new Set(["--sort", "--format"]);
6076
6188
  var REFLOG_WRITES = /* @__PURE__ */ new Set(["expire", "delete"]);
6077
6189
  var GIT_WRITE_FLAGS = /^-c$|^--(?:config-env|exec-path|output|ext-diff|textconv)/u;
6078
- var DYNAMIC = /[$`]/u;
6079
6190
  var QUOTES5 = /['"\\]/gu;
6080
- function is_dynamic(word) {
6081
- return DYNAMIC.test(word);
6082
- }
6083
6191
  function is_branch_change(argument) {
6084
6192
  return BRANCH_CHANGE.test(argument) || git_argv.short_cluster_has(argument, BRANCH_CHANGE_LETTERS);
6085
6193
  }
@@ -6101,6 +6209,32 @@ var GIT_READ_FORMS = /* @__PURE__ */ new Map([
6101
6209
  ["tag", is_listing],
6102
6210
  ["reflog", (args) => !REFLOG_WRITES.has(args[0] ?? "")]
6103
6211
  ]);
6212
+ function is_git_write(subcommand, args) {
6213
+ if (GIT_WRITES.has(subcommand)) return true;
6214
+ const read_form = GIT_READ_FORMS.get(subcommand);
6215
+ if (read_form === void 0) return false;
6216
+ return args.some((argument) => implementation_shell_deny_expansion.is_dynamic(argument)) || !read_form(args);
6217
+ }
6218
+ function parsed_git(segment) {
6219
+ return git_argv.parse(segment) ?? git_argv.parse(segment.replaceAll(QUOTES5, ""));
6220
+ }
6221
+ function subcommand_refusal(segment) {
6222
+ const call = parsed_git(segment);
6223
+ if (call?.subcommand === void 0) return void 0;
6224
+ if (implementation_shell_deny_expansion.is_dynamic(call.subcommand)) return implementation_shell_deny_expansion.refusal("git", call.subcommand);
6225
+ const subcommand = call.subcommand.replaceAll(QUOTES5, "");
6226
+ const args = call.args.map((argument) => argument.replaceAll(QUOTES5, ""));
6227
+ return is_git_write(subcommand, args) ? `\`git ${subcommand}\`, a git write` : void 0;
6228
+ }
6229
+ function refusal3(segment, args) {
6230
+ if (args.some((argument) => GIT_WRITE_FLAGS.test(argument))) {
6231
+ return "a git option that rewrites its configuration, runs a program or writes a file";
6232
+ }
6233
+ return subcommand_refusal(segment);
6234
+ }
6235
+ var implementation_shell_deny_git = { refusal: refusal3 };
6236
+
6237
+ // scripts/hooks/implementation-shell-deny.ts
6104
6238
  var GH_READS = /* @__PURE__ */ new Set([
6105
6239
  "checks",
6106
6240
  "code",
@@ -6210,48 +6344,22 @@ var JOSH_SHARED_WRITES = /* @__PURE__ */ new Set([
6210
6344
  "sync",
6211
6345
  "uninstall"
6212
6346
  ]);
6213
- function expansion_refusal(program, word) {
6214
- return `\`${program} ${word}\`, an expansion that may spell a write`;
6215
- }
6216
- function is_git_write(subcommand, args) {
6217
- if (GIT_WRITES.has(subcommand)) return true;
6218
- const read_form = GIT_READ_FORMS.get(subcommand);
6219
- if (read_form === void 0) return false;
6220
- return args.some((argument) => is_dynamic(argument)) || !read_form(args);
6221
- }
6222
- function parsed_git(segment) {
6223
- return git_argv.parse(segment) ?? git_argv.parse(segment.replaceAll(QUOTES5, ""));
6224
- }
6225
- function subcommand_refusal(segment) {
6226
- const call = parsed_git(segment);
6227
- if (call?.subcommand === void 0) return void 0;
6228
- if (is_dynamic(call.subcommand)) return expansion_refusal("git", call.subcommand);
6229
- const subcommand = call.subcommand.replaceAll(QUOTES5, "");
6230
- const args = call.args.map((argument) => argument.replaceAll(QUOTES5, ""));
6231
- return is_git_write(subcommand, args) ? `\`git ${subcommand}\`, a git write` : void 0;
6232
- }
6233
- function git_refusal(segment, args) {
6234
- if (args.some((argument) => GIT_WRITE_FLAGS.test(argument))) {
6235
- return "a git option that rewrites its configuration, runs a program or writes a file";
6236
- }
6237
- return subcommand_refusal(segment);
6238
- }
6239
6347
  function is_gh_api_write(args) {
6240
6348
  if (args.includes("graphql")) return args.some((argument) => GRAPHQL_MUTATION2.test(argument));
6241
6349
  return gh_api.is_write(["gh", ...args].join(" "));
6242
6350
  }
6243
6351
  function is_gh_verb(argument) {
6244
- return GH_WRITES.has(argument) || GH_READS.has(argument) || is_dynamic(argument);
6352
+ return GH_WRITES.has(argument) || GH_READS.has(argument) || implementation_shell_deny_expansion.is_dynamic(argument);
6245
6353
  }
6246
6354
  function verb_refusal(group, args) {
6247
6355
  const verb = args.slice(1).find((argument) => is_gh_verb(argument));
6248
6356
  if (verb === void 0 || GH_READS.has(verb)) return void 0;
6249
- return is_dynamic(verb) ? expansion_refusal(`gh ${group}`, verb) : `\`gh ${group} ${verb}\`, a GitHub write`;
6357
+ return implementation_shell_deny_expansion.is_dynamic(verb) ? implementation_shell_deny_expansion.refusal(`gh ${group}`, verb) : `\`gh ${group} ${verb}\`, a GitHub write`;
6250
6358
  }
6251
6359
  function gh_refusal(args) {
6252
6360
  const group = args[0] ?? "";
6253
6361
  if (group === "api") return is_gh_api_write(args) ? "a `gh api` call other than GET" : void 0;
6254
- return is_dynamic(group) ? expansion_refusal("gh", group) : verb_refusal(group, args);
6362
+ return implementation_shell_deny_expansion.is_dynamic(group) ? implementation_shell_deny_expansion.refusal("gh", group) : verb_refusal(group, args);
6255
6363
  }
6256
6364
  function is_flag(argument) {
6257
6365
  return argument.startsWith("-");
@@ -6268,7 +6376,7 @@ function package_actions(call) {
6268
6376
  return end === -1 && call.name === "yarn" ? [...actions, "install"] : actions;
6269
6377
  }
6270
6378
  function action_refusal(manager, action) {
6271
- if (is_dynamic(action)) return expansion_refusal(manager, action);
6379
+ if (implementation_shell_deny_expansion.is_dynamic(action)) return implementation_shell_deny_expansion.refusal(manager, action);
6272
6380
  return PACKAGE_WRITES.has(action) ? `\`${action}\`, a dependency change` : void 0;
6273
6381
  }
6274
6382
  function package_refusal(call) {
@@ -6276,19 +6384,19 @@ function package_refusal(call) {
6276
6384
  }
6277
6385
  function josh_refusal(args) {
6278
6386
  const command = canonical_command(args[0] ?? "");
6279
- if (is_dynamic(command)) return expansion_refusal("josh", command);
6387
+ if (implementation_shell_deny_expansion.is_dynamic(command)) return implementation_shell_deny_expansion.refusal("josh", command);
6280
6388
  if (!JOSH_SHARED_WRITES.has(command)) return void 0;
6281
6389
  const rule = josh_read_only.refusal(args);
6282
6390
  return rule === void 0 ? void 0 : `\`josh ${command}\`, a shared-state write: ${rule}`;
6283
6391
  }
6284
- function refusal2(segment, call) {
6285
- if (is_dynamic(call.name)) return `\`${call.name}\`, a program an expansion names`;
6286
- if (call.name === "git") return git_refusal(segment, call.args);
6392
+ function refusal4(segment, call) {
6393
+ if (implementation_shell_deny_expansion.is_dynamic(call.name)) return `\`${call.name}\`, a program an expansion names`;
6394
+ if (call.name === "git") return implementation_shell_deny_git.refusal(segment, call.args);
6287
6395
  if (call.name === "gh") return gh_refusal(call.args);
6288
6396
  if (call.name === "josh") return josh_refusal(call.args);
6289
6397
  return package_refusal(call);
6290
6398
  }
6291
- var implementation_shell_deny = { refusal: refusal2 };
6399
+ var implementation_shell_deny = { refusal: refusal4 };
6292
6400
 
6293
6401
  // scripts/hooks/implementation-shell-nested.ts
6294
6402
  var SUBSTITUTION3 = /\$\(([^()]*)\)|`([^`]*)`|[<>]\(([^()]*)\)/u;
@@ -6410,8 +6518,21 @@ var QUOTES6 = /^['"]|['"]$/gu;
6410
6518
  var DYNAMIC_PATH = /[$`*?{}\\]/u;
6411
6519
  var COMPOUND_HEAD = /^\s*(?:[({!]\s*|(?:if|then|else|elif|while|until|do)\s+)+/u;
6412
6520
  var COMPOUND_CLOSERS = /* @__PURE__ */ new Set([")", "}", " ", " ", "\n"]);
6413
- var KEYWORDS = /* @__PURE__ */ new Set(["for", "do", "done", "then", "else", "fi", "esac"]);
6414
- var UNREAD_BODY = /^(?:case|select|function)\s|^[\w.:-]+\s*\(\s*\)/u;
6521
+ var KEYWORDS = /* @__PURE__ */ new Set([
6522
+ "for",
6523
+ "do",
6524
+ "done",
6525
+ "then",
6526
+ "else",
6527
+ "fi",
6528
+ "case",
6529
+ "select",
6530
+ "function",
6531
+ "esac"
6532
+ ]);
6533
+ var FUNCTION_START = /^(?:function\s|[\w.:-]+\s*\(\s*\))/u;
6534
+ var FUNCTION_HEAD = /^(?:function\s+)?[\w.:-]+(?:\s*\()?$/u;
6535
+ var UNREAD_ARMS = [/^case\s[\s\S]*\)/u, /^[^\s$`]*\)/u];
6415
6536
  var ARGUMENT_QUOTES = /['"\\]/gu;
6416
6537
  var TIME_PROGRAM = /(?:^|\/)time$/u;
6417
6538
  var TIME_WRITE = /^-(?:[A-Za-z]*o|-o)/u;
@@ -6459,8 +6580,8 @@ function written_args(call) {
6459
6580
  return written.map((argument) => argument.slice(argument.indexOf("=") + 1));
6460
6581
  }
6461
6582
  function is_outside(target, root) {
6462
- const relative = path7.relative(root, path7.resolve(root, target.replaceAll(QUOTES6, "")));
6463
- return relative.startsWith("..") || path7.isAbsolute(relative);
6583
+ const relative = path8.relative(root, path8.resolve(root, target.replaceAll(QUOTES6, "")));
6584
+ return relative.startsWith("..") || path8.isAbsolute(relative);
6464
6585
  }
6465
6586
  function file_write_refusal(call, root) {
6466
6587
  return write_args_are_unsafe(call.args, root) ? `\`${call.name}\` to a runtime path` : void 0;
@@ -6490,26 +6611,30 @@ function body_of(segment) {
6490
6611
  while (end > 0 && COMPOUND_CLOSERS.has(body.charAt(end - 1))) end -= 1;
6491
6612
  return body.slice(0, end);
6492
6613
  }
6493
- function call_of2(segment) {
6614
+ function call_of3(segment) {
6494
6615
  const body = body_of(segment);
6495
6616
  if (KEYWORDS.has(git_argv.words_of(body)[0] ?? "")) return void 0;
6496
6617
  return git_argv.program_of(body);
6497
6618
  }
6498
6619
  function command_refusal(segment, root) {
6499
- const call = call_of2(segment);
6620
+ const call = call_of3(segment);
6500
6621
  return call === void 0 ? void 0 : call_refusal(body_of(segment), call, root);
6501
6622
  }
6623
+ function is_unread_body(body) {
6624
+ if (FUNCTION_START.test(body)) return !FUNCTION_HEAD.test(body);
6625
+ return UNREAD_ARMS.some((pattern) => pattern.test(body));
6626
+ }
6502
6627
  function segment_refusal(segment, root) {
6503
6628
  if (wrapper_writes(segment)) return "a time output file";
6504
- if (UNREAD_BODY.test(body_of(segment))) return "a `case` arm or function body";
6629
+ if (is_unread_body(body_of(segment))) return "a `case` arm or function body";
6505
6630
  const target = redirected_paths(segment).find((redirected) => unsafe_path(redirected, root));
6506
6631
  return target === void 0 ? command_refusal(segment, root) : `redirect to \`${target}\``;
6507
6632
  }
6508
6633
  function is_cd(segment) {
6509
- return call_of2(segment)?.name === "cd";
6634
+ return call_of3(segment)?.name === "cd";
6510
6635
  }
6511
6636
  function is_write(segment) {
6512
- const call = call_of2(segment);
6637
+ const call = call_of3(segment);
6513
6638
  if (call !== void 0 && (FILE_PROGRAMS.has(call.name) || writes_elsewhere(call))) return true;
6514
6639
  return redirected_paths(segment).some((redirected) => redirected !== "/dev/null");
6515
6640
  }
@@ -6520,7 +6645,7 @@ function segments_refusal(segments, root) {
6520
6645
  }
6521
6646
  function nested_lines(line, segments) {
6522
6647
  const launched = segments.flatMap((segment) => {
6523
- const call = call_of2(segment);
6648
+ const call = call_of3(segment);
6524
6649
  return call === void 0 ? [] : implementation_shell_nested.call_commands(call);
6525
6650
  });
6526
6651
  return [...implementation_shell_nested.substitution_bodies(line), ...launched];
@@ -6541,13 +6666,13 @@ function input_refusal(command) {
6541
6666
  if (command.trim() === "") return "an empty command";
6542
6667
  return time_shell.has_heredoc(command) ? "a heredoc" : void 0;
6543
6668
  }
6544
- function refusal3(command, root = process.cwd()) {
6669
+ function refusal5(command, root = process.cwd()) {
6545
6670
  return input_refusal(command) ?? segments_refusal(segments_of2(command), root);
6546
6671
  }
6547
6672
  function is_unsafe(command, root = process.cwd()) {
6548
- return refusal3(command, root) !== void 0;
6673
+ return refusal5(command, root) !== void 0;
6549
6674
  }
6550
- var implementation_shell = { is_unsafe, refusal: refusal3 };
6675
+ var implementation_shell = { is_unsafe, refusal: refusal5 };
6551
6676
 
6552
6677
  // scripts/hooks/implementation-authority.ts
6553
6678
  var HANDOFF2 = " Implementation refused before execution. Record the plan with issue:plan or issue:comment and hand it to lane:dispatch; repeating the request does not grant authority.";
@@ -6717,8 +6842,8 @@ function emit(raw_payload, outcome, rewrite3, context = hook_context.from_proces
6717
6842
  `);
6718
6843
  }
6719
6844
  async function record_refusal(judged_payload, outcome, context = hook_context.from_process(), demoted = hook_demoted.rules(context.env)) {
6720
- const refusal4 = outcome.reason ?? hook_demoted.refusal_of(outcome.notice, demoted);
6721
- await hook_ledger.record_reason(HOOK_NAME, refusal4, judged_payload, context);
6845
+ const refusal6 = outcome.reason ?? hook_demoted.refusal_of(outcome.notice, demoted);
6846
+ await hook_ledger.record_reason(HOOK_NAME, refusal6, judged_payload, context);
6722
6847
  if (outcome.reason === void 0) await direct_gh_usage.record(judged_payload, context);
6723
6848
  }
6724
6849
  async function respond(raw_payload, context = hook_context.from_process()) {