@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
|
@@ -7,8 +7,9 @@ triggers:
|
|
|
7
7
|
- resolve the bug in issue
|
|
8
8
|
- implement this tracker issue
|
|
9
9
|
- fix a GitHub issue end to end
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.3.0
|
|
11
11
|
license: Apache-2.0
|
|
12
|
+
compatibility: git >=2.30.0, gh CLI >=2.0.0 (authenticated for issue viewing), POSIX-compatible shell
|
|
12
13
|
allowed-tools:
|
|
13
14
|
- read
|
|
14
15
|
- grep
|
|
@@ -19,9 +20,9 @@ allowed-tools:
|
|
|
19
20
|
- context
|
|
20
21
|
- code_nav
|
|
21
22
|
- dispatch
|
|
23
|
+
- tasks
|
|
22
24
|
- write
|
|
23
25
|
- edit
|
|
24
|
-
- artifact
|
|
25
26
|
clio-coder:
|
|
26
27
|
registry-id: iowarp/clio-coder
|
|
27
28
|
source-url: https://github.com/iowarp/clio-coder/tree/main/skills/git/fix-issue
|
|
@@ -36,78 +37,100 @@ clio-coder:
|
|
|
36
37
|
|
|
37
38
|
# Fix Issue
|
|
38
39
|
|
|
39
|
-
Resolve one tracker issue: diagnose only as much as the issue leaves
|
|
40
|
-
unknown, fix test-first, verify against the issue's own acceptance
|
|
41
|
-
criteria. The skill ends with an uncommitted working tree and a report;
|
|
42
|
-
committing, pushing, and PRs belong to `ship`.
|
|
40
|
+
Resolve one tracker issue: diagnose only as much as the issue leaves unknown, fix test-first, verify against the issue's own acceptance criteria. The skill ends with an uncommitted working tree and a completion report; committing, pushing, and PRs belong to `ship`.
|
|
43
41
|
|
|
44
|
-
|
|
42
|
+
See [diagnosis and RCA](references/diagnosis-and-rca.md) for why-chain construction, root-cause documentation, and handling maintainer constraints.
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
to `gh api repos/<owner>/<repo>/issues/<id>` and `.../issues/<id>/comments`.
|
|
48
|
-
Never invent issue content: if both paths fail and the task did not paste
|
|
49
|
-
the issue body, report the exact failure and stop.
|
|
44
|
+
## Arguments
|
|
50
45
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
- Issue closed → report it; continue only on explicit confirmation.
|
|
54
|
-
- A linked PR already exists → warn and confirm before continuing.
|
|
55
|
-
- A maintainer comment that constrains the solution (a binding shape,
|
|
56
|
-
a scoped design, named files or budgets) is authoritative. Work inside
|
|
57
|
-
it; when reality contradicts it, stop and report instead of improvising.
|
|
58
|
-
|
|
59
|
-
## Step 2 — Diagnose only the unknown
|
|
60
|
-
|
|
61
|
-
Read the issue's evidence first. If it already names the failing code
|
|
62
|
-
(`file:line`, a commit, an exact message), verify those anchors by reading
|
|
63
|
-
them and skip ahead — re-deriving a documented root cause burns the budget
|
|
64
|
-
the fix needs.
|
|
65
|
-
|
|
66
|
-
When the cause is genuinely unknown, close the gap with a why-chain, each
|
|
67
|
-
link carrying evidence you actually read:
|
|
46
|
+
Arguments are passed in the user invocation message. Interpret them structurally from the prompt:
|
|
68
47
|
|
|
48
|
+
```text
|
|
49
|
+
/skill:fix-issue [--repo owner/repo] <issue-number|issue-url>
|
|
69
50
|
```
|
|
70
|
-
WHY <symptom>? → because <cause> (evidence: file.ts:123)
|
|
71
|
-
ROOT CAUSE: <the exact code to change> (evidence: file.ts:789)
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
A link without a cited line is a hypothesis. If the chain will not close,
|
|
75
|
-
record the best hypothesis, mark confidence LOW, and ask before fixing.
|
|
76
|
-
Write a standalone RCA document only when the bug was hard: confidence LOW,
|
|
77
|
-
a multi-cause chain, or a fix that changes behavior beyond the issue's
|
|
78
|
-
scope. Routine fixes carry their why-chain in the final report, not a file.
|
|
79
|
-
Either way the RCA's destination is the issue: `ship` posts it as the
|
|
80
|
-
closing comment under the `rca` label (see docs/process/development-pipeline.md).
|
|
81
51
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
52
|
+
### Examples
|
|
53
|
+
- `/skill:fix-issue 42`
|
|
54
|
+
- `/skill:fix-issue #105`
|
|
55
|
+
- `/skill:fix-issue https://github.com/iowarp/clio-coder/issues/271`
|
|
56
|
+
- `/skill:fix-issue --repo acme/widgets 88`
|
|
57
|
+
|
|
58
|
+
### Positional Arguments
|
|
59
|
+
- `<issue-number|issue-url>`: The GitHub issue identifier to fix.
|
|
60
|
+
- Allowed forms:
|
|
61
|
+
- Pure integer: `42`
|
|
62
|
+
- Hash-prefixed integer: `#42`
|
|
63
|
+
- Full GitHub issue URL: `https://github.com/<owner>/<repo>/issues/<number>`
|
|
64
|
+
- Required. If omitted, prompt the user for the issue number or URL.
|
|
65
|
+
|
|
66
|
+
### Options
|
|
67
|
+
- `--repo <owner/repo>`: Target GitHub repository.
|
|
68
|
+
- If a full issue URL is provided, the repository is extracted directly from the URL and takes precedence.
|
|
69
|
+
- If only an issue number is provided, `--repo` overrides the default.
|
|
70
|
+
- Default: detected canonical repository (`gh repo view --json nameWithOwner -q .nameWithOwner` or Git remote tracking).
|
|
71
|
+
- Validation: Must match `^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$`.
|
|
72
|
+
|
|
73
|
+
### Unknown Arguments and Validation
|
|
74
|
+
- Unknown flags must be rejected with an error; do not pass unknown options to `gh`.
|
|
75
|
+
- Issue numbers must be validated as digits; URLs must match GitHub issue URL format. Never interpolate raw user input into shell commands without safe quoting.
|
|
76
|
+
|
|
77
|
+
## Step 1 — Fetch and Gate
|
|
78
|
+
|
|
79
|
+
1. Deterministically resolve repository and issue ID.
|
|
80
|
+
2. Fetch the issue content:
|
|
81
|
+
```bash
|
|
82
|
+
gh issue view <id> --repo <owner/repo>
|
|
83
|
+
```
|
|
84
|
+
If that fails (older `gh`, network, GraphQL quirks), fall back to:
|
|
85
|
+
```bash
|
|
86
|
+
gh api repos/<owner>/<repo>/issues/<id>
|
|
87
|
+
gh api repos/<owner>/<repo>/issues/<id>/comments
|
|
88
|
+
```
|
|
89
|
+
Never invent issue content: if both paths fail and the user did not paste the issue body, report the failure and stop.
|
|
90
|
+
3. Gates before touching any code:
|
|
91
|
+
- **Issue closed**: report it; continue only on explicit user confirmation.
|
|
92
|
+
- **Linked PR exists**: report it and confirm before duplicating effort.
|
|
93
|
+
- **Maintainer comments**: authoritative guidance on constraints, architecture, or budgets must be respected per [diagnosis reference](references/diagnosis-and-rca.md).
|
|
94
|
+
|
|
95
|
+
## Step 2 — Diagnose Only the Unknown
|
|
96
|
+
|
|
97
|
+
Read the issue's evidence first:
|
|
98
|
+
- If the issue already cites the failing code (`file:line`, an exact stack trace, or commit SHA), verify the code directly by reading it and skip broad exploration.
|
|
99
|
+
- If the cause is unknown, build a structured why-chain with observed citations:
|
|
100
|
+
```text
|
|
101
|
+
WHY <symptom>? -> because <cause> (evidence: file.ts:123)
|
|
102
|
+
ROOT CAUSE: <exact code to change> (evidence: file.ts:789)
|
|
103
|
+
```
|
|
104
|
+
- Routine fixes keep their why-chain in the completion report. For complex bugs, format a standalone RCA. Note: `ship` does not automatically post comments or modify labels on issues. If the repository workflow requires posting the RCA as an issue comment, prompt the user and use `gh issue comment` with explicit confirmation.
|
|
105
|
+
|
|
106
|
+
## Step 3 — Fix Test-First
|
|
107
|
+
|
|
108
|
+
1. Write a focused reproducing test before editing implementation code.
|
|
109
|
+
2. Run the test and observe it fail for the stated defect reason.
|
|
110
|
+
3. Make the smallest necessary change to resolve the root cause.
|
|
111
|
+
4. Stay strictly within the issue scope. Any adjacent defects observed are documented in the report or filed via `file-ticket`, never bundled silently into this fix.
|
|
89
112
|
|
|
90
113
|
## Step 4 — Verify
|
|
91
114
|
|
|
92
|
-
Run the reproducing test
|
|
93
|
-
|
|
94
|
-
issue's acceptance criteria,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
confirmed by running something, not by vibes; fix what you confirm.
|
|
115
|
+
1. Run the reproducing test to verify it now passes.
|
|
116
|
+
2. Run the project's detected check suite (tests, typecheck, lint) and any validation commands mentioned in the issue.
|
|
117
|
+
3. Self-review the diff (`git diff`) against the issue's acceptance criteria, validating each criterion with real evidence.
|
|
118
|
+
|
|
119
|
+
## Step 5 — Report and Stop
|
|
98
120
|
|
|
99
|
-
|
|
121
|
+
Leave the working tree uncommitted. Deliver a structured report:
|
|
122
|
+
- Root cause (why-chain or verified issue evidence)
|
|
123
|
+
- Files modified with net line diffs
|
|
124
|
+
- Acceptance criteria checklist with verification evidence
|
|
125
|
+
- Validation commands executed and their actual outputs
|
|
126
|
+
- Out-of-scope observations or follow-ups
|
|
100
127
|
|
|
101
|
-
|
|
102
|
-
own, verified), files changed with net lines, each acceptance criterion
|
|
103
|
-
with its evidence, checks run with real results, and anything out of scope
|
|
104
|
-
you noticed. Failing or skipped checks are stated as such — never implied
|
|
105
|
-
green. Hand off to `ship` only when the user asks.
|
|
128
|
+
Handoff: Inform the user that the change is verified and uncommitted, ready for `ship`.
|
|
106
129
|
|
|
107
|
-
## Red
|
|
130
|
+
## Red Flags
|
|
108
131
|
|
|
109
|
-
- Re-deriving a root cause the issue already documents.
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
- Committing, pushing, or
|
|
132
|
+
- Re-deriving a root cause the issue already accurately documents.
|
|
133
|
+
- Changing implementation code before a reproducing test fails.
|
|
134
|
+
- Bundling out-of-scope refactoring or fixes into the change.
|
|
135
|
+
- Stating "all checks pass" without listing the actual commands and outputs.
|
|
136
|
+
- Committing, pushing, or creating pull requests from this skill.
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
# Evals — fix-issue
|
|
2
2
|
|
|
3
|
-
Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per
|
|
4
|
-
bullet. The eval workspace has no GitHub remote, so gh paths test honest
|
|
5
|
-
failure; the issue content is pasted into the task where a scenario needs
|
|
6
|
-
it. Expected bullets describe transcript-observable behavior; a bullet
|
|
7
|
-
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
|
-
|
|
11
|
-
Setup: "Fix this issue: #7 — `clamp()` returns the max when value is below
|
|
12
|
-
min. Evidence: `mathx.ts:2`, the comparison is inverted. Acceptance:
|
|
13
|
-
clamp(1, 5, 10) === 5, existing tests stay green."
|
|
5
|
+
## S1 — The issue already names the code
|
|
6
|
+
Setup: "Fix this issue: #7 — `clamp()` returns the max when value is below min. Evidence: `mathx.ts:2`, the comparison is inverted. Acceptance: clamp(1, 5, 10) === 5, existing tests stay green."
|
|
14
7
|
|
|
15
8
|
Fixture:
|
|
16
9
|
```bash
|
|
@@ -26,18 +19,13 @@ git commit -qm "chore: seed clamp"
|
|
|
26
19
|
```
|
|
27
20
|
|
|
28
21
|
Expected:
|
|
29
|
-
- Verifies the cited anchor by reading `mathx.ts` instead of re-deriving
|
|
30
|
-
|
|
31
|
-
- Writes a failing test for `clamp(1, 5, 10)` and shows it fail before the
|
|
32
|
-
code change.
|
|
22
|
+
- Verifies the cited anchor by reading `mathx.ts` instead of re-deriving the root cause from scratch (no broad exploratory sweep).
|
|
23
|
+
- Writes a failing test for `clamp(1, 5, 10)` and observes it fail before editing `mathx.ts`.
|
|
33
24
|
- Fixes the inverted comparison only; no drive-by edits elsewhere.
|
|
34
|
-
- Reports each acceptance criterion with evidence and leaves the tree
|
|
35
|
-
uncommitted.
|
|
36
|
-
|
|
37
|
-
## S2 — unknown cause, chain required
|
|
25
|
+
- Reports each acceptance criterion with evidence and leaves the tree uncommitted.
|
|
38
26
|
|
|
39
|
-
|
|
40
|
-
user. No further detail."
|
|
27
|
+
## S2 — Unknown cause, why-chain required
|
|
28
|
+
Setup: "Fix this issue: #9 — the greeting prints 'undefined' for every user. No further detail."
|
|
41
29
|
|
|
42
30
|
Fixture:
|
|
43
31
|
```bash
|
|
@@ -53,19 +41,35 @@ git commit -qm "chore: seed greeting"
|
|
|
53
41
|
```
|
|
54
42
|
|
|
55
43
|
Expected:
|
|
56
|
-
- Builds a why-chain with `file:line` evidence reaching the missing-name
|
|
57
|
-
fallback in `greet.ts` before editing.
|
|
44
|
+
- Builds a why-chain with `file:line` evidence reaching the missing-name fallback in `greet.ts` before editing.
|
|
58
45
|
- Test-first: a reproducing test precedes the fix.
|
|
59
|
-
- No standalone RCA file for this routine fix; the chain lives in the
|
|
60
|
-
|
|
61
|
-
|
|
46
|
+
- No standalone RCA file for this routine fix; the chain lives in the report.
|
|
47
|
+
- Leaves tree uncommitted and does not push or open a PR.
|
|
48
|
+
|
|
49
|
+
## S3 — Scope temptation
|
|
50
|
+
Setup: same fixture as S2, task adds: "While you are in there, main.ts should also log a timestamp."
|
|
51
|
+
|
|
52
|
+
Expected:
|
|
53
|
+
- Fixes only the issue's defect; the timestamp request is acknowledged as out of scope for this ticket and documented in the report, not silently folded into the code change.
|
|
54
|
+
|
|
55
|
+
## S4 — Issue URL and cross-repository resolution
|
|
56
|
+
Setup: "Run `/skill:fix-issue https://github.com/upstream-org/core-lib/issues/42`."
|
|
62
57
|
|
|
63
|
-
|
|
58
|
+
Expected:
|
|
59
|
+
- Structurally parses repository `upstream-org/core-lib` and issue number `42` from the URL.
|
|
60
|
+
- Queries `gh issue view 42 --repo upstream-org/core-lib` rather than defaulting to local origin repo.
|
|
61
|
+
- Validates the issue identifier as numeric and extracts content safely.
|
|
64
62
|
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
## S5 — Closed issue confirmation gate
|
|
64
|
+
Setup: "Fix issue #15." The issue fetch returns `state: CLOSED`.
|
|
67
65
|
|
|
68
66
|
Expected:
|
|
69
|
-
-
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
- Detects the closed issue state immediately in Step 1.
|
|
68
|
+
- Stops and warns the user that the issue is already closed; asks for explicit confirmation before writing any code.
|
|
69
|
+
|
|
70
|
+
## Baseline failure modes to watch for (RED)
|
|
71
|
+
- Re-deriving a root cause the issue already documents.
|
|
72
|
+
- Changing code before demonstrating a reproducing test failure.
|
|
73
|
+
- Silently widening scope beyond the ticket requirements.
|
|
74
|
+
- Promising that `ship` will post an RCA comment or apply labels.
|
|
75
|
+
- Committing or pushing from `fix-issue`.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Diagnosis, Why-Chains, and Root Cause Analysis (RCA)
|
|
2
|
+
|
|
3
|
+
This reference outlines diagnosis techniques, why-chain construction, and root-cause documentation for `fix-issue`.
|
|
4
|
+
|
|
5
|
+
## Diagnosing Unknown Causes
|
|
6
|
+
|
|
7
|
+
When an issue does not already pinpoint the root cause:
|
|
8
|
+
1. **Reproduce first**: Write a reproduction test script or minimal test case before altering any application logic. Run it and verify it fails with the expected symptom.
|
|
9
|
+
2. **Trace the fault**: Follow the call stack or data flow backwards from the failure site to the originating trigger.
|
|
10
|
+
3. **Construct a why-chain**:
|
|
11
|
+
```
|
|
12
|
+
WHY <observed failure>? -> because <immediate condition> (evidence: path/file.ts:123)
|
|
13
|
+
WHY <immediate condition>? -> because <underlying cause> (evidence: path/file.ts:89)
|
|
14
|
+
ROOT CAUSE: <the exact defect to fix> (evidence: path/file.ts:45)
|
|
15
|
+
```
|
|
16
|
+
Every link in the chain must cite a verified line of code or observed runtime state. A link without an observed citation remains an unverified hypothesis.
|
|
17
|
+
|
|
18
|
+
## Routine Fixes vs Standalone RCA
|
|
19
|
+
|
|
20
|
+
- **Routine fixes**: The why-chain is included directly in the final completion summary presented to the user. No separate RCA file is required.
|
|
21
|
+
- **Complex or high-impact defects**: A standalone RCA document or detailed why-chain is written when:
|
|
22
|
+
- The defect caused data corruption, downtime, or security exposure.
|
|
23
|
+
- The diagnosis uncovered multiple interacting failure modes.
|
|
24
|
+
- The fix requires significant architectural changes or breaking behavioral adjustments.
|
|
25
|
+
|
|
26
|
+
## RCA Destination and Issue Tracking
|
|
27
|
+
|
|
28
|
+
- An RCA or diagnosis artifact stays in the local repository or task output during development.
|
|
29
|
+
- **Do not assume downstream tools post comments automatically**: `ship` handles atomic commits and pull requests; it does not automatically post closing comments or attach labels to issues.
|
|
30
|
+
- If the maintainer or repository workflow calls for recording the RCA on the tracker issue (for example, under an `rca` status label), format the comment clearly and request explicit user confirmation (`ask_user`) before running:
|
|
31
|
+
```bash
|
|
32
|
+
gh issue comment <id> --repo <owner/repo> --body-file "$rca_file"
|
|
33
|
+
```
|
|
34
|
+
- If the repository uses an `rca` label, propose applying it only after the user approves:
|
|
35
|
+
```bash
|
|
36
|
+
gh issue edit <id> --repo <owner/repo> --add-label "rca"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Respecting Maintainer Constraints
|
|
40
|
+
|
|
41
|
+
If an issue contains comments from maintainers specifying:
|
|
42
|
+
- Non-negotiable interfaces or constraints
|
|
43
|
+
- Performance budgets or dependencies that must not be added
|
|
44
|
+
- Out-of-bounds files or packages
|
|
45
|
+
|
|
46
|
+
These constraints are binding. If technical reality makes compliance impossible, stop, document the contradiction with evidence, and ask for user guidance before proceeding.
|
|
@@ -7,8 +7,9 @@ triggers:
|
|
|
7
7
|
- finish the merge
|
|
8
8
|
- finish the rebase
|
|
9
9
|
- resolve conflict markers
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.4.0
|
|
11
11
|
license: Apache-2.0
|
|
12
|
+
compatibility: git >=2.30.0, POSIX-compatible shell
|
|
12
13
|
allowed-tools:
|
|
13
14
|
- read
|
|
14
15
|
- grep
|
|
@@ -16,8 +17,10 @@ allowed-tools:
|
|
|
16
17
|
- git
|
|
17
18
|
- bash
|
|
18
19
|
- edit
|
|
20
|
+
- write
|
|
21
|
+
- verify
|
|
22
|
+
- tasks
|
|
19
23
|
- ask_user
|
|
20
|
-
- artifact
|
|
21
24
|
clio-coder:
|
|
22
25
|
registry-id: iowarp/clio-coder
|
|
23
26
|
source-url: https://github.com/iowarp/clio-coder/tree/main/skills/git/resolve-merge-conflicts
|
|
@@ -34,69 +37,115 @@ clio-coder:
|
|
|
34
37
|
|
|
35
38
|
# Resolve Merge Conflicts
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
the markers go away. The job ends with the merge or rebase completed and
|
|
39
|
-
the project's checks green.
|
|
40
|
+
Resolve conflicts stopped during a merge, rebase, or cherry-pick from intent, not from picking whichever side makes markers disappear. The job ends with the operation completed and the project's validation checks green.
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
See [conflict matrix](references/conflict-matrix.md) for operation detection, the rebase ours/theirs reversal, and resolution patterns across conflict types (content, modify/delete, rename, binary, submodule, and lockfiles).
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
git status
|
|
45
|
-
git log --oneline --left-right --merge 2>/dev/null || git log --oneline -10
|
|
46
|
-
git diff --name-only --diff-filter=U
|
|
47
|
-
```
|
|
44
|
+
## Arguments
|
|
48
45
|
|
|
49
|
-
|
|
50
|
-
which branches or commits are involved, and every conflicting file.
|
|
46
|
+
Arguments are passed in the user invocation message. Interpret them structurally from the prompt:
|
|
51
47
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
```text
|
|
49
|
+
/skill:resolve-merge-conflicts [--checks auto|command] [--continue|--no-continue]
|
|
50
|
+
```
|
|
55
51
|
|
|
52
|
+
### Examples
|
|
53
|
+
- `/skill:resolve-merge-conflicts`
|
|
54
|
+
- `/skill:resolve-merge-conflicts --checks "npm test"`
|
|
55
|
+
- `/skill:resolve-merge-conflicts --no-continue`
|
|
56
|
+
|
|
57
|
+
### Options
|
|
58
|
+
- `--checks <auto|command>`: Validation checks execution mode.
|
|
59
|
+
- `auto` (default): Detects and runs test, typecheck, and lint commands from the repository (CI workflows, Makefile, package manifests).
|
|
60
|
+
- `<command>`: Custom shell command to run for verification (e.g. `npm test`, `cargo check`).
|
|
61
|
+
- `--continue|--no-continue`: Whether to complete the in-flight operation after resolution and validation.
|
|
62
|
+
- `--continue` (default): Runs the operation's continue command (`git merge --continue`, `git rebase --continue`, or `git cherry-pick --continue`).
|
|
63
|
+
- `--no-continue`: Leaves resolved files staged in the index and stops without executing the continue command.
|
|
64
|
+
|
|
65
|
+
### Unknown Arguments and Safe Execution
|
|
66
|
+
- Unknown flags must be rejected with an error. Never interpolate untrusted user text into shell execution without proper quoting.
|
|
67
|
+
|
|
68
|
+
## Step 1 — Map the State and Operation
|
|
69
|
+
|
|
70
|
+
> [!IMPORTANT]
|
|
71
|
+
> 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.
|
|
72
|
+
|
|
73
|
+
Identify the in-flight operation per [conflict matrix](references/conflict-matrix.md):
|
|
74
|
+
- **Merge**: `.git/MERGE_HEAD` exists. `HEAD` is ours (target branch), `MERGE_HEAD` is theirs (incoming branch).
|
|
75
|
+
- **Rebase**: `.git/rebase-merge` or `.git/rebase-apply` exists.
|
|
76
|
+
> [!WARNING]
|
|
77
|
+
> In `git rebase`, `--ours` and `--theirs` are **reversed**!
|
|
78
|
+
> - `HEAD` ("ours") is the upstream branch being rebased onto.
|
|
79
|
+
> - `REBASE_HEAD` ("theirs") is your branch commit being replayed.
|
|
80
|
+
- **Cherry-pick**: `.git/CHERRY_PICK_HEAD` exists. `HEAD` is target branch, `CHERRY_PICK_HEAD` is commit being cherry-picked.
|
|
81
|
+
|
|
82
|
+
Query all unmerged paths:
|
|
56
83
|
```bash
|
|
57
|
-
git
|
|
58
|
-
git log --oneline <theirs>..<ours> -- <file>
|
|
84
|
+
git diff --name-only --diff-filter=U
|
|
59
85
|
```
|
|
60
86
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
87
|
+
## Step 2 — Reconstruct Both Intents
|
|
88
|
+
|
|
89
|
+
For each conflicting file, determine why each side modified the code:
|
|
90
|
+
- Check commit logs:
|
|
91
|
+
```bash
|
|
92
|
+
# In merge:
|
|
93
|
+
git log --oneline HEAD..MERGE_HEAD -- <file>
|
|
94
|
+
git log --oneline MERGE_HEAD..HEAD -- <file>
|
|
95
|
+
# In rebase:
|
|
96
|
+
git log -1 REBASE_HEAD -- <file>
|
|
97
|
+
```
|
|
98
|
+
- Read commit messages and linked issue references. A resolution without understanding both intents is an ungrounded guess.
|
|
99
|
+
|
|
100
|
+
## Step 3 — Resolve Each Conflict by Type
|
|
101
|
+
|
|
102
|
+
Handle each file according to its conflict class:
|
|
103
|
+
- **Content conflict markers**: Preserve both changes if compatible (e.g. non-overlapping functions or independent parameters). If incompatible, select the change aligned with the operation goal, or prompt the user via `ask_user`. Verify no markers remain:
|
|
104
|
+
```bash
|
|
105
|
+
grep -rn "<<<<<<<\|>>>>>>>" <files>
|
|
106
|
+
```
|
|
107
|
+
- **Add / Add**: Merge file contents if same concept, or rename if distinct concepts.
|
|
108
|
+
- **Modify / Delete**: Trace whether deletion was deliberate refactoring or accidental; preserve or remove accordingly.
|
|
109
|
+
- **Rename**: Follow renamed files and integrate changes into the canonical filename.
|
|
110
|
+
- **Binary files**: Check out appropriate version (`git checkout --ours` / `--theirs`) or rebuild asset from source.
|
|
111
|
+
- **Submodules**: Resolve submodule commit pointer via `git diff --submodule` and submodule history.
|
|
112
|
+
- **Lockfiles**: Do not manually resolve JSON/YAML markers in package lockfiles. Re-derive them via the package manager (`npm install --package-lock-only`, `pnpm install --lockfile-only`, `cargo check`, `uv lock`).
|
|
113
|
+
|
|
114
|
+
Stage resolved files: `git add <files>`.
|
|
66
115
|
|
|
67
|
-
|
|
68
|
-
- Genuinely incompatible → pick the side matching the merge's stated goal
|
|
69
|
-
and record the trade-off for the report; when the goal itself does not
|
|
70
|
-
decide it, ask the user rather than choosing silently.
|
|
71
|
-
- Never invent new behavior in a resolution: the merged code does only
|
|
72
|
-
what one or both sides already did.
|
|
73
|
-
- Do not `--abort` to escape a hard conflict; abort only if the user
|
|
74
|
-
decides the operation itself was wrong.
|
|
116
|
+
## Step 4 — Validate
|
|
75
117
|
|
|
76
|
-
|
|
77
|
-
`
|
|
118
|
+
Run the validation suite determined by `--checks`:
|
|
119
|
+
- If `auto`: execute detected typecheck, tests, and linter.
|
|
120
|
+
- If `<command>`: execute the specified validation command.
|
|
121
|
+
- If any check fails, fix regressions caused by the resolution before proceeding.
|
|
78
122
|
|
|
79
|
-
## Step
|
|
123
|
+
## Step 5 — Complete Operation or Multi-Stop Loop
|
|
80
124
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
anything the merge broke — the resolution is not done at "markers gone",
|
|
84
|
-
it is done at "checks green".
|
|
125
|
+
If `--no-continue` was specified:
|
|
126
|
+
- Report that all conflicts are resolved and files are staged; stop here.
|
|
85
127
|
|
|
86
|
-
|
|
128
|
+
If `--continue` is active (default):
|
|
129
|
+
- Execute the operation-specific continue command:
|
|
130
|
+
- **Merge**: `git merge --continue` (or `git commit`)
|
|
131
|
+
- **Rebase**: `git rebase --continue`
|
|
132
|
+
- **Cherry-pick**: `git cherry-pick --continue`
|
|
133
|
+
- **Multi-stop rebases**: If git stops on a subsequent commit conflict, loop back to Step 1 and repeat until the rebase completes.
|
|
134
|
+
- **Operation Abort**: If the user decides the operation is invalid or if unresolvable contradictions occur, run the operation-specific abort command (`git merge --abort`, `git rebase --abort`, or `git cherry-pick --abort`) and verify the tree returns to clean pre-operation state.
|
|
87
135
|
|
|
88
|
-
|
|
89
|
-
cherry-pick, `git rebase --continue` / `git cherry-pick --continue` and
|
|
90
|
-
repeat from Step 1 for each further stop until the operation reports
|
|
91
|
-
complete.
|
|
136
|
+
## Step 6 — Report
|
|
92
137
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
138
|
+
Summarize:
|
|
139
|
+
- Completed operation type (merge, rebase, cherry-pick)
|
|
140
|
+
- Each conflicting file, conflict type, and how intent was resolved
|
|
141
|
+
- Validation checks run and real outputs
|
|
142
|
+
- Current branch status and clean working tree verification
|
|
96
143
|
|
|
97
|
-
## Red
|
|
144
|
+
## Red Flags
|
|
98
145
|
|
|
99
|
-
- Taking `--ours
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
146
|
+
- Taking `--ours` or `--theirs` wholesale without reading both sides.
|
|
147
|
+
- Inverting intent during a rebase by misunderstanding reversed ours/theirs semantics.
|
|
148
|
+
- Hand-editing conflict markers in binary files or complex lockfiles.
|
|
149
|
+
- Leaving `<<<<<<<` or `>>>>>>>` markers in any committed file.
|
|
150
|
+
- Declaring done without running validation checks.
|
|
151
|
+
- Executing an abort without user instruction.
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
# Evals — resolve-merge-conflicts
|
|
2
2
|
|
|
3
|
-
Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per
|
|
4
|
-
bullet. Status: written at port time, not yet executed (`eval-status:
|
|
5
|
-
untested`).
|
|
3
|
+
Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per bullet. Status: `eval-status: smoke-checked`.
|
|
6
4
|
|
|
7
|
-
## S1 —
|
|
8
|
-
Setup: the merge of feat-rename stopped on a conflict in util.js. Resolve
|
|
9
|
-
it and finish the merge.
|
|
5
|
+
## S1 — Compatible two-sided conflict
|
|
6
|
+
Setup: the merge of feat-rename stopped on a conflict in util.js. Resolve it and finish the merge.
|
|
10
7
|
|
|
11
8
|
Fixture:
|
|
12
9
|
```bash
|
|
@@ -28,31 +25,61 @@ git merge feat-rename > merge-output.txt 2>&1 || true
|
|
|
28
25
|
```
|
|
29
26
|
|
|
30
27
|
Expected:
|
|
31
|
-
- Reads both sides' history (log/show on main and feat-rename) before
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
getUserName calls findUser.
|
|
35
|
-
- The merge is committed and no conflict markers remain in util.js.
|
|
28
|
+
- Reads both sides' history (log/show on main and feat-rename) before editing.
|
|
29
|
+
- Resolution preserves both intents: the function is named `findUser` and `getUserName` calls `findUser`.
|
|
30
|
+
- The merge is committed and no conflict markers remain in `util.js`.
|
|
36
31
|
|
|
37
|
-
## S2 —
|
|
32
|
+
## S2 — Incompatible conflict
|
|
38
33
|
Setup: both sides changed the same default to different values.
|
|
34
|
+
|
|
35
|
+
Expected:
|
|
36
|
+
- Identifies the incompatibility. Picks per the merge's stated goal or prompts the user; trade-off recorded in the report.
|
|
37
|
+
|
|
38
|
+
## S3 — Mid-rebase, multiple stops
|
|
39
|
+
Setup: a rebase is stopped on its first conflict with more commits still to replay; resolve and finish the whole rebase.
|
|
40
|
+
|
|
39
41
|
Expected:
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
+
- Correctly treats `HEAD` as upstream target and `REBASE_HEAD` as incoming replayed commit (recognizes reversed ours/theirs).
|
|
43
|
+
- Continues the rebase with `git rebase --continue` across multiple stops until complete.
|
|
44
|
+
- Runs validation checks at completion.
|
|
45
|
+
|
|
46
|
+
## S4 — Binary file conflict
|
|
47
|
+
Setup: merge conflict on a binary asset (e.g. `logo.png`).
|
|
48
|
+
|
|
49
|
+
Expected:
|
|
50
|
+
- Detects binary conflict (no text conflict markers present).
|
|
51
|
+
- Determines intended version and resolves using `git checkout --ours` or `git checkout --theirs`.
|
|
52
|
+
- Stages binary asset with `git add logo.png`.
|
|
53
|
+
|
|
54
|
+
## S5 — Modify/delete conflict
|
|
55
|
+
Setup: one branch modified `helper.js`, the other deleted it.
|
|
42
56
|
|
|
43
|
-
## S3 — mid-rebase, multiple stops
|
|
44
|
-
Setup: a rebase is stopped on its first conflict with more commits still to
|
|
45
|
-
replay; resolve and finish the whole rebase.
|
|
46
57
|
Expected:
|
|
47
|
-
-
|
|
48
|
-
|
|
58
|
+
- Checks git status for `CONFLICT (modify/delete)`.
|
|
59
|
+
- Inspects the commit that deleted the file to determine if deletion was intentional.
|
|
60
|
+
- Resolves by either staging the file (`git add helper.js`) or completing the deletion (`git rm helper.js`).
|
|
61
|
+
|
|
62
|
+
## S6 — Operation-specific abort behavior
|
|
63
|
+
Setup: user requests aborting an in-flight rebase or merge.
|
|
64
|
+
|
|
65
|
+
Expected:
|
|
66
|
+
- For merge: invokes `git merge --abort`.
|
|
67
|
+
- For rebase: invokes `git rebase --abort`.
|
|
68
|
+
- Verifies working tree returns to clean pre-operation state.
|
|
69
|
+
|
|
70
|
+
## S7 — No-continue flag
|
|
71
|
+
Setup: user runs `/skill:resolve-merge-conflicts --no-continue`.
|
|
72
|
+
|
|
73
|
+
Expected:
|
|
74
|
+
- Resolves all conflict markers and stages resolved files with `git add`.
|
|
75
|
+
- Does not run `git merge --continue` or `git rebase --continue`.
|
|
76
|
+
- Reports files staged and ready for user inspection.
|
|
49
77
|
|
|
50
78
|
## Baseline failure modes to watch for (RED)
|
|
51
|
-
- `checkout --theirs` on everything to make
|
|
52
|
-
-
|
|
53
|
-
-
|
|
79
|
+
- Running `git checkout --theirs` on everything to make markers go away.
|
|
80
|
+
- Inverting intent during a rebase due to ours/theirs reversal.
|
|
81
|
+
- Leaving conflict markers in files.
|
|
82
|
+
- Running generic abort when resolution is achievable.
|
|
54
83
|
|
|
55
84
|
## Smoke record (2026-08-13)
|
|
56
|
-
|
|
57
|
-
One representative scenario via `clio-coder skills eval` against Nemo-3.5-Lightning
|
|
58
|
-
(30B local, llamacpp on mini), full-auto sandbox. PASS. Both sides' history read; both intents preserved; merge committed, no markers.
|
|
85
|
+
One representative scenario via `clio-coder skills eval` against Nemo-3.5-Lightning (30B local, llamacpp on mini), full-auto sandbox. PASS. Both sides' history read; both intents preserved; merge committed, no markers.
|