@iowarp/clio-coder 0.4.0 → 0.4.2
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 +131 -0
- package/CONTRIBUTING.md +59 -36
- package/README.md +407 -375
- package/SECURITY.md +2 -1
- package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
- package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
- package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
- package/dist/chunk-2X4RYJTJ.js +39 -0
- package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/chunk-34BHNEE3.js +1846 -0
- package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
- package/dist/chunk-3KIPBMUA.js +308 -0
- package/dist/chunk-3M6DQK6S.js +362 -0
- package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
- package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
- package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
- package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
- package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
- package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/chunk-77QIVUZB.js +1334 -0
- package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
- package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
- package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
- package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
- package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
- package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-F2I26BDK.js +66 -0
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
- package/dist/chunk-HLAFFSEK.js +360 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
- package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
- package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
- package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
- package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
- package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
- package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
- package/dist/chunk-KPXDY6QF.js +47 -0
- package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
- package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
- package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
- package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/chunk-NMJXSHBJ.js +283 -0
- package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
- package/dist/chunk-PJX3WQUQ.js +42 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
- package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
- package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
- package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
- package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
- package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
- package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
- package/dist/chunk-UXCU4E3T.js +303 -0
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
- package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
- package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
- package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
- package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
- package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
- package/dist/chunk-XQRY4DTA.js +657 -0
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
- package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
- package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +38 -37
- package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
- package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
- package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
- package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
- package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
- package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
- package/dist/doctor-LHBD36VU.js +773 -0
- package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
- package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
- package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
- package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
- package/dist/fleet-view-TWHJKCN6.js +96 -0
- package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
- package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
- package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
- package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
- package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
- package/dist/panes-IXKLOKA2.js +75 -0
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
- package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
- package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
- package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
- package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
- package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
- package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
- package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
- package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
- package/dist/worker/entry.js +83 -63
- 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} +26 -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} +25 -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} +40 -17
- package/docs/{observability.md → architecture/observability.md} +26 -13
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
- package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
- 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} +26 -13
- 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} +70 -46
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
- package/docs/guide/configuration-reference.md +1158 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
- package/docs/history/release-cut-checklist.md +207 -0
- package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
- 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} +41 -50
- 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} +17 -10
- 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 +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +13 -21
- package/skills/README.md +51 -42
- package/skills/coding/ast-grep/SKILL.md +9 -3
- package/skills/coding/coding-standards/SKILL.md +9 -3
- package/skills/coding/prototype/SKILL.md +9 -3
- package/skills/coding/tdd/SKILL.md +9 -3
- package/skills/context/context-handoff/SKILL.md +13 -4
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +9 -3
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +10 -5
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +10 -4
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +8 -3
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +8 -3
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
- package/skills/meta/clio-coder-test/SKILL.md +146 -0
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
- package/skills/meta/clio-coder-test/references/harness.md +102 -0
- package/skills/meta/clio-coder-test/references/test-map.md +96 -0
- package/skills/meta/credentials/SKILL.md +10 -3
- package/skills/meta/find-skills/SKILL.md +9 -3
- package/skills/meta/herdr/SKILL.md +9 -3
- package/skills/meta/skill-craft/SKILL.md +39 -16
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +9 -3
- package/skills/planning/prd/SKILL.md +9 -3
- package/skills/planning/product-intent/SKILL.md +9 -3
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +9 -3
- package/skills/research/experiment-protocol/SKILL.md +10 -3
- package/skills/research/scientific-debugging/SKILL.md +10 -3
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +10 -3
- package/skills/skill-marketplace.json +285 -66
- package/skills/workflow/cut-it/SKILL.md +11 -3
- package/skills/workflow/design-council/SKILL.md +12 -3
- package/skills/workflow/grill-me/SKILL.md +9 -3
- package/skills/workflow/workflow-distiller/SKILL.md +9 -3
- package/src/cli/acp.ts +2 -2
- package/src/cli/args.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +6 -6
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +68 -15
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -31
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +28 -20
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +31 -10
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/eval.ts +1 -2
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +9 -6
- package/src/cli/index.ts +2 -1
- package/src/cli/internal-dispatch.ts +3 -4
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +19 -5
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +13 -17
- package/src/cli/share.ts +6 -2
- package/src/cli/skills-eval.ts +14 -14
- package/src/cli/targets.ts +25 -30
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +96 -4
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +1 -1
- package/src/cli/wiki-generate.ts +6 -6
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +132 -87
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-events.ts +51 -6
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1066 -886
- package/src/core/defaults.ts +326 -530
- package/src/core/dispatch-outcome.ts +16 -0
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +33 -52
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/prompt-hint.ts +9 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- 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/catalog.ts +14 -26
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +26 -4
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +56 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -6
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -0
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capability-match.ts +10 -0
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +169 -82
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- 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/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +220 -70
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +0 -23
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal.ts +9 -19
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +47 -40
- package/src/domains/dispatch/types.ts +58 -6
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +10 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +20 -3
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- 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/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +22 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +276 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +86 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- 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 +35 -4
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +30 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +195 -25
- package/src/domains/mux/detect.ts +23 -6
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +21 -1
- package/src/domains/mux/operations.ts +72 -5
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +79 -7
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/extension.ts +12 -4
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +15 -91
- package/src/domains/observability/trace-store.ts +65 -19
- package/src/domains/prompts/compiler.ts +75 -55
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +100 -12
- package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
- 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 +11 -18
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +99 -23
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtime-resolution.ts +31 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/cost-provenance.ts +19 -0
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +87 -39
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +41 -18
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/loop-detector.ts +7 -4
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/session/task-board.ts +10 -9
- package/src/domains/share/archive.ts +249 -43
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +89 -35
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +4 -23
- package/src/engine/apis/lmstudio.ts +4 -9
- package/src/engine/apis/ollama-native.ts +9 -9
- package/src/engine/apis/openai-completions.ts +30 -27
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +10 -35
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -17
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +54 -24
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +163 -120
- package/src/interactive/application-controller.ts +23 -22
- package/src/interactive/bus-notices.ts +10 -3
- package/src/interactive/chat-loop-messages.ts +3 -13
- package/src/interactive/chat-loop.ts +18 -9
- package/src/interactive/chat-panel.ts +37 -14
- package/src/interactive/chat-renderer.ts +71 -7
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +36 -44
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +15 -44
- package/src/interactive/interactive-application.ts +116 -61
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +6 -2
- package/src/interactive/interactive-presentation.ts +22 -17
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +65 -17
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +360 -303
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +145 -43
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +401 -190
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -24
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +41 -26
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +72 -11
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +6 -6
- package/src/tools/bash.ts +2 -2
- 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/compete-worktrees.ts +27 -17
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +44 -13
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +6 -2
- package/src/tools/dispatch-plan.ts +48 -15
- package/src/tools/dispatch-run-events.ts +13 -11
- package/src/tools/dispatch-runner.ts +11 -6
- 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/find.ts +1 -6
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +4 -5
- package/src/tools/observers.ts +0 -33
- 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 +30 -7
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-36EJLSQQ.js +0 -814
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUCTJL45.js +0 -45
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-TZ3SGWZZ.js +0 -48
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/dist/fleet-view-ZCON35AG.js +0 -102
- package/dist/panes-HMABYVO4.js +0 -58
- package/docs/artifact-versions.md +0 -67
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/release-cut-checklist.md +0 -193
- package/docs/time-conventions.md +0 -101
- package/skills/meta/clio-test/SKILL.md +0 -133
- package/skills/meta/clio-test/references/harness.md +0 -126
- package/skills/meta/clio-test/references/test-map.md +0 -69
- package/src/engine/apis/degraded-inference.ts +0 -95
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
|
|
41
41
|
import { appendFileSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync } from "node:fs";
|
|
42
42
|
import { join } from "node:path";
|
|
43
|
+
import { normalizeClioCoderEventType } from "../../core/naming-events.js";
|
|
43
44
|
import { clioStateDir, stateRootRemoved } from "../../core/xdg.js";
|
|
44
45
|
|
|
45
46
|
/** Directory name under the state root holding one subdirectory per run. */
|
|
@@ -50,9 +51,6 @@ export const RUN_EVENT_JOURNAL_FILE = "events.ndjson";
|
|
|
50
51
|
export const RUN_EVENT_JOURNAL_CAP_BYTES = 2 * 1024 * 1024;
|
|
51
52
|
/** Pending bytes that trigger a flush of droppable lines. */
|
|
52
53
|
export const RUN_EVENT_JOURNAL_FLUSH_BYTES = 8 * 1024;
|
|
53
|
-
/** Per-process env override, resolved ahead of settings (see runEventJournalEnabled). */
|
|
54
|
-
export const RUN_EVENT_JOURNAL_ENV_VAR = "CLIO_CODER_RUN_JOURNAL";
|
|
55
|
-
|
|
56
54
|
interface JournalLineBase {
|
|
57
55
|
seq: number;
|
|
58
56
|
at: string;
|
|
@@ -118,7 +116,7 @@ export interface RunEventJournal extends RunEventJournalSink {
|
|
|
118
116
|
let configuredEnabled: boolean | undefined;
|
|
119
117
|
|
|
120
118
|
/**
|
|
121
|
-
* Install the `
|
|
119
|
+
* Install the `fleet.history.journal` setting. Called from the composition root beside
|
|
122
120
|
* `configureGuardrails` so the journal never reads settings.yaml itself; a
|
|
123
121
|
* settings read on the dispatch event path would be both a cost and a throw
|
|
124
122
|
* site (readSettings rejects an invalid file).
|
|
@@ -127,17 +125,9 @@ export function configureRunEventJournal(enabled: boolean | undefined): void {
|
|
|
127
125
|
configuredEnabled = enabled;
|
|
128
126
|
}
|
|
129
127
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (normalized === "1" || normalized === "true" || normalized === "on") return true;
|
|
134
|
-
if (normalized === "0" || normalized === "false" || normalized === "off") return false;
|
|
135
|
-
return undefined;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/** env override > configured settings > on. */
|
|
139
|
-
export function runEventJournalEnabled(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
140
|
-
return parseEnvFlag(env[RUN_EVENT_JOURNAL_ENV_VAR]) ?? configuredEnabled ?? true;
|
|
128
|
+
/** Effective settings projection, then the shipped default. */
|
|
129
|
+
function runEventJournalEnabled(): boolean {
|
|
130
|
+
return configuredEnabled ?? true;
|
|
141
131
|
}
|
|
142
132
|
|
|
143
133
|
// ---------------------------------------------------------------------------
|
|
@@ -150,7 +140,7 @@ export function runEventJournalRoot(): string {
|
|
|
150
140
|
}
|
|
151
141
|
|
|
152
142
|
/** One run's journal directory. */
|
|
153
|
-
|
|
143
|
+
function runEventJournalDir(runId: string, root?: string): string {
|
|
154
144
|
return join(root ?? runEventJournalRoot(), runId);
|
|
155
145
|
}
|
|
156
146
|
|
|
@@ -247,10 +237,10 @@ export interface CreateRunEventJournalOptions {
|
|
|
247
237
|
isEnabled?: () => boolean;
|
|
248
238
|
}
|
|
249
239
|
|
|
250
|
-
|
|
240
|
+
function createRunEventJournal(options: CreateRunEventJournalOptions = {}): RunEventJournal {
|
|
251
241
|
const capBytes = options.capBytes ?? RUN_EVENT_JOURNAL_CAP_BYTES;
|
|
252
242
|
const flushBytes = options.flushBytes ?? RUN_EVENT_JOURNAL_FLUSH_BYTES;
|
|
253
|
-
const warn = options.warn ?? ((message: string) => process.stderr.write(`[clio:journal] ${message}\n`));
|
|
243
|
+
const warn = options.warn ?? ((message: string) => process.stderr.write(`[clio-coder:journal] ${message}\n`));
|
|
254
244
|
const now = options.now ?? (() => new Date());
|
|
255
245
|
const isEnabled = options.isEnabled ?? (() => runEventJournalEnabled());
|
|
256
246
|
const runs = new Map<string, RunJournalState>();
|
|
@@ -494,7 +484,7 @@ function parseJournalLine(raw: string): RunEventJournalLine | null {
|
|
|
494
484
|
seq: record.seq,
|
|
495
485
|
at: record.at,
|
|
496
486
|
kind: "event",
|
|
497
|
-
type: record.type,
|
|
487
|
+
type: normalizeClioCoderEventType(record.type),
|
|
498
488
|
...(detail === undefined ? {} : { detail }),
|
|
499
489
|
};
|
|
500
490
|
}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* receipts/<runId>.json per-run RunReceipt
|
|
7
7
|
*
|
|
8
8
|
* The ledger holds an in-memory mirror of runs.json. `create()` and `update()`
|
|
9
|
-
* mutate memory only; `persist()` writes the bounded ring (default
|
|
10
|
-
*
|
|
9
|
+
* mutate memory only; `persist()` writes the settings-bounded ring (default
|
|
10
|
+
* 1000) atomically via engine.atomicWrite.
|
|
11
11
|
*
|
|
12
12
|
* No worker spawning, no domain wire-up, no SafeEventBus emission yet. Those
|
|
13
13
|
* land in P6S3 and P6S5. This slice is a pure persistence primitive.
|
|
@@ -159,7 +159,6 @@ function readRuns(): RunEnvelope[] {
|
|
|
159
159
|
|
|
160
160
|
function resolveMaxRuns(opt?: number | undefined): number {
|
|
161
161
|
if (opt !== undefined && opt > 0) return Math.floor(opt);
|
|
162
|
-
// env (CLIO_CODER_MAX_DISPATCH_RUNS) > settings guardrails > default; see core/guardrails.ts.
|
|
163
162
|
return resolveGuardrail("maxDispatchRuns");
|
|
164
163
|
}
|
|
165
164
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pure aggregation helpers for the per-tool stats folded into a RunReceipt.
|
|
3
3
|
*
|
|
4
|
-
* Sourced from the worker's ToolTelemetry stream (`
|
|
4
|
+
* Sourced from the worker's ToolTelemetry stream (`clio_coder_tool_finish` IPC
|
|
5
5
|
* events). Kept as a small standalone module so receipts have a single source
|
|
6
6
|
* of truth for the aggregation invariants, and so loops, retries, errors,
|
|
7
7
|
* blocked admissions, and parallel-batch tool calls all flow through one
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
*
|
|
11
11
|
* SSH tier invariants:
|
|
12
12
|
* - The remote environment is a whitelist, never the orchestrator's
|
|
13
|
-
* process.env. Remote workers default to
|
|
14
|
-
* worker on a node that serves models for the operator can never
|
|
15
|
-
* resident model.
|
|
13
|
+
* process.env. Remote workers default to a user-managed target lifecycle
|
|
14
|
+
* so a worker on a node that serves models for the operator can never
|
|
15
|
+
* evict a resident model.
|
|
16
16
|
* - The orchestrator cwd is entered on the remote node (shared-filesystem
|
|
17
17
|
* assumption; path parity is a doctor preflight, and placement refuses
|
|
18
18
|
* nodes that have not passed it).
|
|
@@ -26,13 +26,7 @@ import { AI_AGENT_NAME } from "../../core/agent-environment.js";
|
|
|
26
26
|
import { shellQuote } from "../../core/shell-quote.js";
|
|
27
27
|
import type { WorkerSpec } from "../../worker/spec-contract.js";
|
|
28
28
|
import type { RunNodeIdentity } from "./types.js";
|
|
29
|
-
import {
|
|
30
|
-
type SpawnedWorker,
|
|
31
|
-
type SpawnOptions,
|
|
32
|
-
spawnNativeWorker,
|
|
33
|
-
spawnWorkerProcess,
|
|
34
|
-
type WorkerProcessOptions,
|
|
35
|
-
} from "./worker-spawn.js";
|
|
29
|
+
import { type SpawnedWorker, spawnWorkerProcess, type WorkerProcessOptions } from "./worker-spawn.js";
|
|
36
30
|
|
|
37
31
|
export type WorkerTransportKind = "local" | "ssh";
|
|
38
32
|
|
|
@@ -68,9 +62,9 @@ export interface SshNodeEndpoint {
|
|
|
68
62
|
*/
|
|
69
63
|
clioCoderEntry?: string;
|
|
70
64
|
/**
|
|
71
|
-
* Residency posture
|
|
72
|
-
* remote workers must never evict models resident on
|
|
73
|
-
* is an explicit per-node opt-in.
|
|
65
|
+
* Residency posture projected into the remote worker's target lifecycle.
|
|
66
|
+
* Defaults to "observe": remote workers must never evict models resident on
|
|
67
|
+
* their node. "manage" is an explicit per-node opt-in.
|
|
74
68
|
*/
|
|
75
69
|
residency?: "observe" | "manage";
|
|
76
70
|
connectTimeoutSec?: number;
|
|
@@ -94,17 +88,6 @@ export function localNodeIdentity(): RunNodeIdentity {
|
|
|
94
88
|
return { id: LOCAL_NODE_ID, kind: "local" };
|
|
95
89
|
}
|
|
96
90
|
|
|
97
|
-
export function createLocalWorkerTransport(opts?: Omit<SpawnOptions, "cwd">): WorkerTransport {
|
|
98
|
-
return {
|
|
99
|
-
kind: "local",
|
|
100
|
-
node: localNodeIdentity(),
|
|
101
|
-
spawn(spec, spawnOpts) {
|
|
102
|
-
// The caller's per-spawn options ride over the transport's own defaults.
|
|
103
|
-
return spawnNativeWorker(spec, { ...opts, ...spawnOpts });
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
|
|
108
91
|
const DEFAULT_SSH_CONNECT_TIMEOUT_SEC = 10;
|
|
109
92
|
const DEFAULT_REMOTE_CLIO_ENTRY = "clio-coder worker";
|
|
110
93
|
|
|
@@ -116,17 +99,36 @@ const DEFAULT_REMOTE_CLIO_ENTRY = "clio-coder worker";
|
|
|
116
99
|
* orchestrator-supplied credential.
|
|
117
100
|
*/
|
|
118
101
|
function remoteEnvAssignments(node: SshNodeEndpoint): string {
|
|
119
|
-
const residency = node.residency ?? "observe";
|
|
120
102
|
// `$$` is the login shell's pid, and it leads the process group the remote
|
|
121
103
|
// command runs in. `exec` replaces that shell in place, so the worker
|
|
122
104
|
// inherits both the pid and the group leadership, and the value it announces
|
|
123
105
|
// is the group an abort must signal.
|
|
124
106
|
const labels = (node.labels ?? []).map((label) => label.trim()).filter((label) => label.length > 0);
|
|
125
107
|
const labelAssignment = labels.length > 0 ? ` CLIO_CODER_WORKER_LABELS=${shellQuote(labels.join(","))}` : "";
|
|
126
|
-
return `AI_AGENT=${AI_AGENT_NAME}
|
|
108
|
+
return `AI_AGENT=${AI_AGENT_NAME} CLIO_CODER_WORKER_PGID=$$${labelAssignment}`;
|
|
127
109
|
}
|
|
128
110
|
|
|
129
|
-
|
|
111
|
+
type TargetLifecycle = NonNullable<WorkerSpec["target"]["lifecycle"]>;
|
|
112
|
+
|
|
113
|
+
export function resolveSshTargetLifecycle(
|
|
114
|
+
residency: SshNodeEndpoint["residency"],
|
|
115
|
+
targetLifecycle: WorkerSpec["target"]["lifecycle"],
|
|
116
|
+
): TargetLifecycle {
|
|
117
|
+
if (targetLifecycle === "user-managed" || residency !== "manage") return "user-managed";
|
|
118
|
+
return "clio-coder-managed";
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function workerSpecForSshNode(node: SshNodeEndpoint, spec: WorkerSpec): WorkerSpec {
|
|
122
|
+
return {
|
|
123
|
+
...spec,
|
|
124
|
+
target: {
|
|
125
|
+
...spec.target,
|
|
126
|
+
lifecycle: resolveSshTargetLifecycle(node.residency, spec.target.lifecycle),
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function buildRemoteWorkerCommand(node: SshNodeEndpoint, cwd: string): string {
|
|
130
132
|
const entry =
|
|
131
133
|
node.clioCoderEntry !== undefined && node.clioCoderEntry.trim().length > 0
|
|
132
134
|
? node.clioCoderEntry.trim()
|
|
@@ -191,20 +193,25 @@ export function createSshWorkerTransport(node: SshNodeEndpoint, opts?: SshTransp
|
|
|
191
193
|
// are the transport's own and compose with the caller's rather than
|
|
192
194
|
// replacing them; every other option is forwarded as handed.
|
|
193
195
|
const { cwd: _consumedCwd, onAnnounce, onForcedKill, ...forwarded } = spawnOpts ?? {};
|
|
194
|
-
return spawnWorkerProcess(
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
196
|
+
return spawnWorkerProcess(
|
|
197
|
+
sshBinary,
|
|
198
|
+
buildSshArgs(node, buildRemoteWorkerCommand(node, cwd)),
|
|
199
|
+
workerSpecForSshNode(node, spec),
|
|
200
|
+
{
|
|
201
|
+
...(opts?.shutdownGraceMs !== undefined ? { shutdownGraceMs: opts.shutdownGraceMs } : {}),
|
|
202
|
+
...forwarded,
|
|
203
|
+
env: process.env,
|
|
204
|
+
onAnnounce: (attestation) => {
|
|
205
|
+
remote.pid = attestation.pid;
|
|
206
|
+
remote.processGroupId = attestation.processGroupId;
|
|
207
|
+
onAnnounce?.(attestation);
|
|
208
|
+
},
|
|
209
|
+
onForcedKill: () => {
|
|
210
|
+
killRemote();
|
|
211
|
+
onForcedKill?.();
|
|
212
|
+
},
|
|
206
213
|
},
|
|
207
|
-
|
|
214
|
+
);
|
|
208
215
|
},
|
|
209
216
|
};
|
|
210
217
|
}
|
|
@@ -506,7 +506,7 @@ export interface RunEnvelope {
|
|
|
506
506
|
|
|
507
507
|
/**
|
|
508
508
|
* Per-tool aggregates folded into a receipt at run completion. Sourced from
|
|
509
|
-
* the worker's ToolTelemetry stream (`
|
|
509
|
+
* the worker's ToolTelemetry stream (`clio_coder_tool_finish` IPC events). Sorted
|
|
510
510
|
* by tool name on write so digests are deterministic across runs.
|
|
511
511
|
*/
|
|
512
512
|
export interface ToolCallStat {
|
|
@@ -570,7 +570,7 @@ export interface RunReceiptDelegation {
|
|
|
570
570
|
toolCallsRequested: number;
|
|
571
571
|
toolCallsApproved: number;
|
|
572
572
|
toolCallsDenied: number;
|
|
573
|
-
toolGovernance: "clio-policy" | "agent-managed" | "deny-all";
|
|
573
|
+
toolGovernance: "clio-coder-policy" | "agent-managed" | "deny-all";
|
|
574
574
|
toolCallLog: DelegationToolCallLogEntry[];
|
|
575
575
|
}
|
|
576
576
|
|
|
@@ -584,7 +584,7 @@ export interface RunReceiptSafetySummary {
|
|
|
584
584
|
* (reason code `guard_block`); a call that required permission and was denied
|
|
585
585
|
* non-interactively is counted under `permissionRequested`, not `blocked`, so
|
|
586
586
|
* scripts can tell "approval would have been needed" apart from a policy
|
|
587
|
-
* block (see docs/safety-model.md). Such a call still appears in
|
|
587
|
+
* block (see docs/architecture/safety-model.md). Such a call still appears in
|
|
588
588
|
* `blockedAttempts` because its outcome was blocked, so `decisions.blocked`
|
|
589
589
|
* is not a proxy for the number of blocked attempts; use `blockedAttempts`
|
|
590
590
|
* or the `toolStats`/`toolActivity` blocked counts for that.
|
|
@@ -712,14 +712,66 @@ export interface RunHostVerificationCheck {
|
|
|
712
712
|
memo: boolean;
|
|
713
713
|
outputTail: string;
|
|
714
714
|
artifactPath?: string;
|
|
715
|
-
/**
|
|
715
|
+
/** Run that owns the evidence when it did not come from this run: a memo hit, or the batch member the shared check ran under. */
|
|
716
716
|
evidenceRunId?: string;
|
|
717
717
|
}
|
|
718
718
|
|
|
719
|
+
/**
|
|
720
|
+
* Why a batch-settled failing check was or was not charged to a run. It is a
|
|
721
|
+
* batch-wide fact and is sealed identically on every receipt in the batch; each
|
|
722
|
+
* receipt's own `status` is what that run is judged by.
|
|
723
|
+
*/
|
|
724
|
+
export interface RunHostVerificationAttribution {
|
|
725
|
+
/** Declared check id that failed. */
|
|
726
|
+
check: string;
|
|
727
|
+
/**
|
|
728
|
+
* Absolute repository paths the check's own output named, capped at 32. The
|
|
729
|
+
* paths that decided the charge come first so a truncated list still contains
|
|
730
|
+
* the evidence behind the verdict; each group is sorted.
|
|
731
|
+
*/
|
|
732
|
+
implicated: string[];
|
|
733
|
+
/** Run ids the failure is charged to, sorted; empty when every named path belongs to a run that did not declare the check. */
|
|
734
|
+
charged: string[];
|
|
735
|
+
/**
|
|
736
|
+
* The weakest evidence behind the charge set, never the strongest, so the
|
|
737
|
+
* record cannot claim a certainty it does not have.
|
|
738
|
+
*
|
|
739
|
+
* `write_roots`: every charged run has an implicated path inside its own
|
|
740
|
+
* declared write roots. `attributed_elsewhere`: nothing is charged because
|
|
741
|
+
* every implicated path falls inside the write roots of a live batch member
|
|
742
|
+
* that did not declare this check. `unattributable`: the charge is not backed
|
|
743
|
+
* by per-run path evidence, which covers a failure that named no path, one
|
|
744
|
+
* that named only paths no member claims, and one charged to a run that
|
|
745
|
+
* declared no write roots at all. The first two of those charge every run that
|
|
746
|
+
* declared the check: a real failure with no owner is charged to everyone
|
|
747
|
+
* rather than excused for everyone.
|
|
748
|
+
*/
|
|
749
|
+
basis: "write_roots" | "attributed_elsewhere" | "unattributable";
|
|
750
|
+
}
|
|
751
|
+
|
|
719
752
|
export interface RunHostVerification {
|
|
720
|
-
|
|
753
|
+
/**
|
|
754
|
+
* `verified` states that every declared check passed, which is the claim
|
|
755
|
+
* `trust-status.ts:619` turns into "validated by host-verification".
|
|
756
|
+
* `not_implicated` is the batch-settled exculpation: a declared check failed
|
|
757
|
+
* for the batch and this run's `checks` carries its non-zero exit code, but
|
|
758
|
+
* the failure was charged elsewhere, so no validator speaks for this run.
|
|
759
|
+
*/
|
|
760
|
+
status: "verified" | "rejected" | "skipped" | "not_implicated";
|
|
721
761
|
reason?: string;
|
|
722
762
|
checks: RunHostVerificationCheck[];
|
|
763
|
+
/**
|
|
764
|
+
* How the declared checks were run. Absent means the single-run strategy every
|
|
765
|
+
* receipt carried before batch settlement existed: the checks ran for this run
|
|
766
|
+
* alone, straight after it finished. `batch-settled` means they ran once for
|
|
767
|
+
* the whole parallel batch after every live member had finished. The field is
|
|
768
|
+
* omitted rather than stamped `"single"` so a single-task receipt digests
|
|
769
|
+
* exactly as it did before (`receipt-integrity.ts:145-147` is the same
|
|
770
|
+
* reasoning applied one field over).
|
|
771
|
+
*/
|
|
772
|
+
strategy?: "batch-settled";
|
|
773
|
+
/** Per-failing-check attribution for a batch-settled run; absent when nothing failed. */
|
|
774
|
+
attribution?: RunHostVerificationAttribution[];
|
|
723
775
|
}
|
|
724
776
|
|
|
725
777
|
export interface RunReceipt {
|
|
@@ -810,7 +862,7 @@ export interface RunReceipt {
|
|
|
810
862
|
dynamicHash?: string | null;
|
|
811
863
|
promptSignature?: string | null;
|
|
812
864
|
toolSignature?: string | null;
|
|
813
|
-
|
|
865
|
+
clioCoderVersion: string;
|
|
814
866
|
piMonoVersion: string;
|
|
815
867
|
platform: string;
|
|
816
868
|
nodeVersion: string;
|
|
@@ -69,7 +69,7 @@ export {
|
|
|
69
69
|
*/
|
|
70
70
|
export function computeSettingsFingerprint(settings: unknown): string {
|
|
71
71
|
return createHash("sha256")
|
|
72
|
-
.update(`clio.settings:${canonicalJson(settings)}`, "utf8")
|
|
72
|
+
.update(`clio-coder.settings:${canonicalJson(settings)}`, "utf8")
|
|
73
73
|
.digest("hex");
|
|
74
74
|
}
|
|
75
75
|
|
|
@@ -151,7 +151,7 @@ export function approvedIdentityForSpec(spec: {
|
|
|
151
151
|
|
|
152
152
|
function workerSpecDigestOf(spec: unknown): string {
|
|
153
153
|
return createHash("sha256")
|
|
154
|
-
.update(`clio.workerSpec:${canonicalJson(spec)}`, "utf8")
|
|
154
|
+
.update(`clio-coder.workerSpec:${canonicalJson(spec)}`, "utf8")
|
|
155
155
|
.digest("hex");
|
|
156
156
|
}
|
|
157
157
|
|
|
@@ -11,6 +11,11 @@ import { parseEvalVerdictEnvelopeV1 } from "../schema/verdict.js";
|
|
|
11
11
|
import { evalRoot } from "../store.js";
|
|
12
12
|
import { redactArtifactForStorage } from "./redact.js";
|
|
13
13
|
|
|
14
|
+
// This is the documented location (docs/architecture/artifact-versions.md's
|
|
15
|
+
// Eval Artifact row): <dataDir>/evals/<evalId>.json, flat. The legacy version-1
|
|
16
|
+
// shape skills-eval writes lives at evalRoot()/skills-eval/ instead
|
|
17
|
+
// (store.ts's evalArtifactPath) so the two writers can never resolve to the
|
|
18
|
+
// same file for the same id.
|
|
14
19
|
function evalArtifactPathV4(dataDir: string, evalId: string): string {
|
|
15
20
|
assertSafeId(evalId, "eval");
|
|
16
21
|
return join(evalRoot(dataDir), `${evalId}.json`);
|
|
@@ -58,14 +63,15 @@ export function parseEvalArtifactV4(value: unknown, source: string): EvalArtifac
|
|
|
58
63
|
value.aggregates === undefined
|
|
59
64
|
? undefined
|
|
60
65
|
: (readArray(value, source, "aggregates") as NonNullable<EvalArtifactV4["aggregates"]>);
|
|
66
|
+
const clioCoder = asRecord(value.clioCoder ?? value.clio, `${source}.clioCoder`);
|
|
61
67
|
return {
|
|
62
68
|
version: 4,
|
|
63
69
|
evalId: readString(value, source, "evalId"),
|
|
64
70
|
suite: { id: readString(suite, `${source}.suite`, "id"), hash: readString(suite, `${source}.suite`, "hash") },
|
|
65
|
-
|
|
66
|
-
version: readString(
|
|
67
|
-
commit: readNullableString(
|
|
68
|
-
entry: readString(
|
|
71
|
+
clioCoder: {
|
|
72
|
+
version: readString(clioCoder, `${source}.clioCoder`, "version"),
|
|
73
|
+
commit: readNullableString(clioCoder, `${source}.clioCoder`, "commit"),
|
|
74
|
+
entry: readString(clioCoder, `${source}.clioCoder`, "entry"),
|
|
69
75
|
},
|
|
70
76
|
environment: {
|
|
71
77
|
platform: readString(asRecord(value.environment, `${source}.environment`), `${source}.environment`, "platform"),
|
|
@@ -62,14 +62,6 @@ export function resolveMetricAssertion(
|
|
|
62
62
|
return { actual, unresolved: actual === null, holds: comparisonHolds(assertion, actual) };
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
export function evaluateMetricAssertion(
|
|
66
|
-
assertion: EvalMetricAssertion,
|
|
67
|
-
metrics: Readonly<Record<string, unknown>>,
|
|
68
|
-
artifact?: EvalArtifactV4,
|
|
69
|
-
): boolean {
|
|
70
|
-
return comparisonHolds(assertion, metricValue(assertion.metric, metrics, artifact));
|
|
71
|
-
}
|
|
72
|
-
|
|
73
65
|
function comparisonHolds(assertion: EvalMetricAssertion, actual: number | string | boolean | null): boolean {
|
|
74
66
|
switch (assertion.op) {
|
|
75
67
|
case "lt":
|
|
@@ -128,7 +128,7 @@ function promptFragmentIdentities(
|
|
|
128
128
|
.sort((left, right) => left.id.localeCompare(right.id));
|
|
129
129
|
}
|
|
130
130
|
if (recipe === null) return [];
|
|
131
|
-
const selected = ["identity.clio-worker", "operating.contract", "operating.worker"];
|
|
131
|
+
const selected = ["identity.clio-coder-worker", "operating.contract", "operating.worker"];
|
|
132
132
|
if (autonomy !== null) selected.push(`safety.${autonomy}`);
|
|
133
133
|
const fragments: EvalPromptFragmentIdentityV1[] = [];
|
|
134
134
|
try {
|
|
@@ -90,13 +90,6 @@ export function createTokenUsageFold(): EvalTokenUsageFold {
|
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
/** Whole-buffer form of {@link createTokenUsageFold}. */
|
|
94
|
-
export function tokenUsageFromJsonl(stream: string): EvalTokenStreamUsage {
|
|
95
|
-
const fold = createTokenUsageFold();
|
|
96
|
-
fold.push(stream);
|
|
97
|
-
return fold.usage();
|
|
98
|
-
}
|
|
99
|
-
|
|
100
93
|
export function addTokenStreamUsage(left: EvalTokenStreamUsage, right: EvalTokenStreamUsage): EvalTokenStreamUsage {
|
|
101
94
|
return {
|
|
102
95
|
measured: left.measured || right.measured,
|
|
@@ -14,7 +14,7 @@ export function renderEvalReport(artifact: EvalRunArtifact, artifactPath?: strin
|
|
|
14
14
|
lines.splice(
|
|
15
15
|
2,
|
|
16
16
|
0,
|
|
17
|
-
`
|
|
17
|
+
`clioCoder: ${artifact.clioCoder.version} commit=${artifact.clioCoder.commit ?? "unknown"} entry=${artifact.clioCoder.entry}`,
|
|
18
18
|
);
|
|
19
19
|
lines.splice(3, 0, `environment: ${artifact.environment.platform} node=${artifact.environment.node}`);
|
|
20
20
|
const evidenceIds = uniqueEvidenceIds(artifact);
|
|
@@ -43,7 +43,7 @@ export async function runEvalTasks(options: RunEvalOptions): Promise<EvalRunArti
|
|
|
43
43
|
evalId: options.evalId,
|
|
44
44
|
taskFile: options.loadedTaskFile.path,
|
|
45
45
|
taskFileHash: options.loadedTaskFile.contentHash,
|
|
46
|
-
|
|
46
|
+
clioCoder: evalClioProvenance(options.provenance),
|
|
47
47
|
environment: evalEnvironmentProvenance(),
|
|
48
48
|
target: options.provenance?.target ?? null,
|
|
49
49
|
model: options.provenance?.model ?? null,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
2
|
+
import { normalizeClioCoderEventRecord } from "../../../core/naming-events.js";
|
|
2
3
|
import { shellQuote } from "../../../core/shell-quote.js";
|
|
3
4
|
import { clioStateDir } from "../../../core/xdg.js";
|
|
4
5
|
import {
|
|
@@ -92,7 +93,7 @@ type ToolCallMetrics = {
|
|
|
92
93
|
type ToolOutcome = "ok" | "error" | "blocked";
|
|
93
94
|
|
|
94
95
|
/** Fold the terminal tool events emitted by `clio-coder run --json`. */
|
|
95
|
-
|
|
96
|
+
function toolCallMetricsFromJsonl(stdout: string): ToolCallMetrics {
|
|
96
97
|
const executionEnds: ToolCallMetrics = { totalCalls: 0, failed: 0, blocked: 0 };
|
|
97
98
|
const canonicalFinishes: ToolCallMetrics = { totalCalls: 0, failed: 0, blocked: 0 };
|
|
98
99
|
const seenExecutionEnds = new Set<string>();
|
|
@@ -104,7 +105,7 @@ export function toolCallMetricsFromJsonl(stdout: string): ToolCallMetrics {
|
|
|
104
105
|
try {
|
|
105
106
|
const parsed: unknown = JSON.parse(line);
|
|
106
107
|
if (!isRecord(parsed)) continue;
|
|
107
|
-
event = parsed;
|
|
108
|
+
event = normalizeClioCoderEventRecord(parsed);
|
|
108
109
|
} catch {
|
|
109
110
|
continue;
|
|
110
111
|
}
|
|
@@ -119,7 +120,7 @@ export function toolCallMetricsFromJsonl(stdout: string): ToolCallMetrics {
|
|
|
119
120
|
continue;
|
|
120
121
|
}
|
|
121
122
|
|
|
122
|
-
if (event.type !== "
|
|
123
|
+
if (event.type !== "clio_coder_tool_finish" || !isRecord(event.payload)) continue;
|
|
123
124
|
const outcome = toolOutcome(event.payload);
|
|
124
125
|
if (outcome === undefined) continue;
|
|
125
126
|
const callId = stringField(event.payload, "toolCallId") ?? stringField(event, "toolCallId");
|
|
@@ -148,7 +149,7 @@ interface BehavioralToolTerminal {
|
|
|
148
149
|
* bounded counters against the suite's explicit public allowlist and decoy
|
|
149
150
|
* list; they never become behavioral fact values or evidence excerpts.
|
|
150
151
|
*/
|
|
151
|
-
|
|
152
|
+
function toolBehaviorMetricEntriesFromJsonl(
|
|
152
153
|
stdout: string,
|
|
153
154
|
cwd: string,
|
|
154
155
|
readObservation?: { allowedPaths: string[]; decoyPaths: string[] },
|
|
@@ -166,7 +167,7 @@ export function toolBehaviorMetricEntriesFromJsonl(
|
|
|
166
167
|
try {
|
|
167
168
|
const parsed: unknown = JSON.parse(line);
|
|
168
169
|
if (!isRecord(parsed)) continue;
|
|
169
|
-
event = parsed;
|
|
170
|
+
event = normalizeClioCoderEventRecord(parsed);
|
|
170
171
|
} catch {
|
|
171
172
|
continue;
|
|
172
173
|
}
|
|
@@ -188,7 +189,7 @@ export function toolBehaviorMetricEntriesFromJsonl(
|
|
|
188
189
|
executionEnds.push({ callId, tool, outcome: toolOutcome(event) ?? (event.isError === true ? "error" : "ok") });
|
|
189
190
|
continue;
|
|
190
191
|
}
|
|
191
|
-
if (event.type !== "
|
|
192
|
+
if (event.type !== "clio_coder_tool_finish" || !isRecord(event.payload)) continue;
|
|
192
193
|
const outcome = toolOutcome(event.payload);
|
|
193
194
|
const tool = stringField(event.payload, "tool");
|
|
194
195
|
if (outcome === undefined || tool === undefined) continue;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { performance } from "node:perf_hooks";
|
|
3
|
+
import { normalizeClioCoderEventType } from "../../../core/naming-events.js";
|
|
3
4
|
import type { RunReceipt } from "../../dispatch/types.js";
|
|
4
5
|
import type { SessionEntry } from "../../session/entries.js";
|
|
5
6
|
import { createEvalCallLedgerFold } from "../metrics/call-ledger-stream.js";
|
|
@@ -226,7 +227,7 @@ export interface JsonlMetricCapture {
|
|
|
226
227
|
* split JSON arbitrarily; oversized non-metric lines are discarded without
|
|
227
228
|
* growing memory.
|
|
228
229
|
*/
|
|
229
|
-
|
|
230
|
+
function createJsonlMetricCapture(): JsonlMetricCapture {
|
|
230
231
|
const lines: string[] = [];
|
|
231
232
|
let storedBytes = 0;
|
|
232
233
|
let pending = "";
|
|
@@ -287,7 +288,7 @@ export function createJsonlMetricCapture(): JsonlMetricCapture {
|
|
|
287
288
|
}
|
|
288
289
|
|
|
289
290
|
function compactMetricEvent(event: Record<string, unknown>): Record<string, unknown> | null {
|
|
290
|
-
const type = event.type;
|
|
291
|
+
const type = typeof event.type === "string" ? normalizeClioCoderEventType(event.type) : event.type;
|
|
291
292
|
if (type === "tool_execution_start") {
|
|
292
293
|
const toolName = stringField(event, "toolName");
|
|
293
294
|
if (toolName !== "dispatch" && toolName !== "code_nav" && toolName !== "read" && toolName !== "grep") {
|
|
@@ -315,7 +316,7 @@ function compactMetricEvent(event: Record<string, unknown>): Record<string, unkn
|
|
|
315
316
|
...(stringField(event, "outcome") !== undefined ? { outcome: stringField(event, "outcome") } : {}),
|
|
316
317
|
};
|
|
317
318
|
}
|
|
318
|
-
if (type !== "
|
|
319
|
+
if (type !== "clio_coder_tool_finish" || !isRecord(event.payload)) return null;
|
|
319
320
|
return {
|
|
320
321
|
type,
|
|
321
322
|
payload: {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { EvalArtifactResultV4 } from "./artifact.js";
|
|
2
2
|
import type { EvalBehaviorCategoryV1, EvalBehaviorLabelV1 } from "./behavioral.js";
|
|
3
|
+
import { normalizeEvalSchemaId } from "./naming.js";
|
|
3
4
|
|
|
4
|
-
export const EVAL_BEHAVIOR_METRICS_SCHEMA_V1 = "clio.eval.behavior.metrics.v1" as const;
|
|
5
|
+
export const EVAL_BEHAVIOR_METRICS_SCHEMA_V1 = "clio-coder.eval.behavior.metrics.v1" as const;
|
|
5
6
|
|
|
6
7
|
export const EVAL_BEHAVIOR_METRIC_DEFINITIONS_V1 = [
|
|
7
8
|
{
|
|
@@ -136,7 +137,7 @@ export function buildEvalBehaviorMetricsV1(
|
|
|
136
137
|
|
|
137
138
|
export function parseEvalBehaviorMetricsV1(value: unknown, source = "behavioral metrics"): EvalBehaviorMetricsV1 {
|
|
138
139
|
const record = asRecord(value, source);
|
|
139
|
-
if (record.schema !== EVAL_BEHAVIOR_METRICS_SCHEMA_V1) {
|
|
140
|
+
if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_METRICS_SCHEMA_V1) {
|
|
140
141
|
throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_METRICS_SCHEMA_V1}`);
|
|
141
142
|
}
|
|
142
143
|
const target = asRecord(record.target, `${source}.target`);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { normalizeEvalSchemaId } from "./naming.js";
|
|
2
3
|
import { EVAL_VERDICT_SCHEMA_V1, type EvalVerdictEnvelopeV1 } from "./verdict.js";
|
|
3
4
|
|
|
4
|
-
export const EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1 = "clio.eval.scenario.v1" as const;
|
|
5
|
-
export const EVAL_BEHAVIOR_SCHEMA_V1 = "clio.eval.behavior.v1" as const;
|
|
5
|
+
export const EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1 = "clio-coder.eval.scenario.v1" as const;
|
|
6
|
+
export const EVAL_BEHAVIOR_SCHEMA_V1 = "clio-coder.eval.behavior.v1" as const;
|
|
6
7
|
|
|
7
8
|
export const EVAL_BEHAVIOR_CATEGORIES = [
|
|
8
9
|
"tool_choice",
|
|
@@ -102,7 +103,7 @@ export interface EvalBehaviorVerdictV1 {
|
|
|
102
103
|
|
|
103
104
|
export function parseEvalBehaviorScenarioV1(value: unknown, source = "behavioral scenario"): EvalBehaviorScenarioV1 {
|
|
104
105
|
const record = asRecord(value, source);
|
|
105
|
-
if (record.schema !== EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1) {
|
|
106
|
+
if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1) {
|
|
106
107
|
throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1}`);
|
|
107
108
|
}
|
|
108
109
|
const corpus = asRecord(record.corpus, `${source}.corpus`);
|
|
@@ -153,7 +154,7 @@ export function parseEvalBehaviorScenarioV1(value: unknown, source = "behavioral
|
|
|
153
154
|
};
|
|
154
155
|
}
|
|
155
156
|
|
|
156
|
-
|
|
157
|
+
function canonicalizeEvalBehaviorJudgeInputV1(
|
|
157
158
|
value: unknown,
|
|
158
159
|
scenario: EvalBehaviorScenarioV1,
|
|
159
160
|
source = "behavioral judge input",
|
|
@@ -221,10 +222,10 @@ export function judgeEvalBehaviorV1(
|
|
|
221
222
|
|
|
222
223
|
export function parseEvalBehaviorVerdictV1(value: unknown, source = "behavioral verdict"): EvalBehaviorVerdictV1 {
|
|
223
224
|
const record = asRecord(value, source);
|
|
224
|
-
if (record.schema !== EVAL_BEHAVIOR_SCHEMA_V1)
|
|
225
|
+
if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_SCHEMA_V1)
|
|
225
226
|
throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_SCHEMA_V1}`);
|
|
226
227
|
const verdictRef = asRecord(record.verdictRef, `${source}.verdictRef`);
|
|
227
|
-
if (verdictRef.schema !== EVAL_VERDICT_SCHEMA_V1) {
|
|
228
|
+
if (normalizeEvalSchemaId(verdictRef.schema) !== EVAL_VERDICT_SCHEMA_V1) {
|
|
228
229
|
throw new Error(`${source}.verdictRef.schema: expected ${EVAL_VERDICT_SCHEMA_V1}`);
|
|
229
230
|
}
|
|
230
231
|
const corpus = asRecord(record.corpus, `${source}.corpus`);
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { normalizeEvalSchemaId } from "./naming.js";
|
|
2
|
+
|
|
3
|
+
export const EVAL_EXECUTION_ENVELOPE_SCHEMA_V1 = "clio-coder.eval.execution-envelope.v1" as const;
|
|
2
4
|
|
|
3
5
|
export const EVAL_EXECUTION_MATRIX_DIMENSIONS_V1 = [
|
|
4
6
|
"prompt",
|
|
@@ -56,7 +58,7 @@ export interface EvalExecutionEnvelopeV1 {
|
|
|
56
58
|
|
|
57
59
|
export function parseEvalExecutionEnvelopeV1(value: unknown, source = "execution envelope"): EvalExecutionEnvelopeV1 {
|
|
58
60
|
const record = asRecord(value, source);
|
|
59
|
-
if (record.schema !== EVAL_EXECUTION_ENVELOPE_SCHEMA_V1) {
|
|
61
|
+
if (normalizeEvalSchemaId(record.schema) !== EVAL_EXECUTION_ENVELOPE_SCHEMA_V1) {
|
|
60
62
|
throw new Error(`${source}.schema: expected ${EVAL_EXECUTION_ENVELOPE_SCHEMA_V1}`);
|
|
61
63
|
}
|
|
62
64
|
const prompt = asRecord(record.prompt, `${source}.prompt`);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Legacy eval identifiers are normalized only after decoding; writers use canonical schema constants. */
|
|
2
|
+
export function normalizeEvalSchemaId(value: unknown): unknown {
|
|
3
|
+
return typeof value === "string" && value.startsWith("clio.eval.")
|
|
4
|
+
? `clio-coder.eval.${value.slice("clio.eval.".length)}`
|
|
5
|
+
: value;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function normalizeEvalRunnerKind(value: unknown): unknown {
|
|
9
|
+
return value === "clio-run" ? "clio-coder-run" : value;
|
|
10
|
+
}
|