@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/run.ts
CHANGED
|
@@ -148,7 +148,7 @@ async function assemblePrompt(parsed: RunCliArgs): Promise<{
|
|
|
148
148
|
* path, not a skill package, or validation failure such as a missing
|
|
149
149
|
* description). Exported for contracts tests.
|
|
150
150
|
*/
|
|
151
|
-
|
|
151
|
+
function explicitSkillPathErrors(skillPaths: ReadonlyArray<string>): string[] {
|
|
152
152
|
const errors: string[] = [];
|
|
153
153
|
for (const skillPath of skillPaths) {
|
|
154
154
|
const list = loadSkills({ disableDiscovery: true, explicitSkillPaths: [skillPath] });
|
|
@@ -187,7 +187,7 @@ export function explicitSkillPathErrors(skillPaths: ReadonlyArray<string>): stri
|
|
|
187
187
|
* closure sits on. Boundaries rule6 in `tests/boundaries/check-boundaries.ts`
|
|
188
188
|
* holds both halves of that.
|
|
189
189
|
*/
|
|
190
|
-
|
|
190
|
+
async function unknownSlashCommandRefusal(task: string): Promise<string | null> {
|
|
191
191
|
if (!task.trim().startsWith("/")) return null;
|
|
192
192
|
const { parseSlashCommand } = await import("../interactive/slash-commands.js");
|
|
193
193
|
const command = parseSlashCommand(task);
|
|
@@ -261,7 +261,7 @@ export async function runClioRun(
|
|
|
261
261
|
// A mistyped slash command is a usage error, not a task. Refusing it
|
|
262
262
|
// here keeps it from booting a session and spending a model turn on a
|
|
263
263
|
// command that was never run, which is what the TUI has always done
|
|
264
|
-
// and what docs/extensions-and-sharing.md documents for both surfaces.
|
|
264
|
+
// and what docs/guide/extensions-and-sharing.md documents for both surfaces.
|
|
265
265
|
const slashRefusal = await unknownSlashCommandRefusal(assembled.prompt);
|
|
266
266
|
if (slashRefusal !== null) {
|
|
267
267
|
process.stderr.write(`clio-coder run: ${slashRefusal}\n`);
|
|
@@ -372,13 +372,13 @@ async function runDispatch(
|
|
|
372
372
|
]);
|
|
373
373
|
const config = loaded.getContract<ConfigContract>("config");
|
|
374
374
|
const baseSettings = config?.get() ?? readSettings();
|
|
375
|
-
// Install `
|
|
375
|
+
// Install `fleet.history.journal` the same way the interactive composition root
|
|
376
376
|
// does. The journal never reads settings.yaml itself: it sits on the
|
|
377
377
|
// dispatch event path, where a settings read would be both a cost and a
|
|
378
378
|
// throw site.
|
|
379
|
-
configureRunEventJournal(baseSettings.
|
|
380
|
-
effectiveSettings =
|
|
381
|
-
|
|
379
|
+
configureRunEventJournal(baseSettings.fleet.history.journal);
|
|
380
|
+
effectiveSettings = structuredClone(baseSettings);
|
|
381
|
+
if (parsed.autonomy !== undefined) effectiveSettings.safety.autonomy = parsed.autonomy;
|
|
382
382
|
const dispatch = loaded.getContract<DispatchContract>("dispatch");
|
|
383
383
|
if (!dispatch) {
|
|
384
384
|
process.stderr.write("dispatch domain unavailable\n");
|
|
@@ -394,19 +394,15 @@ async function runDispatch(
|
|
|
394
394
|
return 1;
|
|
395
395
|
}
|
|
396
396
|
const settings = effectiveSettings;
|
|
397
|
-
const profileTargetId = parsed.agentProfile ? settings.
|
|
397
|
+
const profileTargetId = parsed.agentProfile ? settings.fleet?.profiles?.[parsed.agentProfile]?.target : undefined;
|
|
398
398
|
const runtimeByTarget = new Map(settings.targets.map((target) => [target.id, target.runtime] as const));
|
|
399
399
|
const runtimeTargetId = parsed.agentRuntime
|
|
400
|
-
? [settings.
|
|
400
|
+
? [settings.fleet?.default, ...Object.values(settings.fleet?.profiles ?? {})].find(
|
|
401
401
|
(profile) => profile?.target && runtimeByTarget.get(profile.target) === parsed.agentRuntime,
|
|
402
402
|
)?.target
|
|
403
403
|
: undefined;
|
|
404
404
|
const targetId =
|
|
405
|
-
parsed.target ??
|
|
406
|
-
profileTargetId ??
|
|
407
|
-
runtimeTargetId ??
|
|
408
|
-
settings.workers?.default?.target ??
|
|
409
|
-
settings.orchestrator?.target;
|
|
405
|
+
parsed.target ?? profileTargetId ?? runtimeTargetId ?? settings.fleet?.default?.target ?? settings.chat?.target;
|
|
410
406
|
const target = targetId ? providers.getTarget(targetId) : null;
|
|
411
407
|
const runtime = target ? providers.getRuntime(target.runtime) : null;
|
|
412
408
|
if (!target || !runtime) {
|
|
@@ -441,7 +437,7 @@ async function runDispatch(
|
|
|
441
437
|
if (skillPaths.length > 0) dispatchReq.skillPaths = skillPaths;
|
|
442
438
|
try {
|
|
443
439
|
const settings = effectiveSettings;
|
|
444
|
-
if (settings.
|
|
440
|
+
if (settings.integrations.projectResources?.trustProjectImports) {
|
|
445
441
|
dispatchReq.trustProjectCompatRoots = true;
|
|
446
442
|
}
|
|
447
443
|
} catch {
|
|
@@ -451,8 +447,8 @@ async function runDispatch(
|
|
|
451
447
|
let memorySection = "";
|
|
452
448
|
try {
|
|
453
449
|
const records = loadMemoryRecordsSync(clioDataDir());
|
|
454
|
-
const boundProfileName = parsed.agentProfile ?? effectiveSettings.
|
|
455
|
-
const boundProfile = boundProfileName ? effectiveSettings.
|
|
450
|
+
const boundProfileName = parsed.agentProfile ?? effectiveSettings.fleet.agentProfiles[parsed.agentId];
|
|
451
|
+
const boundProfile = boundProfileName ? effectiveSettings.fleet.profiles[boundProfileName] : undefined;
|
|
456
452
|
const configuredRuntime = (targetId: string | null | undefined): string | undefined =>
|
|
457
453
|
effectiveSettings.targets.find((target) => target.id === targetId)?.runtime;
|
|
458
454
|
const profileRuntimeId = configuredRuntime(boundProfile?.target);
|
package/src/cli/share.ts
CHANGED
|
@@ -142,7 +142,11 @@ function printDiagnostics(diagnostics: ReadonlyArray<ShareDiagnostic>): void {
|
|
|
142
142
|
|
|
143
143
|
function printRecovery(plan: ShareImportPlan): void {
|
|
144
144
|
if (!plan.recovery) return;
|
|
145
|
-
process.stderr.write(
|
|
145
|
+
process.stderr.write(
|
|
146
|
+
plan.recovery.failed
|
|
147
|
+
? "recovery: import stopped after a write failure\n"
|
|
148
|
+
: "recovery: import completed with preserved backups\n",
|
|
149
|
+
);
|
|
146
150
|
process.stderr.write("written files:\n");
|
|
147
151
|
if (plan.recovery.written.length === 0) process.stderr.write(" none\n");
|
|
148
152
|
else {
|
|
@@ -233,7 +237,7 @@ export function runShareCommand(argv: ReadonlyArray<string>): number {
|
|
|
233
237
|
const archive = plan.archive;
|
|
234
238
|
if (archive) {
|
|
235
239
|
process.stdout.write(
|
|
236
|
-
`archive: ${archive.manifest.format} clio=${archive.manifest.
|
|
240
|
+
`archive: ${archive.manifest.format} clio-coder=${archive.manifest.clioCoderVersion} files=${archive.files.length} created=${archive.manifest.createdAt}\n`,
|
|
237
241
|
);
|
|
238
242
|
}
|
|
239
243
|
}
|
package/src/cli/skills-eval.ts
CHANGED
|
@@ -51,9 +51,9 @@ const DEFAULT_RUN_TIMEOUT_MS = 600_000;
|
|
|
51
51
|
*
|
|
52
52
|
* A headless `clio-coder run` has no operator to answer a permission ask, so below
|
|
53
53
|
* full-auto every exec-class call in an arm dies with the harness's own denial
|
|
54
|
-
* and the judge scores a skill that was never allowed to act.
|
|
55
|
-
*
|
|
56
|
-
*
|
|
54
|
+
* and the judge scores a skill that was never allowed to act. The 2026-08-13
|
|
55
|
+
* harness decision is that eval arms run full-auto because their workspaces
|
|
56
|
+
* are per-run copies created under a
|
|
57
57
|
* private temp root and removed when the scenario ends. The judge arm is
|
|
58
58
|
* excluded: it scores text and is instructed to call no tools, so granting it
|
|
59
59
|
* unattended write and exec buys nothing.
|
|
@@ -311,7 +311,7 @@ type EvalArm = "baseline" | "treatment" | "judge";
|
|
|
311
311
|
*
|
|
312
312
|
* @internal Exported for contract tests.
|
|
313
313
|
*/
|
|
314
|
-
|
|
314
|
+
function armRunArgs(
|
|
315
315
|
arm: EvalArm,
|
|
316
316
|
prompt: string,
|
|
317
317
|
options: { target?: string | undefined; skillBaseDir?: string | undefined } = {},
|
|
@@ -335,7 +335,7 @@ export function armRunArgs(
|
|
|
335
335
|
*
|
|
336
336
|
* @internal Exported for contract tests.
|
|
337
337
|
*/
|
|
338
|
-
|
|
338
|
+
function permissionWallReason(arm: EvalArm, run: CapturedRun): string | null {
|
|
339
339
|
const haystack = `${run.transcript}\n${run.finalText}`;
|
|
340
340
|
let blocked = 0;
|
|
341
341
|
let at = haystack.indexOf(HEADLESS_PERMISSION_DENIED_MARKER);
|
|
@@ -360,7 +360,7 @@ function unmeasuredBullets(scenario: SkillEvalScenario, reason: string): ScoredB
|
|
|
360
360
|
*
|
|
361
361
|
* @internal Exported for contract tests.
|
|
362
362
|
*/
|
|
363
|
-
|
|
363
|
+
function evalChildEnv(allowNetwork: boolean, env: NodeJS.ProcessEnv = process.env): NodeJS.ProcessEnv {
|
|
364
364
|
const childEnv: NodeJS.ProcessEnv = { ...env };
|
|
365
365
|
if (allowNetwork) Reflect.deleteProperty(childEnv, NO_NETWORK_TOOLS_ENV);
|
|
366
366
|
else childEnv[NO_NETWORK_TOOLS_ENV] = "1";
|
|
@@ -378,7 +378,7 @@ export function evalChildEnv(allowNetwork: boolean, env: NodeJS.ProcessEnv = pro
|
|
|
378
378
|
* the catalog answers only for a name no root installed, which is the skill
|
|
379
379
|
* author's case in this repository.
|
|
380
380
|
*/
|
|
381
|
-
|
|
381
|
+
function resolveSkillBaseDir(
|
|
382
382
|
nameOrPath: string,
|
|
383
383
|
cwd: string,
|
|
384
384
|
): { baseDir: string | null; origin?: string; error?: string } {
|
|
@@ -442,7 +442,7 @@ async function runScenario(
|
|
|
442
442
|
// Published per-scenario figure: monotonic so a clock correction during a
|
|
443
443
|
// long sweep cannot land in one row's wall time.
|
|
444
444
|
const scenarioStart = performance.now();
|
|
445
|
-
const workspace = await mkdtemp(join(tmpdir(), "clio-skill-eval-seed-"));
|
|
445
|
+
const workspace = await mkdtemp(join(tmpdir(), "clio-coder-skill-eval-seed-"));
|
|
446
446
|
let runWorkspaces: MaterializedSkillEvalWorkspaces | null = null;
|
|
447
447
|
try {
|
|
448
448
|
if (workspaceOverride !== null) await copyWorkspace(workspaceOverride, workspace);
|
|
@@ -570,7 +570,7 @@ export interface MaterializedSkillEvalWorkspaces {
|
|
|
570
570
|
* cooperative model, not as an isolation guarantee.
|
|
571
571
|
*/
|
|
572
572
|
async function armWorkspace(created: string[]): Promise<string> {
|
|
573
|
-
const root = await mkdtemp(join(tmpdir(), "clio-skill-eval-"));
|
|
573
|
+
const root = await mkdtemp(join(tmpdir(), "clio-coder-skill-eval-"));
|
|
574
574
|
created.push(root);
|
|
575
575
|
const workspace = join(root, "workspace");
|
|
576
576
|
await mkdir(workspace, { recursive: true });
|
|
@@ -578,7 +578,7 @@ async function armWorkspace(created: string[]): Promise<string> {
|
|
|
578
578
|
}
|
|
579
579
|
|
|
580
580
|
/** @internal Exported for contract tests. */
|
|
581
|
-
|
|
581
|
+
async function materializeSkillEvalWorkspaces(seedWorkspace: string): Promise<MaterializedSkillEvalWorkspaces> {
|
|
582
582
|
const created: string[] = [];
|
|
583
583
|
try {
|
|
584
584
|
const baseline = await armWorkspace(created);
|
|
@@ -814,7 +814,7 @@ function loadsSkillBody(tool: string, args: unknown): boolean {
|
|
|
814
814
|
}
|
|
815
815
|
|
|
816
816
|
/** @internal Exported for contract tests. */
|
|
817
|
-
|
|
817
|
+
function parseRunStdout(stdout: string): { sessionId: string | null; transcript: string; finalText: string } {
|
|
818
818
|
let sessionId: string | null = null;
|
|
819
819
|
const lines: string[] = [];
|
|
820
820
|
let finalText = "";
|
|
@@ -938,7 +938,7 @@ function judgeVerdictAbsenceReason(judge: CapturedRun): string {
|
|
|
938
938
|
}
|
|
939
939
|
|
|
940
940
|
/** Exported for contracts tests. */
|
|
941
|
-
|
|
941
|
+
function parseJudgeVerdicts(scenario: SkillEvalScenario, judge: CapturedRun): ScoredBullet[] {
|
|
942
942
|
const parsed = extractBulletsObject(judge.finalText) ?? extractBulletsObject(judge.transcript);
|
|
943
943
|
// No verdict object anywhere in the judge run. The scenario was not scored,
|
|
944
944
|
// which is a fact about the judge, so every bullet stays unmeasured rather
|
|
@@ -982,7 +982,7 @@ export function parseJudgeVerdicts(scenario: SkillEvalScenario, judge: CapturedR
|
|
|
982
982
|
* content, so this walks candidate `{` openers around the first "bullets" key
|
|
983
983
|
* and balance-scans to the matching close brace.
|
|
984
984
|
*/
|
|
985
|
-
|
|
985
|
+
function extractBulletsObject(text: string): Record<string, unknown> | null {
|
|
986
986
|
const stripped = text.replace(/```(?:json)?/g, "");
|
|
987
987
|
const bulletsAt = stripped.indexOf('"bullets"');
|
|
988
988
|
if (bulletsAt < 0) return null;
|
|
@@ -1085,7 +1085,7 @@ function synthesizeArtifact(
|
|
|
1085
1085
|
evalId,
|
|
1086
1086
|
taskFile: evalsPath,
|
|
1087
1087
|
taskFileHash: contentHash,
|
|
1088
|
-
|
|
1088
|
+
clioCoder: evalClioProvenance(),
|
|
1089
1089
|
environment: evalEnvironmentProvenance(),
|
|
1090
1090
|
target: target ?? null,
|
|
1091
1091
|
model: null,
|
package/src/cli/targets.ts
CHANGED
|
@@ -51,10 +51,6 @@ Usage:
|
|
|
51
51
|
clio-coder targets convert <id> --runtime <runtimeId>
|
|
52
52
|
clio-coder targets remove <id>
|
|
53
53
|
clio-coder targets rename <old> <new>
|
|
54
|
-
|
|
55
|
-
Aliases:
|
|
56
|
-
--worker-target and --worker-model are accepted for --fleet-target and
|
|
57
|
-
--fleet-model, carried over from before the worker/fleet rename.
|
|
58
54
|
`;
|
|
59
55
|
|
|
60
56
|
const USE_USAGE =
|
|
@@ -205,8 +201,7 @@ export async function runTargetsCommand(args: ReadonlyArray<string>): Promise<nu
|
|
|
205
201
|
if (parsed.json) {
|
|
206
202
|
const settings = readSettings();
|
|
207
203
|
const candidateFor = (status: TargetStatus): string | null => {
|
|
208
|
-
const orchestratorModel =
|
|
209
|
-
settings.orchestrator?.target === status.target.id ? (settings.orchestrator?.model ?? null) : null;
|
|
204
|
+
const orchestratorModel = settings.chat?.target === status.target.id ? (settings.chat?.model ?? null) : null;
|
|
210
205
|
return orchestratorModel ?? status.target.defaultModel ?? null;
|
|
211
206
|
};
|
|
212
207
|
const rows = filtered.map((status) => {
|
|
@@ -250,11 +245,11 @@ function parseUseArgs(args: ReadonlyArray<string>): UseArgs | null {
|
|
|
250
245
|
parsed.backgroundModel = need();
|
|
251
246
|
continue;
|
|
252
247
|
}
|
|
253
|
-
if (arg === "--fleet-model"
|
|
248
|
+
if (arg === "--fleet-model") {
|
|
254
249
|
parsed.workerModel = need();
|
|
255
250
|
continue;
|
|
256
251
|
}
|
|
257
|
-
if (arg === "--fleet-target"
|
|
252
|
+
if (arg === "--fleet-target") {
|
|
258
253
|
parsed.workerTarget = need();
|
|
259
254
|
continue;
|
|
260
255
|
}
|
|
@@ -467,11 +462,11 @@ function runProfileRemove(args: ReadonlyArray<string>): number {
|
|
|
467
462
|
}
|
|
468
463
|
ensureClioState();
|
|
469
464
|
const settings = readSettings();
|
|
470
|
-
if (!settings.
|
|
465
|
+
if (!settings.fleet.profiles[parsed.name]) {
|
|
471
466
|
printError(`no fleet profile named ${parsed.name}`);
|
|
472
467
|
return 1;
|
|
473
468
|
}
|
|
474
|
-
const boundAgents = Object.entries(settings.
|
|
469
|
+
const boundAgents = Object.entries(settings.fleet.agentProfiles)
|
|
475
470
|
.filter(([, profileName]) => profileName === parsed.name)
|
|
476
471
|
.map(([agentId]) => agentId);
|
|
477
472
|
if (boundAgents.length > 0 && !parsed.force) {
|
|
@@ -510,23 +505,23 @@ function runProfileRename(args: ReadonlyArray<string>): number {
|
|
|
510
505
|
}
|
|
511
506
|
ensureClioState();
|
|
512
507
|
const settings = readSettings();
|
|
513
|
-
if (!settings.
|
|
508
|
+
if (!settings.fleet.profiles[parsed.oldName]) {
|
|
514
509
|
printError(`no fleet profile named ${parsed.oldName}`);
|
|
515
510
|
return 1;
|
|
516
511
|
}
|
|
517
|
-
if (settings.
|
|
512
|
+
if (settings.fleet.profiles[parsed.newName]) {
|
|
518
513
|
printError(`fleet profile already exists: ${parsed.newName}`);
|
|
519
514
|
return 2;
|
|
520
515
|
}
|
|
521
516
|
let updatedBindings = 0;
|
|
522
517
|
updateSettings((fresh) => {
|
|
523
|
-
const profile = fresh.
|
|
518
|
+
const profile = fresh.fleet.profiles[parsed.oldName];
|
|
524
519
|
if (!profile) return;
|
|
525
|
-
fresh.
|
|
526
|
-
delete fresh.
|
|
527
|
-
for (const [agentId, profileName] of Object.entries(fresh.
|
|
520
|
+
fresh.fleet.profiles[parsed.newName] = profile;
|
|
521
|
+
delete fresh.fleet.profiles[parsed.oldName];
|
|
522
|
+
for (const [agentId, profileName] of Object.entries(fresh.fleet.agentProfiles)) {
|
|
528
523
|
if (profileName !== parsed.oldName) continue;
|
|
529
|
-
fresh.
|
|
524
|
+
fresh.fleet.agentProfiles[agentId] = parsed.newName;
|
|
530
525
|
updatedBindings += 1;
|
|
531
526
|
}
|
|
532
527
|
});
|
|
@@ -551,13 +546,13 @@ function runProfileBind(args: ReadonlyArray<string>): number {
|
|
|
551
546
|
}
|
|
552
547
|
ensureClioState();
|
|
553
548
|
const settings = readSettings();
|
|
554
|
-
if (settings.
|
|
549
|
+
if (settings.integrations.externalAgents.entries.some((agent) => agent.id === parsed.agentId)) {
|
|
555
550
|
printError(
|
|
556
551
|
`cannot bind ACP delegation agent '${parsed.agentId}' to a fleet profile; ACP agents use their own runner and ignore native target routing`,
|
|
557
552
|
);
|
|
558
553
|
return 1;
|
|
559
554
|
}
|
|
560
|
-
if (!settings.
|
|
555
|
+
if (!settings.fleet.profiles[parsed.profileName]) {
|
|
561
556
|
process.stderr.write(
|
|
562
557
|
`${chalk.yellow("warning:")} fleet profile '${parsed.profileName}' is not configured; binding will resolve after the profile exists\n`,
|
|
563
558
|
);
|
|
@@ -581,12 +576,12 @@ function runProfileUnbind(args: ReadonlyArray<string>): number {
|
|
|
581
576
|
}
|
|
582
577
|
ensureClioState();
|
|
583
578
|
const settings = readSettings();
|
|
584
|
-
if (!settings.
|
|
579
|
+
if (!settings.fleet.agentProfiles[parsed]) {
|
|
585
580
|
printError(`agent ${parsed} is not bound to a fleet profile`);
|
|
586
581
|
return 1;
|
|
587
582
|
}
|
|
588
583
|
updateSettings((fresh) => {
|
|
589
|
-
delete fresh.
|
|
584
|
+
delete fresh.fleet.agentProfiles[parsed];
|
|
590
585
|
});
|
|
591
586
|
printOk(`unbound agent ${parsed}`);
|
|
592
587
|
return 0;
|
|
@@ -608,10 +603,10 @@ function runProfileBindings(args: ReadonlyArray<string>): number {
|
|
|
608
603
|
}
|
|
609
604
|
ensureClioState();
|
|
610
605
|
const settings = readSettings();
|
|
611
|
-
const rows = Object.entries(settings.
|
|
606
|
+
const rows = Object.entries(settings.fleet.agentProfiles)
|
|
612
607
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
613
608
|
.map(([agentId, profileName]) => {
|
|
614
|
-
const profile = settings.
|
|
609
|
+
const profile = settings.fleet.profiles[profileName];
|
|
615
610
|
return {
|
|
616
611
|
agentId,
|
|
617
612
|
profile: profileName,
|
|
@@ -686,7 +681,7 @@ function runFleet(args: ReadonlyArray<string>, usage = "clio-coder targets fleet
|
|
|
686
681
|
ensureClioState();
|
|
687
682
|
const settings = readSettings();
|
|
688
683
|
const byId = new Map(settings.targets.map((target) => [target.id, target] as const));
|
|
689
|
-
const rows = Object.entries(settings.
|
|
684
|
+
const rows = Object.entries(settings.fleet.profiles).map(([name, profile]) => {
|
|
690
685
|
const target = profile.target ? byId.get(profile.target) : undefined;
|
|
691
686
|
return {
|
|
692
687
|
name,
|
|
@@ -782,7 +777,7 @@ function runConvert(args: ReadonlyArray<string>): number {
|
|
|
782
777
|
printOk(`target ${id} already uses runtime ${runtimeId}`);
|
|
783
778
|
return 0;
|
|
784
779
|
}
|
|
785
|
-
if (settings.
|
|
780
|
+
if (settings.chat.target === id && !isOrchestratorEligibleRuntime(runtime)) {
|
|
786
781
|
printError(`cannot convert orchestrator target '${id}' to non-HTTP/native runtime '${runtime.id}'`);
|
|
787
782
|
return 1;
|
|
788
783
|
}
|
|
@@ -917,7 +912,7 @@ function tableWidths(rows: ReadonlyArray<TargetTableRow>, width: number): Target
|
|
|
917
912
|
* cut to its width, marked the same way. Colour is dropped on those rows because
|
|
918
913
|
* the ansi bytes would sit inside the cut; a wrapped row costs more than colour.
|
|
919
914
|
*/
|
|
920
|
-
|
|
915
|
+
function formatTargetTable(
|
|
921
916
|
rows: ReadonlyArray<TargetTableRow>,
|
|
922
917
|
width: number,
|
|
923
918
|
paintHealth: (cell: string, row: TargetTableRow) => string = (cell) => cell,
|
|
@@ -972,7 +967,7 @@ function renderTable(providers: ProvidersContract, entries: ReadonlyArray<Target
|
|
|
972
967
|
}
|
|
973
968
|
}
|
|
974
969
|
|
|
975
|
-
|
|
970
|
+
function targetTableRow(providers: ProvidersContract, status: TargetStatus): TargetTableRow {
|
|
976
971
|
const diagnostic = degradedHealthDiagnostic(status);
|
|
977
972
|
return {
|
|
978
973
|
id: status.target.id,
|
|
@@ -1034,7 +1029,7 @@ function capabilityBadges(caps: CapabilityFlags): string {
|
|
|
1034
1029
|
* no states (cloud targets); "resident: none" when states are known and
|
|
1035
1030
|
* nothing is loaded, so a cold box is distinguishable from an unknown one.
|
|
1036
1031
|
*/
|
|
1037
|
-
|
|
1032
|
+
function residentModelsSummary(states: TargetStatus["discoveredModelStates"]): string | null {
|
|
1038
1033
|
if (!states) return null;
|
|
1039
1034
|
const entries = Object.entries(states);
|
|
1040
1035
|
if (entries.length === 0) return null;
|
|
@@ -1049,7 +1044,7 @@ export function residentModelsSummary(states: TargetStatus["discoveredModelState
|
|
|
1049
1044
|
* capability the target reported. Saying so is the difference between a number
|
|
1050
1045
|
* a user can plan against and one they cannot.
|
|
1051
1046
|
*/
|
|
1052
|
-
|
|
1047
|
+
function formatContextWindow(
|
|
1053
1048
|
status: Pick<TargetStatus, "capabilities" | "contextWindowProvenance"> &
|
|
1054
1049
|
Partial<Pick<TargetStatus, "target" | "discoveredModelStates">>,
|
|
1055
1050
|
): string {
|
|
@@ -1065,7 +1060,7 @@ export function formatContextWindow(
|
|
|
1065
1060
|
: `ctx ${window}`;
|
|
1066
1061
|
}
|
|
1067
1062
|
|
|
1068
|
-
|
|
1063
|
+
function formatNotes(status: TargetStatus): string {
|
|
1069
1064
|
const parts: string[] = [];
|
|
1070
1065
|
const diagnostic = degradedHealthDiagnostic(status);
|
|
1071
1066
|
// The health diagnosis leads because gateway, context, and residency facts
|
package/src/cli/trace-inspect.ts
CHANGED
|
@@ -166,7 +166,7 @@ function processSummary(reader: TraceReader, runId: string): TraceInspectProcess
|
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
/** Pure payload builder, exported so the fixed contract is testable without subprocess capture. */
|
|
169
|
-
|
|
169
|
+
function traceInspectSnapshot(
|
|
170
170
|
now: () => number = Date.now,
|
|
171
171
|
databasePath: string = traceDatabasePath(clioStatePath()),
|
|
172
172
|
): TraceInspectSnapshot {
|
package/src/cli/trace.ts
CHANGED
|
@@ -3,7 +3,10 @@ import { access } from "node:fs/promises";
|
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
5
5
|
import { clioStatePath } from "../core/xdg.js";
|
|
6
|
+
import type { CodeStepRecord } from "../domains/dispatch/code-step.js";
|
|
7
|
+
import { codeStepDir, readCodeStepRecords } from "../domains/dispatch/code-step-store.js";
|
|
6
8
|
import {
|
|
9
|
+
assertTraceSelectOnly,
|
|
7
10
|
DEFAULT_TRACE_RETENTION_POLICY,
|
|
8
11
|
resolveTraceRetentionPolicy,
|
|
9
12
|
TRACE_EVENT_POLL_LIMIT,
|
|
@@ -23,12 +26,16 @@ const HELP = `Usage:
|
|
|
23
26
|
clio-coder trace phases <runId> [--db PATH]
|
|
24
27
|
clio-coder trace tail <runId> [--follow] [--db PATH]
|
|
25
28
|
clio-coder trace procs <runId> [--db PATH]
|
|
29
|
+
clio-coder trace code-steps <rootId> [--json] deterministic code steps of one fleet root
|
|
26
30
|
clio-coder trace prune [--max-age-days N] [--max-bytes N] [--db PATH] [--json]
|
|
27
31
|
clio-coder trace sql <SELECT query> [--db PATH]
|
|
28
32
|
clio-coder trace ui [--db PATH] [--port N] source checkout only
|
|
29
33
|
|
|
30
34
|
The viewer ships with the repository, not the npm package, so from an installed
|
|
31
|
-
Clio the subcommands above are the way in. They read the same database
|
|
35
|
+
Clio the subcommands above are the way in. They read the same database, except
|
|
36
|
+
code-steps, which reads the per-root record files under the state directory's
|
|
37
|
+
code-steps/ tree (a code step is a subprocess, not a model run, so it never
|
|
38
|
+
enters the SQLite mirror).
|
|
32
39
|
Pruning keeps ${DEFAULT_TRACE_RETENTION_POLICY.maxAgeDays} days and at most ${DEFAULT_TRACE_RETENTION_POLICY.maxBytes} bytes by default. Set
|
|
33
40
|
CLIO_CODER_TRACE_RETENTION_DAYS or CLIO_CODER_TRACE_MAX_BYTES to change the automatic
|
|
34
41
|
policy; prune flags override those values for one command.
|
|
@@ -96,7 +103,7 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
|
|
|
96
103
|
}
|
|
97
104
|
|
|
98
105
|
/** Every subcommand `trace` answers to. Anything else is a usage error. */
|
|
99
|
-
const TRACE_COMMANDS = new Set(["runs", "inspect", "phases", "tail", "procs", "prune", "sql", "ui"]);
|
|
106
|
+
const TRACE_COMMANDS = new Set(["runs", "inspect", "phases", "tail", "procs", "code-steps", "prune", "sql", "ui"]);
|
|
100
107
|
|
|
101
108
|
/** The subcommands whose first positional is a run id. */
|
|
102
109
|
const TRACE_COMMANDS_NEEDING_RUN_ID = new Set(["phases", "tail", "procs"]);
|
|
@@ -118,6 +125,10 @@ function invocationError(command: string, runId: string | undefined): number | n
|
|
|
118
125
|
return 2;
|
|
119
126
|
}
|
|
120
127
|
if (TRACE_COMMANDS_NEEDING_RUN_ID.has(command) && !runId) return missingRunId(command);
|
|
128
|
+
if (command === "code-steps" && !runId) {
|
|
129
|
+
process.stderr.write("trace code-steps requires a fleet root id\n");
|
|
130
|
+
return 2;
|
|
131
|
+
}
|
|
121
132
|
return null;
|
|
122
133
|
}
|
|
123
134
|
|
|
@@ -149,9 +160,23 @@ export async function runTraceCommand(args: string[]): Promise<number> {
|
|
|
149
160
|
process.stderr.write("trace sql requires a SELECT query\n");
|
|
150
161
|
return 2;
|
|
151
162
|
}
|
|
163
|
+
if (command === "sql") {
|
|
164
|
+
try {
|
|
165
|
+
assertTraceSelectOnly(sqlQuery);
|
|
166
|
+
} catch (error) {
|
|
167
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
168
|
+
return 2;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
152
171
|
|
|
153
172
|
if (command === "ui") return runTraceUi(parsed.db, parsed.port);
|
|
154
173
|
|
|
174
|
+
// Code-step records live in flat per-root JSON files beside the ledger, not
|
|
175
|
+
// in the SQLite mirror, so this answers before the database is consulted and
|
|
176
|
+
// ignores --db. An absent root directory is the empty state: the root either
|
|
177
|
+
// never ran a code step or its records were pruned with the state tree.
|
|
178
|
+
if (command === "code-steps") return runTraceCodeSteps(runId ?? "", parsed.json);
|
|
179
|
+
|
|
155
180
|
// `inspect` answers ahead of the no-database courtesy below, because its
|
|
156
181
|
// answer to a state tree nothing has written to is a JSON snapshot saying
|
|
157
182
|
// the trace database is unavailable, not a sentence on stdout.
|
|
@@ -233,6 +258,41 @@ export async function runTraceCommand(args: string[]): Promise<number> {
|
|
|
233
258
|
}
|
|
234
259
|
}
|
|
235
260
|
|
|
261
|
+
/**
|
|
262
|
+
* Print every `CodeStepRecord` one fleet root wrote, oldest first. The record
|
|
263
|
+
* is the code step's stand-in for a receipt (argv, cwd, env names, exit code,
|
|
264
|
+
* duration, output digest, artifact paths), and until this command nothing
|
|
265
|
+
* read it back. JSON is the record verbatim; the table keeps the fields an
|
|
266
|
+
* operator scans for and leaves argv last because it is the widest.
|
|
267
|
+
*/
|
|
268
|
+
function runTraceCodeSteps(rootId: string, json: boolean): number {
|
|
269
|
+
let records: CodeStepRecord[];
|
|
270
|
+
try {
|
|
271
|
+
records = readCodeStepRecords(rootId);
|
|
272
|
+
} catch (error) {
|
|
273
|
+
process.stderr.write(`code-step records: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
274
|
+
return 1;
|
|
275
|
+
}
|
|
276
|
+
if (json) {
|
|
277
|
+
process.stdout.write(`${JSON.stringify(records, null, 2)}\n`);
|
|
278
|
+
return 0;
|
|
279
|
+
}
|
|
280
|
+
if (records.length === 0) {
|
|
281
|
+
process.stdout.write(
|
|
282
|
+
`no code-step records for fleet root ${rootId} under ${codeStepDir(rootId)}. a record is written when a fleet plan runs a deterministic code step.\n`,
|
|
283
|
+
);
|
|
284
|
+
return 0;
|
|
285
|
+
}
|
|
286
|
+
process.stdout.write("EXIT DURATION STARTED STEP COMMAND ARGV\n");
|
|
287
|
+
for (const record of records) {
|
|
288
|
+
const exit = record.timedOut ? "timeout" : record.signal !== null ? `sig:${record.signal}` : String(record.exitCode);
|
|
289
|
+
process.stdout.write(
|
|
290
|
+
`${exit.padEnd(5)} ${`${record.durationMs}ms`.padStart(8)} ${record.startedAt.padEnd(24)} ${record.stepId.slice(0, 20).padEnd(20)} ${record.commandId.slice(0, 20).padEnd(20)} ${record.argv.join(" ")}\n`,
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
return 0;
|
|
294
|
+
}
|
|
295
|
+
|
|
236
296
|
function runTracePrune(parsed: ParsedTraceArgs): number {
|
|
237
297
|
let policy: ReturnType<typeof resolveTraceRetentionPolicy>;
|
|
238
298
|
try {
|
|
@@ -293,10 +353,10 @@ function formatEvent(row: TraceEventRow): string {
|
|
|
293
353
|
}
|
|
294
354
|
|
|
295
355
|
function printRuns(rows: TraceRunRow[]): void {
|
|
296
|
-
process.stdout.write("STATUS STARTED TOKENS COST RUN\n");
|
|
356
|
+
process.stdout.write("STATUS SOURCE STARTED TOKENS COST RUN\n");
|
|
297
357
|
for (const row of rows) {
|
|
298
358
|
process.stdout.write(
|
|
299
|
-
`${row.status.padEnd(8)} ${row.started_at.padEnd(28)} ${formatNumber(row.total_tokens).padStart(8)} ${formatCost(row.total_cost_usd).padStart(10)} ${row.run_id}\n`,
|
|
359
|
+
`${row.status.padEnd(8)} ${row.source.padEnd(8)} ${row.started_at.padEnd(28)} ${formatNumber(row.total_tokens).padStart(8)} ${formatCost(row.total_cost_usd).padStart(10)} ${row.run_id}\n`,
|
|
300
360
|
);
|
|
301
361
|
}
|
|
302
362
|
}
|
|
@@ -378,6 +438,38 @@ function missingDatabase(parsed: ParsedTraceArgs): number {
|
|
|
378
438
|
);
|
|
379
439
|
return 1;
|
|
380
440
|
}
|
|
441
|
+
if (parsed.json && parsed.positional[0] === "runs") {
|
|
442
|
+
process.stdout.write("[]\n");
|
|
443
|
+
return 0;
|
|
444
|
+
}
|
|
445
|
+
if (parsed.json && parsed.positional[0] === "prune") {
|
|
446
|
+
let policy: ReturnType<typeof resolveTraceRetentionPolicy>;
|
|
447
|
+
try {
|
|
448
|
+
policy = resolveTraceRetentionPolicy({
|
|
449
|
+
...(parsed.maxAgeDays === undefined ? {} : { maxAgeDays: parsed.maxAgeDays }),
|
|
450
|
+
...(parsed.maxBytes === undefined ? {} : { maxBytes: parsed.maxBytes }),
|
|
451
|
+
});
|
|
452
|
+
} catch (error) {
|
|
453
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
454
|
+
return 1;
|
|
455
|
+
}
|
|
456
|
+
process.stdout.write(
|
|
457
|
+
`${JSON.stringify(
|
|
458
|
+
{
|
|
459
|
+
available: false,
|
|
460
|
+
policy,
|
|
461
|
+
runsRemoved: 0,
|
|
462
|
+
rowsRemoved: 0,
|
|
463
|
+
bytesRemoved: 0,
|
|
464
|
+
vacuumed: false,
|
|
465
|
+
protectedRuns: 0,
|
|
466
|
+
},
|
|
467
|
+
null,
|
|
468
|
+
2,
|
|
469
|
+
)}\n`,
|
|
470
|
+
);
|
|
471
|
+
return 0;
|
|
472
|
+
}
|
|
381
473
|
process.stdout.write(
|
|
382
474
|
`no trace database yet at ${parsed.db}. rows are recorded when a dispatch executes or an interactive turn runs; run \`clio-coder run "<task>"\` or start a session to create one.\n`,
|
|
383
475
|
);
|
package/src/cli/uninstall.ts
CHANGED
|
@@ -90,7 +90,7 @@ export interface ProjectContextInventory {
|
|
|
90
90
|
* rather than one per session. Directories whose `.clio-coder/` is already gone are
|
|
91
91
|
* dropped, because an inventory of nothing to do is noise.
|
|
92
92
|
*/
|
|
93
|
-
|
|
93
|
+
function projectContextInventory(stateDir: string): ProjectContextInventory {
|
|
94
94
|
const root = join(stateDir, "sessions");
|
|
95
95
|
let hashes: string[];
|
|
96
96
|
try {
|
|
@@ -298,7 +298,7 @@ function readNpmPrefix(): string | null {
|
|
|
298
298
|
* that cannot be resolved is dangling, which is still something the operator
|
|
299
299
|
* will hit and still not this installation.
|
|
300
300
|
*/
|
|
301
|
-
|
|
301
|
+
function otherClioOnPath(pathClio: string | null, localLink: string): string | null {
|
|
302
302
|
if (pathClio === null) return null;
|
|
303
303
|
if (pathClio === localLink) return null;
|
|
304
304
|
const resolve = (path: string): string | null => {
|