@iowarp/clio-coder 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (369) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/CONTRIBUTING.md +86 -19
  3. package/README.md +35 -6
  4. package/dist/{acp-TMDQZDIG.js → acp-H2NGRPWO.js} +11 -11
  5. package/dist/{agents-5N5NG3XG.js → agents-TL5LLUQP.js} +54 -53
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-Z5CCBXKQ.js → auth-E5SW4HMS.js} +19 -16
  8. package/dist/{builtins-K6TNDT24.js → builtins-IA7V7FUC.js} +9 -4
  9. package/dist/{chunk-ZW4HH5JJ.js → chunk-2APPQIER.js} +6 -6
  10. package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
  11. package/dist/{chunk-UBRFI4HS.js → chunk-2UG5F4C5.js} +127 -47
  12. package/dist/{chunk-UH632ZYL.js → chunk-2UH2KFUP.js} +2 -2
  13. package/dist/{chunk-3F7VUY77.js → chunk-2VIKGWFZ.js} +2 -2
  14. package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
  15. package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
  16. package/dist/{chunk-2X4RYJTJ.js → chunk-4UVU7BJ5.js} +2 -2
  17. package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
  18. package/dist/{chunk-5KW52TEP.js → chunk-54CBCGIR.js} +5 -5
  19. package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
  20. package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
  21. package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
  22. package/dist/{chunk-LJID3DYZ.js → chunk-64I3JVYM.js} +2 -2
  23. package/dist/{chunk-4JDLP6ZS.js → chunk-6PTFB5VS.js} +7 -7
  24. package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
  25. package/dist/{chunk-HLAFFSEK.js → chunk-7DRAWPTZ.js} +2 -2
  26. package/dist/chunk-7E7I3WLS.js +3762 -0
  27. package/dist/{chunk-YJISEZKC.js → chunk-7ZYNNDKC.js} +6 -6
  28. package/dist/{chunk-I66ZTYNP.js → chunk-AF4YM7Z4.js} +236 -101
  29. package/dist/{chunk-2HFQNRV3.js → chunk-AX2THNSA.js} +12 -12
  30. package/dist/{chunk-PGF63K6I.js → chunk-B4OAX3SI.js} +65 -3
  31. package/dist/{chunk-W6NIE6OW.js → chunk-B4VEBZKF.js} +3 -3
  32. package/dist/{chunk-JBCS7CRR.js → chunk-BEPZRGGU.js} +10 -10
  33. package/dist/{chunk-XGDPUNND.js → chunk-CE5AX47J.js} +2 -2
  34. package/dist/{chunk-I64IFBLB.js → chunk-DWUOQKRU.js} +17 -10
  35. package/dist/{chunk-DZAW46HP.js → chunk-E3TPLWFX.js} +3 -3
  36. package/dist/{chunk-HIICAHCJ.js → chunk-EKCHAPYA.js} +2 -2
  37. package/dist/{chunk-XE3PCIXH.js → chunk-F5JHEYZM.js} +7 -7
  38. package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
  39. package/dist/{chunk-ZNT2M6TG.js → chunk-G76U63X4.js} +17 -17
  40. package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
  41. package/dist/{chunk-2NHR3NAY.js → chunk-GI7YYQ3F.js} +40 -34
  42. package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
  43. package/dist/chunk-GYV6VZOC.js +26 -0
  44. package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
  45. package/dist/{chunk-W4YEMFBX.js → chunk-HEQY7ZFI.js} +2 -2
  46. package/dist/{chunk-IKOZFYBN.js → chunk-I7ZPNEJM.js} +145 -102
  47. package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
  48. package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
  49. package/dist/chunk-IJNZMHLA.js +101 -0
  50. package/dist/{chunk-JWJGP5DQ.js → chunk-INY6HTFL.js} +7 -7
  51. package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
  52. package/dist/{chunk-B74PXLU7.js → chunk-IWT4SF4R.js} +3 -3
  53. package/dist/{chunk-B7HM5Z7T.js → chunk-JDAY6FIL.js} +5 -5
  54. package/dist/{chunk-PJX3WQUQ.js → chunk-JEQ3XTHC.js} +2 -2
  55. package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
  56. package/dist/{chunk-X7IARSHT.js → chunk-JKKCYP3C.js} +9 -9
  57. package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
  58. package/dist/{chunk-SSEYRH53.js → chunk-KK4JZPBQ.js} +19 -140
  59. package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
  60. package/dist/{chunk-Q4XWMHX6.js → chunk-L47TF46W.js} +2 -2
  61. package/dist/{chunk-O3YUNJZ2.js → chunk-LDJG7DW3.js} +81 -24
  62. package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
  63. package/dist/{chunk-F2I26BDK.js → chunk-MUW2BDDH.js} +4 -4
  64. package/dist/{chunk-HKMD33FO.js → chunk-MWUZBSAQ.js} +79 -76
  65. package/dist/{chunk-QQLGQY2A.js → chunk-N2Z7HLVY.js} +20 -20
  66. package/dist/{chunk-DZEK6CJN.js → chunk-NIQJ66N4.js} +19 -19
  67. package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
  68. package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
  69. package/dist/{chunk-TPEQIQIE.js → chunk-OML5D5V5.js} +8 -8
  70. package/dist/{chunk-IKSLQ4XV.js → chunk-PAJQJ7BS.js} +558 -216
  71. package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
  72. package/dist/{chunk-UH347SHR.js → chunk-QWGDJJYJ.js} +11 -11
  73. package/dist/chunk-R6Q67RJH.js +134 -0
  74. package/dist/{chunk-CRFOIAX3.js → chunk-RRNP2ANY.js} +6 -6
  75. package/dist/{chunk-IDNA72AH.js → chunk-RSJ25QSL.js} +2 -2
  76. package/dist/chunk-SKHCAU7K.js +385 -0
  77. package/dist/{chunk-RLYRBIYQ.js → chunk-TM6LQDI3.js} +20 -12
  78. package/dist/chunk-UOIZ7DA4.js +41 -0
  79. package/dist/{chunk-P75RZCJW.js → chunk-UPZU6GE4.js} +3 -3
  80. package/dist/{chunk-MCMZMDAC.js → chunk-V2ANDPVT.js} +4 -4
  81. package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
  82. package/dist/{chunk-IMXMHHMQ.js → chunk-VW6DOEDG.js} +332 -57
  83. package/dist/{chunk-XOXV5GKE.js → chunk-W6RRQCPQ.js} +16 -7
  84. package/dist/{chunk-CYZW7JHJ.js → chunk-WBKFA554.js} +8 -8
  85. package/dist/{chunk-BO7Y52RY.js → chunk-WCXUNS7U.js} +7 -7
  86. package/dist/{chunk-ZGNYYXQ6.js → chunk-WRBAGUNF.js} +3 -3
  87. package/dist/{chunk-FVDGR2ZL.js → chunk-XIVNBFZS.js} +85 -30
  88. package/dist/{chunk-BYMNWQ7O.js → chunk-XPWWI35G.js} +299 -58
  89. package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
  90. package/dist/{chunk-AZ4WMN4W.js → chunk-Y3CBHOR6.js} +2 -2
  91. package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
  92. package/dist/{chunk-54ODD65L.js → chunk-YQWYVTMC.js} +4 -4
  93. package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
  94. package/dist/{chunk-7BHIY2MW.js → chunk-ZDN3Y73Y.js} +6 -6
  95. package/dist/{chunk-E7GT7O5N.js → chunk-ZWPRK62N.js} +7 -4
  96. package/dist/cli/index.js +38 -37
  97. package/dist/{clio-7VB377CC.js → clio-CMMK4KRR.js} +7 -7
  98. package/dist/{code-nav-YVLCYA7V.js → code-nav-MDZNQS33.js} +7 -7
  99. package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
  100. package/dist/{config-4HVOS65E.js → config-SVM5P5YI.js} +76 -74
  101. package/dist/{configure-PIWO7B24.js → configure-LE3IK2TJ.js} +26 -24
  102. package/dist/{context-IYEHL3WQ.js → context-2OHRKS42.js} +66 -63
  103. package/dist/{context-N6ZE3LGJ.js → context-E3VC7RX5.js} +15 -11
  104. package/dist/{context-KQYIWPWT.js → context-VNCR7KAG.js} +60 -45
  105. package/dist/{context-clear-G4OGZJDS.js → context-clear-BW4O37TG.js} +61 -59
  106. package/dist/context-map-COB37XXN.js +505 -0
  107. package/dist/{context-working-set-BWLF6LJP.js → context-working-set-VDS25HXZ.js} +17 -16
  108. package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-5AHT53RF.js} +85 -74
  109. package/dist/{doctor-LHBD36VU.js → doctor-WNNVO6FY.js} +37 -37
  110. package/dist/{eval-C45FYRJ6.js → eval-7G7SGAYO.js} +285 -114
  111. package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
  112. package/dist/{evidence-6SHONYAF.js → evidence-VD6736FQ.js} +63 -62
  113. package/dist/{evolve-KRKMV72X.js → evolve-AL3NGVRL.js} +62 -61
  114. package/dist/{extensions-KPZ2UHBB.js → extensions-MOVJ32NM.js} +7 -7
  115. package/dist/{fleet-IVTCKDHT.js → fleet-QZHUMAGI.js} +110 -108
  116. package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-BAYT5FJZ.js} +10 -10
  117. package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-IREVMRU4.js} +7 -6
  118. package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-YCTT3HTI.js} +19 -18
  119. package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-QVJTDAVB.js} +55 -54
  120. package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-25QAFPK4.js} +4 -4
  121. package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-5O57AAJ7.js} +23 -22
  122. package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-CPH2W2T6.js} +56 -55
  123. package/dist/{fleet-view-TWHJKCN6.js → fleet-view-SWBR3VGQ.js} +55 -54
  124. package/dist/{init-T2QORQ3Y.js → init-J477LKZH.js} +78 -76
  125. package/dist/{interop-IN5I2A66.js → interop-3FCM6XLG.js} +11 -11
  126. package/dist/{library-LSCATDLZ.js → library-QUQEIUG6.js} +28 -27
  127. package/dist/{memory-HYOKAGGJ.js → memory-SGGSEP65.js} +64 -63
  128. package/dist/{models-2GPMFYCM.js → models-HEKUAXXK.js} +49 -43
  129. package/dist/{monitor-E4ASVUJH.js → monitor-HKU57TYQ.js} +61 -60
  130. package/dist/{orchestrator-DDMPR3PY.js → orchestrator-VDFAEFAI.js} +919 -546
  131. package/dist/{panes-E3RUXOW5.js → panes-DN2SSFOH.js} +3 -3
  132. package/dist/{panes-IXKLOKA2.js → panes-TALGNPZT.js} +8 -8
  133. package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
  134. package/dist/reset-EAJFFJVB.js +344 -0
  135. package/dist/{resources-OTRSN34L.js → resources-OVKSEFVE.js} +27 -20
  136. package/dist/{run-5DEYH5QK.js → run-7DP7ZF2J.js} +113 -109
  137. package/dist/{share-IHWTLO3M.js → share-WML67FT3.js} +26 -25
  138. package/dist/{skills-IYMXMKW4.js → skills-SG662R2K.js} +39 -31
  139. package/dist/{skills-eval-DROHSJAR.js → skills-eval-VVZEUU46.js} +74 -73
  140. package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-I2E23GET.js} +21 -20
  141. package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-S7MBJDQK.js} +35 -34
  142. package/dist/{steer-Z5DO23FJ.js → steer-2LQOMCPB.js} +3 -3
  143. package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
  144. package/dist/{targets-P2FUC4IL.js → targets-4QC3HIEW.js} +48 -45
  145. package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-TUHIJ6Y2.js} +2 -2
  146. package/dist/{tools-5B7RO6MV.js → tools-TFGJICCU.js} +8 -8
  147. package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
  148. package/dist/uninstall-5PEVOE5B.js +408 -0
  149. package/dist/upgrade-M4WXY6KN.js +303 -0
  150. package/dist/{usage-ME5MPXGX.js → usage-N7ZNVLEM.js} +147 -102
  151. package/dist/{verifiers-BVZ7IWOO.js → verifiers-DJTP4XX6.js} +15 -15
  152. package/dist/{verify-5K7ZKQFC.js → verify-RWE4PPEK.js} +9 -9
  153. package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-C7IQOXSP.js} +84 -82
  154. package/dist/{with-panes-BYOJCLAM.js → with-panes-4GCGSL7J.js} +9 -9
  155. package/dist/worker/entry.js +61 -60
  156. package/docs/architecture/artifact-placement.md +1 -0
  157. package/docs/architecture/artifact-versions.md +1 -1
  158. package/docs/architecture/context-engine.md +4 -0
  159. package/docs/architecture/middleware-and-components.md +1 -1
  160. package/docs/architecture/model-catalog.md +21 -10
  161. package/docs/architecture/observability.md +12 -1
  162. package/docs/architecture/prompt-envelope-and-tools.md +2 -0
  163. package/docs/architecture/provider-adapter-cookbook.md +63 -0
  164. package/docs/architecture/safety-model.md +15 -5
  165. package/docs/guide/built-in-agents.md +17 -3
  166. package/docs/guide/commands-and-modes.md +1 -1
  167. package/docs/guide/configuration-and-targets.md +97 -9
  168. package/docs/guide/configuration-reference.md +7 -2
  169. package/docs/guide/environment-variables.md +2 -0
  170. package/docs/guide/installation-and-lifecycle.md +37 -4
  171. package/docs/guide/proactive-memory.md +66 -55
  172. package/docs/guide/skills-marketplace.md +18 -0
  173. package/docs/process/development-pipeline.md +34 -1
  174. package/docs/process/eval-runner.md +67 -3
  175. package/evals/behavioral-model.yaml +3 -2
  176. package/package.json +2 -2
  177. package/skills/README.md +7 -5
  178. package/skills/coding/ast-grep/SKILL.md +101 -30
  179. package/skills/coding/ast-grep/evals.md +26 -0
  180. package/skills/coding/coding-standards/SKILL.md +40 -5
  181. package/skills/coding/coding-standards/evals.md +23 -0
  182. package/skills/coding/prototype/SKILL.md +87 -28
  183. package/skills/coding/prototype/evals.md +19 -0
  184. package/skills/coding/tdd/SKILL.md +80 -53
  185. package/skills/coding/tdd/evals.md +20 -0
  186. package/skills/context/context-handoff/SKILL.md +43 -2
  187. package/skills/context/context-handoff/evals.md +44 -0
  188. package/skills/context/context-prime/SKILL.md +45 -15
  189. package/skills/context/context-prime/evals.md +45 -0
  190. package/skills/git/branch-closeout/SKILL.md +132 -0
  191. package/skills/git/branch-closeout/evals.md +133 -0
  192. package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
  193. package/skills/git/file-ticket/SKILL.md +77 -63
  194. package/skills/git/file-ticket/assets/issue-template.md +22 -0
  195. package/skills/git/file-ticket/evals.md +31 -26
  196. package/skills/git/file-ticket/references/issue-discovery.md +49 -0
  197. package/skills/git/fix-issue/SKILL.md +87 -64
  198. package/skills/git/fix-issue/evals.md +35 -31
  199. package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
  200. package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
  201. package/skills/git/resolve-merge-conflicts/evals.md +52 -25
  202. package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
  203. package/skills/git/ship/SKILL.md +103 -67
  204. package/skills/git/ship/assets/pr-template.md +21 -0
  205. package/skills/git/ship/evals.md +44 -28
  206. package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
  207. package/skills/git/worktree-create/SKILL.md +80 -50
  208. package/skills/git/worktree-create/evals.md +40 -33
  209. package/skills/git/worktree-create/references/worktree-setup.md +62 -66
  210. package/skills/git/worktree-merge/SKILL.md +112 -65
  211. package/skills/git/worktree-merge/evals.md +42 -34
  212. package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
  213. package/skills/planning/archify/SKILL.md +196 -0
  214. package/skills/planning/archify/evals.md +65 -0
  215. package/skills/planning/architecture/SKILL.md +61 -12
  216. package/skills/planning/architecture/evals.md +65 -0
  217. package/skills/planning/backlog/SKILL.md +130 -14
  218. package/skills/planning/backlog/evals.md +142 -0
  219. package/skills/planning/prd/SKILL.md +46 -6
  220. package/skills/planning/prd/evals.md +54 -0
  221. package/skills/planning/product-intent/SKILL.md +57 -2
  222. package/skills/planning/product-intent/evals.md +70 -0
  223. package/skills/planning/tech-spec/SKILL.md +53 -2
  224. package/skills/planning/tech-spec/evals.md +73 -0
  225. package/skills/registry.yaml +58 -50
  226. package/skills/remote.yaml +13 -0
  227. package/skills/research/arxiv-literature/SKILL.md +76 -18
  228. package/skills/research/arxiv-literature/evals.md +50 -0
  229. package/skills/research/experiment-protocol/SKILL.md +20 -1
  230. package/skills/research/experiment-protocol/evals.md +23 -0
  231. package/skills/research/scientific-debugging/SKILL.md +23 -1
  232. package/skills/research/scientific-debugging/evals.md +18 -0
  233. package/skills/research/scientific-modernization/SKILL.md +26 -1
  234. package/skills/research/scientific-modernization/evals.md +27 -0
  235. package/skills/skill-marketplace.json +63 -28
  236. package/skills/workflow/cut-it/SKILL.md +65 -5
  237. package/skills/workflow/cut-it/evals.md +101 -0
  238. package/skills/workflow/design-council/SKILL.md +117 -27
  239. package/skills/workflow/design-council/evals.md +161 -0
  240. package/skills/workflow/grill-me/SKILL.md +86 -10
  241. package/skills/workflow/grill-me/evals.md +153 -0
  242. package/skills/workflow/workflow-distiller/SKILL.md +76 -17
  243. package/skills/workflow/workflow-distiller/evals.md +118 -0
  244. package/src/cli/configure-interop.ts +105 -13
  245. package/src/cli/configure-oauth.ts +57 -0
  246. package/src/cli/configure-onboarding.ts +980 -0
  247. package/src/cli/configure-target.ts +594 -0
  248. package/src/cli/configure.ts +1082 -528
  249. package/src/cli/context-map.ts +114 -0
  250. package/src/cli/context.ts +4 -0
  251. package/src/cli/index.ts +1 -0
  252. package/src/cli/lifecycle-presenter.ts +436 -0
  253. package/src/cli/models.ts +10 -2
  254. package/src/cli/modes/print.ts +5 -1
  255. package/src/cli/reset.ts +228 -106
  256. package/src/cli/run.ts +7 -2
  257. package/src/cli/select.ts +664 -0
  258. package/src/cli/skills.ts +9 -2
  259. package/src/cli/targets.ts +3 -0
  260. package/src/cli/uninstall.ts +233 -165
  261. package/src/cli/upgrade.ts +204 -149
  262. package/src/cli/usage.ts +86 -27
  263. package/src/cli/validate-model.ts +3 -3
  264. package/src/core/config.ts +56 -0
  265. package/src/core/external-diagnostic.ts +44 -0
  266. package/src/core/gateway-routing.ts +157 -0
  267. package/src/core/safe-exec.ts +17 -2
  268. package/src/core/skill-activation.ts +89 -2
  269. package/src/domains/agents/builtins/world-knowledge.md +31 -0
  270. package/src/domains/agents/catalog.ts +1 -1
  271. package/src/domains/agents/result-contract.ts +70 -0
  272. package/src/domains/context/wiki/map-seed.ts +589 -0
  273. package/src/domains/context/wiki/plan.ts +2 -2
  274. package/src/domains/dispatch/admission.ts +29 -0
  275. package/src/domains/dispatch/agent-candidates.ts +10 -0
  276. package/src/domains/dispatch/budget-envelope.ts +86 -1
  277. package/src/domains/dispatch/capability-match.ts +1 -0
  278. package/src/domains/dispatch/capacity-lease.ts +17 -0
  279. package/src/domains/dispatch/contract.ts +11 -1
  280. package/src/domains/dispatch/extension.ts +134 -29
  281. package/src/domains/dispatch/types.ts +3 -0
  282. package/src/domains/dispatch/worker-model-metadata.ts +38 -0
  283. package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
  284. package/src/domains/eval/metrics/token-stream.ts +201 -31
  285. package/src/domains/eval/metrics/tracked.ts +40 -4
  286. package/src/domains/eval/runners/clio-run.ts +5 -2
  287. package/src/domains/eval/schema/suite.ts +28 -0
  288. package/src/domains/eval/schema/verdict.ts +2 -2
  289. package/src/domains/eval/suites/resolve.ts +13 -1
  290. package/src/domains/eval/suites/run.ts +24 -3
  291. package/src/domains/interop/registry.ts +6 -2
  292. package/src/domains/interop/types.ts +4 -0
  293. package/src/domains/lifecycle/migrations/index.ts +4 -0
  294. package/src/domains/memory/task-memory-policy.ts +70 -26
  295. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  296. package/src/domains/middleware/index.ts +0 -1
  297. package/src/domains/middleware/marketplace-offer.ts +3 -35
  298. package/src/domains/middleware/memory-intervention.ts +127 -32
  299. package/src/domains/middleware/memory-step-endpoint.ts +3 -2
  300. package/src/domains/middleware/skills-reminder.ts +31 -2
  301. package/src/domains/observability/compaction-usage.ts +118 -0
  302. package/src/domains/observability/cost.ts +1 -1
  303. package/src/domains/observability/extension.ts +6 -1
  304. package/src/domains/observability/out-of-turn-usage.ts +52 -21
  305. package/src/domains/providers/contract.ts +4 -1
  306. package/src/domains/providers/extension.ts +40 -9
  307. package/src/domains/providers/model-capabilities.ts +9 -0
  308. package/src/domains/providers/model-discovery.ts +2 -0
  309. package/src/domains/providers/model-runtime-capabilities.ts +15 -5
  310. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +32 -12
  311. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
  312. package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
  313. package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
  314. package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
  315. package/src/domains/providers/support.ts +11 -5
  316. package/src/domains/providers/target-model-cache.ts +25 -2
  317. package/src/domains/providers/types/capability-flags.ts +2 -0
  318. package/src/domains/providers/types/runtime-descriptor.ts +20 -1
  319. package/src/domains/providers/types/target-descriptor.ts +19 -0
  320. package/src/domains/resources/index.ts +3 -0
  321. package/src/domains/resources/skills/install.ts +72 -7
  322. package/src/domains/resources/skills/loader.ts +7 -0
  323. package/src/domains/resources/skills/marketplace.ts +63 -11
  324. package/src/domains/safety/autonomy.ts +15 -0
  325. package/src/domains/safety/index.ts +1 -0
  326. package/src/domains/safety/path-policy.ts +1 -1
  327. package/src/domains/safety/policy-engine.ts +34 -11
  328. package/src/domains/safety/protected-artifacts.ts +191 -88
  329. package/src/domains/safety/run-effects.ts +2 -22
  330. package/src/domains/safety/skill-authority.ts +55 -0
  331. package/src/domains/session/compaction/compact.ts +72 -22
  332. package/src/domains/session/entries.ts +6 -0
  333. package/src/domains/session/usage.ts +3 -3
  334. package/src/engine/agent.ts +13 -3
  335. package/src/engine/ai.ts +26 -8
  336. package/src/engine/antigravity/subprocess-runtime.ts +386 -120
  337. package/src/engine/api-registry.ts +3 -0
  338. package/src/engine/apis/openai-completions.ts +117 -14
  339. package/src/engine/external-subprocess.ts +114 -6
  340. package/src/entry/background-model-metadata.ts +18 -0
  341. package/src/entry/compaction-prompt.ts +57 -0
  342. package/src/entry/orchestrator.ts +405 -216
  343. package/src/entry/task-memory-lifecycle.ts +35 -0
  344. package/src/interactive/chat-loop-messages.ts +13 -4
  345. package/src/interactive/chat-loop.ts +65 -2
  346. package/src/interactive/chat-renderer.ts +1 -0
  347. package/src/interactive/cost-overlay.ts +26 -2
  348. package/src/interactive/interactive-slash-runtime.ts +2 -1
  349. package/src/interactive/renderers/worker-entry.ts +32 -0
  350. package/src/interactive/slash-commands.ts +24 -6
  351. package/src/interactive/theme/labels.ts +19 -13
  352. package/src/interactive/turn-context.ts +9 -5
  353. package/src/interactive/turn-recovery.ts +8 -0
  354. package/src/interactive/turn-runtime.ts +27 -11
  355. package/src/interactive/turn-state.ts +7 -0
  356. package/src/interactive/worker-receipts.ts +1 -0
  357. package/src/interactive/worker-stream.ts +6 -1
  358. package/src/tools/context/index.ts +30 -9
  359. package/src/tools/dispatch-arguments.ts +1 -0
  360. package/src/tools/dispatch-event-text.ts +10 -0
  361. package/src/tools/dispatch-plan.ts +1 -0
  362. package/src/tools/dispatch-runner.ts +12 -0
  363. package/src/tools/registry.ts +11 -5
  364. package/src/tools/worker-evidence.ts +3 -1
  365. package/src/worker/spec-contract.ts +4 -0
  366. package/dist/chunk-2Z2IKEXI.js +0 -1554
  367. package/dist/reset-OAQP3W4O.js +0 -230
  368. package/dist/uninstall-N34PCTGJ.js +0 -331
  369. package/dist/upgrade-PXK3S2YM.js +0 -325
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  name: worktree-create
3
- description: Stands up one or more git worktrees for parallel work, each on its own branch with gitignored config copied in, dependencies installed, and a verified health check. Not for merging finished worktrees; use worktree-merge.
3
+ description: Stands up one or more git worktrees for parallel work, each on its own branch with gitignored config copied in, dependencies installed, and a verified health check. Not for merging finished worktrees; use worktree-merge. Not for closeout; use branch-closeout.
4
4
  triggers:
5
5
  - create a git worktree
6
6
  - set up worktrees for these branches
7
7
  - spin up parallel branches
8
8
  - prepare parallel worktrees
9
- version: 0.3.0
9
+ version: 0.6.0
10
10
  license: Apache-2.0
11
+ compatibility: git >=2.30.0, POSIX-compatible shell
11
12
  allowed-tools:
12
13
  - read
13
14
  - grep
@@ -16,8 +17,8 @@ allowed-tools:
16
17
  - git
17
18
  - bash
18
19
  - write
20
+ - tasks
19
21
  - ask_user
20
- - artifact
21
22
  clio-coder:
22
23
  registry-id: iowarp/clio-coder
23
24
  source-url: https://github.com/iowarp/clio-coder/tree/main/skills/git/worktree-create
@@ -33,65 +34,94 @@ clio-coder:
33
34
 
34
35
  # Worktree Create
35
36
 
36
- Stand up isolated git worktrees, each on its own branch, genuinely ready to
37
- develop and validate in: config copied, dependencies installed, health
38
- check passed. Everything is detected from this repo; nothing about the
39
- stack is assumed.
37
+ Stand up isolated git worktrees, each on its own branch, ready for immediate development and validation: gitignored configuration copied, dependencies installed, and health checks verified. Everything is detected from the repository; nothing about the tech stack is assumed.
40
38
 
41
- ## Step 1 Branch list
39
+ See [worktree setup](references/worktree-setup.md) for package manager detection, configuration files, and health checks.
42
40
 
43
- The user's arguments are the branch list. No branches given → ask which to
44
- create (or offer to derive them from the tickets in play); never guess.
41
+ ## Arguments
45
42
 
46
- ## Step 2 Detect the project setup ONCE
43
+ Arguments are passed in the user invocation message. Interpret them structurally from the prompt:
47
44
 
48
- Read `references/worktree-setup.md` — the checklist of what a fresh worktree
49
- needs and how to detect each piece. From this repo, determine one time:
45
+ ```text
46
+ /skill:worktree-create [--base ref] [--root path] [--setup auto|none] <branch...>
47
+ ```
50
48
 
51
- - install command(s), from manifests and lockfiles (one per package in a
52
- monorepo);
53
- - gitignored env/config files to copy (or the repo's `.worktreeinclude` as
54
- the source of truth);
55
- - the health-check command, preferring exactly what CI runs (read
56
- `.github/workflows/*`, Makefile, manifest scripts) — a health endpoint if
57
- the app has one, else build/typecheck/test smoke;
58
- - a base port, only if the health check starts a service; worktree N gets
59
- `base + N` so parallel servers never collide.
49
+ ### Examples
50
+ - `/skill:worktree-create feat/user-profiles feat/billing-portal`
51
+ - `/skill:worktree-create --base main --root .worktrees feat/api-v2`
52
+ - `/skill:worktree-create --setup none chore/refactor-docs`
60
53
 
61
- Worktree root is `worktrees/<branch>`, gitignored. If `worktrees/` is not
62
- ignored, add it to `.gitignore` first.
54
+ ### Positional Arguments
55
+ - `<branch...>`: One or more branch names to create and check out.
56
+ - Required. If omitted, prompt the user for the list of branches; never guess or invent branch names.
57
+ - Validation: Each branch must be a valid ref name (`git check-ref-format --branch <branch>`).
63
58
 
64
- ## Step 3 — Set up each worktree sequentially
59
+ ### Options
60
+ - `--base <ref>`: Base git reference to branch from.
61
+ - Default: detected canonical default branch (e.g. `main` or `master`) for clean branches, or `HEAD` if the user requested carrying current commits.
62
+ - Validation: Must resolve via `git rev-parse --verify <ref>`.
63
+ - `--root <path>`: Directory path under which worktrees will be created.
64
+ - Default: `worktrees/` relative to the repository root.
65
+ - Path safety: Must remain within the repository boundary; reject paths containing directory traversal (`..`).
66
+ - `--setup <auto|none>`: Setup behavior for newly created worktrees.
67
+ - `auto` (default): Detects and copies gitignored config, installs dependencies, runs codegen/build if needed, and executes health checks.
68
+ - `none`: Checks out the worktree only without copying files or executing commands.
65
69
 
66
- For each branch, in order:
70
+ ### Unknown Arguments and Path Validation
71
+ - Unknown flags must be rejected with an error.
72
+ - Ref names and filesystem paths must be validated before execution. Never interpolate untrusted user strings into shell commands without safe quoting.
67
73
 
68
- 1. `git worktree add worktrees/<branch> -b <branch>` off the intended base
69
- (default branch for clean trees; current HEAD only if the user wants
70
- in-progress work carried).
71
- 2. Copy the detected gitignored config/secrets in, verifying each with
72
- `git check-ignore <file>` before copying — a tracked file must never be
73
- duplicated.
74
- 3. Run the detected install command(s) inside the worktree.
75
- 4. Run any generate/build step the app needs to boot; skip if none.
76
- 5. Run the health check (on the assigned port when a service starts); stop
77
- any server you started afterwards.
78
- 6. Record: path · branch · deps installed · health PASS/FAIL · errors.
74
+ ## Step 1 Validate Arguments and Ignore Root
79
75
 
80
- A failed step fails that worktree; continue with the rest and report the
81
- failure. Do not mark a worktree ready that did not pass its health check.
76
+ > [!IMPORTANT]
77
+ > Execute steps directly; do not declare task boards or write artifact files. Run discrete git commands sequentially; never nest commands inside `$(...)` command substitutions or subshells.
78
+
79
+ 1. Validate branch names and `--base <ref>`.
80
+ 2. Ensure `--root <path>` is gitignored in the main repository. If not already ignored, add it to `.gitignore` and notify the user.
81
+ 3. Derive safe filesystem paths under `--root` for each branch:
82
+ - Handle slashes in branch names safely (e.g. `feat/auth` maps to safe directory `<root>/feat-auth` or `<root>/feat/auth` without escaping `<root>`).
83
+
84
+ ## Step 2 — Detect Project Setup Once
85
+
86
+ If `--setup auto` is active, detect environment requirements from the repository per [worktree setup](references/worktree-setup.md):
87
+ - **Install command**: detected from manifests and lockfiles (`package-lock.json`, `pnpm-lock.yaml`, `Cargo.lock`, `uv.lock`, `poetry.lock`, etc.).
88
+ - **Gitignored config**: candidate files (`.env*`, local config) verified with `git check-ignore <file>`. Never copy tracked files. If `.worktreeinclude` exists, use it as the source of truth.
89
+ - **Health-check command**: prefer existing CI commands (`.github/workflows/*`), Makefile targets, or manifest scripts.
90
+ - **Base port**: assign unique ports (`base_port + index`) if health checks start network daemons.
91
+
92
+ ## Step 3 — Stand Up Each Worktree Sequentially
93
+
94
+ For each `<branch>` in order:
95
+ 1. Create the worktree:
96
+ ```bash
97
+ git worktree add <safe-worktree-path> -b <branch> <base>
98
+ ```
99
+ 2. If `--setup auto`:
100
+ - Copy verified gitignored config files into `<safe-worktree-path>`.
101
+ - Run detected package manager install command inside the worktree directory.
102
+ - Run any necessary build/codegen steps.
103
+ - Execute the detected health check. Stop any background servers started during verification.
104
+ 3. Record status for the worktree: path, branch, dependencies installed, health status (PASS/FAIL), and any errors.
105
+
106
+ A failure in one worktree does not abort setup for subsequent branches; continue setup and report the failure.
82
107
 
83
108
  ## Step 4 — Report
84
109
 
85
- Print the per-worktree table (path · branch · deps · health · port), a
86
- `N worktree(s) ready, M failed` line, the next step (start work in each),
87
- and the cleanup reminder: `git worktree remove worktrees/<branch>` once a
88
- branch is merged. Done when every requested branch is either ready or
89
- reported failed with its error.
110
+ Output a structured summary table:
111
+ - Branch name and filesystem path
112
+ - Dependency installation status
113
+ - Health check result (PASS/FAIL with error output if failed)
114
+ - Port assignment (if applicable)
115
+
116
+ Remind the user:
117
+ - Start development in the ready worktrees.
118
+ - When finished, merge using `worktree-merge` and close out using `branch-closeout`. Never remove worktrees via `rm -rf`; always use `git worktree remove`. In canonical-main-only repositories, maintainer worktree branches stay local.
90
119
 
91
- ## Red flags
120
+ ## Red Flags
92
121
 
93
- - Assuming npm/pytest/anything instead of detecting from the repo.
94
- - Copying a file into the worktree without `git check-ignore` proving it is
95
- untracked config.
96
- - Reporting a worktree ready with a failed or skipped health check.
97
- - Two parallel services fighting over one port.
122
+ - Assuming package managers or test runners instead of detecting them from the repository.
123
+ - Copying files into the worktree without verifying `git check-ignore`.
124
+ - Duplicating tracked files across worktrees.
125
+ - Escaping the worktree root via unsanitized branch name path traversal.
126
+ - Reporting a worktree ready when its health check failed.
127
+ - Using `rm -rf` on a registered worktree.
@@ -1,13 +1,9 @@
1
1
  # Evals — worktree-create
2
2
 
3
- Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per
4
- bullet. Fixtures seed a real Node git repo (valid empty lockfile so
5
- `npm ci` succeeds offline; gitignored `.env`; CI workflow declaring the
6
- commands). Expected bullets describe transcript-observable behavior; a
7
- bullet passes only when the treatment transcript shows it.
3
+ Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per bullet. Status: `eval-status: smoke-checked`.
8
4
 
9
- ## S1 — two worktrees on a Node repo
10
- Setup: set up worktrees for feat-a and feat-b.
5
+ ## S1 — Two worktrees on a Node repo
6
+ Setup: "Set up worktrees for feat-a and feat-b."
11
7
 
12
8
  Fixture:
13
9
  ```bash
@@ -28,17 +24,13 @@ git commit -qm "chore: seed node app"
28
24
  ```
29
25
 
30
26
  Expected:
31
- - Detects the install and health-check commands from the CI workflow and
32
- manifest (`npm ci`, `npm test`) rather than assuming them.
33
- - Creates `worktrees/feat-a` and `worktrees/feat-b`, each on its own
34
- branch (git worktree add appears for both).
35
- - Copies `.env` into the worktrees only after a `git check-ignore` (or
36
- equivalent ignore check) confirms it is untracked-by-design.
37
- - Runs the health check in each worktree and reports per-worktree
38
- PASS/FAIL.
39
-
40
- ## S2 — no branches given
41
- Setup: set up worktrees for me.
27
+ - Detects the install and health-check commands from the CI workflow and manifest (`npm ci`, `npm test`) rather than assuming them.
28
+ - Creates `worktrees/feat-a` and `worktrees/feat-b`, each on its own branch.
29
+ - Copies `.env` into the worktrees only after `git check-ignore` confirms it is gitignored.
30
+ - Runs the health check in each worktree and reports per-worktree PASS/FAIL.
31
+
32
+ ## S2 No branches given
33
+ Setup: "Set up worktrees for me."
42
34
 
43
35
  Fixture:
44
36
  ```bash
@@ -54,12 +46,10 @@ git commit -qm "chore: seed node app"
54
46
  ```
55
47
 
56
48
  Expected:
57
- - Asks which branches to create (an ask, or an explicit statement of the
58
- question where asking is unavailable); no `git worktree add` and no new
59
- branch appears in the transcript.
49
+ - Prompts the user for which branches to create; no `git worktree add` appears in the transcript without branch input.
60
50
 
61
- ## S3 — health check fails in one worktree
62
- Setup: set up worktrees for feat-ok and feat-broken.
51
+ ## S3 — Health check fails in one worktree
52
+ Setup: "Set up worktrees for feat-ok and feat-broken."
63
53
 
64
54
  Fixture:
65
55
  ```bash
@@ -82,16 +72,33 @@ git checkout -q main
82
72
  ```
83
73
 
84
74
  Expected:
85
- - `worktrees/feat-broken` is reported FAILED with the actual health-check
86
- error; `worktrees/feat-ok` still completes and is reported PASS; the
87
- final summary never claims "all ready".
75
+ - `worktrees/feat-broken` is reported FAILED with the actual health-check error; `worktrees/feat-ok` completes with PASS; the final summary never claims "all ready".
88
76
 
89
- ## Baseline failure modes to watch for (RED)
90
- - Hardcoded package-manager or test commands.
91
- - Secrets/config missing so the app fails at boot later.
92
- - Untracked-vs-tracked confusion duplicating tracked files.
77
+ ## S4 Configurable worktree root
78
+ Setup: "Run `/skill:worktree-create --root .custom-trees feat-custom`."
79
+
80
+ Expected:
81
+ - Structurally parses `--root .custom-trees`.
82
+ - Places the worktree inside `.custom-trees/feat-custom`.
83
+ - Checks or ensures `.custom-trees` is included in `.gitignore`.
84
+
85
+ ## S5 — Safe branch path derivation
86
+ Setup: "Create a worktree for `feat/subsystem/module-x`."
93
87
 
94
- ## Smoke record (2026-08-13)
88
+ Expected:
89
+ - Validates ref format via `git check-ref-format --branch feat/subsystem/module-x`.
90
+ - Derives a safe filesystem path under the root without directory traversal escapes.
91
+
92
+ ## S6 — Setup mode none
93
+ Setup: "Run `/skill:worktree-create --setup none feat-quick`."
95
94
 
96
- One representative scenario via `clio-coder skills eval` against Nemo-3.5-Lightning
97
- (30B local, llamacpp on mini), full-auto sandbox. PASS. Commands detected from CI, worktrees created, check-ignore before .env copy, per-worktree health checks. Judge truncation caused the harness exit 1.
95
+ Expected:
96
+ - Creates the worktree on branch `feat-quick`.
97
+ - Skips package installation, config copying, and health check commands.
98
+ - Reports the worktree ready with setup marked as skipped/none.
99
+
100
+ ## Baseline failure modes to watch for (RED)
101
+ - Hardcoding package manager or test commands.
102
+ - Duplicating tracked files across checkouts.
103
+ - Copying secrets without `git check-ignore` verification.
104
+ - Allowing path traversal outside the designated worktree root.
@@ -1,66 +1,62 @@
1
- # Worktree Setup — the general checklist
2
-
3
- A git worktree shares the repository's object store and **tracked** files, but is otherwise a *fresh checkout*. It
4
- is missing everything git does not track and everything that is machine-local state. To be genuinely ready to
5
- develop, run, and validate in, a worktree needs the items below. The list is **project-agnostic** detect the
6
- specifics from the repo (see *Detecting the specifics*), never assume a stack.
7
-
8
- ## What a fresh worktree needs
9
-
10
- 1. **A branch off the right base.** Create the worktree on a new branch from the intended base — usually the
11
- repo's default branch (`origin/HEAD`) for a clean tree matching the remote, or the current `HEAD` to carry
12
- in-progress work. Put it under a gitignored root (`worktrees/<branch>`) so it never shows as untracked in the
13
- main checkout.
14
-
15
- 2. **Gitignored config & secrets — the commonly-missed layer.** A fresh checkout has NONE of the untracked files
16
- the app reads at runtime: `.env`, `.env.local`, `.env.<stage>`, credential/service-account JSON, `*.pem` and
17
- other keys, `.npmrc` / `.pypirc`, local settings (`.claude/settings.local.json`, `.clio-coder/` state), and anything similar. Copy
18
- these from the main working tree into the worktree. Confirm each is actually ignored (`git check-ignore <f>`)
19
- so tracked files are never duplicated. If the repo ships a `.worktreeinclude`, use that list as the source of
20
- truth for what to copy.
21
-
22
- 3. **Dependencies.** Install with the project's own package manager, detected from the manifests/lockfiles
23
- present. A monorepo needs an install per package (e.g. a backend and a frontend). Install *into* the worktree
24
- so its environment is isolated from the main checkout.
25
-
26
- 4. **Language runtime & an isolated environment.** Use the runtime version the project pins (`.python-version`,
27
- `.nvmrc`, `.tool-versions`, the `go`/`node` field in the manifest). Create the virtualenv / `node_modules`
28
- *inside* the worktree never share the main checkout's — so versions can diverge per branch.
29
-
30
- 5. **Generated or downloaded artifacts install won't produce.** If the app needs codegen (protobuf, GraphQL, ORM
31
- clients), compiled assets, or downloaded models/caches to boot, run the project's generate/build step. Skip if
32
- there is none.
33
-
34
- 6. **Isolation for concurrent runs.** Only if you will actually *run* services in several worktrees at once: give
35
- each worktree a distinct **port** per long-running service so they don't collide, and where the app writes to a
36
- shared local database, a separate **database or schema** (or a disposable containerized DB) per worktree. If
37
- you are only building and testing, not serving, skip this.
38
-
39
- 7. **Verification — a detected health check.** Prove the worktree works before handing it off. Use the cheapest
40
- meaningful check the project supports, in order: start the app and hit its health endpoint if it exposes one →
41
- else a fast build / typecheck / test-collection smoke → else at minimum confirm dependencies resolved and the
42
- app imports/builds. Detect the command; do not assume one.
43
-
44
- 8. **Registration & later cleanup.** The worktree is now tracked (`git worktree list`). Know it exists so it can be
45
- removed (`git worktree remove <path>`) once its branch is merged, so stale worktrees don't pile up.
46
-
47
- ## Detecting the specifics (per repo, not assumed)
48
-
49
- - **Install command** from the lockfile/manifest present: `uv.lock`/`pyproject.toml` `uv sync`; `poetry.lock`
50
- → `poetry install`; `requirements.txt` → `pip install -r requirements.txt`; `package-lock.json` → `npm ci`;
51
- `pnpm-lock.yaml` → `pnpm install`; `yarn.lock` `yarn`; `bun.lockb` → `bun install`; `Cargo.toml` →
52
- `cargo build`; `go.mod` → `go mod download`; `Gemfile` → `bundle install`; `composer.json` → `composer install`.
53
- Several present monorepo; install each in its own package dir.
54
- - **Env/config files to copy** intersect the repo's ignored, untracked files with common secret/config patterns:
55
- `git ls-files --others --ignored --exclude-standard` filtered to `.env*`, `*.local`, key/credential files. Or
56
- read `.worktreeinclude` if present. Check subdirectories too (e.g. `backend/.env`, `app/.env`).
57
- - **Run command + port** — check the README, the manifest's scripts (`package.json` `scripts`, `pyproject` entry
58
- points), a `Procfile`, `docker-compose.yml`, or a `Makefile`; read a `PORT` / `*_PORT` from env or config.
59
- - **Health endpoint** grep the code/README for a health route (`/health`, `/api/health`, `/healthz`, `/ping`) or
60
- a `healthcheck` in `docker-compose.yml`. None fall back to the build/test smoke.
61
- - **Validation commands** prefer **what CI already runs**: read `.github/workflows/*`, a `Makefile`, or the
62
- manifest's test/lint scripts and reuse those exact commands (test runner, type checker, linter). CI is the
63
- project's own source of truth for "what proves this code works" — don't invent `pytest`/`mypy` if the repo uses
64
- something else.
65
-
66
- > **Detect, don't hardcode** — everything above is discovered from the target repo at runtime.
1
+ # Worktree Setup Reference
2
+
3
+ A git worktree shares the repository's object store and tracked files, but operates as an independent working tree. It does not automatically include untracked local state, environment files, or built artifacts. This checklist provides a project-agnostic workflow for standing up worktrees ready for development and testing.
4
+
5
+ ## 1. Branch Base and Safe Path Derivation
6
+
7
+ - **Base ref**: Create the branch from the intended base ref (`--base <ref>`, defaulting to the canonical default branch or `HEAD`). Validate the ref with `git rev-parse --verify <ref>`.
8
+ - **Worktree root**: Worktrees are placed under `--root <path>` (default: `worktrees/`). Ensure the root path is included in `.gitignore` so it does not appear as untracked in the primary checkout.
9
+ - **Safe filesystem paths**: Branch names may contain slashes (e.g., `feat/auth/login`) or characters that require sanitization on disk. Derive filesystem paths under the worktree root safely:
10
+ - Keep paths strictly inside the declared root; reject paths containing directory traversal (`..`).
11
+ - Map branch names to safe relative paths or subdirectories (e.g. `<root>/feat-auth-login` or `<root>/feat/auth/login`).
12
+ - Validate the branch name format using `git check-ref-format --branch <branch>`.
13
+
14
+ ## 2. Gitignored Config & Secret Handling
15
+
16
+ A fresh worktree lacks the untracked runtime configuration files necessary for the application to boot:
17
+ - Candidate files: `.env`, `.env.local`, `.env.<stage>`, local credentials, certificates (`*.pem`), or local tool configs.
18
+ - **Rule**: Never copy tracked files.
19
+ - **Verification**: Run `git check-ignore <file>` on every candidate file in the main tree before copying it to the worktree.
20
+ - If the repository provides `.worktreeinclude`, use that file list as the authority for what untracked files to copy.
21
+
22
+ ## 3. Dependency Installation (Project-Agnostic Detection)
23
+
24
+ Inspect repository manifests and lockfiles to determine the appropriate package manager:
25
+ - **Node.js**:
26
+ - `package-lock.json` -> `npm ci`
27
+ - `pnpm-lock.yaml` -> `pnpm install --frozen-lockfile`
28
+ - `yarn.lock` -> `yarn install --frozen-lockfile`
29
+ - `bun.lockb` / `bun.lock` -> `bun install --frozen-lockfile`
30
+ - **Python**:
31
+ - `uv.lock` -> `uv sync`
32
+ - `poetry.lock` -> `poetry install`
33
+ - `Pipfile.lock` -> `pipenv install`
34
+ - `requirements.txt` -> `pip install -r requirements.txt`
35
+ - **Rust**:
36
+ - `Cargo.lock` / `Cargo.toml` -> `cargo build`
37
+ - **Go**:
38
+ - `go.mod` / `go.sum` -> `go mod download`
39
+ - **Ruby**:
40
+ - `Gemfile.lock` -> `bundle install`
41
+ - **PHP**:
42
+ - `composer.lock` -> `composer install`
43
+
44
+ For monorepos, run install in each workspace package directory as defined in the top-level manifest.
45
+
46
+ ## 4. Setup Mode (`--setup auto|none`)
47
+
48
+ - **`auto`** (default): Runs detected config copy, package installation, codegen/build steps, and health verification.
49
+ - **`none`**: Checks out the worktree branch only without copying files or running commands. Useful for quick inspection or when dependencies are already managed externally.
50
+
51
+ ## 5. Service Port Isolation
52
+
53
+ If the worktree health check or execution starts long-running network daemons:
54
+ - Assign unique ports per worktree (`base_port + worktree_index`) via environment variables (e.g. `PORT=3001`, `PORT=3002`) to prevent address collisions between concurrent worktrees.
55
+
56
+ ## 6. Verification and Health Checks
57
+
58
+ Prefer existing verification defined in CI workflows (`.github/workflows/*`), Makefile targets, or package scripts:
59
+ 1. Hit an application health check endpoint if defined (e.g. `/healthz`).
60
+ 2. Run the fast test/build smoke suite (e.g. `npm test`, `cargo test`, `pytest`).
61
+ 3. Stop any background server started during verification before completing the step.
62
+ 4. Report health status as PASS or FAIL per worktree. Failures must name the exact command and error.
@@ -1,21 +1,22 @@
1
1
  ---
2
2
  name: worktree-merge
3
- description: Integrates finished worktree branches through one throwaway integration branch, testing after each merge and running the full suite before the main line moves, with exact rollback on failure. Not for creating worktrees; use worktree-create.
3
+ description: Integrates finished worktree branches through one throwaway integration branch, testing after each merge and running the full suite before the main line moves, with exact rollback on failure. Not for creating worktrees; use worktree-create. Not for closeout; use branch-closeout.
4
4
  triggers:
5
5
  - merge my worktrees
6
6
  - integrate these worktree branches
7
7
  - combine parallel branches
8
8
  - land finished worktrees
9
- version: 0.3.0
9
+ version: 0.6.0
10
10
  license: Apache-2.0
11
+ compatibility: git >=2.30.0, POSIX-compatible shell
11
12
  allowed-tools:
12
13
  - read
13
14
  - grep
14
15
  - ls
15
16
  - git
16
17
  - bash
18
+ - tasks
17
19
  - ask_user
18
- - artifact
19
20
  clio-coder:
20
21
  registry-id: iowarp/clio-coder
21
22
  source-url: https://github.com/iowarp/clio-coder/tree/main/skills/git/worktree-merge
@@ -31,70 +32,116 @@ clio-coder:
31
32
 
32
33
  # Worktree Merge
33
34
 
34
- Integrate finished branches through a disposable integration branch. The
35
- original branch moves only after every merge lands and the full suite
36
- passes; nothing reaches it red.
37
-
38
- ## Step 1 — Inputs and preconditions
39
-
40
- - Fewer than two branches named ask which to integrate; never guess.
41
- - Confirm you are at the repository root, not inside `worktrees/`
42
- (`pwd` containing `/worktrees/` is an abort).
43
- - Store the current branch as `<original>`.
44
- - `git rev-parse --verify <branch>` for every branch in the list; any
45
- missing branch aborts before anything is created.
46
- - Uncommitted changes on `<original>` → stop: commit or stash first.
47
-
48
- ## Step 2 Detect the validation commands ONCE
49
-
50
- Reuse exactly what CI runs: read `.github/workflows/*`, the Makefile, or
51
- the manifest's scripts for the test, type-check, and lint commands. Never
52
- substitute a generic runner for the project's own. Identify the fast test
53
- command (per-merge) and the full suite (final gate).
54
-
55
- ## Step 3 — Integration branch
56
-
57
- Create one throwaway branch off `<original>`, named for the set
58
- (`integration-<first-branch>`, suffixed if needed, filesystem-safe). All
59
- merging happens here.
60
-
61
- ## Step 4 Merge each branch in order
62
-
63
- Per branch: `git merge --no-ff <branch>`, then run the fast test command,
64
- so a break is localized to the branch that caused it.
65
-
66
- - **Conflict** stop. Name the conflicting branch and files, give the
67
- resolution steps (resolve → `git add` → `git commit` → re-run with the
68
- same list), and do not attempt automatic resolution.
69
- - **Test failure** stop. Report which tests failed and the rollback:
70
- `git checkout <original> && git branch -D <integration>`.
71
-
72
- ## Step 5 — Full gate, then land
73
-
74
- All branches merged run the full detected suite (tests, type checks,
75
- lint). Any failure: report and roll back as above. All green:
76
- `git checkout <original> && git merge --no-ff <integration>`, then delete
77
- the integration branch.
78
-
79
- ## Step 6Offer cleanup
80
-
81
- Ask (via `ask_user` when active): remove the merged worktrees and delete
82
- their feature branches, or keep them? On yes, per branch:
83
- `git worktree remove worktrees/<branch> && git branch -d <branch>`. Never
84
- clean up without the answer.
35
+ Integrate finished branches through a disposable integration branch. The target branch moves only after every branch integrates cleanly and the project's full validation suite passes; nothing reaches the main line broken.
36
+
37
+ See [merge strategies](references/merge-strategies.md) for strategy mechanics (`merge`, `squash`, `ff`), rollback details, and protected base guards.
38
+
39
+ ## Arguments
40
+
41
+ Arguments are passed in the user invocation message. Interpret them structurally from the prompt:
42
+
43
+ ```text
44
+ /skill:worktree-merge [--into branch] [--strategy merge|squash|ff] [--cleanup ask|keep] <branch...>
45
+ ```
46
+
47
+ ### Examples
48
+ - `/skill:worktree-merge feat-a feat-b`
49
+ - `/skill:worktree-merge --into main --strategy squash feat/payments feat/invoicing`
50
+ - `/skill:worktree-merge --strategy ff --cleanup keep feat/docs-update`
51
+
52
+ ### Positional Arguments
53
+ - `<branch...>`: Two or more branch names to integrate in order (or at least one when integrating into a distinct target branch).
54
+ - Required. If fewer than the necessary branches are specified, prompt the user for the branch list; never guess.
55
+ - Validation: Verify each ref exists via `git rev-parse --verify <branch>`.
56
+
57
+ ### Options
58
+ - `--into <branch>`: Target base branch receiving the merges.
59
+ - Default: the current branch at invocation time (`<original>`).
60
+ - Validation: Must be a verified local branch.
61
+ - `--strategy <merge|squash|ff>`: Git integration strategy.
62
+ - `merge` (default): Uses `git merge --no-ff <branch>` to preserve commit topology.
63
+ - `squash`: Uses `git merge --squash <branch>`, followed by an atomic conventional commit.
64
+ - `ff`: Uses `git merge --ff-only <branch>`. Fails if the branch has diverged.
65
+ - `--cleanup <ask|keep>`: Post-integration scaffolding cleanup policy.
66
+ - `ask` (default): Prompt the user via `ask_user` before removing worktrees or deleting branches.
67
+ - `keep`: Retain all source worktrees and branches after integration.
68
+
69
+ ### Unknown Arguments and Ref Validation
70
+ - Unknown flags must be rejected with an error. Validate all branch names before creating integration branches. Never interpolate unvalidated user input into shell strings without safe quoting.
71
+
72
+ ## Step 1 — Preconditions and Base Guards
73
+
74
+ 1. Verify working directory is the repository root (fail if currently inside a worktree directory).
75
+ 2. Record current branch as `<into>` (or use `--into <branch>`).
76
+ 3. Verify no uncommitted changes exist on `<into>`. If dirty, STOP: commit or stash first.
77
+ 4. **Base Guard**: Check if `<into>` is a protected or canonical default branch. In canonical-main-only repositories (such as `CONTRIBUTING.md`), maintainer integration is strictly local; never push integration or topic branches to the canonical remote.
78
+ 5. Verify every branch in `<branch...>` with `git rev-parse --verify <branch>`. Any missing branch aborts the run before anything is created.
79
+
80
+ ## Step 2Detect Validation Commands Once
81
+
82
+ Detect the project's test and validation suite per repository manifests and CI workflows (`.github/workflows/*`, Makefile, npm scripts):
83
+ - **Fast test command**: run immediately after each branch merge to localize failures.
84
+ - **Full validation suite**: run after all branches have merged (unit tests, typecheck, lint).
85
+
86
+ ## Step 3 — Stand Up Disposable Integration Branch
87
+
88
+ Create a disposable integration branch off `<into>`:
89
+ ```bash
90
+ git checkout -b integration-<first-branch> <into>
91
+ ```
92
+ All integration and intermediate test runs occur exclusively on this branch.
93
+
94
+ ## Step 4 — Merge Each Branch in Order
95
+
96
+ For each branch in `<branch...>`:
97
+ 1. Apply the specified `--strategy`:
98
+ - **`merge`**: `git merge --no-ff <branch>`
99
+ - **`squash`**: `git merge --squash <branch> && git commit -m "feat: squash <branch>"`
100
+ - **`ff`**: `git merge --ff-only <branch>`
101
+ 2. **Conflict**: STOP immediately. Name conflicting branch and files, report manual resolution steps, and do not attempt automatic resolution.
102
+ 3. **Run fast test command**:
103
+ - If tests fail: STOP immediately. Localize the failure to this branch and execute exact rollback:
104
+ ```bash
105
+ git checkout <into> && git branch -D integration-<first-branch>
106
+ ```
107
+ - Report the breaking branch, test failures, and that `<into>` remains untouched.
108
+
109
+ ## Step 5 — Full Gate, Land, and Rollback Safety
110
+
111
+ 1. Once all branches are merged, run the full validation suite (tests, typecheck, lint).
112
+ 2. If any check fails: report failures and execute rollback as in Step 4.
113
+ 3. If all checks pass:
114
+ - Land integration branch into `<into>`:
115
+ ```bash
116
+ git checkout <into>
117
+ git merge --no-ff integration-<first-branch>
118
+ ```
119
+ - Delete the disposable integration branch: `git branch -d integration-<first-branch>`.
120
+
121
+ ## Step 6 — Cleanup Scaffolding
122
+
123
+ If `--cleanup ask` is active, prompt the user via `ask_user` whether to clean up the merged branches and worktrees:
124
+ - On approval, delegate to or execute `branch-closeout`:
125
+ - Locate registered worktree paths via `git worktree list --porcelain`.
126
+ - Inspect tracked and untracked worktree state.
127
+ - Remove worktrees with `git worktree remove` (never `rm -rf`).
128
+ - Delete local source branches with `git branch -d`.
129
+ - Audit and report surviving worktrees, local branches, and remote heads.
130
+ - If `--cleanup keep` is active, leave worktrees and branches intact.
85
131
 
86
132
  ## Step 7 — Report
87
133
 
88
- Success: integration branch used, each branch with its post-merge test
89
- result, the full-gate result, the merge into `<original>`, cleanup status
90
- (with manual commands if kept). Failure: the exact step and branch, current
91
- state, rollback commands, and how to continue after fixing. Done when one
92
- of those two reports is delivered and the repo is on `<original>`.
134
+ Deliver a comprehensive completion report:
135
+ - Strategy used (`merge`, `squash`, or `ff`)
136
+ - Per-branch fast test outcomes
137
+ - Full gate results
138
+ - Merge commit SHA on `<into>`
139
+ - Cleanup status and inventory of remaining local refs
93
140
 
94
- ## Red flags
141
+ ## Red Flags
95
142
 
96
- - Merging directly into `<original>` "to save a step".
97
- - Running a guessed test command instead of the repo's own.
98
- - Auto-resolving conflicts.
99
- - Deleting worktrees or branches nobody approved.
100
- - A red full gate absorbed into "mostly passing".
143
+ - Merging directly into `<into>` without a disposable integration branch.
144
+ - Auto-resolving conflicts without user intervention.
145
+ - Skipping the fast test between merges, losing failure localization.
146
+ - Deleting worktrees or branches when `--cleanup keep` was passed or without confirmation.
147
+ - Pushing integration or topic branches to a canonical-main-only remote.