@iowarp/clio-coder 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +127 -0
- package/CONTRIBUTING.md +142 -52
- package/README.md +434 -473
- package/SECURITY.md +2 -1
- package/dist/{acp-ZILU3AUO.js → acp-H2NGRPWO.js} +12 -12
- package/dist/{agents-HYWGBGQR.js → agents-TL5LLUQP.js} +56 -55
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-N3QT7CBO.js → auth-E5SW4HMS.js} +23 -21
- package/dist/builtins-IA7V7FUC.js +22 -0
- package/dist/{chunk-7RY5VZPH.js → chunk-2APPQIER.js} +8 -8
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-JA5QWE4Z.js → chunk-2UG5F4C5.js} +1973 -1664
- package/dist/{chunk-5YHDIDBP.js → chunk-2UH2KFUP.js} +2 -2
- package/dist/{chunk-CTJ4RNAA.js → chunk-2VIKGWFZ.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
- package/dist/chunk-4UVU7BJ5.js +39 -0
- package/dist/{chunk-VKRH2TCS.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-BBTJOK6Y.js → chunk-54CBCGIR.js} +5 -5
- package/dist/{chunk-AP73CFDC.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/chunk-5MEZN6CB.js +1334 -0
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-ABLSQ6JX.js → chunk-64I3JVYM.js} +8 -2
- package/dist/{chunk-AFKWHWXF.js → chunk-6PTFB5VS.js} +39 -22
- package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
- package/dist/chunk-7DRAWPTZ.js +360 -0
- package/dist/chunk-7E7I3WLS.js +3762 -0
- package/dist/{chunk-BJGUKIG4.js → chunk-7ZYNNDKC.js} +7 -7
- package/dist/{chunk-XKA2ICR3.js → chunk-AF4YM7Z4.js} +652 -252
- package/dist/{chunk-GVQJ5CCZ.js → chunk-AX2THNSA.js} +12 -12
- package/dist/{chunk-IG7BCQBA.js → chunk-B4OAX3SI.js} +65 -3
- package/dist/{chunk-TD3PGPQA.js → chunk-B4VEBZKF.js} +3 -3
- package/dist/{chunk-74YWRRU5.js → chunk-BEPZRGGU.js} +10 -10
- package/dist/{chunk-FEFIFZTL.js → chunk-CE5AX47J.js} +2 -2
- package/dist/{chunk-UAPGZHYC.js → chunk-DWUOQKRU.js} +25 -11
- package/dist/{chunk-THYWACCR.js → chunk-E3TPLWFX.js} +3 -3
- package/dist/{chunk-7EPLI7VL.js → chunk-EKCHAPYA.js} +2 -2
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-PJJ6MY27.js → chunk-F5JHEYZM.js} +7 -7
- package/dist/{chunk-6CCS4G3W.js → chunk-FTMGRKEF.js} +3 -3
- package/dist/{chunk-SINK3QR6.js → chunk-G76U63X4.js} +17 -17
- package/dist/{chunk-EIMVLWB3.js → chunk-GHS5EBTQ.js} +64 -9
- package/dist/{chunk-QMXC4JB7.js → chunk-GI7YYQ3F.js} +187 -1419
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-6HMJX2VU.js → chunk-GWZNEVM2.js} +44 -12
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/{chunk-UXN6JT4W.js → chunk-HEQY7ZFI.js} +3 -3
- package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GCSMB2KY.js → chunk-I7ZPNEJM.js} +145 -102
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-QTFGO774.js → chunk-IGLP3ODT.js} +29 -16
- package/dist/chunk-IJNZMHLA.js +101 -0
- package/dist/{chunk-BDPT6GTK.js → chunk-INY6HTFL.js} +7 -7
- package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
- package/dist/{chunk-6NJQITNH.js → chunk-IWT4SF4R.js} +6 -3
- package/dist/{chunk-R23Z6K6I.js → chunk-JDAY6FIL.js} +19 -19
- package/dist/chunk-JEQ3XTHC.js +42 -0
- package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
- package/dist/{chunk-TVH4ONAM.js → chunk-JKKCYP3C.js} +10 -10
- package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
- package/dist/{chunk-C537JADH.js → chunk-KK4JZPBQ.js} +19 -141
- package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-6DWBAZ5U.js → chunk-L47TF46W.js} +5 -7
- package/dist/{chunk-HUAS7ITX.js → chunk-LDJG7DW3.js} +91 -42
- package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-VKFQTNDV.js → chunk-MUW2BDDH.js} +4 -4
- package/dist/{chunk-E67WX76H.js → chunk-MWUZBSAQ.js} +104 -152
- package/dist/{chunk-OJTRZGR3.js → chunk-N2Z7HLVY.js} +21 -21
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/{chunk-FYUN5KZ3.js → chunk-NIQJ66N4.js} +21 -21
- package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-VEGN6WIQ.js → chunk-O5CVSAG5.js} +3 -3
- package/dist/{chunk-MOPSG2X7.js → chunk-OML5D5V5.js} +8 -8
- package/dist/{chunk-2VG7KLYV.js → chunk-PAJQJ7BS.js} +5816 -3255
- package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
- package/dist/{chunk-BTGG6BG2.js → chunk-QWGDJJYJ.js} +158 -19
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-ZJLUDYFY.js → chunk-RRNP2ANY.js} +6 -6
- package/dist/{chunk-PVAMAVBB.js → chunk-RSJ25QSL.js} +102 -2
- package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
- package/dist/chunk-SKHCAU7K.js +385 -0
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-J4HBWF6Y.js → chunk-TM6LQDI3.js} +131 -28
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-MA3H6DM5.js → chunk-UPZU6GE4.js} +25 -3
- package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
- package/dist/{chunk-N5UK64DP.js → chunk-V2ANDPVT.js} +4 -4
- package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
- package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
- package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
- package/dist/{chunk-QKIFBZKT.js → chunk-VW6DOEDG.js} +497 -81
- package/dist/{chunk-SCYB3HA4.js → chunk-W6RRQCPQ.js} +63 -19
- package/dist/{chunk-2NM363SV.js → chunk-WBKFA554.js} +10 -10
- package/dist/{chunk-R32CLGZ6.js → chunk-WCXUNS7U.js} +82 -21
- package/dist/{chunk-GPPB3JBE.js → chunk-WRBAGUNF.js} +3 -3
- package/dist/{chunk-IXJT6DCX.js → chunk-XIVNBFZS.js} +85 -30
- package/dist/{chunk-UEDMSP56.js → chunk-XPWWI35G.js} +417 -201
- package/dist/chunk-XRZT5WY5.js +47 -0
- package/dist/{chunk-3QSOM6PA.js → chunk-Y3CBHOR6.js} +2 -2
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-AKB4GYDL.js → chunk-YQWYVTMC.js} +5 -5
- package/dist/{chunk-6I5ILFOF.js → chunk-ZA4VCIGV.js} +3 -3
- package/dist/{chunk-7OBGU7UB.js → chunk-ZDN3Y73Y.js} +12 -18
- package/dist/{chunk-3I5NY75V.js → chunk-ZWPRK62N.js} +8 -5
- package/dist/cli/index.js +41 -39
- package/dist/{clio-IT3G3VQH.js → clio-CMMK4KRR.js} +9 -9
- package/dist/{code-nav-RK6S7F6E.js → code-nav-MDZNQS33.js} +89 -21
- package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
- package/dist/{config-3QZRWZJF.js → config-SVM5P5YI.js} +131 -84
- package/dist/{configure-FL7Y3KJF.js → configure-LE3IK2TJ.js} +28 -26
- package/dist/{context-5HE7ODYK.js → context-2OHRKS42.js} +69 -64
- package/dist/{context-KYQFRVDC.js → context-E3VC7RX5.js} +15 -11
- package/dist/{context-XNHL75JV.js → context-VNCR7KAG.js} +93 -65
- package/dist/{context-clear-N545L53A.js → context-clear-BW4O37TG.js} +64 -60
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-QHKXSV2F.js → context-working-set-VDS25HXZ.js} +19 -18
- package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-5AHT53RF.js} +93 -82
- package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
- package/dist/{doctor-ZGPEGHIP.js → doctor-WNNVO6FY.js} +48 -47
- package/dist/{eval-GXLL44RD.js → eval-7G7SGAYO.js} +287 -115
- package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-HWLBRH3Q.js → evidence-VD6736FQ.js} +67 -64
- package/dist/{evolve-FTZBMNVW.js → evolve-AL3NGVRL.js} +65 -62
- package/dist/{extensions-VHRBEID7.js → extensions-MOVJ32NM.js} +9 -7
- package/dist/{fleet-CKZHJWZJ.js → fleet-QZHUMAGI.js} +114 -111
- package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-BAYT5FJZ.js} +10 -10
- package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-IREVMRU4.js} +7 -6
- package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-YCTT3HTI.js} +22 -19
- package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-QVJTDAVB.js} +58 -55
- package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-25QAFPK4.js} +4 -4
- package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-5O57AAJ7.js} +26 -23
- package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-CPH2W2T6.js} +59 -56
- package/dist/{fleet-view-WAMJYNDT.js → fleet-view-SWBR3VGQ.js} +58 -55
- package/dist/{init-5XQRBOFV.js → init-J477LKZH.js} +82 -79
- package/dist/{interop-34TVO25M.js → interop-3FCM6XLG.js} +11 -11
- package/dist/{library-3QY6KF57.js → library-QUQEIUG6.js} +30 -27
- package/dist/{memory-L4UTIIIW.js → memory-SGGSEP65.js} +67 -64
- package/dist/{models-ZVX3QOWE.js → models-HEKUAXXK.js} +53 -46
- package/dist/{monitor-CEKVSYTS.js → monitor-HKU57TYQ.js} +63 -60
- package/dist/{orchestrator-77BAP6BC.js → orchestrator-VDFAEFAI.js} +1831 -1057
- package/dist/{panes-7STHOAUJ.js → panes-DN2SSFOH.js} +5 -5
- package/dist/{panes-SHAUIRXY.js → panes-TALGNPZT.js} +29 -14
- package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
- package/dist/reset-EAJFFJVB.js +344 -0
- package/dist/{resources-74GKTLSF.js → resources-OVKSEFVE.js} +29 -20
- package/dist/{run-HBAUJNNZ.js → run-7DP7ZF2J.js} +120 -115
- package/dist/{share-G3APVLVP.js → share-WML67FT3.js} +32 -27
- package/dist/{skills-35HHUKCR.js → skills-SG662R2K.js} +41 -31
- package/dist/{skills-eval-QN4HSHDC.js → skills-eval-VVZEUU46.js} +78 -77
- package/dist/{skills-inventory-J357J34F.js → skills-inventory-I2E23GET.js} +23 -20
- package/dist/{slash-commands-JZZCQA32.js → slash-commands-S7MBJDQK.js} +40 -36
- package/dist/{steer-XAVHJM22.js → steer-2LQOMCPB.js} +3 -3
- package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
- package/dist/{targets-DSM6CY3M.js → targets-4QC3HIEW.js} +54 -54
- package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-TUHIJ6Y2.js} +5 -5
- package/dist/{tools-MKNWVPBH.js → tools-TFGJICCU.js} +10 -10
- package/dist/{trace-ECQ7TIYZ.js → trace-FXMXUZUF.js} +55 -7
- package/dist/uninstall-5PEVOE5B.js +408 -0
- package/dist/upgrade-M4WXY6KN.js +303 -0
- package/dist/{usage-X52N3IDJ.js → usage-N7ZNVLEM.js} +151 -104
- package/dist/{verifiers-EJTVVSMA.js → verifiers-DJTP4XX6.js} +15 -15
- package/dist/{verify-YJL6XET2.js → verify-RWE4PPEK.js} +9 -9
- package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
- package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-C7IQOXSP.js} +89 -86
- package/dist/{with-panes-OBOBFIIR.js → with-panes-4GCGSL7J.js} +53 -257
- package/dist/worker/entry.js +90 -74
- package/docs/README.md +176 -81
- package/docs/{acp.md → architecture/acp.md} +36 -20
- package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
- package/docs/{architecture.md → architecture/architecture.md} +43 -22
- package/docs/{artifact-placement.md → architecture/artifact-placement.md} +27 -23
- package/docs/architecture/artifact-versions.md +90 -0
- package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
- package/docs/{context-engine.md → architecture/context-engine.md} +29 -25
- package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
- package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
- package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
- package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
- package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
- package/docs/{model-catalog.md → architecture/model-catalog.md} +61 -27
- package/docs/{observability.md → architecture/observability.md} +38 -14
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +57 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +99 -25
- package/docs/{safety-model.md → architecture/safety-model.md} +35 -20
- package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
- package/docs/architecture/time-conventions.md +125 -0
- package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
- package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
- package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
- package/docs/{built-in-agents.md → guide/built-in-agents.md} +65 -35
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +66 -61
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -297
- package/docs/guide/configuration-reference.md +1163 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +33 -28
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +81 -17
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +131 -107
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +25 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
- package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
- package/docs/process/development-pipeline.md +152 -0
- package/docs/process/documentation-coverage.md +100 -0
- package/docs/process/documentation-guide.md +187 -0
- package/docs/{eval-runner.md → process/eval-runner.md} +108 -53
- package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
- package/docs/{evolution.md → process/evolution.md} +2 -2
- package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
- package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
- package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
- package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
- package/evals/README.md +2 -2
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +10 -8
- package/skills/README.md +52 -41
- package/skills/coding/ast-grep/SKILL.md +102 -31
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +41 -6
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +88 -29
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +81 -54
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +44 -3
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +46 -16
- 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 +78 -64
- 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 +88 -65
- 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 +101 -52
- 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/meta/clio-coder-dev/SKILL.md +9 -5
- package/skills/meta/clio-coder-dev/evals.md +3 -2
- package/skills/meta/clio-coder-test/SKILL.md +102 -95
- package/skills/meta/clio-coder-test/evals.md +9 -4
- package/skills/meta/clio-coder-test/references/harness.md +100 -124
- package/skills/meta/clio-coder-test/references/test-map.md +77 -50
- package/skills/meta/credentials/SKILL.md +2 -2
- package/skills/meta/find-skills/SKILL.md +2 -2
- package/skills/meta/herdr/SKILL.md +2 -2
- package/skills/meta/skill-craft/SKILL.md +22 -16
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +62 -13
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +131 -15
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +47 -7
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +58 -3
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +54 -3
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +70 -62
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +77 -19
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +21 -2
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +24 -2
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +27 -2
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +97 -62
- package/skills/workflow/cut-it/SKILL.md +66 -6
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +118 -28
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +87 -11
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +77 -18
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/args.ts +2 -2
- package/src/cli/bootstrap-generate.ts +1 -1
- package/src/cli/config-inspect.ts +65 -12
- package/src/cli/configure-interop.ts +105 -13
- package/src/cli/configure-oauth.ts +57 -0
- package/src/cli/configure-onboarding.ts +980 -0
- package/src/cli/configure-target.ts +594 -0
- package/src/cli/configure.ts +1082 -532
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/docs.ts +22 -14
- package/src/cli/doctor-naming.ts +5 -5
- package/src/cli/doctor-toolchain.ts +3 -3
- package/src/cli/eval.ts +1 -2
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet.ts +1 -1
- package/src/cli/index.ts +3 -1
- package/src/cli/internal-dispatch.ts +3 -4
- 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/panes.ts +19 -5
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +9 -4
- package/src/cli/select.ts +664 -0
- package/src/cli/share.ts +5 -1
- package/src/cli/skills-eval.ts +3 -3
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +5 -6
- package/src/cli/trace.ts +55 -4
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +204 -149
- package/src/cli/usage.ts +86 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/cli/wiki-generate.ts +1 -1
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +131 -86
- package/src/core/bus-events.ts +51 -6
- package/src/core/config.ts +61 -1
- package/src/core/defaults.ts +7 -4
- package/src/core/dispatch-outcome.ts +16 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/guardrails.ts +10 -49
- package/src/core/prompt-hint.ts +9 -0
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +89 -2
- package/src/domains/agents/builtins/architect.md +2 -3
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +2 -2
- package/src/domains/agents/builtins/documenter.md +2 -2
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/oracle.md +1 -1
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +2 -2
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +13 -15
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +23 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/config/keybindings.ts +8 -0
- package/src/domains/context/extension.ts +0 -3
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -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 +11 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/contract.ts +11 -1
- package/src/domains/dispatch/extension.ts +237 -49
- package/src/domains/dispatch/host-verification.ts +435 -39
- package/src/domains/dispatch/intent-requirements.ts +10 -0
- package/src/domains/dispatch/intent.ts +18 -1
- package/src/domains/dispatch/path-scope.ts +235 -24
- package/src/domains/dispatch/run-event-journal.ts +4 -15
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/transport.ts +45 -21
- package/src/domains/dispatch/types.ts +58 -3
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/artifacts/store.ts +5 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
- package/src/domains/eval/metrics/token-stream.ts +201 -31
- package/src/domains/eval/metrics/tracked.ts +40 -4
- package/src/domains/eval/runners/clio-run.ts +5 -2
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/store.ts +8 -1
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/evidence/trust-status.ts +10 -1
- package/src/domains/extensions/contract.ts +15 -1
- package/src/domains/extensions/discovery.ts +238 -41
- package/src/domains/extensions/extension.ts +105 -6
- package/src/domains/extensions/index.ts +24 -0
- package/src/domains/extensions/integrity.ts +189 -0
- package/src/domains/extensions/manager.ts +17 -1
- package/src/domains/extensions/resource-path.ts +27 -0
- package/src/domains/extensions/resources.ts +18 -38
- package/src/domains/extensions/snapshot-store.ts +39 -0
- package/src/domains/extensions/snapshot.ts +180 -0
- package/src/domains/extensions/state.ts +385 -57
- package/src/domains/extensions/types.ts +118 -1
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
- package/src/domains/lifecycle/migrations/index.ts +6 -0
- package/src/domains/lifecycle/naming-resources.ts +19 -4
- package/src/domains/lifecycle/naming-yazi.ts +10 -5
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/contract.ts +26 -0
- package/src/domains/middleware/extension.ts +24 -24
- package/src/domains/middleware/hook-receipts.ts +27 -4
- package/src/domains/middleware/hooks-io.ts +65 -32
- package/src/domains/middleware/hooks.ts +64 -0
- package/src/domains/middleware/index.ts +28 -5
- package/src/domains/middleware/marketplace-offer.ts +3 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +28 -0
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +38 -0
- package/src/domains/mux/detect.ts +6 -13
- package/src/domains/mux/index.ts +1 -1
- package/src/domains/mux/operations.ts +44 -5
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/session.ts +53 -4
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/extension.ts +17 -4
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/observability/projection.ts +14 -90
- package/src/domains/observability/trace-store.ts +43 -7
- package/src/domains/prompts/compiler.ts +73 -53
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +97 -9
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
- package/src/domains/prompts/fragments/identity/clio.md +6 -12
- package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
- package/src/domains/prompts/fragments/operating/contract.md +7 -15
- package/src/domains/prompts/fragments/operating/delegation.md +32 -34
- package/src/domains/prompts/fragments/operating/skills.md +10 -24
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +2 -0
- package/src/domains/providers/model-runtime-capabilities.ts +99 -25
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +699 -114
- package/src/domains/providers/runtime-resolution.ts +31 -0
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
- package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +7 -2
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- 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/cost-provenance.ts +19 -0
- package/src/domains/providers/types/local-model-quirks.ts +85 -37
- 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 +23 -19
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/index.ts +1 -0
- package/src/domains/safety/loop-detector.ts +7 -4
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +34 -11
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/entries.ts +6 -0
- package/src/domains/session/task-board.ts +10 -9
- package/src/domains/session/usage.ts +3 -3
- package/src/domains/share/archive.ts +164 -7
- package/src/engine/acp/server.ts +62 -9
- 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/llamacpp-residency.ts +3 -4
- package/src/engine/apis/lmstudio.ts +3 -3
- package/src/engine/apis/ollama-native.ts +6 -6
- package/src/engine/apis/openai-completions.ts +145 -39
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +8 -27
- package/src/engine/external-subprocess.ts +114 -6
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -12
- package/src/engine/worker-runtime.ts +40 -11
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +464 -251
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/application-controller.ts +2 -1
- package/src/interactive/bus-notices.ts +8 -1
- package/src/interactive/chat-loop-messages.ts +16 -17
- package/src/interactive/chat-loop.ts +75 -3
- package/src/interactive/chat-panel.ts +36 -13
- package/src/interactive/chat-renderer.ts +72 -7
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/dispatch-board.ts +6 -11
- package/src/interactive/footer/widgets.ts +13 -0
- package/src/interactive/interactive-application.ts +39 -4
- package/src/interactive/interactive-input-runtime.ts +4 -0
- package/src/interactive/interactive-presentation.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +4 -1
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/settings.ts +27 -16
- package/src/interactive/panes-runtime.ts +111 -35
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-commands.ts +153 -20
- package/src/interactive/stream-pacing-policy.ts +0 -23
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +39 -20
- package/src/interactive/turn-recovery.ts +8 -0
- package/src/interactive/turn-runtime.ts +27 -11
- package/src/interactive/turn-state.ts +7 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +6 -1
- package/src/interactive/yazi-bridge.ts +60 -6
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +52 -22
- package/src/tools/codewiki/code-nav-surface.ts +6 -0
- package/src/tools/codewiki/code-nav.ts +99 -13
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +59 -21
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-arguments.ts +6 -1
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +49 -4
- package/src/tools/dispatch-run-events.ts +1 -1
- package/src/tools/dispatch-runner.ts +12 -0
- package/src/tools/dispatch-schema.ts +338 -0
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +9 -254
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/observation.ts +4 -5
- package/src/tools/panes-surface.ts +4 -11
- package/src/tools/panes.ts +4 -2
- package/src/tools/policy.ts +15 -2
- package/src/tools/read.ts +5 -6
- package/src/tools/registry.ts +41 -12
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/builtins-UJLMOVOV.js +0 -17
- package/dist/chunk-5QIAJV2D.js +0 -48
- package/dist/chunk-JZWT5J3Y.js +0 -814
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-WR6U3OVP.js +0 -45
- package/dist/chunk-Y45G3AXC.js +0 -1558
- package/dist/reset-EOLM7GVE.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-H7TOM7YL.js +0 -323
- package/docs/artifact-versions.md +0 -67
- package/docs/development-pipeline.md +0 -121
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/time-conventions.md +0 -101
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Durable receipt log for user-defined middleware hooks. Every hook execution
|
|
3
|
-
* emits a {@link HookReceipt}; this log keeps a bounded in-memory ring
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* emits a {@link HookReceipt}; this log keeps a bounded in-memory ring and
|
|
4
|
+
* persists it atomically through safeResourceWrite. Writes are throttled so a
|
|
5
|
+
* per-tool-call cadence never turns into per-call disk I/O; `flush()` forces a
|
|
6
|
+
* final write at shutdown. `clio-coder config inspect` reads the persisted
|
|
7
|
+
* snapshot back with {@link readPersistedHookReceipts}, since it runs as its
|
|
8
|
+
* own process and has no access to a running session's in-memory ring.
|
|
7
9
|
*/
|
|
8
10
|
|
|
11
|
+
import { readFileSync } from "node:fs";
|
|
9
12
|
import { safeResourceWrite } from "../../core/safe-resource-write.js";
|
|
10
13
|
import type { HookReceipt } from "./hooks.js";
|
|
11
14
|
|
|
@@ -68,3 +71,23 @@ export function createHookReceiptLog(options: HookReceiptLogOptions = {}): HookR
|
|
|
68
71
|
},
|
|
69
72
|
};
|
|
70
73
|
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Read a log's persisted snapshot back, for a process that never held the
|
|
77
|
+
* live log (`config inspect` runs as its own invocation). A log that has
|
|
78
|
+
* never persisted yet reads as empty, not an error.
|
|
79
|
+
*/
|
|
80
|
+
export function readPersistedHookReceipts(persistPath: string): HookReceipt[] {
|
|
81
|
+
let raw: string;
|
|
82
|
+
try {
|
|
83
|
+
raw = readFileSync(persistPath, "utf8");
|
|
84
|
+
} catch (error) {
|
|
85
|
+
if ((error as NodeJS.ErrnoException).code === "ENOENT") return [];
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
const parsed = JSON.parse(raw) as Partial<PersistedReceipts>;
|
|
89
|
+
if (parsed.version !== 1 || !Array.isArray(parsed.receipts)) {
|
|
90
|
+
throw new Error(`${persistPath}: unrecognized hook receipt log shape`);
|
|
91
|
+
}
|
|
92
|
+
return parsed.receipts;
|
|
93
|
+
}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Loading for user-defined middleware hooks and the production command
|
|
3
|
+
* runner. Hooks live in dedicated, secrets-free files so they stay out of the
|
|
4
|
+
* strict settings schema:
|
|
5
5
|
*
|
|
6
6
|
* - `.clio-coder/hooks.yaml` committed project hooks (origin "project"),
|
|
7
7
|
* - `.clio-coder/hooks.local.yaml` gitignored local hooks (origin "project.local"),
|
|
8
8
|
* - `<extensionRoot>/hooks.yaml` hooks shipped by an installed extension.
|
|
9
9
|
*
|
|
10
|
+
* Project files are read from disk here. Extension declarations are never
|
|
11
|
+
* read here: they arrive already parsed as a captured source set that the
|
|
12
|
+
* composition root adapts from the extension snapshot, which captured the
|
|
13
|
+
* bytes during install-digest verification, so a hooks.yaml rewritten after
|
|
14
|
+
* verification cannot be admitted until the next generation re-verifies the
|
|
15
|
+
* tree. Middleware never sees extension-domain types.
|
|
16
|
+
*
|
|
10
17
|
* Reads are best-effort: a missing file is skipped silently, and a malformed
|
|
11
18
|
* file is reported as an issue without aborting anything.
|
|
12
19
|
*/
|
|
@@ -26,6 +33,7 @@ import {
|
|
|
26
33
|
type UserHookCommandRunner,
|
|
27
34
|
type UserHookDeclarationBatch,
|
|
28
35
|
type UserHookLoadResult,
|
|
36
|
+
type UserHookPackageProvenance,
|
|
29
37
|
type UserHookSource,
|
|
30
38
|
userHookToRegistration,
|
|
31
39
|
} from "./hooks.js";
|
|
@@ -43,15 +51,27 @@ export interface ReadHookSourcesResult {
|
|
|
43
51
|
fileIssues: HookFileIssue[];
|
|
44
52
|
}
|
|
45
53
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
54
|
+
/** One package's hook declarations, captured by the supplier from verified bytes. */
|
|
55
|
+
export interface CapturedHookDeclarations {
|
|
56
|
+
provenance: UserHookPackageProvenance;
|
|
57
|
+
/** SHA-256 of the captured hooks.yaml bytes. */
|
|
58
|
+
declarationsDigest: string;
|
|
59
|
+
/** Parsed declarations, or an empty list when parsing failed. */
|
|
60
|
+
declarations: unknown;
|
|
61
|
+
parseError?: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** The captured declarations of one supplier generation. */
|
|
65
|
+
export interface CapturedHookSourceSet {
|
|
66
|
+
/** 0 for an ephemeral (uncommitted) build. */
|
|
67
|
+
generation: number;
|
|
68
|
+
sources: ReadonlyArray<CapturedHookDeclarations>;
|
|
49
69
|
}
|
|
50
70
|
|
|
51
71
|
export interface ReadHookSourcesOptions {
|
|
52
72
|
cwd: string;
|
|
53
|
-
/**
|
|
54
|
-
|
|
73
|
+
/** Captured extension declarations; absent means no extension hooks. */
|
|
74
|
+
capturedSources?: CapturedHookSourceSet;
|
|
55
75
|
}
|
|
56
76
|
|
|
57
77
|
function readBatch(
|
|
@@ -86,14 +106,23 @@ export function readHookSources(options: ReadHookSourcesOptions): ReadHookSource
|
|
|
86
106
|
const fileIssues: HookFileIssue[] = [];
|
|
87
107
|
const batches: UserHookDeclarationBatch[] = [];
|
|
88
108
|
|
|
89
|
-
|
|
109
|
+
const captured = options.capturedSources;
|
|
110
|
+
for (const entry of captured?.sources ?? []) {
|
|
90
111
|
const source: UserHookSource = {
|
|
91
112
|
origin: "extension",
|
|
92
|
-
sourcePath: `${
|
|
93
|
-
sourceId:
|
|
113
|
+
sourcePath: `${entry.provenance.id}:hooks.yaml`,
|
|
114
|
+
sourceId: entry.provenance.id,
|
|
115
|
+
extension: {
|
|
116
|
+
provenance: entry.provenance,
|
|
117
|
+
generation: captured?.generation ?? 0,
|
|
118
|
+
declarationsDigest: entry.declarationsDigest,
|
|
119
|
+
},
|
|
94
120
|
};
|
|
95
|
-
|
|
96
|
-
|
|
121
|
+
if (entry.parseError !== undefined) {
|
|
122
|
+
fileIssues.push({ source, message: `failed to parse ${source.sourcePath}: ${entry.parseError}` });
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
batches.push({ source, declarations: entry.declarations });
|
|
97
126
|
}
|
|
98
127
|
|
|
99
128
|
const projectBatch = readBatch(
|
|
@@ -113,44 +142,48 @@ export function readHookSources(options: ReadHookSourcesOptions): ReadHookSource
|
|
|
113
142
|
return { batches, fileIssues };
|
|
114
143
|
}
|
|
115
144
|
|
|
116
|
-
export interface
|
|
145
|
+
export interface BuildUserHookRegistrationsOptions {
|
|
117
146
|
cwd: string;
|
|
118
147
|
/** Absolute workspace root a command `cwd` must resolve under; defaults to `cwd`. */
|
|
119
148
|
workspaceRoot?: string;
|
|
120
|
-
|
|
121
|
-
registerHook: (registration: MiddlewareHookRegistration) => void;
|
|
149
|
+
capturedSources?: CapturedHookSourceSet;
|
|
122
150
|
recordReceipt: HookReceiptSink;
|
|
123
151
|
/** Injected for tests; defaults to the spawnSync runner. */
|
|
124
152
|
runCommand?: UserHookCommandRunner;
|
|
125
153
|
now?: () => number;
|
|
126
154
|
}
|
|
127
155
|
|
|
128
|
-
export interface
|
|
156
|
+
export interface BuildUserHookRegistrationsResult extends UserHookLoadResult {
|
|
129
157
|
fileIssues: HookFileIssue[];
|
|
158
|
+
/** One registration per admitted hook, in merged precedence order. Nothing is registered here. */
|
|
159
|
+
registrations: MiddlewareHookRegistration[];
|
|
130
160
|
}
|
|
131
161
|
|
|
132
162
|
/**
|
|
133
|
-
* Read
|
|
134
|
-
*
|
|
135
|
-
*
|
|
163
|
+
* Read project files, merge them with the captured extension declarations,
|
|
164
|
+
* normalize, and build one registration per admitted hook. Pure with respect
|
|
165
|
+
* to the middleware contract: the caller decides when the set is published,
|
|
166
|
+
* which is what lets extension and hook state publish on one stack. The
|
|
167
|
+
* returned hooks and issues feed `clio-coder config inspect`. Best-effort
|
|
168
|
+
* throughout: a malformed file or hook is reported, never thrown.
|
|
136
169
|
*/
|
|
137
|
-
export function
|
|
170
|
+
export function buildUserHookRegistrations(
|
|
171
|
+
options: BuildUserHookRegistrationsOptions,
|
|
172
|
+
): BuildUserHookRegistrationsResult {
|
|
138
173
|
const workspaceRoot = options.workspaceRoot ?? options.cwd;
|
|
139
174
|
const readOptions: ReadHookSourcesOptions = { cwd: options.cwd };
|
|
140
|
-
if (options.
|
|
175
|
+
if (options.capturedSources !== undefined) readOptions.capturedSources = options.capturedSources;
|
|
141
176
|
const { batches, fileIssues } = readHookSources(readOptions);
|
|
142
177
|
const loaded = loadUserHooks(batches, { workspaceRoot });
|
|
143
178
|
const runCommand = options.runCommand ?? spawnSyncCommandRunner();
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
return { ...loaded, fileIssues };
|
|
179
|
+
const registrations = loaded.hooks.map((hook) =>
|
|
180
|
+
userHookToRegistration(hook, {
|
|
181
|
+
recordReceipt: options.recordReceipt,
|
|
182
|
+
runCommand,
|
|
183
|
+
...(options.now !== undefined ? { now: options.now } : {}),
|
|
184
|
+
}),
|
|
185
|
+
);
|
|
186
|
+
return { ...loaded, fileIssues, registrations };
|
|
154
187
|
}
|
|
155
188
|
|
|
156
189
|
/**
|
|
@@ -51,12 +51,47 @@ export const USER_HOOK_COMMAND_OUTPUT_MAX_CHARS = 4_000;
|
|
|
51
51
|
/** Cap on a prompt hook's injected message, in characters. */
|
|
52
52
|
export const USER_HOOK_PROMPT_MAX_CHARS = 2_000;
|
|
53
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Provenance of an installed package that supplied hook declarations, as the
|
|
56
|
+
* composition root attributes it. Middleware treats it as opaque identity
|
|
57
|
+
* data; it neither reads packages nor knows how the digests were produced.
|
|
58
|
+
*/
|
|
59
|
+
export interface UserHookPackageProvenance {
|
|
60
|
+
id: string;
|
|
61
|
+
/** Install scope label of the package (for example "user" or "project"). */
|
|
62
|
+
scope: string;
|
|
63
|
+
/** Path recorded at install, when known. */
|
|
64
|
+
sourcePath?: string;
|
|
65
|
+
/** Canonical filesystem identity of the installed package root. */
|
|
66
|
+
canonicalRoot: string;
|
|
67
|
+
/** SHA-256 of the manifest bytes covered by the installed-tree digest. */
|
|
68
|
+
manifestDigest: string;
|
|
69
|
+
/** Installed-tree digest recorded at install and reverified by the supplier. */
|
|
70
|
+
contentDigest: string;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Attribution for a hook declared by an installed package. The declaration
|
|
75
|
+
* bytes behind `declarationsDigest` are the ones the supplier hashed during
|
|
76
|
+
* content verification and captured; nothing here was re-read from a mutable
|
|
77
|
+
* path after verification.
|
|
78
|
+
*/
|
|
79
|
+
export interface UserHookExtensionSource {
|
|
80
|
+
provenance: UserHookPackageProvenance;
|
|
81
|
+
/** Generation the declarations were admitted under; 0 for an ephemeral build. */
|
|
82
|
+
generation: number;
|
|
83
|
+
/** SHA-256 of the captured hooks.yaml bytes. */
|
|
84
|
+
declarationsDigest: string;
|
|
85
|
+
}
|
|
86
|
+
|
|
54
87
|
export interface UserHookSource {
|
|
55
88
|
origin: UserHookOrigin;
|
|
56
89
|
/** File path or `extensionId:path` the declaration was read from. */
|
|
57
90
|
sourcePath: string;
|
|
58
91
|
/** Extension id when origin is "extension". */
|
|
59
92
|
sourceId?: string;
|
|
93
|
+
/** Present exactly when origin is "extension". */
|
|
94
|
+
extension?: UserHookExtensionSource;
|
|
60
95
|
}
|
|
61
96
|
|
|
62
97
|
export interface NormalizedCommandHook {
|
|
@@ -314,6 +349,17 @@ export function loadUserHooks(
|
|
|
314
349
|
|
|
315
350
|
export type UserHookOutcome = "emitted" | "command-ok" | "command-failed" | "command-timeout" | "skipped";
|
|
316
351
|
|
|
352
|
+
/** Bounded extension attribution carried on every receipt of an extension hook. */
|
|
353
|
+
export interface HookReceiptExtension {
|
|
354
|
+
id: string;
|
|
355
|
+
scope: string;
|
|
356
|
+
canonicalRoot: string;
|
|
357
|
+
manifestDigest: string;
|
|
358
|
+
contentDigest: string;
|
|
359
|
+
declarationsDigest: string;
|
|
360
|
+
generation: number;
|
|
361
|
+
}
|
|
362
|
+
|
|
317
363
|
export interface HookReceipt {
|
|
318
364
|
at: number;
|
|
319
365
|
hookId: string;
|
|
@@ -327,6 +373,7 @@ export interface HookReceipt {
|
|
|
327
373
|
exitCode?: number;
|
|
328
374
|
outputChars?: number;
|
|
329
375
|
toolName?: string;
|
|
376
|
+
extension?: HookReceiptExtension;
|
|
330
377
|
}
|
|
331
378
|
|
|
332
379
|
export type HookReceiptSink = (receipt: HookReceipt) => void;
|
|
@@ -372,6 +419,10 @@ export function userHookToRegistration(
|
|
|
372
419
|
deps: UserHookRegistrationDeps,
|
|
373
420
|
): MiddlewareHookRegistration {
|
|
374
421
|
const now = deps.now ?? Date.now;
|
|
422
|
+
// Attribution is fixed when the registration is built, so a receipt written
|
|
423
|
+
// by a registration from an older generation names that generation even
|
|
424
|
+
// after a newer one is active.
|
|
425
|
+
const extension = hook.source.extension === undefined ? undefined : receiptExtension(hook.source.extension);
|
|
375
426
|
const baseReceipt = (input: { toolName?: string }): Omit<HookReceipt, "outcome"> => ({
|
|
376
427
|
at: now(),
|
|
377
428
|
hookId: hook.id,
|
|
@@ -380,6 +431,7 @@ export function userHookToRegistration(
|
|
|
380
431
|
hash: hook.hash,
|
|
381
432
|
hook: hook.on,
|
|
382
433
|
kind: hook.spec.kind,
|
|
434
|
+
...(extension !== undefined ? { extension: { ...extension } } : {}),
|
|
383
435
|
...(input.toolName !== undefined ? { toolName: input.toolName } : {}),
|
|
384
436
|
});
|
|
385
437
|
const registration: MiddlewareHookRegistration = {
|
|
@@ -401,6 +453,18 @@ export function userHookToRegistration(
|
|
|
401
453
|
return registration;
|
|
402
454
|
}
|
|
403
455
|
|
|
456
|
+
function receiptExtension(source: UserHookExtensionSource): HookReceiptExtension {
|
|
457
|
+
return {
|
|
458
|
+
id: source.provenance.id,
|
|
459
|
+
scope: source.provenance.scope,
|
|
460
|
+
canonicalRoot: source.provenance.canonicalRoot,
|
|
461
|
+
manifestDigest: source.provenance.manifestDigest,
|
|
462
|
+
contentDigest: source.provenance.contentDigest,
|
|
463
|
+
declarationsDigest: source.declarationsDigest,
|
|
464
|
+
generation: source.generation,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
|
|
404
468
|
function evaluateHook(
|
|
405
469
|
hook: NormalizedUserHook,
|
|
406
470
|
deps: UserHookRegistrationDeps,
|
|
@@ -41,19 +41,27 @@ export {
|
|
|
41
41
|
} from "./dispatch-nudge.js";
|
|
42
42
|
export type { MiddlewareBundleOptions } from "./extension.js";
|
|
43
43
|
export { createEnvHookBudgetTracker, createMiddlewareBundle } from "./extension.js";
|
|
44
|
-
export {
|
|
44
|
+
export {
|
|
45
|
+
createHookReceiptLog,
|
|
46
|
+
HOOK_RECEIPT_LOG_CAPACITY,
|
|
47
|
+
type HookReceiptLog,
|
|
48
|
+
readPersistedHookReceipts,
|
|
49
|
+
} from "./hook-receipts.js";
|
|
45
50
|
export type {
|
|
46
51
|
HookReceipt,
|
|
52
|
+
HookReceiptExtension,
|
|
47
53
|
HookReceiptSink,
|
|
48
54
|
NormalizedUserHook,
|
|
49
55
|
UserHookCommandResult,
|
|
50
56
|
UserHookCommandRunner,
|
|
51
57
|
UserHookDeclarationBatch,
|
|
58
|
+
UserHookExtensionSource,
|
|
52
59
|
UserHookKind,
|
|
53
60
|
UserHookLoadIssue,
|
|
54
61
|
UserHookLoadResult,
|
|
55
62
|
UserHookOrigin,
|
|
56
63
|
UserHookOutcome,
|
|
64
|
+
UserHookPackageProvenance,
|
|
57
65
|
UserHookSource,
|
|
58
66
|
} from "./hooks.js";
|
|
59
67
|
export {
|
|
@@ -66,10 +74,12 @@ export {
|
|
|
66
74
|
userHookToRegistration,
|
|
67
75
|
} from "./hooks.js";
|
|
68
76
|
export {
|
|
69
|
-
type
|
|
77
|
+
type BuildUserHookRegistrationsOptions,
|
|
78
|
+
type BuildUserHookRegistrationsResult,
|
|
79
|
+
buildUserHookRegistrations,
|
|
80
|
+
type CapturedHookDeclarations,
|
|
81
|
+
type CapturedHookSourceSet,
|
|
70
82
|
type HookFileIssue,
|
|
71
|
-
type InstallUserHooksResult,
|
|
72
|
-
installUserHooks,
|
|
73
83
|
readHookSources,
|
|
74
84
|
spawnSyncCommandRunner,
|
|
75
85
|
} from "./hooks-io.js";
|
|
@@ -78,7 +88,6 @@ export {
|
|
|
78
88
|
createMarketplaceOfferRegistration,
|
|
79
89
|
MARKETPLACE_OFFER_REGISTRATION_ID,
|
|
80
90
|
type MarketplaceOfferDeps,
|
|
81
|
-
marketplaceAutoInstallReminder,
|
|
82
91
|
marketplaceOfferReminder,
|
|
83
92
|
} from "./marketplace-offer.js";
|
|
84
93
|
export {
|
|
@@ -89,6 +98,19 @@ export {
|
|
|
89
98
|
type MemoryInterventionDeps,
|
|
90
99
|
} from "./memory-intervention.js";
|
|
91
100
|
export { announceMemoryStepEndpoint, type MemoryStepEndpointAnnouncerDeps } from "./memory-step-endpoint.js";
|
|
101
|
+
export {
|
|
102
|
+
createMiddlewareRegistrationTable,
|
|
103
|
+
MIDDLEWARE_REGISTRATION_OWNERS,
|
|
104
|
+
type MiddlewareRegistrationConflict,
|
|
105
|
+
type MiddlewareRegistrationConflictTier,
|
|
106
|
+
type MiddlewareRegistrationOwner,
|
|
107
|
+
type MiddlewareRegistrationReplacement,
|
|
108
|
+
type MiddlewareRegistrationTable,
|
|
109
|
+
type MiddlewareRegistrationTableOptions,
|
|
110
|
+
type PrepareRegistrationReplacementResult,
|
|
111
|
+
type ReplaceRegistrationsRejection,
|
|
112
|
+
type ReplaceRegistrationsReport,
|
|
113
|
+
} from "./registrations.js";
|
|
92
114
|
export { BUILTIN_MIDDLEWARE_RULE_IDS, listMiddlewareRuleDefinitions, listMiddlewareRules } from "./rules.js";
|
|
93
115
|
export type {
|
|
94
116
|
MiddlewareDiagnostic,
|
|
@@ -99,6 +121,7 @@ export type {
|
|
|
99
121
|
RunMiddlewareRegistrationsOptions,
|
|
100
122
|
} from "./runtime.js";
|
|
101
123
|
export {
|
|
124
|
+
formatRegistrationConflict,
|
|
102
125
|
registrationFromRuleDefinition,
|
|
103
126
|
runMiddlewareHook,
|
|
104
127
|
runMiddlewareRegistrations,
|
|
@@ -15,7 +15,6 @@ import {
|
|
|
15
15
|
readPromotionDeclines,
|
|
16
16
|
recordPromotionNeverDecline,
|
|
17
17
|
} from "../resources/skills/promotion.js";
|
|
18
|
-
import type { AutonomyLevel } from "../safety/autonomy.js";
|
|
19
18
|
import type { MiddlewareHookRegistration } from "./runtime.js";
|
|
20
19
|
import { isSubstantiveUserTurn } from "./skills-reminder.js";
|
|
21
20
|
import { type MiddlewareEffect, type MiddlewareHookInput, metadataNumber } from "./types.js";
|
|
@@ -34,9 +33,8 @@ import { type MiddlewareEffect, type MiddlewareHookInput, metadataNumber } from
|
|
|
34
33
|
* becomes a nag. Detection is the local lexical matcher in
|
|
35
34
|
* resources/skills/promotion.ts — no request text leaves the machine.
|
|
36
35
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* autonomous) passes `assertPromotionInstallSource`, the hard runtime gate
|
|
36
|
+
* Every autonomy level requires an explicit operator answer. Each consented
|
|
37
|
+
* promotion-flow install passes `assertPromotionInstallSource`, the hard runtime gate
|
|
40
38
|
* that rejects public registries in code rather than prompt text.
|
|
41
39
|
*
|
|
42
40
|
* Coordinator-only by wiring: this registration is created in the
|
|
@@ -48,7 +46,7 @@ export const MARKETPLACE_OFFER_REGISTRATION_ID = "observer.marketplace-offer";
|
|
|
48
46
|
|
|
49
47
|
export interface MarketplaceOfferInstallResult {
|
|
50
48
|
path: string;
|
|
51
|
-
/** The source the skill was fetched from;
|
|
49
|
+
/** The source the skill was fetched from; retained with the installation result for provenance. */
|
|
52
50
|
sourceUrl: string;
|
|
53
51
|
/** Normalized content hash of what was written; the integrity record the consent overlay would have shown. */
|
|
54
52
|
installedHash: string;
|
|
@@ -59,8 +57,6 @@ export interface MarketplaceOfferDeps {
|
|
|
59
57
|
listInstalledSkillNames(): ReadonlyArray<string>;
|
|
60
58
|
/** The local marketplace lookup (catalog + index); already local-only. */
|
|
61
59
|
listMarketplaceEntries(): ReadonlyArray<MarketplaceSkill>;
|
|
62
|
-
/** The session's effective autonomy at evaluation time. */
|
|
63
|
-
getAutonomy(): AutonomyLevel;
|
|
64
60
|
/** Perform the install; the registration gates the source before calling. */
|
|
65
61
|
installEntry(entry: MarketplaceSkill, scope: "user" | "project"): MarketplaceOfferInstallResult;
|
|
66
62
|
/** Decline persistence; defaults to the promotion module's config-dir store. Keyed by name+version. */
|
|
@@ -100,19 +96,6 @@ export function marketplaceOfferReminder(entry: MarketplaceSkill, offerTag: stri
|
|
|
100
96
|
);
|
|
101
97
|
}
|
|
102
98
|
|
|
103
|
-
export function marketplaceAutoInstallReminder(entry: MarketplaceSkill, result: MarketplaceOfferInstallResult): string {
|
|
104
|
-
// Full-auto skips the operator's yes/no, never the integrity record. The
|
|
105
|
-
// consent overlay states the source and the SHA-256 of what it writes; the
|
|
106
|
-
// autonomous path computes the same hash and must surface it here, so an
|
|
107
|
-
// install nobody was asked about is still traceable to its source and bytes.
|
|
108
|
-
return (
|
|
109
|
-
`[Marketplace] Installed skill "${entry.name}" from Clio's own local marketplace (full-auto) to ${result.path}. ` +
|
|
110
|
-
`Source ${result.sourceUrl}, sha256 ${result.installedHash}. ${entry.description} ` +
|
|
111
|
-
`It is installed but not active — activation stays operator-gated. If it fits this task, ` +
|
|
112
|
-
`suggest /skill ${entry.name} to the operator; never load it yourself.`
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
99
|
interface AnswerLike {
|
|
117
100
|
question: string;
|
|
118
101
|
answer: string;
|
|
@@ -316,21 +299,6 @@ export function createMarketplaceOfferRegistration(deps: MarketplaceOfferDeps):
|
|
|
316
299
|
const match = bestMatch(input.text ?? "");
|
|
317
300
|
if (!match) return NO_EFFECTS;
|
|
318
301
|
offeredNames.add(match.entry.name);
|
|
319
|
-
if (deps.getAutonomy() === "full-auto") {
|
|
320
|
-
try {
|
|
321
|
-
const result = installGated(match.entry, "project");
|
|
322
|
-
return [
|
|
323
|
-
{
|
|
324
|
-
kind: "inject_reminder",
|
|
325
|
-
severity: "info",
|
|
326
|
-
message: marketplaceAutoInstallReminder(match.entry, result),
|
|
327
|
-
},
|
|
328
|
-
];
|
|
329
|
-
} catch {
|
|
330
|
-
// Gate refusal or install failure: fall back to the consent offer
|
|
331
|
-
// so the operator still hears about the match.
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
302
|
const tag = newOfferTag();
|
|
335
303
|
pendingOffer = { entry: match.entry, tag };
|
|
336
304
|
return [{ kind: "inject_reminder", severity: "info", message: marketplaceOfferReminder(match.entry, tag) }];
|