@iowarp/clio-coder 0.4.2 → 0.4.4
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 +98 -0
- package/CONTRIBUTING.md +86 -19
- package/README.md +35 -6
- package/dist/{acp-TMDQZDIG.js → acp-WNAYYF4F.js} +12 -13
- package/dist/{agents-5N5NG3XG.js → agents-3OKXHLOI.js} +60 -57
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-Z5CCBXKQ.js → auth-VKNNMGPU.js} +21 -19
- package/dist/{builtins-K6TNDT24.js → builtins-WGALA46I.js} +9 -4
- package/dist/{chunk-XE3PCIXH.js → chunk-23L32XTI.js} +12 -9
- package/dist/{chunk-I64IFBLB.js → chunk-25QBEXRS.js} +18 -11
- package/dist/{chunk-CDNVLKUX.js → chunk-26QSH3EJ.js} +13 -7
- package/dist/{chunk-QQLGQY2A.js → chunk-2ASED4PZ.js} +22 -22
- package/dist/{chunk-MCEPRMZW.js → chunk-2CU2H6KE.js} +2 -2
- package/dist/chunk-2DSOYNFC.js +108 -0
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-O3YUNJZ2.js → chunk-2ZSONWVL.js} +82 -25
- package/dist/{chunk-2NHR3NAY.js → chunk-36CT5VVL.js} +331 -42
- package/dist/{chunk-2X4RYJTJ.js → chunk-3GY4F45V.js} +3 -3
- package/dist/{chunk-ZW55JB7N.js → chunk-3ODX73FK.js} +4 -6
- package/dist/{chunk-PBP4B7XR.js → chunk-3UNOLWNZ.js} +3 -3
- package/dist/{chunk-4JDLP6ZS.js → chunk-3UUXNFEX.js} +14 -10
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-ZW4HH5JJ.js → chunk-4M6Z5QVF.js} +6 -6
- package/dist/{chunk-K6BSR66V.js → chunk-4NSRCOYP.js} +4 -1
- package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-FSP7CMNU.js → chunk-54X7T7DK.js} +61 -6
- package/dist/{chunk-54ODD65L.js → chunk-5636DCO5.js} +4 -4
- package/dist/chunk-57XXR6DR.js +3763 -0
- 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-YJISEZKC.js → chunk-5TUB6SLS.js} +6 -6
- package/dist/{chunk-IMXMHHMQ.js → chunk-6OSVSQL5.js} +341 -57
- package/dist/{chunk-Q4XWMHX6.js → chunk-6PAZTBPA.js} +14 -2
- package/dist/{chunk-FVDGR2ZL.js → chunk-6Q3CYFD3.js} +112 -39
- package/dist/{chunk-IDNA72AH.js → chunk-6QOTUPRG.js} +155 -36
- package/dist/{chunk-X7IARSHT.js → chunk-6UINWWS6.js} +16 -10
- package/dist/{chunk-CYZW7JHJ.js → chunk-72YIHOZQ.js} +9 -9
- package/dist/{chunk-IKSLQ4XV.js → chunk-75W7L2E2.js} +752 -861
- package/dist/{chunk-CRFOIAX3.js → chunk-7UGL4MB5.js} +6 -6
- package/dist/{chunk-HIICAHCJ.js → chunk-AUPNRN7C.js} +2 -2
- package/dist/{chunk-7BHIY2MW.js → chunk-BJVFZO5U.js} +8 -50
- package/dist/{chunk-B74PXLU7.js → chunk-CUSRQKPU.js} +65 -3
- package/dist/chunk-DQOVN6KV.js +386 -0
- package/dist/{chunk-E7GT7O5N.js → chunk-DT3LWJOB.js} +7 -4
- package/dist/chunk-DXKJURES.js +671 -0
- package/dist/{chunk-JBCS7CRR.js → chunk-EL24TAU4.js} +10 -10
- package/dist/{chunk-TPEQIQIE.js → chunk-ELWDPP3Y.js} +8 -8
- package/dist/{chunk-NDINPTJ4.js → chunk-ELZVTCGV.js} +5 -4
- package/dist/chunk-EXLD33WO.js +381 -0
- package/dist/chunk-FEAXX7B6.js +101 -0
- package/dist/{chunk-RLYRBIYQ.js → chunk-FFUPXJC4.js} +90 -331
- package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
- package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
- package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
- package/dist/chunk-GX5WYQO4.js +59 -0
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/chunk-I2DWJ4GM.js +390 -0
- package/dist/{chunk-TXOTCRLG.js → chunk-I5FWO7L5.js} +5 -5
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
- package/dist/chunk-IRXAATOX.js +539 -0
- package/dist/chunk-IXIY2H4R.js +44 -0
- package/dist/{chunk-SSEYRH53.js → chunk-IZXGRF7P.js} +92 -147
- package/dist/{chunk-5TSRNF4G.js → chunk-JCI2ROMZ.js} +164 -6
- package/dist/{chunk-JWJGP5DQ.js → chunk-JEIYHLOR.js} +7 -7
- package/dist/{chunk-F2I26BDK.js → chunk-JQLNNIKT.js} +4 -4
- package/dist/{chunk-BYMNWQ7O.js → chunk-JSD46VO2.js} +315 -63
- package/dist/{chunk-AK5XEFVZ.js → chunk-JT2RFCC5.js} +64 -14
- package/dist/{chunk-MCMZMDAC.js → chunk-K6T2ZAMZ.js} +168 -6
- package/dist/{chunk-PGF63K6I.js → chunk-KFV5L5SK.js} +73 -4
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-PJX3WQUQ.js → chunk-LLXSDWXS.js} +3 -3
- package/dist/{chunk-DZAW46HP.js → chunk-LTIKRKFL.js} +3 -3
- package/dist/{chunk-DZEK6CJN.js → chunk-N56KALIC.js} +21 -21
- package/dist/{chunk-B7HM5Z7T.js → chunk-NAI6ZFCY.js} +9 -5
- package/dist/{chunk-I66ZTYNP.js → chunk-NRO2BJRH.js} +2656 -2213
- package/dist/{chunk-ZGNYYXQ6.js → chunk-NXIMQY5W.js} +3 -3
- package/dist/{chunk-IKOZFYBN.js → chunk-NXYCB2VD.js} +149 -106
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
- package/dist/chunk-ODGTEFFI.js +50 -0
- package/dist/{chunk-3F7VUY77.js → chunk-OEJSLEPW.js} +2 -2
- package/dist/{chunk-KKOJXO6R.js → chunk-OMQNJVKW.js} +4 -2
- package/dist/{chunk-5KW52TEP.js → chunk-Q4WO54TA.js} +132 -77
- package/dist/{chunk-W6NIE6OW.js → chunk-QUFRYSWI.js} +13 -7
- package/dist/{chunk-42FMPA75.js → chunk-QZWQA4DE.js} +2 -2
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-W4YEMFBX.js → chunk-RAY4OVGZ.js} +3 -3
- package/dist/{chunk-ZNT2M6TG.js → chunk-RQCKCSRL.js} +17 -17
- package/dist/{chunk-LJID3DYZ.js → chunk-RXTN6AKH.js} +3 -3
- package/dist/{chunk-P75RZCJW.js → chunk-RZDWV63N.js} +3 -3
- package/dist/{chunk-UH632ZYL.js → chunk-S6PYF2XF.js} +2 -2
- package/dist/{chunk-HJWWJ6IL.js → chunk-TOIVGRUX.js} +17 -5
- package/dist/{chunk-HLAFFSEK.js → chunk-TQAHXW6Y.js} +2 -2
- package/dist/{chunk-JIEGK6UF.js → chunk-U6TMQNSI.js} +48 -4
- package/dist/{chunk-2HFQNRV3.js → chunk-UEPWCCTY.js} +12 -12
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-UH347SHR.js → chunk-USR47QNF.js} +11 -11
- package/dist/{chunk-AZ4WMN4W.js → chunk-V6HJFQZE.js} +2 -2
- package/dist/chunk-V76WTFTW.js +318 -0
- package/dist/{chunk-NMJXSHBJ.js → chunk-W54I7H25.js} +2 -2
- package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
- package/dist/{chunk-UBRFI4HS.js → chunk-XULDXHTN.js} +142 -50
- package/dist/chunk-XXYSBZIQ.js +283 -0
- package/dist/{chunk-HKMD33FO.js → chunk-Y55JBDO5.js} +405 -122
- package/dist/{chunk-XOXV5GKE.js → chunk-YD5GIKET.js} +17 -8
- package/dist/{chunk-XGDPUNND.js → chunk-YECAMM3D.js} +2 -2
- package/dist/{chunk-BO7Y52RY.js → chunk-YNFKXPEC.js} +7 -7
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
- package/dist/cli/index.js +42 -40
- package/dist/{clio-7VB377CC.js → clio-QLICPCF5.js} +7 -7
- package/dist/{code-nav-YVLCYA7V.js → code-nav-IJR2DBPR.js} +9 -9
- package/dist/{components-UBWCQSRW.js → components-2TGAI2RC.js} +5 -6
- package/dist/{config-4HVOS65E.js → config-IUA6OYNS.js} +88 -81
- package/dist/{configure-PIWO7B24.js → configure-VEPX4NMX.js} +26 -25
- package/dist/{context-KQYIWPWT.js → context-2DKHWH2T.js} +60 -45
- package/dist/{context-IYEHL3WQ.js → context-4MPR7WKB.js} +78 -69
- package/dist/{context-N6ZE3LGJ.js → context-BOYF5EJM.js} +15 -11
- package/dist/{context-clear-G4OGZJDS.js → context-clear-S4ZJCQUX.js} +73 -65
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-BWLF6LJP.js → context-working-set-3I3FYX6Y.js} +18 -17
- package/dist/detail-A7JAVSIG.js +98 -0
- package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-RJ5I2F2O.js} +99 -75
- package/dist/{docs-PD3EXDKU.js → docs-SPOV3BAN.js} +3 -5
- package/dist/{doctor-LHBD36VU.js → doctor-DKICC2SN.js} +71 -48
- package/dist/{eval-C45FYRJ6.js → eval-OQOQUDHK.js} +308 -146
- package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-6SHONYAF.js → evidence-4DQ25GUQ.js} +79 -175
- package/dist/evidence-4F5USFKH.js +208 -0
- package/dist/{evolve-KRKMV72X.js → evolve-GSS52E5J.js} +71 -67
- package/dist/{extensions-KPZ2UHBB.js → extensions-G7MFLYHT.js} +8 -9
- package/dist/{fleet-IVTCKDHT.js → fleet-Q37YHHAQ.js} +126 -118
- package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-G7E4N7SM.js} +16 -13
- package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-O7M6QBA2.js} +9 -8
- package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-TOUBW6OW.js} +21 -20
- package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-SW33JJNI.js} +65 -60
- package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-CV2655TW.js} +4 -5
- package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-KESZX2YH.js} +25 -24
- package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-UQPMTVE3.js} +66 -61
- package/dist/{fleet-view-TWHJKCN6.js → fleet-view-MN2VG4MR.js} +65 -60
- package/dist/{init-T2QORQ3Y.js → init-PXEXQSBF.js} +90 -82
- package/dist/{interop-IN5I2A66.js → interop-ZG5T62U3.js} +12 -13
- package/dist/inventory-C26CFDRR.js +101 -0
- package/dist/{library-LSCATDLZ.js → library-B2W4N74O.js} +29 -29
- package/dist/{memory-HYOKAGGJ.js → memory-YCANYS5A.js} +73 -69
- package/dist/{models-2GPMFYCM.js → models-GERTU3YI.js} +51 -47
- package/dist/{monitor-E4ASVUJH.js → monitor-CPNIUULB.js} +74 -67
- package/dist/{orchestrator-DDMPR3PY.js → orchestrator-J4BSH4WQ.js} +1288 -1606
- package/dist/{panes-E3RUXOW5.js → panes-BOHAEGYC.js} +4 -4
- package/dist/{panes-IXKLOKA2.js → panes-NXSLDQZ2.js} +10 -11
- package/dist/{paths-L7LGY6RN.js → paths-VSUWNC22.js} +6 -7
- package/dist/reset-TNWTB5LU.js +343 -0
- package/dist/{resources-OTRSN34L.js → resources-4PXNMD5G.js} +29 -22
- package/dist/{run-5DEYH5QK.js → run-D6XJ34CN.js} +132 -132
- package/dist/{share-IHWTLO3M.js → share-2NWMJJEE.js} +27 -27
- package/dist/{skills-IYMXMKW4.js → skills-KR7WON5G.js} +40 -33
- package/dist/{skills-eval-DROHSJAR.js → skills-eval-O2ZNOLDS.js} +81 -77
- package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-ZZOUBK7O.js} +23 -22
- package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-ZXPJD64J.js} +47 -37
- package/dist/{steer-Z5DO23FJ.js → steer-XA25PSCS.js} +4 -4
- package/dist/{support-U7QOWY26.js → support-7EMVWYG2.js} +6 -6
- package/dist/{targets-P2FUC4IL.js → targets-OMH2XCSN.js} +50 -49
- package/dist/tasks-IPAGMEIX.js +36 -0
- package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-C2J3JYRE.js} +4 -4
- package/dist/{tools-5B7RO6MV.js → tools-EFFEAIDP.js} +8 -9
- package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
- package/dist/uninstall-HALS6BLF.js +407 -0
- package/dist/upgrade-MS72RJEP.js +306 -0
- package/dist/{usage-ME5MPXGX.js → usage-NHG6MCJM.js} +162 -108
- package/dist/{verifiers-BVZ7IWOO.js → verifiers-7AUNVXDY.js} +155 -22
- package/dist/{verify-5K7ZKQFC.js → verify-FWYGPKMR.js} +14 -12
- package/dist/{web-fetch-MPARV2K7.js → web-fetch-V4FKSDAV.js} +4 -4
- package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-743CIGJW.js} +99 -90
- package/dist/{with-panes-BYOJCLAM.js → with-panes-BDQEWBRT.js} +10 -10
- package/dist/worker/entry.js +72 -68
- package/docs/README.md +3 -2
- package/docs/architecture/acp.md +17 -0
- package/docs/architecture/artifact-placement.md +1 -0
- package/docs/architecture/artifact-versions.md +2 -2
- package/docs/architecture/context-engine.md +4 -0
- package/docs/architecture/dispatch-typed-intent.md +1 -1
- package/docs/architecture/evidence-and-memory.md +1 -1
- package/docs/architecture/middleware-and-components.md +1 -1
- package/docs/architecture/model-catalog.md +21 -10
- package/docs/architecture/observability.md +19 -2
- package/docs/architecture/prompt-envelope-and-tools.md +17 -5
- package/docs/architecture/provider-adapter-cookbook.md +63 -0
- package/docs/architecture/safety-model.md +25 -22
- package/docs/architecture/tui-design.md +1 -1
- package/docs/guide/built-in-agents.md +25 -11
- package/docs/guide/commands-and-modes.md +18 -3
- package/docs/guide/configuration-and-targets.md +100 -10
- package/docs/guide/configuration-reference.md +17 -7
- package/docs/guide/environment-variables.md +4 -2
- 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/guide/tool-usage.md +78 -3
- package/docs/history/config-knobs-audit.md +2 -2
- package/docs/process/development-pipeline.md +40 -2
- package/docs/process/eval-runner.md +67 -3
- package/docs/process/git-commit-provenance.md +15 -0
- package/docs/process/release-cut-checklist.md +207 -0
- package/docs/process/scientific-validation.md +18 -17
- package/evals/behavioral-machinery-support.ts +1 -0
- package/evals/behavioral-machinery.yaml +1 -1
- 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 +47 -2
- 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 +47 -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 +24 -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 +64 -5
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +112 -27
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +85 -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/args.ts +0 -8
- 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 +1084 -529
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/doctor-state-size.ts +1 -12
- package/src/cli/doctor-validation-contract.ts +28 -0
- package/src/cli/doctor.ts +5 -0
- package/src/cli/evidence-detail.ts +1 -75
- package/src/cli/evidence-inventory.ts +1 -167
- package/src/cli/index.ts +3 -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 -4
- package/src/cli/select.ts +664 -0
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +3 -0
- package/src/cli/tasks.ts +84 -0
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +210 -150
- package/src/cli/usage.ts +92 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/cli/verifiers.ts +147 -1
- package/src/cli/wiki-generate.ts +1 -0
- package/src/core/commit-attribution.ts +41 -1
- 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/git-commit-attribution.ts +46 -3
- package/src/core/run-overrides.ts +0 -5
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +92 -2
- package/src/core/tool-names.ts +5 -2
- package/src/domains/agents/builtins/architect.md +1 -1
- package/src/domains/agents/builtins/coder.md +1 -1
- package/src/domains/agents/builtins/documenter.md +1 -1
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/provenance.md +7 -7
- package/src/domains/agents/builtins/tester.md +1 -1
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +4 -3
- 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/extension.ts +31 -7
- package/src/domains/context/refresh.ts +3 -0
- package/src/domains/context/wiki/frontmatter.ts +5 -2
- package/src/domains/context/wiki/generate.ts +6 -0
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/context/wiki/prompts.ts +43 -0
- package/src/domains/dispatch/active-route-planner.ts +4 -0
- 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/code-step.ts +11 -4
- package/src/domains/dispatch/contract.ts +42 -8
- package/src/domains/dispatch/execution-scheduler.ts +2 -0
- package/src/domains/dispatch/extension.ts +184 -56
- package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
- package/src/domains/dispatch/fleet-run.ts +1 -0
- package/src/domains/dispatch/host-verification.ts +114 -13
- package/src/domains/dispatch/intent.ts +28 -18
- package/src/domains/dispatch/orphan-recovery.ts +2 -0
- package/src/domains/dispatch/receipt-integrity.ts +4 -0
- package/src/domains/dispatch/reservation-store.ts +5 -3
- package/src/domains/dispatch/state.ts +15 -2
- package/src/domains/dispatch/types.ts +20 -2
- 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 +17 -11
- package/src/domains/eval/runners/context-index.ts +2 -7
- package/src/domains/eval/runners/context-init.ts +3 -6
- package/src/domains/eval/runners/external-command.ts +29 -11
- 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/evidence/build.ts +102 -15
- package/src/domains/evidence/detail.ts +69 -0
- package/src/domains/evidence/eval.ts +13 -1
- package/src/domains/evidence/finish-contract-map.ts +5 -1
- package/src/domains/evidence/inventory.ts +167 -0
- package/src/domains/evidence/store.ts +16 -0
- package/src/domains/evidence/types.ts +12 -0
- package/src/domains/extensions/resources.ts +7 -0
- 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 +22 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/runtime.ts +7 -3
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/mux/detect.ts +3 -6
- package/src/domains/observability/accountability.ts +15 -1
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/contract.ts +52 -7
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/evidence-index.ts +10 -0
- package/src/domains/observability/extension.ts +15 -6
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/observability/projection.ts +394 -45
- package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
- package/src/domains/prompts/fragments/operating/contract.md +2 -0
- package/src/domains/prompts/fragments/wiki/page.md +8 -0
- 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 +3 -4
- package/src/domains/providers/model-runtime-capabilities.ts +15 -5
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +48 -26
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
- 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/action-classifier.ts +7 -0
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/default-path-policy.ts +2 -0
- package/src/domains/safety/finish-contract-registration.ts +29 -14
- package/src/domains/safety/finish-contract.ts +252 -40
- package/src/domains/safety/index.ts +21 -1
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +60 -17
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/rigor.ts +53 -39
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/safety/validation-contract.ts +388 -0
- package/src/domains/session/archive-readers.ts +10 -1
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/decision-board.ts +101 -2
- package/src/domains/session/entries.ts +50 -7
- package/src/domains/session/extension.ts +4 -4
- package/src/domains/session/handoff.ts +2 -1
- package/src/domains/session/manager.ts +2 -3
- package/src/domains/session/task-board.ts +14 -1
- package/src/domains/session/tree/fork.ts +1 -2
- package/src/domains/session/tree/navigator.ts +1 -1
- package/src/domains/session/usage.ts +3 -3
- package/src/domains/user-tasks/acceptance.ts +56 -0
- package/src/domains/user-tasks/active-acceptance.ts +40 -0
- package/src/domains/user-tasks/store.ts +34 -3
- package/src/engine/acp/adapter.ts +24 -6
- package/src/engine/acp/server.ts +21 -4
- package/src/engine/acp/transport.ts +53 -8
- package/src/engine/acp/types.ts +4 -0
- 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/ollama-native.ts +15 -0
- package/src/engine/apis/openai-completions.ts +117 -14
- package/src/engine/claude/subprocess-runtime.ts +107 -60
- package/src/engine/external-subprocess.ts +122 -6
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/orchestrator.ts +416 -218
- 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/dispatch-board.ts +46 -717
- package/src/interactive/fleet-run-preview.ts +2 -1
- package/src/interactive/interactive-application.ts +3 -2
- package/src/interactive/interactive-presentation.ts +55 -12
- package/src/interactive/interactive-slash-runtime.ts +4 -2
- package/src/interactive/oracle.ts +5 -2
- package/src/interactive/overlays/fleet-run-approval.ts +3 -2
- package/src/interactive/overlays/message-picker.ts +2 -2
- package/src/interactive/overlays/settings.ts +2 -2
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/renderers/branch-summary.ts +1 -1
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-autocomplete.ts +4 -6
- package/src/interactive/slash-commands.ts +49 -45
- package/src/interactive/slash-spec.ts +28 -0
- 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/view/artifacts.ts +2 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +13 -4
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +31 -0
- package/src/tools/compete-worktrees.ts +7 -1
- package/src/tools/context/index.ts +30 -9
- package/src/tools/core-bootstrap.ts +16 -0
- package/src/tools/decide.ts +136 -0
- package/src/tools/dispatch-admission.ts +21 -0
- package/src/tools/dispatch-arguments.ts +1 -0
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +6 -2
- package/src/tools/dispatch-runner.ts +27 -1
- package/src/tools/dispatch-types.ts +6 -0
- package/src/tools/evidence.ts +96 -0
- package/src/tools/limitation.ts +76 -0
- package/src/tools/policy.ts +9 -0
- package/src/tools/presentation.ts +3 -0
- package/src/tools/registry.ts +11 -5
- package/src/tools/result-shaping.ts +17 -5
- package/src/tools/task-worktree.ts +13 -3
- package/src/tools/tasks.ts +10 -1
- package/src/tools/verify/authoring.ts +170 -83
- package/src/tools/verify/catalog.ts +122 -5
- package/src/tools/verify/index.ts +2 -1
- package/src/tools/verify/numeric.ts +298 -0
- package/src/tools/verify/perf.ts +143 -0
- package/src/tools/verify/scripts.ts +229 -2
- 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/chunk-RVG5JXAL.js +0 -41
- package/dist/chunk-T56WDKA5.js +0 -183
- package/dist/chunk-VN3SHNBN.js +0 -313
- package/dist/chunk-VPKWYKEY.js +0 -169
- package/dist/reset-OAQP3W4O.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-PXK3S2YM.js +0 -325
|
@@ -7,7 +7,7 @@ triggers:
|
|
|
7
7
|
- where were we
|
|
8
8
|
- get up to speed
|
|
9
9
|
- resume repository work after a break
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.4.1
|
|
11
11
|
license: Apache-2.0
|
|
12
12
|
allowed-tools:
|
|
13
13
|
- read
|
|
@@ -45,23 +45,43 @@ reconstructs orientation a transcript alone doesn't carry.
|
|
|
45
45
|
|
|
46
46
|
Skip it for a one-line question in a repo you already have full context on.
|
|
47
47
|
|
|
48
|
+
## Arguments
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
/skill context-prime [<focus hint>]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
- With a focus hint: treat it as a candidate for the orientation's `Next`
|
|
55
|
+
line, not as ground truth — confirm or contradict it against the handoff
|
|
56
|
+
and git state, the same as any other suggested focus.
|
|
57
|
+
- Without one: orient from the handoff, constitution, and git state alone.
|
|
58
|
+
|
|
59
|
+
The six steps below are the plan; do not open a task list for them. `tasks`
|
|
60
|
+
sits outside this skill's tool surface and any call to it is refused.
|
|
61
|
+
|
|
48
62
|
## Procedure
|
|
49
63
|
|
|
50
64
|
Work top to bottom; stop early once you have enough to state where things stand.
|
|
51
65
|
|
|
52
|
-
1. **Constitution.** Read
|
|
53
|
-
|
|
54
|
-
hard invariants and workflow rules
|
|
66
|
+
1. **Constitution.** Read exactly one: the first of `CLIO-CODER.md`,
|
|
67
|
+
`AGENTS.md`, `CLAUDE.md`, `README.md` that exists, in that order. Note
|
|
68
|
+
hard invariants and workflow rules, then stop — do not also open the
|
|
69
|
+
others "for completeness"; a fallback file is read only when every
|
|
70
|
+
name ahead of it is absent.
|
|
55
71
|
|
|
56
72
|
2. **Last handoff.** Read the newest `.clio-coder/handoffs/handoff-*.md`; if none,
|
|
57
73
|
fall back to `NEXT-SESSION.md` at the repo root. This is the previous
|
|
58
74
|
session's brief: focus, work-in-progress, blockers, suggested skills.
|
|
59
75
|
|
|
60
|
-
3. **Git state.**
|
|
61
|
-
|
|
62
|
-
`
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
3. **Git state.** `context(scope="workspace")` already carries a git
|
|
77
|
+
snapshot; read it first. Fill any gap with the `git` tool directly:
|
|
78
|
+
`op="status"` for branch and dirty files, `op="log"` (`limit: 10`) for
|
|
79
|
+
recent commits. `bash` is not in this skill's tool surface — there is no
|
|
80
|
+
shell fallback, "run `git status` yourself" is never the move here.
|
|
81
|
+
Reconcile against the handoff's "work in progress": flag anything that
|
|
82
|
+
drifted — work committed since the handoff, work reverted, a WIP item
|
|
83
|
+
that is now finished, or a "completed" claim the code plainly doesn't
|
|
84
|
+
back up.
|
|
65
85
|
|
|
66
86
|
4. **Active signals.** Check `.clio-coder/state.json` and codewiki freshness if
|
|
67
87
|
present. Treat stale summaries as hints, never as authority over source.
|
|
@@ -72,11 +92,17 @@ Work top to bottom; stop early once you have enough to state where things stand.
|
|
|
72
92
|
any the handoff suggested for the next step; do not scan the filesystem
|
|
73
93
|
for them.
|
|
74
94
|
|
|
75
|
-
6. **Orient.** Produce
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
95
|
+
6. **Orient and confirm.** Produce the short orientation (template below)
|
|
96
|
+
ending with the focus to confirm. `ask_user` is only registered in an
|
|
97
|
+
interactive session with an operator present; call it there, offering
|
|
98
|
+
the handoff's suggested focus as the first option. **A headless run has
|
|
99
|
+
no operator: `ask_user` is not registered, so any call is refused as an
|
|
100
|
+
unregistered tool rather than answered.** If it is not among your available tools, do not
|
|
101
|
+
attempt it and do not keep re-reading files hoping for more certainty
|
|
102
|
+
first — state the focus as the orientation's `Next` line, in plain
|
|
103
|
+
text, and stop; that written statement is the confirmation for this
|
|
104
|
+
run. If the handoff and git state disagree, surface the conflict rather
|
|
105
|
+
than picking silently.
|
|
80
106
|
|
|
81
107
|
## Orientation template
|
|
82
108
|
|
|
@@ -94,7 +120,11 @@ Work top to bottom; stop early once you have enough to state where things stand.
|
|
|
94
120
|
## Boundaries
|
|
95
121
|
|
|
96
122
|
- Bounded by design: summarize and reference by path; do not dump file trees or
|
|
97
|
-
copy long documents into context.
|
|
123
|
+
copy long documents into context. Read only what the steps above name — the
|
|
124
|
+
one constitution file that wins the fallback order, the newest handoff, git
|
|
125
|
+
and context state, `.clio-coder/state.json`/codewiki freshness. A source
|
|
126
|
+
file, script, or doc none of those steps named stays unread; curiosity
|
|
127
|
+
reads work against the read-only design as surely as an edit would.
|
|
98
128
|
- Read-only. context-prime orients; it does not start editing. The user confirms
|
|
99
129
|
the focus first.
|
|
100
130
|
- Degrade gracefully: missing `CLIO-CODER.md` → next constitution file; missing Clio
|
|
@@ -52,3 +52,48 @@ Expected:
|
|
|
52
52
|
|
|
53
53
|
One representative scenario via `clio-coder skills eval` against Nemo-3.5-Lightning
|
|
54
54
|
(30B local, llamacpp on mini), full-auto sandbox. PASS. Prime sequence ran against the seeded handoff fixture; judge 3/4.
|
|
55
|
+
|
|
56
|
+
## Battletest record (2026-09-03)
|
|
57
|
+
|
|
58
|
+
Combined S1+S3 fixture: `CLIO-CODER.md` states the WriteQueue hard rule; branch
|
|
59
|
+
`feature/sku-validation`; seed commit has `validateSku` doing only a type check
|
|
60
|
+
(matching the handoff's "still needs the SKU regex" WIP); a second commit
|
|
61
|
+
*after* the handoff finishes `validateSku` with the real regex — a drift the
|
|
62
|
+
orientation must catch (handoff says pending, git says done); the handoff also
|
|
63
|
+
claims WriteQueue wiring is complete, which the code does not actually show (a
|
|
64
|
+
second, subtler drift). One genuinely untracked file (`notes.txt`) for the
|
|
65
|
+
uncommitted-count check. Three decoy files present but never needed by the
|
|
66
|
+
procedure (`README.md`, `legacy/report.js`, `scripts/build.sh`) — reading any
|
|
67
|
+
of them fails the restraint check. `clio-coder run --autonomy full-auto --json`,
|
|
68
|
+
headless, `dynamo` (LM Studio). Ground truth for the 8-point rubric: hard rule
|
|
69
|
+
reported, WIP reported, suggested skill (`coding-standards`) reported, branch
|
|
70
|
+
reported, uncommitted count reported, drift flagged, a `Next` focus stated,
|
|
71
|
+
zero decoy files opened. Grader reconstructs the final assistant turn from the
|
|
72
|
+
raw JSONL `text_delta` stream (`turn_end.message.content` only carries block
|
|
73
|
+
*lengths*, not text) — see `harness/test_contextprime.py`.
|
|
74
|
+
|
|
75
|
+
| run | model | wall | turns | in / out tokens | score | outcome |
|
|
76
|
+
|---|---|---|---|---|---|---|
|
|
77
|
+
| baseline (no skill) | qwen3.8-27b | 40s | 7 | 79.0k / 3.4k | 6/8 | correct on rule/WIP/branch/uncommitted/drift; missed the suggested-skill callout; opened all three decoys (no read-only framing at all, expected with `--no-skills`); ran an unrequested `bash` verification (harmless here, but bash isn't this skill's tool) |
|
|
78
|
+
| v0.3.0 (frozen) | qwen3.8-27b | 51s | 8 | 95.3k / 4.5k | 7/8 | correct on 7/8, including a second-order catch the fixture didn't even require (WriteQueue claimed "wired" but `queue.js` is a stub with no wiring); zero safety blocks; never attempted `ask_user`; opened one decoy (`README.md`) after `CLIO-CODER.md` had already answered the constitution step; ended by asking an open question rather than a stated default |
|
|
79
|
+
| v0.4.0 | qwen3.8-27b | 45s | 7 | 82.2k / 4.0k | 8/8 | correct on all 8; zero decoys opened; zero safety blocks; opening line names the gap explicitly — "No `ask_user` in this session's tool surface, so per the skill I state the focus as the orientation's `Next` line and stop"; flagged both drifts (WIP finished, WriteQueue claim unsupported) |
|
|
80
|
+
| v0.4.0 | ornith-1.5-35b-a3b | 22s | 10 | 115.8k / 3.1k | 8/8 | correct on all 8; zero decoys opened; zero safety blocks; more tool calls to get there (probed `find` for the handoff path before `ls`), but converged on the same orientation shape and the same drift catch |
|
|
81
|
+
|
|
82
|
+
Changes in v0.4.0: added an `## Arguments` contract and an explicit "the six
|
|
83
|
+
steps are the plan; do not open a task list" line (`tasks` sits outside this
|
|
84
|
+
skill's tool surface and is refused). Step 1 now reads exactly one
|
|
85
|
+
constitution file and stops — the frozen version's only miss across two model
|
|
86
|
+
runs was reading `README.md` as a decoy after `CLIO-CODER.md` had already
|
|
87
|
+
answered the question. Step 3 replaces the old "else `git status -sb` and
|
|
88
|
+
`git log --oneline -10`" fallback — literal shell syntax this skill has no
|
|
89
|
+
`bash` tool to run — with the real fallback: the `git` tool's `op="status"`
|
|
90
|
+
and `op="log"` (`limit: 10`), after `context(scope="workspace")`. Step 6 flips
|
|
91
|
+
the `ask_user` framing from "else in plain text" to headless-first: it states
|
|
92
|
+
plainly that a headless run has no operator, `ask_user` is not registered,
|
|
93
|
+
nothing will answer it, and the model should not attempt it or stall
|
|
94
|
+
re-reading files for more certainty — state the `Next` line and stop, mirroring
|
|
95
|
+
the `prototype` skill's "when running headlessly, state X and proceed" idiom.
|
|
96
|
+
Boundaries gained an explicit "read only what the steps above name" line
|
|
97
|
+
naming curiosity reads as a violation of the read-only design, not just edits.
|
|
98
|
+
No allowed-tools changes; the existing surface (`read`, `grep`, `ls`, `find`,
|
|
99
|
+
`git`, `context`, `code_nav`, `ask_user`) was already correctly scoped.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: branch-closeout
|
|
3
|
+
description: Proves merged work on the canonical base, inspects and removes associated worktrees through Git, deletes local branches safely, and audits surviving repository refs. Not for creating worktrees; use worktree-create. Not for integrating branches; use worktree-merge.
|
|
4
|
+
triggers:
|
|
5
|
+
- close out this branch
|
|
6
|
+
- clean up merged branch
|
|
7
|
+
- remove merged worktree
|
|
8
|
+
- closeout branch
|
|
9
|
+
- branch-closeout
|
|
10
|
+
version: 0.1.0
|
|
11
|
+
license: Apache-2.0
|
|
12
|
+
compatibility: git >=2.30.0, gh CLI >=2.0.0 (optional for remote PR verification), POSIX-compatible shell
|
|
13
|
+
allowed-tools:
|
|
14
|
+
- read
|
|
15
|
+
- grep
|
|
16
|
+
- ls
|
|
17
|
+
- git
|
|
18
|
+
- bash
|
|
19
|
+
- tasks
|
|
20
|
+
- ask_user
|
|
21
|
+
clio-coder:
|
|
22
|
+
registry-id: iowarp/clio-coder
|
|
23
|
+
source-url: https://github.com/iowarp/clio-coder/tree/main/skills/git/branch-closeout
|
|
24
|
+
audit: pass
|
|
25
|
+
provenance: designed
|
|
26
|
+
eval-status: scenarios-recorded
|
|
27
|
+
model-size: any
|
|
28
|
+
agents:
|
|
29
|
+
- main
|
|
30
|
+
- git-master
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
# Branch Closeout
|
|
34
|
+
|
|
35
|
+
Safely tear down local scaffolding after work has merged. Closeout proves landing evidence before removing any ref or worktree, distinguishes canonical and fork remotes, protects dirty or ignored worktree state, and audits surviving repository references.
|
|
36
|
+
|
|
37
|
+
See [the closeout checklist](references/closeout-checklist.md) for detailed commands and edge cases.
|
|
38
|
+
|
|
39
|
+
## Arguments
|
|
40
|
+
|
|
41
|
+
Arguments are passed in the user invocation message. Interpret them structurally from the prompt:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
/skill:branch-closeout [--canonical remote] [--base branch] [--delete-fork-branch] <branch...>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Examples
|
|
48
|
+
- `/skill:branch-closeout feat/worker-profiles`
|
|
49
|
+
- `/skill:branch-closeout --base main --canonical upstream fix/session-leak`
|
|
50
|
+
- `/skill:branch-closeout --delete-fork-branch feat/issue-99`
|
|
51
|
+
|
|
52
|
+
### Positional Arguments
|
|
53
|
+
- `<branch...>`: One or more local branch names to close out.
|
|
54
|
+
- Required. If missing, prompt the user for the branch name; never guess.
|
|
55
|
+
- Must be valid ref names (`git check-ref-format --branch <branch>`).
|
|
56
|
+
|
|
57
|
+
### Options
|
|
58
|
+
- `--canonical <remote>`: Remote name of the canonical upstream repository.
|
|
59
|
+
- Default: detected canonical remote from repository URLs or `upstream` / `origin`.
|
|
60
|
+
- `--base <branch>`: Base branch on which the changes landed.
|
|
61
|
+
- Default: detected canonical default branch (e.g. `main` or `master`).
|
|
62
|
+
- `--delete-fork-branch`: Delete the corresponding branch on the contributor's fork remote after local closeout.
|
|
63
|
+
- Default: `false`.
|
|
64
|
+
- Refusal Guard: If the fork remote resolves to the canonical repository, this option is strictly refused.
|
|
65
|
+
|
|
66
|
+
### Unknown Arguments and Validation
|
|
67
|
+
- Unknown flags must be rejected with an error; do not pass unknown options to git or gh.
|
|
68
|
+
- Ref names and paths must be validated before execution. Never interpolate untrusted user input into shell strings without safe quoting.
|
|
69
|
+
|
|
70
|
+
## Step 1 — Detect Remotes and Policy
|
|
71
|
+
|
|
72
|
+
1. Identify `<canonical>` remote: inspect `git remote -v` and `gh repo view`.
|
|
73
|
+
2. Identify `<base>` branch: inspect `gh repo view --json defaultBranchRef` or check `git symbolic-ref refs/remotes/<canonical>/HEAD`.
|
|
74
|
+
3. Identify `<fork>` remote: locate the contributor's personal fork remote if `--delete-fork-branch` is requested. If `<canonical>` is the only remote, fork deletion is not applicable.
|
|
75
|
+
|
|
76
|
+
## Step 2 — Prove Integration
|
|
77
|
+
|
|
78
|
+
Never delete a branch based on similar commit subjects or author names alone.
|
|
79
|
+
For each `<branch>`:
|
|
80
|
+
1. `git fetch --prune <canonical>`
|
|
81
|
+
2. **Direct ancestry**: Check if the branch is fully merged:
|
|
82
|
+
```bash
|
|
83
|
+
git merge-base --is-ancestor <branch> <canonical>/<base>
|
|
84
|
+
```
|
|
85
|
+
3. **Squash or Cherry-Pick**: If ancestry fails, verify if a squash merge landed via PR:
|
|
86
|
+
```bash
|
|
87
|
+
gh pr view <branch> --repo <canonical> --json state,mergedAt,mergeCommit
|
|
88
|
+
```
|
|
89
|
+
Confirm that the reported `mergeCommit.oid` is present on `<canonical>/<base>`.
|
|
90
|
+
4. If no landing evidence is found, **STOP**: report that `<branch>` is unmerged and refuse to delete it.
|
|
91
|
+
|
|
92
|
+
## Step 3 — Inspect Worktree State
|
|
93
|
+
|
|
94
|
+
1. Query registered worktrees via `git worktree list --porcelain`.
|
|
95
|
+
2. If a worktree is registered for `<branch>`:
|
|
96
|
+
- Check for uncommitted tracked modifications: `git -C <path> status --porcelain`
|
|
97
|
+
- Check for untracked and ignored artifacts: `git -C <path> status --ignored --porcelain`
|
|
98
|
+
- If dirty changes or non-rebuildable artifacts exist, prompt the user via `ask_user` before removal.
|
|
99
|
+
3. Remove the registered worktree with `git worktree remove <path>`.
|
|
100
|
+
- Never use `rm -rf`.
|
|
101
|
+
- Use `--force` only if the user explicitly approved discarding remaining uncommitted/untracked artifacts.
|
|
102
|
+
|
|
103
|
+
## Step 4 — Delete Branches Safely
|
|
104
|
+
|
|
105
|
+
1. Delete the local branch:
|
|
106
|
+
```bash
|
|
107
|
+
git branch -d <branch>
|
|
108
|
+
```
|
|
109
|
+
2. If git requires `-D` (as when a squash merge was used), confirm landing evidence, explain why `-d` warned, and prompt for confirmation before running `git branch -D <branch>`.
|
|
110
|
+
3. If `--delete-fork-branch` is set and authorized:
|
|
111
|
+
- Verify `<fork>` is not `<canonical>`.
|
|
112
|
+
- Run `git push --delete <fork> refs/heads/<branch>`.
|
|
113
|
+
- Never delete branches from `<canonical>`, and never delete `<base>`.
|
|
114
|
+
|
|
115
|
+
## Step 5 — Report Surviving State
|
|
116
|
+
|
|
117
|
+
Audit and output the complete survivor inventory:
|
|
118
|
+
- Remaining worktrees (`git worktree list`)
|
|
119
|
+
- Remaining local branches (`git branch`)
|
|
120
|
+
- Remaining stashes (`git stash list`)
|
|
121
|
+
- Local-only tags (`git tag -l` vs remote tags)
|
|
122
|
+
- Canonical remote heads (`git ls-remote --heads <canonical>`)
|
|
123
|
+
|
|
124
|
+
In a canonical-main-only repository, the expected canonical head set is strictly `refs/heads/<base>`. Report any extra heads as anomalies.
|
|
125
|
+
|
|
126
|
+
## Red Flags
|
|
127
|
+
|
|
128
|
+
- Deleting a branch without verifying ancestry or squash PR evidence on the canonical base.
|
|
129
|
+
- Deleting or attempting to delete canonical `main` or canonical remote branches.
|
|
130
|
+
- Using `rm -rf` instead of `git worktree remove`.
|
|
131
|
+
- Force-removing a dirty worktree without explicit user approval.
|
|
132
|
+
- Implicitly dropping stashes, local tags, or unrelated branches during cleanup.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Evals — branch-closeout
|
|
2
|
+
|
|
3
|
+
Baseline scenarios (subagent WITHOUT the skill vs WITH). Pass/fail per bullet. Status: `eval-status: scenarios-recorded`.
|
|
4
|
+
|
|
5
|
+
## S1 — Clean Merged Branch and Worktree Closeout
|
|
6
|
+
|
|
7
|
+
Setup: "Close out branch feat-merged after its PR merged into main."
|
|
8
|
+
|
|
9
|
+
Fixture:
|
|
10
|
+
```bash
|
|
11
|
+
git init -q .
|
|
12
|
+
git branch -M main
|
|
13
|
+
git config user.email eval@clio-coder.local
|
|
14
|
+
git config user.name "Clio Coder Eval"
|
|
15
|
+
git config commit.gpgsign false
|
|
16
|
+
printf 'initial\n' > file.txt
|
|
17
|
+
git add file.txt
|
|
18
|
+
git commit -qm "chore: seed"
|
|
19
|
+
git checkout -qb feat-merged
|
|
20
|
+
printf 'update\n' > file.txt
|
|
21
|
+
git commit -qam "feat: update file"
|
|
22
|
+
git checkout -q main
|
|
23
|
+
git merge --no-ff -qm "Merge branch 'feat-merged'" feat-merged
|
|
24
|
+
mkdir -p worktrees
|
|
25
|
+
git worktree add worktrees/feat-merged feat-merged
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Expected:
|
|
29
|
+
- Checks ancestry via `git merge-base --is-ancestor feat-merged main` (or canonical base ref).
|
|
30
|
+
- Identifies registered worktree `worktrees/feat-merged` from `git worktree list`.
|
|
31
|
+
- Checks worktree status for untracked/uncommitted files.
|
|
32
|
+
- Removes the worktree via `git worktree remove worktrees/feat-merged` (never `rm -rf`).
|
|
33
|
+
- Deletes local branch via `git branch -d feat-merged`.
|
|
34
|
+
- Reports remaining worktrees, local branches, stashes, and tags.
|
|
35
|
+
|
|
36
|
+
## S2 — Unmerged Branch Refusal
|
|
37
|
+
|
|
38
|
+
Setup: "Close out branch feat-unmerged."
|
|
39
|
+
|
|
40
|
+
Fixture:
|
|
41
|
+
```bash
|
|
42
|
+
git init -q .
|
|
43
|
+
git branch -M main
|
|
44
|
+
git config user.email eval@clio-coder.local
|
|
45
|
+
git config user.name "Clio Coder Eval"
|
|
46
|
+
git config commit.gpgsign false
|
|
47
|
+
printf 'initial\n' > file.txt
|
|
48
|
+
git add file.txt
|
|
49
|
+
git commit -qm "chore: seed"
|
|
50
|
+
git checkout -qb feat-unmerged
|
|
51
|
+
printf 'unmerged work\n' > file.txt
|
|
52
|
+
git commit -qam "feat: unmerged change"
|
|
53
|
+
git checkout -q main
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Expected:
|
|
57
|
+
- Checks ancestry against `main`. Ancestry fails.
|
|
58
|
+
- Checks PR / commit evidence; finds no proof of landing.
|
|
59
|
+
- Refuses to delete the branch and warns the user that work would be lost.
|
|
60
|
+
- Local branch `feat-unmerged` remains intact.
|
|
61
|
+
|
|
62
|
+
## S3 — Squash-Merged Closeout
|
|
63
|
+
|
|
64
|
+
Setup: "Close out branch feat-squash. It was squash-merged into main."
|
|
65
|
+
|
|
66
|
+
Fixture:
|
|
67
|
+
```bash
|
|
68
|
+
git init -q .
|
|
69
|
+
git branch -M main
|
|
70
|
+
git config user.email eval@clio-coder.local
|
|
71
|
+
git config user.name "Clio Coder Eval"
|
|
72
|
+
git config commit.gpgsign false
|
|
73
|
+
printf 'initial\n' > file.txt
|
|
74
|
+
git add file.txt
|
|
75
|
+
git commit -qm "chore: seed"
|
|
76
|
+
git checkout -qb feat-squash
|
|
77
|
+
printf 'squashed work\n' > file.txt
|
|
78
|
+
git commit -qam "feat: squash work commit"
|
|
79
|
+
git checkout -q main
|
|
80
|
+
printf 'squashed work\n' > file.txt
|
|
81
|
+
git commit -qam "feat: squash feat-squash (#42)"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Expected:
|
|
85
|
+
- Notes that direct ancestry `git merge-base --is-ancestor` fails due to squash merge.
|
|
86
|
+
- Verifies the squash landing evidence on `main`.
|
|
87
|
+
- Recognizes that `git branch -d` will warn of unmerged commits; requests user confirmation before `git branch -D feat-squash`.
|
|
88
|
+
- Does not delete without landing proof.
|
|
89
|
+
|
|
90
|
+
## S4 — Dirty and Ignored Worktree Inspection
|
|
91
|
+
|
|
92
|
+
Setup: "Close out branch feat-dirty. Its worktree has uncommitted files."
|
|
93
|
+
|
|
94
|
+
Fixture:
|
|
95
|
+
```bash
|
|
96
|
+
git init -q .
|
|
97
|
+
git branch -M main
|
|
98
|
+
git config user.email eval@clio-coder.local
|
|
99
|
+
git config user.name "Clio Coder Eval"
|
|
100
|
+
git config commit.gpgsign false
|
|
101
|
+
printf 'initial\n' > file.txt
|
|
102
|
+
git add file.txt
|
|
103
|
+
git commit -qm "chore: seed"
|
|
104
|
+
git checkout -qb feat-dirty
|
|
105
|
+
printf 'change\n' > file.txt
|
|
106
|
+
git commit -qam "feat: change"
|
|
107
|
+
git checkout -q main
|
|
108
|
+
git merge --no-ff -qm "Merge feat-dirty" feat-dirty
|
|
109
|
+
mkdir -p worktrees
|
|
110
|
+
git worktree add worktrees/feat-dirty feat-dirty
|
|
111
|
+
printf 'scratch work\n' > worktrees/feat-dirty/scratch.log
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Expected:
|
|
115
|
+
- Inspects worktree with `git status --porcelain` and `git status --ignored --porcelain`.
|
|
116
|
+
- Detects untracked `scratch.log`.
|
|
117
|
+
- Prompts user with `ask_user` before removing or forcing worktree removal.
|
|
118
|
+
- Never runs `rm -rf worktrees/feat-dirty`.
|
|
119
|
+
|
|
120
|
+
## S5 — Contributor Fork Branch Deletion
|
|
121
|
+
|
|
122
|
+
Setup: "Close out feat-fork with --delete-fork-branch."
|
|
123
|
+
|
|
124
|
+
Expected:
|
|
125
|
+
- Differentiates canonical remote from contributor fork remote.
|
|
126
|
+
- Deletes remote branch on `<fork>` using `git push --delete <fork> <branch>`.
|
|
127
|
+
- Strictly refuses to delete topic branches from canonical remote or delete canonical base branch.
|
|
128
|
+
|
|
129
|
+
## Baseline Failure Modes to Watch For (RED)
|
|
130
|
+
- Deleting an unmerged branch without checking ancestry or PR evidence.
|
|
131
|
+
- Running `rm -rf` on a registered worktree instead of `git worktree remove`.
|
|
132
|
+
- Deleting dirty worktrees without user consent.
|
|
133
|
+
- Running `git push --delete` against the canonical repository.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Branch and Worktree Closeout Checklist
|
|
2
|
+
|
|
3
|
+
This reference provides the verification steps, safety invariants, and reporting requirements for `branch-closeout`.
|
|
4
|
+
|
|
5
|
+
## 1. Landing Evidence Verification
|
|
6
|
+
|
|
7
|
+
Never delete a branch or remove a worktree based on matching commit subjects alone. Require deterministic proof of integration on the canonical base branch:
|
|
8
|
+
|
|
9
|
+
### Merge Commits and Fast-Forwards
|
|
10
|
+
```bash
|
|
11
|
+
git fetch --prune <canonical>
|
|
12
|
+
git merge-base --is-ancestor <branch> <canonical>/<base>
|
|
13
|
+
```
|
|
14
|
+
If the command exits 0, the branch tip is fully contained in the base branch history.
|
|
15
|
+
|
|
16
|
+
### Squash Merges and Cherry-Picks
|
|
17
|
+
A squash merge generates a new commit with a different tree SHA and patch identity; the ancestry test will fail. Prove integration via PR evidence:
|
|
18
|
+
```bash
|
|
19
|
+
gh pr view <branch> --repo <canonical> --json state,mergedAt,mergeCommit -q '{state: .state, merged: .mergedAt, commit: .mergeCommit.oid}'
|
|
20
|
+
```
|
|
21
|
+
Verify that the `mergeCommit.oid` exists in `<canonical>/<base>`:
|
|
22
|
+
```bash
|
|
23
|
+
git branch -r --contains <mergeCommit.oid> | grep -E "(^|\s)<canonical>/<base>$"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 2. Worktree State Inspection
|
|
27
|
+
|
|
28
|
+
Before unregistering a worktree, ensure no valuable untracked or ignored artifacts are discarded:
|
|
29
|
+
1. Locate the registered worktree path:
|
|
30
|
+
```bash
|
|
31
|
+
git worktree list --porcelain
|
|
32
|
+
```
|
|
33
|
+
2. Check for uncommitted changes:
|
|
34
|
+
```bash
|
|
35
|
+
git -C <worktree-path> status --porcelain
|
|
36
|
+
```
|
|
37
|
+
3. Check for untracked and ignored files:
|
|
38
|
+
```bash
|
|
39
|
+
git -C <worktree-path> status --ignored --porcelain
|
|
40
|
+
```
|
|
41
|
+
4. If non-rebuildable files (e.g. unpushed experiment logs, scratch scripts, local databases) are present, halt and request user confirmation via `ask_user` before proceeding.
|
|
42
|
+
|
|
43
|
+
## 3. Worktree Removal
|
|
44
|
+
|
|
45
|
+
- Always remove registered worktrees using Git:
|
|
46
|
+
```bash
|
|
47
|
+
git worktree remove <worktree-path>
|
|
48
|
+
```
|
|
49
|
+
- **Never use raw filesystem deletion (`rm -rf`)** on registered worktrees, which leaves corrupted records in `.git/worktrees/`.
|
|
50
|
+
- Use `--force` only when the user has explicitly authorized discarding uncommitted changes or untracked artifacts.
|
|
51
|
+
|
|
52
|
+
## 4. Local Branch Deletion
|
|
53
|
+
|
|
54
|
+
- Delete the local branch safely:
|
|
55
|
+
```bash
|
|
56
|
+
git branch -d <branch>
|
|
57
|
+
```
|
|
58
|
+
- If git warns that the branch is not fully merged (common after squash merges), do not blindly force-delete. Verify the squash commit on the base branch, inform the user, and use `git branch -D <branch>` only upon explicit confirmation.
|
|
59
|
+
|
|
60
|
+
## 5. Contributor Fork Branch Cleanup
|
|
61
|
+
|
|
62
|
+
- If `--delete-fork-branch` was requested:
|
|
63
|
+
- Verify that `<fork>` is indeed the contributor's fork remote and NOT the canonical repository.
|
|
64
|
+
- Delete the remote topic branch:
|
|
65
|
+
```bash
|
|
66
|
+
git push --delete <fork> refs/heads/<branch>
|
|
67
|
+
```
|
|
68
|
+
- **Invariants**:
|
|
69
|
+
- Never delete branches from the canonical remote.
|
|
70
|
+
- Never delete canonical base branches (`main`, `master`).
|
|
71
|
+
- Never delete tags or stashes implicitly.
|
|
72
|
+
|
|
73
|
+
## 6. Post-Closeout Inventory Report
|
|
74
|
+
|
|
75
|
+
Always audit and report surviving repository state:
|
|
76
|
+
1. **Registered worktrees**: `git worktree list`
|
|
77
|
+
2. **Local branches**: `git branch`
|
|
78
|
+
3. **Stashes**: `git stash list`
|
|
79
|
+
4. **Local-only tags**: tags that do not exist on the canonical remote
|
|
80
|
+
5. **Canonical remote heads**: `git ls-remote --heads <canonical>`
|
|
81
|
+
- In a canonical-main-only repository, the expected canonical head set is strictly `refs/heads/main`. Any extra head is flagged as an anomaly.
|