@joshuafolkken/kit 1.3041.0 → 1.3092.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/fullrun-steps.md +3 -3
- package/.claude/skills/workflow-commands/halfrun.md +3 -2
- package/.claude/skills/workflow-commands/kickoff.md +9 -2
- package/.claude/skills/workflow-commands/prerequisite.md +2 -0
- package/.claude/skills/workflow-commands/progress-watcher.md +10 -8
- package/.claude/skills/workflow-commands/retrospective.md +2 -1
- package/.claude/skills/workflow-commands/split-assessment.md +4 -0
- package/.github/workflows/ci.yml +0 -20
- package/.github/workflows/pr-classification.yml +0 -5
- package/.github/workflows/publish.yml +0 -1
- package/.github/workflows/sonar-qube.yml +0 -5
- package/README.md +2 -0
- package/SECURITY.md +2 -1
- package/dist/.inputs-verified.json +1 -1
- package/dist/commands/adopt.js +29 -20
- package/dist/commands/auto-ok-judge-cli.js +43 -33
- package/dist/commands/auto-ok-main.js +73 -74
- package/dist/commands/backlog-budget-main.js +5 -6
- package/dist/commands/backlog-drive-cli.js +286 -305
- package/dist/commands/backlog-next-main.js +111 -108
- package/dist/commands/backlog-offer-main.js +148 -112
- package/dist/commands/backlog-plan-cli.js +123 -120
- package/dist/commands/backlog-triage-cli.js +131 -128
- package/dist/commands/backlogrun-cli.js +273 -264
- package/dist/commands/behavior-cli.js +23 -26
- package/dist/commands/bytes-command.js +56 -59
- package/dist/commands/cases-cli.js +4 -5
- package/dist/commands/check-commit-message-main.js +3 -4
- package/dist/commands/check-related.js +125 -119
- package/dist/commands/chunk-26JL4UU4.js +365 -0
- package/dist/commands/chunk-2BIVHPCA.js +85 -0
- package/dist/commands/chunk-2CKJODCK.js +245 -0
- package/dist/commands/chunk-2E6PSONB.js +46 -0
- package/dist/commands/chunk-2GA4775H.js +77 -0
- package/dist/commands/chunk-2O64H5UJ.js +462 -0
- package/dist/commands/chunk-2OEXY4GM.js +252 -0
- package/dist/commands/chunk-2OMIHPPE.js +51 -0
- package/dist/commands/chunk-2ONSHOAY.js +46 -0
- package/dist/commands/chunk-2Q7MGFYB.js +1208 -0
- package/dist/commands/chunk-2SA3W4JF.js +41 -0
- package/dist/commands/chunk-2VY7CJ2R.js +212 -0
- package/dist/commands/chunk-2WRDAQPJ.js +74 -0
- package/dist/commands/chunk-2XLR7R6E.js +541 -0
- package/dist/commands/chunk-2XZF3YFY.js +47 -0
- package/dist/commands/chunk-33TAOZUE.js +29 -0
- package/dist/commands/chunk-374XGAWD.js +158 -0
- package/dist/commands/chunk-3CJNQU7P.js +179 -0
- package/dist/commands/chunk-3D5T6KMW.js +59 -0
- package/dist/commands/chunk-3EW5LTN3.js +114 -0
- package/dist/commands/chunk-3F3RNIG2.js +128 -0
- package/dist/commands/chunk-3FLTEJZY.js +74 -0
- package/dist/commands/chunk-3JWPTRNI.js +60 -0
- package/dist/commands/chunk-3MQTOUXT.js +94 -0
- package/dist/commands/chunk-3PCUERXE.js +19 -0
- package/dist/commands/chunk-3U6A5WON.js +173 -0
- package/dist/commands/chunk-3YT3RCSI.js +140 -0
- package/dist/commands/chunk-43DU7DYZ.js +540 -0
- package/dist/commands/chunk-43H725LG.js +132 -0
- package/dist/commands/chunk-46STCE6Q.js +48 -0
- package/dist/commands/chunk-46WEC6HZ.js +82 -0
- package/dist/commands/chunk-47J4KOZP.js +46 -0
- package/dist/commands/chunk-47W7PF4T.js +22 -0
- package/dist/commands/chunk-4F4KARQN.js +229 -0
- package/dist/commands/chunk-4GUGC4IW.js +338 -0
- package/dist/commands/chunk-4HB7NWXP.js +263 -0
- package/dist/commands/chunk-4HOTJAO6.js +89 -0
- package/dist/commands/chunk-4I5AA4P5.js +237 -0
- package/dist/commands/chunk-4IDINPBE.js +525 -0
- package/dist/commands/chunk-4K7KLR7L.js +69 -0
- package/dist/commands/chunk-4MGTNY2L.js +347 -0
- package/dist/commands/chunk-4NSIW3UB.js +104 -0
- package/dist/commands/chunk-4YTKV6WV.js +37 -0
- package/dist/commands/chunk-5ARNFMQK.js +1263 -0
- package/dist/commands/chunk-5AZTSESD.js +114 -0
- package/dist/commands/chunk-5FUI2MLY.js +89 -0
- package/dist/commands/chunk-5GI5GLC4.js +214 -0
- package/dist/commands/chunk-5IHEBIPD.js +333 -0
- package/dist/commands/chunk-5KAW5GPF.js +44 -0
- package/dist/commands/chunk-5KSJEWXR.js +77 -0
- package/dist/commands/chunk-5OF2B4BF.js +35 -0
- package/dist/commands/chunk-5PLJ7R3D.js +126 -0
- package/dist/commands/chunk-5PPWXOCF.js +64 -0
- package/dist/commands/chunk-5VQCL33M.js +46 -0
- package/dist/commands/chunk-5Y7FOJLX.js +186 -0
- package/dist/commands/chunk-5YTEMF4O.js +110 -0
- package/dist/commands/chunk-62NYXZCC.js +241 -0
- package/dist/commands/chunk-6KUA7MRG.js +64 -0
- package/dist/commands/chunk-6LDEZFYR.js +88 -0
- package/dist/commands/chunk-6NXIZMIK.js +122 -0
- package/dist/commands/chunk-6O45F6YI.js +86 -0
- package/dist/commands/chunk-6OHJBQDE.js +184 -0
- package/dist/commands/chunk-6WDCCG3M.js +1249 -0
- package/dist/commands/chunk-6ZHXEQAI.js +715 -0
- package/dist/commands/chunk-736NECRD.js +16 -0
- package/dist/commands/chunk-77LEKVEE.js +32 -0
- package/dist/commands/chunk-7CX5VYOL.js +50 -0
- package/dist/commands/chunk-7DGHFBU7.js +247 -0
- package/dist/commands/chunk-7E43YW53.js +128 -0
- package/dist/commands/chunk-7EAYFMDN.js +235 -0
- package/dist/commands/chunk-7HP3FQGQ.js +51 -0
- package/dist/commands/chunk-7JOOMFDI.js +155 -0
- package/dist/commands/chunk-7OEBSPPU.js +321 -0
- package/dist/commands/chunk-A3JYZWBS.js +803 -0
- package/dist/commands/chunk-A3LCN4KA.js +84 -0
- package/dist/commands/chunk-ABLXBG6C.js +98 -0
- package/dist/commands/chunk-AN7BFVHU.js +244 -0
- package/dist/commands/chunk-AQCVEQSM.js +99 -0
- package/dist/commands/chunk-AT46EY7H.js +393 -0
- package/dist/commands/chunk-AU563VKH.js +75 -0
- package/dist/commands/chunk-AUTD5FV2.js +1077 -0
- package/dist/commands/chunk-AV26CMY6.js +304 -0
- package/dist/commands/chunk-B2PJEV3S.js +246 -0
- package/dist/commands/chunk-B545ENGY.js +214 -0
- package/dist/commands/chunk-B5HP6T4L.js +170 -0
- package/dist/commands/chunk-B5XYAWNN.js +37 -0
- package/dist/commands/chunk-B73IIRMS.js +207 -0
- package/dist/commands/chunk-BAEDHPXW.js +160 -0
- package/dist/commands/chunk-BDSG6JKH.js +977 -0
- package/dist/commands/chunk-BE6F4YK2.js +769 -0
- package/dist/commands/chunk-BFKTUD3V.js +33 -0
- package/dist/commands/chunk-BLRXHK2V.js +17 -0
- package/dist/commands/chunk-BLUAO4QW.js +173 -0
- package/dist/commands/chunk-BML6MEUB.js +326 -0
- package/dist/commands/chunk-BPDNGJXY.js +63 -0
- package/dist/commands/chunk-BQLKWGGC.js +118 -0
- package/dist/commands/chunk-BRMJVCP7.js +167 -0
- package/dist/commands/chunk-BRWR5YKU.js +268 -0
- package/dist/commands/chunk-BUZAYEBD.js +319 -0
- package/dist/commands/chunk-BVUL57IX.js +139 -0
- package/dist/commands/chunk-CC4BIGCA.js +20 -0
- package/dist/commands/chunk-CCHJZEF5.js +4220 -0
- package/dist/commands/chunk-CDK7QZWG.js +44 -0
- package/dist/commands/chunk-CDYFUCDC.js +72 -0
- package/dist/commands/chunk-CEADAQIL.js +170 -0
- package/dist/commands/chunk-CNL3SLM6.js +116 -0
- package/dist/commands/chunk-CNQ7D2GZ.js +104 -0
- package/dist/commands/chunk-CTXJVMHW.js +48 -0
- package/dist/commands/chunk-CUWT6UQO.js +13 -0
- package/dist/commands/chunk-CVRDJCOE.js +125 -0
- package/dist/commands/chunk-D6CF5QGM.js +80 -0
- package/dist/commands/chunk-DACNQAXC.js +20 -0
- package/dist/commands/chunk-DDOS32JU.js +74 -0
- package/dist/commands/chunk-DDZVMXZD.js +481 -0
- package/dist/commands/chunk-DF6QD4AF.js +52 -0
- package/dist/commands/chunk-DFEXNB44.js +159 -0
- package/dist/commands/chunk-DHDKG5HZ.js +151 -0
- package/dist/commands/chunk-DHJRFBKO.js +223 -0
- package/dist/commands/chunk-DKDWOE3C.js +78 -0
- package/dist/commands/chunk-DKO5VTEH.js +65 -0
- package/dist/commands/chunk-DLHH3MLS.js +85 -0
- package/dist/commands/chunk-DOYNK72G.js +81 -0
- package/dist/commands/chunk-DS53UUDH.js +679 -0
- package/dist/commands/chunk-DUA4E4ES.js +230 -0
- package/dist/commands/chunk-DURHGVRC.js +33 -0
- package/dist/commands/chunk-DVCMQMRN.js +191 -0
- package/dist/commands/chunk-E3YKMCCJ.js +108 -0
- package/dist/commands/chunk-E4F2RTKC.js +272 -0
- package/dist/commands/chunk-E4PFCTXN.js +127 -0
- package/dist/commands/chunk-EAOTR2WL.js +24 -0
- package/dist/commands/chunk-EE4VOZJP.js +167 -0
- package/dist/commands/chunk-EHVEWJQ4.js +33 -0
- package/dist/commands/chunk-EMFSPPMH.js +98 -0
- package/dist/commands/chunk-EN65ZS3S.js +73 -0
- package/dist/commands/chunk-ES42XPAD.js +123 -0
- package/dist/commands/chunk-ESUY7KTZ.js +137 -0
- package/dist/commands/chunk-ET6IRQ3L.js +330 -0
- package/dist/commands/chunk-EWCUT7U2.js +1314 -0
- package/dist/commands/chunk-EWXXEGXL.js +149 -0
- package/dist/commands/chunk-EZYW54OQ.js +7569 -0
- package/dist/commands/chunk-F2RDEF2J.js +205 -0
- package/dist/commands/chunk-F2U46HAE.js +52 -0
- package/dist/commands/chunk-F2VYWU6Z.js +653 -0
- package/dist/commands/chunk-F4SGOTUF.js +36 -0
- package/dist/commands/chunk-F4YMLVWN.js +183 -0
- package/dist/commands/chunk-F5N2QIFD.js +213 -0
- package/dist/commands/chunk-F7B4ESZE.js +80 -0
- package/dist/commands/chunk-FJM2HWKW.js +299 -0
- package/dist/commands/chunk-FJMXUDEY.js +3985 -0
- package/dist/commands/chunk-FM7VVAK6.js +426 -0
- package/dist/commands/chunk-FQWRM5FC.js +67 -0
- package/dist/commands/chunk-FT33ZCSB.js +298 -0
- package/dist/commands/chunk-G2DNS74C.js +53 -0
- package/dist/commands/chunk-G75GWNNY.js +101 -0
- package/dist/commands/chunk-GA2YSPFH.js +32 -0
- package/dist/commands/chunk-GAVSK6P6.js +230 -0
- package/dist/commands/chunk-GB2BRQVL.js +300 -0
- package/dist/commands/chunk-GBMZXFFC.js +44 -0
- package/dist/commands/chunk-GDP7QXYE.js +76 -0
- package/dist/commands/chunk-GGWXF7RJ.js +70 -0
- package/dist/commands/chunk-GHOTKHI4.js +30 -0
- package/dist/commands/chunk-GMVN6ZP2.js +48 -0
- package/dist/commands/chunk-GNTTGRCX.js +133 -0
- package/dist/commands/chunk-GOY5JECO.js +130 -0
- package/dist/commands/chunk-GVDRRBHZ.js +507 -0
- package/dist/commands/chunk-GWTBIGYC.js +550 -0
- package/dist/commands/chunk-GZL6ISVM.js +72 -0
- package/dist/commands/chunk-HALHQILI.js +51 -0
- package/dist/commands/chunk-HAT7AFBF.js +85 -0
- package/dist/commands/chunk-HDVSZ6CZ.js +292 -0
- package/dist/commands/chunk-HE3GOMR7.js +88 -0
- package/dist/commands/chunk-HEFUC4ZW.js +65 -0
- package/dist/commands/chunk-HESWKELD.js +60 -0
- package/dist/commands/chunk-HNFBEB4L.js +77 -0
- package/dist/commands/chunk-HRN73FQJ.js +77 -0
- package/dist/commands/chunk-HYE3MBAN.js +113 -0
- package/dist/commands/chunk-IAB6LCJL.js +18 -0
- package/dist/commands/chunk-IAGENI2U.js +42 -0
- package/dist/commands/chunk-ICPVBHIX.js +48 -0
- package/dist/commands/chunk-IEKW3ON6.js +161 -0
- package/dist/commands/chunk-IOKOHB7P.js +109 -0
- package/dist/commands/chunk-IONGJJYM.js +179 -0
- package/dist/commands/chunk-IP23WOWP.js +126 -0
- package/dist/commands/chunk-IPS7EBE5.js +140 -0
- package/dist/commands/chunk-IXZZSST7.js +459 -0
- package/dist/commands/chunk-J4XHEOOW.js +156 -0
- package/dist/commands/chunk-JDHLHYJJ.js +208 -0
- package/dist/commands/chunk-JEYITIWB.js +423 -0
- package/dist/commands/chunk-JGX7JIW4.js +126 -0
- package/dist/commands/chunk-JHIGDFBS.js +59 -0
- package/dist/commands/chunk-JI2EGXZX.js +53 -0
- package/dist/commands/chunk-JNV3VRK2.js +47 -0
- package/dist/commands/chunk-JPMAW2VZ.js +91 -0
- package/dist/commands/chunk-JQEY6KDP.js +90 -0
- package/dist/commands/chunk-JSJDIEGZ.js +88 -0
- package/dist/commands/chunk-JT5ICRFF.js +44 -0
- package/dist/commands/chunk-JUCJ4Y42.js +77 -0
- package/dist/commands/chunk-K3OZBV3L.js +49 -0
- package/dist/commands/chunk-K5H3CLZZ.js +430 -0
- package/dist/commands/chunk-K6P5PISC.js +114 -0
- package/dist/commands/chunk-KD3SEAMV.js +402 -0
- package/dist/commands/chunk-KDCHY7XO.js +88 -0
- package/dist/commands/chunk-KDGX3JTV.js +51 -0
- package/dist/commands/chunk-KGSEWOKI.js +353 -0
- package/dist/commands/chunk-KHGDZQRG.js +271 -0
- package/dist/commands/chunk-KIS7JFNP.js +217 -0
- package/dist/commands/chunk-KKHD3C2P.js +114 -0
- package/dist/commands/chunk-KKIIY5I5.js +67 -0
- package/dist/commands/chunk-KN46UC77.js +114 -0
- package/dist/commands/chunk-KP2BVAS5.js +125 -0
- package/dist/commands/chunk-KPAJBJXG.js +63 -0
- package/dist/commands/chunk-KPMAJP6D.js +145 -0
- package/dist/commands/chunk-KR6WUAJM.js +122 -0
- package/dist/commands/chunk-KWLNK2NJ.js +391 -0
- package/dist/commands/chunk-L2CLCNXW.js +144 -0
- package/dist/commands/chunk-L7MDU6D7.js +155 -0
- package/dist/commands/chunk-L7VD4MLF.js +78 -0
- package/dist/commands/chunk-LBMAJDGN.js +124 -0
- package/dist/commands/chunk-LBVYFW3I.js +38 -0
- package/dist/commands/chunk-LE3M42CF.js +350 -0
- package/dist/commands/chunk-LIPUSINQ.js +140 -0
- package/dist/commands/chunk-LJVZWE3A.js +1885 -0
- package/dist/commands/chunk-LKSSQVDA.js +49 -0
- package/dist/commands/chunk-LL6G34MF.js +93 -0
- package/dist/commands/chunk-LNQOL2CL.js +321 -0
- package/dist/commands/chunk-LS7P324N.js +72 -0
- package/dist/commands/chunk-LU5EOGFQ.js +50 -0
- package/dist/commands/chunk-LX2ENXHZ.js +197 -0
- package/dist/commands/chunk-M32UPB2D.js +110 -0
- package/dist/commands/chunk-M3UGRNNB.js +103 -0
- package/dist/commands/chunk-M4WG74Q7.js +260 -0
- package/dist/commands/chunk-M5HA2ZCG.js +105 -0
- package/dist/commands/chunk-MDGPJOLK.js +351 -0
- package/dist/commands/chunk-MDKRTUE4.js +288 -0
- package/dist/commands/chunk-MFZVRWRS.js +34 -0
- package/dist/commands/chunk-MHXIJKGP.js +304 -0
- package/dist/commands/chunk-MK4CARBI.js +90 -0
- package/dist/commands/chunk-MLJDW7YN.js +64 -0
- package/dist/commands/chunk-MNLHYAJO.js +80 -0
- package/dist/commands/chunk-MOD3FG4V.js +419 -0
- package/dist/commands/chunk-MRAEJLXL.js +83 -0
- package/dist/commands/chunk-MRW2WYJS.js +68 -0
- package/dist/commands/chunk-MXPCEZL5.js +23 -0
- package/dist/commands/chunk-N2XH7QBY.js +103 -0
- package/dist/commands/chunk-N2ZF6T4E.js +332 -0
- package/dist/commands/chunk-N36NZMAL.js +79 -0
- package/dist/commands/chunk-N4EMFHQ6.js +114 -0
- package/dist/commands/chunk-N4P64UIH.js +211 -0
- package/dist/commands/chunk-NABSSY4P.js +204 -0
- package/dist/commands/chunk-NDQIJBRQ.js +100 -0
- package/dist/commands/chunk-NDR4PCVG.js +29 -0
- package/dist/commands/chunk-NEOCCN6D.js +302 -0
- package/dist/commands/chunk-NFKWFOFM.js +45 -0
- package/dist/commands/chunk-NFUPJBBG.js +516 -0
- package/dist/commands/chunk-NHEBKL7X.js +170 -0
- package/dist/commands/chunk-NHTEC5U4.js +99 -0
- package/dist/commands/chunk-NOSG3RUP.js +84 -0
- package/dist/commands/chunk-NOSODWWK.js +1132 -0
- package/dist/commands/chunk-NPXXYG6Z.js +580 -0
- package/dist/commands/chunk-NR2JDBPV.js +75 -0
- package/dist/commands/chunk-NRULNBYI.js +1153 -0
- package/dist/commands/chunk-NTGF5N3N.js +110 -0
- package/dist/commands/chunk-NTIVNQKF.js +73 -0
- package/dist/commands/chunk-NUCFIYZL.js +119 -0
- package/dist/commands/chunk-NVMV7BYX.js +88 -0
- package/dist/commands/chunk-NYWPTYGL.js +169 -0
- package/dist/commands/chunk-NZ45KOLL.js +104 -0
- package/dist/commands/chunk-O45BX4EL.js +39 -0
- package/dist/commands/chunk-O46T4ANI.js +229 -0
- package/dist/commands/chunk-O5JGV7NA.js +245 -0
- package/dist/commands/chunk-O7ESC4HL.js +566 -0
- package/dist/commands/chunk-OBYLXHCH.js +86 -0
- package/dist/commands/chunk-OKN63ZH5.js +109 -0
- package/dist/commands/chunk-ON4IKRGS.js +469 -0
- package/dist/commands/chunk-OT74RSQO.js +82 -0
- package/dist/commands/chunk-OVCVINYW.js +143 -0
- package/dist/commands/chunk-OZKLVTYI.js +342 -0
- package/dist/commands/chunk-P3LJ2Q4N.js +555 -0
- package/dist/commands/chunk-P43GWYR6.js +185 -0
- package/dist/commands/chunk-P6ASP2DY.js +132 -0
- package/dist/commands/chunk-PBAEJ5PT.js +38 -0
- package/dist/commands/chunk-PCZROH3R.js +100 -0
- package/dist/commands/chunk-PF3PMT2Q.js +46 -0
- package/dist/commands/chunk-PILH72AV.js +170 -0
- package/dist/commands/chunk-PJYTUUTH.js +34 -0
- package/dist/commands/chunk-PKXTISWR.js +58 -0
- package/dist/commands/chunk-PSGLUBSB.js +74 -0
- package/dist/commands/chunk-PUQA7F6Y.js +186 -0
- package/dist/commands/chunk-PVRDJU2B.js +126 -0
- package/dist/commands/chunk-Q3HM2BEH.js +45 -0
- package/dist/commands/chunk-Q42NF2TL.js +47 -0
- package/dist/commands/chunk-Q4ULMZAS.js +106 -0
- package/dist/commands/chunk-QCRUPRQ2.js +207 -0
- package/dist/commands/chunk-QFIKPGMC.js +280 -0
- package/dist/commands/chunk-QSBYULSS.js +100 -0
- package/dist/commands/chunk-QSJCZATC.js +18 -0
- package/dist/commands/chunk-QTJPCXEW.js +23 -0
- package/dist/commands/chunk-QTQAI2M2.js +179 -0
- package/dist/commands/chunk-QTVVFV4Q.js +127 -0
- package/dist/commands/chunk-QX2EMUXV.js +102 -0
- package/dist/commands/chunk-QXBOECGL.js +272 -0
- package/dist/commands/chunk-QXCG3SG4.js +88 -0
- package/dist/commands/chunk-QZVMGAWV.js +307 -0
- package/dist/commands/chunk-R36VZIKU.js +53 -0
- package/dist/commands/chunk-R3F7F3TX.js +94 -0
- package/dist/commands/chunk-R5AABJZJ.js +1062 -0
- package/dist/commands/chunk-R7PYR4HW.js +389 -0
- package/dist/commands/chunk-RDUFVQVJ.js +997 -0
- package/dist/commands/chunk-RESNXNDG.js +54 -0
- package/dist/commands/chunk-RFIOZTXY.js +305 -0
- package/dist/commands/chunk-RFWB2KAV.js +102 -0
- package/dist/commands/chunk-RFXON3FK.js +25 -0
- package/dist/commands/chunk-RGEB5L37.js +66 -0
- package/dist/commands/chunk-RGRLLF2J.js +119 -0
- package/dist/commands/chunk-RLRIMYXM.js +178 -0
- package/dist/commands/chunk-RNB3DQOZ.js +70 -0
- package/dist/commands/chunk-RO4QEZJO.js +172 -0
- package/dist/commands/chunk-RS5HBJY6.js +161 -0
- package/dist/commands/chunk-RV7EQIE4.js +202 -0
- package/dist/commands/chunk-RWPCK3CO.js +41 -0
- package/dist/commands/chunk-RWYSVFIA.js +250 -0
- package/dist/commands/chunk-RYKK75YT.js +289 -0
- package/dist/commands/chunk-S4JE63QE.js +704 -0
- package/dist/commands/chunk-S4OZJIXD.js +134 -0
- package/dist/commands/chunk-SD4EX75H.js +177 -0
- package/dist/commands/chunk-SJITWFNY.js +480 -0
- package/dist/commands/chunk-SKGDMAIA.js +33 -0
- package/dist/commands/chunk-SNSZ25XZ.js +393 -0
- package/dist/commands/chunk-SQZZHK6X.js +119 -0
- package/dist/commands/chunk-SRTEE34O.js +93 -0
- package/dist/commands/chunk-SYTCTLMD.js +285 -0
- package/dist/commands/chunk-T6JUDQMW.js +181 -0
- package/dist/commands/chunk-T6OUNP7E.js +426 -0
- package/dist/commands/chunk-TEXUEBGE.js +208 -0
- package/dist/commands/chunk-TFDVTU6O.js +910 -0
- package/dist/commands/chunk-TFYYXETQ.js +472 -0
- package/dist/commands/chunk-TMFKVJUW.js +121 -0
- package/dist/commands/chunk-TNJU4CXD.js +32 -0
- package/dist/commands/chunk-TRHWBUWE.js +61 -0
- package/dist/commands/chunk-TROCFVCU.js +45 -0
- package/dist/commands/chunk-TTTZZN7F.js +269 -0
- package/dist/commands/chunk-TUBBESHU.js +85 -0
- package/dist/commands/chunk-TVZIFZZN.js +62 -0
- package/dist/commands/chunk-TXRWAL63.js +144 -0
- package/dist/commands/chunk-U46YTYJQ.js +92 -0
- package/dist/commands/chunk-U5EO4QEV.js +48 -0
- package/dist/commands/chunk-UCO333EX.js +47 -0
- package/dist/commands/chunk-UIXQ4IYT.js +445 -0
- package/dist/commands/chunk-UJGNYPMD.js +716 -0
- package/dist/commands/chunk-URZ4RDC4.js +220 -0
- package/dist/commands/chunk-UUH3DE77.js +57 -0
- package/dist/commands/chunk-UVY5ODCM.js +60 -0
- package/dist/commands/chunk-UWMB6EOU.js +45 -0
- package/dist/commands/chunk-UX3HCPLX.js +449 -0
- package/dist/commands/chunk-UY62WJV6.js +120 -0
- package/dist/commands/chunk-V2T5DP3B.js +224 -0
- package/dist/commands/chunk-VAHQ4AFM.js +585 -0
- package/dist/commands/chunk-VCWNMRH7.js +71 -0
- package/dist/commands/chunk-VHLDQ3PH.js +30 -0
- package/dist/commands/chunk-VL5I2IOD.js +332 -0
- package/dist/commands/chunk-VLN6TSPJ.js +139 -0
- package/dist/commands/chunk-VMG3QB6C.js +81 -0
- package/dist/commands/chunk-VO25PMGS.js +58 -0
- package/dist/commands/chunk-VTLWODJ2.js +133 -0
- package/dist/commands/chunk-VXE3V3OC.js +335 -0
- package/dist/commands/chunk-VY7ZJMDT.js +469 -0
- package/dist/commands/chunk-W3MDLQZF.js +137 -0
- package/dist/commands/chunk-W4BR6QNU.js +1241 -0
- package/dist/commands/chunk-WCYRNNKF.js +76 -0
- package/dist/commands/chunk-WEUUJIWQ.js +84 -0
- package/dist/commands/chunk-WNBJK6QE.js +84 -0
- package/dist/commands/chunk-WR5PKCQW.js +61 -0
- package/dist/commands/chunk-WR73HTRG.js +121 -0
- package/dist/commands/chunk-WRNMUQTD.js +95 -0
- package/dist/commands/chunk-WROJTXWZ.js +138 -0
- package/dist/commands/chunk-WTIPX5NG.js +43 -0
- package/dist/commands/chunk-WWLCQREY.js +225 -0
- package/dist/commands/chunk-WXLW7S4M.js +71 -0
- package/dist/commands/chunk-WXXLJQBO.js +67 -0
- package/dist/commands/chunk-X4LYH6Q4.js +56 -0
- package/dist/commands/chunk-XAEL24EG.js +66 -0
- package/dist/commands/chunk-XCCT6GKA.js +74 -0
- package/dist/commands/chunk-XDR2BRDL.js +216 -0
- package/dist/commands/chunk-XRQMVAB4.js +85 -0
- package/dist/commands/chunk-XSKJAG72.js +91 -0
- package/dist/commands/chunk-XTJA34ND.js +492 -0
- package/dist/commands/chunk-XUXCFPDK.js +218 -0
- package/dist/commands/chunk-XXPDFJRI.js +48 -0
- package/dist/commands/chunk-Y6OGDG5I.js +49 -0
- package/dist/commands/chunk-YEAE46TS.js +98 -0
- package/dist/commands/chunk-YEQFAEVW.js +112 -0
- package/dist/commands/chunk-YJZAD4Z5.js +103 -0
- package/dist/commands/chunk-YMAEYY5R.js +278 -0
- package/dist/commands/chunk-YNCF66RK.js +1052 -0
- package/dist/commands/chunk-YOA25SII.js +210 -0
- package/dist/commands/chunk-YOZTZMAT.js +38 -0
- package/dist/commands/chunk-YSGRHVZG.js +897 -0
- package/dist/commands/chunk-YSLGWRQN.js +646 -0
- package/dist/commands/chunk-YTXCLGGL.js +168 -0
- package/dist/commands/chunk-YVHJN2HS.js +74 -0
- package/dist/commands/chunk-YY7XVVSB.js +43 -0
- package/dist/commands/chunk-Z5GZV4DV.js +16 -0
- package/dist/commands/chunk-Z6QLFPFB.js +907 -0
- package/dist/commands/chunk-ZB52ZIEA.js +1629 -0
- package/dist/commands/chunk-ZCD4AV2P.js +73 -0
- package/dist/commands/chunk-ZCHZU6NX.js +799 -0
- package/dist/commands/chunk-ZEH2B3DF.js +239 -0
- package/dist/commands/chunk-ZEUKX3RZ.js +245 -0
- package/dist/commands/chunk-ZGANVZCA.js +92 -0
- package/dist/commands/chunk-ZGBXUY7R.js +198 -0
- package/dist/commands/chunk-ZGEUWHFF.js +297 -0
- package/dist/commands/chunk-ZHSNQ2F7.js +161 -0
- package/dist/commands/chunk-ZIIUBGON.js +773 -0
- package/dist/commands/chunk-ZJ5S4VFD.js +258 -0
- package/dist/commands/chunk-ZNIIA275.js +59 -0
- package/dist/commands/chunk-ZV6BZZJ2.js +271 -0
- package/dist/commands/ci-timing-cli.js +22 -3
- package/dist/commands/code-symbol-cli.js +21 -7
- package/dist/commands/codex-hook-adapter.js +124 -119
- package/dist/commands/command-derive.js +9 -11
- package/dist/commands/cost-audit-main.js +118 -119
- package/dist/commands/cost-main.js +5 -7
- package/dist/commands/cspell-cached.js +55 -57
- package/dist/commands/defect-origin-main.js +42 -37
- package/dist/commands/defect-report-main.js +33 -25
- package/dist/commands/diff-summary-cli.js +3 -4
- package/dist/commands/disposition-cli.js +117 -118
- package/dist/commands/doctor.js +24 -11
- package/dist/commands/document-read-cli.js +50 -53
- package/dist/commands/document-section-main.js +50 -53
- package/dist/commands/dogfood-commit-cli.js +19 -4
- package/dist/commands/effect-audit-cli.js +40 -41
- package/dist/commands/epic-audit-main.js +88 -86
- package/dist/commands/epic-bundle-main.js +122 -119
- package/dist/commands/epic-check.js +37 -31
- package/dist/commands/epic-main.js +129 -126
- package/dist/commands/epic-next-main.js +85 -83
- package/dist/commands/eval-run.js +6 -7
- package/dist/commands/format-edited-cli.js +71 -46
- package/dist/commands/format.js +41 -56
- package/dist/commands/fresh-machine-cli.js +24 -7
- package/dist/commands/gh-usage-cli.js +22 -22
- package/dist/commands/git-followup-workflow.js +158 -158
- package/dist/commands/git-gh-checks-failed-main.js +23 -15
- package/dist/commands/git-workflow.js +52 -53
- package/dist/commands/github-release-cli.js +3 -3
- package/dist/commands/hook-ledger-cli.js +93 -94
- package/dist/commands/init-main.js +40 -40
- package/dist/commands/inputs.json +2042 -2002
- package/dist/commands/issue-ack-cli.js +28 -21
- package/dist/commands/issue-already-done-cli.js +107 -110
- package/dist/commands/issue-body-cli.js +71 -73
- package/dist/commands/issue-cite-main.js +35 -28
- package/dist/commands/issue-comment-main.js +36 -30
- package/dist/commands/issue-consolidate-cli.js +54 -54
- package/dist/commands/issue-file-main.js +274 -148
- package/dist/commands/issue-fold-existing-cli.js +126 -123
- package/dist/commands/issue-fold-main.js +57 -60
- package/dist/commands/issue-lint-main.js +59 -61
- package/dist/commands/issue-measured-cli.js +108 -110
- package/dist/commands/issue-plan-cli.js +156 -155
- package/dist/commands/issue-premise-unmet-cli.js +111 -113
- package/dist/commands/issue-priority-cli.js +38 -32
- package/dist/commands/issue-read-main.js +38 -33
- package/dist/commands/issue-release-class-cli.js +37 -31
- package/dist/commands/issue-release-main.js +35 -29
- package/dist/commands/issue-scout-main.js +123 -120
- package/dist/commands/issue-spill-main.js +149 -144
- package/dist/commands/issue-state-main.js +36 -31
- package/dist/commands/issue-tick-cli.js +37 -31
- package/dist/commands/josh-completion.js +21 -24
- package/dist/commands/lane-adopt-cli.js +53 -55
- package/dist/commands/lane-breakdown-cli.js +193 -172
- package/dist/commands/lane-cli.js +199 -180
- package/dist/commands/lane-launch-main.js +106 -56
- package/dist/commands/lane-limit-cli.js +119 -116
- package/dist/commands/lane-measure-cli.js +408 -245
- package/dist/commands/lane-pause-cli.js +51 -54
- package/dist/commands/lane-plan-cli.js +148 -147
- package/dist/commands/lane-resolve-cli.js +48 -50
- package/dist/commands/lane-restart-cli.js +185 -168
- package/dist/commands/lane-why-cli.js +121 -122
- package/dist/commands/lane-withdraw-cli.js +84 -86
- package/dist/commands/latest-corepack.js +3 -2
- package/dist/commands/latest-if-required-cli.js +12 -15
- package/dist/commands/latest-lane-guard-main.js +2 -3
- package/dist/commands/latest-scope-main.js +5 -7
- package/dist/commands/latest-update.js +3 -2
- package/dist/commands/lines-command.js +8 -10
- package/dist/commands/lint-parallel-main.js +65 -67
- package/dist/commands/lint-related.js +149 -133
- package/dist/commands/lint-rule.js +64 -66
- package/dist/commands/lockfile-policy.js +29 -32
- package/dist/commands/main-merge-main.js +23 -25
- package/dist/commands/main-sync-main.js +23 -24
- package/dist/commands/managed-config-scope-cli.js +11 -10
- package/dist/commands/measure-rerun-cli.js +31 -26
- package/dist/commands/metrics-command.js +97 -100
- package/dist/commands/observation-record-cli.js +24 -14
- package/dist/commands/observations-flush-cli.js +50 -52
- package/dist/commands/overrides-check.js +1 -1
- package/dist/commands/package-scout-cli.js +70 -73
- package/dist/commands/pin-verify-cli.js +21 -2
- package/dist/commands/plan-consumers-main.js +3 -4
- package/dist/commands/plan-scaffold-cli.js +145 -146
- package/dist/commands/pr-classification-main.js +22 -3
- package/dist/commands/pre-commit-lint.js +30 -34
- package/dist/commands/pre-commit-type-check.js +55 -55
- package/dist/commands/pre-push-unit.js +69 -70
- package/dist/commands/pretool-guard-cli.js +111 -113
- package/dist/commands/prevent-main-commit.js +2 -3
- package/dist/commands/project-profile-cli.js +24 -9
- package/dist/commands/propagate.js +31 -23
- package/dist/commands/prose-stale-cli.js +48 -42
- package/dist/commands/publishable-range-check.js +3 -3
- package/dist/commands/read-set-cli.js +58 -61
- package/dist/commands/refactor-scan-cli.js +8 -9
- package/dist/commands/release-cli.js +57 -57
- package/dist/commands/release-scope-main.js +41 -36
- package/dist/commands/rename-cli.js +64 -36
- package/dist/commands/repo-party-cli.js +3 -4
- package/dist/commands/report-template-cli.js +4 -5
- package/dist/commands/reserved-run.js +17 -20
- package/dist/commands/retrospective-cli.js +126 -127
- package/dist/commands/review-attest-cli.js +28 -20
- package/dist/commands/review-brief-main.js +184 -167
- package/dist/commands/review-findings-cli.js +23 -13
- package/dist/commands/review-pair-cli.js +180 -156
- package/dist/commands/review-record-main.js +171 -147
- package/dist/commands/review-round2-cli.js +89 -91
- package/dist/commands/review-stops-cli.js +51 -54
- package/dist/commands/review-submit-cli.js +184 -167
- package/dist/commands/rule-list.js +78 -80
- package/dist/commands/rule-value-cli.js +115 -116
- package/dist/commands/ruleset-check-cli.js +23 -6
- package/dist/commands/run-add-cli.js +115 -75
- package/dist/commands/run-board-main.js +172 -169
- package/dist/commands/run-carry-cli.js +182 -174
- package/dist/commands/run-chain-cli.js +184 -160
- package/dist/commands/run-cut-cli.js +206 -168
- package/dist/commands/run-ending-cli.js +51 -54
- package/dist/commands/run-entry-cli.js +230 -283
- package/dist/commands/run-event-cli.js +18 -21
- package/dist/commands/run-handoff-cli.js +75 -78
- package/dist/commands/run-handoff-lanes-cli.js +48 -51
- package/dist/commands/run-hold-main.js +105 -107
- package/dist/commands/run-liveness-cli.js +47 -49
- package/dist/commands/run-merge-main.js +159 -151
- package/dist/commands/run-next-cli.js +128 -129
- package/dist/commands/run-park-cli.js +137 -140
- package/dist/commands/run-pause-cli.js +190 -186
- package/dist/commands/run-pickup-cli.js +49 -52
- package/dist/commands/run-prep-main.js +124 -125
- package/dist/commands/run-prime-cli.js +175 -147
- package/dist/commands/run-progress-main.js +149 -146
- package/dist/commands/run-report-cli.js +60 -60
- package/dist/commands/run-review-cli.js +229 -214
- package/dist/commands/run-ship-cli.js +258 -252
- package/dist/commands/run-ship-evidence-cli.js +71 -72
- package/dist/commands/run-ship-lap-W66LTXJJ.js +28 -0
- package/dist/commands/run-ship-wait-main.js +83 -85
- package/dist/commands/run-split-cli.js +176 -172
- package/dist/commands/run-stale-main.js +72 -75
- package/dist/commands/run-status-cli.js +44 -44
- package/dist/commands/run-step-cli.js +213 -211
- package/dist/commands/run-tail-cli.js +23 -18
- package/dist/commands/run-tidy-main.js +67 -69
- package/dist/commands/run-wake-main.js +206 -187
- package/dist/commands/run-watcher-guard-cli.js +63 -66
- package/dist/commands/security-audit-main.js +21 -24
- package/dist/commands/security-audit-provision-main.js +9 -11
- package/dist/commands/selfcheck-cli.js +63 -57
- package/dist/commands/session-language-main.js +70 -73
- package/dist/commands/sonar-hotspots-cli.js +9 -8
- package/dist/commands/sonar-new-code-cli.js +3 -4
- package/dist/commands/split-assess-cli.js +55 -58
- package/dist/commands/split-child-recover-cli.js +38 -39
- package/dist/commands/start.js +64 -64
- package/dist/commands/stash-pop-main.js +4 -5
- package/dist/commands/stash-push-main.js +7 -9
- package/dist/commands/stop-guard.js +180 -176
- package/dist/commands/sync-main.js +30 -15
- package/dist/commands/telegram-test-main.js +29 -22
- package/dist/commands/test-declared.js +29 -15
- package/dist/commands/test-e2e-guard.js +54 -54
- package/dist/commands/test-pinned-main.js +57 -56
- package/dist/commands/test-reach-cli.js +40 -32
- package/dist/commands/test-red-main.js +12 -14
- package/dist/commands/test-related-Z6YY2GFH.js +113 -0
- package/dist/commands/test-related-main.js +89 -89
- package/dist/commands/test-unit-guard-main.js +37 -37
- package/dist/commands/time-cli.js +54 -57
- package/dist/commands/time-density-cli.js +26 -29
- package/dist/commands/tree-status-cli.js +6 -8
- package/dist/commands/type-check-command.js +26 -11
- package/dist/commands/ui-routes-cli.js +5 -6
- package/dist/commands/ui-shot-cli.js +1 -1
- package/dist/commands/uninstall.js +44 -43
- package/dist/commands/unused-members-KVKZDTXD.js +329 -0
- package/dist/commands/unused-members-cli.js +27 -12
- package/dist/commands/upstream-interrupt-main.js +159 -151
- package/dist/commands/verification-gate.js +85 -86
- package/dist/commands/version-check.js +25 -8
- package/dist/hooks/chunk-3SA3FIQC.js +6869 -0
- package/dist/hooks/chunk-46PTTMGE.js +1625 -0
- package/dist/hooks/chunk-5NIBRHWG.js +77 -0
- package/dist/hooks/chunk-76QKN2K3.js +258 -0
- package/dist/hooks/chunk-CHEKMGFP.js +321 -0
- package/dist/hooks/chunk-DCILEVDR.js +5173 -0
- package/dist/hooks/chunk-HVNGIM5W.js +5092 -0
- package/dist/hooks/chunk-L6IZZ2IL.js +11219 -0
- package/dist/hooks/chunk-UZXMFOVK.js +9170 -0
- package/dist/hooks/chunk-WCJ2GWYJ.js +1381 -0
- package/dist/hooks/chunk-YRKS5ZKE.js +1915 -0
- package/dist/hooks/codex-hook-adapter.js +11 -12
- package/dist/hooks/daemon.js +2140 -1387
- package/dist/hooks/format-edited.js +6 -6
- package/dist/hooks/inputs.json +512 -488
- package/dist/hooks/pretool-guard.js +8 -8
- package/dist/hooks/run-ship-lap-P5555IG7.js +8 -0
- package/dist/hooks/session-lang.js +10 -8
- package/dist/hooks/stop-guard.js +962 -669
- package/dist/inputs.json +73 -64
- package/dist/josh.js +1029 -577
- package/dist/registry-migrate.mjs +33938 -0
- package/dist/version/index.js +4251 -175
- package/package.json +4 -1
- package/prompts/collaboration-workflow/principles.md +4 -1
- package/prompts/collaboration-workflow/rule-delivery.md +1 -1
- package/scripts/agent/codex-launch-identity.ts +70 -0
- package/scripts/auto-ok/auto-ok-cli.ts +2 -0
- package/scripts/auto-ok/auto-ok-judge-write.ts +2 -0
- package/scripts/auto-ok/auto-ok-judge.ts +3 -1
- package/scripts/backlog/backlog-arrival.ts +1 -1
- package/scripts/backlog/backlog-budget.ts +5 -2
- package/scripts/backlog/backlog-defect-priority.ts +1 -1
- package/scripts/backlog/backlog-dispatch-bound.ts +17 -0
- package/scripts/backlog/backlog-drain-flush.ts +38 -3
- package/scripts/backlog/backlog-drive-cli.ts +1 -1
- package/scripts/backlog/backlog-drive-hold.ts +28 -5
- package/scripts/backlog/backlog-drive-launch.ts +37 -15
- package/scripts/backlog/backlog-drive-listing.ts +39 -23
- package/scripts/backlog/backlog-drive-retrospective-unit.ts +3 -2
- package/scripts/backlog/backlog-drive-split-unit.ts +1 -0
- package/scripts/backlog/backlog-hold-codes.ts +7 -0
- package/scripts/backlog/backlog-hold-text.ts +14 -1
- package/scripts/backlog/backlog-measure-close.ts +6 -0
- package/scripts/backlog/backlog-next-shared.ts +20 -2
- package/scripts/backlog/backlog-next.ts +24 -3
- package/scripts/backlog/backlog-offer-cli.ts +69 -16
- package/scripts/build/build-migration.ts +25 -0
- package/scripts/build/build.ts +2 -0
- package/scripts/epic/epic-classify.ts +6 -1
- package/scripts/epic/epic-live.ts +46 -0
- package/scripts/followup/followup-failed-tests.ts +71 -10
- package/scripts/followup/followup-job-rerun.ts +2 -2
- package/scripts/gate/change-scope-action.integration.test.ts +88 -0
- package/scripts/gate/change-scope-action.ts +2 -0
- package/scripts/gate/check-related-order.ts +6 -7
- package/scripts/gate/check-related.ts +18 -8
- package/scripts/gate/core-admission.ts +17 -30
- package/scripts/gate/core-budget-poll.ts +183 -0
- package/scripts/gate/core-budget-timing.ts +1 -1
- package/scripts/gate/core-budget.ts +24 -112
- package/scripts/gate/core-wait-record.ts +52 -7
- package/scripts/gate/machine-capacity.ts +6 -2
- package/scripts/gate/metrics-totals.ts +11 -0
- package/scripts/gate/path-glob.test.ts +18 -0
- package/scripts/gate/toolchain-inputs.consumer.test.ts +36 -0
- package/scripts/gh/fix-gh-packages-logic.ts +22 -15
- package/scripts/gh/gh-request-tally.ts +4 -0
- package/scripts/hooks/bash-revert.ts +79 -31
- package/scripts/hooks/format-edited-file.ts +6 -8
- package/scripts/hooks/implementation-shell.ts +3 -2
- package/scripts/init/distributed-paths.ts +18 -5
- package/scripts/init/init-actions.ts +16 -1
- package/scripts/init/init-bootstrap.ts +2 -0
- package/scripts/init/init-logic.ts +40 -8
- package/scripts/init/init.ts +11 -3
- package/scripts/issue/defect-rate-cli.ts +19 -13
- package/scripts/issue/issue-file-batch.ts +7 -3
- package/scripts/issue/issue-file-cli.ts +19 -6
- package/scripts/issue/issue-file-main.ts +6 -1
- package/scripts/issue/issue-file-pass.ts +17 -0
- package/scripts/issue/issue-file.ts +3 -0
- package/scripts/issue/issue-not-before.ts +9 -2
- package/scripts/issue/issue-observation-gate.ts +141 -0
- package/scripts/issue/issue-observation-prime.ts +83 -0
- package/scripts/issue/issue-publication-state.ts +61 -0
- package/scripts/issue/issue-publication.ts +144 -0
- package/scripts/issue/issue-sample-prime.ts +2 -0
- package/scripts/issue/issue-search-count.ts +26 -0
- package/scripts/issue/issue-search.ts +128 -3
- package/scripts/issue/issue-spill-cli.ts +4 -0
- package/scripts/issue/upstream-interrupt-cli.ts +21 -5
- package/scripts/josh/josh-commands-ai.ts +1 -1
- package/scripts/josh/josh-commands-development.ts +1 -1
- package/scripts/josh/josh-commands-issue-write.ts +9 -0
- package/scripts/josh/josh-commands-run.ts +6 -1
- package/scripts/josh/josh-commands-ship.ts +5 -5
- package/scripts/josh/josh-run.ts +5 -2
- package/scripts/josh/session-language-cli.ts +1 -1
- package/scripts/josh/shared-cache.ts +16 -1
- package/scripts/lane/lane-await.ts +15 -0
- package/scripts/lane/lane-cli.ts +2 -0
- package/scripts/lane/lane-dispatch-dependency.ts +102 -0
- package/scripts/lane/lane-dispatch-wait-stats.ts +239 -0
- package/scripts/lane/lane-dispatch.ts +44 -5
- package/scripts/lane/lane-early-push-count.ts +21 -0
- package/scripts/lane/lane-install.ts +15 -5
- package/scripts/lane/lane-launch-cli.ts +35 -14
- package/scripts/lane/lane-ledger-kind.ts +2 -0
- package/scripts/lane/lane-ledger-schema-ship.ts +5 -1
- package/scripts/lane/lane-ledger-schema.ts +15 -1
- package/scripts/lane/lane-ledger-write.ts +4 -1
- package/scripts/lane/lane-relaunch.ts +25 -2
- package/scripts/lane/lane-state-record.ts +2 -0
- package/scripts/lane/lane-state.ts +8 -1
- package/scripts/lane/lane-stats-tables.ts +2 -0
- package/scripts/lane/openai-lane-supervisor.ts +16 -1
- package/scripts/lib/inherited-scope.ts +48 -0
- package/scripts/lint/format-steps.ts +93 -0
- package/scripts/lint/format.ts +6 -49
- package/scripts/lint/lint-related-fix.ts +35 -0
- package/scripts/lint/lint-related.ts +22 -35
- package/scripts/propagate/propagate-steps.ts +9 -4
- package/scripts/registry-migration/migrate-cli.ts +50 -0
- package/scripts/registry-migration/migrate-files.ts +154 -0
- package/scripts/registry-migration/migrate-lock.ts +147 -0
- package/scripts/registry-migration/migrate.ts +235 -0
- package/scripts/registry-migration/npm-acquisition.ts +118 -0
- package/scripts/review/review-record-cli.ts +27 -13
- package/scripts/review/review-record-pinned.ts +15 -6
- package/scripts/run/add/run-add-cli.ts +21 -3
- package/scripts/run/add/run-add.ts +26 -9
- package/scripts/run/board/run-board-header.ts +4 -5
- package/scripts/run/board/run-board-layout.ts +2 -2
- package/scripts/run/board/run-board-read.ts +7 -1
- package/scripts/run/board/run-board-reason.ts +12 -0
- package/scripts/run/board/run-board-retry-wait.ts +35 -0
- package/scripts/run/board/run-board-roots.ts +25 -2
- package/scripts/run/board/run-board-seat.ts +9 -2
- package/scripts/run/board/run-board-setup.ts +19 -11
- package/scripts/run/board/run-board-status.ts +2 -0
- package/scripts/run/board/run-board-tick.ts +7 -1
- package/scripts/run/carry/run-carry-reclaim.ts +12 -2
- package/scripts/run/carry/run-carry-session.ts +48 -0
- package/scripts/run/carry/run-carry.ts +21 -14
- package/scripts/run/cut/run-cut-resume.ts +15 -3
- package/scripts/run/cut/run-cut.ts +1 -1
- package/scripts/run/detached-launch.ts +14 -5
- package/scripts/run/early-push-record.ts +6 -2
- package/scripts/run/event/run-event-setup.ts +2 -0
- package/scripts/run/event/run-event-stream-emit.ts +27 -7
- package/scripts/run/hold/run-hold-cli.ts +40 -5
- package/scripts/run/merge/run-merge-cut-release.ts +17 -0
- package/scripts/run/merge/run-merge-human-review.ts +6 -0
- package/scripts/run/merge/run-merge-steps.ts +4 -57
- package/scripts/run/merge/run-merge-waits.ts +54 -0
- package/scripts/run/prime/run-prime-cli.ts +16 -2
- package/scripts/run/review/run-review-cli.ts +5 -7
- package/scripts/run/review/run-review-early-push.ts +19 -8
- package/scripts/run/review/run-review-join-read.ts +33 -6
- package/scripts/run/review/run-review-pinned-remaining.ts +124 -0
- package/scripts/run/review/run-review-pinned-steps.ts +7 -1
- package/scripts/run/run-halfrun-resume.ts +49 -6
- package/scripts/run/run-headless.ts +3 -0
- package/scripts/run/run-pr-return.ts +14 -5
- package/scripts/run/run-repair-attempt.ts +219 -0
- package/scripts/run/ship/run-ship-lap.ts +5 -17
- package/scripts/run/ship/run-ship-pre-detach-pinned.ts +4 -13
- package/scripts/run/ship/run-ship-scoped.ts +66 -30
- package/scripts/run/startup/run-startup-schema.ts +31 -0
- package/scripts/run/startup/run-startup-store.ts +130 -0
- package/scripts/run/startup/run-startup.ts +119 -0
- package/scripts/run/wake/run-wake-codex.ts +144 -0
- package/scripts/run/wake/run-wake-driver.ts +32 -7
- package/scripts/run/wake/run-wake-handoff.ts +9 -8
- package/scripts/run/wake/run-wake-loop.ts +23 -3
- package/scripts/run/wake/run-wake-ports.ts +17 -3
- package/scripts/run/wake/run-wake-takeover.ts +6 -3
- package/scripts/run/wake/run-wake-window.ts +4 -1
- package/scripts/run/wake/run-wake.ts +5 -0
- package/scripts/sync/sync-ai-files.ts +17 -0
- package/scripts/sync/sync-configs.ts +11 -1
- package/scripts/sync/sync.ts +5 -1
- package/scripts/test/test-related-cap.ts +7 -3
- package/scripts/test/test-related-imports.ts +92 -0
- package/scripts/test/vitest-failure-summary.ts +7 -0
- package/scripts/version/npm-registry.ts +45 -7
- package/scripts/version/upgrade-shell-command.ts +34 -2
- package/templates/workflows/ci.yml +0 -15
- package/templates/workflows/github-release.yml +0 -5
- package/dist/commands/chunk-23GH6B3D.js +0 -333
- package/dist/commands/chunk-24ZDAWML.js +0 -48
- package/dist/commands/chunk-2BB5ZR2F.js +0 -128
- package/dist/commands/chunk-2BJJUTZA.js +0 -59
- package/dist/commands/chunk-2CXT6MBR.js +0 -51
- package/dist/commands/chunk-2DJLAUYB.js +0 -109
- package/dist/commands/chunk-2EZTYLO4.js +0 -179
- package/dist/commands/chunk-2FJJYCBD.js +0 -149
- package/dist/commands/chunk-2PHOLX62.js +0 -43
- package/dist/commands/chunk-2QM72JCJ.js +0 -338
- package/dist/commands/chunk-2VRITY55.js +0 -41
- package/dist/commands/chunk-2XAH3MHV.js +0 -23
- package/dist/commands/chunk-34KZDKQJ.js +0 -304
- package/dist/commands/chunk-352KLSFX.js +0 -67
- package/dist/commands/chunk-36LOGVJ7.js +0 -38
- package/dist/commands/chunk-3AEDZZNL.js +0 -223
- package/dist/commands/chunk-3B2HEFNO.js +0 -51
- package/dist/commands/chunk-3PEXBHRN.js +0 -33
- package/dist/commands/chunk-3Z425MM3.js +0 -61
- package/dist/commands/chunk-3ZOX4G4U.js +0 -88
- package/dist/commands/chunk-452HWOJ7.js +0 -395
- package/dist/commands/chunk-475EFIJV.js +0 -178
- package/dist/commands/chunk-47UZB54M.js +0 -73
- package/dist/commands/chunk-4DN4XVPL.js +0 -716
- package/dist/commands/chunk-4DVM57T7.js +0 -86
- package/dist/commands/chunk-4EADHJVC.js +0 -247
- package/dist/commands/chunk-4HERA2GY.js +0 -95
- package/dist/commands/chunk-4JI35CVO.js +0 -70
- package/dist/commands/chunk-4L4LNWZ7.js +0 -143
- package/dist/commands/chunk-4N32QKJZ.js +0 -170
- package/dist/commands/chunk-4NRSFLG7.js +0 -185
- package/dist/commands/chunk-4OKRPAUT.js +0 -98
- package/dist/commands/chunk-4PUKDAXL.js +0 -42
- package/dist/commands/chunk-4Q64PG46.js +0 -478
- package/dist/commands/chunk-4UDTQVDD.js +0 -278
- package/dist/commands/chunk-4WR2LEZL.js +0 -123
- package/dist/commands/chunk-4ZJOC6OK.js +0 -298
- package/dist/commands/chunk-4ZQM4I7R.js +0 -533
- package/dist/commands/chunk-54X37JEJ.js +0 -170
- package/dist/commands/chunk-56KW5EOK.js +0 -85
- package/dist/commands/chunk-5CG3XU3O.js +0 -74
- package/dist/commands/chunk-5ESZLHDZ.js +0 -514
- package/dist/commands/chunk-5FBRMARM.js +0 -578
- package/dist/commands/chunk-5RG4S66L.js +0 -47
- package/dist/commands/chunk-5UJGACVN.js +0 -137
- package/dist/commands/chunk-5Y7B7FDL.js +0 -44
- package/dist/commands/chunk-5Z6E5ZUV.js +0 -89
- package/dist/commands/chunk-5ZNUH4LV.js +0 -1722
- package/dist/commands/chunk-5ZTQX7OS.js +0 -125
- package/dist/commands/chunk-66NX6EXR.js +0 -29
- package/dist/commands/chunk-66TGK5XL.js +0 -84
- package/dist/commands/chunk-6CFHLMKM.js +0 -555
- package/dist/commands/chunk-6DDK5XWK.js +0 -74
- package/dist/commands/chunk-6GQX752S.js +0 -145
- package/dist/commands/chunk-6HRRZANN.js +0 -55
- package/dist/commands/chunk-6MAZ55GF.js +0 -1241
- package/dist/commands/chunk-6OP63TBT.js +0 -78
- package/dist/commands/chunk-6Q3XUCLM.js +0 -204
- package/dist/commands/chunk-6RUWU2SB.js +0 -45
- package/dist/commands/chunk-6UCWAFQY.js +0 -245
- package/dist/commands/chunk-6WKJ3GDA.js +0 -408
- package/dist/commands/chunk-6YURRFRU.js +0 -461
- package/dist/commands/chunk-6YVURZAJ.js +0 -350
- package/dist/commands/chunk-6Z4YZG7P.js +0 -169
- package/dist/commands/chunk-77BIN247.js +0 -122
- package/dist/commands/chunk-7ABHNNY3.js +0 -529
- package/dist/commands/chunk-7C7FOKJK.js +0 -115
- package/dist/commands/chunk-7HAGC6SW.js +0 -1062
- package/dist/commands/chunk-7KKUFLH5.js +0 -56
- package/dist/commands/chunk-7LJQMM2K.js +0 -102
- package/dist/commands/chunk-7MJYLUF4.js +0 -99
- package/dist/commands/chunk-7NHZCI5Y.js +0 -704
- package/dist/commands/chunk-7OQ56DVW.js +0 -239
- package/dist/commands/chunk-7VWPGTZO.js +0 -260
- package/dist/commands/chunk-7YZXS3AK.js +0 -30
- package/dist/commands/chunk-A4HOQKOG.js +0 -85
- package/dist/commands/chunk-A6T2N7VC.js +0 -159
- package/dist/commands/chunk-AAUDI7WJ.js +0 -250
- package/dist/commands/chunk-AC26ZUG5.js +0 -259
- package/dist/commands/chunk-ACZ52JPI.js +0 -140
- package/dist/commands/chunk-AJ65WNJB.js +0 -230
- package/dist/commands/chunk-AK7SEO4Y.js +0 -177
- package/dist/commands/chunk-AKK56GNX.js +0 -205
- package/dist/commands/chunk-AKQYYHP2.js +0 -461
- package/dist/commands/chunk-ALDAS2WG.js +0 -137
- package/dist/commands/chunk-ANUTT56I.js +0 -85
- package/dist/commands/chunk-AVVMDVGO.js +0 -68
- package/dist/commands/chunk-B3M5WSGN.js +0 -72
- package/dist/commands/chunk-B7ZNIEDV.js +0 -351
- package/dist/commands/chunk-BCUDQWYK.js +0 -77
- package/dist/commands/chunk-BF6YX4HE.js +0 -70
- package/dist/commands/chunk-BHRS7HAM.js +0 -272
- package/dist/commands/chunk-BIKGPT52.js +0 -29
- package/dist/commands/chunk-BJA5U4Q7.js +0 -75
- package/dist/commands/chunk-BMKWSWWE.js +0 -126
- package/dist/commands/chunk-BMTYUJNT.js +0 -59
- package/dist/commands/chunk-BRHPRDDV.js +0 -127
- package/dist/commands/chunk-BRUBX64M.js +0 -33
- package/dist/commands/chunk-BTZJDHQT.js +0 -46
- package/dist/commands/chunk-BYFC6MD2.js +0 -72
- package/dist/commands/chunk-BYGJ3BCJ.js +0 -803
- package/dist/commands/chunk-C2SEDMZ3.js +0 -238
- package/dist/commands/chunk-C54QXJD6.js +0 -4208
- package/dist/commands/chunk-C6QSVO5K.js +0 -56
- package/dist/commands/chunk-CBAKBWSZ.js +0 -332
- package/dist/commands/chunk-CFHRNTE5.js +0 -326
- package/dist/commands/chunk-CGLLAEKZ.js +0 -110
- package/dist/commands/chunk-CHKYPF5O.js +0 -82
- package/dist/commands/chunk-CJBW6BWG.js +0 -800
- package/dist/commands/chunk-CJKPF5DJ.js +0 -156
- package/dist/commands/chunk-CKUKK7JG.js +0 -252
- package/dist/commands/chunk-CMHGDCGN.js +0 -263
- package/dist/commands/chunk-CNGTHSUS.js +0 -750
- package/dist/commands/chunk-CP2J4RV2.js +0 -3987
- package/dist/commands/chunk-CQZI7RIK.js +0 -72
- package/dist/commands/chunk-CWCKCZS6.js +0 -188
- package/dist/commands/chunk-D5HIP4HT.js +0 -289
- package/dist/commands/chunk-D6D6WQR6.js +0 -125
- package/dist/commands/chunk-D7JRJI44.js +0 -297
- package/dist/commands/chunk-D7OAU32Z.js +0 -119
- package/dist/commands/chunk-DAAX7XDS.js +0 -1208
- package/dist/commands/chunk-DBKTFB5V.js +0 -18
- package/dist/commands/chunk-DEZF7QZZ.js +0 -184
- package/dist/commands/chunk-DMD74E3F.js +0 -39
- package/dist/commands/chunk-DPJVKTO4.js +0 -41
- package/dist/commands/chunk-DXJQHJQ4.js +0 -73
- package/dist/commands/chunk-DYZOOWVW.js +0 -912
- package/dist/commands/chunk-EBI2BAKQ.js +0 -47
- package/dist/commands/chunk-EDKOSZ3K.js +0 -88
- package/dist/commands/chunk-EFDVE5P5.js +0 -121
- package/dist/commands/chunk-EGIHAEMT.js +0 -72
- package/dist/commands/chunk-EKLU6QR7.js +0 -507
- package/dist/commands/chunk-ELY76WAR.js +0 -65
- package/dist/commands/chunk-EM3HAZF6.js +0 -52
- package/dist/commands/chunk-EMTZAGT5.js +0 -51
- package/dist/commands/chunk-ENKFCOVY.js +0 -472
- package/dist/commands/chunk-ERG4QRNG.js +0 -224
- package/dist/commands/chunk-EUGNQCYK.js +0 -139
- package/dist/commands/chunk-EW4NPUMQ.js +0 -363
- package/dist/commands/chunk-EWVR5AEX.js +0 -140
- package/dist/commands/chunk-EXDFKKMH.js +0 -113
- package/dist/commands/chunk-EXWB34R2.js +0 -238
- package/dist/commands/chunk-EYMPBHDN.js +0 -61
- package/dist/commands/chunk-EZ7IPKIH.js +0 -20
- package/dist/commands/chunk-EZSO25UZ.js +0 -80
- package/dist/commands/chunk-F6IQHZYY.js +0 -94
- package/dist/commands/chunk-FDS65XOJ.js +0 -212
- package/dist/commands/chunk-FFHEGWPK.js +0 -91
- package/dist/commands/chunk-FGL6DBZU.js +0 -71
- package/dist/commands/chunk-FHFWNNUC.js +0 -144
- package/dist/commands/chunk-FIUCHMCF.js +0 -32
- package/dist/commands/chunk-FJX7AENO.js +0 -74
- package/dist/commands/chunk-FKZ5E4JD.js +0 -97
- package/dist/commands/chunk-FMZWRDKH.js +0 -302
- package/dist/commands/chunk-FOKCRIAN.js +0 -67
- package/dist/commands/chunk-FQGWO2ZH.js +0 -43
- package/dist/commands/chunk-FROACLVU.js +0 -525
- package/dist/commands/chunk-FURNDIT3.js +0 -34
- package/dist/commands/chunk-FVDQNMP6.js +0 -93
- package/dist/commands/chunk-FVVZIJUC.js +0 -425
- package/dist/commands/chunk-FWU3H4TX.js +0 -17
- package/dist/commands/chunk-G3HBYHFA.js +0 -16
- package/dist/commands/chunk-G4E4M2P4.js +0 -299
- package/dist/commands/chunk-G5KSL2Q2.js +0 -151
- package/dist/commands/chunk-G6XC7V6Y.js +0 -58
- package/dist/commands/chunk-GCPP5XIG.js +0 -90
- package/dist/commands/chunk-GITT5A5A.js +0 -198
- package/dist/commands/chunk-GJYMI2CM.js +0 -48
- package/dist/commands/chunk-GLC47H7I.js +0 -285
- package/dist/commands/chunk-GUR54ELE.js +0 -328
- package/dist/commands/chunk-GW4UWR3O.js +0 -126
- package/dist/commands/chunk-GY4DMCKS.js +0 -306
- package/dist/commands/chunk-H6JQRHDC.js +0 -80
- package/dist/commands/chunk-HATKF6VX.js +0 -173
- package/dist/commands/chunk-HG2NZQD5.js +0 -135
- package/dist/commands/chunk-HH3CVIFU.js +0 -93
- package/dist/commands/chunk-HHMMGDMP.js +0 -469
- package/dist/commands/chunk-HI5WPM6C.js +0 -127
- package/dist/commands/chunk-HQGNXR6I.js +0 -245
- package/dist/commands/chunk-HTIDHEEN.js +0 -108
- package/dist/commands/chunk-HVCQYZVD.js +0 -38
- package/dist/commands/chunk-HWEZRNPL.js +0 -66
- package/dist/commands/chunk-HX3FFIO5.js +0 -74
- package/dist/commands/chunk-HXDTA5VU.js +0 -208
- package/dist/commands/chunk-I2KCGKJI.js +0 -107
- package/dist/commands/chunk-I63RNFFR.js +0 -213
- package/dist/commands/chunk-IAD4WLLI.js +0 -98
- package/dist/commands/chunk-IB5TT73I.js +0 -177
- package/dist/commands/chunk-IBAYXCMU.js +0 -156
- package/dist/commands/chunk-IF3EIFK4.js +0 -7515
- package/dist/commands/chunk-IGDJNXX2.js +0 -49
- package/dist/commands/chunk-ILGPZ47M.js +0 -33
- package/dist/commands/chunk-IYJEBWW5.js +0 -44
- package/dist/commands/chunk-J22PSIXR.js +0 -418
- package/dist/commands/chunk-J66YBAAM.js +0 -161
- package/dist/commands/chunk-J6WKZRV2.js +0 -391
- package/dist/commands/chunk-J7IO3AYH.js +0 -179
- package/dist/commands/chunk-JAKC2BHX.js +0 -88
- package/dist/commands/chunk-JCAQ7B6J.js +0 -124
- package/dist/commands/chunk-JHN6RCE6.js +0 -123
- package/dist/commands/chunk-JIGBNCDR.js +0 -88
- package/dist/commands/chunk-JJHWTFWQ.js +0 -76
- package/dist/commands/chunk-JJRKTWLK.js +0 -64
- package/dist/commands/chunk-JKOGWGQM.js +0 -92
- package/dist/commands/chunk-JM6EVOFN.js +0 -172
- package/dist/commands/chunk-JQXPLMCO.js +0 -81
- package/dist/commands/chunk-JV24VP2O.js +0 -81
- package/dist/commands/chunk-JVKXJ763.js +0 -45
- package/dist/commands/chunk-K275REYP.js +0 -37
- package/dist/commands/chunk-K4G3HOKS.js +0 -105
- package/dist/commands/chunk-K64EIHD2.js +0 -138
- package/dist/commands/chunk-KB3OQWDT.js +0 -71
- package/dist/commands/chunk-KCFOP5RI.js +0 -1310
- package/dist/commands/chunk-KGE4AS2Y.js +0 -134
- package/dist/commands/chunk-KIILCKQR.js +0 -220
- package/dist/commands/chunk-KK2SL42W.js +0 -241
- package/dist/commands/chunk-KKIMVXAP.js +0 -280
- package/dist/commands/chunk-KODXWMBX.js +0 -77
- package/dist/commands/chunk-KPSKWTOS.js +0 -208
- package/dist/commands/chunk-KVHNQHX3.js +0 -100
- package/dist/commands/chunk-KWYQR5MK.js +0 -269
- package/dist/commands/chunk-KXHXMERX.js +0 -214
- package/dist/commands/chunk-KZ5BBBMO.js +0 -271
- package/dist/commands/chunk-KZ7HD37E.js +0 -121
- package/dist/commands/chunk-KZSM5M5P.js +0 -89
- package/dist/commands/chunk-KZZWPUJW.js +0 -25
- package/dist/commands/chunk-L7DAL54N.js +0 -347
- package/dist/commands/chunk-LAR76BFA.js +0 -114
- package/dist/commands/chunk-LB557AHJ.js +0 -192
- package/dist/commands/chunk-LJXKVLYI.js +0 -229
- package/dist/commands/chunk-LOOFYHUM.js +0 -773
- package/dist/commands/chunk-LQXFVZTS.js +0 -13
- package/dist/commands/chunk-LT7QSHR4.js +0 -995
- package/dist/commands/chunk-LUXWDMKI.js +0 -426
- package/dist/commands/chunk-LWAXXZPS.js +0 -118
- package/dist/commands/chunk-LX7TIEMI.js +0 -1612
- package/dist/commands/chunk-LZ5QXE5N.js +0 -244
- package/dist/commands/chunk-M4UV3BEV.js +0 -313
- package/dist/commands/chunk-M6JDU5EK.js +0 -133
- package/dist/commands/chunk-MDLOETXL.js +0 -211
- package/dist/commands/chunk-MFBNNTBM.js +0 -44
- package/dist/commands/chunk-MGF64OHV.js +0 -32
- package/dist/commands/chunk-MI2OS6TL.js +0 -132
- package/dist/commands/chunk-MLW4S35K.js +0 -389
- package/dist/commands/chunk-MN425CU6.js +0 -63
- package/dist/commands/chunk-MPGJ4ONJ.js +0 -634
- package/dist/commands/chunk-MRORPFSO.js +0 -402
- package/dist/commands/chunk-MUGTOJUL.js +0 -319
- package/dist/commands/chunk-MVHPRYHE.js +0 -91
- package/dist/commands/chunk-MWO6FOSZ.js +0 -393
- package/dist/commands/chunk-MXC4IBZ7.js +0 -104
- package/dist/commands/chunk-N7QTMTST.js +0 -210
- package/dist/commands/chunk-NDBX7LSS.js +0 -32
- package/dist/commands/chunk-NEGJ77RV.js +0 -173
- package/dist/commands/chunk-NEGRE5VW.js +0 -101
- package/dist/commands/chunk-NFPD2P3V.js +0 -53
- package/dist/commands/chunk-NHIW7JE6.js +0 -335
- package/dist/commands/chunk-NILSN7A4.js +0 -158
- package/dist/commands/chunk-NOLFSPOB.js +0 -74
- package/dist/commands/chunk-NSAVEXVR.js +0 -353
- package/dist/commands/chunk-NT67QTZO.js +0 -65
- package/dist/commands/chunk-NU7W6QGT.js +0 -155
- package/dist/commands/chunk-NYWGJLBU.js +0 -19
- package/dist/commands/chunk-OAAVY2JK.js +0 -49
- package/dist/commands/chunk-OGS2DK7I.js +0 -47
- package/dist/commands/chunk-OHNP3QL2.js +0 -186
- package/dist/commands/chunk-OIPV3PWW.js +0 -870
- package/dist/commands/chunk-OIX2363L.js +0 -16
- package/dist/commands/chunk-OJ65BZBV.js +0 -646
- package/dist/commands/chunk-OKZWEVR4.js +0 -352
- package/dist/commands/chunk-OL6IF4JC.js +0 -20
- package/dist/commands/chunk-OMPRILFH.js +0 -29
- package/dist/commands/chunk-OOWGH2RG.js +0 -85
- package/dist/commands/chunk-OP2RFVLS.js +0 -102
- package/dist/commands/chunk-ORKVN2LO.js +0 -56
- package/dist/commands/chunk-OSBWXZJ4.js +0 -492
- package/dist/commands/chunk-OT3UMEWK.js +0 -47
- package/dist/commands/chunk-OVWPZDWP.js +0 -64
- package/dist/commands/chunk-OWYK2BEJ.js +0 -1222
- package/dist/commands/chunk-OX3VQLV2.js +0 -488
- package/dist/commands/chunk-OZJP77UM.js +0 -103
- package/dist/commands/chunk-OZZWRJQI.js +0 -246
- package/dist/commands/chunk-P3H3DKTE.js +0 -69
- package/dist/commands/chunk-P4D5RESF.js +0 -88
- package/dist/commands/chunk-P4KIQRSL.js +0 -119
- package/dist/commands/chunk-P5SOYWH2.js +0 -37
- package/dist/commands/chunk-P7FPXAHP.js +0 -29
- package/dist/commands/chunk-PE7B7242.js +0 -84
- package/dist/commands/chunk-PFO7EYAP.js +0 -45
- package/dist/commands/chunk-PHLOTUB7.js +0 -366
- package/dist/commands/chunk-PTNQCCIB.js +0 -41
- package/dist/commands/chunk-PTZEFQUX.js +0 -211
- package/dist/commands/chunk-Q5Q2QYVU.js +0 -112
- package/dist/commands/chunk-Q7EEIOAD.js +0 -120
- package/dist/commands/chunk-QABRNGQV.js +0 -88
- package/dist/commands/chunk-QAHFPCFR.js +0 -50
- package/dist/commands/chunk-QDFVVRQP.js +0 -92
- package/dist/commands/chunk-QGAERR7D.js +0 -99
- package/dist/commands/chunk-QHWJJ6X5.js +0 -53
- package/dist/commands/chunk-QJRVDE7T.js +0 -307
- package/dist/commands/chunk-QMDKDQKW.js +0 -114
- package/dist/commands/chunk-QOSC5RKD.js +0 -18
- package/dist/commands/chunk-QQ4CIYMF.js +0 -132
- package/dist/commands/chunk-QV5FKMOU.js +0 -80
- package/dist/commands/chunk-QWWTC3XR.js +0 -109
- package/dist/commands/chunk-QXQ56E56.js +0 -27
- package/dist/commands/chunk-R54Z2Z3X.js +0 -114
- package/dist/commands/chunk-R6QE5VJG.js +0 -46
- package/dist/commands/chunk-RG53UFNW.js +0 -418
- package/dist/commands/chunk-RGGEQM6G.js +0 -140
- package/dist/commands/chunk-RH6ZWJOA.js +0 -77
- package/dist/commands/chunk-RHKCWJQX.js +0 -62
- package/dist/commands/chunk-RKIAX4DZ.js +0 -191
- package/dist/commands/chunk-RLBFEHHC.js +0 -300
- package/dist/commands/chunk-RN2YDNLF.js +0 -229
- package/dist/commands/chunk-RRAIRS2T.js +0 -54
- package/dist/commands/chunk-RS764ZMU.js +0 -46
- package/dist/commands/chunk-RUIBQMOV.js +0 -38
- package/dist/commands/chunk-RUQY5TS3.js +0 -83
- package/dist/commands/chunk-RVUJ6F5L.js +0 -181
- package/dist/commands/chunk-RW64VHEB.js +0 -130
- package/dist/commands/chunk-RXYMJPJB.js +0 -114
- package/dist/commands/chunk-S4M6UWR2.js +0 -103
- package/dist/commands/chunk-SASX3W2M.js +0 -99
- package/dist/commands/chunk-SFNBUB6D.js +0 -110
- package/dist/commands/chunk-SJ2ZN575.js +0 -90
- package/dist/commands/chunk-SP7DKYGU.js +0 -1263
- package/dist/commands/chunk-SSL6A3Y4.js +0 -165
- package/dist/commands/chunk-SVAKCXZ7.js +0 -44
- package/dist/commands/chunk-SYOXIKB7.js +0 -705
- package/dist/commands/chunk-SZG5HDNP.js +0 -321
- package/dist/commands/chunk-T25S4QHL.js +0 -52
- package/dist/commands/chunk-T4F33UKZ.js +0 -114
- package/dist/commands/chunk-T4UYEHWG.js +0 -50
- package/dist/commands/chunk-TAEGXID2.js +0 -58
- package/dist/commands/chunk-TCBUX52E.js +0 -701
- package/dist/commands/chunk-TEPYEUYG.js +0 -585
- package/dist/commands/chunk-TFLHYC2F.js +0 -141
- package/dist/commands/chunk-TJKM56WJ.js +0 -109
- package/dist/commands/chunk-TLAB552K.js +0 -445
- package/dist/commands/chunk-TP6L4W3W.js +0 -82
- package/dist/commands/chunk-TR7WWYD5.js +0 -60
- package/dist/commands/chunk-TVZXG4Y4.js +0 -197
- package/dist/commands/chunk-TYNH2R66.js +0 -1150
- package/dist/commands/chunk-U3IVVR4W.js +0 -33
- package/dist/commands/chunk-U5P6G3UV.js +0 -77
- package/dist/commands/chunk-U7XU5RG3.js +0 -86
- package/dist/commands/chunk-UKBBWMLE.js +0 -1189
- package/dist/commands/chunk-ULVVGGTY.js +0 -64
- package/dist/commands/chunk-UNMSZGSG.js +0 -269
- package/dist/commands/chunk-URDT2O2K.js +0 -36
- package/dist/commands/chunk-UTHUX7VU.js +0 -88
- package/dist/commands/chunk-V4Z7G4UH.js +0 -73
- package/dist/commands/chunk-V5FD7DVV.js +0 -48
- package/dist/commands/chunk-VCPGFBMN.js +0 -655
- package/dist/commands/chunk-VGPIQNDB.js +0 -24
- package/dist/commands/chunk-VJE3RJAX.js +0 -23
- package/dist/commands/chunk-VK6D5CWA.js +0 -161
- package/dist/commands/chunk-VOF3N4WO.js +0 -114
- package/dist/commands/chunk-VQVPAVQ3.js +0 -45
- package/dist/commands/chunk-VV4TQYGD.js +0 -38
- package/dist/commands/chunk-W3FX7FYN.js +0 -84
- package/dist/commands/chunk-W7DRUOF7.js +0 -122
- package/dist/commands/chunk-WAEN2RTT.js +0 -161
- package/dist/commands/chunk-WCEUMOKK.js +0 -84
- package/dist/commands/chunk-WJ4NEDNI.js +0 -288
- package/dist/commands/chunk-WMMGXJXP.js +0 -92
- package/dist/commands/chunk-WOFLW2LX.js +0 -26
- package/dist/commands/chunk-WTH6NTXU.js +0 -128
- package/dist/commands/chunk-WWVYEHQT.js +0 -272
- package/dist/commands/chunk-X3TNPALI.js +0 -213
- package/dist/commands/chunk-XC6GG5JR.js +0 -78
- package/dist/commands/chunk-XDF25GSU.js +0 -536
- package/dist/commands/chunk-XFPEUYDV.js +0 -67
- package/dist/commands/chunk-XFWI6WHH.js +0 -60
- package/dist/commands/chunk-XGMRAKSL.js +0 -85
- package/dist/commands/chunk-XHGWMD3L.js +0 -104
- package/dist/commands/chunk-XKSUBUIH.js +0 -116
- package/dist/commands/chunk-XPBF5DG3.js +0 -419
- package/dist/commands/chunk-XUMYPESL.js +0 -160
- package/dist/commands/chunk-XXC32PVL.js +0 -541
- package/dist/commands/chunk-XXN2EZBY.js +0 -133
- package/dist/commands/chunk-XXNEY4B3.js +0 -110
- package/dist/commands/chunk-Y27PTXXI.js +0 -258
- package/dist/commands/chunk-Y4EBUI6M.js +0 -237
- package/dist/commands/chunk-YAU3LYNF.js +0 -60
- package/dist/commands/chunk-YDURQICF.js +0 -204
- package/dist/commands/chunk-YGFOGA7C.js +0 -1153
- package/dist/commands/chunk-YHJ2AJMA.js +0 -66
- package/dist/commands/chunk-YIA6FC3K.js +0 -78
- package/dist/commands/chunk-YM77CF4D.js +0 -183
- package/dist/commands/chunk-YNPRJCEO.js +0 -81
- package/dist/commands/chunk-YTBQAD5W.js +0 -170
- package/dist/commands/chunk-YVH2OLDS.js +0 -104
- package/dist/commands/chunk-Z3WGHIVB.js +0 -122
- package/dist/commands/chunk-ZAAHZY2A.js +0 -19
- package/dist/commands/chunk-ZBZ5DDCH.js +0 -1866
- package/dist/commands/chunk-ZLRUHSOP.js +0 -48
- package/dist/commands/chunk-ZNR75OXP.js +0 -444
- package/dist/commands/chunk-ZSOR4ISJ.js +0 -75
- package/dist/commands/chunk-ZVAIIHBE.js +0 -63
- package/dist/commands/chunk-ZYFHYQA7.js +0 -51
- package/dist/commands/chunk-ZZFFSQF4.js +0 -218
- package/dist/commands/chunk-ZZULXNC2.js +0 -47
- package/dist/commands/chunk-ZZXO6TFH.js +0 -232
- package/dist/commands/run-ship-lap-W5T2VHFC.js +0 -30
- package/dist/commands/test-related-ZCNC46MS.js +0 -113
- package/dist/commands/unused-members-STULPRBU.js +0 -331
- package/dist/hooks/chunk-5CUXGQT6.js +0 -8353
- package/dist/hooks/chunk-5R5YFQR5.js +0 -931
- package/dist/hooks/chunk-6RLY27FT.js +0 -232
- package/dist/hooks/chunk-6YGMIODI.js +0 -86
- package/dist/hooks/chunk-AO4TOV4V.js +0 -5026
- package/dist/hooks/chunk-FOW4B7OQ.js +0 -1795
- package/dist/hooks/chunk-G5WSPYJ6.js +0 -5663
- package/dist/hooks/chunk-HHIVWGHX.js +0 -6869
- package/dist/hooks/chunk-IURJANNZ.js +0 -1082
- package/dist/hooks/chunk-OV22V63P.js +0 -10980
- package/dist/hooks/chunk-SXABK6UV.js +0 -321
- package/dist/hooks/run-ship-lap-VCEOUHQI.js +0 -8
|
@@ -1,4208 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
gate_plan
|
|
3
|
-
} from "./chunk-HQGNXR6I.js";
|
|
4
|
-
import {
|
|
5
|
-
issue_body_keys
|
|
6
|
-
} from "./chunk-KXK2A2HB.js";
|
|
7
|
-
import {
|
|
8
|
-
GATE_COMMAND,
|
|
9
|
-
LINT_RULE_WORKERS,
|
|
10
|
-
OPTIONAL_ENV_FILE_FLAGS
|
|
11
|
-
} from "./chunk-TBIX5FRN.js";
|
|
12
|
-
import {
|
|
13
|
-
ports
|
|
14
|
-
} from "./chunk-IGD6QJPH.js";
|
|
15
|
-
import {
|
|
16
|
-
core_weights
|
|
17
|
-
} from "./chunk-ENFPR7J2.js";
|
|
18
|
-
|
|
19
|
-
// scripts/josh/josh-commands-backlog.ts
|
|
20
|
-
var EXCLUDE = "--exclude <N>";
|
|
21
|
-
var JUST_MERGED = "skip the issue just merged";
|
|
22
|
-
var EXCLUDE_1630 = "--exclude 1630";
|
|
23
|
-
var BUDGET = '--answer candidates --started "$started" --active "$active"';
|
|
24
|
-
var BACKLOG_COMMANDS = {
|
|
25
|
-
// Started from a terminal: the `backlogrun` keyword's launcher, and the board.
|
|
26
|
-
backlogrun: {
|
|
27
|
-
script: "scripts/backlog/backlogrun-cli.ts",
|
|
28
|
-
description: "Start a backlogrun in the background and show its board; with one already running, only show the board, or replace it when it is idle and the invocation differs; --stop stops it; --restart replaces its processes and keeps its record",
|
|
29
|
-
category: "AI tools",
|
|
30
|
-
reference: [
|
|
31
|
-
"[<n>...] [--only] [--max <n>] [--idle <minutes>] [--agent claude|codex] | --stop | --restart",
|
|
32
|
-
"developer",
|
|
33
|
-
["files", "network", "processes"]
|
|
34
|
-
],
|
|
35
|
-
usage: {
|
|
36
|
-
examples: [
|
|
37
|
-
{ arguments: "", note: "start with the configured provider, then show the board" },
|
|
38
|
-
{ arguments: "3437 --only", note: "the arguments go to backlogrun as typed" },
|
|
39
|
-
{ arguments: "--agent codex", note: "start in Codex" },
|
|
40
|
-
{ arguments: "--stop", note: "stop the run in this repository" },
|
|
41
|
-
{ arguments: "--restart", note: "replace the run's processes, keeping its record" }
|
|
42
|
-
]
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
"backlog:next": {
|
|
46
|
-
script: "scripts/backlog/backlog-next-main.ts",
|
|
47
|
-
description: "Order the whole opted-in backlog: auto-ok issues and the descendants of auto-ok epics, transitively through nested epics",
|
|
48
|
-
category: "AI tools",
|
|
49
|
-
reference: ["[--exclude <n>[,<n>...]]", "automation", ["network"]],
|
|
50
|
-
usage: {
|
|
51
|
-
examples: [{ arguments: "" }, { arguments: EXCLUDE_1630, note: JUST_MERGED }],
|
|
52
|
-
flags: [
|
|
53
|
-
{
|
|
54
|
-
names: [EXCLUDE],
|
|
55
|
-
description: "drop issues from every bucket; comma-separated, repeatable."
|
|
56
|
-
}
|
|
57
|
-
]
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
"backlog:offer": {
|
|
61
|
-
script: "scripts/backlog/backlog-offer-main.ts",
|
|
62
|
-
description: "Collapse a backlogrun loop-head event into one call: read backlog:next, ask backlog:budget, return the verdict and any issues to start",
|
|
63
|
-
category: "AI tools",
|
|
64
|
-
reference: ["[options]", "automation", ["files", "git", "network", "processes"]],
|
|
65
|
-
usage: {
|
|
66
|
-
examples: [{ arguments: '--started "$started" --active "$active" --running 2 --retries 1' }]
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
"backlog:drive": {
|
|
70
|
-
script: "scripts/backlog/backlog-drive-cli.ts",
|
|
71
|
-
description: "Drive backlogrun through offer, launch and merge; restore this run\u2019s lanes and report when complete",
|
|
72
|
-
category: "AI tools",
|
|
73
|
-
reference: ["[--owner <pid>] [options]", "automation", ["network"]],
|
|
74
|
-
usage: {
|
|
75
|
-
examples: [{ arguments: "[--max <n>] [--idle <minutes>] [--only]" }]
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
"backlog:triage": {
|
|
79
|
-
script: "scripts/backlog/backlog-triage-cli.ts",
|
|
80
|
-
description: "Run a parent triage pass, decide solo/lane from three conditions, or apply one issue's verdict",
|
|
81
|
-
category: "AI tools",
|
|
82
|
-
reference: [
|
|
83
|
-
"--pass [--exclude <n>] | --decide --defect yes|no|unknown --verification yes|no|unknown --every-run yes|no|unknown | --apply <n> [--lane | --solo --defect yes --verification yes --every-run yes] [--blocked-by <m> | --unblock <m>] --reason <text> [--clear] | --apply <n> --adopt <k> --reason <text> [--done <text>]",
|
|
84
|
-
"automation",
|
|
85
|
-
["files", "network"]
|
|
86
|
-
],
|
|
87
|
-
usage: {
|
|
88
|
-
examples: [
|
|
89
|
-
{ arguments: "--pass" },
|
|
90
|
-
{ arguments: "--decide --defect yes --verification yes --every-run no" },
|
|
91
|
-
{ arguments: '--apply 912 --lane --reason "<why>"' },
|
|
92
|
-
{
|
|
93
|
-
arguments: '--apply 913 --solo --defect yes --verification yes --every-run yes --reason "<why>" --clear'
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
arguments: '--apply 914 --blocked-by 912 --reason "<why>"'
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
arguments: '--apply 914 --unblock 912 --reason "<why>"'
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
arguments: '--apply 915 --adopt 1 --reason "<why>"'
|
|
103
|
-
}
|
|
104
|
-
],
|
|
105
|
-
flags: [
|
|
106
|
-
{
|
|
107
|
-
names: ["--pass [--exclude <N>]"],
|
|
108
|
-
description: "settles mechanical lane candidates and prints one next command; exclude decisions kept parked. Each park's recommendation and tier go to stderr, with its `--adopt` command unless no pick or a tier C pick. Failed or incomplete reads exit 1."
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
names: ["--decide --defect <answer> --verification <answer> --every-run <answer>"],
|
|
112
|
-
description: "yes/no/unknown evidence: three yes \u2192 run:solo; any no \u2192 run:lane; otherwise judge. Read-only."
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
names: ["--apply <N> --lane|--solo --reason <text>"],
|
|
116
|
-
description: "comments the reason, then applies the run label (`auto-ok:judge --apply`)."
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
names: ["--clear"],
|
|
120
|
-
description: "clears the park (`run:park <N> --clear`) only when the issue answers its decision question."
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
names: ["--blocked-by <M>"],
|
|
124
|
-
description: "records the native `blocked-by` relation on `#M` before the comment and the run label, declared in the epic tracking `#N` as `run:pause` does; it stands in for the run label or goes with it."
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
names: ["--unblock <M>"],
|
|
128
|
-
description: "removes it instead, with the tracking epic's `#M -> #N` declaration (`epic --remove`'s path); `--blocked-by` restores it. A failed write is named, exit 1."
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
names: ["--adopt <k>"],
|
|
132
|
-
description: "takes option `<k>` of the child's latest park in one call: records the decision in its one tracking epic (`epic --decide`'s path), clears the park, then `run:add <N> --retry`. A park with no recommendation, an unlisted or tier C option, no single tracking epic, or no backlogrun running here is refused before any write."
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
names: ["--done <text>"],
|
|
136
|
-
description: "what the parent did for an option whose `\u5FC5\u8981\u306A\u6A29\u9650` starts with `\u89AA` (e.g. `\u89AA\u30BB\u30C3\u30B7\u30E7\u30F3`): the parent carries the option out first, then adopts it with `--done <what was done>`, recorded with the decision. Without it such an option is refused before any write, so the child stays parked; on any other option it is refused."
|
|
137
|
-
}
|
|
138
|
-
]
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
"backlog:plan": {
|
|
142
|
-
script: "scripts/backlog/backlog-plan-cli.ts",
|
|
143
|
-
description: "Print the whole backlog as a plan: ready now, waiting on what, waiting on a person, out of scope",
|
|
144
|
-
category: "AI tools",
|
|
145
|
-
reference: [
|
|
146
|
-
"[issue...] [--only] [--waves] [--exclude <n>[,<n>...]]",
|
|
147
|
-
"automation",
|
|
148
|
-
["network"]
|
|
149
|
-
],
|
|
150
|
-
usage: {
|
|
151
|
-
examples: [
|
|
152
|
-
{ arguments: "" },
|
|
153
|
-
{ arguments: EXCLUDE_1630, note: "after #1630 merged" },
|
|
154
|
-
{ arguments: "--waves", note: "the run order, wave by wave" }
|
|
155
|
-
],
|
|
156
|
-
flags: [
|
|
157
|
-
{ names: [EXCLUDE], description: "same exclusion as `backlog:next`." },
|
|
158
|
-
{
|
|
159
|
-
names: ["--waves"],
|
|
160
|
-
description: "print the order the run takes, wave by wave, assuming each wave merges before the next. Read-only."
|
|
161
|
-
}
|
|
162
|
-
]
|
|
163
|
-
}
|
|
164
|
-
},
|
|
165
|
-
"backlog:budget": {
|
|
166
|
-
script: "scripts/backlog/backlog-budget-main.ts",
|
|
167
|
-
description: "Say whether a backlogrun may start more work, keep watching, or finish",
|
|
168
|
-
category: "AI tools",
|
|
169
|
-
reference: ["[options]", "automation", ["none"]],
|
|
170
|
-
usage: {
|
|
171
|
-
examples: [
|
|
172
|
-
{ arguments: BUDGET },
|
|
173
|
-
{ arguments: '--answer exhausted --started "$started" --active "$active" --idle 60' },
|
|
174
|
-
{ arguments: `${BUDGET} --merged 3 --running 2 --max 5` }
|
|
175
|
-
],
|
|
176
|
-
flags: [
|
|
177
|
-
{
|
|
178
|
-
names: ["--answer <candidates|exhausted|blocked|parked|unreadable|untriaged>"],
|
|
179
|
-
description: "`backlog:next`'s answer, mapped."
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
names: ["--started", "--active"],
|
|
183
|
-
description: "when the invocation began / when it last had work (required unless the watch is off)."
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
names: ["--idle <minutes>"],
|
|
187
|
-
description: "once nothing can proceed, keep polling this long, counted from `--active` (default 480, 8 hours; `--idle 0` turns the watch off)."
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
names: ["--max <count>"],
|
|
191
|
-
description: "issues one invocation may take (default unlimited); `--merged` and `--running` count against it."
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
names: ["--json"],
|
|
195
|
-
description: 'collapse verdict and reason into `{"budget": "<verdict>", "reason": "\u2026"}`.'
|
|
196
|
-
}
|
|
197
|
-
]
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
|
|
202
|
-
// scripts/josh/josh-commands-document.ts
|
|
203
|
-
var DOCUMENT_COMMANDS = {
|
|
204
|
-
"doc:section": {
|
|
205
|
-
script: "scripts/document/document-section-main.ts",
|
|
206
|
-
description: 'Print one section of a markdown document, for a `file.md` \u2192 "Heading" reference',
|
|
207
|
-
category: "AI tools",
|
|
208
|
-
reference: ["<file> <heading>", "automation", ["none"]],
|
|
209
|
-
usage: {
|
|
210
|
-
examples: [
|
|
211
|
-
{ arguments: '<file.md> "<heading>"' },
|
|
212
|
-
{ arguments: 'backlogrun.md "The hand-off"' }
|
|
213
|
-
]
|
|
214
|
-
}
|
|
215
|
-
},
|
|
216
|
-
"code:symbol": {
|
|
217
|
-
script: "scripts/code/code-symbol-cli.ts",
|
|
218
|
-
description: "Print one TypeScript declaration by name, numbered, or list where a name is declared",
|
|
219
|
-
category: "AI tools",
|
|
220
|
-
reference: ["<file> <name> | <name>", "automation", ["none"]],
|
|
221
|
-
// Parses the repository's sources and prints, so a consultation session can run it.
|
|
222
|
-
is_read_only: true,
|
|
223
|
-
usage: {
|
|
224
|
-
examples: [
|
|
225
|
-
{ arguments: "<file> <name>", note: "the declaration, its comment block included" },
|
|
226
|
-
{ arguments: "<name>", note: "every file:line that declares it" },
|
|
227
|
-
{ arguments: "scripts/code/code-symbol.ts declarations" }
|
|
228
|
-
]
|
|
229
|
-
}
|
|
230
|
-
},
|
|
231
|
-
"read:set": {
|
|
232
|
-
script: "scripts/document/read-set-cli.ts",
|
|
233
|
-
description: "Print what an entry point reads before it starts, and what that read costs",
|
|
234
|
-
category: "AI tools",
|
|
235
|
-
reference: ["[<entry>] [--json | --bytes]", "automation", ["none"]],
|
|
236
|
-
// Reads the repository's documents and prints, so a consultation session can run it.
|
|
237
|
-
is_read_only: true,
|
|
238
|
-
usage: {
|
|
239
|
-
examples: [
|
|
240
|
-
{ arguments: "", note: "every entry point" },
|
|
241
|
-
{ arguments: "backlogrun", note: "one of them" },
|
|
242
|
-
{ arguments: "backlogrun --json" },
|
|
243
|
-
{ arguments: "fullrun --bytes", note: "its total read bytes alone, as the last line" }
|
|
244
|
-
]
|
|
245
|
-
}
|
|
246
|
-
},
|
|
247
|
-
"doc:read": {
|
|
248
|
-
script: "scripts/document/document-read-cli.ts",
|
|
249
|
-
description: "Read a whole document safely: print it, or point at the Read tool when over the Bash cap",
|
|
250
|
-
category: "AI tools",
|
|
251
|
-
reference: ["<file>", "automation", ["none"]],
|
|
252
|
-
usage: {
|
|
253
|
-
examples: [
|
|
254
|
-
{ arguments: "CLAUDE.md", note: "under the cap: prints the document" },
|
|
255
|
-
{ arguments: "backlogrun.md", note: "over the cap: prints a directive, no content" }
|
|
256
|
-
]
|
|
257
|
-
}
|
|
258
|
-
},
|
|
259
|
-
"read:files": {
|
|
260
|
-
script: "scripts/document/read-files-cli.ts",
|
|
261
|
-
description: "Read several files in one call so edit targets fold into one turn",
|
|
262
|
-
category: "AI tools",
|
|
263
|
-
reference: ["<path> [<path> ...]", "automation", ["none"]],
|
|
264
|
-
usage: {
|
|
265
|
-
examples: [
|
|
266
|
-
{
|
|
267
|
-
arguments: "a.ts b.ts c.ts",
|
|
268
|
-
note: "under the cap: prints each file under its own header"
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
arguments: "a.ts big.ts",
|
|
272
|
-
note: "over the cap: prints a directive to Read them in one turn, no content"
|
|
273
|
-
}
|
|
274
|
-
]
|
|
275
|
-
}
|
|
276
|
-
},
|
|
277
|
-
"edit:files": {
|
|
278
|
-
script: "scripts/document/edit-files-cli.ts",
|
|
279
|
-
description: "Apply several content-addressed edits from a plan in one call",
|
|
280
|
-
category: "AI tools",
|
|
281
|
-
reference: ["<plan-path | ->", "automation", ["none"]],
|
|
282
|
-
usage: {
|
|
283
|
-
examples: [
|
|
284
|
-
{
|
|
285
|
-
arguments: "plan.txt",
|
|
286
|
-
note: "applies every block in the plan, one line per edit reporting the outcome"
|
|
287
|
-
},
|
|
288
|
-
{ arguments: "- <<'EDITS'", note: "plan from stdin, then EDITS" }
|
|
289
|
-
]
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
};
|
|
293
|
-
|
|
294
|
-
// scripts/josh/josh-commands-epic.ts
|
|
295
|
-
var REPO = "--repo <owner/repo>";
|
|
296
|
-
var EXCLUDE2 = "--exclude <N>";
|
|
297
|
-
var JUST_MERGED2 = "skip the issue just merged";
|
|
298
|
-
var EPIC_COMMANDS = {
|
|
299
|
-
epic: {
|
|
300
|
-
script: "scripts/epic/epic-main.ts",
|
|
301
|
-
// `--notify` sends the `planning` Telegram (epic-notify.ts), which reads `.env`.
|
|
302
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
303
|
-
description: "Create an epic issue from its child issue numbers",
|
|
304
|
-
category: "AI tools",
|
|
305
|
-
reference: ["<title> <issue...> [--ordered]", "automation", ["network"]],
|
|
306
|
-
usage: {
|
|
307
|
-
examples: [
|
|
308
|
-
{ arguments: '"Epic: split the parser work" 101 102 103' },
|
|
309
|
-
{ arguments: '"Epic: staged rollout" 101 102 --ordered' },
|
|
310
|
-
{ arguments: '"Epic: ..." 101 102 --rationale-file .josh/tmp/rationale.md' },
|
|
311
|
-
{ arguments: "--promote 858 101 102 103", note: "turn an existing issue into an epic" },
|
|
312
|
-
{ arguments: "--add 893 894", note: "track #894, declaring no order for it" },
|
|
313
|
-
{ arguments: "--add 893 894 --before 891", note: "#894 must finish before #891" },
|
|
314
|
-
{ arguments: "--add 893 894 --after 890", note: "#894 starts once #890 is done" },
|
|
315
|
-
{
|
|
316
|
-
arguments: "--add 893 894 --decision-file .josh/tmp/why.md",
|
|
317
|
-
note: "\u2026and record why, in one call"
|
|
318
|
-
},
|
|
319
|
-
{
|
|
320
|
-
arguments: "--reconcile 2184",
|
|
321
|
-
note: "rewrite the body to match the recorded blocked-by, and record any order the body declared"
|
|
322
|
-
},
|
|
323
|
-
{ arguments: "--decide 893 894 --decision-file .josh/tmp/why.md" },
|
|
324
|
-
{ arguments: "--untrack 893 894", note: "remove a child row and its connected orders" }
|
|
325
|
-
],
|
|
326
|
-
flags: [
|
|
327
|
-
{
|
|
328
|
-
names: ["--ordered"],
|
|
329
|
-
description: "argument order is the dependency order; writes the arrow chain, records the matching `blocked-by` relations, and adds a `### Declared order` entry under `## Decisions`."
|
|
330
|
-
},
|
|
331
|
-
{
|
|
332
|
-
names: ["--rationale-file <path|->"],
|
|
333
|
-
description: "split rationale prose, written under `.josh/tmp/` (`-` reads stdin)."
|
|
334
|
-
},
|
|
335
|
-
{
|
|
336
|
-
names: ["--origin <owner/repo#N>"],
|
|
337
|
-
description: "backlink when the split originated in another repository."
|
|
338
|
-
},
|
|
339
|
-
{
|
|
340
|
-
names: ["--notify"],
|
|
341
|
-
description: "on create or `--promote`: send the split path's `planning` Telegram (the epic URL, child URLs and `Next: pnpm josh backlogrun <E> --only`), as `issue:plan --planned` sends; a failed send only warns."
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
names: ["--title <title>"],
|
|
345
|
-
description: "with `--promote`: rename the issue first."
|
|
346
|
-
},
|
|
347
|
-
{
|
|
348
|
-
names: ["--before <M>"],
|
|
349
|
-
description: "with `--add`: insert before `#M`, re-pointing what `#M` was waiting on so the chain is never broken."
|
|
350
|
-
},
|
|
351
|
-
{
|
|
352
|
-
names: ["--after <M>"],
|
|
353
|
-
description: "with `--add`: start after `#M`; branches when `#M` already has a successor, extends when it is a tail."
|
|
354
|
-
},
|
|
355
|
-
{
|
|
356
|
-
names: ["--order-before <M>", "--order-after <M>"],
|
|
357
|
-
description: "with `--add`: move the task-list row only; write no `blocked-by` relation."
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
names: ["--decision-file <path|->"],
|
|
361
|
-
description: "with `--add`: record why the child was placed, written under `.josh/tmp/` (`-` reads stdin)."
|
|
362
|
-
},
|
|
363
|
-
{
|
|
364
|
-
names: ["--remove <E> <M> <N> [<N2> \u2026]"],
|
|
365
|
-
description: "delete a declared order from the body and the relations; each consecutive pair is one link."
|
|
366
|
-
},
|
|
367
|
-
{
|
|
368
|
-
names: ["--untrack <E> <N...>"],
|
|
369
|
-
description: "remove child rows and connected orders without reconnecting survivors; relation failures preserve the body for retry; absent rows are safe to repeat."
|
|
370
|
-
}
|
|
371
|
-
]
|
|
372
|
-
}
|
|
373
|
-
},
|
|
374
|
-
"epic:next": {
|
|
375
|
-
script: "scripts/epic/epic-next-main.ts",
|
|
376
|
-
description: "List an epic's runnable children, bundled per repository",
|
|
377
|
-
category: "AI tools",
|
|
378
|
-
reference: ["<epic>... [--repo <owner/repo>] [--lanes]", "automation", ["network"]],
|
|
379
|
-
usage: {
|
|
380
|
-
examples: [
|
|
381
|
-
{ arguments: "858" },
|
|
382
|
-
{
|
|
383
|
-
arguments: "858 --repo joshuafolkken/kit",
|
|
384
|
-
note: "just the next child for one repository"
|
|
385
|
-
},
|
|
386
|
-
{
|
|
387
|
-
arguments: "858 --repo joshuafolkken/kit --lanes",
|
|
388
|
-
note: "one child per free lane there"
|
|
389
|
-
}
|
|
390
|
-
],
|
|
391
|
-
flags: [
|
|
392
|
-
{
|
|
393
|
-
names: [REPO],
|
|
394
|
-
description: "answer for one repository; stdout carries one token (an issue number, or `wait`/`stop`/`complete`), everything else on stderr."
|
|
395
|
-
},
|
|
396
|
-
{
|
|
397
|
-
names: ["--lanes"],
|
|
398
|
-
description: "print one issue number per free lane (requires `--repo`); `JOSH_LANE_LIMIT` sets the ceiling, default 4. Prints `triage` instead while any candidate carries neither `run:solo` nor `run:lane` (the triage gate in `josh backlog:next`)."
|
|
399
|
-
}
|
|
400
|
-
]
|
|
401
|
-
}
|
|
402
|
-
},
|
|
403
|
-
"epic:bundle": {
|
|
404
|
-
script: "scripts/epic/epic-bundle-main.ts",
|
|
405
|
-
description: "Say whether a newly filed issue belongs with ones already in the backlog",
|
|
406
|
-
category: "AI tools",
|
|
407
|
-
reference: ["<issue> [--apply]", "automation", ["network"]],
|
|
408
|
-
usage: {
|
|
409
|
-
examples: [{ arguments: "874" }, { arguments: "874 --apply", note: "write it" }]
|
|
410
|
-
}
|
|
411
|
-
},
|
|
412
|
-
"epic:audit": {
|
|
413
|
-
script: "scripts/epic/epic-audit-main.ts",
|
|
414
|
-
description: "Audit an epic's children against each other for contradictions",
|
|
415
|
-
category: "AI tools",
|
|
416
|
-
reference: ["<epic>", "automation", ["network"]],
|
|
417
|
-
usage: { examples: [{ arguments: "858" }] }
|
|
418
|
-
},
|
|
419
|
-
"epic:check": {
|
|
420
|
-
script: "scripts/epic/epic-check.ts",
|
|
421
|
-
description: "Check an epic issue against the tracking requirements",
|
|
422
|
-
category: "AI tools",
|
|
423
|
-
reference: ["<epic>", "automation", ["network"]],
|
|
424
|
-
usage: { examples: [{ arguments: "700" }] }
|
|
425
|
-
},
|
|
426
|
-
"auto-ok:next": {
|
|
427
|
-
script: "scripts/auto-ok/auto-ok-main.ts",
|
|
428
|
-
description: "Print the next opted-in issue an unattended run may pick up outside an epic",
|
|
429
|
-
category: "AI tools",
|
|
430
|
-
reference: ["[--exclude <n>[,<n>...]] [--label <name>]", "automation", ["network"]],
|
|
431
|
-
usage: {
|
|
432
|
-
examples: [{ arguments: "" }, { arguments: "--exclude 906", note: JUST_MERGED2 }],
|
|
433
|
-
flags: [
|
|
434
|
-
{
|
|
435
|
-
names: [EXCLUDE2],
|
|
436
|
-
description: "drop issues from the answer; comma-separated, repeatable."
|
|
437
|
-
}
|
|
438
|
-
]
|
|
439
|
-
}
|
|
440
|
-
},
|
|
441
|
-
"auto-ok:judge": {
|
|
442
|
-
script: "scripts/auto-ok/auto-ok-judge-cli.ts",
|
|
443
|
-
description: "List the open issues backlogrun owes an auto-ok judgement, or record one (--apply / --decline)",
|
|
444
|
-
category: "AI tools",
|
|
445
|
-
reference: [
|
|
446
|
-
"[--apply <n> (--lane | --solo --defect yes --verification yes --every-run yes) | --decline <n> --reason <text>]",
|
|
447
|
-
"automation",
|
|
448
|
-
["network"]
|
|
449
|
-
],
|
|
450
|
-
usage: {
|
|
451
|
-
examples: [
|
|
452
|
-
{ arguments: "", note: "the issues that still owe a judgement" },
|
|
453
|
-
{ arguments: "--apply 912 --lane", note: "opt it in, with its run label" },
|
|
454
|
-
{ arguments: '--decline 913 --reason "<why>"', note: "record why it stays out" }
|
|
455
|
-
],
|
|
456
|
-
flags: [
|
|
457
|
-
{
|
|
458
|
-
names: ["--apply <N> --lane|--solo"],
|
|
459
|
-
description: "checks the exclusions again against the labels as they stand, records the judgement on the issue, then applies the run label and then `auto-ok`."
|
|
460
|
-
},
|
|
461
|
-
{ names: ["--decline <N> --reason <text>"], description: "applies nothing." }
|
|
462
|
-
]
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
};
|
|
466
|
-
|
|
467
|
-
// scripts/josh/josh-commands-issue-write.ts
|
|
468
|
-
var REPO2 = "--repo <owner/repo>";
|
|
469
|
-
var BODY_FILE = "--body-file <path>";
|
|
470
|
-
var TITLE = "--title <title>";
|
|
471
|
-
var EVIDENCE_FILE = "--evidence-file <path>";
|
|
472
|
-
var BLOCKS_FINDER = "--blocks-finder";
|
|
473
|
-
var DISTINCT = "--distinct <N,\u2026>";
|
|
474
|
-
var EVIDENCE_REFERENCE = `<issue> ${EVIDENCE_FILE}`;
|
|
475
|
-
var ISSUE_WRITE_COMMANDS = {
|
|
476
|
-
"issue:tick": {
|
|
477
|
-
script: "scripts/issue/issue-tick-cli.ts",
|
|
478
|
-
description: "Tick selected acceptance checkboxes by their plan identifiers",
|
|
479
|
-
category: "AI tools",
|
|
480
|
-
reference: ["<issue> <ac-id>...", "automation", ["network"]],
|
|
481
|
-
usage: {
|
|
482
|
-
examples: [{ arguments: "6233 ac-a1f32a2f ac-8647b0dd" }]
|
|
483
|
-
}
|
|
484
|
-
},
|
|
485
|
-
"issue:consolidate": {
|
|
486
|
-
script: "scripts/issue/issue-consolidate-cli.ts",
|
|
487
|
-
description: "Fold duplicates into a target: untrack, close as not planned; a failed write lists the writes done",
|
|
488
|
-
category: "AI tools",
|
|
489
|
-
reference: [
|
|
490
|
-
"<target> <duplicate>... [--title <title>] [--body-file <path>] [--demote]",
|
|
491
|
-
"automation",
|
|
492
|
-
["network"]
|
|
493
|
-
],
|
|
494
|
-
usage: {
|
|
495
|
-
examples: [{ arguments: "6559 6567 6568 --body-file .josh/tmp/body.md --demote" }],
|
|
496
|
-
flags: [
|
|
497
|
-
{ names: [TITLE], description: "replace the target's title." },
|
|
498
|
-
{
|
|
499
|
-
names: [BODY_FILE],
|
|
500
|
-
description: "replace the target's body, from a file or stdin (`-`). Target author needs write access."
|
|
501
|
-
},
|
|
502
|
-
{
|
|
503
|
-
names: ["--demote"],
|
|
504
|
-
description: "remove the `epic` label and the `## Split into children` sections from the body."
|
|
505
|
-
}
|
|
506
|
-
]
|
|
507
|
-
}
|
|
508
|
-
},
|
|
509
|
-
"issue:release-class": {
|
|
510
|
-
script: "scripts/issue/issue-release-class-cli.ts",
|
|
511
|
-
description: "Write the issue body's one release classification line, replacing any earlier one",
|
|
512
|
-
category: "AI tools",
|
|
513
|
-
reference: ["<issue> <enhancement|other-change>", "automation", ["network"]],
|
|
514
|
-
usage: {
|
|
515
|
-
examples: [{ arguments: "6636 other-change" }]
|
|
516
|
-
}
|
|
517
|
-
},
|
|
518
|
-
"issue:comment": {
|
|
519
|
-
script: "scripts/issue/issue-comment-main.ts",
|
|
520
|
-
description: "Post one comment to an issue from a file, so no shell expands the body",
|
|
521
|
-
category: "AI tools",
|
|
522
|
-
reference: ["<issue> --body <text> | --body-file <path>", "automation", ["network"]],
|
|
523
|
-
usage: {
|
|
524
|
-
examples: [
|
|
525
|
-
{
|
|
526
|
-
arguments: "2304 --body-file .josh/tmp/park.md",
|
|
527
|
-
note: "the body from a file \u2014 no shell evaluates it"
|
|
528
|
-
},
|
|
529
|
-
{
|
|
530
|
-
arguments: '2304 --body "a short note"',
|
|
531
|
-
note: "inline, for a body with no backticks or $"
|
|
532
|
-
}
|
|
533
|
-
],
|
|
534
|
-
flags: [
|
|
535
|
-
{
|
|
536
|
-
names: ["--body <text>"],
|
|
537
|
-
description: "the comment body, inline. Trimmed, with `\\n` expanded to a newline."
|
|
538
|
-
},
|
|
539
|
-
{
|
|
540
|
-
names: [BODY_FILE],
|
|
541
|
-
description: "read the body from a file, or from stdin with `-`. The safe form the rule steers every caller toward."
|
|
542
|
-
}
|
|
543
|
-
]
|
|
544
|
-
}
|
|
545
|
-
},
|
|
546
|
-
"issue:body": {
|
|
547
|
-
script: "scripts/issue/issue-body-cli.ts",
|
|
548
|
-
description: "Replace an issue's body with a file that passes issue:lint",
|
|
549
|
-
category: "AI tools",
|
|
550
|
-
reference: ["<issue> --body-file <path>", "automation", ["network"]],
|
|
551
|
-
usage: {
|
|
552
|
-
examples: [{ arguments: "6982 --body-file .josh/tmp/issue-6982-body.md" }],
|
|
553
|
-
flags: [
|
|
554
|
-
{
|
|
555
|
-
names: [BODY_FILE],
|
|
556
|
-
description: "the new body, from a file or stdin (`-`). A body `issue:lint` refuses is not written."
|
|
557
|
-
}
|
|
558
|
-
]
|
|
559
|
-
}
|
|
560
|
-
},
|
|
561
|
-
"issue:plan": {
|
|
562
|
-
script: "scripts/issue/issue-plan-cli.ts",
|
|
563
|
-
description: "Record a plan: normalize the title, fill a blank body or comment, apply run:planned",
|
|
564
|
-
category: "AI tools",
|
|
565
|
-
// `--planned` sends the `planning` Telegram (issue-plan-notify.ts), which reads `.env`.
|
|
566
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
567
|
-
reference: [
|
|
568
|
-
"<issue> --body-file <path> [--title <title>] [--planned] [--no-notify] [--repo <owner/name>]",
|
|
569
|
-
"automation",
|
|
570
|
-
["network"]
|
|
571
|
-
],
|
|
572
|
-
usage: {
|
|
573
|
-
examples: [
|
|
574
|
-
{
|
|
575
|
-
arguments: '4134 --body-file .josh/tmp/plan.md --title "Add issue:plan" --planned',
|
|
576
|
-
note: "kickoff's three writes"
|
|
577
|
-
}
|
|
578
|
-
],
|
|
579
|
-
flags: [
|
|
580
|
-
{
|
|
581
|
-
names: [BODY_FILE],
|
|
582
|
-
description: "the plan, from a file or stdin (`-`): a blank body takes it, else a comment."
|
|
583
|
-
},
|
|
584
|
-
{ names: [TITLE], description: "replace the issue title first." },
|
|
585
|
-
{
|
|
586
|
-
names: ["--planned"],
|
|
587
|
-
description: "apply `run:planned` once the plan is posted, so the next entry skips planning; send the `planning` Telegram (change items, `Next:`)."
|
|
588
|
-
},
|
|
589
|
-
{
|
|
590
|
-
names: ["--no-notify"],
|
|
591
|
-
description: "with `--planned`, skip the `planning` Telegram."
|
|
592
|
-
},
|
|
593
|
-
{
|
|
594
|
-
names: ["--repo <owner/name>"],
|
|
595
|
-
description: "write to that repository's issue."
|
|
596
|
-
}
|
|
597
|
-
]
|
|
598
|
-
}
|
|
599
|
-
},
|
|
600
|
-
"issue:premise-unmet": {
|
|
601
|
-
script: "scripts/issue/issue-premise-unmet-cli.ts",
|
|
602
|
-
description: "Exit an issue whose declared close condition holds: post the verdict, close it as not planned, release the hold",
|
|
603
|
-
category: "AI tools",
|
|
604
|
-
// Releasing the hold runs `run:hold`, which reaches the stop confirmation.
|
|
605
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
606
|
-
reference: [EVIDENCE_REFERENCE, "automation", ["network", "files"]],
|
|
607
|
-
usage: {
|
|
608
|
-
examples: [
|
|
609
|
-
{
|
|
610
|
-
arguments: "7249 --evidence-file .josh/tmp/premise-unmet.md",
|
|
611
|
-
note: "comment, not-planned close, release \u2014 in that order"
|
|
612
|
-
}
|
|
613
|
-
],
|
|
614
|
-
flags: [
|
|
615
|
-
{
|
|
616
|
-
names: [EVIDENCE_FILE],
|
|
617
|
-
description: "the verdict comment: the measured values and why the close condition holds; an empty file is refused"
|
|
618
|
-
}
|
|
619
|
-
]
|
|
620
|
-
}
|
|
621
|
-
},
|
|
622
|
-
"issue:already-done": {
|
|
623
|
-
script: "scripts/issue/issue-already-done-cli.ts",
|
|
624
|
-
description: "Exit an issue whose work is already merged: post the evidence, apply already-done, close it when a cited PR is merged or a cited commit is on main, release the hold",
|
|
625
|
-
category: "AI tools",
|
|
626
|
-
// Releasing the hold runs `run:hold`, which reaches the stop confirmation.
|
|
627
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
628
|
-
reference: [EVIDENCE_REFERENCE, "automation", ["network", "files"]],
|
|
629
|
-
usage: {
|
|
630
|
-
examples: [
|
|
631
|
-
{
|
|
632
|
-
arguments: "4130 --evidence-file .josh/tmp/already-done.md",
|
|
633
|
-
note: "comment, label, close on a merged PR or a commit on main, release \u2014 in that order"
|
|
634
|
-
}
|
|
635
|
-
],
|
|
636
|
-
flags: [
|
|
637
|
-
{
|
|
638
|
-
names: [EVIDENCE_FILE],
|
|
639
|
-
description: "the evidence comment: the merging PR or commit and, per acceptance criterion, its `file:line`. An empty file is refused before anything is written."
|
|
640
|
-
}
|
|
641
|
-
]
|
|
642
|
-
}
|
|
643
|
-
},
|
|
644
|
-
"issue:measured": {
|
|
645
|
-
script: "scripts/issue/issue-measured-cli.ts",
|
|
646
|
-
description: "Complete a measurement-only issue: post the result, label it measured, close it, release the hold",
|
|
647
|
-
category: "AI tools",
|
|
648
|
-
// Releasing the hold runs `run:hold`, which reaches the stop confirmation.
|
|
649
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
650
|
-
reference: [`${EVIDENCE_REFERENCE} [--unmet]`, "automation", ["network", "files"]],
|
|
651
|
-
usage: {
|
|
652
|
-
examples: [
|
|
653
|
-
{
|
|
654
|
-
arguments: "4452 --evidence-file .josh/tmp/measured.md",
|
|
655
|
-
note: "comment, label, close, release \u2014 in that order"
|
|
656
|
-
},
|
|
657
|
-
{
|
|
658
|
-
arguments: "4452 --unmet --evidence-file .josh/tmp/measured.md",
|
|
659
|
-
note: "the measurement fell short of the expected effect: measured:unmet as well"
|
|
660
|
-
}
|
|
661
|
-
],
|
|
662
|
-
flags: [
|
|
663
|
-
{
|
|
664
|
-
names: [EVIDENCE_FILE],
|
|
665
|
-
description: "the result comment: per acceptance criterion, the measurement and the run it came from. An empty file is refused before anything is written."
|
|
666
|
-
},
|
|
667
|
-
{
|
|
668
|
-
names: ["--unmet"],
|
|
669
|
-
description: "the measurement fell short of the expected effect it checked; adds the measured:unmet label `josh effect:audit` reads"
|
|
670
|
-
}
|
|
671
|
-
]
|
|
672
|
-
}
|
|
673
|
-
},
|
|
674
|
-
"issue:file": {
|
|
675
|
-
script: "scripts/issue/issue-file-main.ts",
|
|
676
|
-
description: "File an Issue: filing cap, fold, one pass naming each refusal (lint, Origin, auto-ok, start condition, WIP cap, scout), labels, epic:bundle",
|
|
677
|
-
category: "AI tools",
|
|
678
|
-
reference: [
|
|
679
|
-
"<title> --body-file <path> | --batch <dir|file> [--route <route>] [--label <name>] [--defect yes|no|unknown] [--verification yes|no|unknown] [--every-run yes|no|unknown] [--repo <owner/repo>] [--distinct <N,\u2026>] [--found-during <N>] [--over-cap] [--no-auto-ok] [--release] [--blocks-finder] [--check]",
|
|
680
|
-
"automation",
|
|
681
|
-
["network"]
|
|
682
|
-
],
|
|
683
|
-
usage: {
|
|
684
|
-
examples: [
|
|
685
|
-
{ arguments: '"<title>" --body-file .josh/tmp/body.md' },
|
|
686
|
-
{
|
|
687
|
-
arguments: '"<title>" --body-file .josh/tmp/body.md --route tier-a --repo joshuafolkken/kit'
|
|
688
|
-
},
|
|
689
|
-
{ arguments: '"<title>" --body-file .josh/tmp/body.md --distinct 2801,2795' },
|
|
690
|
-
{ arguments: "--batch .josh/tmp/deferred --route tier-a" },
|
|
691
|
-
{ arguments: "--batch .josh/tmp/deferred.md --route tier-a" }
|
|
692
|
-
],
|
|
693
|
-
flags: [
|
|
694
|
-
{ names: [BODY_FILE], description: "the body. Required unless `--batch`." },
|
|
695
|
-
{
|
|
696
|
-
names: ["--batch <dir|file>"],
|
|
697
|
-
description: "file each `*.md` in `<dir>` by name, or each `%%%`-separated part of `<file>`, other flags applied to each; every scout report prints once before the first filing. Title: front matter `title:`, else the first line; front matter `distinct: <N,\u2026>` is its `--distinct`. A refused filing stays unfiled, the rest are filed, the summary names each; any refusal exits 1."
|
|
698
|
-
},
|
|
699
|
-
{
|
|
700
|
-
names: ["--route <tier-a|split|interrupt|review-cap>"],
|
|
701
|
-
description: "the `route:` label naming the filing route. Omit it for a filing with no route."
|
|
702
|
-
},
|
|
703
|
-
{
|
|
704
|
-
names: ["--label <name>"],
|
|
705
|
-
description: "an extra label (e.g. `epic`). Repeatable. With `josh.worker`, `worker:<name>` names a printed profile."
|
|
706
|
-
},
|
|
707
|
-
{
|
|
708
|
-
names: ["--defect / --verification / --every-run <yes|no|unknown>"],
|
|
709
|
-
description: "`--label run:solo` requires all three `yes`: a verification defect affecting unrelated PRs every run. Missing, invalid, `no` or `unknown` answers file nothing; success comments the three answers on the issue."
|
|
710
|
-
},
|
|
711
|
-
{
|
|
712
|
-
names: [REPO2],
|
|
713
|
-
description: "the target repository. Defaults to this repository."
|
|
714
|
-
},
|
|
715
|
-
{
|
|
716
|
-
names: [DISTINCT],
|
|
717
|
-
description: "duplicate candidates you read and judged distinct."
|
|
718
|
-
},
|
|
719
|
-
{
|
|
720
|
-
names: ["--found-during <N>"],
|
|
721
|
-
description: "the Issue whose work the filing came from, when it is not the lane or branch Issue. The filing cap counts per origin (step 2); step 7 never holds it as a candidate here. #N gets a deferral comment."
|
|
722
|
-
},
|
|
723
|
-
{
|
|
724
|
-
names: ["--over-cap"],
|
|
725
|
-
description: "the run is blocked by this filing, or a user typed `new` (`kickoff` / `fullrun` / `halfrun` / `prrun new`, whose filing commands carry it); the WIP cap lets it through."
|
|
726
|
-
},
|
|
727
|
-
{
|
|
728
|
-
names: ["--no-auto-ok"],
|
|
729
|
-
description: "needs human judgement or a verified user prohibition; no `auto-ok`."
|
|
730
|
-
},
|
|
731
|
-
{
|
|
732
|
-
names: ["--release"],
|
|
733
|
-
description: "a consumer can use the change only once it is published. The filed issue becomes a blocker of the target's release issue (step 10)."
|
|
734
|
-
},
|
|
735
|
-
{
|
|
736
|
-
names: [BLOCKS_FINDER],
|
|
737
|
-
description: "with `--route interrupt`, the finder cannot go on until this issue is done. The finder is recorded as blocked by the filed issue (step 9); under an epic, `epic --reconcile <E>` after `epic --add` declares it."
|
|
738
|
-
},
|
|
739
|
-
{
|
|
740
|
-
names: ["--check"],
|
|
741
|
-
description: "run steps 1\u20137, create nothing; exit 1 on a refusal. `--batch` refuses it."
|
|
742
|
-
}
|
|
743
|
-
]
|
|
744
|
-
}
|
|
745
|
-
},
|
|
746
|
-
"issue:spill": {
|
|
747
|
-
script: "scripts/issue/issue-spill-main.ts",
|
|
748
|
-
description: "Move an issue's unchecked acceptance criteria into a follow-up filed by `issue:file --route split`, placed after it in its epic (or a new one), leaving one link line",
|
|
749
|
-
category: "AI tools",
|
|
750
|
-
reference: [
|
|
751
|
-
`<issue> --estimate "<F> \u30D5\u30A1\u30A4\u30EB / <L> \u884C" [--reason "<\u7406\u7531>"] [${DISTINCT}]`,
|
|
752
|
-
"automation",
|
|
753
|
-
["network"]
|
|
754
|
-
],
|
|
755
|
-
usage: {
|
|
756
|
-
examples: [{ arguments: '5999 --estimate "3 \u30D5\u30A1\u30A4\u30EB / 80 \u884C"' }],
|
|
757
|
-
flags: [
|
|
758
|
-
{
|
|
759
|
-
names: ['--estimate "<F> \u30D5\u30A1\u30A4\u30EB / <L> \u884C"'],
|
|
760
|
-
description: "the follow-up's size estimate, never apportioned from the issue's. Required."
|
|
761
|
-
},
|
|
762
|
-
{
|
|
763
|
-
names: ['--reason "<\u7406\u7531>"'],
|
|
764
|
-
description: `the follow-up's \`${issue_body_keys.prefix("no_split_reason")}\` line, the only excuse from the size bar; the issue's own is not carried over.`
|
|
765
|
-
},
|
|
766
|
-
{
|
|
767
|
-
names: [DISTINCT],
|
|
768
|
-
description: "duplicate candidates `issue:file` held the follow-up on, declared separate; the issue itself always is. Repeatable."
|
|
769
|
-
}
|
|
770
|
-
]
|
|
771
|
-
}
|
|
772
|
-
},
|
|
773
|
-
"upstream:interrupt": {
|
|
774
|
-
script: "scripts/issue/upstream-interrupt-main.ts",
|
|
775
|
-
description: "Stop for a defect in another package in one call: stash, file the upstream issue, backlink it on the finder, send the confirmation",
|
|
776
|
-
category: "AI tools",
|
|
777
|
-
reference: [
|
|
778
|
-
`<finder> <title> ${REPO2} ${BODY_FILE} [--blocks-finder]`,
|
|
779
|
-
"automation",
|
|
780
|
-
["git", "network", "notifications"]
|
|
781
|
-
],
|
|
782
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
783
|
-
usage: {
|
|
784
|
-
examples: [
|
|
785
|
-
{
|
|
786
|
-
arguments: '2304 "<root-cause title>" --repo joshuafolkken/kit --body-file .josh/tmp/body.md'
|
|
787
|
-
}
|
|
788
|
-
],
|
|
789
|
-
flags: [
|
|
790
|
-
{ names: [REPO2], description: "the upstream repository. Required." },
|
|
791
|
-
{ names: [BODY_FILE], description: "the upstream issue body. Required." },
|
|
792
|
-
{
|
|
793
|
-
names: [BLOCKS_FINDER],
|
|
794
|
-
description: "passed to `issue:file`: the finder is recorded as blocked by the filing."
|
|
795
|
-
}
|
|
796
|
-
]
|
|
797
|
-
}
|
|
798
|
-
}
|
|
799
|
-
};
|
|
800
|
-
|
|
801
|
-
// scripts/josh/josh-commands-issue.ts
|
|
802
|
-
var REPO3 = "--repo <owner/repo>";
|
|
803
|
-
var CONCURRENT = "several numbers, read concurrently";
|
|
804
|
-
var REPO_FLAG = {
|
|
805
|
-
names: [REPO3],
|
|
806
|
-
description: "read an issue in another repository; applies to every number."
|
|
807
|
-
};
|
|
808
|
-
var BODY_FILE2 = "--body-file <path>";
|
|
809
|
-
var JSON_FLAG = { names: ["--json"], description: "print the verdict and reason as JSON." };
|
|
810
|
-
var ISSUES_WITH_REPO = "<issue...> [--repo <owner/repo>]";
|
|
811
|
-
var ISSUE_COMMANDS = {
|
|
812
|
-
"issue:ack": {
|
|
813
|
-
script: "scripts/issue/issue-ack-cli.ts",
|
|
814
|
-
description: "Record that the run read a person's update to its issue, printing the update it acknowledges",
|
|
815
|
-
category: "AI tools",
|
|
816
|
-
reference: ["<issue>", "automation", ["network"]],
|
|
817
|
-
usage: { examples: [{ arguments: "3773" }] }
|
|
818
|
-
},
|
|
819
|
-
"issue:priority": {
|
|
820
|
-
script: "scripts/issue/issue-priority-cli.ts",
|
|
821
|
-
description: "Raise an issue to the priority its body declares or reaches, or set the one a person instructs",
|
|
822
|
-
category: "AI tools",
|
|
823
|
-
reference: ["<issue> [--critical|--high|--normal --reason <text>]", "automation", ["network"]],
|
|
824
|
-
usage: {
|
|
825
|
-
examples: [
|
|
826
|
-
{ arguments: "4960" },
|
|
827
|
-
{
|
|
828
|
-
arguments: '6707 --critical --reason "asked in this turn"',
|
|
829
|
-
note: "on a person's instruction only"
|
|
830
|
-
},
|
|
831
|
-
{
|
|
832
|
-
arguments: '6683 --normal --reason "asked in this turn"',
|
|
833
|
-
note: "lowers it the same way"
|
|
834
|
-
}
|
|
835
|
-
]
|
|
836
|
-
}
|
|
837
|
-
},
|
|
838
|
-
"issue:read": {
|
|
839
|
-
script: "scripts/issue/issue-read-main.ts",
|
|
840
|
-
description: "Print each issue's title, body and every comment on it, in one call",
|
|
841
|
-
category: "AI tools",
|
|
842
|
-
reference: [ISSUES_WITH_REPO, "automation", ["network"]],
|
|
843
|
-
usage: {
|
|
844
|
-
examples: [
|
|
845
|
-
{ arguments: "1715" },
|
|
846
|
-
{ arguments: "1715 1567 1605", note: CONCURRENT },
|
|
847
|
-
{ arguments: "42 --repo joshuafolkken/app-kit", note: "an issue in another repo" }
|
|
848
|
-
],
|
|
849
|
-
flags: [REPO_FLAG]
|
|
850
|
-
}
|
|
851
|
-
},
|
|
852
|
-
"issue:state": {
|
|
853
|
-
script: "scripts/issue/issue-state-main.ts",
|
|
854
|
-
description: "Print each issue's state and labels, in the spelling the documents compare against",
|
|
855
|
-
category: "AI tools",
|
|
856
|
-
reference: [ISSUES_WITH_REPO, "automation", ["network"]],
|
|
857
|
-
usage: {
|
|
858
|
-
examples: [
|
|
859
|
-
{ arguments: "42", note: "single-number shape" },
|
|
860
|
-
{ arguments: "42 43 44", note: "each block headed by `issue:`" },
|
|
861
|
-
{ arguments: "42 43 --repo joshuafolkken/app-kit", note: "a child in another repo" }
|
|
862
|
-
],
|
|
863
|
-
flags: [REPO_FLAG]
|
|
864
|
-
}
|
|
865
|
-
},
|
|
866
|
-
"issue:scout": {
|
|
867
|
-
script: "scripts/issue/issue-scout-main.ts",
|
|
868
|
-
description: "Before filing: say whether an issue like this exists and which epic it belongs to",
|
|
869
|
-
category: "AI tools",
|
|
870
|
-
reference: ["<title> [--body <summary> | --body-file <path>]", "automation", ["network"]],
|
|
871
|
-
usage: {
|
|
872
|
-
examples: [
|
|
873
|
-
{ arguments: '"Stop the gate re-running after every edit"' },
|
|
874
|
-
{ arguments: '"<title>" --body "parent: #1246"' },
|
|
875
|
-
{ arguments: '"<title>" --body-file .josh/tmp/draft.md' }
|
|
876
|
-
],
|
|
877
|
-
flags: [
|
|
878
|
-
{
|
|
879
|
-
names: ['--body "<text>"'],
|
|
880
|
-
description: "supply references (`#N`) in a `parent: #N` line or an acceptance-criteria section so the epic half has a number to work from; without one there (a background mention does not count) it prints `Epic: not asked`."
|
|
881
|
-
},
|
|
882
|
-
{
|
|
883
|
-
names: [BODY_FILE2],
|
|
884
|
-
description: 'pass the whole draft, including its purpose, requirements and acceptance criteria. A file that cannot be read ends the command rather than being treated as "no candidates".'
|
|
885
|
-
}
|
|
886
|
-
]
|
|
887
|
-
}
|
|
888
|
-
},
|
|
889
|
-
"defect:origin": {
|
|
890
|
-
script: "scripts/issue/defect-origin-main.ts",
|
|
891
|
-
description: "List the merged pull requests that last changed what a defect issue names, as candidates for its origin line",
|
|
892
|
-
category: "AI tools",
|
|
893
|
-
reference: ["<N>", "automation", ["network"]],
|
|
894
|
-
usage: {
|
|
895
|
-
examples: [{ arguments: "4241", note: "newest first, merged before the issue was filed" }]
|
|
896
|
-
}
|
|
897
|
-
},
|
|
898
|
-
"defect:report": {
|
|
899
|
-
script: "scripts/issue/defect-report-main.ts",
|
|
900
|
-
description: "Count defects by the origin pull request their issue declares, by change kind and by area",
|
|
901
|
-
category: "AI tools",
|
|
902
|
-
reference: ["", "automation", ["network"]],
|
|
903
|
-
usage: { examples: [{ arguments: "", note: "every issue labelled bug, open or closed" }] }
|
|
904
|
-
},
|
|
905
|
-
"effect:audit": {
|
|
906
|
-
script: "scripts/issue/effect-audit-cli.ts",
|
|
907
|
-
is_read_only: true,
|
|
908
|
-
write_flags: ["--draft"],
|
|
909
|
-
description: "List closed run-time-shortening issues with their expected effect, follow-up measurement and result",
|
|
910
|
-
category: "AI tools",
|
|
911
|
-
reference: ["[--days <N>] [--draft <issue>]", "automation", ["network", "files"]],
|
|
912
|
-
usage: {
|
|
913
|
-
examples: [
|
|
914
|
-
{ arguments: "", note: "issues closed in the last 30 days, one line each" },
|
|
915
|
-
{ arguments: "--days 7", note: "a shorter window" },
|
|
916
|
-
{
|
|
917
|
-
arguments: "--draft 4896",
|
|
918
|
-
note: "write the retirement candidate of a shortfall and print its issue:file line"
|
|
919
|
-
}
|
|
920
|
-
],
|
|
921
|
-
flags: [
|
|
922
|
-
{ names: ["--days <N>"], description: "the window, in days back from now (default 30)" },
|
|
923
|
-
{
|
|
924
|
-
names: ["--draft <issue>"],
|
|
925
|
-
description: "an issue whose measurement carries measured:unmet: write its retirement-candidate body to a temporary file"
|
|
926
|
-
}
|
|
927
|
-
]
|
|
928
|
-
}
|
|
929
|
-
},
|
|
930
|
-
"issue:fold": {
|
|
931
|
-
script: "scripts/issue/issue-fold-main.ts",
|
|
932
|
-
description: "Before a second filing: say whether findings from this session fold into one issue",
|
|
933
|
-
category: "AI tools",
|
|
934
|
-
reference: ["<title>... [--not-separable] [--json]", "automation", ["none"]],
|
|
935
|
-
usage: {
|
|
936
|
-
examples: [
|
|
937
|
-
{
|
|
938
|
-
arguments: '"First finding" "Second finding"',
|
|
939
|
-
note: "fold | separate | no-fold-needed | undetermined"
|
|
940
|
-
},
|
|
941
|
-
{ arguments: '"a" "b" --not-separable', note: "the pair is really one deliverable \u2192 fold" },
|
|
942
|
-
{ arguments: '"a" "b" --json', note: "the verdict and reason, machine-readable" }
|
|
943
|
-
],
|
|
944
|
-
flags: [
|
|
945
|
-
{
|
|
946
|
-
names: ["--not-separable"],
|
|
947
|
-
description: "declare the judgement half: the findings are one deliverable, so they fold whatever their size."
|
|
948
|
-
},
|
|
949
|
-
JSON_FLAG
|
|
950
|
-
]
|
|
951
|
-
}
|
|
952
|
-
},
|
|
953
|
-
"issue:fold-existing": {
|
|
954
|
-
script: "scripts/issue/issue-fold-existing-cli.ts",
|
|
955
|
-
description: "Assess whether a complete draft can join an unstarted issue",
|
|
956
|
-
category: "AI tools",
|
|
957
|
-
reference: [
|
|
958
|
-
"<assessment.json> [--json | --apply <N> [--blocked <M> | --found-during <M>]] | --fingerprint <N>",
|
|
959
|
-
"automation",
|
|
960
|
-
["network"]
|
|
961
|
-
],
|
|
962
|
-
usage: {
|
|
963
|
-
examples: [
|
|
964
|
-
{
|
|
965
|
-
arguments: "--fingerprint 5848",
|
|
966
|
-
note: "read the comment fingerprint before assessment."
|
|
967
|
-
},
|
|
968
|
-
{ arguments: "assessment.json --json" },
|
|
969
|
-
{
|
|
970
|
-
arguments: "assessment.json --apply 5848",
|
|
971
|
-
note: "apply and verify the assessed fold and priority floor."
|
|
972
|
-
},
|
|
973
|
-
{
|
|
974
|
-
arguments: "assessment.json --apply 5848 --blocked 5849",
|
|
975
|
-
note: "record a confirmed duplicate dependency and reconcile its epic."
|
|
976
|
-
},
|
|
977
|
-
{
|
|
978
|
-
arguments: "assessment.json --apply 5848 --found-during 5849",
|
|
979
|
-
note: "record a split fold as lane 5849's split child."
|
|
980
|
-
}
|
|
981
|
-
]
|
|
982
|
-
}
|
|
983
|
-
},
|
|
984
|
-
"issue:cite": {
|
|
985
|
-
script: "scripts/issue/issue-cite-main.ts",
|
|
986
|
-
description: "Print the paste-ready number-link citation line for each issue, in one call",
|
|
987
|
-
category: "AI tools",
|
|
988
|
-
reference: [ISSUES_WITH_REPO, "automation", ["network"]],
|
|
989
|
-
usage: {
|
|
990
|
-
examples: [
|
|
991
|
-
{ arguments: "2220" },
|
|
992
|
-
{ arguments: "2220 1758 1252", note: CONCURRENT },
|
|
993
|
-
{
|
|
994
|
-
arguments: "45 --repo joshuafolkken/app-kit",
|
|
995
|
-
note: "bare numbers in another repository"
|
|
996
|
-
},
|
|
997
|
-
{ arguments: "joshuafolkken/app-kit#45 2220", note: "per-token owner/repo#N notation" }
|
|
998
|
-
],
|
|
999
|
-
flags: [
|
|
1000
|
-
{
|
|
1001
|
-
names: [REPO3],
|
|
1002
|
-
description: "the repository for every bare number; a token written `owner/repo#N` overrides it for itself."
|
|
1003
|
-
}
|
|
1004
|
-
]
|
|
1005
|
-
}
|
|
1006
|
-
},
|
|
1007
|
-
...ISSUE_WRITE_COMMANDS,
|
|
1008
|
-
"plan:consumers": {
|
|
1009
|
-
script: "scripts/issue/plan-consumers-main.ts",
|
|
1010
|
-
description: "List every existing reference to each identifier a plan adds or changes, by kind, and draft the plan's existing-consumers section",
|
|
1011
|
-
category: "AI tools",
|
|
1012
|
-
reference: ["<identifier...>", "automation", ["none"]],
|
|
1013
|
-
usage: {
|
|
1014
|
-
examples: [
|
|
1015
|
-
{ arguments: "lane:pause" },
|
|
1016
|
-
{ arguments: "lane:pause run:paused", note: "one block per identifier, one draft" }
|
|
1017
|
-
]
|
|
1018
|
-
}
|
|
1019
|
-
},
|
|
1020
|
-
"issue:release": {
|
|
1021
|
-
script: "scripts/issue/issue-release-main.ts",
|
|
1022
|
-
description: "Link an Issue to the repository's open release Issue as its blocker (or, with --wait, as waiting on it), filing one when none is open",
|
|
1023
|
-
category: "AI tools",
|
|
1024
|
-
reference: ["<issue> [--wait]", "automation", ["network"]],
|
|
1025
|
-
usage: {
|
|
1026
|
-
examples: [
|
|
1027
|
-
{ arguments: "3360" },
|
|
1028
|
-
{ arguments: "3716 --wait", note: "blocked by the release issue instead" }
|
|
1029
|
-
],
|
|
1030
|
-
flags: [
|
|
1031
|
-
{
|
|
1032
|
-
names: ["--wait"],
|
|
1033
|
-
description: "the issue is blocked by the release issue instead, so `backlog:next` offers it again once the release ships (`.claude/skills/workflow-commands/prerequisite.md`)."
|
|
1034
|
-
}
|
|
1035
|
-
]
|
|
1036
|
-
}
|
|
1037
|
-
}
|
|
1038
|
-
};
|
|
1039
|
-
|
|
1040
|
-
// scripts/josh/josh-commands-review.ts
|
|
1041
|
-
var LEVEL_ONLY = "--level-only";
|
|
1042
|
-
var CHECK = "--check";
|
|
1043
|
-
var MACHINE_READABLE = "the verdict and the reason, machine-readable";
|
|
1044
|
-
var JSON_FLAG2 = "--json";
|
|
1045
|
-
var RECORD = "--record";
|
|
1046
|
-
var FULL_CHANGE = "--full-change";
|
|
1047
|
-
var REVIEW_COMMANDS = {
|
|
1048
|
-
"review:brief": {
|
|
1049
|
-
script: "scripts/review/review-brief-main.ts",
|
|
1050
|
-
description: "Print the whole /code-review invocation: level, what the gate already proved, target (--level-only for the level alone)",
|
|
1051
|
-
category: "AI tools",
|
|
1052
|
-
reference: [
|
|
1053
|
-
"[--round <1|2> | --full-change] | --interaction | --level-only [--staged] [--json]",
|
|
1054
|
-
"automation",
|
|
1055
|
-
["files"]
|
|
1056
|
-
],
|
|
1057
|
-
usage: {
|
|
1058
|
-
examples: [
|
|
1059
|
-
{ arguments: "", note: "round 1" },
|
|
1060
|
-
{ arguments: "--round 2", note: "verification pass, scoped to the fix delta" },
|
|
1061
|
-
{ arguments: FULL_CHANGE, note: "final round 2 over the whole change" },
|
|
1062
|
-
{ arguments: "--interaction", note: "the interaction review of a run-tooling change" },
|
|
1063
|
-
{ arguments: LEVEL_ONLY, note: "the level alone (pre-commit review)" },
|
|
1064
|
-
{ arguments: "--level-only --json", note: "level and reason, machine-readable" }
|
|
1065
|
-
],
|
|
1066
|
-
flags: [
|
|
1067
|
-
{
|
|
1068
|
-
names: [FULL_CHANGE],
|
|
1069
|
-
description: "final round 2 over the whole change (no `--round` or `--interaction`)."
|
|
1070
|
-
},
|
|
1071
|
-
{
|
|
1072
|
-
names: ["--round 2"],
|
|
1073
|
-
description: "target is round 1's fixes and nothing else (widened back to the whole change when the record's change base no longer matches)."
|
|
1074
|
-
},
|
|
1075
|
-
{
|
|
1076
|
-
names: [LEVEL_ONLY],
|
|
1077
|
-
description: "print the level alone (level to stdout, reason to stderr); bypasses the scoped-green refusal."
|
|
1078
|
-
},
|
|
1079
|
-
{
|
|
1080
|
-
names: ["--staged", "--json"],
|
|
1081
|
-
description: "the staged diff; machine-readable level and reason."
|
|
1082
|
-
}
|
|
1083
|
-
]
|
|
1084
|
-
}
|
|
1085
|
-
},
|
|
1086
|
-
"review:attest": {
|
|
1087
|
-
script: "scripts/review/review-attest-cli.ts",
|
|
1088
|
-
description: "Record, or verify, which checkout a /code-review actually read",
|
|
1089
|
-
category: "AI tools",
|
|
1090
|
-
reference: ["<nonce> | --check", "automation", ["files"]],
|
|
1091
|
-
usage: {
|
|
1092
|
-
examples: [
|
|
1093
|
-
{ arguments: "<nonce>", note: "run by the review, from the checkout it read" },
|
|
1094
|
-
{ arguments: CHECK, note: "run by the run, before it acts on the review" }
|
|
1095
|
-
],
|
|
1096
|
-
flags: [
|
|
1097
|
-
{ names: ["<nonce>"], description: "attest the checkout the review read." },
|
|
1098
|
-
{
|
|
1099
|
-
names: [CHECK],
|
|
1100
|
-
description: "verify before acting; `josh followup` asks again before merging."
|
|
1101
|
-
}
|
|
1102
|
-
]
|
|
1103
|
-
}
|
|
1104
|
-
},
|
|
1105
|
-
"review:submit": {
|
|
1106
|
-
script: "scripts/review/review-submit-cli.ts",
|
|
1107
|
-
description: "Write a reviewer's findings, read from stdin, where the ship or review:record --from-slot reads them; --review lints the review in the same call",
|
|
1108
|
-
category: "AI tools",
|
|
1109
|
-
reference: [
|
|
1110
|
-
"[--interaction] [--review <absolute-path> [--round <1|2>]] < findings | \u2026 --none",
|
|
1111
|
-
"automation",
|
|
1112
|
-
["files"]
|
|
1113
|
-
],
|
|
1114
|
-
usage: {
|
|
1115
|
-
examples: [
|
|
1116
|
-
{ arguments: "< findings.txt", note: "the /code-review slot" },
|
|
1117
|
-
{ arguments: "--interaction < findings.txt", note: "the interaction review slot" },
|
|
1118
|
-
{ arguments: "--none", note: "a review with no findings" },
|
|
1119
|
-
{
|
|
1120
|
-
arguments: '--review "$PWD/review.md" < findings.txt',
|
|
1121
|
-
note: "lint the review and submit the findings in one call"
|
|
1122
|
-
}
|
|
1123
|
-
],
|
|
1124
|
-
flags: [
|
|
1125
|
-
{
|
|
1126
|
-
names: ["--none"],
|
|
1127
|
-
description: "a review with no findings; empty stdin without it is refused."
|
|
1128
|
-
},
|
|
1129
|
-
{
|
|
1130
|
-
names: ["--review <absolute-path>"],
|
|
1131
|
-
description: "the reviewer's markdown review, by absolute path (josh runs from the package root, so a relative path is refused), linted against the rubric's output format in the same call; a violation and a grammar refusal are reported together, and nothing is written while either stands."
|
|
1132
|
-
},
|
|
1133
|
-
{
|
|
1134
|
-
names: ["--round <1|2>"],
|
|
1135
|
-
description: "the rubric shape `--review` is linted against; round 1 by default."
|
|
1136
|
-
}
|
|
1137
|
-
]
|
|
1138
|
-
}
|
|
1139
|
-
},
|
|
1140
|
-
"review:pair": {
|
|
1141
|
-
script: "scripts/review/review-pair-cli.ts",
|
|
1142
|
-
description: "Record a paired comparison under JOSH_REVIEWER_PAIRED=1: the Opus and Sonnet round-1 findings with severity and each agent cost; never gates",
|
|
1143
|
-
category: "AI tools",
|
|
1144
|
-
reference: ["--issue <N> --opus-agent <id> --sonnet-agent <id>", "automation", ["files"]],
|
|
1145
|
-
usage: {
|
|
1146
|
-
examples: [
|
|
1147
|
-
{
|
|
1148
|
-
arguments: "--issue 6902 --opus-agent a1b2 --sonnet-agent c3d4",
|
|
1149
|
-
note: "after both round-1 reviewers return, before review:record"
|
|
1150
|
-
}
|
|
1151
|
-
],
|
|
1152
|
-
flags: [
|
|
1153
|
-
{
|
|
1154
|
-
names: ["--opus-agent <id>", "--sonnet-agent <id>"],
|
|
1155
|
-
description: "each reviewer's agentId, whose transcript prices its cost."
|
|
1156
|
-
}
|
|
1157
|
-
]
|
|
1158
|
-
}
|
|
1159
|
-
},
|
|
1160
|
-
// The self-check's "Prose matches the code" as a search: each word the diff removed that prose still names.
|
|
1161
|
-
"prose:stale": {
|
|
1162
|
-
script: "scripts/review/prose-stale-cli.ts",
|
|
1163
|
-
description: "List each removed declared or exported name, josh command, UPPER_CASE constant or .md heading that docs, prompts or comments still name",
|
|
1164
|
-
category: "AI tools",
|
|
1165
|
-
reference: ["", "automation", ["none"]],
|
|
1166
|
-
usage: {
|
|
1167
|
-
examples: [
|
|
1168
|
-
{
|
|
1169
|
-
arguments: "",
|
|
1170
|
-
note: "\u2192 `file:line kind word` per reference, or `ok` (exit 1 / 0; 2 on a failure)"
|
|
1171
|
-
}
|
|
1172
|
-
]
|
|
1173
|
-
}
|
|
1174
|
-
},
|
|
1175
|
-
"review:selfcheck": {
|
|
1176
|
-
script: "scripts/review/selfcheck-cli.ts",
|
|
1177
|
-
description: "Answer the pre-commit self-check questions 2, 4 and 10 \u2014 stale prose, untouched readers, new command examples run \u2014 in one command",
|
|
1178
|
-
category: "AI tools",
|
|
1179
|
-
reference: ["[--interaction-answered]", "automation", ["files", "processes"]],
|
|
1180
|
-
usage: {
|
|
1181
|
-
examples: [
|
|
1182
|
-
{
|
|
1183
|
-
arguments: "",
|
|
1184
|
-
note: "\u2192 `file:line` per finding, then one `selfcheck: pass|fail` line (exit 0 / 1; 2 on a failure)"
|
|
1185
|
-
},
|
|
1186
|
-
{
|
|
1187
|
-
arguments: "--interaction-answered",
|
|
1188
|
-
note: "\u2192 a passing, due run also records the issue's interaction round"
|
|
1189
|
-
}
|
|
1190
|
-
]
|
|
1191
|
-
}
|
|
1192
|
-
},
|
|
1193
|
-
"diff:summary": {
|
|
1194
|
-
script: "scripts/review/diff-summary-cli.ts",
|
|
1195
|
-
description: "Print the diff from the change base as one table \u2014 lines, hunks, ranges and declarations per file \u2014 and save it whole",
|
|
1196
|
-
category: "AI tools",
|
|
1197
|
-
reference: ["[<base>]", "automation", ["files"]],
|
|
1198
|
-
usage: {
|
|
1199
|
-
examples: [
|
|
1200
|
-
{
|
|
1201
|
-
arguments: "",
|
|
1202
|
-
note: "\u2192 one row per file, then `full output: <path>` (the diff, in the git directory)"
|
|
1203
|
-
},
|
|
1204
|
-
{ arguments: "HEAD", note: "\u2192 the same, against a named base" }
|
|
1205
|
-
]
|
|
1206
|
-
}
|
|
1207
|
-
},
|
|
1208
|
-
"review:round2": {
|
|
1209
|
-
script: "scripts/review/review-round2-cli.ts",
|
|
1210
|
-
description: "Say whether the second /code-review round is due, or may be skipped entirely",
|
|
1211
|
-
category: "AI tools",
|
|
1212
|
-
reference: ["[--record <N>] [--json]", "automation", ["network"]],
|
|
1213
|
-
usage: {
|
|
1214
|
-
examples: [
|
|
1215
|
-
{ arguments: "", note: "\u2192 required | skip, for the branch\u2019s issue" },
|
|
1216
|
-
{ arguments: `${RECORD} 123`, note: "\u2192 required | skip, a skip commented on that issue" },
|
|
1217
|
-
{ arguments: JSON_FLAG2, note: MACHINE_READABLE }
|
|
1218
|
-
],
|
|
1219
|
-
flags: [
|
|
1220
|
-
{
|
|
1221
|
-
names: [RECORD],
|
|
1222
|
-
description: "the issue whose ledger dispositions decide round 1\u2019s closure \u2014 skip only when every High/Medium is `fixed` or `false-positive` \u2014 and where a skip is commented under `## Round 2 skipped`, once."
|
|
1223
|
-
},
|
|
1224
|
-
{ names: [JSON_FLAG2], description: "machine-readable verdict and reason." }
|
|
1225
|
-
]
|
|
1226
|
-
}
|
|
1227
|
-
},
|
|
1228
|
-
delegate: {
|
|
1229
|
-
script: "scripts/delegation/delegation-cli.ts",
|
|
1230
|
-
description: "Say whether a run step may go to a cheaper execution tier",
|
|
1231
|
-
category: "AI tools",
|
|
1232
|
-
reference: ["<step> | --list", "automation", ["none"]],
|
|
1233
|
-
usage: {
|
|
1234
|
-
examples: [
|
|
1235
|
-
{ arguments: "gate-fix", note: "\u2192 delegate" },
|
|
1236
|
-
{ arguments: "review", note: "\u2192 keep" },
|
|
1237
|
-
{ arguments: "--list", note: "the enumeration, and what was rejected and why" }
|
|
1238
|
-
]
|
|
1239
|
-
}
|
|
1240
|
-
},
|
|
1241
|
-
fanout: {
|
|
1242
|
-
script: "scripts/delegation/fanout-cli.ts",
|
|
1243
|
-
description: "Say whether proposed implementation units are file-disjoint, so they may run in parallel",
|
|
1244
|
-
category: "AI tools",
|
|
1245
|
-
reference: ["<unit-files> <unit-files> [<unit-files> \u2026]", "automation", ["none"]],
|
|
1246
|
-
usage: {
|
|
1247
|
-
examples: [
|
|
1248
|
-
{ arguments: "scripts/a.ts,scripts/a.test.ts scripts/b.ts", note: "\u2192 parallel" },
|
|
1249
|
-
{
|
|
1250
|
-
arguments: "scripts/a.ts,shared.ts scripts/b.ts,shared.ts",
|
|
1251
|
-
note: "\u2192 serial (units share shared.ts)"
|
|
1252
|
-
},
|
|
1253
|
-
{ arguments: "scripts/a.ts", note: "\u2192 serial (fewer than two units)" }
|
|
1254
|
-
]
|
|
1255
|
-
}
|
|
1256
|
-
}
|
|
1257
|
-
};
|
|
1258
|
-
|
|
1259
|
-
// scripts/josh/josh-commands-pause.ts
|
|
1260
|
-
var PAUSE_COMMANDS = {
|
|
1261
|
-
"run:pause": {
|
|
1262
|
-
script: "scripts/run/pause/run-pause-cli.ts",
|
|
1263
|
-
description: "Set a run aside while its prerequisite lands first",
|
|
1264
|
-
category: "AI tools",
|
|
1265
|
-
// `run:release` underneath can send the stop confirmation.
|
|
1266
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1267
|
-
reference: ["<issue> --for <prerequisite>", "automation", ["git", "network", "files"]],
|
|
1268
|
-
usage: {
|
|
1269
|
-
examples: [{ arguments: "1091 --for 1102", note: "pause 1091 until 1102 lands" }],
|
|
1270
|
-
flags: [
|
|
1271
|
-
{
|
|
1272
|
-
names: ["--for <prerequisite>"],
|
|
1273
|
-
description: "the issue that has to land first; `<issue>` is recorded blocked by it."
|
|
1274
|
-
}
|
|
1275
|
-
]
|
|
1276
|
-
}
|
|
1277
|
-
},
|
|
1278
|
-
"run:split": {
|
|
1279
|
-
script: "scripts/run/split/run-split-cli.ts",
|
|
1280
|
-
description: "Set a run aside and place its split or prerequisite into an epic in one call",
|
|
1281
|
-
category: "AI tools",
|
|
1282
|
-
// `run:release` underneath can send the stop confirmation.
|
|
1283
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1284
|
-
reference: [
|
|
1285
|
-
"<issue> (--children <N1,N2,...> [--ordered] | --prerequisite <P>) [--title <title>]",
|
|
1286
|
-
"automation",
|
|
1287
|
-
["git", "network", "files"]
|
|
1288
|
-
],
|
|
1289
|
-
usage: {
|
|
1290
|
-
examples: [
|
|
1291
|
-
{ arguments: '1091 --children 1102,1103 --title "Split 1091"', note: "independent split" },
|
|
1292
|
-
{ arguments: "1091 --children 1102 --ordered", note: "1102 after 1091" },
|
|
1293
|
-
{ arguments: '1091 --prerequisite 1104 --title "1104 then 1091"', note: "1104 first" }
|
|
1294
|
-
],
|
|
1295
|
-
flags: [
|
|
1296
|
-
{
|
|
1297
|
-
names: ["--children <N1,N2,...>"],
|
|
1298
|
-
description: "the filed split issues, comma-separated."
|
|
1299
|
-
},
|
|
1300
|
-
{ names: ["--ordered"], description: "`<issue>` first, then the children in that order." },
|
|
1301
|
-
{
|
|
1302
|
-
names: ["--prerequisite <P>"],
|
|
1303
|
-
description: "the filed issue that has to land first; `<issue>` is paused on it."
|
|
1304
|
-
},
|
|
1305
|
-
{
|
|
1306
|
-
names: ["--title <title>"],
|
|
1307
|
-
description: "the new epic\u2019s title; required when no epic tracks `<issue>` yet."
|
|
1308
|
-
}
|
|
1309
|
-
]
|
|
1310
|
-
}
|
|
1311
|
-
},
|
|
1312
|
-
"run:stale": {
|
|
1313
|
-
script: "scripts/run/stale/run-stale-main.ts",
|
|
1314
|
-
description: "Remove a stale `in-progress` label no checkout still holds",
|
|
1315
|
-
category: "AI tools",
|
|
1316
|
-
reference: ["", "automation", ["git", "network", "files"]],
|
|
1317
|
-
usage: { examples: [{ arguments: "" }] }
|
|
1318
|
-
},
|
|
1319
|
-
"tree:status": {
|
|
1320
|
-
script: "scripts/run/tree-status-cli.ts",
|
|
1321
|
-
description: "Bundle the working tree\u2019s read-only pre-check: branch, status, stash list, run hold",
|
|
1322
|
-
category: "AI tools",
|
|
1323
|
-
// Reads the branch, status, stash list and hold only; a consultation scope runs it.
|
|
1324
|
-
is_read_only: true,
|
|
1325
|
-
reference: ["", "automation", ["git", "files"]],
|
|
1326
|
-
usage: { examples: [{ arguments: "" }] }
|
|
1327
|
-
}
|
|
1328
|
-
};
|
|
1329
|
-
|
|
1330
|
-
// scripts/josh/josh-commands-prime.ts
|
|
1331
|
-
var PRIME_COMMANDS = {
|
|
1332
|
-
"run:tidy": {
|
|
1333
|
-
script: "scripts/run/tidy/run-tidy-main.ts",
|
|
1334
|
-
description: "Close merged lanes and drop stashes whose issues are all merged",
|
|
1335
|
-
category: "AI tools",
|
|
1336
|
-
reference: ["", "automation", ["git", "network", "files"]],
|
|
1337
|
-
usage: { examples: [{ arguments: "" }] }
|
|
1338
|
-
},
|
|
1339
|
-
"run:prime": {
|
|
1340
|
-
script: "scripts/run/prime/run-prime-cli.ts",
|
|
1341
|
-
description: "Prepare the primary checkout once before a backlogrun\u2019s first lane: main:sync, latest:if-required, the update stashed, lane:prune, run:tidy",
|
|
1342
|
-
category: "AI tools",
|
|
1343
|
-
// `latest:if-required` underneath runs `josh latest`, which reads `.env`.
|
|
1344
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1345
|
-
reference: ["", "automation", ["git", "network", "files", "processes"]],
|
|
1346
|
-
usage: {
|
|
1347
|
-
examples: [{ arguments: "", note: "prints `latest <scope>` and `stash <message>|clean`" }]
|
|
1348
|
-
}
|
|
1349
|
-
}
|
|
1350
|
-
};
|
|
1351
|
-
|
|
1352
|
-
// scripts/josh/josh-commands-progress.ts
|
|
1353
|
-
var PROGRESS_COMMANDS = {
|
|
1354
|
-
"run:progress": {
|
|
1355
|
-
script: "scripts/run/progress/run-progress-main.ts",
|
|
1356
|
-
description: "Report an unattended run\u2019s progress once it has gone quiet for an interval",
|
|
1357
|
-
category: "AI tools",
|
|
1358
|
-
reference: [
|
|
1359
|
-
"[--once | --wait] [--interval <minutes>] [--hours <hours>] [--repo <owner/repo>] [--output <path>] | --mark | --path",
|
|
1360
|
-
"automation",
|
|
1361
|
-
["files"]
|
|
1362
|
-
],
|
|
1363
|
-
usage: {
|
|
1364
|
-
examples: [
|
|
1365
|
-
{ arguments: "--output <path>" },
|
|
1366
|
-
{ arguments: "--once", note: "five labelled lines now, whatever the clock says" },
|
|
1367
|
-
{ arguments: "--interval 20 --repo joshuafolkken/app-kit --hours 4" }
|
|
1368
|
-
],
|
|
1369
|
-
flags: [
|
|
1370
|
-
{
|
|
1371
|
-
names: ["--mark"],
|
|
1372
|
-
description: "record that a real report happened without printing a line (keeps the last line for `run:wake --list`)."
|
|
1373
|
-
},
|
|
1374
|
-
{
|
|
1375
|
-
names: ["--path"],
|
|
1376
|
-
description: 'print the ambient heartbeat log\'s path and exit. Every heartbeat line is mirrored there, so `tail -F "$(pnpm josh run:progress --path)"` follows the run across a `backlogrun` session cut. Reads no run state, so it answers in a lane child too.'
|
|
1377
|
-
},
|
|
1378
|
-
{
|
|
1379
|
-
names: ["--interval <min>"],
|
|
1380
|
-
description: "silence interval (default 20; also `JOSH_PROGRESS_INTERVAL_MINUTES`, then `josh.progress_interval_minutes`)."
|
|
1381
|
-
},
|
|
1382
|
-
{
|
|
1383
|
-
names: ["--wait"],
|
|
1384
|
-
description: 'start once in the background: as it starts it prints `progress-watcher.md` \u2192 "Progress while the run is quiet" once per session (a repeat names it in one line \u2014 `run:entry` has printed it first outside a lane child); each report then goes to the event stream and ambient log, never stdout; exits only on an arrival, `josh followup` ending the run, or `--hours`.'
|
|
1385
|
-
},
|
|
1386
|
-
{
|
|
1387
|
-
names: ["--hours <n>"],
|
|
1388
|
-
description: "how long the watcher lives (default 8 with `--wait`, 1 otherwise)."
|
|
1389
|
-
},
|
|
1390
|
-
{ names: ["--repo <owner/name>"], description: "scopes the read." }
|
|
1391
|
-
]
|
|
1392
|
-
}
|
|
1393
|
-
},
|
|
1394
|
-
"run:board": {
|
|
1395
|
-
script: "scripts/run/board/run-board-main.ts",
|
|
1396
|
-
// `--every` pushes its frame as a Telegram, so the credentials come from `.env` as for `run:carry`.
|
|
1397
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1398
|
-
description: "Draw a live board of the running backlogrun, redrawn every second",
|
|
1399
|
-
category: "AI tools",
|
|
1400
|
-
reference: ["[--once | --chat | --every <minutes>]", "automation", ["files", "network"]],
|
|
1401
|
-
usage: {
|
|
1402
|
-
examples: [
|
|
1403
|
-
{ arguments: "", note: "redraw until interrupted" },
|
|
1404
|
-
{ arguments: "--once", note: "one frame, then exit" },
|
|
1405
|
-
{ arguments: "--chat", note: "one frame for a chat, recorded as a progress report" },
|
|
1406
|
-
{
|
|
1407
|
-
arguments: "--every 5",
|
|
1408
|
-
note: "the --chat frame as a \u{1F4CA} Progress Telegram every 5 minutes, until the run ends"
|
|
1409
|
-
}
|
|
1410
|
-
],
|
|
1411
|
-
flags: [
|
|
1412
|
-
{
|
|
1413
|
-
names: ["--chat"],
|
|
1414
|
-
description: "answers a `backlogrun`, `fullrun` or `halfrun` progress question: the frame `--once` draws, with only `\u{1F9E0}` on the machine line and no escapes; it records the report as `run:progress --mark` does."
|
|
1415
|
-
},
|
|
1416
|
-
{
|
|
1417
|
-
names: ["--every <minutes>"],
|
|
1418
|
-
description: "sends the `--chat` frame as a `\u{1F4CA} Progress` Telegram now and every `<minutes>` until the run ends \u2014 only when a person asks for it."
|
|
1419
|
-
}
|
|
1420
|
-
]
|
|
1421
|
-
}
|
|
1422
|
-
},
|
|
1423
|
-
"run:pickup": {
|
|
1424
|
-
script: "scripts/run/run-pickup-cli.ts",
|
|
1425
|
-
description: "Pick the lanes up after a manual cut: launch what the epics offer, then each liveness and the watcher line",
|
|
1426
|
-
category: "AI tools",
|
|
1427
|
-
reference: ["[<epic>...]", "automation", ["processes"]],
|
|
1428
|
-
usage: {
|
|
1429
|
-
examples: [
|
|
1430
|
-
{ arguments: "", note: "one line per lane, then the watcher line" },
|
|
1431
|
-
{
|
|
1432
|
-
arguments: "5800",
|
|
1433
|
-
note: "first one line per child the epic offers: launched, refused or its verdict"
|
|
1434
|
-
}
|
|
1435
|
-
]
|
|
1436
|
-
}
|
|
1437
|
-
},
|
|
1438
|
-
"run:handoff-lanes": {
|
|
1439
|
-
script: "scripts/run/handoff-lanes/run-handoff-lanes-cli.ts",
|
|
1440
|
-
description: "Chain a backlogrun hand-off: cost --cut, the lane reading, run:carry --cut, run:board --chat and run:report --handoff, answering under, cut, blocked or capped",
|
|
1441
|
-
category: "AI tools",
|
|
1442
|
-
reference: ["", "automation", ["processes", "files", "network"]],
|
|
1443
|
-
usage: {
|
|
1444
|
-
examples: [
|
|
1445
|
-
{
|
|
1446
|
-
arguments: "",
|
|
1447
|
-
note: "after each child\u2019s merge; prints the verdict line, then its next action"
|
|
1448
|
-
}
|
|
1449
|
-
]
|
|
1450
|
-
}
|
|
1451
|
-
},
|
|
1452
|
-
"run:handoff": {
|
|
1453
|
-
script: "scripts/run/handoff/run-handoff-cli.ts",
|
|
1454
|
-
description: "Hand a workflow keyword typed in a consultation session to a child on the role profile model",
|
|
1455
|
-
category: "AI tools",
|
|
1456
|
-
reference: ["<keyword> [N|new ...] --brief-file <path>", "automation", ["processes", "files"]],
|
|
1457
|
-
usage: {
|
|
1458
|
-
examples: [
|
|
1459
|
-
{
|
|
1460
|
-
arguments: "kickoff new --brief-file .josh/tmp/brief.md",
|
|
1461
|
-
note: "waits; prints its final message and URLs"
|
|
1462
|
-
},
|
|
1463
|
-
{
|
|
1464
|
-
arguments: "fullrun <N> --brief-file .josh/tmp/brief.md",
|
|
1465
|
-
note: "detached; a bare N is #N; check it with run:progress --once"
|
|
1466
|
-
},
|
|
1467
|
-
{
|
|
1468
|
-
arguments: "backlogrun <E> --only",
|
|
1469
|
-
note: "josh backlogrun with this session\u2019s --agent"
|
|
1470
|
-
}
|
|
1471
|
-
]
|
|
1472
|
-
}
|
|
1473
|
-
}
|
|
1474
|
-
};
|
|
1475
|
-
|
|
1476
|
-
// scripts/josh/josh-commands-run.ts
|
|
1477
|
-
var OWNER = "--owner <pid>";
|
|
1478
|
-
var OUTPUT = "--output <path>";
|
|
1479
|
-
var REPO_FLAG2 = { names: ["--repo <owner/name>"], description: "a child in another repository." };
|
|
1480
|
-
var ISSUE = { arguments: "<N>" };
|
|
1481
|
-
var RUN_HOLD_SCRIPT = "scripts/run/hold/run-hold-main.ts";
|
|
1482
|
-
var RUN_COMMANDS = {
|
|
1483
|
-
"run:hold": {
|
|
1484
|
-
script: RUN_HOLD_SCRIPT,
|
|
1485
|
-
description: "Claim this working tree for a run, or say which run already holds it",
|
|
1486
|
-
category: "AI tools",
|
|
1487
|
-
// A `--halfrun-stop` / `--human-review-stop` / `--prrun-stop` sends the stop confirmation.
|
|
1488
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1489
|
-
reference: [
|
|
1490
|
-
"[<issue> [--fullrun | --halfrun-stop | --human-review-stop | --prrun-stop]] | --adopt <issue>",
|
|
1491
|
-
"automation",
|
|
1492
|
-
["files"]
|
|
1493
|
-
],
|
|
1494
|
-
usage: {
|
|
1495
|
-
examples: [
|
|
1496
|
-
{ arguments: "1091", note: "claim for issue 1091" },
|
|
1497
|
-
{ arguments: "1091 --fullrun", note: "claim as `fullrun #1091` (what `run:entry` runs)" },
|
|
1498
|
-
{ arguments: "--adopt 1091", note: "hand a `new` run's hold to the issue it filed" }
|
|
1499
|
-
],
|
|
1500
|
-
flags: [
|
|
1501
|
-
{ names: ["--fullrun"], description: "marks the record as `fullrun #N`'s." },
|
|
1502
|
-
{
|
|
1503
|
-
names: ["--adopt <issue>"],
|
|
1504
|
-
description: "re-keys the unnumbered `new` run's record to the filed issue and applies `in-progress`; answers `none` (exit 1) when the tree holds no record."
|
|
1505
|
-
},
|
|
1506
|
-
{
|
|
1507
|
-
names: ["--halfrun-stop"],
|
|
1508
|
-
description: "marks a `halfrun` stop for `run:entry` to adopt, and sends its `confirmation` Telegram; answers `e2e-owed` (exit 1) until `test:e2e` answered green on this tree."
|
|
1509
|
-
},
|
|
1510
|
-
{
|
|
1511
|
-
names: ["--human-review-stop"],
|
|
1512
|
-
description: "marks a `halfrun` stop and a `human-review` lane, retaining its tree and hold. Sends `confirmation`; its worker's exit frees the execution place. Answers `e2e-owed` (exit 1) until `test:e2e` is green on this tree."
|
|
1513
|
-
},
|
|
1514
|
-
{
|
|
1515
|
-
names: ["--prrun-stop"],
|
|
1516
|
-
description: "marks a `prrun` stop with the commit its pull request is on, and sends its `confirmation` Telegram."
|
|
1517
|
-
}
|
|
1518
|
-
]
|
|
1519
|
-
}
|
|
1520
|
-
},
|
|
1521
|
-
"run:release": {
|
|
1522
|
-
script: RUN_HOLD_SCRIPT,
|
|
1523
|
-
description: "Release this working tree's run record",
|
|
1524
|
-
category: "AI tools",
|
|
1525
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1526
|
-
reference: ["[issue|--force]", "automation", ["files"]],
|
|
1527
|
-
default_script_arguments: ["--release"],
|
|
1528
|
-
usage: {
|
|
1529
|
-
examples: [
|
|
1530
|
-
{ arguments: "1091", note: "release this run's own record" },
|
|
1531
|
-
{ arguments: "--force", note: "clear a record left by a run that has ended" }
|
|
1532
|
-
],
|
|
1533
|
-
flags: [
|
|
1534
|
-
{
|
|
1535
|
-
names: ["--force"],
|
|
1536
|
-
description: "removes a record this run did not write, clearing another run's stale claim."
|
|
1537
|
-
}
|
|
1538
|
-
]
|
|
1539
|
-
}
|
|
1540
|
-
},
|
|
1541
|
-
...PAUSE_COMMANDS,
|
|
1542
|
-
...PRIME_COMMANDS,
|
|
1543
|
-
"run:carry": {
|
|
1544
|
-
script: "scripts/run/carry/run-carry-cli.ts",
|
|
1545
|
-
// `--stopped` sends the stop confirmation, so the Telegram credentials come from `.env` as for
|
|
1546
|
-
// `run:wake` below.
|
|
1547
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1548
|
-
description: "Carry one invocation\u2019s budget across its own session cuts",
|
|
1549
|
-
category: "AI tools",
|
|
1550
|
-
reference: ["<operation> [arguments...]", "automation", ["files"]],
|
|
1551
|
-
usage: {
|
|
1552
|
-
examples: [
|
|
1553
|
-
{ arguments: '--begin "backlogrun --max 5"' },
|
|
1554
|
-
{ arguments: "--json", note: "read the record back in a resumed session" },
|
|
1555
|
-
{ arguments: "--cut", note: "hand the record off before a cut" },
|
|
1556
|
-
{
|
|
1557
|
-
arguments: '--retrospective --summary "0 filed; dropped #2240 already merged"',
|
|
1558
|
-
note: "close the end-of-run retrospective"
|
|
1559
|
-
},
|
|
1560
|
-
{ arguments: '--resume "backlogrun --max 5"', note: "adopt a record no cut handed off" },
|
|
1561
|
-
{
|
|
1562
|
-
arguments: '--end --stopped "epic #2126: everything is blocked behind parked #2118"',
|
|
1563
|
-
note: "end + push"
|
|
1564
|
-
}
|
|
1565
|
-
],
|
|
1566
|
-
flags: [
|
|
1567
|
-
{
|
|
1568
|
-
names: [OWNER],
|
|
1569
|
-
description: "the long-lived process spending the budget; omitted, the `CLAUDE_PID` of the calling Claude session (none elsewhere, e.g. Codex). Read by counts and `--begin` / `--resume`. A live PID stays `busy` if probes fail."
|
|
1570
|
-
},
|
|
1571
|
-
{ names: ["--done <issue>"], description: "shrinks a named-issue run's `remaining` list." },
|
|
1572
|
-
{
|
|
1573
|
-
names: ["--merged <issue>"],
|
|
1574
|
-
description: "names the merged issue and counts it once against `merged_issues`, so a merge `run:merge` already recorded is not counted twice."
|
|
1575
|
-
},
|
|
1576
|
-
{ names: ["--filed", "--cut"], description: "increments, never totals." },
|
|
1577
|
-
{
|
|
1578
|
-
names: ["--retrospective"],
|
|
1579
|
-
description: "marks the end-of-run retrospective run, once per invocation, and requires `--summary <text>` \u2014 the same close writes that result as one `retrospective` event on the run's event stream (best-effort), so a run that filed zero improvements reads apart from one whose retrospective never ran. Either flag without the other is refused."
|
|
1580
|
-
},
|
|
1581
|
-
{
|
|
1582
|
-
names: ["--stopped <reason>"],
|
|
1583
|
-
description: "rides on `--end`: the run stopped rather than finished, so one \u23F8\uFE0F confirmation is pushed with the reason."
|
|
1584
|
-
},
|
|
1585
|
-
{
|
|
1586
|
-
names: ["--end"],
|
|
1587
|
-
description: "over a live record flushes pending ledger lines once (a failed flush goes to stderr and the record is still cleared); first collects each lane the run launched whose issue merged, exactly as `run:merge` would; keeps the run it removes as the last ended run \u2014 its invocation, start and end, one record overwritten by the next `--end` \u2014 so `run:board` can still draw a finished run."
|
|
1588
|
-
}
|
|
1589
|
-
]
|
|
1590
|
-
}
|
|
1591
|
-
},
|
|
1592
|
-
"run:add": {
|
|
1593
|
-
script: "scripts/run/add/run-add-cli.ts",
|
|
1594
|
-
description: "Add issues to a live backlogrun, ahead of the queue unless --no-priority; epics become roots",
|
|
1595
|
-
category: "AI tools",
|
|
1596
|
-
reference: ["<issue...> [--no-priority] [--retry]", "automation", ["network", "files"]],
|
|
1597
|
-
usage: {
|
|
1598
|
-
examples: [
|
|
1599
|
-
{ arguments: "101 102", note: "ahead of the rest of the queue (`#N` works too)" },
|
|
1600
|
-
{ arguments: "101 --no-priority", note: "at the end of the queue" },
|
|
1601
|
-
{ arguments: "101 --retry", note: "retry a mechanically stopped issue in this run" }
|
|
1602
|
-
]
|
|
1603
|
-
}
|
|
1604
|
-
},
|
|
1605
|
-
"run:wake": {
|
|
1606
|
-
script: "scripts/run/wake/run-wake-main.ts",
|
|
1607
|
-
// `.env` rather than the ambient environment:
|
|
1608
|
-
// the failure warning needs the Telegram credentials, the same
|
|
1609
|
-
// reasons `notify` and `followup` carry these flags.
|
|
1610
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1611
|
-
description: "Wake the next session of a cut backlogrun from outside the conversation",
|
|
1612
|
-
category: "AI tools",
|
|
1613
|
-
reference: ["[options]", "automation", ["processes", "notifications"]],
|
|
1614
|
-
usage: {
|
|
1615
|
-
examples: [
|
|
1616
|
-
{ arguments: "--start", note: "launch the detached supervisor" },
|
|
1617
|
-
{ arguments: "--list", note: "supervisor state, cut/wake counts, latest progress line" },
|
|
1618
|
-
{ arguments: "--stop", note: "stop the supervisor alone" },
|
|
1619
|
-
{ arguments: "--loop --interval 30", note: "run the loop body in the foreground" }
|
|
1620
|
-
]
|
|
1621
|
-
}
|
|
1622
|
-
},
|
|
1623
|
-
"run:cut": {
|
|
1624
|
-
script: "scripts/run/cut/run-cut-cli.ts",
|
|
1625
|
-
description: "Cut a lane child before the gate and resume a fresh process",
|
|
1626
|
-
category: "AI tools",
|
|
1627
|
-
reference: ["[--resume] <issue> [--impl] [--handoff <path>]", "automation", ["files"]],
|
|
1628
|
-
usage: {
|
|
1629
|
-
examples: [
|
|
1630
|
-
{ arguments: "1839", note: "take the cut and hand it to a fresh process" },
|
|
1631
|
-
{
|
|
1632
|
-
arguments: "--impl 1839 --handoff .josh/tmp/handoff-1839.json",
|
|
1633
|
-
note: "cut mid-implementation, carrying the instruction"
|
|
1634
|
-
},
|
|
1635
|
-
{ arguments: "--resume 1839", note: "a fresh process's entry check" },
|
|
1636
|
-
{ arguments: "--end", note: "clear the record" }
|
|
1637
|
-
]
|
|
1638
|
-
}
|
|
1639
|
-
},
|
|
1640
|
-
"run:park": {
|
|
1641
|
-
script: "scripts/run/park/run-park-cli.ts",
|
|
1642
|
-
description: "Park a lane child for a decision or an escalation, or clear the park",
|
|
1643
|
-
category: "AI tools",
|
|
1644
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1645
|
-
reference: [
|
|
1646
|
-
"<issue> --body-file <path> | <issue> --clear | <issue> --escalate <reason>",
|
|
1647
|
-
"automation",
|
|
1648
|
-
["files", "network"]
|
|
1649
|
-
],
|
|
1650
|
-
usage: {
|
|
1651
|
-
examples: [
|
|
1652
|
-
{
|
|
1653
|
-
arguments: "1839 --body-file .josh/tmp/park-1839.md",
|
|
1654
|
-
note: "options, tiers and a recommendation; then needs-decision, the record, run:release"
|
|
1655
|
-
},
|
|
1656
|
-
{ arguments: "1839 --clear", note: "remove needs-decision and the record" },
|
|
1657
|
-
{
|
|
1658
|
-
arguments: '1839 --escalate "needs a stronger model"',
|
|
1659
|
-
note: "josh.worker.escalate only: run:stalled with the reason, resumed one profile up"
|
|
1660
|
-
}
|
|
1661
|
-
]
|
|
1662
|
-
}
|
|
1663
|
-
},
|
|
1664
|
-
"run:liveness": {
|
|
1665
|
-
script: "scripts/run/run-liveness-cli.ts",
|
|
1666
|
-
description: "Say whether a delegated unit is still working, or stopped without reporting",
|
|
1667
|
-
category: "AI tools",
|
|
1668
|
-
reference: ["<issue> --output <path> [options]", "automation", ["processes"]],
|
|
1669
|
-
usage: {
|
|
1670
|
-
examples: [
|
|
1671
|
-
{ arguments: "1169 --output <path>" },
|
|
1672
|
-
{ arguments: "1169 --output <path> --window 45 --gap 2 --repo joshuafolkken/app-kit" }
|
|
1673
|
-
],
|
|
1674
|
-
flags: [
|
|
1675
|
-
{
|
|
1676
|
-
names: [OUTPUT],
|
|
1677
|
-
description: "absolute, under the home or temp directory; a symlink is followed and size compared as well as mtime."
|
|
1678
|
-
},
|
|
1679
|
-
{
|
|
1680
|
-
names: ["--process alive | none"],
|
|
1681
|
-
description: "overrides the process trace, which the command otherwise reads itself: the child's own command line (`fullrun #<N>`) or its detached ship supervisor."
|
|
1682
|
-
},
|
|
1683
|
-
{
|
|
1684
|
-
names: ["--window <min>"],
|
|
1685
|
-
description: "silent window the file must be frozen for (default 30)."
|
|
1686
|
-
},
|
|
1687
|
-
{ names: ["--gap <sec>"], description: "spacing between samples (default 5)." },
|
|
1688
|
-
REPO_FLAG2
|
|
1689
|
-
]
|
|
1690
|
-
}
|
|
1691
|
-
},
|
|
1692
|
-
"run:ending": {
|
|
1693
|
-
script: "scripts/run/run-ending-cli.ts",
|
|
1694
|
-
description: "Classify how a dispatched lane child ended (merged, cut, abandoned, unreadable)",
|
|
1695
|
-
category: "AI tools",
|
|
1696
|
-
reference: ["<issue> --output <path> [--repo <owner/repo>]", "automation", ["network"]],
|
|
1697
|
-
usage: {
|
|
1698
|
-
examples: [
|
|
1699
|
-
{ arguments: "2118 --output <path>" },
|
|
1700
|
-
{ arguments: "2118 --output <path> --repo joshuafolkken/app-kit" }
|
|
1701
|
-
],
|
|
1702
|
-
flags: [
|
|
1703
|
-
{
|
|
1704
|
-
names: [OUTPUT],
|
|
1705
|
-
description: "the child's transcript, absolute and under the home or temp directory (validated the same way `run:liveness --output` is)."
|
|
1706
|
-
},
|
|
1707
|
-
REPO_FLAG2
|
|
1708
|
-
]
|
|
1709
|
-
}
|
|
1710
|
-
},
|
|
1711
|
-
...PROGRESS_COMMANDS,
|
|
1712
|
-
"run:prep": {
|
|
1713
|
-
script: "scripts/run/run-prep-main.ts",
|
|
1714
|
-
description: "Bundle a run\u2019s pre-edit reads: body, comments, state, dependency scope",
|
|
1715
|
-
category: "AI tools",
|
|
1716
|
-
reference: ["<issue> [--summary]", "automation", ["network"]],
|
|
1717
|
-
usage: { examples: [ISSUE, { arguments: "<N> --summary", note: "the work summary skeleton" }] }
|
|
1718
|
-
},
|
|
1719
|
-
// The entry sequence a lane opened on, folded into one call: claim the tree,
|
|
1720
|
-
// read the budget, gather the issue reads and decide the pre-implementation step. `run:hold`,
|
|
1721
|
-
// `cost --cut`, `run:prep` and `run:step` were four round trips re-billing a lane's full context each.
|
|
1722
|
-
"run:entry": {
|
|
1723
|
-
script: "scripts/run/entry/run-entry-cli.ts",
|
|
1724
|
-
// A `busy` hold or an `over` budget sends the stop confirmation.
|
|
1725
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1726
|
-
description: "Open a run in one call: claim the tree, read the budget, bundle the reads, decide the pre-implementation step",
|
|
1727
|
-
category: "AI tools",
|
|
1728
|
-
reference: ["<issue> [--to <command>] [--adopt]", "automation", ["git", "network", "files"]],
|
|
1729
|
-
usage: {
|
|
1730
|
-
examples: [
|
|
1731
|
-
{ arguments: "<N>", note: "a `fullrun`" },
|
|
1732
|
-
{ arguments: "<N> --to halfrun", note: "a run that goes as far as `halfrun`" },
|
|
1733
|
-
{ arguments: "<N> --adopt", note: "a `new` run's entry once <N> is filed" }
|
|
1734
|
-
]
|
|
1735
|
-
}
|
|
1736
|
-
},
|
|
1737
|
-
"run:status": {
|
|
1738
|
-
script: "scripts/run/run-status-cli.ts",
|
|
1739
|
-
description: "Bundle a run\u2019s read-only status: issue state, cost verdict, carry counters",
|
|
1740
|
-
category: "AI tools",
|
|
1741
|
-
reference: ["<issue> [--repo <owner/repo>]", "automation", ["network"]],
|
|
1742
|
-
usage: {
|
|
1743
|
-
examples: [ISSUE, { arguments: "<N> --repo <owner/repo>", note: "a cross-repo child" }]
|
|
1744
|
-
}
|
|
1745
|
-
},
|
|
1746
|
-
"run:next": {
|
|
1747
|
-
script: "scripts/run/run-next-cli.ts",
|
|
1748
|
-
description: "Print the next step a fullrun takes, computed from the run\u2019s state",
|
|
1749
|
-
category: "AI tools",
|
|
1750
|
-
reference: ["<issue>", "automation", ["network"]],
|
|
1751
|
-
usage: { examples: [ISSUE] }
|
|
1752
|
-
},
|
|
1753
|
-
"run:step": {
|
|
1754
|
-
script: "scripts/run/run-step-cli.ts",
|
|
1755
|
-
description: "Print the run\u2019s next single action, computed from the event stream, carry record and issue state",
|
|
1756
|
-
category: "AI tools",
|
|
1757
|
-
reference: ["[<issue>]", "automation", ["network", "files"]],
|
|
1758
|
-
usage: {
|
|
1759
|
-
examples: [
|
|
1760
|
-
{ arguments: "<N>", note: "the run's next action for issue <N>" },
|
|
1761
|
-
{ arguments: "", note: "the `backlogrun` parent's next action" }
|
|
1762
|
-
]
|
|
1763
|
-
}
|
|
1764
|
-
}
|
|
1765
|
-
};
|
|
1766
|
-
|
|
1767
|
-
// scripts/josh/josh-commands-ship.ts
|
|
1768
|
-
var OUTPUT2 = "--output <path>";
|
|
1769
|
-
var OWNER2 = "--owner <pid>";
|
|
1770
|
-
var ISSUE_WITH_OPTIONS = "<issue> [options]";
|
|
1771
|
-
var SHIP_COMMANDS = {
|
|
1772
|
-
"run:merge": {
|
|
1773
|
-
script: "scripts/run/merge/run-merge-main.ts",
|
|
1774
|
-
description: "Collapse a backlogrun merge event into one call: confirm the child, do the post-merge steps, offer the next child",
|
|
1775
|
-
category: "AI tools",
|
|
1776
|
-
reference: [ISSUE_WITH_OPTIONS, "automation", ["git", "network"]],
|
|
1777
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1778
|
-
usage: {
|
|
1779
|
-
examples: [
|
|
1780
|
-
{
|
|
1781
|
-
arguments: "<N> --epic <E> --repo <owner/repo> --output <path>",
|
|
1782
|
-
note: "prints the next child number, or a verdict"
|
|
1783
|
-
},
|
|
1784
|
-
{ arguments: "<N>", note: "backlog offer (no epic)" }
|
|
1785
|
-
],
|
|
1786
|
-
flags: [
|
|
1787
|
-
{
|
|
1788
|
-
names: ["--epic <E>", "--repo <owner/repo>"],
|
|
1789
|
-
description: "offer the epic's next children; omit both for the opted-in backlog."
|
|
1790
|
-
},
|
|
1791
|
-
{
|
|
1792
|
-
names: [OWNER2],
|
|
1793
|
-
description: "the parent's process, so the carry count respects the ownership guard; omitted, the calling session."
|
|
1794
|
-
},
|
|
1795
|
-
{
|
|
1796
|
-
names: [OUTPUT2],
|
|
1797
|
-
description: "the transcript the outage and usage-limit splits read; absent, they are off."
|
|
1798
|
-
},
|
|
1799
|
-
{
|
|
1800
|
-
names: ["--driver"],
|
|
1801
|
-
description: "the caller is `backlog:drive`, which has no context to cut and asks `backlog:offer` itself, so the merge is never handed back `over` and answers `deferred` in place of the next offer."
|
|
1802
|
-
},
|
|
1803
|
-
{
|
|
1804
|
-
names: ["--stash"],
|
|
1805
|
-
description: "before classifying, stash the lane's uncommitted work and comment the `stash:pop` line on the Issue \u2014 the stopped-unit recovery."
|
|
1806
|
-
}
|
|
1807
|
-
]
|
|
1808
|
-
}
|
|
1809
|
-
},
|
|
1810
|
-
"run:review": {
|
|
1811
|
-
script: "scripts/run/review/run-review-cli.ts",
|
|
1812
|
-
description: "Start test:pinned in the background, run the gate and, once it is green, write the /code-review brief to a file, printing its path (--join to join them; it stops on an unpinned change)",
|
|
1813
|
-
category: "AI tools",
|
|
1814
|
-
reference: [
|
|
1815
|
-
'[--code-only] [--unpinned-ok "<reason>"] | --join [--fixing] | --pinned | --push',
|
|
1816
|
-
"automation",
|
|
1817
|
-
["processes", "files", "git", "network"]
|
|
1818
|
-
],
|
|
1819
|
-
usage: {
|
|
1820
|
-
examples: [
|
|
1821
|
-
{
|
|
1822
|
-
arguments: "",
|
|
1823
|
-
note: "detach test:pinned, wait for a green gate, write the brief (the interaction brief after it where due) to a file and print its path, then launch a reviewer per brief"
|
|
1824
|
-
},
|
|
1825
|
-
{
|
|
1826
|
-
arguments: "--code-only",
|
|
1827
|
-
note: "josh ship's own open: code's brief alone, since the ship opens the interaction brief itself"
|
|
1828
|
-
},
|
|
1829
|
-
{
|
|
1830
|
-
arguments: '--unpinned-ok "only logs"',
|
|
1831
|
-
note: "check beside the pair as ever; the join prints the list and the reason and carries on past unpinned places"
|
|
1832
|
-
},
|
|
1833
|
-
{
|
|
1834
|
-
arguments: "--join",
|
|
1835
|
-
note: "after the review returns: join the gate and test:pinned; exit 3 on an unpinned change"
|
|
1836
|
-
},
|
|
1837
|
-
{
|
|
1838
|
-
arguments: "--join --fixing",
|
|
1839
|
-
note: "the join when round 1 has fixes to make: no grace on test:pinned, left running; prints the unpinned places the cache already holds"
|
|
1840
|
-
},
|
|
1841
|
-
{
|
|
1842
|
-
arguments: "--pinned",
|
|
1843
|
-
note: "read test:pinned alone (the ship's pre-detach reads it anyway); a lane child returns at once"
|
|
1844
|
-
},
|
|
1845
|
-
{
|
|
1846
|
-
arguments: "--push",
|
|
1847
|
-
note: "launched by a lane open: push and open the PR at a green gate"
|
|
1848
|
-
}
|
|
1849
|
-
]
|
|
1850
|
-
}
|
|
1851
|
-
},
|
|
1852
|
-
// The main line's chain up to the review, folded into one call: `main:merge`, `review:selfcheck`,
|
|
1853
|
-
// `check:related` and `run:review` were four round trips re-billing the run's full context each.
|
|
1854
|
-
"run:chain": {
|
|
1855
|
-
script: "scripts/run/review/run-chain-cli.ts",
|
|
1856
|
-
description: "Open the review, or --join to join, attest and record it; --ship starts ship --detach --review after a clean record. Stops at the first refusal with its next action",
|
|
1857
|
-
category: "AI tools",
|
|
1858
|
-
reference: [
|
|
1859
|
-
'<issue> [--from <stage>] [--unpinned-ok "<reason>"] | <issue> --join [--fixing] [--from <stage>] [--ship "<title> #<N>"]',
|
|
1860
|
-
"automation",
|
|
1861
|
-
["processes", "files", "git", "network"]
|
|
1862
|
-
],
|
|
1863
|
-
usage: {
|
|
1864
|
-
examples: [
|
|
1865
|
-
{
|
|
1866
|
-
arguments: "<N>",
|
|
1867
|
-
note: "after `run:cut <N>` alone: merge main (not in a lane child), answer the self-check, run the scoped pair, open the review"
|
|
1868
|
-
},
|
|
1869
|
-
{
|
|
1870
|
-
arguments: "<N> --from check:related",
|
|
1871
|
-
note: "resume at the stage a stop named, once the run settled it"
|
|
1872
|
-
},
|
|
1873
|
-
{
|
|
1874
|
-
arguments: '<N> --unpinned-ok "only logs"',
|
|
1875
|
-
note: "forwarded to run:review as given"
|
|
1876
|
-
},
|
|
1877
|
-
{
|
|
1878
|
-
arguments: "<N> --join",
|
|
1879
|
-
note: "join the gate, attest and record; every finding holds for disposition"
|
|
1880
|
-
},
|
|
1881
|
-
{
|
|
1882
|
-
arguments: "<N> --join --fixing",
|
|
1883
|
-
note: "the same, when round 1 has fixes to make"
|
|
1884
|
-
},
|
|
1885
|
-
{
|
|
1886
|
-
arguments: '<N> --join --ship "<title> #<N>"',
|
|
1887
|
-
note: "ship a clean round; title must match the issue. Record interaction review first."
|
|
1888
|
-
}
|
|
1889
|
-
]
|
|
1890
|
-
}
|
|
1891
|
-
},
|
|
1892
|
-
// The post-merge sequence a run closed on, folded into one call: commit the
|
|
1893
|
-
// observation ledger, read the completion citations and decide the release scope. `observations:flush`,
|
|
1894
|
-
// `issue:cite` and `release:scope` were three round trips re-billing the run's full context each.
|
|
1895
|
-
"run:tail": {
|
|
1896
|
-
script: "scripts/run/run-tail-cli.ts",
|
|
1897
|
-
description: "Close a run in one call: return to the default branch, commit the observation ledger, read the citations, decide the release scope",
|
|
1898
|
-
category: "AI tools",
|
|
1899
|
-
reference: ["[<issue> ...]", "automation", ["git", "network"]],
|
|
1900
|
-
usage: {
|
|
1901
|
-
examples: [
|
|
1902
|
-
{ arguments: "<N>", note: "the closed issue" },
|
|
1903
|
-
{ arguments: "<N> <follow-up-N>", note: "and a follow-up filed this run" }
|
|
1904
|
-
]
|
|
1905
|
-
}
|
|
1906
|
-
},
|
|
1907
|
-
// The commit-to-report region a run ships a change on, folded into one call:
|
|
1908
|
-
// the gate, the commit/push/PR (`git -y`), the CI-wait merge (`followup`) and the report bookkeeping
|
|
1909
|
-
// (`run:tail`) were four round trips re-billing the run's full context each. It stops at the first
|
|
1910
|
-
// failed step and names it, so the run reads only the step to fix.
|
|
1911
|
-
ship: {
|
|
1912
|
-
script: "scripts/run/ship/run-ship-cli.ts",
|
|
1913
|
-
// `.env` rather than the ambient environment: parking a lane child past the relaunch cap
|
|
1914
|
-
// sends a Telegram warning, which needs the credentials.
|
|
1915
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
1916
|
-
description: "Ship a change in one call: gate, commit/push/PR, the CI-wait merge and the report bookkeeping, stopping at the first failed step",
|
|
1917
|
-
category: "AI tools",
|
|
1918
|
-
reference: [
|
|
1919
|
-
'"<title> #<N>" [<follow-up-N> ...] [--cite <N>] [--review [--unpinned-ok "<reason>"]] [--detach] [--body-file <path>] [--notify-message <text> | --notify-message-file <path>] | --log <N>',
|
|
1920
|
-
"automation",
|
|
1921
|
-
["git", "network"]
|
|
1922
|
-
],
|
|
1923
|
-
// `--log <N>` stands alone and prints a detached ship's log (`run-ship-args.ts`).
|
|
1924
|
-
read_only_flags: ["--log"],
|
|
1925
|
-
usage: {
|
|
1926
|
-
examples: [
|
|
1927
|
-
{ arguments: '"<title> #<N>" --body-file .josh/tmp/evidence.md' },
|
|
1928
|
-
{ arguments: '"<title> #<N>" --review', note: "both review rounds inside the ship" },
|
|
1929
|
-
{
|
|
1930
|
-
arguments: '--detach "<title> #<N>"',
|
|
1931
|
-
note: "hand the ship to a supervisor; on `launched` and `cost --cut` `under`, wait one `ship:wait` chunk"
|
|
1932
|
-
},
|
|
1933
|
-
{ arguments: "--log <N>", note: "a detached ship's log" }
|
|
1934
|
-
],
|
|
1935
|
-
flags: [
|
|
1936
|
-
{
|
|
1937
|
-
names: ["--body-file <path>"],
|
|
1938
|
-
description: "the PR body carrying the live-execution evidence `followup` gates on, written under `.josh/tmp/`; forwarded to `git -y` alone."
|
|
1939
|
-
},
|
|
1940
|
-
{ names: ["--notify-message <text>"], description: "forwarded to `followup` alone." },
|
|
1941
|
-
{
|
|
1942
|
-
names: ["--review"],
|
|
1943
|
-
description: "runs round 1 beside the gate; after sync and round 1, an owed round 2 runs beside the gate and joins before the PR opens. A High or unfixed Medium stops the ship. A pre-detach `test:pinned` stop probes remaining hunks in the background for the next pre-detach."
|
|
1944
|
-
},
|
|
1945
|
-
{
|
|
1946
|
-
names: ["--unpinned-ok <reason>"],
|
|
1947
|
-
description: "forwarded to round 1's `run:review`, past `unpinned` places no test can pin."
|
|
1948
|
-
},
|
|
1949
|
-
{
|
|
1950
|
-
names: ["--detach"],
|
|
1951
|
-
description: "hands the ship to a supervisor (implied in a lane child); a stop emits `ship-stop` (`--log <N>`). The preflight, type check, unused exports, cspell, guard tests and (`--review`, under `--unpinned-ok`, given or recorded, only if round 1 is reused) `test:pinned` precede hand-off, the checks even after a preflight refusal, so one stop reports every failure."
|
|
1952
|
-
}
|
|
1953
|
-
]
|
|
1954
|
-
}
|
|
1955
|
-
},
|
|
1956
|
-
"ship:wait": {
|
|
1957
|
-
script: "scripts/run/ship/run-ship-wait-main.ts",
|
|
1958
|
-
description: "Wait on a detached ship through its gate and review round 1, so a stop there returns to this session (returned | passed | ended | pending)",
|
|
1959
|
-
category: "AI tools",
|
|
1960
|
-
reference: ["<N>", "automation", ["files", "processes"]],
|
|
1961
|
-
usage: {
|
|
1962
|
-
examples: [
|
|
1963
|
-
{
|
|
1964
|
-
arguments: "<N>",
|
|
1965
|
-
note: "re-issue it on `pending` while `cost --cut` is `under`; `returned` prints the stop to fix"
|
|
1966
|
-
}
|
|
1967
|
-
]
|
|
1968
|
-
}
|
|
1969
|
-
},
|
|
1970
|
-
"ship:evidence": {
|
|
1971
|
-
script: "scripts/run/ship/run-ship-evidence-cli.ts",
|
|
1972
|
-
description: "Run a command and append its invocation and output tail to the ship body draft\u2019s live-evidence section (exits with the command\u2019s code)",
|
|
1973
|
-
category: "AI tools",
|
|
1974
|
-
reference: ["<N> [--fresh] -- <command...>", "automation", ["files", "processes"]],
|
|
1975
|
-
usage: {
|
|
1976
|
-
examples: [
|
|
1977
|
-
{
|
|
1978
|
-
arguments: "<N> -- pnpm josh <command>",
|
|
1979
|
-
note: "the run picks which command is the evidence; the format is written for it"
|
|
1980
|
-
},
|
|
1981
|
-
{
|
|
1982
|
-
arguments: "<N> --fresh -- pnpm josh <command>",
|
|
1983
|
-
note: "runs it even when this tree already holds a recorded run of it"
|
|
1984
|
-
}
|
|
1985
|
-
]
|
|
1986
|
-
}
|
|
1987
|
-
},
|
|
1988
|
-
"run:event": {
|
|
1989
|
-
script: "scripts/run/event/run-event-cli.ts",
|
|
1990
|
-
description: "Append to, read or watch the run\u2019s append-only event stream (--append <kind> <text> | --from|--follow <n> | --watch [<n>] | --last)",
|
|
1991
|
-
category: "AI tools",
|
|
1992
|
-
reference: [
|
|
1993
|
-
"--append <kind> <text> | --from|--follow <n> | --watch [<n>] | --last",
|
|
1994
|
-
"automation",
|
|
1995
|
-
["files"]
|
|
1996
|
-
],
|
|
1997
|
-
usage: {
|
|
1998
|
-
examples: [
|
|
1999
|
-
{ arguments: "--append <kind> <text>", note: "append one event; prints its position" },
|
|
2000
|
-
{ arguments: "--from <position>", note: "every event after <position>, in order (JSON)" },
|
|
2001
|
-
{
|
|
2002
|
-
arguments: "--follow <position>",
|
|
2003
|
-
note: "new events, waiting for one; position on stderr"
|
|
2004
|
-
},
|
|
2005
|
-
{ arguments: "--watch [<position>]", note: "every new event, rendered, until interrupted" },
|
|
2006
|
-
{ arguments: "--last", note: "the newest event alone" }
|
|
2007
|
-
]
|
|
2008
|
-
}
|
|
2009
|
-
},
|
|
2010
|
-
"run:report": {
|
|
2011
|
-
script: "scripts/run/run-report-cli.ts",
|
|
2012
|
-
// `.env` rather than the ambient environment: `--handoff` sends the hand-off confirmation.
|
|
2013
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
2014
|
-
description: "Generate the session-facing report for this invocation from the run\u2019s event stream (merges, parks, cuts) with the release tail \u2014 the same text josh notify sends",
|
|
2015
|
-
category: "AI tools",
|
|
2016
|
-
// `--end` stops the `run:wake` supervisor process.
|
|
2017
|
-
reference: [
|
|
2018
|
-
'[--handoff | --end [--stopped "<reason>"]]',
|
|
2019
|
-
"automation",
|
|
2020
|
-
["files", "network", "processes"]
|
|
2021
|
-
],
|
|
2022
|
-
usage: {
|
|
2023
|
-
examples: [
|
|
2024
|
-
{ arguments: "", note: "print the report; the same text josh notify sends" },
|
|
2025
|
-
{
|
|
2026
|
-
arguments: "--handoff",
|
|
2027
|
-
note: "print the backlogrun hand-off report and send it as the confirmation"
|
|
2028
|
-
},
|
|
2029
|
-
{
|
|
2030
|
-
arguments: "--end",
|
|
2031
|
-
note: "end the run: the report, run:carry --end, run:wake --stop \u2014 stops at a failed stage"
|
|
2032
|
-
},
|
|
2033
|
-
{
|
|
2034
|
-
arguments: '--end --stopped "<reason>"',
|
|
2035
|
-
note: "end a run that stopped: run:carry --end --stopped sends the confirmation"
|
|
2036
|
-
}
|
|
2037
|
-
]
|
|
2038
|
-
}
|
|
2039
|
-
}
|
|
2040
|
-
};
|
|
2041
|
-
|
|
2042
|
-
// scripts/josh/josh-commands-ai.ts
|
|
2043
|
-
var DIR = "--dir <path>";
|
|
2044
|
-
var PATH_DIR = "--path <dir>";
|
|
2045
|
-
var BARE = { arguments: "" };
|
|
2046
|
-
var LANE_SIGNAL_EXAMPLES = [
|
|
2047
|
-
{ arguments: "4198" },
|
|
2048
|
-
{ arguments: "--all", note: "every open lane" }
|
|
2049
|
-
];
|
|
2050
|
-
var LANE_SCRIPT = "scripts/lane/lane-cli.ts";
|
|
2051
|
-
var LANE_ARGUMENTS = { script: LANE_SCRIPT, tsx_arguments: OPTIONAL_ENV_FILE_FLAGS };
|
|
2052
|
-
var ISSUE_WITH_OPTIONS2 = "<issue> [options]";
|
|
2053
|
-
var ISSUE_OR_ALL = "<issue> | --all";
|
|
2054
|
-
var MEASURE_ARGUMENTS = {
|
|
2055
|
-
script: "scripts/lane/lane-measure-cli.ts",
|
|
2056
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS
|
|
2057
|
-
};
|
|
2058
|
-
var PAUSE_ARGUMENTS = {
|
|
2059
|
-
script: "scripts/lane/lane-pause-cli.ts",
|
|
2060
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
2061
|
-
category: "AI tools",
|
|
2062
|
-
reference: [ISSUE_OR_ALL, "developer", ["processes"]]
|
|
2063
|
-
};
|
|
2064
|
-
var AI_COMMANDS = {
|
|
2065
|
-
...ISSUE_COMMANDS,
|
|
2066
|
-
"pkg:scout": {
|
|
2067
|
-
script: "scripts/package/package-scout-cli.ts",
|
|
2068
|
-
description: "Rank package candidates by measured metrics so the Package-First tier decision is read, not judged",
|
|
2069
|
-
category: "AI tools",
|
|
2070
|
-
reference: ["<keywords> [--size <n>] [--issue <n>]", "automation", ["network"]],
|
|
2071
|
-
usage: {
|
|
2072
|
-
examples: [{ arguments: '"date formatting" --size 5' }],
|
|
2073
|
-
flags: [
|
|
2074
|
-
{
|
|
2075
|
-
names: ["--size <n>"],
|
|
2076
|
-
description: "how many candidates to fetch and rank (default 10)."
|
|
2077
|
-
},
|
|
2078
|
-
{
|
|
2079
|
-
names: ["--issue <n>"],
|
|
2080
|
-
description: "the Issue a close pair reads for reuse (default: the held run)."
|
|
2081
|
-
}
|
|
2082
|
-
]
|
|
2083
|
-
}
|
|
2084
|
-
},
|
|
2085
|
-
"stash:push": {
|
|
2086
|
-
script: "scripts/git/stash/stash-push-main.ts",
|
|
2087
|
-
description: "Stash the working tree, untracked files included, leaving the observation ledger",
|
|
2088
|
-
category: "AI tools",
|
|
2089
|
-
reference: ["<message>", "automation", ["git"]],
|
|
2090
|
-
usage: {
|
|
2091
|
-
examples: [{ arguments: '"backlogrun: josh latest before lanes"' }],
|
|
2092
|
-
flags: [
|
|
2093
|
-
{
|
|
2094
|
-
names: [DIR],
|
|
2095
|
-
description: "stashes that work tree (`git -C <path>`); without it the current checkout."
|
|
2096
|
-
}
|
|
2097
|
-
]
|
|
2098
|
-
}
|
|
2099
|
-
},
|
|
2100
|
-
"stash:pop": {
|
|
2101
|
-
script: "scripts/git/stash/stash-pop-main.ts",
|
|
2102
|
-
description: "Pop the stash matching this message, not whichever a shared stack has on top",
|
|
2103
|
-
category: "AI tools",
|
|
2104
|
-
reference: ["<message>", "automation", ["git"]],
|
|
2105
|
-
usage: {
|
|
2106
|
-
examples: [
|
|
2107
|
-
{ arguments: '"backlogrun: parked #2028"' },
|
|
2108
|
-
{
|
|
2109
|
-
arguments: '"backlogrun: josh latest before lanes" --dir "$dir"',
|
|
2110
|
-
note: "into a lane's work tree"
|
|
2111
|
-
}
|
|
2112
|
-
],
|
|
2113
|
-
flags: [
|
|
2114
|
-
{
|
|
2115
|
-
names: [DIR],
|
|
2116
|
-
description: "applies the pop in that work tree (`git -C <path>`); without it the pop lands in the current checkout. The stack is shared, so it reads the same either way."
|
|
2117
|
-
}
|
|
2118
|
-
]
|
|
2119
|
-
}
|
|
2120
|
-
},
|
|
2121
|
-
...EPIC_COMMANDS,
|
|
2122
|
-
...BACKLOG_COMMANDS,
|
|
2123
|
-
cost: {
|
|
2124
|
-
script: "scripts/cost-runtime/cost-main.ts",
|
|
2125
|
-
description: "Say whether the next turn of a run crosses the context-cut threshold (--cut) or a given tokens-per-request figure (--over)",
|
|
2126
|
-
category: "AI tools",
|
|
2127
|
-
reference: ["(--cut | --over <tokens-per-request>) [--path <dir>]", "automation", ["none"]],
|
|
2128
|
-
usage: {
|
|
2129
|
-
examples: [
|
|
2130
|
-
{
|
|
2131
|
-
arguments: "--cut",
|
|
2132
|
-
note: "compare billed input per request with the context-cut threshold priced at the session model"
|
|
2133
|
-
},
|
|
2134
|
-
{ arguments: "--over <tokens>", note: "compare with an explicit limit" },
|
|
2135
|
-
{ arguments: `--cut ${PATH_DIR}`, note: "Anthropic project or current OpenAI worktree" }
|
|
2136
|
-
],
|
|
2137
|
-
flags: [
|
|
2138
|
-
{
|
|
2139
|
-
names: [PATH_DIR],
|
|
2140
|
-
description: "selects another Anthropic project; OpenAI accepts only linked checkouts of the current project."
|
|
2141
|
-
}
|
|
2142
|
-
]
|
|
2143
|
-
}
|
|
2144
|
-
},
|
|
2145
|
-
"cost:audit": {
|
|
2146
|
-
script: "tools/cost-audit/cost-audit-main.ts",
|
|
2147
|
-
description: "Report AI cost over a period by session kind, tool category and guard, with cost per merge and regressions against the period before",
|
|
2148
|
-
category: "AI tools",
|
|
2149
|
-
reference: [
|
|
2150
|
-
"[--period <days> | --since <YYYY-MM-DD> --until <YYYY-MM-DD>] [--density]",
|
|
2151
|
-
"maintainer",
|
|
2152
|
-
["none"]
|
|
2153
|
-
],
|
|
2154
|
-
// Kit-only: it reads kit's own transcript store, like `josh retrospective`, which carries its
|
|
2155
|
-
// summary line.
|
|
2156
|
-
is_kit_only: true,
|
|
2157
|
-
// Reads transcripts and a `gh api` search (GET) only, so a consultation session can run it.
|
|
2158
|
-
is_read_only: true,
|
|
2159
|
-
usage: {
|
|
2160
|
-
examples: [
|
|
2161
|
-
{ arguments: "", note: "the last 7 days against the 7 before" },
|
|
2162
|
-
{ arguments: "--period 30", note: "the last 30 days against the 30 before" },
|
|
2163
|
-
{
|
|
2164
|
-
arguments: "--since 2026-10-27 --until 2026-11-10",
|
|
2165
|
-
note: "those 15 UTC days against the 15 before"
|
|
2166
|
-
},
|
|
2167
|
-
{
|
|
2168
|
-
arguments: "--density",
|
|
2169
|
-
note: "the lane-child calls per request alone, as the last line"
|
|
2170
|
-
}
|
|
2171
|
-
],
|
|
2172
|
-
flags: [
|
|
2173
|
-
{
|
|
2174
|
-
names: ["--period <days>"],
|
|
2175
|
-
description: "the length of each period, a positive whole number of days (default 7)."
|
|
2176
|
-
},
|
|
2177
|
-
{
|
|
2178
|
-
names: ["--since <YYYY-MM-DD>", "--until <YYYY-MM-DD>"],
|
|
2179
|
-
description: "a fixed period instead, from the first UTC date through the second, both included; given together and never beside `--period`."
|
|
2180
|
-
},
|
|
2181
|
-
{
|
|
2182
|
-
names: ["--density"],
|
|
2183
|
-
description: "print only the period's lane-child density (calls per request, two decimals), so a measurement Issue declares it; no lane-child request prints nothing and exits 1."
|
|
2184
|
-
}
|
|
2185
|
-
]
|
|
2186
|
-
}
|
|
2187
|
-
},
|
|
2188
|
-
...DOCUMENT_COMMANDS,
|
|
2189
|
-
time: {
|
|
2190
|
-
script: "tools/time/time-cli.ts",
|
|
2191
|
-
description: "Report where a run's wall clock went: model wait, tool execution, human wait",
|
|
2192
|
-
category: "AI tools",
|
|
2193
|
-
reference: ["[options]", "maintainer", ["none"]],
|
|
2194
|
-
// Kit-only: it measures kit's own development runs and its report modules live under the
|
|
2195
|
-
// undistributed `tools/time/`, so it means nothing in a consumer project and is dropped from a
|
|
2196
|
-
// consumer's help. The runtime analysis hooks and guards rely on stays
|
|
2197
|
-
// distributed under `scripts/time-runtime/`.
|
|
2198
|
-
is_kit_only: true,
|
|
2199
|
-
usage: {
|
|
2200
|
-
examples: [
|
|
2201
|
-
{ arguments: "", note: "the last run tree, wall clock and cost by role" },
|
|
2202
|
-
{ arguments: "--run", note: "the same run-tree scope, named explicitly" },
|
|
2203
|
-
{ arguments: "--json", note: "the same figures, machine-readable" },
|
|
2204
|
-
{ arguments: PATH_DIR, note: "read another project's transcripts from this checkout" },
|
|
2205
|
-
{
|
|
2206
|
-
arguments: "--split-at 2026-10-16T21:33:19Z",
|
|
2207
|
-
note: "the same tree compared by role before and after a merge"
|
|
2208
|
-
}
|
|
2209
|
-
],
|
|
2210
|
-
flags: [
|
|
2211
|
-
{
|
|
2212
|
-
names: ["--run"],
|
|
2213
|
-
description: '(default) the whole run tree, wall clock led beside dollars. It is the only scope; any flag not listed here is a usage error (exit 1). History: `docs/maintainers/josh-commands-run-rationale.md` \u2192 "`josh cost` and `josh time` lost their report scopes".'
|
|
2214
|
-
},
|
|
2215
|
-
{
|
|
2216
|
-
names: [PATH_DIR],
|
|
2217
|
-
description: "aim the read at another project (absolute path); keeps the `cwd` behavior when absent."
|
|
2218
|
-
},
|
|
2219
|
-
{ names: ["--json"], description: "the run tree, machine-readable." },
|
|
2220
|
-
{
|
|
2221
|
-
names: ["--split-at <ISO time>"],
|
|
2222
|
-
description: "add a before \u2192 after block by role (time share, cost share, req/session), each session on the side of its first request; an unparseable time is a usage error (exit 1)."
|
|
2223
|
-
}
|
|
2224
|
-
]
|
|
2225
|
-
}
|
|
2226
|
-
},
|
|
2227
|
-
// The tool-calls-per-round-trip density the batching guard is measured on, aggregated across the
|
|
2228
|
-
// recent lane sessions. Kit-only for the same reason `time` is: it reads
|
|
2229
|
-
// kit's own lane transcripts and means nothing in a consumer project.
|
|
2230
|
-
"time:density": {
|
|
2231
|
-
script: "tools/time/time-density-cli.ts",
|
|
2232
|
-
description: "Report tool calls per round trip across the recent lane sessions",
|
|
2233
|
-
category: "AI tools",
|
|
2234
|
-
reference: ["[--lanes <n>] [--path <dir>]", "maintainer", ["none"]],
|
|
2235
|
-
is_kit_only: true,
|
|
2236
|
-
usage: {
|
|
2237
|
-
examples: [{ arguments: "" }, { arguments: "--lanes 5", note: "the five most recent lanes" }],
|
|
2238
|
-
flags: [
|
|
2239
|
-
{
|
|
2240
|
-
names: ["--lanes <n>"],
|
|
2241
|
-
description: "average over a different count of recent qualifying lanes (default 10)."
|
|
2242
|
-
},
|
|
2243
|
-
{
|
|
2244
|
-
names: [PATH_DIR],
|
|
2245
|
-
description: "read another project's lane transcripts, as `josh time` does. Run from a lane, it reads its main checkout's lanes."
|
|
2246
|
-
}
|
|
2247
|
-
]
|
|
2248
|
-
}
|
|
2249
|
-
},
|
|
2250
|
-
retrospective: {
|
|
2251
|
-
script: "tools/retrospective/retrospective-cli.ts",
|
|
2252
|
-
description: "Aggregate a finished run's cost, review findings, observation ledger and events into one digest",
|
|
2253
|
-
category: "AI tools",
|
|
2254
|
-
reference: ["", "maintainer", ["none"]],
|
|
2255
|
-
core_weight: core_weights.CORE_WEIGHTS.retrospective,
|
|
2256
|
-
memory_mb: core_weights.MEMORY_MB.retrospective,
|
|
2257
|
-
// Kit-only: it reads kit's own development run — the transcript store, the review ledger and the
|
|
2258
|
-
// run event stream — so it means nothing in a consumer project and is dropped from a consumer's
|
|
2259
|
-
// help, through the same declaration `josh time` uses for the same reason.
|
|
2260
|
-
is_kit_only: true,
|
|
2261
|
-
usage: {
|
|
2262
|
-
examples: [{ arguments: "", note: "the digest for the run this checkout carries" }]
|
|
2263
|
-
}
|
|
2264
|
-
},
|
|
2265
|
-
...REVIEW_COMMANDS,
|
|
2266
|
-
...RUN_COMMANDS,
|
|
2267
|
-
"repo:party": {
|
|
2268
|
-
script: "scripts/discovery/repo-party-cli.ts",
|
|
2269
|
-
description: "Say whether a repository is first-party or third-party by owner equality (computed, not judged)",
|
|
2270
|
-
category: "AI tools",
|
|
2271
|
-
reference: ["[<owner/repo>]", "automation", ["none"]],
|
|
2272
|
-
usage: {
|
|
2273
|
-
examples: [
|
|
2274
|
-
{ arguments: "joshuafolkken/kit", note: "\u2192 first-party (in the kit session)" },
|
|
2275
|
-
{ arguments: "sveltejs/kit", note: "\u2192 third-party" },
|
|
2276
|
-
{ arguments: "", note: "no argument: the session's own repository" }
|
|
2277
|
-
]
|
|
2278
|
-
}
|
|
2279
|
-
},
|
|
2280
|
-
"pin:verify": {
|
|
2281
|
-
script: "scripts/discovery/pin-verify-cli.ts",
|
|
2282
|
-
description: "Check that a tag resolves to the commit a SHA pin names, printing a line a bypass reason cites",
|
|
2283
|
-
category: "AI tools",
|
|
2284
|
-
reference: ["<owner/repo> <tag> <sha>", "automation", ["none"]],
|
|
2285
|
-
usage: {
|
|
2286
|
-
examples: [
|
|
2287
|
-
{
|
|
2288
|
-
arguments: "actions/checkout v4.2.2 11bd71901bbe5b1630ceea73d27597364c9af683",
|
|
2289
|
-
note: "\u2192 match / mismatch / unreadable"
|
|
2290
|
-
}
|
|
2291
|
-
]
|
|
2292
|
-
}
|
|
2293
|
-
},
|
|
2294
|
-
...SHIP_COMMANDS,
|
|
2295
|
-
"lane:open": {
|
|
2296
|
-
...LANE_ARGUMENTS,
|
|
2297
|
-
description: "Open a lane: a linked work tree with its own branch and its own port seed",
|
|
2298
|
-
category: "AI tools",
|
|
2299
|
-
reference: [ISSUE_WITH_OPTIONS2, "automation", ["files", "git"]],
|
|
2300
|
-
default_script_arguments: ["open"],
|
|
2301
|
-
usage: { examples: [{ arguments: "1490", note: "prints the lane directory on stdout" }] }
|
|
2302
|
-
},
|
|
2303
|
-
"lane:close": {
|
|
2304
|
-
...LANE_ARGUMENTS,
|
|
2305
|
-
description: "Close a lane, leaving no work tree, branch or directory behind",
|
|
2306
|
-
category: "AI tools",
|
|
2307
|
-
reference: ["<issue>", "automation", ["files", "git"]],
|
|
2308
|
-
default_script_arguments: ["close"],
|
|
2309
|
-
usage: {
|
|
2310
|
-
examples: [{ arguments: "1490" }, { arguments: "--all" }],
|
|
2311
|
-
flags: [{ names: ["--all"], description: "closes every lane." }]
|
|
2312
|
-
}
|
|
2313
|
-
},
|
|
2314
|
-
"lane:list": {
|
|
2315
|
-
...LANE_ARGUMENTS,
|
|
2316
|
-
description: "List the open lanes: which issue, which ports, and where each one is",
|
|
2317
|
-
category: "AI tools",
|
|
2318
|
-
reference: ["", "automation", ["none"]],
|
|
2319
|
-
default_script_arguments: ["list"],
|
|
2320
|
-
usage: { examples: [BARE] }
|
|
2321
|
-
},
|
|
2322
|
-
"lane:prune": {
|
|
2323
|
-
...LANE_ARGUMENTS,
|
|
2324
|
-
description: "Close every lane an interruption left without its work tree and every spent lane, then sweep unregistered leftovers under the lanes root",
|
|
2325
|
-
category: "AI tools",
|
|
2326
|
-
reference: ["", "automation", ["files", "git"]],
|
|
2327
|
-
default_script_arguments: ["prune"],
|
|
2328
|
-
usage: { examples: [BARE] }
|
|
2329
|
-
},
|
|
2330
|
-
"lane:output": {
|
|
2331
|
-
...LANE_ARGUMENTS,
|
|
2332
|
-
description: "Record, or read back, where the unit running a lane\u2019s child writes",
|
|
2333
|
-
category: "AI tools",
|
|
2334
|
-
reference: ["<issue> [path]", "automation", ["files"]],
|
|
2335
|
-
default_script_arguments: ["output"],
|
|
2336
|
-
usage: {
|
|
2337
|
-
examples: [
|
|
2338
|
-
{ arguments: "1713 /abs/path/to/agent-7.jsonl", note: "record it; prints the path back" },
|
|
2339
|
-
{ arguments: "1713", note: "read it; prints the path, or `none`" }
|
|
2340
|
-
]
|
|
2341
|
-
}
|
|
2342
|
-
},
|
|
2343
|
-
"lane:dispatch": {
|
|
2344
|
-
...LANE_ARGUMENTS,
|
|
2345
|
-
description: "Start a lane\u2019s child as a detached process that outlives this session",
|
|
2346
|
-
category: "AI tools",
|
|
2347
|
-
reference: ["<issue> <prompt>", "automation", ["processes"]],
|
|
2348
|
-
default_script_arguments: ["dispatch"],
|
|
2349
|
-
usage: {
|
|
2350
|
-
examples: [
|
|
2351
|
-
{
|
|
2352
|
-
arguments: "1749",
|
|
2353
|
-
note: "prints the child's pid; a refusal is an empty capture and exit 1"
|
|
2354
|
-
}
|
|
2355
|
-
],
|
|
2356
|
-
flags: [
|
|
2357
|
-
{
|
|
2358
|
-
names: ["JOSH_{SCHEDULER,WORKER,REVIEWER}_MODEL"],
|
|
2359
|
-
description: "Claude Code role overrides; Anthropic defaults are respectively `claude-opus-5-5`, `claude-opus-5-5`, and `claude-opus-5-5`. Codex keeps its provider-specific model."
|
|
2360
|
-
},
|
|
2361
|
-
{
|
|
2362
|
-
names: ["JOSH_{SCHEDULER,WORKER,REVIEWER}_EFFORT"],
|
|
2363
|
-
description: "role effort overrides for either provider; defaults are `medium`, `medium`, and `medium`."
|
|
2364
|
-
},
|
|
2365
|
-
{
|
|
2366
|
-
names: ["JOSH_REVIEWER_VERIFICATION_{MODEL,EFFORT}"],
|
|
2367
|
-
description: "review round 2 and later (the verification pass); defaults are `claude-sonnet-5-5` / `high` on Anthropic and `high` on OpenAI, falling back to `JOSH_REVIEWER_*`."
|
|
2368
|
-
}
|
|
2369
|
-
]
|
|
2370
|
-
}
|
|
2371
|
-
},
|
|
2372
|
-
"lane:await": {
|
|
2373
|
-
...LANE_ARGUMENTS,
|
|
2374
|
-
description: "Block until any of the named in-flight lane children completes; prints which one finished",
|
|
2375
|
-
category: "AI tools",
|
|
2376
|
-
reference: ["<issue> [<issue>...] [--owner <pid>]", "automation", ["files", "processes"]],
|
|
2377
|
-
default_script_arguments: ["await"],
|
|
2378
|
-
usage: {
|
|
2379
|
-
examples: [
|
|
2380
|
-
{
|
|
2381
|
-
arguments: "1749 1750",
|
|
2382
|
-
note: "reclaim a resumed conversation\u2019s carry record, then block until either lane completes"
|
|
2383
|
-
}
|
|
2384
|
-
]
|
|
2385
|
-
}
|
|
2386
|
-
},
|
|
2387
|
-
"lane:launch": {
|
|
2388
|
-
script: "scripts/lane/lane-launch-main.ts",
|
|
2389
|
-
description: "Collapse a backlogrun lane-start event into one call: open the lane, pop and re-install on the first, dispatch the child",
|
|
2390
|
-
category: "AI tools",
|
|
2391
|
-
reference: ["<issue> [--stash <message>]", "automation", ["files", "git", "processes"]],
|
|
2392
|
-
usage: {
|
|
2393
|
-
examples: [
|
|
2394
|
-
{ arguments: "1749", note: "every lane after the first" },
|
|
2395
|
-
{
|
|
2396
|
-
arguments: '1749 --stash "backlogrun: josh latest before lanes"',
|
|
2397
|
-
note: "the first lane only"
|
|
2398
|
-
}
|
|
2399
|
-
]
|
|
2400
|
-
}
|
|
2401
|
-
},
|
|
2402
|
-
// `.env` is read for `JOSH_LANE_ROOT`, as every lane command reads it, so the lane is found.
|
|
2403
|
-
"lane:restart": {
|
|
2404
|
-
script: "scripts/lane/lane-restart-cli.ts",
|
|
2405
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
2406
|
-
description: "Stop a running lane child, stash its uncommitted work and re-dispatch its issue in a fresh session \u2014 not counted as an outage or a failure",
|
|
2407
|
-
category: "AI tools",
|
|
2408
|
-
reference: ["<issue>", "developer", ["files", "git", "processes", "network"]],
|
|
2409
|
-
usage: {
|
|
2410
|
-
examples: [{ arguments: "3769", note: "prints the fresh child's pid" }]
|
|
2411
|
-
}
|
|
2412
|
-
},
|
|
2413
|
-
// `.env` is read for `JOSH_LANE_ROOT`, as every lane command reads it, so the lane is found.
|
|
2414
|
-
"lane:withdraw": {
|
|
2415
|
-
script: "scripts/lane/lane-withdraw-cli.ts",
|
|
2416
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
2417
|
-
description: "Stop a running lane child, stash its uncommitted work and close the lane, leaving its issue open for the next run \u2014 booked withdrawn, not as an outage or a failure",
|
|
2418
|
-
category: "AI tools",
|
|
2419
|
-
reference: ["<issue> --reason <text>", "developer", ["files", "git", "processes", "network"]],
|
|
2420
|
-
usage: {
|
|
2421
|
-
examples: [{ arguments: '3769 --reason "folded into a broader issue"' }]
|
|
2422
|
-
}
|
|
2423
|
-
},
|
|
2424
|
-
"lane:resolve": {
|
|
2425
|
-
script: "scripts/lane/lane-resolve-cli.ts",
|
|
2426
|
-
description: "Merge the default branch into a lane's branch and print one verdict \u2014 resolved, conflict <paths>, or step-back 2 (overlapping hunks, merge aborted) / 3 (a resolution already recorded on the issue); --record posts that resolution comment once the lane is pushed",
|
|
2427
|
-
category: "AI tools",
|
|
2428
|
-
reference: ["<issue> [--record [<path>...]]", "developer", ["git", "network", "files"]],
|
|
2429
|
-
usage: {
|
|
2430
|
-
examples: [
|
|
2431
|
-
{ arguments: "3769", note: "prints `conflict docs/a.md` on a hand-resolvable conflict" },
|
|
2432
|
-
{
|
|
2433
|
-
arguments: "3769 --record docs/a.md",
|
|
2434
|
-
note: "posts the `## Lane conflict resolved` comment once the lane is pushed"
|
|
2435
|
-
}
|
|
2436
|
-
]
|
|
2437
|
-
}
|
|
2438
|
-
},
|
|
2439
|
-
// `.env` is read for the Telegram settings the yield's hold release reaches (`run-hold-cli.ts`).
|
|
2440
|
-
"lane:plan": {
|
|
2441
|
-
script: "scripts/lane/lane-plan-cli.ts",
|
|
2442
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
2443
|
-
description: "Record a lane child's planned files; yield its lane, naming file and holder, when an earlier-planned running lane declares or plans one; `--size-approval` bounds lines/files",
|
|
2444
|
-
category: "AI tools",
|
|
2445
|
-
reference: [
|
|
2446
|
-
"<issue> <path>... [--probe] [--single] [--estimate <json-file>] [--size-approval <json-file>] [--imports <path>...]",
|
|
2447
|
-
"automation",
|
|
2448
|
-
["files", "network"]
|
|
2449
|
-
],
|
|
2450
|
-
usage: {
|
|
2451
|
-
examples: [{ arguments: "4864 scripts/lane/lane-plan.ts scripts/backlog/backlog-next.ts" }]
|
|
2452
|
-
}
|
|
2453
|
-
},
|
|
2454
|
-
// `.env` is read for `JOSH_LANE_ROOT`, as every lane command reads it, so `--all` finds the lanes.
|
|
2455
|
-
"lane:pause": {
|
|
2456
|
-
...PAUSE_ARGUMENTS,
|
|
2457
|
-
description: "Suspend a running lane child\u2019s process tree (SIGSTOP) in place, leaving its work tree, branch and issue untouched, and record the pause in the lane\u2019s state and the run\u2019s event stream",
|
|
2458
|
-
default_script_arguments: ["pause"],
|
|
2459
|
-
usage: { examples: LANE_SIGNAL_EXAMPLES }
|
|
2460
|
-
},
|
|
2461
|
-
"lane:resume": {
|
|
2462
|
-
...PAUSE_ARGUMENTS,
|
|
2463
|
-
description: "Let a paused lane child carry on from where it stopped (SIGCONT)",
|
|
2464
|
-
default_script_arguments: ["resume"],
|
|
2465
|
-
usage: { examples: LANE_SIGNAL_EXAMPLES }
|
|
2466
|
-
},
|
|
2467
|
-
// `.env` is read for `JOSH_LANE_ROOT`, as every lane command reads it, so `--all` finds the lanes.
|
|
2468
|
-
"lane:adopt": {
|
|
2469
|
-
script: "scripts/lane/lane-adopt-cli.ts",
|
|
2470
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
2471
|
-
description: "Give an open lane that lost its state record a record again, read from its process, work tree, unpushed commits, pull request and issue \u2014 its work untouched",
|
|
2472
|
-
category: "AI tools",
|
|
2473
|
-
reference: [ISSUE_OR_ALL, "developer", ["files", "git", "processes", "network"]],
|
|
2474
|
-
usage: {
|
|
2475
|
-
examples: [
|
|
2476
|
-
{ arguments: "4744" },
|
|
2477
|
-
{ arguments: "--all", note: "every open lane with no record" }
|
|
2478
|
-
]
|
|
2479
|
-
}
|
|
2480
|
-
},
|
|
2481
|
-
// A live run's lane limit: `.env` is read so the bare form reports the
|
|
2482
|
-
// `JOSH_LANE_LIMIT` a person set there when no override stands.
|
|
2483
|
-
"lane:limit": {
|
|
2484
|
-
script: "scripts/lane/lane-limit-cli.ts",
|
|
2485
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
2486
|
-
description: "Change a live backlogrun\u2019s lane limit without stopping it, or print the limit, lanes in use and free lanes",
|
|
2487
|
-
category: "AI tools",
|
|
2488
|
-
reference: ["[<limit>] [--reset]", "developer", ["files"]],
|
|
2489
|
-
usage: {
|
|
2490
|
-
examples: [
|
|
2491
|
-
{ arguments: "8", note: "raise or lower the live run's limit to 8" },
|
|
2492
|
-
{ arguments: "", note: "print the limit, the lanes in use and the free lanes" },
|
|
2493
|
-
{ arguments: "--reset", note: "clear the override; the run\u2019s start limit applies again" }
|
|
2494
|
-
]
|
|
2495
|
-
}
|
|
2496
|
-
},
|
|
2497
|
-
// The lane-limit measurement: `.env` is read so `lane:stats` labels the row
|
|
2498
|
-
// with the `JOSH_LANE_LIMIT` a person set there.
|
|
2499
|
-
"lane:sample": {
|
|
2500
|
-
...MEASURE_ARGUMENTS,
|
|
2501
|
-
description: "Record the machine load (load average, swap, free memory, working lanes) to the lane ledger \u2014 a backlogrun samples itself, this is for a reading outside one",
|
|
2502
|
-
category: "AI tools",
|
|
2503
|
-
reference: ["[--every <seconds>]", "maintainer", ["files"]],
|
|
2504
|
-
default_script_arguments: ["sample"],
|
|
2505
|
-
usage: { examples: [{ arguments: "", note: "one machine-load reading" }] }
|
|
2506
|
-
},
|
|
2507
|
-
"lane:stats": {
|
|
2508
|
-
...MEASURE_ARGUMENTS,
|
|
2509
|
-
description: "Print period lane throughput, stage, stop (by failed CI check, longest first), check and machine-load statistics; --sinks shows stage totals, --over lane chains, --why cause groups above a net-minute threshold, and --pairs scoped pair runs",
|
|
2510
|
-
category: "AI tools",
|
|
2511
|
-
reference: [
|
|
2512
|
-
"(--period <days> | --since <instant>) [--limit <lane-limit> | --sinks [<minutes>] | --over <minutes> | --why <minutes> | --pairs]",
|
|
2513
|
-
"maintainer",
|
|
2514
|
-
["none"]
|
|
2515
|
-
],
|
|
2516
|
-
default_script_arguments: ["stats"],
|
|
2517
|
-
usage: {
|
|
2518
|
-
examples: [
|
|
2519
|
-
{ arguments: "--period 7", note: "a 7-day period's stage medians and maxima" },
|
|
2520
|
-
{ arguments: "--period 1 --sinks", note: "stage totals of the lanes over 30 net min" },
|
|
2521
|
-
{ arguments: "--period 1 --over 40", note: "ledger chains of lanes over 40 net min" },
|
|
2522
|
-
{ arguments: "--period 1 --why 40", note: "cause groups of lanes over 40 net min" },
|
|
2523
|
-
{ arguments: "--period 7 --pairs", note: "a 7-day period's scoped pair runs" },
|
|
2524
|
-
{ arguments: "--since 2026-11-10T01:00Z --why 40", note: "cause groups since an instant" }
|
|
2525
|
-
]
|
|
2526
|
-
}
|
|
2527
|
-
},
|
|
2528
|
-
// One lane measurement as one number on the last line, for an Issue's measurement declaration
|
|
2529
|
-
// (joshuafolkken/kit#4630).
|
|
2530
|
-
"lane:value": {
|
|
2531
|
-
...MEASURE_ARGUMENTS,
|
|
2532
|
-
description: "Print one lane measurement since an instant as a single number: cell (a lane:stats table cell, --table --row --where --column --item --zero), lint-unmoved (median s of a lint:related that found nothing moved), metrics-stops (pre-detach metrics stops per lane), lint-core-wait (lint:related core-budget wait, min per lane), edit (median s of one Edit)",
|
|
2533
|
-
category: "AI tools",
|
|
2534
|
-
reference: ["<metric> --since <instant>", "maintainer", ["none"]],
|
|
2535
|
-
default_script_arguments: ["value"],
|
|
2536
|
-
usage: {
|
|
2537
|
-
examples: [
|
|
2538
|
-
{
|
|
2539
|
-
arguments: "edit --since 2026-10-23T03:29Z",
|
|
2540
|
-
note: "the median Edit time since an instant"
|
|
2541
|
-
},
|
|
2542
|
-
{
|
|
2543
|
-
arguments: 'cell --table "test:related scope" --row related --column "median (s)" --since 2026-10-23T03:29Z',
|
|
2544
|
-
note: "one lane:stats table cell since an instant"
|
|
2545
|
-
}
|
|
2546
|
-
]
|
|
2547
|
-
}
|
|
2548
|
-
},
|
|
2549
|
-
"lane:net": {
|
|
2550
|
-
...MEASURE_ARGUMENTS,
|
|
2551
|
-
description: "Print a lane's net minutes: its issue's first dispatch to its merge, less the waits its parks, outages, usage-limit stops and yields stood, the host's sleeps and the ship's followup",
|
|
2552
|
-
category: "AI tools",
|
|
2553
|
-
reference: ["<issue>", "maintainer", ["none"]],
|
|
2554
|
-
default_script_arguments: ["net"],
|
|
2555
|
-
usage: {
|
|
2556
|
-
examples: [
|
|
2557
|
-
{
|
|
2558
|
-
arguments: "4695",
|
|
2559
|
-
note: "the net minutes a causing-lane line declares"
|
|
2560
|
-
}
|
|
2561
|
-
]
|
|
2562
|
-
}
|
|
2563
|
-
},
|
|
2564
|
-
"lane:breakdown": {
|
|
2565
|
-
script: "scripts/lane/lane-breakdown-cli.ts",
|
|
2566
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
2567
|
-
description: "Print a merged lane's net time by stage, longest first, the implementation split by its tool calls",
|
|
2568
|
-
category: "AI tools",
|
|
2569
|
-
reference: ["<issue> [--timeline]", "maintainer", ["none"]],
|
|
2570
|
-
usage: {
|
|
2571
|
-
flags: [
|
|
2572
|
-
{
|
|
2573
|
-
names: ["--timeline"],
|
|
2574
|
-
description: "prints the lane in time order instead, one line a stage, wait or event, the stage lines adding up to the net time."
|
|
2575
|
-
}
|
|
2576
|
-
],
|
|
2577
|
-
examples: [
|
|
2578
|
-
{
|
|
2579
|
-
arguments: "4970",
|
|
2580
|
-
note: "the breakdown the overrun investigation comments on the lane"
|
|
2581
|
-
},
|
|
2582
|
-
{ arguments: "4970 --timeline", note: "when each stage ran and where the lane waited" }
|
|
2583
|
-
]
|
|
2584
|
-
}
|
|
2585
|
-
},
|
|
2586
|
-
"lane:why": {
|
|
2587
|
-
script: "scripts/lane/lane-why-cli.ts",
|
|
2588
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
2589
|
-
description: "Print a merged lane's stages over budget, one row each, beside the records that say why",
|
|
2590
|
-
category: "AI tools",
|
|
2591
|
-
reference: ["<issue>", "maintainer", ["processes", "network"]],
|
|
2592
|
-
usage: {
|
|
2593
|
-
examples: [
|
|
2594
|
-
{
|
|
2595
|
-
arguments: "6050",
|
|
2596
|
-
note: "the cause table an overrun investigation joins by hand"
|
|
2597
|
-
}
|
|
2598
|
-
]
|
|
2599
|
-
}
|
|
2600
|
-
},
|
|
2601
|
-
"run:watcher:guard": {
|
|
2602
|
-
script: "scripts/run/run-watcher-guard-cli.ts",
|
|
2603
|
-
description: "Guard: exits non-zero when lane children are in-flight but the watcher has not pinged recently",
|
|
2604
|
-
category: "AI tools",
|
|
2605
|
-
reference: ["", "automation", ["none"]],
|
|
2606
|
-
usage: { examples: [BARE] }
|
|
2607
|
-
},
|
|
2608
|
-
"split:recover": {
|
|
2609
|
-
script: "scripts/split/split-child-recover-cli.ts",
|
|
2610
|
-
description: "Recover split-child evidence after verifying an existing child URL, split route and parent",
|
|
2611
|
-
category: "AI tools",
|
|
2612
|
-
reference: ["<origin> <child-issue-url>", "automation", ["network", "files"]],
|
|
2613
|
-
usage: { examples: [{ arguments: "6212 https://github.com/joshuafolkken/kit/issues/6326" }] }
|
|
2614
|
-
},
|
|
2615
|
-
"split:assess": {
|
|
2616
|
-
script: "scripts/split/split-assess-cli.ts",
|
|
2617
|
-
description: "Measure the branch change size (tests excluded) and answer the split assessment size question: split | single",
|
|
2618
|
-
category: "AI tools",
|
|
2619
|
-
reference: ["[--json]", "automation", ["none"]],
|
|
2620
|
-
usage: {
|
|
2621
|
-
examples: [
|
|
2622
|
-
{ arguments: "", note: "\u2192 single" },
|
|
2623
|
-
{ arguments: "--json", note: "the verdict and the reason, machine-readable" }
|
|
2624
|
-
]
|
|
2625
|
-
}
|
|
2626
|
-
},
|
|
2627
|
-
"oracle:list": {
|
|
2628
|
-
script: "scripts/rules/oracle-list-cli.ts",
|
|
2629
|
-
description: "Print the decision oracles \u2014 commands that answer a rule question mechanically",
|
|
2630
|
-
category: "AI tools",
|
|
2631
|
-
reference: ["", "automation", ["none"]],
|
|
2632
|
-
usage: { examples: [{ arguments: "" }] }
|
|
2633
|
-
},
|
|
2634
|
-
eval: {
|
|
2635
|
-
script: "tools/eval/eval-run.ts",
|
|
2636
|
-
description: "Run the agent rule-compliance scenarios (real Claude sessions)",
|
|
2637
|
-
category: "AI tools",
|
|
2638
|
-
reference: ["[scenario...]", "maintainer", ["processes", "network"]],
|
|
2639
|
-
// Kit-only: it replays kit's own distributed rules against real Claude sessions, so it means
|
|
2640
|
-
// nothing in a consumer project and is dropped from a consumer's help.
|
|
2641
|
-
is_kit_only: true,
|
|
2642
|
-
usage: {
|
|
2643
|
-
examples: [
|
|
2644
|
-
{ arguments: "", note: "every scenario" },
|
|
2645
|
-
{ arguments: "consult-not-execute", note: "one scenario by name" }
|
|
2646
|
-
],
|
|
2647
|
-
flags: [
|
|
2648
|
-
{ names: ["JOSH_EVAL_MODEL"], description: "the model to run against (default `sonnet`)." },
|
|
2649
|
-
{
|
|
2650
|
-
names: ["JOSH_EVAL_CONCURRENCY"],
|
|
2651
|
-
description: "how many sessions run at once (default `5`); a non-positive-integer value is refused."
|
|
2652
|
-
}
|
|
2653
|
-
]
|
|
2654
|
-
}
|
|
2655
|
-
}
|
|
2656
|
-
};
|
|
2657
|
-
|
|
2658
|
-
// scripts/josh/josh-commands-clone.ts
|
|
2659
|
-
var CLONE_COMMANDS = {
|
|
2660
|
-
"clone:scan": {
|
|
2661
|
-
script: "scripts/clone/clone-scan-cli.ts",
|
|
2662
|
-
description: "Count code duplication across files and first-party repositories, printing each clone as file:line pairs",
|
|
2663
|
-
category: "AI tools",
|
|
2664
|
-
reference: ["", "automation", ["files"]],
|
|
2665
|
-
usage: { examples: [{ arguments: "" }] }
|
|
2666
|
-
}
|
|
2667
|
-
};
|
|
2668
|
-
|
|
2669
|
-
// scripts/josh/josh-commands-agent-hooks.ts
|
|
2670
|
-
var PRE_TOOL_USE = "run by the PreToolUse hook, the pending tool call as JSON on stdin";
|
|
2671
|
-
var AGENT_HOOK_COMMANDS = {
|
|
2672
|
-
"usage:tee": {
|
|
2673
|
-
script: "scripts/usage/usage-tee-cli.ts",
|
|
2674
|
-
description: "Record account-wide Claude statusLine rate limits without printing output",
|
|
2675
|
-
category: "Development",
|
|
2676
|
-
reference: ["", "automation", ["files"]],
|
|
2677
|
-
usage: {
|
|
2678
|
-
examples: [{ arguments: "", note: "Claude statusLine JSON on stdin; stdout stays empty" }]
|
|
2679
|
-
}
|
|
2680
|
-
},
|
|
2681
|
-
"format:edited": {
|
|
2682
|
-
script: "scripts/hooks/format-edited-cli.ts",
|
|
2683
|
-
description: "Claude Code hook: format the file just edited (reads the tool call on stdin)",
|
|
2684
|
-
category: "Development",
|
|
2685
|
-
reference: ["", "automation", ["files", "processes"]],
|
|
2686
|
-
usage: {
|
|
2687
|
-
examples: [
|
|
2688
|
-
{ arguments: "", note: "run by the PostToolUse hook, the tool call as JSON on stdin" }
|
|
2689
|
-
]
|
|
2690
|
-
}
|
|
2691
|
-
},
|
|
2692
|
-
"pretool:guard": {
|
|
2693
|
-
script: "scripts/hooks/pretool-guard-cli.ts",
|
|
2694
|
-
description: "Claude Code hook: the batch, investigation and rule guards in one process (reads the tool call on stdin)",
|
|
2695
|
-
category: "Development",
|
|
2696
|
-
reference: ["", "automation", ["none"]],
|
|
2697
|
-
usage: { examples: [{ arguments: "", note: PRE_TOOL_USE }] }
|
|
2698
|
-
// **No `tsx_arguments`, deliberately.** The guards read `.env` for their other values, as other
|
|
2699
|
-
// commands do through `OPTIONAL_ENV_FILE_FLAGS`; the guard switches themselves come from the
|
|
2700
|
-
// launch environment alone (`josh-environment-file.ts`). Each guard it composes loads `.env`
|
|
2701
|
-
// through the shared loader on its real hook path instead, so the unit tests never see a
|
|
2702
|
-
// developer's `.env`.
|
|
2703
|
-
},
|
|
2704
|
-
// The hook ledger read per rule (joshuafolkken/kit#6664): which rules refuse, and how often wrongly.
|
|
2705
|
-
// `--apply` / `--restore` write the demoted-rules file (joshuafolkken/kit#6591).
|
|
2706
|
-
"hook:ledger": {
|
|
2707
|
-
script: "scripts/hooks/hook-ledger-cli.ts",
|
|
2708
|
-
is_read_only: true,
|
|
2709
|
-
write_flags: ["--apply", "--restore"],
|
|
2710
|
-
description: "Print Claude Code hook refusals per hook and rule over a period: refusals, the same call passing later, and route:interrupt issues naming the rule; list, demote or restore rules that mostly refuse allowed work",
|
|
2711
|
-
category: "Development",
|
|
2712
|
-
reference: [
|
|
2713
|
-
"--period <days> [--demote [--apply]] | --restore <rule>",
|
|
2714
|
-
"maintainer",
|
|
2715
|
-
["network", "files"]
|
|
2716
|
-
],
|
|
2717
|
-
usage: {
|
|
2718
|
-
examples: [
|
|
2719
|
-
{ arguments: "--period 7", note: "a 7-day period's refusals per rule" },
|
|
2720
|
-
{ arguments: "--period 7 --demote", note: "rules to demote from blocking to notice" },
|
|
2721
|
-
{
|
|
2722
|
-
arguments: "--period 7 --demote --apply",
|
|
2723
|
-
note: "record them in .josh/hook-demoted.json"
|
|
2724
|
-
},
|
|
2725
|
-
{ arguments: "--restore batching", note: "make a demoted rule block again" }
|
|
2726
|
-
]
|
|
2727
|
-
}
|
|
2728
|
-
},
|
|
2729
|
-
"stop:guard": {
|
|
2730
|
-
script: "scripts/hooks/stop-guard.ts",
|
|
2731
|
-
description: "Claude Code Stop hook: send the hold notify and release the hold itself; block on the rules that need the model (reads the Stop payload on stdin)",
|
|
2732
|
-
category: "Development",
|
|
2733
|
-
reference: ["", "automation", ["none"]],
|
|
2734
|
-
usage: {
|
|
2735
|
-
examples: [
|
|
2736
|
-
{ arguments: "", note: "run by the Stop hook, the stop payload as JSON on stdin" }
|
|
2737
|
-
]
|
|
2738
|
-
}
|
|
2739
|
-
// **No `tsx_arguments`, deliberately**, the same as `pretool:guard` above: this runs at every
|
|
2740
|
-
// turn end, so it must stay eligible for in-process dispatch rather than pay a second tsx start.
|
|
2741
|
-
// It loads `.env` through the shared `hook-decision.ts` loader.
|
|
2742
|
-
},
|
|
2743
|
-
"session:lang": {
|
|
2744
|
-
script: "scripts/josh/session-language-main.ts",
|
|
2745
|
-
description: "Claude Code hook: print a non-default JOSH_SESSION_LANG for the session context, the run:board reply rule while a backlogrun is live, and the run:handoff line for a workflow keyword on a consultation model (otherwise nothing)",
|
|
2746
|
-
category: "Development",
|
|
2747
|
-
reference: ["", "automation", ["none"]],
|
|
2748
|
-
usage: {
|
|
2749
|
-
examples: [{ arguments: "", note: "run by the UserPromptSubmit hook; `ja` prints nothing" }]
|
|
2750
|
-
}
|
|
2751
|
-
// **No `tsx_arguments`, deliberately**, the same as `pretool:guard` above: this runs on every
|
|
2752
|
-
// `UserPromptSubmit`, so it must stay eligible for in-process dispatch rather than pay a second
|
|
2753
|
-
// tsx start each turn. It loads `.env` itself through the shared loader.
|
|
2754
|
-
},
|
|
2755
|
-
"codex:hook-adapter": {
|
|
2756
|
-
script: "scripts/hooks/codex-hook-adapter.ts",
|
|
2757
|
-
description: "Codex hook: run the pretool or posttool guard on a Codex payload (reads the tool call on stdin)",
|
|
2758
|
-
category: "Development",
|
|
2759
|
-
reference: ["<pretool|posttool>", "automation", ["none"]],
|
|
2760
|
-
usage: {
|
|
2761
|
-
examples: [
|
|
2762
|
-
{ arguments: "pretool", note: "a Codex PreToolUse payload on stdin" },
|
|
2763
|
-
{ arguments: "posttool", note: "a Codex PostToolUse payload on stdin" }
|
|
2764
|
-
]
|
|
2765
|
-
}
|
|
2766
|
-
// The live-source fallback `scripts/hooks/run-hook.sh` derives from the `codex-hook-adapter`
|
|
2767
|
-
// bundle name. **No `tsx_arguments`**, the same as `pretool:guard`
|
|
2768
|
-
// above: it runs before every guarded Codex call.
|
|
2769
|
-
}
|
|
2770
|
-
};
|
|
2771
|
-
|
|
2772
|
-
// scripts/josh/josh-commands-test-check.ts
|
|
2773
|
-
var TEST_CHECK_COMMANDS = {
|
|
2774
|
-
"test:declared": {
|
|
2775
|
-
script: "scripts/test/test-declared.ts",
|
|
2776
|
-
description: "Report whether the working-tree change needs a test (required/exempt/satisfied); --match checks Step 0 declarations on stdin",
|
|
2777
|
-
category: "Development",
|
|
2778
|
-
reference: ["[--match]", "developer", ["processes"]],
|
|
2779
|
-
usage: {
|
|
2780
|
-
examples: [
|
|
2781
|
-
{ arguments: "" },
|
|
2782
|
-
{ arguments: "--match", note: "check Step 0 declarations on stdin" },
|
|
2783
|
-
{ arguments: "--help", note: "print usage, including the --match stdin form" }
|
|
2784
|
-
]
|
|
2785
|
-
}
|
|
2786
|
-
},
|
|
2787
|
-
"test:red": {
|
|
2788
|
-
script: "scripts/test/test-red-main.ts",
|
|
2789
|
-
description: "Run the changed unit tests against the pre-fix tree (merge-base worktree) and report red/green/no-test/stopped/test-only",
|
|
2790
|
-
category: "Development",
|
|
2791
|
-
reference: ["", "developer", ["git", "processes"]],
|
|
2792
|
-
usage: { examples: [{ arguments: "", note: "red, green, no-test, stopped or test-only" }] }
|
|
2793
|
-
},
|
|
2794
|
-
"test:reach": {
|
|
2795
|
-
script: "scripts/test/test-reach-cli.ts",
|
|
2796
|
-
description: "Print how many test files each file's imports reach \u2014 the count test:related sizes its claim by \u2014 one '<count> <file>' line per file",
|
|
2797
|
-
category: "Development",
|
|
2798
|
-
reference: ["<files...>", "automation", ["none"]],
|
|
2799
|
-
usage: {
|
|
2800
|
-
examples: [
|
|
2801
|
-
{
|
|
2802
|
-
arguments: "scripts/lane/lane-ledger.ts",
|
|
2803
|
-
note: "a reach count to measure before and after a change"
|
|
2804
|
-
}
|
|
2805
|
-
]
|
|
2806
|
-
}
|
|
2807
|
-
},
|
|
2808
|
-
"test:pinned": {
|
|
2809
|
-
script: "scripts/test/test-pinned-main.ts",
|
|
2810
|
-
description: "Revert each changed hunk outside tests and fixtures only they reach, and replace each added file's top-level function bodies with a throw, in a HEAD worktree, run the related tests, and list what no test went red on",
|
|
2811
|
-
category: "Development",
|
|
2812
|
-
reference: [
|
|
2813
|
-
"[--max <n>] [--record <token>] [--origin <run-review|pre-detach|manual>] [--first-unpinned]",
|
|
2814
|
-
"developer",
|
|
2815
|
-
["git", "processes"]
|
|
2816
|
-
],
|
|
2817
|
-
...gate_plan.DIRECT_UNIT_CLAIM,
|
|
2818
|
-
usage: {
|
|
2819
|
-
examples: [
|
|
2820
|
-
{ arguments: "", note: "unpinned <file>:<line> lines; unchecked counted per reason" },
|
|
2821
|
-
{ arguments: "--max 5", note: "check at most 5 hunks; the rest count as unchecked" },
|
|
2822
|
-
{
|
|
2823
|
-
arguments: "--record <token>",
|
|
2824
|
-
note: "also leave the answer, under the launch token, for run:review --join"
|
|
2825
|
-
},
|
|
2826
|
-
{
|
|
2827
|
-
arguments: "--origin pre-detach",
|
|
2828
|
-
note: "name what started the run on its lane ledger row (default manual)"
|
|
2829
|
-
},
|
|
2830
|
-
{
|
|
2831
|
-
arguments: "--first-unpinned",
|
|
2832
|
-
note: "start no probe once one hunk is unpinned; the rest count as unchecked"
|
|
2833
|
-
}
|
|
2834
|
-
]
|
|
2835
|
-
}
|
|
2836
|
-
}
|
|
2837
|
-
};
|
|
2838
|
-
|
|
2839
|
-
// scripts/josh/josh-commands-development.ts
|
|
2840
|
-
var NARROWED = { arguments: "scripts/thing.ts", note: "narrow by the given files instead" };
|
|
2841
|
-
var FORWARDED_TO_VITEST = "flags are forwarded to vitest";
|
|
2842
|
-
var UNSEEDED = {};
|
|
2843
|
-
var FILE_ARGUMENTS = "[files...]";
|
|
2844
|
-
var REQUIRED_FILE_ARGUMENTS = "<files...>";
|
|
2845
|
-
var FILTER_ARGUMENTS = "[filters...]";
|
|
2846
|
-
var PATH_ARGUMENTS = "<path...>";
|
|
2847
|
-
var DEV_COMMANDS = {
|
|
2848
|
-
"pr:classification": {
|
|
2849
|
-
script: "scripts/ci/pr-classification-main.ts",
|
|
2850
|
-
description: "Require one release classification on a pull request",
|
|
2851
|
-
category: "Development",
|
|
2852
|
-
reference: ["", "automation", ["none"]],
|
|
2853
|
-
usage: {
|
|
2854
|
-
examples: [{ arguments: "", note: "run by CI on a pull request; fails without one label" }]
|
|
2855
|
-
}
|
|
2856
|
-
},
|
|
2857
|
-
[GATE_COMMAND]: {
|
|
2858
|
-
script: "scripts/gate/verification-gate.ts",
|
|
2859
|
-
description: "Run lint, type check, spell check and unit tests concurrently",
|
|
2860
|
-
category: "Development",
|
|
2861
|
-
reference: [
|
|
2862
|
-
"[--verbose|--force|--no-unit|--whole-tree|--static-group=<group>]",
|
|
2863
|
-
"developer",
|
|
2864
|
-
["files", "processes"]
|
|
2865
|
-
],
|
|
2866
|
-
usage: {
|
|
2867
|
-
examples: [
|
|
2868
|
-
{ arguments: "" },
|
|
2869
|
-
{ arguments: "--verbose", note: "every check's output, passing ones included" },
|
|
2870
|
-
{ arguments: "--force", note: "re-run even on a tree already recorded green" },
|
|
2871
|
-
{ arguments: "--no-unit", note: "the static checks only (CI only)" },
|
|
2872
|
-
{
|
|
2873
|
-
arguments: "--whole-tree",
|
|
2874
|
-
note: "add the whole-tree checks (the ship's gate on the final tree)"
|
|
2875
|
-
}
|
|
2876
|
-
]
|
|
2877
|
-
}
|
|
2878
|
-
},
|
|
2879
|
-
lint: {
|
|
2880
|
-
script: "scripts/lint/lint-parallel-main.ts",
|
|
2881
|
-
description: "Check code with prettier and eslint (skips a tool a basic project lacks)",
|
|
2882
|
-
category: "Development",
|
|
2883
|
-
reference: ["[--changed] [--shard=<n>]", "developer", ["processes"]],
|
|
2884
|
-
core_weight: core_weights.CORE_WEIGHTS.lint,
|
|
2885
|
-
memory_mb: core_weights.MEMORY_MB.lint,
|
|
2886
|
-
usage: {
|
|
2887
|
-
examples: [
|
|
2888
|
-
{ arguments: "" },
|
|
2889
|
-
{ arguments: "--changed", note: "the branch's changed files \u2014 the gate's form" },
|
|
2890
|
-
{ arguments: "--shard=1", note: "one of two fixed halves of the tree (1 or 2) \u2014 a CI leg" }
|
|
2891
|
-
]
|
|
2892
|
-
}
|
|
2893
|
-
},
|
|
2894
|
-
"lint:related": {
|
|
2895
|
-
script: "scripts/lint/lint-related.ts",
|
|
2896
|
-
description: "Check only the changed files with prettier and eslint, and in kit the source guard tests (whole tree on fallback)",
|
|
2897
|
-
category: "Development",
|
|
2898
|
-
reference: [FILE_ARGUMENTS, "developer", ["processes"]],
|
|
2899
|
-
core_weight: core_weights.CORE_WEIGHTS.lint,
|
|
2900
|
-
memory_mb: core_weights.MEMORY_MB.lint,
|
|
2901
|
-
usage: { examples: [{ arguments: "" }, NARROWED] }
|
|
2902
|
-
},
|
|
2903
|
-
lines: {
|
|
2904
|
-
script: "scripts/lines/lines-command.ts",
|
|
2905
|
-
description: "Print a file's code lines against the max-lines limit and the headroom left",
|
|
2906
|
-
category: "Development",
|
|
2907
|
-
reference: [REQUIRED_FILE_ARGUMENTS, "developer", ["none"]],
|
|
2908
|
-
core_weight: core_weights.CORE_WEIGHTS.eslint_scan,
|
|
2909
|
-
memory_mb: core_weights.MEMORY_MB.eslint_scan,
|
|
2910
|
-
usage: {
|
|
2911
|
-
examples: [{ arguments: "scripts/hooks/format-edited-file.ts scripts/josh/josh-logic.ts" }]
|
|
2912
|
-
}
|
|
2913
|
-
},
|
|
2914
|
-
metrics: {
|
|
2915
|
-
script: "tools/metrics/metrics-command.ts",
|
|
2916
|
-
description: "Print repository-wide quality totals and durations, and fail when a total grew past the merge-base or a duration past its baseline",
|
|
2917
|
-
category: "Development",
|
|
2918
|
-
reference: [
|
|
2919
|
-
'[--no-startup | --totals-only [--rerecord] | --accept --reason "<why>"]',
|
|
2920
|
-
"developer",
|
|
2921
|
-
["files"]
|
|
2922
|
-
],
|
|
2923
|
-
core_weight: core_weights.CORE_WEIGHTS.eslint_scan,
|
|
2924
|
-
memory_mb: core_weights.MEMORY_MB.metrics,
|
|
2925
|
-
is_kit_only: true,
|
|
2926
|
-
usage: {
|
|
2927
|
-
examples: [
|
|
2928
|
-
{ arguments: "", note: "print the totals and check them against the merge-base's" },
|
|
2929
|
-
{ arguments: '--accept --reason "<why>"', note: "record this branch's growth and why" }
|
|
2930
|
-
]
|
|
2931
|
-
}
|
|
2932
|
-
},
|
|
2933
|
-
"refactor:scan": {
|
|
2934
|
-
script: "scripts/refactor/refactor-scan-cli.ts",
|
|
2935
|
-
description: "List refactoring candidates in the changed scope by category and answer clear/candidates",
|
|
2936
|
-
category: "Development",
|
|
2937
|
-
reference: ["", "automation", ["processes"]],
|
|
2938
|
-
core_weight: core_weights.CORE_WEIGHTS.eslint_scan,
|
|
2939
|
-
memory_mb: core_weights.MEMORY_MB.eslint_scan,
|
|
2940
|
-
usage: { examples: [{ arguments: "" }] }
|
|
2941
|
-
},
|
|
2942
|
-
bytes: {
|
|
2943
|
-
script: "scripts/lines/bytes-command.ts",
|
|
2944
|
-
description: "Print an agent-read document's byte size against its ceiling and the headroom left",
|
|
2945
|
-
category: "Development",
|
|
2946
|
-
reference: [REQUIRED_FILE_ARGUMENTS, "developer", ["none"]],
|
|
2947
|
-
usage: {
|
|
2948
|
-
examples: [
|
|
2949
|
-
{ arguments: "docs/josh-commands.md", note: "one document" },
|
|
2950
|
-
{ arguments: "", note: "scan: every budgeted document near its ceiling" }
|
|
2951
|
-
]
|
|
2952
|
-
}
|
|
2953
|
-
},
|
|
2954
|
-
"rule:value": {
|
|
2955
|
-
script: "scripts/rules/rule-value-cli.ts",
|
|
2956
|
-
description: "Print each delivered rule's unaided compliance \u2014 runs reached, kept rate, refusals",
|
|
2957
|
-
category: "AI tools",
|
|
2958
|
-
reference: [
|
|
2959
|
-
"[--fresh | --refresh | --period <days> | --weekly <rule-id>... | --prose]",
|
|
2960
|
-
"developer",
|
|
2961
|
-
["files"]
|
|
2962
|
-
],
|
|
2963
|
-
usage: {
|
|
2964
|
-
examples: [
|
|
2965
|
-
{ arguments: "", note: "a reading cached under 15 minutes ago, else measure" },
|
|
2966
|
-
{ arguments: "--fresh", note: "measure now, whatever the cache holds" },
|
|
2967
|
-
{
|
|
2968
|
-
arguments: "--refresh",
|
|
2969
|
-
note: "write the reading to the loop-head cache instead of stdout"
|
|
2970
|
-
},
|
|
2971
|
-
{
|
|
2972
|
-
arguments: "--period 7",
|
|
2973
|
-
note: "measure only the transcripts written in the last 7 days, cache untouched"
|
|
2974
|
-
},
|
|
2975
|
-
{
|
|
2976
|
-
arguments: "--weekly <rule-id>...",
|
|
2977
|
-
note: "reached / refused / rephrased of the named rules, one line per week"
|
|
2978
|
-
},
|
|
2979
|
-
{ arguments: "--prose", note: "class each prose rule: enforced, measured or prose only" }
|
|
2980
|
-
]
|
|
2981
|
-
}
|
|
2982
|
-
},
|
|
2983
|
-
"rule:list": {
|
|
2984
|
-
script: "scripts/rules/rule-list.ts",
|
|
2985
|
-
description: "Print the trigger-delivered rules \u2014 each one's source, firing call and silent turn \u2014 from the guard rows",
|
|
2986
|
-
category: "AI tools",
|
|
2987
|
-
reference: ["", "automation", ["none"]],
|
|
2988
|
-
usage: { examples: [{ arguments: "", note: "print every trigger-delivered rule" }] }
|
|
2989
|
-
},
|
|
2990
|
-
format: {
|
|
2991
|
-
script: "scripts/lint/format.ts",
|
|
2992
|
-
description: "Format code with prettier and eslint (skips a tool a basic project lacks)",
|
|
2993
|
-
category: "Development",
|
|
2994
|
-
reference: ["", "developer", ["files", "processes"]],
|
|
2995
|
-
usage: { examples: [{ arguments: "" }] }
|
|
2996
|
-
},
|
|
2997
|
-
rename: {
|
|
2998
|
-
script: "scripts/lint/rename-cli.ts",
|
|
2999
|
-
description: "Rename an identifier, and the import specifier it moved with, across files through the TypeScript parse tree",
|
|
3000
|
-
category: "Development",
|
|
3001
|
-
reference: [
|
|
3002
|
-
"<old-identifier> <new-identifier> [--import <old-specifier> <new-specifier>] <file...>",
|
|
3003
|
-
"automation",
|
|
3004
|
-
["files", "processes"]
|
|
3005
|
-
],
|
|
3006
|
-
usage: {
|
|
3007
|
-
examples: [
|
|
3008
|
-
{ arguments: "old_name new_name scripts/a.ts scripts/b.ts" },
|
|
3009
|
-
{
|
|
3010
|
-
arguments: "lane_ledger lane_ledger_write --import '#scripts/lane/lane-ledger' '#scripts/lane/lane-ledger-write' scripts/gate/core-wait-record.ts",
|
|
3011
|
-
note: "the identifier and its module together"
|
|
3012
|
-
}
|
|
3013
|
-
]
|
|
3014
|
-
}
|
|
3015
|
-
},
|
|
3016
|
-
...AGENT_HOOK_COMMANDS,
|
|
3017
|
-
"cspell:dot": {
|
|
3018
|
-
script: "scripts/lint/cspell-cached.ts",
|
|
3019
|
-
description: "Run spell check including dotfiles",
|
|
3020
|
-
category: "Development",
|
|
3021
|
-
reference: ["", "developer", ["processes"]],
|
|
3022
|
-
core_weight: core_weights.CORE_WEIGHTS.spell_check,
|
|
3023
|
-
memory_mb: core_weights.MEMORY_MB.spell_check,
|
|
3024
|
-
usage: { examples: [{ arguments: "", note: "includes dotfiles" }] }
|
|
3025
|
-
},
|
|
3026
|
-
"check:related": {
|
|
3027
|
-
script: "scripts/gate/check-related.ts",
|
|
3028
|
-
description: "Run related lint, type and dotfile spelling checks in parallel, and the unit tests once lint passes",
|
|
3029
|
-
category: "Development",
|
|
3030
|
-
reference: ["", "developer", ["processes"]],
|
|
3031
|
-
usage: {
|
|
3032
|
-
examples: [
|
|
3033
|
-
{ arguments: "" },
|
|
3034
|
-
{ arguments: "--full", note: "whole outputs" },
|
|
3035
|
-
{ arguments: "--touched", note: "mid-run: test:related --touched, no green record" }
|
|
3036
|
-
]
|
|
3037
|
-
}
|
|
3038
|
-
},
|
|
3039
|
-
behavior: {
|
|
3040
|
-
script: "scripts/behavior/behavior-cli.ts",
|
|
3041
|
-
description: "Check the current run's recorded transcript against the behavior assertions (no model call)",
|
|
3042
|
-
category: "Development",
|
|
3043
|
-
reference: ["", "developer", ["files"]],
|
|
3044
|
-
usage: { examples: [{ arguments: "" }] }
|
|
3045
|
-
},
|
|
3046
|
-
"exports:unused": {
|
|
3047
|
-
script: "scripts/exports/unused-members-cli.ts",
|
|
3048
|
-
description: "Report exported namespace members nothing reads (kit only; a consumer project skips it)",
|
|
3049
|
-
category: "Development",
|
|
3050
|
-
reference: ["", "developer", ["none"]],
|
|
3051
|
-
// One TypeScript program, as the type check builds (joshuafolkken/kit#7030).
|
|
3052
|
-
core_weight: core_weights.CORE_WEIGHTS.type_check,
|
|
3053
|
-
// Reads source files and prints only, so a consultation session can run it.
|
|
3054
|
-
is_read_only: true,
|
|
3055
|
-
usage: { examples: [{ arguments: "" }] }
|
|
3056
|
-
},
|
|
3057
|
-
"test:unit": {
|
|
3058
|
-
script: "scripts/test/test-unit-guard-main.ts",
|
|
3059
|
-
description: "Run unit tests with Vitest (without Vitest: a basic project runs its own test script, others skip; fails when Vitest has no tests)",
|
|
3060
|
-
category: "Development",
|
|
3061
|
-
reference: [FILTER_ARGUMENTS, "developer", ["processes"]],
|
|
3062
|
-
...gate_plan.DIRECT_UNIT_CLAIM,
|
|
3063
|
-
usage: {
|
|
3064
|
-
examples: [{ arguments: "" }, { arguments: "--shard=1/3", note: FORWARDED_TO_VITEST }]
|
|
3065
|
-
}
|
|
3066
|
-
},
|
|
3067
|
-
"test:related": {
|
|
3068
|
-
script: "scripts/test/test-related-main.ts",
|
|
3069
|
-
description: "Run only the unit tests related to the changed files (full suite on fallback)",
|
|
3070
|
-
category: "Development",
|
|
3071
|
-
reference: [FILE_ARGUMENTS, "developer", ["processes"]],
|
|
3072
|
-
usage: {
|
|
3073
|
-
examples: [
|
|
3074
|
-
{ arguments: "" },
|
|
3075
|
-
NARROWED,
|
|
3076
|
-
{ arguments: "--touched", note: "diff tests, same-named tests and direct test importers" },
|
|
3077
|
-
{ arguments: "--silent", note: FORWARDED_TO_VITEST }
|
|
3078
|
-
]
|
|
3079
|
-
}
|
|
3080
|
-
},
|
|
3081
|
-
...TEST_CHECK_COMMANDS,
|
|
3082
|
-
disposition: {
|
|
3083
|
-
script: "scripts/review/disposition-cli.ts",
|
|
3084
|
-
description: "Say whether a review finding reaches a runtime path (runtime) or is inert (non-runtime)",
|
|
3085
|
-
category: "AI tools",
|
|
3086
|
-
reference: [`${PATH_ARGUMENTS} | --batch <findings-file>`, "automation", ["none"]],
|
|
3087
|
-
usage: {
|
|
3088
|
-
examples: [
|
|
3089
|
-
{ arguments: "<path...>", note: "\u2192 runtime | non-runtime" },
|
|
3090
|
-
{ arguments: "--batch <findings-file>", note: "\u2192 branch table + drop notes" }
|
|
3091
|
-
]
|
|
3092
|
-
}
|
|
3093
|
-
},
|
|
3094
|
-
"e2e:retry-check": {
|
|
3095
|
-
script: "scripts/test/e2e-retry-check.ts",
|
|
3096
|
-
description: "Report whether the preview server crashed during a failed E2E attempt (CI)",
|
|
3097
|
-
category: "Development",
|
|
3098
|
-
reference: ["", "automation", ["none"]],
|
|
3099
|
-
usage: { examples: [{ arguments: "" }] }
|
|
3100
|
-
},
|
|
3101
|
-
"test:e2e": {
|
|
3102
|
-
script: "scripts/test/test-e2e-guard.ts",
|
|
3103
|
-
description: "Run E2E tests with Playwright (skips when absent or no e2e files)",
|
|
3104
|
-
category: "Development",
|
|
3105
|
-
reference: [FILTER_ARGUMENTS, "developer", ["processes"]],
|
|
3106
|
-
usage: { examples: [{ arguments: "" }] }
|
|
3107
|
-
},
|
|
3108
|
-
test: {
|
|
3109
|
-
shell: ["sh", "-c", "pnpm josh test:unit && pnpm josh test:e2e"],
|
|
3110
|
-
description: "Run unit and E2E tests",
|
|
3111
|
-
category: "Development",
|
|
3112
|
-
reference: ["", "developer", ["processes"]],
|
|
3113
|
-
argument_targets: ["test:unit", "test:e2e"],
|
|
3114
|
-
usage: { examples: [{ arguments: "" }] }
|
|
3115
|
-
},
|
|
3116
|
-
check: {
|
|
3117
|
-
script: "scripts/gate/type-check-command.ts",
|
|
3118
|
-
description: "Type-check with tsc (skips a basic project with no TypeScript to check)",
|
|
3119
|
-
category: "Development",
|
|
3120
|
-
reference: ["[arguments...]", "developer", ["processes"]],
|
|
3121
|
-
core_weight: core_weights.CORE_WEIGHTS.type_check,
|
|
3122
|
-
memory_mb: core_weights.MEMORY_MB.type_check,
|
|
3123
|
-
usage: { examples: [{ arguments: "" }] }
|
|
3124
|
-
},
|
|
3125
|
-
port: {
|
|
3126
|
-
script: "scripts/ports/port-command.ts",
|
|
3127
|
-
description: "Print the PORT_SEED-resolved dev or preview port",
|
|
3128
|
-
category: "Development",
|
|
3129
|
-
reference: ["<dev|preview>", "developer", ["none"]],
|
|
3130
|
-
usage: {
|
|
3131
|
-
examples: [
|
|
3132
|
-
{
|
|
3133
|
-
arguments: "dev",
|
|
3134
|
-
note: `${String(ports.resolve_development_port(UNSEEDED))} with no seed set`
|
|
3135
|
-
},
|
|
3136
|
-
{
|
|
3137
|
-
arguments: "preview",
|
|
3138
|
-
note: `${String(ports.resolve_preview_port(UNSEEDED))} with no seed set`
|
|
3139
|
-
}
|
|
3140
|
-
]
|
|
3141
|
-
}
|
|
3142
|
-
}
|
|
3143
|
-
};
|
|
3144
|
-
|
|
3145
|
-
// scripts/josh/josh-commands-hooks.ts
|
|
3146
|
-
var HOOKS_COMMANDS = {
|
|
3147
|
-
"prevent-main-commit": {
|
|
3148
|
-
script: "scripts/hooks/prevent-main-commit.ts",
|
|
3149
|
-
description: "Git hook: block commits to main",
|
|
3150
|
-
category: "Git hooks",
|
|
3151
|
-
reference: ["", "automation", ["none"]],
|
|
3152
|
-
usage: { examples: [{ arguments: "", note: "run by the pre-commit hook" }] }
|
|
3153
|
-
},
|
|
3154
|
-
"check-commit-message": {
|
|
3155
|
-
script: "scripts/hooks/check-commit-message-main.ts",
|
|
3156
|
-
description: "Git hook: validate commit message",
|
|
3157
|
-
category: "Git hooks",
|
|
3158
|
-
reference: ["[<message-file>]", "automation", ["none"]],
|
|
3159
|
-
usage: {
|
|
3160
|
-
examples: [{ arguments: ".git/COMMIT_EDITMSG", note: "run by the commit-msg hook" }]
|
|
3161
|
-
}
|
|
3162
|
-
},
|
|
3163
|
-
"secretlint-scan": {
|
|
3164
|
-
script: "scripts/security/secretlint-scan.ts",
|
|
3165
|
-
description: "Git hook: scan staged files for secrets",
|
|
3166
|
-
category: "Git hooks",
|
|
3167
|
-
reference: ["[paths...]", "automation", ["none"]],
|
|
3168
|
-
usage: {
|
|
3169
|
-
examples: [{ arguments: "src/app.ts .env.example", note: "the staged paths" }]
|
|
3170
|
-
}
|
|
3171
|
-
},
|
|
3172
|
-
"pre-commit-lint": {
|
|
3173
|
-
script: "scripts/hooks/pre-commit-lint.ts",
|
|
3174
|
-
description: "Git hook: run cspell, prettier or eslint over staged files from a content cache",
|
|
3175
|
-
category: "Git hooks",
|
|
3176
|
-
reference: ["<cspell|prettier|eslint> [paths...]", "automation", ["files"]],
|
|
3177
|
-
usage: {
|
|
3178
|
-
examples: [
|
|
3179
|
-
{ arguments: "cspell src/app.ts" },
|
|
3180
|
-
{ arguments: "prettier src/app.ts" },
|
|
3181
|
-
{ arguments: "eslint src/app.ts" }
|
|
3182
|
-
]
|
|
3183
|
-
}
|
|
3184
|
-
},
|
|
3185
|
-
"pre-push-unit": {
|
|
3186
|
-
script: "scripts/hooks/pre-push-unit.ts",
|
|
3187
|
-
description: "Git hook: run unit tests, reusing a green gate recorded on the pushed tree",
|
|
3188
|
-
category: "Git hooks",
|
|
3189
|
-
reference: ["", "automation", ["processes"]],
|
|
3190
|
-
usage: { examples: [{ arguments: "" }] }
|
|
3191
|
-
},
|
|
3192
|
-
"reserved-run": {
|
|
3193
|
-
script: "scripts/hooks/reserved-run.ts",
|
|
3194
|
-
description: "Git hook: run a command while holding a place in the machine-wide core budget",
|
|
3195
|
-
category: "Git hooks",
|
|
3196
|
-
reference: ["<weight> [--memory <MB>] -- <command...>", "automation", ["processes"]],
|
|
3197
|
-
usage: {
|
|
3198
|
-
examples: [
|
|
3199
|
-
{ arguments: "2 -- pnpm install", note: "hold 2 cores while installing" },
|
|
3200
|
-
{ arguments: "1 --memory 3000 -- <command>", note: "hold 3,000 MB beside the core" }
|
|
3201
|
-
]
|
|
3202
|
-
}
|
|
3203
|
-
},
|
|
3204
|
-
"pre-commit-type-check": {
|
|
3205
|
-
script: "scripts/gate/pre-commit-type-check.ts",
|
|
3206
|
-
description: "Git hook: type-check, reusing a green gate recorded on the committed tree",
|
|
3207
|
-
category: "Git hooks",
|
|
3208
|
-
reference: ["", "automation", ["processes"]],
|
|
3209
|
-
usage: { examples: [{ arguments: "" }] }
|
|
3210
|
-
}
|
|
3211
|
-
};
|
|
3212
|
-
|
|
3213
|
-
// scripts/josh/josh-commands-lint.ts
|
|
3214
|
-
var LINT_COMMANDS = {
|
|
3215
|
-
"lint:rule": {
|
|
3216
|
-
script: "scripts/lint/lint-rule.ts",
|
|
3217
|
-
description: "Run one eslint rule over the whole repository, or with --paths a subset, on a cache of its own and write the rule's violations to a file",
|
|
3218
|
-
category: "Development",
|
|
3219
|
-
reference: [
|
|
3220
|
-
"<rule> [--config <path>] [--output <path>] [--paths <path>...]",
|
|
3221
|
-
"developer",
|
|
3222
|
-
["files", "processes"]
|
|
3223
|
-
],
|
|
3224
|
-
core_weight: LINT_RULE_WORKERS * core_weights.CORE_WEIGHTS.eslint_scan,
|
|
3225
|
-
memory_mb: LINT_RULE_WORKERS * core_weights.MEMORY_MB.eslint_scan,
|
|
3226
|
-
usage: {
|
|
3227
|
-
examples: [
|
|
3228
|
-
{ arguments: "kit/no-measurement-comment" },
|
|
3229
|
-
{
|
|
3230
|
-
arguments: "kit/no-measurement-comment --config eslint.tmp.config.js",
|
|
3231
|
-
note: "a temporary config"
|
|
3232
|
-
},
|
|
3233
|
-
{ arguments: "kit/no-measurement-comment --output .josh/tmp/violations.txt" },
|
|
3234
|
-
{
|
|
3235
|
-
arguments: "kit/no-measurement-comment --paths scripts/lint/*.ts",
|
|
3236
|
-
note: "only these paths, on a subset cache and report"
|
|
3237
|
-
}
|
|
3238
|
-
]
|
|
3239
|
-
}
|
|
3240
|
-
},
|
|
3241
|
-
"issue:lint": {
|
|
3242
|
-
script: "scripts/issue/issue-lint-main.ts",
|
|
3243
|
-
description: "Check an issue body file for the template's required headings",
|
|
3244
|
-
category: "AI tools",
|
|
3245
|
-
reference: ["<path>", "automation", ["files"]],
|
|
3246
|
-
usage: { examples: [{ arguments: ".josh/tmp/issue-body.md" }] }
|
|
3247
|
-
},
|
|
3248
|
-
"report:lint": {
|
|
3249
|
-
script: "scripts/report/report-lint-cli.ts",
|
|
3250
|
-
description: "Check a two-layer work summary, or with --child-summary a lane child's summary, on stdin against its mechanical format rules",
|
|
3251
|
-
category: "AI tools",
|
|
3252
|
-
reference: ["[--child-summary] (reads stdin)", "automation", ["none"]],
|
|
3253
|
-
usage: {
|
|
3254
|
-
examples: [{ arguments: "< summary.md" }, { arguments: "--child-summary < summary.md" }]
|
|
3255
|
-
}
|
|
3256
|
-
},
|
|
3257
|
-
"report:template": {
|
|
3258
|
-
script: "scripts/report/report-template-cli.ts",
|
|
3259
|
-
description: "Print the work summary, completion report or lane child's summary skeleton in the session language: summary | done | child",
|
|
3260
|
-
category: "AI tools",
|
|
3261
|
-
reference: ["summary|done|child [<path>...]", "automation", ["files"]],
|
|
3262
|
-
usage: {
|
|
3263
|
-
examples: [
|
|
3264
|
-
{ arguments: "summary scripts/report/report-lint.ts" },
|
|
3265
|
-
{ arguments: "done" },
|
|
3266
|
-
{ arguments: "child" }
|
|
3267
|
-
]
|
|
3268
|
-
}
|
|
3269
|
-
},
|
|
3270
|
-
cases: {
|
|
3271
|
-
script: "scripts/cases/cases-cli.ts",
|
|
3272
|
-
description: "Read changed paths and print the boundaries crossed and their mandatory abnormal cases: network | process | fs | time | state | env | none",
|
|
3273
|
-
category: "AI tools",
|
|
3274
|
-
reference: ["<path...>", "automation", ["files"]],
|
|
3275
|
-
usage: {
|
|
3276
|
-
examples: [
|
|
3277
|
-
{ arguments: "scripts/a.ts scripts/b.ts", note: "the boundaries these paths cross" }
|
|
3278
|
-
]
|
|
3279
|
-
}
|
|
3280
|
-
},
|
|
3281
|
-
"plan:scaffold": {
|
|
3282
|
-
script: "scripts/plan/plan-scaffold-cli.ts",
|
|
3283
|
-
description: "Print a work summary's inputs in one call: the run:prep skeleton, planned files near the line limit, the test:declared verdict, the owed cases and the plan:consumers draft",
|
|
3284
|
-
category: "AI tools",
|
|
3285
|
-
reference: ["<issue> [<path>...] [--estimate <json-file>]", "automation", ["network"]],
|
|
3286
|
-
usage: {
|
|
3287
|
-
examples: [
|
|
3288
|
-
{ arguments: "123", note: "planned files from the issue body" },
|
|
3289
|
-
{ arguments: "123 scripts/a.ts scripts/b.ts", note: "the files this plan touches" }
|
|
3290
|
-
]
|
|
3291
|
-
}
|
|
3292
|
-
}
|
|
3293
|
-
};
|
|
3294
|
-
|
|
3295
|
-
// scripts/josh/josh-commands-maintenance.ts
|
|
3296
|
-
var CHECK2 = "--check";
|
|
3297
|
-
var JSON_FLAG3 = "--json";
|
|
3298
|
-
var MAINTENANCE_COMMANDS = {
|
|
3299
|
-
doctor: {
|
|
3300
|
-
script: "scripts/doctor/doctor.ts",
|
|
3301
|
-
description: "Diagnose PATH shadowing of the global josh and show the discovered repository map (--fix reclaims a stale shim)",
|
|
3302
|
-
category: "Maintenance",
|
|
3303
|
-
reference: ["[--fix]", "developer", ["files"]],
|
|
3304
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
3305
|
-
usage: {
|
|
3306
|
-
examples: [
|
|
3307
|
-
{ arguments: "", note: "diagnose only" },
|
|
3308
|
-
{ arguments: "--fix", note: "reclaim the global josh by removing a stale kit shim" },
|
|
3309
|
-
{ arguments: "--ports", note: "also print the per-repository port-seed table" }
|
|
3310
|
-
],
|
|
3311
|
-
flags: [
|
|
3312
|
-
{
|
|
3313
|
-
names: ["--fix"],
|
|
3314
|
-
description: "remove a shadowing binary **only if it is a kit shim** (its body references `@joshuafolkken/kit` or the removed `install-bin` script); any other binary is left and reported for manual review. Also the one-shot recovery for an old project that re-created the global shim."
|
|
3315
|
-
},
|
|
3316
|
-
{ names: ["--ports"], description: "additionally print the port-seed table (see below)." }
|
|
3317
|
-
]
|
|
3318
|
-
}
|
|
3319
|
-
},
|
|
3320
|
-
"ruleset:check": {
|
|
3321
|
-
script: "scripts/repo/ruleset-check-cli.ts",
|
|
3322
|
-
description: "Check that the default branch requires every status check kit's workflows report (--apply adds the missing ones)",
|
|
3323
|
-
category: "Maintenance",
|
|
3324
|
-
reference: ["[--apply]", "maintainer", ["network"]],
|
|
3325
|
-
usage: {
|
|
3326
|
-
examples: [
|
|
3327
|
-
{ arguments: "", note: "report only" },
|
|
3328
|
-
{ arguments: "--apply", note: "add the missing checks to the existing rule" }
|
|
3329
|
-
],
|
|
3330
|
-
flags: [
|
|
3331
|
-
{
|
|
3332
|
-
names: ["--apply"],
|
|
3333
|
-
description: "append the missing checks to the ruleset's required-checks rule (or to the branch protection's contexts). It never creates a ruleset: with none, create one under Settings \u2192 Rules \u2192 Rulesets, then rerun. Writing a repository setting needs admin access, so only this flag writes \u2014 `josh sync` and `josh doctor` never do."
|
|
3334
|
-
}
|
|
3335
|
-
]
|
|
3336
|
-
}
|
|
3337
|
-
},
|
|
3338
|
-
overrides: {
|
|
3339
|
-
script: "scripts/overrides/overrides-check.ts",
|
|
3340
|
-
description: "Check pnpm overrides for drift",
|
|
3341
|
-
category: "Maintenance",
|
|
3342
|
-
reference: ["[--save] [--diff <base>[...<head>]]", "developer", ["files"]],
|
|
3343
|
-
usage: {
|
|
3344
|
-
examples: [
|
|
3345
|
-
{ arguments: "", note: "verify overrides unchanged" },
|
|
3346
|
-
{ arguments: "--save", note: "snapshot current merged overrides" },
|
|
3347
|
-
{ arguments: "--diff HEAD", note: "after an update not yet committed" },
|
|
3348
|
-
{ arguments: "--diff main...<branch>", note: "after `josh adopt` committed its branch" }
|
|
3349
|
-
],
|
|
3350
|
-
flags: [
|
|
3351
|
-
{
|
|
3352
|
-
names: ["--save"],
|
|
3353
|
-
description: "write the current merged overrides to `.overrides-snapshot.json` (gitignored); later runs compare against it and exit non-zero on any add, removal, or change."
|
|
3354
|
-
},
|
|
3355
|
-
{
|
|
3356
|
-
names: ["--diff <base>[...<head>]"],
|
|
3357
|
-
description: "compare against git instead of the snapshot \u2014 `<base>` against the working tree, `<base>...<head>` the head against its merge-base with `<base>` \u2014 printing the `devEngines` verdict and `\u2714 overrides unchanged since <range>`, or exiting non-zero on any add, removal, or change. Refused beside `--save`."
|
|
3358
|
-
}
|
|
3359
|
-
]
|
|
3360
|
-
}
|
|
3361
|
-
},
|
|
3362
|
-
audit: {
|
|
3363
|
-
script: "scripts/security/security-audit-main.ts",
|
|
3364
|
-
description: "Run security audit",
|
|
3365
|
-
category: "Maintenance",
|
|
3366
|
-
reference: ["", "developer", ["processes"]],
|
|
3367
|
-
usage: { examples: [{ arguments: "" }] }
|
|
3368
|
-
},
|
|
3369
|
-
"lockfile:policy": {
|
|
3370
|
-
script: "tools/security/lockfile-policy.ts",
|
|
3371
|
-
description: "Verify the lockfile against pnpm's supply-chain policy (minimumReleaseAge) when it or the policy moved from the merge-base",
|
|
3372
|
-
category: "Maintenance",
|
|
3373
|
-
reference: ["", "automation", ["network"]],
|
|
3374
|
-
is_kit_only: true,
|
|
3375
|
-
usage: {
|
|
3376
|
-
examples: [{ arguments: "", note: "verify when the lockfile or its policy moved" }]
|
|
3377
|
-
}
|
|
3378
|
-
},
|
|
3379
|
-
"ci:timing": {
|
|
3380
|
-
script: "scripts/ci/ci-timing-cli.ts",
|
|
3381
|
-
description: "Print the job and step durations and conclusions of a run id's GitHub Actions run, or of every run on a pull request's or a branch's latest commit",
|
|
3382
|
-
category: "Maintenance",
|
|
3383
|
-
reference: ["<pr|branch|run-id> [--json]", "developer", ["network"]],
|
|
3384
|
-
usage: {
|
|
3385
|
-
examples: [
|
|
3386
|
-
{ arguments: "5544", note: "a pull request, or a branch name" },
|
|
3387
|
-
{ arguments: "18912345678 --json", note: "a run id, machine-readable" }
|
|
3388
|
-
]
|
|
3389
|
-
}
|
|
3390
|
-
},
|
|
3391
|
-
// The reader of `gh-usage-log.ts`'s file (joshuafolkken/kit#6753).
|
|
3392
|
-
"gh:usage": {
|
|
3393
|
-
script: "scripts/gh/gh-usage-cli.ts",
|
|
3394
|
-
description: "Tally the josh processes' logged GitHub API usage per command \u2014 runs, calls, 304 answers and core used \u2014 most calls first, under the period the lines cover",
|
|
3395
|
-
category: "Maintenance",
|
|
3396
|
-
reference: ["[--since <instant>]", "developer", ["none"]],
|
|
3397
|
-
is_read_only: true,
|
|
3398
|
-
usage: {
|
|
3399
|
-
examples: [
|
|
3400
|
-
{ arguments: "", note: "every line the log holds" },
|
|
3401
|
-
{ arguments: "--since 2026-11-08T00:00Z", note: "the lines at or after an instant" }
|
|
3402
|
-
]
|
|
3403
|
-
}
|
|
3404
|
-
},
|
|
3405
|
-
"command:derive": {
|
|
3406
|
-
script: "tools/document/command-derive.ts",
|
|
3407
|
-
description: "Write every artifact the command map derives \u2014 usage spans and catalog \u2014 and print page bytes against their ceilings",
|
|
3408
|
-
category: "Maintenance",
|
|
3409
|
-
reference: ["", "maintainer", ["files"]],
|
|
3410
|
-
// Kit-only: the pages it writes are kit's own documentation, and the script lives under the
|
|
3411
|
-
// undistributed `tools/`.
|
|
3412
|
-
is_kit_only: true,
|
|
3413
|
-
// The command-map snapshot runs through one single-file vitest run.
|
|
3414
|
-
core_weight: 1,
|
|
3415
|
-
usage: {
|
|
3416
|
-
examples: [{ arguments: "", note: "after adding, renaming or describing a command" }]
|
|
3417
|
-
}
|
|
3418
|
-
},
|
|
3419
|
-
"audit:provision": {
|
|
3420
|
-
script: "scripts/security/security-audit-provision-main.ts",
|
|
3421
|
-
description: "Install the pinned osv-scanner when the audit cannot find one (no-op if present)",
|
|
3422
|
-
category: "Maintenance",
|
|
3423
|
-
reference: ["", "automation", ["files", "network"]],
|
|
3424
|
-
usage: {
|
|
3425
|
-
examples: [
|
|
3426
|
-
{ arguments: "", note: "no-op if a scanner is already present" },
|
|
3427
|
-
{ arguments: "--force", note: "ignore backoff, allow a longer download" }
|
|
3428
|
-
],
|
|
3429
|
-
flags: [
|
|
3430
|
-
{
|
|
3431
|
-
names: ["--force"],
|
|
3432
|
-
description: "ignore the 6-hour failure backoff and allow a longer download window; the command to run after fixing a network problem."
|
|
3433
|
-
}
|
|
3434
|
-
]
|
|
3435
|
-
}
|
|
3436
|
-
},
|
|
3437
|
-
"reconcile-templates": {
|
|
3438
|
-
script: "scripts/sync/reconcile-templates.ts",
|
|
3439
|
-
description: "Record template source hashes (--check to verify drift)",
|
|
3440
|
-
category: "Maintenance",
|
|
3441
|
-
reference: ["", "maintainer", ["files"]],
|
|
3442
|
-
usage: {
|
|
3443
|
-
examples: [
|
|
3444
|
-
{ arguments: "", note: "regenerate copy templates + record tripwire hashes" },
|
|
3445
|
-
{ arguments: CHECK2, note: "verify templates are in sync; non-zero on drift" }
|
|
3446
|
-
],
|
|
3447
|
-
flags: [
|
|
3448
|
-
{
|
|
3449
|
-
names: [CHECK2],
|
|
3450
|
-
description: "verify only; exits non-zero on drift. A pre-commit hook runs this when a tracked source or copy template is staged."
|
|
3451
|
-
}
|
|
3452
|
-
]
|
|
3453
|
-
}
|
|
3454
|
-
},
|
|
3455
|
-
latest: {
|
|
3456
|
-
shell: [
|
|
3457
|
-
"sh",
|
|
3458
|
-
"-c",
|
|
3459
|
-
"export NODE_AUTH_TOKEN=$(gh auth token) && pnpm josh latest:guard && pnpm josh latest:update && pnpm josh ranges && pnpm josh audit && pnpm josh latest:corepack && pnpm josh latest:scope --record"
|
|
3460
|
-
],
|
|
3461
|
-
description: "Update dependencies, run security audit, then update pnpm",
|
|
3462
|
-
category: "Maintenance",
|
|
3463
|
-
reference: ["", "developer", ["files", "network", "processes"]],
|
|
3464
|
-
argument_targets: ["latest:corepack", "latest:update", "audit"],
|
|
3465
|
-
usage: { examples: [{ arguments: "", note: "full update (update + audit + pnpm)" }] }
|
|
3466
|
-
},
|
|
3467
|
-
"latest:scope": {
|
|
3468
|
-
script: "scripts/version/latest-scope-main.ts",
|
|
3469
|
-
description: "Say whether this run has to update dependencies, from when josh latest last finished (--record notes a run)",
|
|
3470
|
-
category: "Maintenance",
|
|
3471
|
-
reference: ["[--record] [--json]", "automation", ["files"]],
|
|
3472
|
-
// `JOSH_LATEST_MAX_AGE_HOURS` is documented as a project setting, so it has to be readable
|
|
3473
|
-
// where the project keeps its settings — a variable that only works when exported from the
|
|
3474
|
-
// shell is one a user follows the documentation for and gets the default from, silently.
|
|
3475
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
3476
|
-
usage: {
|
|
3477
|
-
examples: [
|
|
3478
|
-
{ arguments: "", note: "required or skip, the reason on stderr" },
|
|
3479
|
-
{ arguments: "--record", note: "note a finished josh latest run" },
|
|
3480
|
-
{ arguments: JSON_FLAG3, note: "the verdict and the reason as JSON" }
|
|
3481
|
-
],
|
|
3482
|
-
flags: [
|
|
3483
|
-
{
|
|
3484
|
-
names: ["--record"],
|
|
3485
|
-
description: "write the completion record `josh latest` ends with."
|
|
3486
|
-
},
|
|
3487
|
-
{ names: [JSON_FLAG3], description: "emit the verdict and its reason as JSON." }
|
|
3488
|
-
]
|
|
3489
|
-
}
|
|
3490
|
-
},
|
|
3491
|
-
"latest:if-required": {
|
|
3492
|
-
script: "scripts/version/latest-if-required-cli.ts",
|
|
3493
|
-
description: "Run josh latest only when latest:scope answers required, stashing around it",
|
|
3494
|
-
category: "Maintenance",
|
|
3495
|
-
reference: ["", "automation", ["files", "network", "processes"]],
|
|
3496
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
3497
|
-
usage: { examples: [{ arguments: "", note: "stash, update, pop on required" }] }
|
|
3498
|
-
},
|
|
3499
|
-
"latest:guard": {
|
|
3500
|
-
script: "scripts/version/latest-lane-guard-main.ts",
|
|
3501
|
-
description: "Refuse josh latest inside a lane (the update stamp is keyed to the project root)",
|
|
3502
|
-
category: "Maintenance",
|
|
3503
|
-
reference: ["", "automation", ["files"]],
|
|
3504
|
-
usage: { examples: [{ arguments: "", note: "refuses inside a lane" }] }
|
|
3505
|
-
},
|
|
3506
|
-
"latest:corepack": {
|
|
3507
|
-
script: "scripts/version/latest-corepack.ts",
|
|
3508
|
-
description: "Update pnpm on the current major while preserving the integrity pin",
|
|
3509
|
-
category: "Maintenance",
|
|
3510
|
-
reference: ["", "developer", ["files", "network"]],
|
|
3511
|
-
usage: { examples: [{ arguments: "", note: "update pnpm only" }] }
|
|
3512
|
-
},
|
|
3513
|
-
"latest:update": {
|
|
3514
|
-
script: "scripts/version/latest-update.ts",
|
|
3515
|
-
description: "Update all dependencies to latest",
|
|
3516
|
-
category: "Maintenance",
|
|
3517
|
-
reference: ["", "developer", ["files", "network"]],
|
|
3518
|
-
// `JOSH_PLAYWRIGHT_BROWSERS` widens the browsers a Playwright bump installs, and a project
|
|
3519
|
-
// keeps that setting in its `.env`.
|
|
3520
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
3521
|
-
usage: { examples: [{ arguments: "", note: "update dependencies only" }] }
|
|
3522
|
-
}
|
|
3523
|
-
};
|
|
3524
|
-
|
|
3525
|
-
// scripts/josh/josh-commands-project.ts
|
|
3526
|
-
var STAGED = "--staged";
|
|
3527
|
-
var JSON_FLAG4 = "--json";
|
|
3528
|
-
var BRANCH_DIFF = "the branch diff";
|
|
3529
|
-
var STAGED_DIFF = "the staged diff instead";
|
|
3530
|
-
var PR_NUMBER = "42";
|
|
3531
|
-
var DRY_RUN = "--dry-run";
|
|
3532
|
-
var SKIP_PUBLISH_WAIT = "--skip-publish-wait";
|
|
3533
|
-
var PROFILE_ARGUMENTS = "[--profile basic|full]";
|
|
3534
|
-
var PROJECT_COMMANDS = {
|
|
3535
|
-
profile: {
|
|
3536
|
-
script: "scripts/init/project-profile-cli.ts",
|
|
3537
|
-
description: "Show the project profile and the reason for it",
|
|
3538
|
-
category: "Project",
|
|
3539
|
-
reference: [PROFILE_ARGUMENTS, "developer", ["files"]],
|
|
3540
|
-
usage: { examples: [{ arguments: "" }] }
|
|
3541
|
-
},
|
|
3542
|
-
start: {
|
|
3543
|
-
script: "scripts/init/start.ts",
|
|
3544
|
-
description: "Set a project up for the GitHub Issue workflow, from git init to the setup PR",
|
|
3545
|
-
category: "Project",
|
|
3546
|
-
reference: [
|
|
3547
|
-
`${PROFILE_ARGUMENTS} [--yes] [--github] [--public] [--dry-run] [--init-command <command>] [--push-preflight-command <command>]`,
|
|
3548
|
-
"developer",
|
|
3549
|
-
["files", "git", "network", "processes"]
|
|
3550
|
-
],
|
|
3551
|
-
usage: {
|
|
3552
|
-
examples: [
|
|
3553
|
-
{ arguments: "", note: "asks for the profile and the repository" },
|
|
3554
|
-
{
|
|
3555
|
-
arguments: "--yes --github --profile basic",
|
|
3556
|
-
note: "unattended, including the GitHub repository"
|
|
3557
|
-
}
|
|
3558
|
-
],
|
|
3559
|
-
flags: [
|
|
3560
|
-
{ names: ["--profile basic|full"], description: "the profile, without asking." },
|
|
3561
|
-
{ names: ["--yes"], description: "take the defaults \u2014 not consent to write to GitHub." },
|
|
3562
|
-
{ names: ["--github"], description: "create the GitHub repository and push `main`." },
|
|
3563
|
-
{ names: ["--public"], description: "create the repository public instead of private." },
|
|
3564
|
-
{
|
|
3565
|
-
names: ['--init-command "<command>"'],
|
|
3566
|
-
description: "run this setup command in place of `josh init`."
|
|
3567
|
-
},
|
|
3568
|
-
{
|
|
3569
|
-
names: ['--push-preflight-command "<command>"'],
|
|
3570
|
-
description: "a check run before the first step when the plan pushes; a failure stops the run before it writes anything."
|
|
3571
|
-
},
|
|
3572
|
-
{ names: ["--dry-run"], description: "print the plan and change nothing." }
|
|
3573
|
-
]
|
|
3574
|
-
}
|
|
3575
|
-
},
|
|
3576
|
-
"dogfood:commit": {
|
|
3577
|
-
script: "tools/dogfood/dogfood-commit-cli.ts",
|
|
3578
|
-
description: "Make the first commit of a dogfood run's own kit-test-* project",
|
|
3579
|
-
category: "Project",
|
|
3580
|
-
reference: ["<dir>", "automation", ["files", "git"]],
|
|
3581
|
-
is_kit_only: true,
|
|
3582
|
-
usage: { examples: [{ arguments: "~/Development/kit-test-html-start" }] }
|
|
3583
|
-
},
|
|
3584
|
-
"fresh:run": {
|
|
3585
|
-
script: "scripts/fresh-machine/fresh-machine-cli.ts",
|
|
3586
|
-
description: "Run an install scenario in a Docker container of a machine with nothing installed, and keep the log",
|
|
3587
|
-
category: "Project",
|
|
3588
|
-
reference: [
|
|
3589
|
-
"<pattern> | --spec <file.json> [--package-version <version>] [--log-dir <dir>] [--rebuild] | --list",
|
|
3590
|
-
"maintainer",
|
|
3591
|
-
["files", "network", "processes"]
|
|
3592
|
-
],
|
|
3593
|
-
usage: {
|
|
3594
|
-
examples: [
|
|
3595
|
-
{ arguments: "--list", note: "kit's seven patterns" },
|
|
3596
|
-
{ arguments: "kit-test-html-init", note: "one pattern, the packed checkout" },
|
|
3597
|
-
{
|
|
3598
|
-
arguments: "kit-test-html-start",
|
|
3599
|
-
note: "a GitHub pattern, the latest published version"
|
|
3600
|
-
},
|
|
3601
|
-
{ arguments: "--spec fresh/html-init.json", note: "a scenario another toolkit wrote" }
|
|
3602
|
-
],
|
|
3603
|
-
flags: [
|
|
3604
|
-
{ names: ["--list"], description: "print the pattern names and run nothing." },
|
|
3605
|
-
{
|
|
3606
|
-
names: ["--spec <file.json>"],
|
|
3607
|
-
description: "run the scenario in this file instead of a named pattern; the path is relative to the project root."
|
|
3608
|
-
},
|
|
3609
|
-
{
|
|
3610
|
-
names: ["--package-version <version>"],
|
|
3611
|
-
description: "the published version a `package_source: published` scenario installs. Default: the registry's latest version of the package the command is run from."
|
|
3612
|
-
},
|
|
3613
|
-
{
|
|
3614
|
-
names: ["--log-dir <dir>"],
|
|
3615
|
-
description: "where the log is written. Default: `.josh/tmp/fresh-machine`."
|
|
3616
|
-
},
|
|
3617
|
-
{ names: ["--rebuild"], description: "build the machine image without the layer cache." }
|
|
3618
|
-
]
|
|
3619
|
-
}
|
|
3620
|
-
},
|
|
3621
|
-
"auth:setup": {
|
|
3622
|
-
script: "scripts/auth/auth-setup-cli.ts",
|
|
3623
|
-
description: "Save the long-lived Claude Code token `claude setup-token` prints in the macOS keychain, for josh fresh:run",
|
|
3624
|
-
category: "Project",
|
|
3625
|
-
reference: ["[--check]", "maintainer", ["network", "processes"]],
|
|
3626
|
-
usage: {
|
|
3627
|
-
examples: [
|
|
3628
|
-
{ arguments: "", note: "sign in and save the token" },
|
|
3629
|
-
{ arguments: "--check", note: "ok: \u2026 saved on <date>, or missing: \u2026 and exit 1" }
|
|
3630
|
-
]
|
|
3631
|
-
}
|
|
3632
|
-
},
|
|
3633
|
-
init: {
|
|
3634
|
-
script: "scripts/init/init-main.ts",
|
|
3635
|
-
description: "Initialize config in a new project",
|
|
3636
|
-
category: "Project",
|
|
3637
|
-
reference: [
|
|
3638
|
-
`${PROFILE_ARGUMENTS} [--no-install] [--dry-run]`,
|
|
3639
|
-
"developer",
|
|
3640
|
-
["files", "network", "processes"]
|
|
3641
|
-
],
|
|
3642
|
-
usage: {
|
|
3643
|
-
examples: [
|
|
3644
|
-
{
|
|
3645
|
-
arguments: "",
|
|
3646
|
-
note: "create/merge config files, install and format (--no-install skips both, --dry-run only prints the plan)"
|
|
3647
|
-
}
|
|
3648
|
-
]
|
|
3649
|
-
}
|
|
3650
|
-
},
|
|
3651
|
-
sync: {
|
|
3652
|
-
script: "scripts/sync/sync-main.ts",
|
|
3653
|
-
description: "Sync config files",
|
|
3654
|
-
category: "Project",
|
|
3655
|
-
reference: ["[--force]", "developer", ["files"]],
|
|
3656
|
-
usage: {
|
|
3657
|
-
examples: [
|
|
3658
|
-
{ arguments: "", note: "overwrite managed files" },
|
|
3659
|
-
{ arguments: "--force", note: "also replace a file you added to, dropping your additions" }
|
|
3660
|
-
]
|
|
3661
|
-
}
|
|
3662
|
-
},
|
|
3663
|
-
uninstall: {
|
|
3664
|
-
script: "scripts/uninstall/uninstall.ts",
|
|
3665
|
-
description: "Remove what kit added to a project and list what is left to review by hand",
|
|
3666
|
-
category: "Project",
|
|
3667
|
-
reference: [`${PROFILE_ARGUMENTS} [--yes]`, "developer", ["files", "processes"]],
|
|
3668
|
-
usage: {
|
|
3669
|
-
examples: [
|
|
3670
|
-
{ arguments: "", note: "show the plan, then ask" },
|
|
3671
|
-
{ arguments: "--yes", note: "remove without asking" }
|
|
3672
|
-
]
|
|
3673
|
-
}
|
|
3674
|
-
},
|
|
3675
|
-
"sync:scope": {
|
|
3676
|
-
script: "scripts/sync/managed-config-scope-cli.ts",
|
|
3677
|
-
description: "Say whether this change touches a file josh sync distributes",
|
|
3678
|
-
category: "Project",
|
|
3679
|
-
reference: ["[--staged] [--json]", "automation", ["none"]],
|
|
3680
|
-
usage: {
|
|
3681
|
-
examples: [
|
|
3682
|
-
{ arguments: "", note: BRANCH_DIFF },
|
|
3683
|
-
{ arguments: STAGED, note: STAGED_DIFF },
|
|
3684
|
-
{ arguments: JSON_FLAG4, note: '{"scope":"managed","reason":"..."}' }
|
|
3685
|
-
],
|
|
3686
|
-
flags: [
|
|
3687
|
-
{ names: [STAGED], description: "inspect the staged diff instead of the branch diff." },
|
|
3688
|
-
{ names: [JSON_FLAG4], description: 'emit `{"scope","reason"}` as JSON.' }
|
|
3689
|
-
]
|
|
3690
|
-
}
|
|
3691
|
-
},
|
|
3692
|
-
"sonar:hotspots": {
|
|
3693
|
-
script: "scripts/sonar/sonar-hotspots-cli.ts",
|
|
3694
|
-
description: "Fetch SonarCloud hotspots on a pull request and print each one's Step B disposition",
|
|
3695
|
-
category: "Project",
|
|
3696
|
-
reference: ["<PR>", "automation", ["network"]],
|
|
3697
|
-
usage: { examples: [{ arguments: PR_NUMBER }] }
|
|
3698
|
-
},
|
|
3699
|
-
"sonar:new-code": {
|
|
3700
|
-
script: "scripts/sonar/sonar-new-code-cli.ts",
|
|
3701
|
-
description: "Fail when a pull request adds any new SonarCloud issue or duplicated block",
|
|
3702
|
-
category: "Project",
|
|
3703
|
-
reference: ["<PR>", "automation", ["network"]],
|
|
3704
|
-
usage: { examples: [{ arguments: PR_NUMBER }] }
|
|
3705
|
-
},
|
|
3706
|
-
"ui:routes": {
|
|
3707
|
-
script: "scripts/ui/ui-routes-cli.ts",
|
|
3708
|
-
description: "List the screenshot-target routes the current change touches",
|
|
3709
|
-
category: "Project",
|
|
3710
|
-
reference: ["[--staged]", "automation", ["none"]],
|
|
3711
|
-
usage: {
|
|
3712
|
-
examples: [
|
|
3713
|
-
{ arguments: "", note: BRANCH_DIFF },
|
|
3714
|
-
{ arguments: STAGED, note: STAGED_DIFF }
|
|
3715
|
-
]
|
|
3716
|
-
}
|
|
3717
|
-
},
|
|
3718
|
-
"ui:shot": {
|
|
3719
|
-
script: "scripts/ui/ui-shot-cli.ts",
|
|
3720
|
-
description: "Capture routes with this project's own screenshot command",
|
|
3721
|
-
category: "Project",
|
|
3722
|
-
reference: ["<route> [route...]", "automation", ["processes"]],
|
|
3723
|
-
usage: { examples: [{ arguments: "/ /blog" }] }
|
|
3724
|
-
},
|
|
3725
|
-
propagate: {
|
|
3726
|
-
script: "scripts/propagate/propagate.ts",
|
|
3727
|
-
description: "Carry the published release into every consumer repository next to this one",
|
|
3728
|
-
category: "Project",
|
|
3729
|
-
reference: [
|
|
3730
|
-
"[--dry-run] [--skip-publish-wait] [--target <repo>]",
|
|
3731
|
-
"maintainer",
|
|
3732
|
-
["files", "network"]
|
|
3733
|
-
],
|
|
3734
|
-
usage: {
|
|
3735
|
-
examples: [
|
|
3736
|
-
{ arguments: "" },
|
|
3737
|
-
{ arguments: DRY_RUN, note: "report targets and steps, write nothing" },
|
|
3738
|
-
{ arguments: SKIP_PUBLISH_WAIT, note: "release already known to be published" },
|
|
3739
|
-
{ arguments: "--target app-kit", note: "carry the release into one consumer only" }
|
|
3740
|
-
],
|
|
3741
|
-
flags: [
|
|
3742
|
-
{
|
|
3743
|
-
names: [DRY_RUN],
|
|
3744
|
-
description: "report targets and steps without writing; skips the publish wait, opens no issues."
|
|
3745
|
-
},
|
|
3746
|
-
{
|
|
3747
|
-
names: [SKIP_PUBLISH_WAIT],
|
|
3748
|
-
description: "skip the registry poll for an already-published release."
|
|
3749
|
-
},
|
|
3750
|
-
{
|
|
3751
|
-
names: ["--target <repo>"],
|
|
3752
|
-
description: "process only that consumer (`app-kit` or `joshuafolkken/app-kit`); the rest are reported `skipped` and left untouched. An unknown, ambiguous or non-dependent name fails before the publish wait, writing nothing."
|
|
3753
|
-
}
|
|
3754
|
-
]
|
|
3755
|
-
}
|
|
3756
|
-
},
|
|
3757
|
-
adopt: {
|
|
3758
|
-
script: "scripts/adopt/adopt.ts",
|
|
3759
|
-
description: "Upgrade the @joshuafolkken toolkits and other dependencies here, open the PR",
|
|
3760
|
-
category: "Project",
|
|
3761
|
-
reference: ["[--dry-run]", "developer", ["files", "git", "network", "processes"]],
|
|
3762
|
-
usage: {
|
|
3763
|
-
examples: [
|
|
3764
|
-
{ arguments: "" },
|
|
3765
|
-
{ arguments: "--dry-run", note: "report the steps without touching anything" }
|
|
3766
|
-
],
|
|
3767
|
-
flags: [{ names: ["--dry-run"], description: "report the plan without writing." }]
|
|
3768
|
-
}
|
|
3769
|
-
}
|
|
3770
|
-
};
|
|
3771
|
-
|
|
3772
|
-
// scripts/josh/josh-commands-versioning.ts
|
|
3773
|
-
var VERSIONING_COMMANDS = {
|
|
3774
|
-
bump: {
|
|
3775
|
-
script: "scripts/version/bump-version-main.ts",
|
|
3776
|
-
description: "Bump package version",
|
|
3777
|
-
category: "Versioning",
|
|
3778
|
-
reference: ["[major|minor|patch]", "maintainer", ["files"]],
|
|
3779
|
-
usage: { examples: [{ arguments: "major" }, { arguments: "minor" }, { arguments: "patch" }] }
|
|
3780
|
-
},
|
|
3781
|
-
version: {
|
|
3782
|
-
script: "scripts/version/version-check.ts",
|
|
3783
|
-
description: "Show kit versions; --upgrade updates the global and project install",
|
|
3784
|
-
category: "Versioning",
|
|
3785
|
-
reference: ["[--upgrade]", "developer", ["files", "network", "processes"]],
|
|
3786
|
-
usage: {
|
|
3787
|
-
examples: [
|
|
3788
|
-
{ arguments: "" },
|
|
3789
|
-
{
|
|
3790
|
-
arguments: "--upgrade",
|
|
3791
|
-
note: "upgrade global + project to latest, then re-run fix-gh-packages"
|
|
3792
|
-
}
|
|
3793
|
-
],
|
|
3794
|
-
flags: [
|
|
3795
|
-
{
|
|
3796
|
-
names: ["--upgrade"],
|
|
3797
|
-
description: "upgrade both the global install (`pnpm add -g`) and the project devDependency (`pnpm add -D` + `fix-gh-packages`); already-current or not-installed targets are skipped."
|
|
3798
|
-
}
|
|
3799
|
-
]
|
|
3800
|
-
}
|
|
3801
|
-
},
|
|
3802
|
-
// A `script` entry, not a shell one: script paths resolve against the kit package root, so this
|
|
3803
|
-
// keeps working from a consumer repo where the file lives under node_modules. The registry
|
|
3804
|
-
// probes need NODE_AUTH_TOKEN for any `@joshuafolkken/*` dependency; `josh latest` exports it
|
|
3805
|
-
// before chaining here, exactly as it already does for `latest:update`.
|
|
3806
|
-
ranges: {
|
|
3807
|
-
script: "scripts/version/publishable-range-check.ts",
|
|
3808
|
-
description: "Check that every published dependency range still resolves for a consumer and no peer range falls below an installed toolkit",
|
|
3809
|
-
category: "Versioning",
|
|
3810
|
-
reference: ["", "developer", ["network"]],
|
|
3811
|
-
usage: { examples: [{ arguments: "" }] }
|
|
3812
|
-
},
|
|
3813
|
-
// The one place that decides a version. A `script` entry for the same
|
|
3814
|
-
// reason `ranges` is one: script paths resolve against the kit package root, so it keeps working
|
|
3815
|
-
// from a consumer repository where the file lives under node_modules.
|
|
3816
|
-
release: {
|
|
3817
|
-
script: "scripts/release/release-cli.ts",
|
|
3818
|
-
description: "Release the merges main has taken since the version last changed",
|
|
3819
|
-
category: "Versioning",
|
|
3820
|
-
reference: ["[--dry-run]", "maintainer", ["git", "network", "release"]],
|
|
3821
|
-
usage: {
|
|
3822
|
-
examples: [
|
|
3823
|
-
{ arguments: "" },
|
|
3824
|
-
{ arguments: "--dry-run", note: "count and report, write nothing" }
|
|
3825
|
-
],
|
|
3826
|
-
flags: [
|
|
3827
|
-
{
|
|
3828
|
-
names: ["--dry-run"],
|
|
3829
|
-
description: "count and report only; writes nothing, fetches nothing, and creates no work tree."
|
|
3830
|
-
},
|
|
3831
|
-
{
|
|
3832
|
-
names: ["--help", "-h"],
|
|
3833
|
-
description: "print the usage line and exit 0 without fetching or releasing. Any other argument is refused with the usage line and a non-zero exit, before anything is fetched."
|
|
3834
|
-
}
|
|
3835
|
-
]
|
|
3836
|
-
}
|
|
3837
|
-
},
|
|
3838
|
-
// The read-only half of the one above. `release --dry-run` cannot
|
|
3839
|
-
// answer this question: it refuses off the default branch and on a dirty tree, which is every
|
|
3840
|
-
// position a run asks it from. A `script` entry for the same reason `release` is one.
|
|
3841
|
-
"release:scope": {
|
|
3842
|
-
script: "scripts/release/release-scope-main.ts",
|
|
3843
|
-
description: "Say whether a release is owed, from the unreleased merges on main",
|
|
3844
|
-
category: "Versioning",
|
|
3845
|
-
reference: ["[--json]", "automation", ["none"]],
|
|
3846
|
-
usage: {
|
|
3847
|
-
examples: [
|
|
3848
|
-
{ arguments: "", note: "\u2192 required | skip | unknown" },
|
|
3849
|
-
{ arguments: "--json", note: '{"scope":"\u2026","reason":"\u2026"} on one line' }
|
|
3850
|
-
]
|
|
3851
|
-
}
|
|
3852
|
-
},
|
|
3853
|
-
// Run by the release workflows, kit's and the one sync distributes, after a tag has published.
|
|
3854
|
-
// Settings come from the environment, so the workflow decides them.
|
|
3855
|
-
"release:github": {
|
|
3856
|
-
script: "scripts/release/github-release-cli.ts",
|
|
3857
|
-
description: "Create the GitHub Release for a published tag, with generated notes",
|
|
3858
|
-
category: "Versioning",
|
|
3859
|
-
reference: ["", "automation", ["network", "release"]],
|
|
3860
|
-
usage: {
|
|
3861
|
-
examples: [
|
|
3862
|
-
{ arguments: "", note: "run by CI with GH_TOKEN, RELEASE_TAG and GITHUB_REPOSITORY set" }
|
|
3863
|
-
]
|
|
3864
|
-
}
|
|
3865
|
-
},
|
|
3866
|
-
// Run by publish.yml, kit's and the one sync distributes: josh runs it through kit's own tsx, which
|
|
3867
|
-
// a kit that publishes may not have as a dependency of its own (#7303).
|
|
3868
|
-
"release:tag": {
|
|
3869
|
-
script: "scripts/release/publish-tag-cli.ts",
|
|
3870
|
-
description: "Print the npm dist-tag a version publishes under, given the current latest",
|
|
3871
|
-
category: "Versioning",
|
|
3872
|
-
reference: ["<version> <latest>", "automation", ["none"]],
|
|
3873
|
-
usage: {
|
|
3874
|
-
examples: [{ arguments: "1.2.0 1.1.0", note: "\u2192 latest" }]
|
|
3875
|
-
}
|
|
3876
|
-
}
|
|
3877
|
-
};
|
|
3878
|
-
|
|
3879
|
-
// scripts/josh/josh-commands-workflow.ts
|
|
3880
|
-
var PR_TITLE = '"PR title #N"';
|
|
3881
|
-
var BODY_FILE_NOTE = "written under `.josh/tmp/` (`-` reads stdin); use this whenever the body carries a backtick or `$`. Passing both forms is refused.";
|
|
3882
|
-
var ISSUE_URL = '--issue-url "https://..."';
|
|
3883
|
-
var REVIEW_ISSUE = "--issue 2325";
|
|
3884
|
-
var CHECK3 = "--check";
|
|
3885
|
-
var YES = "-y";
|
|
3886
|
-
var SKIP_COMMIT = "--skip-commit";
|
|
3887
|
-
var SKIP_PUSH = "--skip-push";
|
|
3888
|
-
var GIT_WORKFLOW_SCRIPT = "scripts/git/git-workflow.ts";
|
|
3889
|
-
var GIT_MESSAGE_ARGUMENTS = "[-y] <message>";
|
|
3890
|
-
var PERIOD_ARGUMENTS = "[--period <days>]";
|
|
3891
|
-
var WORKFLOW_COMMANDS = {
|
|
3892
|
-
git: {
|
|
3893
|
-
script: GIT_WORKFLOW_SCRIPT,
|
|
3894
|
-
description: "Git workflow helper",
|
|
3895
|
-
category: "Workflow",
|
|
3896
|
-
reference: [GIT_MESSAGE_ARGUMENTS, "developer", ["git", "network"]],
|
|
3897
|
-
usage: {
|
|
3898
|
-
examples: [
|
|
3899
|
-
{ arguments: "", note: "interactive" },
|
|
3900
|
-
{ arguments: YES, note: "unattended (no TTY required)" },
|
|
3901
|
-
{ arguments: '-y "title"', note: "set commit message prefix" },
|
|
3902
|
-
{ arguments: '-y "<title> #<N>"', note: "follow-up commit on the same branch" },
|
|
3903
|
-
{
|
|
3904
|
-
arguments: "-y --skip-commit --skip-push",
|
|
3905
|
-
note: "open the PR without committing/pushing"
|
|
3906
|
-
}
|
|
3907
|
-
],
|
|
3908
|
-
flags: [
|
|
3909
|
-
{
|
|
3910
|
-
names: [YES, "--yes"],
|
|
3911
|
-
description: "run non-interactively; works without a TTY (agent or CI shell)."
|
|
3912
|
-
},
|
|
3913
|
-
{
|
|
3914
|
-
names: [SKIP_COMMIT, SKIP_PUSH],
|
|
3915
|
-
description: "recover/open a PR without a new commit or push."
|
|
3916
|
-
},
|
|
3917
|
-
{
|
|
3918
|
-
names: ["--body-file <path>"],
|
|
3919
|
-
description: "extra PR body text after `closes #N`, from a file (`-` = stdin); use it when the text holds a backtick or `$`."
|
|
3920
|
-
}
|
|
3921
|
-
]
|
|
3922
|
-
}
|
|
3923
|
-
},
|
|
3924
|
-
pr: {
|
|
3925
|
-
script: GIT_WORKFLOW_SCRIPT,
|
|
3926
|
-
description: "Create PR only (skip commit and push)",
|
|
3927
|
-
category: "Workflow",
|
|
3928
|
-
// Not `GIT_MESSAGE_ARGUMENTS`: `-y` is already in the default arguments below, so advertising
|
|
3929
|
-
// it would document a flag that cannot change what this command does.
|
|
3930
|
-
reference: ["<message>", "developer", ["network"]],
|
|
3931
|
-
default_script_arguments: [YES, SKIP_COMMIT, SKIP_PUSH],
|
|
3932
|
-
usage: { examples: [{ arguments: "", note: "open the PR for the current <N>-<slug> branch" }] }
|
|
3933
|
-
},
|
|
3934
|
-
// **The optional form, on both**. The mandatory `--env-file=.env` is resolved by node before the
|
|
3935
|
-
// script's first line: on a machine with no `.env` it dies as `.env: not found` with exit code 9,
|
|
3936
|
-
// even where `TELEGRAM_BOT_TOKEN` and `TELEGRAM_CHAT_ID` exist as real environment variables — a
|
|
3937
|
-
// cloud session, and `followup` with them the merge step of every `fullrun` there.
|
|
3938
|
-
//
|
|
3939
|
-
// Nothing is lost by relaxing it: both scripts already load `.env` through `josh_environment_file`
|
|
3940
|
-
// themselves, so the file is read either way and node's precedence — an existing environment
|
|
3941
|
-
// variable wins over the file — is node's own in both spellings.
|
|
3942
|
-
//
|
|
3943
|
-
// **A missing credential still fails loudly**: `telegram_notify.send` throws on missing credentials
|
|
3944
|
-
// and on a failed send, so `josh notify` exits non-zero instead of warning and answering 0.
|
|
3945
|
-
followup: {
|
|
3946
|
-
script: "scripts/followup/git-followup-workflow.ts",
|
|
3947
|
-
description: "Follow-up git workflow",
|
|
3948
|
-
category: "Workflow",
|
|
3949
|
-
reference: [
|
|
3950
|
-
"<title> [--notify-message <text>]",
|
|
3951
|
-
"automation",
|
|
3952
|
-
["git", "network", "notifications"]
|
|
3953
|
-
],
|
|
3954
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
3955
|
-
usage: {
|
|
3956
|
-
examples: [
|
|
3957
|
-
{ arguments: PR_TITLE, note: "merges (default)" },
|
|
3958
|
-
{ arguments: String.raw`${PR_TITLE} --notify-message "Implemented X:\n- change 1"` },
|
|
3959
|
-
{ arguments: `${PR_TITLE} --notify-message-file .josh/tmp/completion.md` },
|
|
3960
|
-
{ arguments: `${PR_TITLE} --ai-review-ignore-reason "false positive"` },
|
|
3961
|
-
{ arguments: `${PR_TITLE} --no-merge`, note: "do the work, leave the PR open" }
|
|
3962
|
-
],
|
|
3963
|
-
flags: [
|
|
3964
|
-
{
|
|
3965
|
-
names: ["--no-merge"],
|
|
3966
|
-
description: "do the follow-up work but do not merge; leaves the PR open (the only flag that stops the merge). `--merge` is a deprecated no-op. A PR already merged by hand skips the CI wait, the AI-review scan and the merge and runs only the post-merge tail; a completion report already on the Issue is not posted again."
|
|
3967
|
-
},
|
|
3968
|
-
{
|
|
3969
|
-
names: ["--notify-message"],
|
|
3970
|
-
description: "inline completion body; `\\n` expands to newlines."
|
|
3971
|
-
},
|
|
3972
|
-
{
|
|
3973
|
-
names: ["--notify-message-file"],
|
|
3974
|
-
description: `read the completion body from a file ${BODY_FILE_NOTE}`
|
|
3975
|
-
},
|
|
3976
|
-
{
|
|
3977
|
-
names: ["--ai-review-ignore-reason"],
|
|
3978
|
-
description: "reason to dismiss an AI-review finding."
|
|
3979
|
-
}
|
|
3980
|
-
]
|
|
3981
|
-
}
|
|
3982
|
-
},
|
|
3983
|
-
"checks:failed": {
|
|
3984
|
-
script: "scripts/gh/git-gh-checks-failed-main.ts",
|
|
3985
|
-
description: "List the failing CI checks of a pull request or commit, required or not (check runs and commit statuses)",
|
|
3986
|
-
category: "Workflow",
|
|
3987
|
-
reference: ["[<PR|sha>]", "developer", ["network"]],
|
|
3988
|
-
usage: {
|
|
3989
|
-
examples: [
|
|
3990
|
-
{ arguments: "", note: "the current branch's pull request" },
|
|
3991
|
-
{ arguments: "7147", note: "a pull request by number" },
|
|
3992
|
-
{ arguments: "c0ffee1", note: "a commit by sha" }
|
|
3993
|
-
]
|
|
3994
|
-
},
|
|
3995
|
-
is_read_only: true
|
|
3996
|
-
},
|
|
3997
|
-
notify: {
|
|
3998
|
-
script: "scripts/notify/telegram-test-main.ts",
|
|
3999
|
-
description: "Send Telegram notification",
|
|
4000
|
-
category: "Workflow",
|
|
4001
|
-
reference: [
|
|
4002
|
-
"[--task-type <type>] [--body <text> | --body-file <path>] [--issue-url <url>] [--pr-url <url>] [--issue-title <text>] [--repo-name <name>] [--recommended <text>] [--alternative <text>]...",
|
|
4003
|
-
"automation",
|
|
4004
|
-
["notifications"]
|
|
4005
|
-
],
|
|
4006
|
-
tsx_arguments: OPTIONAL_ENV_FILE_FLAGS,
|
|
4007
|
-
usage: {
|
|
4008
|
-
examples: [
|
|
4009
|
-
{
|
|
4010
|
-
arguments: String.raw`--task-type planning ${ISSUE_URL} --body="- bullet 1\n- bullet 2"`
|
|
4011
|
-
},
|
|
4012
|
-
{
|
|
4013
|
-
arguments: `--task-type confirmation ${ISSUE_URL} --body-file .josh/tmp/r.md --recommended "Go" --alternative "Wait"`
|
|
4014
|
-
}
|
|
4015
|
-
],
|
|
4016
|
-
flags: [
|
|
4017
|
-
{
|
|
4018
|
-
names: ["--task-type"],
|
|
4019
|
-
description: "one of `planning` \u{1F4CB}, `completion` \u2705, `failure` \u274C, `warning` \u26A0\uFE0F, `kickoff_retry` \u{1F504}, `confirmation` \u23F8\uFE0F. Do not send `completion` or `warning` by hand \u2014 `josh followup` sends them."
|
|
4020
|
-
},
|
|
4021
|
-
{
|
|
4022
|
-
names: ["--body", "--body=$'\u2026'"],
|
|
4023
|
-
description: "inline body; use `--body=$'\u2026'` when it starts with `-`."
|
|
4024
|
-
},
|
|
4025
|
-
{ names: ["--body-file"], description: `read the body from a file ${BODY_FILE_NOTE}` },
|
|
4026
|
-
{
|
|
4027
|
-
names: ["--repo-name", "--issue-url", "--pr-url"],
|
|
4028
|
-
description: "header repository, resolved in that order, then the working directory. The issue title is read from `--issue-url`."
|
|
4029
|
-
},
|
|
4030
|
-
{
|
|
4031
|
-
names: ["--recommended", "--alternative"],
|
|
4032
|
-
description: "the choices appended under `JOSH_SESSION_LANG` headings; `--recommended` is required for `confirmation`, `--alternative` is repeatable."
|
|
4033
|
-
}
|
|
4034
|
-
]
|
|
4035
|
-
}
|
|
4036
|
-
},
|
|
4037
|
-
// Counting, appending and deciding a second sighting together keeps ledger judgments consistent.
|
|
4038
|
-
"observation:record": {
|
|
4039
|
-
script: "scripts/observations/observation-record-cli.ts",
|
|
4040
|
-
description: "Record an observation sighting and answer whether it is now filed",
|
|
4041
|
-
category: "Workflow",
|
|
4042
|
-
reference: ["<key> <depth> <where> <what> [--checkout <path>]", "automation", ["files"]],
|
|
4043
|
-
usage: {
|
|
4044
|
-
examples: [
|
|
4045
|
-
{ arguments: "flaky-e2e d1 'tests/e2e/login.test.ts' 'times out on CI only'" },
|
|
4046
|
-
{
|
|
4047
|
-
arguments: "flaky-e2e d1 'src/app.ts' 'fails there too' --checkout ~/Development/app",
|
|
4048
|
-
note: "another repository's ledger"
|
|
4049
|
-
}
|
|
4050
|
-
],
|
|
4051
|
-
flags: [
|
|
4052
|
-
{
|
|
4053
|
-
names: ["--checkout <path>"],
|
|
4054
|
-
description: "count and append in that repository's `.josh/observations/` instead."
|
|
4055
|
-
}
|
|
4056
|
-
]
|
|
4057
|
-
}
|
|
4058
|
-
},
|
|
4059
|
-
// The depth test's table read off a path, so the `<depth>` above is derived rather than judged.
|
|
4060
|
-
"observation:depth": {
|
|
4061
|
-
script: "scripts/observations/observation-depth-cli.ts",
|
|
4062
|
-
description: "Print the depth test's depth for a subject path",
|
|
4063
|
-
category: "Workflow",
|
|
4064
|
-
reference: ["<path>", "automation", ["none"]],
|
|
4065
|
-
usage: { examples: [{ arguments: "scripts/lane/lane-plan.ts" }] }
|
|
4066
|
-
},
|
|
4067
|
-
// The observation ledger's commit path for the lines no run's own commit carried:
|
|
4068
|
-
// a lane's lines sit in the primary checkout, which
|
|
4069
|
-
// its commit cannot see, and the recurrence count the promotion rule reads is a count of main.
|
|
4070
|
-
"observations:flush": {
|
|
4071
|
-
script: "scripts/observations/observations-flush-cli.ts",
|
|
4072
|
-
description: "Commit the observation ledger as a pull request of its own, and merge it",
|
|
4073
|
-
category: "Workflow",
|
|
4074
|
-
reference: ["", "automation", ["git", "network"]],
|
|
4075
|
-
usage: { examples: [{ arguments: "" }] }
|
|
4076
|
-
},
|
|
4077
|
-
// The one write path for a `/code-review` round's findings, plus the
|
|
4078
|
-
// `--check` gate `followup` runs before it merges. It appends a `- rf:`
|
|
4079
|
-
// line per finding — or one zero-finding line for a clean round — to the observation ledger, so
|
|
4080
|
-
// `observations:flush` commits them and the recurrence count survives the run.
|
|
4081
|
-
"review:record": {
|
|
4082
|
-
script: "scripts/review/review-record-main.ts",
|
|
4083
|
-
description: "Record a review round\u2019s findings, or check a round was recorded",
|
|
4084
|
-
category: "Workflow",
|
|
4085
|
-
reference: [
|
|
4086
|
-
"--issue <N> [--comment | --interaction] [<category>:<severity>:<file>[ \u2014 <reason>] ...] | --from-slot --issue <N> [--comment | --interaction] [<n>=<disposition> ...] | --check [--interaction] --issue <N>",
|
|
4087
|
-
"automation",
|
|
4088
|
-
["files", "network"]
|
|
4089
|
-
],
|
|
4090
|
-
usage: {
|
|
4091
|
-
examples: [
|
|
4092
|
-
{ arguments: `${REVIEW_ISSUE} bug-risks:medium:src/foo.ts:42 tests:low:a.test.ts` },
|
|
4093
|
-
{ arguments: REVIEW_ISSUE, note: "a zero-finding round \u2014 records one `none` line" },
|
|
4094
|
-
{
|
|
4095
|
-
arguments: `${REVIEW_ISSUE} --comment`,
|
|
4096
|
-
note: "a round that passed after the PR opened \u2014 an Issue comment, no append"
|
|
4097
|
-
},
|
|
4098
|
-
{ arguments: `${CHECK3} ${REVIEW_ISSUE}`, note: "the merge gate: was it recorded?" },
|
|
4099
|
-
{
|
|
4100
|
-
arguments: `${REVIEW_ISSUE} --interaction`,
|
|
4101
|
-
note: "the interaction review\u2019s pass \u2014 a `- ri:` line"
|
|
4102
|
-
},
|
|
4103
|
-
{
|
|
4104
|
-
arguments: `--from-slot ${REVIEW_ISSUE} 2=filed:#7`,
|
|
4105
|
-
note: "the findings the reviewer wrote with review:submit \u2014 each `fixed` unless its line is given another"
|
|
4106
|
-
}
|
|
4107
|
-
]
|
|
4108
|
-
}
|
|
4109
|
-
},
|
|
4110
|
-
// The reader over the durable review stop log: each finding that stopped a ship, with its file:line
|
|
4111
|
-
// and first sentence, so a period's stops are classified without reading ship logs.
|
|
4112
|
-
"review:stops": {
|
|
4113
|
-
script: "scripts/review/review-stops-cli.ts",
|
|
4114
|
-
description: "List the review findings that stopped a josh ship over a period, by kind, file:line and first sentence",
|
|
4115
|
-
category: "Workflow",
|
|
4116
|
-
reference: [PERIOD_ARGUMENTS, "developer", ["none"]],
|
|
4117
|
-
usage: { examples: [{ arguments: "--period 30", note: "the last 30 days (default 7)" }] }
|
|
4118
|
-
},
|
|
4119
|
-
// The reader over what `review:record` wrote: each recurring category’s
|
|
4120
|
-
// count, and the number of zero-finding rounds that distinguishes a quiet category from an unwatched one.
|
|
4121
|
-
"review:findings": {
|
|
4122
|
-
script: "scripts/review/review-findings-cli.ts",
|
|
4123
|
-
description: "Count review findings by category from the observation ledger",
|
|
4124
|
-
category: "Workflow",
|
|
4125
|
-
reference: [PERIOD_ARGUMENTS, "developer", ["files"]],
|
|
4126
|
-
usage: {
|
|
4127
|
-
examples: [
|
|
4128
|
-
{ arguments: "" },
|
|
4129
|
-
{ arguments: "--period 7", note: "the last 7 days, by category and severity" }
|
|
4130
|
-
]
|
|
4131
|
-
}
|
|
4132
|
-
},
|
|
4133
|
-
// After a behavior-change Issue merges, re-run its declared baseline and print before/after; a value
|
|
4134
|
-
// that did not move appends a refuted-premise line to the observation ledger.
|
|
4135
|
-
"measure:rerun": {
|
|
4136
|
-
script: "scripts/issue/measure-rerun-cli.ts",
|
|
4137
|
-
description: "Re-run a merged issue\u2019s baseline command and print the before/after pair",
|
|
4138
|
-
category: "Workflow",
|
|
4139
|
-
reference: ["<issue-number>", "automation", ["network", "processes", "files"]],
|
|
4140
|
-
usage: { examples: [{ arguments: "2212" }] }
|
|
4141
|
-
},
|
|
4142
|
-
// A script rather than an `sh -c` chain, because it has a precondition to enforce: run inside a
|
|
4143
|
-
// linked work tree it would hijack the default branch from every other one.
|
|
4144
|
-
"main:sync": {
|
|
4145
|
-
script: "scripts/git/main-sync-main.ts",
|
|
4146
|
-
description: "Checkout default branch, pull latest, and prune merged remote-gone branches (refuses inside a lane)",
|
|
4147
|
-
category: "Workflow",
|
|
4148
|
-
reference: ["", "developer", ["git", "network"]],
|
|
4149
|
-
usage: { examples: [{ arguments: "" }] }
|
|
4150
|
-
},
|
|
4151
|
-
// A script rather than an `sh -c` chain, because the strategy has to be named rather than left to
|
|
4152
|
-
// the caller's git configuration: a bare `git pull` aborts with `Need to specify how to reconcile
|
|
4153
|
-
// divergent branches` on exactly the diverged branch the command exists for.
|
|
4154
|
-
//
|
|
4155
|
-
// **It declares no core weight, by measurement** (joshuafolkken/kit#3944): its own work is git, and
|
|
4156
|
-
// the catalog it may regenerate took 0.6s of CPU. The heavy processes seen beside it are commit
|
|
4157
|
-
// hooks — its regenerated catalog's commit runs them — which reserve themselves, and a weight here
|
|
4158
|
-
// would set the held mark they inherit, folding the parallel hook tools into this one place.
|
|
4159
|
-
"main:merge": {
|
|
4160
|
-
script: "scripts/git/main-merge-main.ts",
|
|
4161
|
-
description: "Merge origin default branch into the current branch",
|
|
4162
|
-
category: "Workflow",
|
|
4163
|
-
reference: ["", "developer", ["git", "network"]],
|
|
4164
|
-
usage: { examples: [{ arguments: "" }] }
|
|
4165
|
-
}
|
|
4166
|
-
};
|
|
4167
|
-
|
|
4168
|
-
// scripts/josh/josh-command-map.ts
|
|
4169
|
-
var CATEGORY_ORDER = [
|
|
4170
|
-
"Development",
|
|
4171
|
-
"Project",
|
|
4172
|
-
"Workflow",
|
|
4173
|
-
"Versioning",
|
|
4174
|
-
"Maintenance",
|
|
4175
|
-
"Git hooks",
|
|
4176
|
-
"AI tools"
|
|
4177
|
-
];
|
|
4178
|
-
var COMMAND_MAP = {
|
|
4179
|
-
completion: {
|
|
4180
|
-
script: "scripts/josh/josh-completion.ts",
|
|
4181
|
-
description: "Print command names and aliases, or a shell completion script",
|
|
4182
|
-
category: "Development",
|
|
4183
|
-
reference: ["--names | <zsh|bash|fish>", "automation", ["none"]],
|
|
4184
|
-
is_read_only: true,
|
|
4185
|
-
usage: {
|
|
4186
|
-
examples: [
|
|
4187
|
-
{ arguments: "--names" },
|
|
4188
|
-
{ arguments: "zsh" },
|
|
4189
|
-
{ arguments: "bash" },
|
|
4190
|
-
{ arguments: "fish" }
|
|
4191
|
-
]
|
|
4192
|
-
}
|
|
4193
|
-
},
|
|
4194
|
-
...DEV_COMMANDS,
|
|
4195
|
-
...PROJECT_COMMANDS,
|
|
4196
|
-
...WORKFLOW_COMMANDS,
|
|
4197
|
-
...VERSIONING_COMMANDS,
|
|
4198
|
-
...MAINTENANCE_COMMANDS,
|
|
4199
|
-
...HOOKS_COMMANDS,
|
|
4200
|
-
...AI_COMMANDS,
|
|
4201
|
-
...LINT_COMMANDS,
|
|
4202
|
-
...CLONE_COMMANDS
|
|
4203
|
-
};
|
|
4204
|
-
|
|
4205
|
-
export {
|
|
4206
|
-
CATEGORY_ORDER,
|
|
4207
|
-
COMMAND_MAP
|
|
4208
|
-
};
|