@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
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Release-Cut Checklist
|
|
2
|
+
|
|
3
|
+
> **Visual blueprint:** The source checkout includes the complete
|
|
4
|
+
> [Release-Cut Checklist visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/release_checklist_blueprint.html).
|
|
5
|
+
|
|
6
|
+
This document provides the standard procedure for cutting a release of Clio Coder.
|
|
7
|
+
Releases are cut from an annotated tag on canonical main. The GitHub release is
|
|
8
|
+
produced by GitHub Actions, while package publication to npm is an authorized manual
|
|
9
|
+
step performed by a maintainer. Everything before the authorization boundary is local,
|
|
10
|
+
repeatable, and reversible. Every step following the authorization boundary affects
|
|
11
|
+
canonical remote state or publishes immutable packages.
|
|
12
|
+
|
|
13
|
+
## Part 1: Candidate Preparation on a Local Compact Branch
|
|
14
|
+
|
|
15
|
+
Maintainers prepare release candidates on a local-only compact branch named after
|
|
16
|
+
the version without punctuation, such as `v044` for version `0.4.4`. Dotted branch
|
|
17
|
+
names like `v0.4.4` are forbidden because dotted names belong exclusively to immutable
|
|
18
|
+
tags. The canonical repository hosts only `main`, and no release candidate branch is
|
|
19
|
+
ever pushed to canonical origin.
|
|
20
|
+
|
|
21
|
+
1. Ensure the working tree is clean and updated from canonical origin:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
git checkout -b v044 origin/main
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
2. Update `version` in `package.json` to the release version.
|
|
28
|
+
|
|
29
|
+
3. Retitle the active changelog section in `CHANGELOG.md` from `## Unreleased` to
|
|
30
|
+
`## <version> - YYYY-MM-DD`. The release gate in `scripts/check-release.mjs` requires
|
|
31
|
+
the first version header to match the version in `package.json`.
|
|
32
|
+
|
|
33
|
+
4. Commit the release candidate preparation locally:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
git commit -am "chore(release): prepare <version>"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Part 2: Local Candidate Verification Gate
|
|
40
|
+
|
|
41
|
+
Run deterministic local checks on the candidate commit before requesting authorization.
|
|
42
|
+
|
|
43
|
+
1. Execute the release gate:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm run ci:release
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
This gate runs `npm run ci` followed by `node scripts/check-release.mjs`. It verifies
|
|
50
|
+
type checking, Biome formatting, hygiene rules, architecture boundary invariants,
|
|
51
|
+
the build, the contract and smoke test suites, trace-viewer tests, and dist integrity.
|
|
52
|
+
The packaging audit checks executable entry shebangs, ensures forbidden files like
|
|
53
|
+
source maps and caches are omitted, verifies runtime resources from `scripts/release-manifest.json`,
|
|
54
|
+
and enforces size limits (10 MB packed, 50 MB unpacked).
|
|
55
|
+
|
|
56
|
+
2. Optionally validate a live model turn against a configured target:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
node dist/cli/index.js run --target <id> --autonomy read-only "Reply with exactly: CLIO_LIVE_OK"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
3. Run the real-home smoke test against the operator configuration:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npm run smoke:real-home -- --target <id> --strict
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
This runs `scripts/smoke-real-home.sh` using a copy of operator settings in a scratch
|
|
69
|
+
`CLIO_CODER_HOME`. The `--strict` flag ensures any failing rows from `clio-coder doctor`
|
|
70
|
+
fail the smoke run.
|
|
71
|
+
|
|
72
|
+
4. Inspect the npm package contents with a dry run:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npm pack --dry-run
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
5. Validate an installed tarball in a clean temporary directory:
|
|
79
|
+
|
|
80
|
+
Create a temporary directory, pack the tarball, install it via npm, and verify
|
|
81
|
+
installed binary lifecycle commands in an isolated environment with an empty `CLIO_CODER_HOME`:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
clio-coder --version
|
|
85
|
+
clio-coder --help
|
|
86
|
+
clio-coder doctor
|
|
87
|
+
clio-coder uninstall --dry-run
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Part 3: Candidate Review and Authorization Boundary
|
|
91
|
+
|
|
92
|
+
Before touching any remote ref, summarize the candidate for maintainer review:
|
|
93
|
+
- Candidate commit SHA
|
|
94
|
+
- Results of `npm run ci:release`
|
|
95
|
+
- Verification output from real-home smoke and installed package testing
|
|
96
|
+
- Changelog contents and target npm version
|
|
97
|
+
|
|
98
|
+
Every step below changes canonical remote refs, creates a release, or publishes
|
|
99
|
+
an immutable package. Do not execute any of them without explicit maintainer authorization.
|
|
100
|
+
|
|
101
|
+
## Part 4: Fast-forward Canonical Main
|
|
102
|
+
|
|
103
|
+
1. Fetch the latest remote status from origin:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
git fetch origin
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
2. Confirm `origin/main` is an ancestor of the local candidate branch.
|
|
110
|
+
|
|
111
|
+
3. Fast-forward local `main` to the candidate commit:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
git checkout main
|
|
115
|
+
git merge --ff-only v044
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
4. Verify that local `main` matches the reviewed candidate SHA exactly.
|
|
119
|
+
|
|
120
|
+
5. Push `main` to canonical origin:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
git push origin refs/heads/main:refs/heads/main
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
No release branch is ever pushed to origin.
|
|
127
|
+
|
|
128
|
+
## Part 5: Tagging and GitHub Release
|
|
129
|
+
|
|
130
|
+
1. Wait for GitHub Actions CI on canonical `main` to finish green for the pushed SHA.
|
|
131
|
+
|
|
132
|
+
2. Create an annotated git tag matching the version:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
git tag -a v<version> -m "Clio Coder <version>"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
3. Push only the release tag to canonical origin:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
git push origin refs/tags/v<version>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
4. Pushing the tag triggers `.github/workflows/release.yml`. The workflow:
|
|
145
|
+
- Verifies the tag matches `package.json`.
|
|
146
|
+
- Runs `npm run ci:release` on the tagged commit.
|
|
147
|
+
- Packs the release tarball with `npm pack`.
|
|
148
|
+
- Extracts the version changelog section from `CHANGELOG.md`.
|
|
149
|
+
- Creates the GitHub Release with the tarball attached using `gh release create`.
|
|
150
|
+
|
|
151
|
+
5. Inspect the GitHub Actions workflow run and confirm the GitHub release is published.
|
|
152
|
+
|
|
153
|
+
## Part 6: Package Publication to npm
|
|
154
|
+
|
|
155
|
+
Publishing to npm is a manual maintainer step performed from the tagged commit.
|
|
156
|
+
|
|
157
|
+
1. Confirm authentication and registry status:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
npm whoami
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
2. Confirm the version does not already exist on npm:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
npm view @iowarp/clio-coder@<version>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
3. Publish the package from the tagged checkout:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
npm publish
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
The `prepublishOnly` lifecycle script sets `CLIO_CODER_RELEASE_CONTEXT=publish` and
|
|
176
|
+
re-executes `npm run ci:release` as a mandatory release-mode verification gate before
|
|
177
|
+
files are uploaded. When publishing a pre-release channel, append `--tag <channel>`.
|
|
178
|
+
|
|
179
|
+
## Part 7: Post-Publish Verification and Branch Closeout
|
|
180
|
+
|
|
181
|
+
1. Verify package availability on npm:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
npm view @iowarp/clio-coder version
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
2. On a clean machine, install the package globally and run basic lifecycle checks:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
npm install -g @iowarp/clio-coder@<version>
|
|
191
|
+
clio-coder --version
|
|
192
|
+
clio-coder doctor
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
3. Remove the local compact candidate branch:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
git branch -d v044
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
The canonical repository remains in its steady state containing only `main` and immutable tags.
|
|
202
|
+
|
|
203
|
+
## Part 8: Rollback and Error Recovery
|
|
204
|
+
|
|
205
|
+
npm package publication is irreversible. A published version cannot be removed or overwritten.
|
|
206
|
+
Any issue discovered after publication must be resolved through a subsequent release. Prior
|
|
207
|
+
to pushing git tags or publishing to npm, local candidate commits can be amended or reset freely.
|
|
@@ -5,19 +5,19 @@
|
|
|
5
5
|
|
|
6
6
|
Scientific software development cannot treat simple file presence as proof of correctness. A simulation script that crashes on rank 48, or writes out NetCDF arrays filled with `NaN`s, may still successfully write a file to the disk.
|
|
7
7
|
|
|
8
|
-
Clio Coder recognizes **scientific validation contract
|
|
8
|
+
Clio Coder recognizes a **scientific validation contract** as an opt-in signal for a higher evidence bar. One strict loader in `src/domains/safety/validation-contract.ts` reads the first of `.clio-coder/validation.yaml`, `.clio-coder/validation.yml`, `validation.yaml`, or `validation.yml` at the workspace root and parses it under the version-1 schema below. A contract that parses raises the default rigor level to `high`. A contract that does not parse (empty, malformed YAML, unknown field, unsupported version, over the 256 KiB cap) leaves rigor at `normal` and is diagnosed with the exact fault: `clio-coder doctor` reports it in the `validation contract` row, the interactive session prints it once at startup, and `clio-coder verifiers author` repeats it. A Markdown `VALIDATION.md` is recognized as present but is never parsed and never raises rigor on its own; it is advisory prose for developers, project agents, and external validators.
|
|
9
9
|
|
|
10
|
-
This advisory convention is separate from the executable project verifier catalog at `.clio-coder/verifiers.yaml`. The verifier catalog has a strict version
|
|
10
|
+
This advisory convention is separate from the executable project verifier catalog at `.clio-coder/verifiers.yaml`. The verifier catalog has a strict schema (version 2, with version 1 still loading) and admits exact argv vectors to the `verify` tool. Scientific validation contracts and handbook expectations do not grant command authority: prose such as `validators: ["python tools/check_grid.py"]` remains guidance until the project owner confirms the equivalent argv, cwd, timeout, and tags in `verifiers.yaml`. The executable catalog runs only the explicitly declared process vector through safe-exec; a `numeric-compare` or `perf-budget` entry adds a judgement of that command's output or wall time, never an interpretation of the contract's artifact expectations.
|
|
11
11
|
|
|
12
|
-
`clio-coder verifiers author`
|
|
12
|
+
`clio-coder verifiers author` reads the parsed contract's `validators` entries through the same loader and proposes catalog checks. It labels those vectors as project-declared and shows their source index, exact argv, cwd, timeout, tags, catalog path, and resulting execution authority. This inspection is read-only. A command string with sound quoting and no shell operator can be represented as argv for review; shell expansion, pipes, redirection, environment assignments, incomplete quoting, and Markdown prose receive a manual JSON-argv diagnostic. Nothing becomes executable and nothing is dry-run until the operator confirms the catalog write with `--yes`.
|
|
13
13
|
|
|
14
|
-
The convention below is a recommended shape for scientific projects that need to document expected dimensions, attributes, numerical tolerances, scheduler context, and verification commands for scientific artifacts. Developed at the [Gnosis Research Center (GRC)](https://grc.iit.edu) at Illinois Tech as part of the NSF-funded scientific-software context (NSF Award [#2411318](https://www.nsf.gov/awardsearch/showAward?AWD_ID=2411318)), this convention links execution metadata with physical output checks
|
|
14
|
+
The convention below is a recommended shape for scientific projects that need to document expected dimensions, attributes, numerical tolerances, scheduler context, and verification commands for scientific artifacts. Developed at the [Gnosis Research Center (GRC)](https://grc.iit.edu) at Illinois Tech as part of the NSF-funded scientific-software context (NSF Award [#2411318](https://www.nsf.gov/awardsearch/showAward?AWD_ID=2411318)), this convention links execution metadata with physical output checks; the harness executes a check only through a matching `verifiers.yaml` entry.
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
18
|
## Validation Contract Convention
|
|
19
19
|
|
|
20
|
-
A validation contract
|
|
20
|
+
A validation contract is a YAML file under the version-1 schema; `VALIDATION.md` is the Markdown companion for prose that the schema cannot hold. A custom or project-level agent (such as a local `scientific-validator` agent example under `.clio-coder/agents/`) or the developer can draft these files and commit them next to the research code. The loader rejects unknown fields at every level and names the field it rejected, so a typo is a diagnostic rather than a silently ignored key.
|
|
21
21
|
|
|
22
22
|
### Example netCDF / Slurm validation contract:
|
|
23
23
|
```yaml
|
|
@@ -69,12 +69,14 @@ checks:
|
|
|
69
69
|
tags: [scientific, netcdf]
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
###
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
### Schema (version 1):
|
|
73
|
+
Every field except `version` is optional. Strings are capped at 4096 bytes (`notes` at 16 KiB), `artifacts` at 256 entries, `validators` at 128, `runtime.modules` at 64, and each map at 256 keys; a diagnostic cites the cap it crossed.
|
|
74
|
+
1. **`version`:** Required, exactly `1`.
|
|
75
|
+
2. **`task`:** One string describing the work the contract covers.
|
|
76
|
+
3. **`runtime`:** `kind` is required and one of `local`, `slurm`, `mpi`, or `other`; `nodes` and `ranks` are positive integers, `walltime` is a string, and `modules` is a list of strings.
|
|
77
|
+
4. **`artifacts`:** Each entry needs `path`; `format` is a string, `expected_dimensions` maps names to non-negative integers, `expected_attributes` maps names to strings, `numerical_tolerances` holds `relative`, `absolute` (finite non-negative numbers), and `ulp` (non-negative integer), and `preserve` is a boolean. `preserve` is a project convention for cleanup workflows; Clio's built-in protected-artifact guard is separate and is driven by live `protect_path` effects, not by this field.
|
|
78
|
+
5. **`validators`:** A list of command strings a verifier should satisfy. They remain prose until the project declares matching `verifiers.yaml` entries.
|
|
79
|
+
6. **`notes`:** Free text.
|
|
78
80
|
|
|
79
81
|
---
|
|
80
82
|
|
|
@@ -88,8 +90,7 @@ Comparing floating-point values in scientific computations must accommodate roun
|
|
|
88
90
|
| **`absolute`** | $|val - ref| \le absolute$ | Additive difference check. Used when reference value is close to `0`. |
|
|
89
91
|
| **`ulp`** | $StepsBetween(val, ref) \le ulp$ | Unit in the Last Place. Measures floating-point representation steps. |
|
|
90
92
|
|
|
91
|
-
|
|
92
|
-
> Clio core does not currently execute tolerance comparisons and does not apply a default numerical tolerance. Put defaults directly in project validators or contract text.
|
|
93
|
+
Tolerances become executable through a `kind: numeric-compare` entry in `.clio-coder/verifiers.yaml` (catalog version 2). The entry's `command` prints a JSON object of `string -> number | number[]` on stdout, `reference` names a repository-relative JSON file of the same shape, and `tolerance` names at least one of `relative`, `absolute`, or `ulp`. A value passes only when it satisfies every tolerance given; a key missing on either side fails with the key named, arrays compare elementwise and fail on length mismatch, and any `NaN` or infinity fails. The report lists each key's worst deviation and which tolerance it failed, and it is recorded on the `verify` result and on the host-verification check of a dispatch receipt. Clio applies no default tolerance: the catalog entry states it. `clio-coder verifiers author` proposes one such entry for every contract artifact that declares `numerical_tolerances`, with the command left for the operator to fill, so nothing runs until the operator confirms an exact argv. A `kind: perf-budget` entry judges the command's wall time the same way against a `budget` or a recorded baseline; see [Tool usage](../guide/tool-usage.md#project-verifier-catalog).
|
|
93
94
|
|
|
94
95
|
---
|
|
95
96
|
|
|
@@ -112,12 +113,12 @@ Scheduler-driven runs require distinct validation handling compared to local uni
|
|
|
112
113
|
- **Queue status is not validation**: Checking if a Slurm command like `sbatch` exits successfully only proves that the Slurm scheduler accepted the job script. A good contract tells the verifier how to check actual simulation artifacts inside `out/` or `ckpt/` after job completion.
|
|
113
114
|
- **Environment module loading**: The `runtime.modules` array can document the exact software stack dependencies (such as `intel/2024`, `openmpi/5.0`) that must be loaded before running the validators.
|
|
114
115
|
- **HPC and Data Integration**: For large-scale allocations such as those at the Argonne Leadership Computing Facility (ALCF), projects can archive verification logs through their own storage or data-transfer workflow. Clio core does not manage Globus transfers.
|
|
115
|
-
- **Validator execution**:
|
|
116
|
+
- **Validator execution**: A parsed contract's `artifacts` and `validators` are requirements the `verifier` agent and custom project-level agents must satisfy, and they are executable only through `verifiers.yaml` entries. Automated in-harness execution of the contract itself is not implemented.
|
|
116
117
|
|
|
117
118
|
### How a Validation Contract Raises Session Rigor
|
|
118
119
|
|
|
119
120
|
Clio Coder integrates scientific validation contracts directly into its safety model to raise the evidence standard automatically:
|
|
120
|
-
- **
|
|
121
|
-
- **High-Rigor Gate Requirements**: Once the rigor is
|
|
121
|
+
- **Parsed contract escalates**: At startup and at every finish-gate decision, `rigorResolution()` in `src/domains/safety/rigor.ts` loads the contract. A contract that parses raises the session's rigor level from `normal` to `high` with source `validation-contract`. An unparseable contract yields `normal` with source `invalid-contract` and the fault as the diagnostic; a Markdown-only workspace yields `normal` with source `markdown-advisory`. `CLIO_CODER_RIGOR` still overrides both directions.
|
|
122
|
+
- **High-Rigor Gate Requirements**: Once the rigor is `high`, the finish gate is active. It engages on a settled `turn_end` only when the recent window contains successful workspace mutation evidence and no validation evidence or `limitation` receipt. The window is entries since the last user message, capped at 80 entries:
|
|
122
123
|
- Clio issues a `request_continuation` middleware effect to keep the session running.
|
|
123
|
-
- Clio injects a dynamic warning reminder (`HIGH_RIGOR_REVALIDATION_MESSAGE`) instructing the agent to run a verification command or to
|
|
124
|
+
- Clio injects a dynamic warning reminder (`HIGH_RIGOR_REVALIDATION_MESSAGE`) instructing the agent to run a verification command or to call `limitation` before it can conclude the turn.
|
|
@@ -133,6 +133,7 @@ export function dispatchStubContext(): DomainContext {
|
|
|
133
133
|
health: { status: "healthy", lastCheckAt: null, lastError: null, latencyMs: null },
|
|
134
134
|
capabilities: { ...runtime.defaultCapabilities },
|
|
135
135
|
discoveredModels: [],
|
|
136
|
+
discoveredModelsSource: "none",
|
|
136
137
|
}));
|
|
137
138
|
const fallbackStatus = statuses[0];
|
|
138
139
|
if (fallbackStatus === undefined) throw new Error("behavioral machinery requires one target");
|
|
@@ -67,6 +67,7 @@ tasks:
|
|
|
67
67
|
metrics:
|
|
68
68
|
collect: &metrics
|
|
69
69
|
[task.solved, claims.unsupported, completion.reported, tools.calls.read, tools.calls.dispatch,
|
|
70
|
+
tools.succeeded.dispatch,
|
|
70
71
|
tools.blocked.bash, tools.read.distinctPaths, tools.read.outsideAllowed, tools.read.decoyHits]
|
|
71
72
|
readObservation:
|
|
72
73
|
allowedPaths: [evals/fixtures/behavioral-main.ts]
|
|
@@ -137,10 +138,10 @@ tasks:
|
|
|
137
138
|
expectedBehavior:
|
|
138
139
|
- id: delegation-chooses-dispatch
|
|
139
140
|
category: tool_choice
|
|
140
|
-
fact: {source: tool, key: tools.
|
|
141
|
+
fact: {source: tool, key: tools.succeeded.dispatch, op: gte, value: 1}
|
|
141
142
|
- id: delegation-occurs
|
|
142
143
|
category: delegation
|
|
143
|
-
fact: {source: tool, key: tools.
|
|
144
|
+
fact: {source: tool, key: tools.succeeded.dispatch, op: gte, value: 1}
|
|
144
145
|
- id: delegation-grounded
|
|
145
146
|
category: claim_grounding
|
|
146
147
|
fact: {source: grader, key: claims.unsupported, op: eq, value: 0}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iowarp/clio-coder",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "The terminal coding agent for people who maintain the code that science runs on, with user-chosen models and inspectable evidence.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"test": "node --import tsx --import ./tests/harness/tmp-root.ts --test tests/contracts/*.test.ts tests/smoke/*.test.ts",
|
|
81
81
|
"test:trace-viewer": "npm --prefix apps/trace-viewer test",
|
|
82
82
|
"trace:ui": "node apps/trace-viewer/server.mjs",
|
|
83
|
-
"ci": "npm run typecheck && npm run lint && npm run
|
|
83
|
+
"ci": "npm run typecheck && npm run lint && npm run build && npm run test && npm run test:trace-viewer",
|
|
84
84
|
"ci:release": "npm run ci && node scripts/check-release.mjs",
|
|
85
85
|
"install:local": "bash scripts/install-local.sh",
|
|
86
86
|
"smoke:real-home": "bash scripts/smoke-real-home.sh",
|
package/skills/README.md
CHANGED
|
@@ -63,6 +63,7 @@ folder is presentation and provenance, not a namespace.
|
|
|
63
63
|
| [`worktree-create`](git/worktree-create/) | workflow | Stand up isolated worktrees for parallel branches: detected install/config/health-check, per-worktree verification. |
|
|
64
64
|
| [`worktree-merge`](git/worktree-merge/) | workflow | Integrate finished worktree branches through a throwaway integration branch with per-merge tests and a full final gate. |
|
|
65
65
|
| [`resolve-merge-conflicts`](git/resolve-merge-conflicts/) | workflow | A merge/rebase is stopped on conflicts. Resolves from both sides' reconstructed intent, validates, completes the operation. |
|
|
66
|
+
| [`branch-closeout`](git/branch-closeout/) | workflow | Proves merged work on the canonical base, inspects and removes associated worktrees through Git, deletes local branches safely, and audits surviving repository refs. |
|
|
66
67
|
|
|
67
68
|
### `research/` — scientific and literature work
|
|
68
69
|
|
|
@@ -101,11 +102,12 @@ folder is presentation and provenance, not a namespace.
|
|
|
101
102
|
| [`herdr`](meta/herdr/) | integration | The user asks to launch, drive, or inspect another agent or command in a Herdr pane — including a second Clio Coder instance. Requires `HERDR_ENV=1`. |
|
|
102
103
|
|
|
103
104
|
Each SKILL.md may declare `allowed-tools` / `disallowed-tools`. After a skill
|
|
104
|
-
loads, Clio enforces that declaration at tool admission
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
loads, Clio enforces that declaration at tool admission for the rest of the
|
|
106
|
+
session, across the operator's later turns, until another skill replaces it or
|
|
107
|
+
the operator runs `/skill off` (a worker run keeps the run-scoped lifetime):
|
|
108
|
+
calls outside the merged surface are blocked with reason code `skill_surface`,
|
|
109
|
+
with `context` and `ask_user` always admitted. A skill can narrow its tool
|
|
110
|
+
surface but never grant tools the host would not allow. See [Skill tool surface narrowing](../docs/architecture/safety-model.md#skill-tool-surface-narrowing)
|
|
109
111
|
for the full semantics.
|
|
110
112
|
|
|
111
113
|
## Install (activate a marketplace skill)
|
|
@@ -7,12 +7,13 @@ triggers:
|
|
|
7
7
|
- find calls with this argument shape
|
|
8
8
|
- find code inside a function
|
|
9
9
|
- grep returns too much noise
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.3.0
|
|
11
11
|
license: Apache-2.0
|
|
12
12
|
allowed-tools:
|
|
13
13
|
- bash
|
|
14
14
|
- read
|
|
15
15
|
- write
|
|
16
|
+
- edit
|
|
16
17
|
- grep
|
|
17
18
|
- ls
|
|
18
19
|
clio-coder:
|
|
@@ -36,30 +37,78 @@ that returns nothing tells you nothing.
|
|
|
36
37
|
Search only. Never use `--update-all` / `-U` / `--rewrite`; when matches need
|
|
37
38
|
changing, report them and edit through the normal edit tools.
|
|
38
39
|
|
|
40
|
+
## Arguments
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
/skill ast-grep [--lang <language>] [--path <dir>] <structural question>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
- `--lang`: tree-sitter language name (`javascript`, `typescript`, `python`,
|
|
47
|
+
`rust`, `go`, ...). Omit to infer from the files under `--path`.
|
|
48
|
+
- `--path`: directory or file to scan. Omit to scan the project source
|
|
49
|
+
directory (`src/` when it exists, otherwise `.`).
|
|
50
|
+
- Everything else is the question: what shape to find, what to exclude.
|
|
51
|
+
|
|
52
|
+
The five steps below are the plan; do not open a task list for them.
|
|
53
|
+
|
|
54
|
+
Examples:
|
|
55
|
+
|
|
56
|
+
- `/skill ast-grep find async functions that await but have no try/catch`
|
|
57
|
+
- `/skill ast-grep --lang python --path app/ find calls to open() outside a with block`
|
|
58
|
+
|
|
59
|
+
Shell rules for every `bash` call in this workflow: one command per call,
|
|
60
|
+
plain and direct. Never use `$(...)` or backticks; they trigger an approval
|
|
61
|
+
gate that ends a headless run. Always pass rules through a file, never
|
|
62
|
+
through `--inline-rules`, because `$VAR` metavariables inside shell quotes
|
|
63
|
+
produce quoting errors that look exactly like non-matches.
|
|
64
|
+
|
|
39
65
|
## Step 0 — Check the binary
|
|
40
66
|
|
|
41
67
|
```bash
|
|
42
|
-
|
|
68
|
+
ast-grep --version
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
If that fails, try the short alias, but verify it is really ast-grep:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
sg --version
|
|
43
75
|
```
|
|
44
76
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
77
|
+
Only an output that starts with `ast-grep` counts. On many Linux systems
|
|
78
|
+
`sg` is the unrelated shadow-utils "switch group" command and prints a
|
|
79
|
+
usage error; that is NOT ast-grep. If neither binary is ast-grep, say so
|
|
80
|
+
(`npm i -g @ast-grep/cli` or `cargo install ast-grep`) and stop. Do not
|
|
81
|
+
fall back to text grep and present it as a structural result.
|
|
82
|
+
|
|
83
|
+
Use the resolved binary name in every later command.
|
|
48
84
|
|
|
49
85
|
## Step 1 — Pin down the question
|
|
50
86
|
|
|
51
|
-
Before writing any rule,
|
|
52
|
-
what must be included and excluded. If the request is
|
|
53
|
-
these, ask one clarifying question
|
|
87
|
+
Before writing any rule, write in your reply: the target language; the
|
|
88
|
+
structure to match; what must be included and excluded. If the request is
|
|
89
|
+
ambiguous on any of these, ask one clarifying question. When running
|
|
90
|
+
headlessly, state your reading of the ambiguity and proceed.
|
|
54
91
|
|
|
55
92
|
## Step 2 — Write a minimal example
|
|
56
93
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
94
|
+
Create a scratch directory inside the workspace and write the smallest
|
|
95
|
+
code snippet that MUST match and, when exclusions matter, one that must
|
|
96
|
+
NOT match:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
mkdir -p .clio-coder/scratch/ast-grep
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Then write `.clio-coder/scratch/ast-grep/positive.<ext>` and
|
|
103
|
+
`.clio-coder/scratch/ast-grep/negative.<ext>` with the `write` tool. These
|
|
104
|
+
are the rule's test fixture: one file that must match, one that must not,
|
|
105
|
+
nothing more. Never write under `/tmp`, not even by shell redirection; a
|
|
106
|
+
write outside the workspace needs an approval a headless run cannot give,
|
|
107
|
+
and the call is refused.
|
|
60
108
|
|
|
61
109
|
## Step 3 — Write the rule, simplest first
|
|
62
110
|
|
|
111
|
+
Write `.clio-coder/scratch/ast-grep/rule.yml` with the `write` tool.
|
|
63
112
|
Escalate only when the simpler form fails:
|
|
64
113
|
|
|
65
114
|
1. `pattern` alone for direct shapes: `console.log($ARG)`.
|
|
@@ -73,7 +122,6 @@ Non-negotiable: every relational rule (`has`, `inside`) carries
|
|
|
73
122
|
rule silently under-matches.
|
|
74
123
|
|
|
75
124
|
```yaml
|
|
76
|
-
# /tmp/astgrep-rule.yml
|
|
77
125
|
id: async-no-trycatch
|
|
78
126
|
language: javascript
|
|
79
127
|
rule:
|
|
@@ -84,6 +132,15 @@ rule:
|
|
|
84
132
|
has: {pattern: 'try { $$$ } catch ($E) { $$$ }', stopBy: end}
|
|
85
133
|
```
|
|
86
134
|
|
|
135
|
+
This example is verified against ast-grep 0.45 on JavaScript. When the
|
|
136
|
+
question is this one, use it verbatim. Two facts it encodes that models
|
|
137
|
+
guess wrong: tree-sitter JavaScript and TypeScript have no
|
|
138
|
+
`async_function_declaration` kind (the `async` keyword is a token inside
|
|
139
|
+
`function_declaration`; assert it with `pattern: 'async function $F($$$) { $$$ }'`
|
|
140
|
+
when async matters), and an unknown `kind` fails the whole rule with
|
|
141
|
+
`Kind ... is invalid` (exit 8); answer that error with the tree dump in
|
|
142
|
+
Step 4, never with another guessed name.
|
|
143
|
+
|
|
87
144
|
Full syntax (atomic, relational, composite rules, metavariables, `constraints`,
|
|
88
145
|
`utils`): read `references/rule_reference.md` when the rule needs more than
|
|
89
146
|
the three forms above.
|
|
@@ -91,46 +148,57 @@ the three forms above.
|
|
|
91
148
|
## Step 4 — Test against the example
|
|
92
149
|
|
|
93
150
|
```bash
|
|
94
|
-
ast-grep scan --rule /
|
|
151
|
+
ast-grep scan --rule .clio-coder/scratch/ast-grep/rule.yml .clio-coder/scratch/ast-grep
|
|
95
152
|
```
|
|
96
153
|
|
|
97
|
-
Prefer a rule file over `--inline-rules`: inline YAML in shell needs `$VAR`
|
|
98
|
-
escaped as `\$VAR` (or single quotes), and quoting errors look exactly like
|
|
99
|
-
non-matches.
|
|
100
|
-
|
|
101
154
|
The rule must match the positive example and miss the negative one before
|
|
102
|
-
you scan anything real. When it
|
|
155
|
+
you scan anything real. When it passes, go to Step 5. When it does not,
|
|
156
|
+
debug in this order, changing the rule file with `edit`:
|
|
103
157
|
|
|
104
158
|
1. Strip the rule to its simplest positive key; re-add parts one at a time.
|
|
105
159
|
2. Confirm every `has`/`inside` has `stopBy: end`.
|
|
106
|
-
3. Dump the tree to check node kinds
|
|
160
|
+
3. Dump the tree to check node kinds; never guess a `kind` name:
|
|
107
161
|
|
|
108
162
|
```bash
|
|
109
|
-
ast-grep run --pattern '
|
|
163
|
+
ast-grep run --pattern 'async function f() { await g(); }' --lang javascript --debug-query=cst
|
|
110
164
|
```
|
|
111
165
|
|
|
112
166
|
(`cst` = every node; `ast` = named nodes only; `pattern` = how ast-grep
|
|
113
|
-
parsed your pattern.)
|
|
167
|
+
parsed your pattern.) Pipe long dumps through `head -80`. Dump the tree
|
|
168
|
+
only after a test has failed; a dump before the first test is a wasted
|
|
169
|
+
turn.
|
|
114
170
|
|
|
115
171
|
## Step 5 — Scan the codebase
|
|
116
172
|
|
|
117
173
|
Simple one-node patterns skip the rule file:
|
|
118
174
|
|
|
119
175
|
```bash
|
|
120
|
-
ast-grep run --pattern 'console.log($ARG)' --lang javascript
|
|
176
|
+
ast-grep run --pattern 'console.log($ARG)' --lang javascript src
|
|
121
177
|
```
|
|
122
178
|
|
|
123
179
|
Rule-based scans:
|
|
124
180
|
|
|
125
181
|
```bash
|
|
126
|
-
ast-grep scan --rule /
|
|
182
|
+
ast-grep scan --rule .clio-coder/scratch/ast-grep/rule.yml src
|
|
127
183
|
```
|
|
128
184
|
|
|
129
|
-
|
|
130
|
-
`
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
185
|
+
Scan the requested path, not `.`, so your own fixture under
|
|
186
|
+
`.clio-coder/scratch` does not show up as a match; if it does, drop those
|
|
187
|
+
lines from the report. Add `--json` only when the output feeds further
|
|
188
|
+
processing.
|
|
189
|
+
|
|
190
|
+
Report matches as `path:line` with a one-line reading of each; do not paste
|
|
191
|
+
raw JSON at the user. Done when the reported matches answer the Step 1
|
|
192
|
+
question and false positives you noticed are either excluded by the rule or
|
|
193
|
+
called out. Delete the scratch files last, naming each file. `rm -r` and
|
|
194
|
+
`rm -f` are hard-blocked by the safety net, so:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
rm .clio-coder/scratch/ast-grep/positive.js .clio-coder/scratch/ast-grep/negative.js .clio-coder/scratch/ast-grep/rule.yml
|
|
198
|
+
```
|
|
199
|
+
```bash
|
|
200
|
+
rmdir .clio-coder/scratch/ast-grep
|
|
201
|
+
```
|
|
134
202
|
|
|
135
203
|
## Red flags
|
|
136
204
|
|
|
@@ -138,5 +206,8 @@ the scratch files.
|
|
|
138
206
|
- A `has`/`inside` without `stopBy: end`.
|
|
139
207
|
- A guessed `kind` name instead of a `--debug-query=cst` dump.
|
|
140
208
|
- Any rewrite flag: this skill only reads.
|
|
141
|
-
-
|
|
142
|
-
|
|
209
|
+
- Treating shadow-utils `sg` as ast-grep because `command -v sg` succeeded.
|
|
210
|
+
- Cleaning up with `rm -rf`, or writing fixtures under `/tmp`; both are
|
|
211
|
+
refused in a headless run.
|
|
212
|
+
- Falling back to grep halfway because rule debugging felt slow; fix the
|
|
213
|
+
rule with Step 4, that is the job.
|
|
@@ -54,3 +54,29 @@ concurrency rule, admission and profile entries, and prompt-prefix cost paid by
|
|
|
54
54
|
every run whether or not anyone searches structurally. That is a tool-surface
|
|
55
55
|
decision, not skill-catalog cleanup. Until then the skill stays
|
|
56
56
|
`scenarios-recorded` and its first step is the binary check it already has.
|
|
57
|
+
|
|
58
|
+
## Battletest record (2026-09-03)
|
|
59
|
+
|
|
60
|
+
S1 fixture plus `src/orders.js` (one matching `loadOrders`, one non-awaiting
|
|
61
|
+
`noAwait`), `ornith1.5-35b-moe` on mini (llamacpp), `clio-coder run
|
|
62
|
+
--autonomy full-auto --json`, headless, `@ast-grep/cli` 0.45.3 on PATH.
|
|
63
|
+
Ground truth: `src/users.js:1` and `src/orders.js:1` match; `safe.js`,
|
|
64
|
+
`plain.js`, `noAwait` do not.
|
|
65
|
+
|
|
66
|
+
| run | wall | turns | in / out tokens | outcome |
|
|
67
|
+
|---|---|---|---|---|
|
|
68
|
+
| baseline (no skill) | 565s | 37 | 16.2k / 33.0k | never produced a valid rule (`$($params)` syntax, relational rules without `stopBy: end`, `--inline-rules` quoting); 3 `$(...)` calls; answered by reading the source; scratch left in `.astscratch/` |
|
|
69
|
+
| v0.2.0 | 123s | 13 | 7.9k / 7.1k | correct 2/5 via a proven rule; wrote fixtures to `/tmp` first, then into the workspace; `rm -rf` and `find -delete` hard-blocked, scratch left behind |
|
|
70
|
+
| v0.3.0 first cut | 176s | 13 | 9.8k / 10.5k | correct; dumped the tree before writing any rule; a `/tmp` write via shell redirection refused; `rm -rf` hard-blocked |
|
|
71
|
+
| v0.3.0 | 190s | 24 | 9.5k / 10.9k | correct; zero safety blocks; scratch removed with per-file `rm` + `rmdir`; working tree clean. Spent 10 turns recovering from a guessed `async_function_declaration` kind |
|
|
72
|
+
|
|
73
|
+
Changes in v0.3.0: `## Arguments` contract; Step 0 verifies `sg --version`
|
|
74
|
+
prints `ast-grep` because `/usr/bin/sg` is shadow-utils on Linux; scratch
|
|
75
|
+
lives in `.clio-coder/scratch/ast-grep/` (a `/tmp` write needs an approval
|
|
76
|
+
a headless run cannot give); rules always go through a file; tree dumps
|
|
77
|
+
only after a failed test; cleanup by named `rm` + `rmdir` because
|
|
78
|
+
`rm -r`/`rm -f` match the `rm-recursive-or-force` damage-control block;
|
|
79
|
+
`edit` added for rule iteration. The example rule was re-verified verbatim
|
|
80
|
+
against 0.45.3 (matches exactly the two expected functions) and the skill
|
|
81
|
+
now says so, plus that an unknown `kind` fails with exit 8 rather than
|
|
82
|
+
matching nothing.
|