@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
package/src/cli/upgrade.ts
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import { loadDomains } from "../core/domain-loader.js";
|
|
3
2
|
import { initializeClioHome } from "../core/init.js";
|
|
4
3
|
import { clioStateDir } from "../core/xdg.js";
|
|
5
|
-
import { ConfigDomainModule } from "../domains/config/index.js";
|
|
6
|
-
import type { LifecycleContract } from "../domains/lifecycle/contract.js";
|
|
7
|
-
import { LifecycleDomainModule } from "../domains/lifecycle/index.js";
|
|
8
4
|
import { detectInstallMethod } from "../domains/lifecycle/install-method.js";
|
|
9
|
-
import { listMigrations } from "../domains/lifecycle/migrations/index.js";
|
|
5
|
+
import { listMigrations, runPending } from "../domains/lifecycle/migrations/index.js";
|
|
10
6
|
import { readStateInfo } from "../domains/lifecycle/state.js";
|
|
11
7
|
import { getVersionInfo } from "../domains/lifecycle/version.js";
|
|
12
8
|
import { printError, printHeader, printOk } from "./shared.js";
|
|
@@ -229,36 +225,35 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
229
225
|
if (opts.skipMigrations) {
|
|
230
226
|
process.stdout.write("[upgrade] skipping migrations (--skip-migrations)\n");
|
|
231
227
|
} else {
|
|
232
|
-
|
|
228
|
+
// Migrations run on the state tree directly rather than through the
|
|
229
|
+
// lifecycle domain. Loading that domain pulls in `config`, whose start
|
|
230
|
+
// runs the strict settings reader, and a settings-repairing migration is
|
|
231
|
+
// precisely the one that cannot get past it: `clio-coder upgrade` on a
|
|
232
|
+
// home whose settings.yaml names a retired key failed the domain load and
|
|
233
|
+
// never reached the migration that removes the key. A runner that needs
|
|
234
|
+
// valid config in order to repair invalid config can never run. The
|
|
235
|
+
// domain's `runMigrations` is a passthrough to this same function, so
|
|
236
|
+
// nothing is lost by calling it where the circularity does not exist.
|
|
237
|
+
let result: Awaited<ReturnType<typeof runPending>>;
|
|
233
238
|
try {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
253
|
-
appliedIds = [...result.applied];
|
|
254
|
-
appliedCount = appliedIds.length;
|
|
255
|
-
if (appliedCount === 0) {
|
|
256
|
-
process.stdout.write("[upgrade] no pending migrations\n");
|
|
257
|
-
} else {
|
|
258
|
-
for (const id of appliedIds) process.stdout.write(`[upgrade] applied migration ${id}\n`);
|
|
259
|
-
}
|
|
260
|
-
} finally {
|
|
261
|
-
await loaded.stop();
|
|
239
|
+
result = await runPending(stateDir);
|
|
240
|
+
} catch (err) {
|
|
241
|
+
// A migration reports why it could not run, but on its own that reads
|
|
242
|
+
// as the whole upgrade being impossible. It is not: the rest of the
|
|
243
|
+
// upgrade is independent of it, and naming the flag that runs the rest
|
|
244
|
+
// is the difference between a stuck operator and a moved one.
|
|
245
|
+
printError(
|
|
246
|
+
`migration failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
247
|
+
"the rest of the upgrade does not depend on it; run `clio-coder upgrade --skip-migrations` to continue, then fix the cause and re-run `clio-coder upgrade`.",
|
|
248
|
+
);
|
|
249
|
+
return 1;
|
|
250
|
+
}
|
|
251
|
+
appliedIds = [...result.applied];
|
|
252
|
+
appliedCount = appliedIds.length;
|
|
253
|
+
if (appliedCount === 0) {
|
|
254
|
+
process.stdout.write("[upgrade] no pending migrations\n");
|
|
255
|
+
} else {
|
|
256
|
+
for (const id of appliedIds) process.stdout.write(`[upgrade] applied migration ${id}\n`);
|
|
262
257
|
}
|
|
263
258
|
}
|
|
264
259
|
|
package/src/cli/usage.ts
CHANGED
|
@@ -788,7 +788,7 @@ function indent(text: string): string {
|
|
|
788
788
|
.join("\n");
|
|
789
789
|
}
|
|
790
790
|
|
|
791
|
-
|
|
791
|
+
function inWindow(iso: string, start: number, end: number): boolean {
|
|
792
792
|
const value = Date.parse(iso);
|
|
793
793
|
return Number.isFinite(value) && value >= start && value <= end + USAGE_WINDOW_FUTURE_SKEW_MS;
|
|
794
794
|
}
|
|
@@ -968,7 +968,7 @@ function bashCommandFromToolCallPayload(payload: unknown): string | null {
|
|
|
968
968
|
* assignments dropped, verb plus subcommand kept, flags kept with values
|
|
969
969
|
* stripped, remaining arguments dropped.
|
|
970
970
|
*/
|
|
971
|
-
|
|
971
|
+
function bashShape(command: string): string {
|
|
972
972
|
const firstLine = command.split("\n").find((line) => {
|
|
973
973
|
const trimmed = line.trim();
|
|
974
974
|
return trimmed.length > 0 && !trimmed.startsWith("#");
|
|
@@ -39,7 +39,7 @@ function describeLiveTarget(live: LiveModelInventory): string {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
/** The refusal `configure` prints for a model the live target does not advertise. */
|
|
42
|
-
|
|
42
|
+
function formatUnadvertisedModelReason(modelId: string, live: LiveModelInventory): string {
|
|
43
43
|
const resident = live.resident.length > 0 ? live.resident.join(", ") : "none";
|
|
44
44
|
return (
|
|
45
45
|
`${describeLiveTarget(live)} does not advertise model '${modelId}'. ` +
|
|
@@ -283,7 +283,7 @@ function projectCheck(check: AuthoringCheck): VerifiersInspectCheck | null {
|
|
|
283
283
|
|
|
284
284
|
const ORIGIN_RANK: Record<VerifierOrigin, number> = { "package-script": 0, catalog: 1, proposed: 2 };
|
|
285
285
|
|
|
286
|
-
|
|
286
|
+
function verifiersInspectSnapshot(
|
|
287
287
|
now: () => number = Date.now,
|
|
288
288
|
workspaceRoot: string = process.cwd(),
|
|
289
289
|
): VerifiersInspectSnapshot {
|
package/src/cli/wiki-generate.ts
CHANGED
|
@@ -149,7 +149,7 @@ async function drainDispatchEvents(
|
|
|
149
149
|
let firstBlockReason: string | null = null;
|
|
150
150
|
// Every event is consumed so finalization cannot block on an unread iterator.
|
|
151
151
|
for await (const event of events) {
|
|
152
|
-
if (!isRecord(event) || event.type !== "
|
|
152
|
+
if (!isRecord(event) || event.type !== "clio_coder_tool_finish") continue;
|
|
153
153
|
const tool = eventPayloadString(event, "tool");
|
|
154
154
|
if (!tool) continue;
|
|
155
155
|
const outcome = eventPayloadString(event, "outcome") ?? "done";
|
|
@@ -190,7 +190,7 @@ interface WikiDispatchOutcome {
|
|
|
190
190
|
* throws: a failed page must not take down the pages around it, and whatever
|
|
191
191
|
* the run wrote before it stopped is already on disk.
|
|
192
192
|
*/
|
|
193
|
-
|
|
193
|
+
async function runWikiDispatch(input: {
|
|
194
194
|
dispatch: DispatchContract;
|
|
195
195
|
cwd: string;
|
|
196
196
|
outputDir: string;
|
|
@@ -236,7 +236,7 @@ export async function runWikiDispatch(input: {
|
|
|
236
236
|
} catch (err) {
|
|
237
237
|
return { ok: false, detail: err instanceof Error ? err.message : String(err) };
|
|
238
238
|
}
|
|
239
|
-
const deadline = armInternalDispatchDeadline(input.dispatch, handle.runId, input.label,
|
|
239
|
+
const deadline = armInternalDispatchDeadline(input.dispatch, handle.runId, input.label, input.deadlineMs);
|
|
240
240
|
let lastHeartbeatAt = startedAtClock;
|
|
241
241
|
try {
|
|
242
242
|
const summary = await drainDispatchEvents(handle.events, (tools) => {
|
|
@@ -371,7 +371,7 @@ async function runPagePhase(
|
|
|
371
371
|
return next;
|
|
372
372
|
}
|
|
373
373
|
|
|
374
|
-
|
|
374
|
+
async function generateWikiWithDocumenter(
|
|
375
375
|
dispatch: DispatchContract,
|
|
376
376
|
input: WikiGenerateInput,
|
|
377
377
|
route: WikiModelRoute = {},
|
|
@@ -472,11 +472,11 @@ export async function resolveDocumenterModelId(route: WikiModelRoute = {}): Prom
|
|
|
472
472
|
const providers = loaded.getContract<ProvidersContract>("providers");
|
|
473
473
|
if (!config || !providers) return UNRESOLVED_DOCUMENTER_MODEL;
|
|
474
474
|
const settings = config.get();
|
|
475
|
-
const workers = settings.
|
|
475
|
+
const workers = settings.fleet;
|
|
476
476
|
// Keyed on the dispatched agent id and nothing else, because that is what
|
|
477
477
|
// `placement.ts` reads. Falling back to another agent's binding here would
|
|
478
478
|
// record a model in wiki metadata that no dispatch ever ran.
|
|
479
|
-
const bindingProfileName = workers?.
|
|
479
|
+
const bindingProfileName = workers?.agentProfiles?.[WIKI_AGENT_ID];
|
|
480
480
|
const profile = bindingProfileName ? workers?.profiles?.[bindingProfileName] : undefined;
|
|
481
481
|
const targetId = route.target ?? profile?.target ?? workers?.default?.target ?? settings.targets?.[0]?.id ?? null;
|
|
482
482
|
if (!targetId) return UNRESOLVED_DOCUMENTER_MODEL;
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* be checking a path the tool never writes. One artifact per kind is therefore
|
|
16
16
|
* the contract; keep several by passing explicit paths.
|
|
17
17
|
*
|
|
18
|
-
* See docs/artifact-placement.md for the full taxonomy.
|
|
18
|
+
* See docs/architecture/artifact-placement.md for the full taxonomy.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
/** Project-local directory holding everything Clio generates for one repo. */
|
package/src/core/bash-exec.ts
CHANGED
|
@@ -18,7 +18,7 @@ export { clampTimerDelayMs as clampTimeoutMs } from "./timers.js";
|
|
|
18
18
|
// (failing assertion, compiler error, exit summary) must survive.
|
|
19
19
|
export const BASH_HARD_CAP_BYTES = 16 * 1024 * 1024;
|
|
20
20
|
|
|
21
|
-
const CLIO_CONTROL_ENV_KEYS = ["CLIO_CODER_INTERACTIVE"
|
|
21
|
+
const CLIO_CONTROL_ENV_KEYS = ["CLIO_CODER_INTERACTIVE"] as const;
|
|
22
22
|
|
|
23
23
|
export interface BashCommandResult {
|
|
24
24
|
error: NodeJS.ErrnoException | null;
|
|
@@ -52,6 +52,129 @@ export interface RunBashCommandOptions {
|
|
|
52
52
|
|
|
53
53
|
const BASH_UPDATE_THROTTLE_MS = 100;
|
|
54
54
|
|
|
55
|
+
export interface BashProgressScheduler {
|
|
56
|
+
now(): number;
|
|
57
|
+
setTimeout(callback: () => void, delayMs: number): unknown;
|
|
58
|
+
clearTimeout(timer: unknown): void;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface BashOutputProgressController {
|
|
62
|
+
/** Emit the initial empty cumulative snapshot, when a callback is configured. */
|
|
63
|
+
start(): void;
|
|
64
|
+
/** Accept one stream chunk. Returns true only when this chunk reaches the hard cap. */
|
|
65
|
+
append(target: "stdout" | "stderr", chunk: Buffer): boolean;
|
|
66
|
+
/** Seal output, cancel progress work, emit the final snapshot, and return the result fields. */
|
|
67
|
+
settle(): Pick<BashCommandResult, "stdout" | "stderr" | "outputBytes" | "outputCapped">;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const SYSTEM_PROGRESS_SCHEDULER: BashProgressScheduler = {
|
|
71
|
+
now: Date.now,
|
|
72
|
+
setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
|
|
73
|
+
clearTimeout: (timer) => clearTimeout(timer as ReturnType<typeof setTimeout>),
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Cumulative stdout/stderr fold shared by the child stream handlers and a
|
|
78
|
+
* deterministic contract-test seam. Settlement is a phase, not just a final
|
|
79
|
+
* boolean: once it starts, re-entrant or queued stream work is rejected while
|
|
80
|
+
* the one final advisory snapshot is still allowed to publish.
|
|
81
|
+
*/
|
|
82
|
+
export function createBashOutputProgressController(
|
|
83
|
+
onUpdate?: (progress: BashCommandProgress) => void,
|
|
84
|
+
scheduler: BashProgressScheduler = SYSTEM_PROGRESS_SCHEDULER,
|
|
85
|
+
): BashOutputProgressController {
|
|
86
|
+
let phase: "active" | "settling" | "settled" = "active";
|
|
87
|
+
let stdout = "";
|
|
88
|
+
let stderr = "";
|
|
89
|
+
const stdoutDecoder = new StringDecoder("utf8");
|
|
90
|
+
const stderrDecoder = new StringDecoder("utf8");
|
|
91
|
+
let decodersFinished = false;
|
|
92
|
+
let outputBytes = 0;
|
|
93
|
+
let outputCapped = false;
|
|
94
|
+
let updateTimer: unknown = null;
|
|
95
|
+
let updateDirty = false;
|
|
96
|
+
let lastUpdateAt = 0;
|
|
97
|
+
|
|
98
|
+
const snapshot = (): BashCommandProgress => ({ stdout, stderr, outputBytes });
|
|
99
|
+
|
|
100
|
+
const finishDecoders = (): void => {
|
|
101
|
+
if (decodersFinished) return;
|
|
102
|
+
decodersFinished = true;
|
|
103
|
+
// A hard byte cap may bisect a multibyte code point. Discard the
|
|
104
|
+
// decoder's incomplete suffix instead of manufacturing U+FFFD.
|
|
105
|
+
if (outputCapped) return;
|
|
106
|
+
stdout += stdoutDecoder.end();
|
|
107
|
+
stderr += stderrDecoder.end();
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const emitUpdate = (final = false): void => {
|
|
111
|
+
if (onUpdate === undefined || !updateDirty) return;
|
|
112
|
+
if (phase !== "active" && !(final && phase === "settling")) return;
|
|
113
|
+
updateDirty = false;
|
|
114
|
+
lastUpdateAt = scheduler.now();
|
|
115
|
+
try {
|
|
116
|
+
onUpdate(snapshot());
|
|
117
|
+
} catch {
|
|
118
|
+
// Rendering progress is advisory and must never change command execution.
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const clearUpdateTimer = (): void => {
|
|
123
|
+
if (updateTimer === null) return;
|
|
124
|
+
scheduler.clearTimeout(updateTimer);
|
|
125
|
+
updateTimer = null;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const scheduleUpdate = (): void => {
|
|
129
|
+
if (onUpdate === undefined || phase !== "active") return;
|
|
130
|
+
updateDirty = true;
|
|
131
|
+
const delay = BASH_UPDATE_THROTTLE_MS - (scheduler.now() - lastUpdateAt);
|
|
132
|
+
if (delay <= 0) {
|
|
133
|
+
clearUpdateTimer();
|
|
134
|
+
emitUpdate();
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
updateTimer ??= scheduler.setTimeout(() => {
|
|
138
|
+
updateTimer = null;
|
|
139
|
+
// A timer already queued by the event loop may still invoke its callback
|
|
140
|
+
// after clearTimeout. The phase check makes that callback inert.
|
|
141
|
+
emitUpdate();
|
|
142
|
+
}, delay);
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
return {
|
|
146
|
+
start(): void {
|
|
147
|
+
if (phase !== "active" || onUpdate === undefined) return;
|
|
148
|
+
updateDirty = true;
|
|
149
|
+
emitUpdate();
|
|
150
|
+
},
|
|
151
|
+
append(target, chunk): boolean {
|
|
152
|
+
if (phase !== "active" || outputCapped) return false;
|
|
153
|
+
const remaining = BASH_HARD_CAP_BYTES - outputBytes;
|
|
154
|
+
const accepted = chunk.byteLength <= remaining ? chunk : chunk.subarray(0, Math.max(0, remaining));
|
|
155
|
+
outputBytes += accepted.byteLength;
|
|
156
|
+
if (accepted.byteLength > 0) {
|
|
157
|
+
const decoded = target === "stdout" ? stdoutDecoder.write(accepted) : stderrDecoder.write(accepted);
|
|
158
|
+
if (target === "stdout") stdout += decoded;
|
|
159
|
+
else stderr += decoded;
|
|
160
|
+
}
|
|
161
|
+
if (accepted.byteLength < chunk.byteLength) outputCapped = true;
|
|
162
|
+
scheduleUpdate();
|
|
163
|
+
return outputCapped;
|
|
164
|
+
},
|
|
165
|
+
settle() {
|
|
166
|
+
if (phase === "settled") return { ...snapshot(), outputCapped };
|
|
167
|
+
if (phase === "settling") return { ...snapshot(), outputCapped };
|
|
168
|
+
phase = "settling";
|
|
169
|
+
clearUpdateTimer();
|
|
170
|
+
finishDecoders();
|
|
171
|
+
emitUpdate(true);
|
|
172
|
+
phase = "settled";
|
|
173
|
+
return { ...snapshot(), outputCapped };
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
55
178
|
function buildToolEnv(): NodeJS.ProcessEnv {
|
|
56
179
|
const env = { ...process.env };
|
|
57
180
|
env.AI_AGENT = AI_AGENT_NAME;
|
|
@@ -75,7 +198,7 @@ const LOGIN_ENV_CAPTURE_TIMEOUT_MS = 10_000;
|
|
|
75
198
|
let loginEnvCapture: Promise<NodeJS.ProcessEnv | null> | null = null;
|
|
76
199
|
|
|
77
200
|
/** NUL-delimited `env -0` output to an env map; null when unusable (no PATH). */
|
|
78
|
-
|
|
201
|
+
function parseNullDelimitedEnv(raw: string): NodeJS.ProcessEnv | null {
|
|
79
202
|
const env: NodeJS.ProcessEnv = {};
|
|
80
203
|
for (const entry of raw.split("\0")) {
|
|
81
204
|
if (entry.length === 0) continue;
|
|
@@ -152,16 +275,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
152
275
|
let timeoutId: ReturnType<typeof setTimeout> | null = null;
|
|
153
276
|
let killGraceTimer: ReturnType<typeof setTimeout> | null = null;
|
|
154
277
|
let killSent = false;
|
|
155
|
-
|
|
156
|
-
let stderr = "";
|
|
157
|
-
const stdoutDecoder = new StringDecoder("utf8");
|
|
158
|
-
const stderrDecoder = new StringDecoder("utf8");
|
|
159
|
-
let decodersFinished = false;
|
|
160
|
-
let outputBytes = 0;
|
|
161
|
-
let outputCapped = false;
|
|
162
|
-
let updateTimer: ReturnType<typeof setTimeout> | null = null;
|
|
163
|
-
let updateDirty = false;
|
|
164
|
-
let lastUpdateAt = 0;
|
|
278
|
+
const output = createBashOutputProgressController(options.onUpdate);
|
|
165
279
|
|
|
166
280
|
const child = spawn("/bin/bash", [plan.mode, command], {
|
|
167
281
|
...(options.cwd === undefined ? {} : { cwd: options.cwd }),
|
|
@@ -170,53 +284,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
170
284
|
stdio: ["ignore", "pipe", "pipe"],
|
|
171
285
|
});
|
|
172
286
|
|
|
173
|
-
|
|
174
|
-
if (decodersFinished) return;
|
|
175
|
-
decodersFinished = true;
|
|
176
|
-
// A hard byte cap may bisect a multibyte code point. Discard the
|
|
177
|
-
// decoder's incomplete suffix instead of manufacturing U+FFFD.
|
|
178
|
-
if (outputCapped) return;
|
|
179
|
-
stdout += stdoutDecoder.end();
|
|
180
|
-
stderr += stderrDecoder.end();
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
const emitUpdate = (): void => {
|
|
184
|
-
if (options.onUpdate === undefined || !updateDirty) return;
|
|
185
|
-
updateDirty = false;
|
|
186
|
-
lastUpdateAt = Date.now();
|
|
187
|
-
try {
|
|
188
|
-
options.onUpdate({ stdout, stderr, outputBytes: Math.min(outputBytes, BASH_HARD_CAP_BYTES) });
|
|
189
|
-
} catch {
|
|
190
|
-
// Rendering progress is advisory and must never change command execution.
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
const clearUpdateTimer = (): void => {
|
|
194
|
-
if (updateTimer === null) return;
|
|
195
|
-
clearTimeout(updateTimer);
|
|
196
|
-
updateTimer = null;
|
|
197
|
-
};
|
|
198
|
-
const scheduleUpdate = (): void => {
|
|
199
|
-
if (options.onUpdate === undefined) return;
|
|
200
|
-
updateDirty = true;
|
|
201
|
-
const delay = BASH_UPDATE_THROTTLE_MS - (Date.now() - lastUpdateAt);
|
|
202
|
-
if (delay <= 0) {
|
|
203
|
-
clearUpdateTimer();
|
|
204
|
-
emitUpdate();
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
updateTimer ??= setTimeout(() => {
|
|
208
|
-
updateTimer = null;
|
|
209
|
-
emitUpdate();
|
|
210
|
-
}, delay);
|
|
211
|
-
};
|
|
212
|
-
const finishUpdates = (): void => {
|
|
213
|
-
clearUpdateTimer();
|
|
214
|
-
emitUpdate();
|
|
215
|
-
};
|
|
216
|
-
if (options.onUpdate !== undefined) {
|
|
217
|
-
updateDirty = true;
|
|
218
|
-
emitUpdate();
|
|
219
|
-
}
|
|
287
|
+
output.start();
|
|
220
288
|
|
|
221
289
|
const clearKillGraceTimer = (): void => {
|
|
222
290
|
if (!killGraceTimer) return;
|
|
@@ -265,22 +333,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
265
333
|
}
|
|
266
334
|
|
|
267
335
|
const appendChunk = (target: "stdout" | "stderr", chunk: Buffer): void => {
|
|
268
|
-
if (
|
|
269
|
-
const remaining = BASH_HARD_CAP_BYTES - outputBytes;
|
|
270
|
-
const accepted = chunk.byteLength <= remaining ? chunk : chunk.subarray(0, Math.max(0, remaining));
|
|
271
|
-
outputBytes += accepted.byteLength;
|
|
272
|
-
if (accepted.byteLength > 0) {
|
|
273
|
-
const decoded = target === "stdout" ? stdoutDecoder.write(accepted) : stderrDecoder.write(accepted);
|
|
274
|
-
if (target === "stdout") stdout += decoded;
|
|
275
|
-
else stderr += decoded;
|
|
276
|
-
}
|
|
277
|
-
if (accepted.byteLength < chunk.byteLength) {
|
|
278
|
-
outputCapped = true;
|
|
279
|
-
scheduleUpdate();
|
|
280
|
-
killChild();
|
|
281
|
-
return;
|
|
282
|
-
}
|
|
283
|
-
scheduleUpdate();
|
|
336
|
+
if (output.append(target, chunk)) killChild();
|
|
284
337
|
};
|
|
285
338
|
|
|
286
339
|
child.stdout?.on("data", (chunk: Buffer) => appendChunk("stdout", chunk));
|
|
@@ -290,19 +343,15 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
290
343
|
settled = true;
|
|
291
344
|
if (timeoutId) clearTimeout(timeoutId);
|
|
292
345
|
clearKillGraceTimer();
|
|
293
|
-
|
|
294
|
-
finishUpdates();
|
|
346
|
+
const finalOutput = output.settle();
|
|
295
347
|
options.signal?.removeEventListener("abort", onAbort);
|
|
296
348
|
resolve({
|
|
297
349
|
error: error as NodeJS.ErrnoException,
|
|
298
|
-
|
|
299
|
-
stderr,
|
|
350
|
+
...finalOutput,
|
|
300
351
|
exitCode: null,
|
|
301
352
|
signal: null,
|
|
302
353
|
aborted,
|
|
303
354
|
timedOut,
|
|
304
|
-
outputCapped,
|
|
305
|
-
outputBytes,
|
|
306
355
|
});
|
|
307
356
|
});
|
|
308
357
|
child.on("close", (code, signalName) => {
|
|
@@ -310,8 +359,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
310
359
|
settled = true;
|
|
311
360
|
if (timeoutId) clearTimeout(timeoutId);
|
|
312
361
|
clearKillGraceTimer();
|
|
313
|
-
|
|
314
|
-
finishUpdates();
|
|
362
|
+
const finalOutput = output.settle();
|
|
315
363
|
options.signal?.removeEventListener("abort", onAbort);
|
|
316
364
|
const error =
|
|
317
365
|
code === 0 && signalName === null
|
|
@@ -324,14 +372,11 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
324
372
|
} as NodeJS.ErrnoException);
|
|
325
373
|
resolve({
|
|
326
374
|
error,
|
|
327
|
-
|
|
328
|
-
stderr,
|
|
375
|
+
...finalOutput,
|
|
329
376
|
exitCode: code,
|
|
330
377
|
signal: signalName,
|
|
331
378
|
aborted,
|
|
332
379
|
timedOut,
|
|
333
|
-
outputCapped,
|
|
334
|
-
outputBytes,
|
|
335
380
|
});
|
|
336
381
|
});
|
|
337
382
|
});
|
package/src/core/boot-trace.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
const BOOT_TRACE_ENV = "CLIO_CODER_TRACE_BOOT";
|
|
17
17
|
|
|
18
18
|
/** True when boot tracing is enabled for this process. */
|
|
19
|
-
|
|
19
|
+
function isBootTraceEnabled(): boolean {
|
|
20
20
|
return process.env[BOOT_TRACE_ENV] === "1";
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -24,11 +24,11 @@ export function isBootTraceEnabled(): boolean {
|
|
|
24
24
|
export function formatBootTrace(phase: string, detail?: string): string | null {
|
|
25
25
|
if (!isBootTraceEnabled()) return null;
|
|
26
26
|
const suffix = detail !== undefined && detail.length > 0 ? ` (${detail})` : "";
|
|
27
|
-
return `[clio:boot] +${performance.now().toFixed(1)}ms ${phase}${suffix}\n`;
|
|
27
|
+
return `[clio-coder:boot] +${performance.now().toFixed(1)}ms ${phase}${suffix}\n`;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
* Stamp a boot phase marker to stderr, e.g. `[clio:boot] +742.1ms cli entry`.
|
|
31
|
+
* Stamp a boot phase marker to stderr, e.g. `[clio-coder:boot] +742.1ms cli entry`.
|
|
32
32
|
* `detail` appends a parenthetical (module counts, ids). No-op unless
|
|
33
33
|
* `CLIO_CODER_TRACE_BOOT=1`. Never throws: a diagnostic must not affect boot.
|
|
34
34
|
*/
|
package/src/core/bus-events.ts
CHANGED
|
@@ -24,6 +24,7 @@ import type {
|
|
|
24
24
|
ToolActivitySummary,
|
|
25
25
|
} from "../domains/dispatch/types.js";
|
|
26
26
|
import type { MiddlewareHook } from "../domains/middleware/types.js";
|
|
27
|
+
import type { ObservabilityRunEvidence } from "../domains/observability/contract.js";
|
|
27
28
|
import type { TargetStatus } from "../domains/providers/contract.js";
|
|
28
29
|
import type { CostProvenance } from "../domains/providers/index.js";
|
|
29
30
|
import type { ClioSettings } from "./config.js";
|
|
@@ -58,9 +59,11 @@ export const BusChannels = {
|
|
|
58
59
|
DispatchProgress: "dispatch.progress",
|
|
59
60
|
DispatchCompleted: "dispatch.completed",
|
|
60
61
|
DispatchFailed: "dispatch.failed",
|
|
62
|
+
AccountabilityEvidenceReady: "accountability.evidenceReady",
|
|
61
63
|
CompactionBegin: "compaction.begin",
|
|
62
64
|
CompactionEnd: "compaction.end",
|
|
63
65
|
MiddlewareHookFailed: "middleware.hookFailed",
|
|
66
|
+
ExtensionsReloaded: "extensions.reloaded",
|
|
64
67
|
ContextActivity: "context.activity",
|
|
65
68
|
ContextWarning: "context.warning",
|
|
66
69
|
ContextPruned: "context.pruned",
|
|
@@ -628,8 +631,8 @@ export interface DispatchTerminalStats {
|
|
|
628
631
|
exitCode: number;
|
|
629
632
|
/** Honest activity record aggregated from the run's tool telemetry; null when the receipt predates it. */
|
|
630
633
|
toolActivity: ToolActivitySummary | null;
|
|
631
|
-
/** Host-run declared verification status when the request included checks. */
|
|
632
|
-
hostVerification?: "verified" | "rejected" | "skipped";
|
|
634
|
+
/** Host-run declared verification status when the request included checks; `not_implicated` is a batch member the failure was charged away from. */
|
|
635
|
+
hostVerification?: "verified" | "rejected" | "skipped" | "not_implicated";
|
|
633
636
|
}
|
|
634
637
|
|
|
635
638
|
/** Published on {@link BusChannels.DispatchCompleted} when a run finalizes as succeeded. */
|
|
@@ -667,6 +670,24 @@ export interface DispatchFailedPayload extends DispatchRunIdentity, Partial<Disp
|
|
|
667
670
|
skillActivations?: ReadonlyArray<SkillActivation>;
|
|
668
671
|
}
|
|
669
672
|
|
|
673
|
+
// ---------------------------------------------------------------------------
|
|
674
|
+
// Accountability
|
|
675
|
+
// ---------------------------------------------------------------------------
|
|
676
|
+
|
|
677
|
+
/**
|
|
678
|
+
* Published on {@link BusChannels.AccountabilityEvidenceReady} by the
|
|
679
|
+
* observability extension once a finalized run's evidence bundle and its
|
|
680
|
+
* sidecar index row have landed. The evidence fields are exactly
|
|
681
|
+
* {@link ObservabilityRunEvidence}, the shape the projection already attaches
|
|
682
|
+
* to the run summary, so the bus and the snapshot cannot describe the same
|
|
683
|
+
* moment two ways. A failed build publishes nothing here: the projection's
|
|
684
|
+
* notice is the failure surface, and a client that never receives this event
|
|
685
|
+
* has learned only that no bundle is ready, which is the truth.
|
|
686
|
+
*/
|
|
687
|
+
export interface AccountabilityEvidenceReadyPayload extends ObservabilityRunEvidence {
|
|
688
|
+
runId: string;
|
|
689
|
+
}
|
|
690
|
+
|
|
670
691
|
// ---------------------------------------------------------------------------
|
|
671
692
|
// Compaction
|
|
672
693
|
// ---------------------------------------------------------------------------
|
|
@@ -677,6 +698,26 @@ export interface CompactionPayload {
|
|
|
677
698
|
at: number;
|
|
678
699
|
}
|
|
679
700
|
|
|
701
|
+
// ---------------------------------------------------------------------------
|
|
702
|
+
// Extensions
|
|
703
|
+
// ---------------------------------------------------------------------------
|
|
704
|
+
|
|
705
|
+
/**
|
|
706
|
+
* Published on {@link BusChannels.ExtensionsReloaded} by the composition
|
|
707
|
+
* root after a new extension generation and its user-hook registrations
|
|
708
|
+
* have both been committed. Consumers that cache extension-sourced data
|
|
709
|
+
* (prompt fragments, agent recipes, the session prompt) refresh on
|
|
710
|
+
* `changed`; an unchanged generation carries the previous digest and needs
|
|
711
|
+
* no work. Never published between the two commits.
|
|
712
|
+
*/
|
|
713
|
+
export interface ExtensionsReloadedPayload {
|
|
714
|
+
generation: number;
|
|
715
|
+
previousGeneration: number;
|
|
716
|
+
changed: boolean;
|
|
717
|
+
/** Content identity of the committed snapshot. */
|
|
718
|
+
digest: string;
|
|
719
|
+
}
|
|
720
|
+
|
|
680
721
|
// ---------------------------------------------------------------------------
|
|
681
722
|
// Middleware
|
|
682
723
|
// ---------------------------------------------------------------------------
|
|
@@ -685,15 +726,17 @@ export interface CompactionPayload {
|
|
|
685
726
|
* Published on {@link BusChannels.MiddlewareHookFailed} when a middleware hook
|
|
686
727
|
* registration misbehaves: `hook_failed` for a thrown evaluate (its effects
|
|
687
728
|
* are discarded and the turn proceeds), `budget_exceeded` for a soft
|
|
688
|
-
* wall-time overrun (effects still apply)
|
|
689
|
-
*
|
|
729
|
+
* wall-time overrun (effects still apply), `registration_conflict` when an
|
|
730
|
+
* owned registration set (user hooks) offered an id a builtin or host
|
|
731
|
+
* registration holds, or a host registration evicted an owned one.
|
|
732
|
+
* Diagnostics only; nothing subscribing here may decide anything.
|
|
690
733
|
*/
|
|
691
734
|
export interface MiddlewareHookFailedPayload {
|
|
692
|
-
kind: "hook_failed" | "budget_exceeded";
|
|
735
|
+
kind: "hook_failed" | "budget_exceeded" | "registration_conflict";
|
|
693
736
|
registrationId: string;
|
|
694
737
|
hook: MiddlewareHook;
|
|
695
738
|
at: number;
|
|
696
|
-
/** Error text
|
|
739
|
+
/** Error text for hook_failed; one formatted line for registration_conflict. */
|
|
697
740
|
message?: string | undefined;
|
|
698
741
|
/** Measured and allowed wall time in ms; budget_exceeded only. */
|
|
699
742
|
elapsedMs?: number | undefined;
|
|
@@ -798,9 +841,11 @@ export type BusPayloadMap = {
|
|
|
798
841
|
[BusChannels.DispatchProgress]: DispatchProgressPayload;
|
|
799
842
|
[BusChannels.DispatchCompleted]: DispatchCompletedPayload;
|
|
800
843
|
[BusChannels.DispatchFailed]: DispatchFailedPayload;
|
|
844
|
+
[BusChannels.AccountabilityEvidenceReady]: AccountabilityEvidenceReadyPayload;
|
|
801
845
|
[BusChannels.CompactionBegin]: CompactionPayload;
|
|
802
846
|
[BusChannels.CompactionEnd]: CompactionPayload;
|
|
803
847
|
[BusChannels.MiddlewareHookFailed]: MiddlewareHookFailedPayload;
|
|
848
|
+
[BusChannels.ExtensionsReloaded]: ExtensionsReloadedPayload;
|
|
804
849
|
[BusChannels.ContextActivity]: ContextActivityPayload;
|
|
805
850
|
[BusChannels.ContextWarning]: ContextWarningPayload;
|
|
806
851
|
[BusChannels.ContextPruned]: ContextPrunedPayload;
|
package/src/core/bus-trace.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* orchestrator-wide observability, not a domain concern. Add channels to the
|
|
12
12
|
* `TRACED_CHANNELS` list if a future front needs to observe them.
|
|
13
13
|
*
|
|
14
|
-
* Ordering invariant: the first `[clio:bus] shutdown.requested` line must
|
|
14
|
+
* Ordering invariant: the first `[clio-coder:bus] shutdown.requested` line must
|
|
15
15
|
* never reach stderr before the `Clio Coder: received <SIGNAL>, shutting down...`
|
|
16
16
|
* notice written by termination.installSignalHandlers in
|
|
17
17
|
* src/core/termination.ts. Future edits to termination.ts must preserve that
|
|
@@ -47,7 +47,7 @@ export function installBusTracer(): void {
|
|
|
47
47
|
const bus = getSharedBus();
|
|
48
48
|
for (const channel of TRACED_CHANNELS) {
|
|
49
49
|
bus.on(channel, (payload) => {
|
|
50
|
-
process.stderr.write(`[clio:bus] ${channel}${traceSuffix(payload)}\n`);
|
|
50
|
+
process.stderr.write(`[clio-coder:bus] ${channel}${traceSuffix(payload)}\n`);
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
}
|
|
@@ -65,7 +65,7 @@ export interface CompileCacheHandle {
|
|
|
65
65
|
* exercise the settle semantics without flipping the real process-global
|
|
66
66
|
* cache.
|
|
67
67
|
*/
|
|
68
|
-
|
|
68
|
+
function createCompileCache(
|
|
69
69
|
enableFn: typeof enableCompileCache = enableCompileCache,
|
|
70
70
|
rootExists: (dir: string) => boolean = existsSync,
|
|
71
71
|
): CompileCacheHandle {
|