@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.
- package/CHANGELOG.md +35 -0
- package/CONTRIBUTING.md +86 -19
- package/README.md +35 -6
- package/dist/{acp-TMDQZDIG.js → acp-H2NGRPWO.js} +11 -11
- package/dist/{agents-5N5NG3XG.js → agents-TL5LLUQP.js} +54 -53
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-Z5CCBXKQ.js → auth-E5SW4HMS.js} +19 -16
- package/dist/{builtins-K6TNDT24.js → builtins-IA7V7FUC.js} +9 -4
- package/dist/{chunk-ZW4HH5JJ.js → chunk-2APPQIER.js} +6 -6
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-UBRFI4HS.js → chunk-2UG5F4C5.js} +127 -47
- package/dist/{chunk-UH632ZYL.js → chunk-2UH2KFUP.js} +2 -2
- package/dist/{chunk-3F7VUY77.js → chunk-2VIKGWFZ.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-2X4RYJTJ.js → chunk-4UVU7BJ5.js} +2 -2
- package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-5KW52TEP.js → chunk-54CBCGIR.js} +5 -5
- package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-LJID3DYZ.js → chunk-64I3JVYM.js} +2 -2
- package/dist/{chunk-4JDLP6ZS.js → chunk-6PTFB5VS.js} +7 -7
- package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
- package/dist/{chunk-HLAFFSEK.js → chunk-7DRAWPTZ.js} +2 -2
- package/dist/chunk-7E7I3WLS.js +3762 -0
- package/dist/{chunk-YJISEZKC.js → chunk-7ZYNNDKC.js} +6 -6
- package/dist/{chunk-I66ZTYNP.js → chunk-AF4YM7Z4.js} +236 -101
- package/dist/{chunk-2HFQNRV3.js → chunk-AX2THNSA.js} +12 -12
- package/dist/{chunk-PGF63K6I.js → chunk-B4OAX3SI.js} +65 -3
- package/dist/{chunk-W6NIE6OW.js → chunk-B4VEBZKF.js} +3 -3
- package/dist/{chunk-JBCS7CRR.js → chunk-BEPZRGGU.js} +10 -10
- package/dist/{chunk-XGDPUNND.js → chunk-CE5AX47J.js} +2 -2
- package/dist/{chunk-I64IFBLB.js → chunk-DWUOQKRU.js} +17 -10
- package/dist/{chunk-DZAW46HP.js → chunk-E3TPLWFX.js} +3 -3
- package/dist/{chunk-HIICAHCJ.js → chunk-EKCHAPYA.js} +2 -2
- package/dist/{chunk-XE3PCIXH.js → chunk-F5JHEYZM.js} +7 -7
- package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
- package/dist/{chunk-ZNT2M6TG.js → chunk-G76U63X4.js} +17 -17
- package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
- package/dist/{chunk-2NHR3NAY.js → chunk-GI7YYQ3F.js} +40 -34
- package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/{chunk-W4YEMFBX.js → chunk-HEQY7ZFI.js} +2 -2
- package/dist/{chunk-IKOZFYBN.js → chunk-I7ZPNEJM.js} +145 -102
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
- package/dist/chunk-IJNZMHLA.js +101 -0
- package/dist/{chunk-JWJGP5DQ.js → chunk-INY6HTFL.js} +7 -7
- package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
- package/dist/{chunk-B74PXLU7.js → chunk-IWT4SF4R.js} +3 -3
- package/dist/{chunk-B7HM5Z7T.js → chunk-JDAY6FIL.js} +5 -5
- package/dist/{chunk-PJX3WQUQ.js → chunk-JEQ3XTHC.js} +2 -2
- package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
- package/dist/{chunk-X7IARSHT.js → chunk-JKKCYP3C.js} +9 -9
- package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
- package/dist/{chunk-SSEYRH53.js → chunk-KK4JZPBQ.js} +19 -140
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-Q4XWMHX6.js → chunk-L47TF46W.js} +2 -2
- package/dist/{chunk-O3YUNJZ2.js → chunk-LDJG7DW3.js} +81 -24
- package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
- package/dist/{chunk-F2I26BDK.js → chunk-MUW2BDDH.js} +4 -4
- package/dist/{chunk-HKMD33FO.js → chunk-MWUZBSAQ.js} +79 -76
- package/dist/{chunk-QQLGQY2A.js → chunk-N2Z7HLVY.js} +20 -20
- package/dist/{chunk-DZEK6CJN.js → chunk-NIQJ66N4.js} +19 -19
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
- package/dist/{chunk-TPEQIQIE.js → chunk-OML5D5V5.js} +8 -8
- package/dist/{chunk-IKSLQ4XV.js → chunk-PAJQJ7BS.js} +558 -216
- package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
- package/dist/{chunk-UH347SHR.js → chunk-QWGDJJYJ.js} +11 -11
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-CRFOIAX3.js → chunk-RRNP2ANY.js} +6 -6
- package/dist/{chunk-IDNA72AH.js → chunk-RSJ25QSL.js} +2 -2
- package/dist/chunk-SKHCAU7K.js +385 -0
- package/dist/{chunk-RLYRBIYQ.js → chunk-TM6LQDI3.js} +20 -12
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-P75RZCJW.js → chunk-UPZU6GE4.js} +3 -3
- package/dist/{chunk-MCMZMDAC.js → chunk-V2ANDPVT.js} +4 -4
- package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
- package/dist/{chunk-IMXMHHMQ.js → chunk-VW6DOEDG.js} +332 -57
- package/dist/{chunk-XOXV5GKE.js → chunk-W6RRQCPQ.js} +16 -7
- package/dist/{chunk-CYZW7JHJ.js → chunk-WBKFA554.js} +8 -8
- package/dist/{chunk-BO7Y52RY.js → chunk-WCXUNS7U.js} +7 -7
- package/dist/{chunk-ZGNYYXQ6.js → chunk-WRBAGUNF.js} +3 -3
- package/dist/{chunk-FVDGR2ZL.js → chunk-XIVNBFZS.js} +85 -30
- package/dist/{chunk-BYMNWQ7O.js → chunk-XPWWI35G.js} +299 -58
- package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
- package/dist/{chunk-AZ4WMN4W.js → chunk-Y3CBHOR6.js} +2 -2
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-54ODD65L.js → chunk-YQWYVTMC.js} +4 -4
- package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
- package/dist/{chunk-7BHIY2MW.js → chunk-ZDN3Y73Y.js} +6 -6
- package/dist/{chunk-E7GT7O5N.js → chunk-ZWPRK62N.js} +7 -4
- package/dist/cli/index.js +38 -37
- package/dist/{clio-7VB377CC.js → clio-CMMK4KRR.js} +7 -7
- package/dist/{code-nav-YVLCYA7V.js → code-nav-MDZNQS33.js} +7 -7
- package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
- package/dist/{config-4HVOS65E.js → config-SVM5P5YI.js} +76 -74
- package/dist/{configure-PIWO7B24.js → configure-LE3IK2TJ.js} +26 -24
- package/dist/{context-IYEHL3WQ.js → context-2OHRKS42.js} +66 -63
- package/dist/{context-N6ZE3LGJ.js → context-E3VC7RX5.js} +15 -11
- package/dist/{context-KQYIWPWT.js → context-VNCR7KAG.js} +60 -45
- package/dist/{context-clear-G4OGZJDS.js → context-clear-BW4O37TG.js} +61 -59
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-BWLF6LJP.js → context-working-set-VDS25HXZ.js} +17 -16
- package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-5AHT53RF.js} +85 -74
- package/dist/{doctor-LHBD36VU.js → doctor-WNNVO6FY.js} +37 -37
- package/dist/{eval-C45FYRJ6.js → eval-7G7SGAYO.js} +285 -114
- package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-6SHONYAF.js → evidence-VD6736FQ.js} +63 -62
- package/dist/{evolve-KRKMV72X.js → evolve-AL3NGVRL.js} +62 -61
- package/dist/{extensions-KPZ2UHBB.js → extensions-MOVJ32NM.js} +7 -7
- package/dist/{fleet-IVTCKDHT.js → fleet-QZHUMAGI.js} +110 -108
- package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-BAYT5FJZ.js} +10 -10
- package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-IREVMRU4.js} +7 -6
- package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-YCTT3HTI.js} +19 -18
- package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-QVJTDAVB.js} +55 -54
- package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-25QAFPK4.js} +4 -4
- package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-5O57AAJ7.js} +23 -22
- package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-CPH2W2T6.js} +56 -55
- package/dist/{fleet-view-TWHJKCN6.js → fleet-view-SWBR3VGQ.js} +55 -54
- package/dist/{init-T2QORQ3Y.js → init-J477LKZH.js} +78 -76
- package/dist/{interop-IN5I2A66.js → interop-3FCM6XLG.js} +11 -11
- package/dist/{library-LSCATDLZ.js → library-QUQEIUG6.js} +28 -27
- package/dist/{memory-HYOKAGGJ.js → memory-SGGSEP65.js} +64 -63
- package/dist/{models-2GPMFYCM.js → models-HEKUAXXK.js} +49 -43
- package/dist/{monitor-E4ASVUJH.js → monitor-HKU57TYQ.js} +61 -60
- package/dist/{orchestrator-DDMPR3PY.js → orchestrator-VDFAEFAI.js} +919 -546
- package/dist/{panes-E3RUXOW5.js → panes-DN2SSFOH.js} +3 -3
- package/dist/{panes-IXKLOKA2.js → panes-TALGNPZT.js} +8 -8
- package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
- package/dist/reset-EAJFFJVB.js +344 -0
- package/dist/{resources-OTRSN34L.js → resources-OVKSEFVE.js} +27 -20
- package/dist/{run-5DEYH5QK.js → run-7DP7ZF2J.js} +113 -109
- package/dist/{share-IHWTLO3M.js → share-WML67FT3.js} +26 -25
- package/dist/{skills-IYMXMKW4.js → skills-SG662R2K.js} +39 -31
- package/dist/{skills-eval-DROHSJAR.js → skills-eval-VVZEUU46.js} +74 -73
- package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-I2E23GET.js} +21 -20
- package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-S7MBJDQK.js} +35 -34
- package/dist/{steer-Z5DO23FJ.js → steer-2LQOMCPB.js} +3 -3
- package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
- package/dist/{targets-P2FUC4IL.js → targets-4QC3HIEW.js} +48 -45
- package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-TUHIJ6Y2.js} +2 -2
- package/dist/{tools-5B7RO6MV.js → tools-TFGJICCU.js} +8 -8
- package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
- package/dist/uninstall-5PEVOE5B.js +408 -0
- package/dist/upgrade-M4WXY6KN.js +303 -0
- package/dist/{usage-ME5MPXGX.js → usage-N7ZNVLEM.js} +147 -102
- package/dist/{verifiers-BVZ7IWOO.js → verifiers-DJTP4XX6.js} +15 -15
- package/dist/{verify-5K7ZKQFC.js → verify-RWE4PPEK.js} +9 -9
- package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-C7IQOXSP.js} +84 -82
- package/dist/{with-panes-BYOJCLAM.js → with-panes-4GCGSL7J.js} +9 -9
- package/dist/worker/entry.js +61 -60
- package/docs/architecture/artifact-placement.md +1 -0
- package/docs/architecture/artifact-versions.md +1 -1
- package/docs/architecture/context-engine.md +4 -0
- package/docs/architecture/middleware-and-components.md +1 -1
- package/docs/architecture/model-catalog.md +21 -10
- package/docs/architecture/observability.md +12 -1
- package/docs/architecture/prompt-envelope-and-tools.md +2 -0
- package/docs/architecture/provider-adapter-cookbook.md +63 -0
- package/docs/architecture/safety-model.md +15 -5
- package/docs/guide/built-in-agents.md +17 -3
- package/docs/guide/commands-and-modes.md +1 -1
- package/docs/guide/configuration-and-targets.md +97 -9
- package/docs/guide/configuration-reference.md +7 -2
- package/docs/guide/environment-variables.md +2 -0
- package/docs/guide/installation-and-lifecycle.md +37 -4
- package/docs/guide/proactive-memory.md +66 -55
- package/docs/guide/skills-marketplace.md +18 -0
- package/docs/process/development-pipeline.md +34 -1
- package/docs/process/eval-runner.md +67 -3
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +2 -2
- package/skills/README.md +7 -5
- package/skills/coding/ast-grep/SKILL.md +101 -30
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +40 -5
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +87 -28
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +80 -53
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +43 -2
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +45 -15
- package/skills/context/context-prime/evals.md +45 -0
- package/skills/git/branch-closeout/SKILL.md +132 -0
- package/skills/git/branch-closeout/evals.md +133 -0
- package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
- package/skills/git/file-ticket/SKILL.md +77 -63
- package/skills/git/file-ticket/assets/issue-template.md +22 -0
- package/skills/git/file-ticket/evals.md +31 -26
- package/skills/git/file-ticket/references/issue-discovery.md +49 -0
- package/skills/git/fix-issue/SKILL.md +87 -64
- package/skills/git/fix-issue/evals.md +35 -31
- package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
- package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
- package/skills/git/resolve-merge-conflicts/evals.md +52 -25
- package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
- package/skills/git/ship/SKILL.md +103 -67
- package/skills/git/ship/assets/pr-template.md +21 -0
- package/skills/git/ship/evals.md +44 -28
- package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
- package/skills/git/worktree-create/SKILL.md +80 -50
- package/skills/git/worktree-create/evals.md +40 -33
- package/skills/git/worktree-create/references/worktree-setup.md +62 -66
- package/skills/git/worktree-merge/SKILL.md +112 -65
- package/skills/git/worktree-merge/evals.md +42 -34
- package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +61 -12
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +130 -14
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +46 -6
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +57 -2
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +53 -2
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +58 -50
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +76 -18
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +20 -1
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +23 -1
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +26 -1
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +63 -28
- package/skills/workflow/cut-it/SKILL.md +65 -5
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +117 -27
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +86 -10
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +76 -17
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/configure-interop.ts +105 -13
- package/src/cli/configure-oauth.ts +57 -0
- package/src/cli/configure-onboarding.ts +980 -0
- package/src/cli/configure-target.ts +594 -0
- package/src/cli/configure.ts +1082 -528
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/index.ts +1 -0
- package/src/cli/lifecycle-presenter.ts +436 -0
- package/src/cli/models.ts +10 -2
- package/src/cli/modes/print.ts +5 -1
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +7 -2
- package/src/cli/select.ts +664 -0
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +3 -0
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +204 -149
- package/src/cli/usage.ts +86 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/core/config.ts +56 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +89 -2
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +1 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/dispatch/admission.ts +29 -0
- package/src/domains/dispatch/agent-candidates.ts +10 -0
- package/src/domains/dispatch/budget-envelope.ts +86 -1
- package/src/domains/dispatch/capability-match.ts +1 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/contract.ts +11 -1
- package/src/domains/dispatch/extension.ts +134 -29
- package/src/domains/dispatch/types.ts +3 -0
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
- package/src/domains/eval/metrics/token-stream.ts +201 -31
- package/src/domains/eval/metrics/tracked.ts +40 -4
- package/src/domains/eval/runners/clio-run.ts +5 -2
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/index.ts +4 -0
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +0 -1
- package/src/domains/middleware/marketplace-offer.ts +3 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/extension.ts +6 -1
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +2 -0
- package/src/domains/providers/model-runtime-capabilities.ts +15 -5
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +32 -12
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
- package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
- package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
- package/src/domains/providers/support.ts +11 -5
- package/src/domains/providers/target-model-cache.ts +25 -2
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/runtime-descriptor.ts +20 -1
- package/src/domains/providers/types/target-descriptor.ts +19 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/skills/install.ts +72 -7
- package/src/domains/resources/skills/loader.ts +7 -0
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/index.ts +1 -0
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +34 -11
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/entries.ts +6 -0
- package/src/domains/session/usage.ts +3 -3
- package/src/engine/agent.ts +13 -3
- package/src/engine/ai.ts +26 -8
- package/src/engine/antigravity/subprocess-runtime.ts +386 -120
- package/src/engine/api-registry.ts +3 -0
- package/src/engine/apis/openai-completions.ts +117 -14
- package/src/engine/external-subprocess.ts +114 -6
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/orchestrator.ts +405 -216
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/chat-loop-messages.ts +13 -4
- package/src/interactive/chat-loop.ts +65 -2
- package/src/interactive/chat-renderer.ts +1 -0
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/interactive-slash-runtime.ts +2 -1
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-commands.ts +24 -6
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +9 -5
- package/src/interactive/turn-recovery.ts +8 -0
- package/src/interactive/turn-runtime.ts +27 -11
- package/src/interactive/turn-state.ts +7 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +6 -1
- package/src/tools/context/index.ts +30 -9
- package/src/tools/dispatch-arguments.ts +1 -0
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +1 -0
- package/src/tools/dispatch-runner.ts +12 -0
- package/src/tools/registry.ts +11 -5
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/chunk-2Z2IKEXI.js +0 -1554
- package/dist/reset-OAQP3W4O.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- 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.
|
|
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,
|
|
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
|
-
|
|
39
|
+
See [worktree setup](references/worktree-setup.md) for package manager detection, configuration files, and health checks.
|
|
42
40
|
|
|
43
|
-
|
|
44
|
-
create (or offer to derive them from the tickets in play); never guess.
|
|
41
|
+
## Arguments
|
|
45
42
|
|
|
46
|
-
|
|
43
|
+
Arguments are passed in the user invocation message. Interpret them structurally from the prompt:
|
|
47
44
|
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
```text
|
|
46
|
+
/skill:worktree-create [--base ref] [--root path] [--setup auto|none] <branch...>
|
|
47
|
+
```
|
|
50
48
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
|
|
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
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
81
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
|
120
|
+
## Red Flags
|
|
92
121
|
|
|
93
|
-
- Assuming
|
|
94
|
-
- Copying
|
|
95
|
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
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 —
|
|
10
|
-
Setup:
|
|
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
|
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
-
|
|
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 —
|
|
62
|
-
Setup:
|
|
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
|
-
##
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
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
|
-
|
|
97
|
-
|
|
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
|
|
2
|
-
|
|
3
|
-
A git worktree shares the repository's object store and
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
3.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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.
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
##
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
the
|
|
78
|
-
|
|
79
|
-
## Step
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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 2 — Detect 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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
|
141
|
+
## Red Flags
|
|
95
142
|
|
|
96
|
-
- Merging directly into `<
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
- Deleting worktrees or branches
|
|
100
|
-
-
|
|
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.
|