@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
|
@@ -18,25 +18,24 @@ export interface TokenThroughputSnapshot {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
* One bounded, product-facing observability event
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
21
|
+
* One bounded, product-facing observability event: an evidence build that
|
|
22
|
+
* failed for a run, read by the Dispatch Board to explain why a run has no
|
|
23
|
+
* evidence bundle. This used to also carry runtime/middleware/safety/loop/
|
|
24
|
+
* tool-budget/context/budget notices classified off the same bus channels the
|
|
25
|
+
* interactive layer's own notice pipeline (bus-notices.ts and
|
|
26
|
+
* interactive-event-projection.ts) classifies independently for the toast
|
|
27
|
+
* surface a session actually shows; those seven kinds had no reader of their
|
|
28
|
+
* own here and were removed rather than kept as an unread second opinion.
|
|
29
|
+
* `message` is a short rendered line and `ref` links back to the run.
|
|
26
30
|
*/
|
|
27
31
|
export interface ObservabilityNotice {
|
|
28
32
|
id: string;
|
|
29
33
|
at: number;
|
|
30
|
-
kind: "
|
|
34
|
+
kind: "evidence";
|
|
31
35
|
level: "info" | "warning" | "error";
|
|
32
36
|
message: string;
|
|
33
37
|
ref?: {
|
|
34
38
|
runId?: string;
|
|
35
|
-
agentId?: string;
|
|
36
|
-
targetId?: string;
|
|
37
|
-
modelId?: string;
|
|
38
|
-
evidenceId?: string;
|
|
39
|
-
tool?: string;
|
|
40
39
|
};
|
|
41
40
|
}
|
|
42
41
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Observability domain wire-up. Listens to dispatch + safety bus channels and
|
|
3
|
-
* folds payloads into telemetry/cost trackers.
|
|
4
|
-
*
|
|
3
|
+
* folds payloads into telemetry/cost trackers. Other domains read the snapshot
|
|
4
|
+
* through the contract; the one thing it emits is
|
|
5
|
+
* `accountability.evidenceReady`, once per run whose evidence bundle landed.
|
|
5
6
|
*/
|
|
6
7
|
|
|
7
8
|
import { BusChannels, type DispatchCompletedPayload } from "../../core/bus-events.js";
|
|
@@ -96,7 +97,7 @@ async function buildAndIndexEvidence(
|
|
|
96
97
|
});
|
|
97
98
|
} catch (error) {
|
|
98
99
|
const message = error instanceof Error ? error.message : String(error);
|
|
99
|
-
process.stderr.write(`[clio:evidence] auto-build failed for run ${runId}: ${message}\n`);
|
|
100
|
+
process.stderr.write(`[clio-coder:evidence] auto-build failed for run ${runId}: ${message}\n`);
|
|
100
101
|
hooks.onFailed(runId, message);
|
|
101
102
|
}
|
|
102
103
|
}
|
|
@@ -171,7 +172,14 @@ export function createObservabilityBundle(
|
|
|
171
172
|
const trackBuild = (runId: string, succeeded: boolean, attempt: number | undefined): void => {
|
|
172
173
|
projection.evidenceBuildStarted(runId);
|
|
173
174
|
const build = buildAndIndexEvidence(runId, succeeded, attempt, {
|
|
174
|
-
onReady: (id, evidence) =>
|
|
175
|
+
onReady: (id, evidence) => {
|
|
176
|
+
projection.evidenceBuildSucceeded(id, evidence);
|
|
177
|
+
// The same fact, once, for listeners outside this closure (the ACP
|
|
178
|
+
// server forwards it as the opt-in `accountability.evidenceReady`
|
|
179
|
+
// kind). The payload spreads the evidence object the projection just
|
|
180
|
+
// received rather than rebuilding it, so the two cannot drift.
|
|
181
|
+
context.bus.emit(BusChannels.AccountabilityEvidenceReady, { runId: id, ...evidence });
|
|
182
|
+
},
|
|
175
183
|
onFailed: (id, message) => projection.evidenceBuildFailed(id, message),
|
|
176
184
|
});
|
|
177
185
|
pendingBuilds.add(build);
|
|
@@ -130,7 +130,7 @@ export function appendOutOfTurnUsageRow(stateDir: string, row: OutOfTurnUsageRow
|
|
|
130
130
|
closeSync(fd);
|
|
131
131
|
}
|
|
132
132
|
} catch (error) {
|
|
133
|
-
process.stderr.write(`[clio:usage] out-of-turn usage row not written: ${messageOf(error)}\n`);
|
|
133
|
+
process.stderr.write(`[clio-coder:usage] out-of-turn usage row not written: ${messageOf(error)}\n`);
|
|
134
134
|
return;
|
|
135
135
|
}
|
|
136
136
|
appendsSinceBoundCheck += 1;
|
|
@@ -139,7 +139,7 @@ export function appendOutOfTurnUsageRow(stateDir: string, row: OutOfTurnUsageRow
|
|
|
139
139
|
try {
|
|
140
140
|
boundOutOfTurnUsageFile(path);
|
|
141
141
|
} catch (error) {
|
|
142
|
-
process.stderr.write(`[clio:usage] out-of-turn usage ring not bounded: ${messageOf(error)}\n`);
|
|
142
|
+
process.stderr.write(`[clio-coder:usage] out-of-turn usage ring not bounded: ${messageOf(error)}\n`);
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
|
|
@@ -17,8 +17,10 @@
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import { BusChannels } from "../../core/bus-events.js";
|
|
20
|
+
import { resolveDispatchFailureStatus } from "../../core/dispatch-outcome.js";
|
|
20
21
|
import type { SafeEventBus } from "../../core/event-bus.js";
|
|
21
22
|
import type { TargetStatus } from "../providers/contract.js";
|
|
23
|
+
import { resolveCostProvenance } from "../providers/types/cost-provenance.js";
|
|
22
24
|
import type { AccountabilitySummary } from "./accountability.js";
|
|
23
25
|
import type {
|
|
24
26
|
ObservabilityNotice,
|
|
@@ -94,17 +96,6 @@ function resolveHeartbeat(status: unknown): ObservabilityRunSummary["status"] |
|
|
|
94
96
|
return null;
|
|
95
97
|
}
|
|
96
98
|
|
|
97
|
-
/** Map a DispatchFailed outcome/reason to a summary status, mirroring the board. */
|
|
98
|
-
function resolveFailedStatus(reason: unknown): ObservabilityRunSummary["status"] {
|
|
99
|
-
if (reason === "dead" || reason === "stalled") return "dead";
|
|
100
|
-
if (reason === "interrupted" || reason === "canceled") return "aborted";
|
|
101
|
-
return "failed";
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function normalizeLevel(value: unknown): ObservabilityNotice["level"] {
|
|
105
|
-
return value === "error" || value === "warning" || value === "info" ? value : "info";
|
|
106
|
-
}
|
|
107
|
-
|
|
108
99
|
/** Build a notice ref from candidate parts, dropping anything non-string/empty. */
|
|
109
100
|
function makeRef(parts: Record<string, unknown>): ObservabilityNotice["ref"] | undefined {
|
|
110
101
|
const ref: Record<string, string> = {};
|
|
@@ -167,7 +158,7 @@ export function createObservabilityProjection(bus: SafeEventBus, deps: Projectio
|
|
|
167
158
|
listener(snapshot);
|
|
168
159
|
} catch (error) {
|
|
169
160
|
const message = error instanceof Error ? (error.stack ?? error.message) : String(error);
|
|
170
|
-
console.error(`[clio:observability] projection listener crashed: ${message}`);
|
|
161
|
+
console.error(`[clio-coder:observability] projection listener crashed: ${message}`);
|
|
171
162
|
}
|
|
172
163
|
}
|
|
173
164
|
}
|
|
@@ -216,22 +207,20 @@ export function createObservabilityProjection(bus: SafeEventBus, deps: Projectio
|
|
|
216
207
|
if (typeof id.runtimeKind === "string" && id.runtimeKind.length > 0) summary.runtimeKind = id.runtimeKind;
|
|
217
208
|
}
|
|
218
209
|
|
|
210
|
+
// num()'s Number.isFinite check matters here specifically: a NaN or
|
|
211
|
+
// Infinity costUsd/tokenCount from a payload used to pass the bare
|
|
212
|
+
// `typeof === "number"` check this function had instead, so the projection
|
|
213
|
+
// could corrupt a run's running total on a malformed terminal payload while
|
|
214
|
+
// the dispatch board's parseFiniteNumber (an identical check) rejected it.
|
|
219
215
|
function applyTerminalTokens(summary: ObservabilityRunSummary, payload: Record<string, unknown>): void {
|
|
220
|
-
|
|
216
|
+
summary.tokens.total = num(payload.tokenCount, summary.tokens.total);
|
|
221
217
|
if (typeof payload.inputTokenCount === "number") {
|
|
222
|
-
summary.tokens.input = payload.inputTokenCount + num(payload.cacheReadTokenCount, 0);
|
|
223
|
-
}
|
|
224
|
-
if (typeof payload.outputTokenCount === "number") summary.tokens.output = payload.outputTokenCount;
|
|
225
|
-
if (typeof payload.reasoningTokenCount === "number") summary.tokens.reasoning = payload.reasoningTokenCount;
|
|
226
|
-
if (typeof payload.costUsd === "number") summary.costUsd = payload.costUsd;
|
|
227
|
-
if (
|
|
228
|
-
payload.costProvenance === "known" ||
|
|
229
|
-
payload.costProvenance === "known_free" ||
|
|
230
|
-
payload.costProvenance === "estimated" ||
|
|
231
|
-
payload.costProvenance === "unknown"
|
|
232
|
-
) {
|
|
233
|
-
summary.costProvenance = payload.costProvenance;
|
|
218
|
+
summary.tokens.input = num(payload.inputTokenCount, summary.tokens.input) + num(payload.cacheReadTokenCount, 0);
|
|
234
219
|
}
|
|
220
|
+
summary.tokens.output = num(payload.outputTokenCount, summary.tokens.output);
|
|
221
|
+
summary.tokens.reasoning = num(payload.reasoningTokenCount, summary.tokens.reasoning);
|
|
222
|
+
summary.costUsd = num(payload.costUsd, summary.costUsd);
|
|
223
|
+
summary.costProvenance = resolveCostProvenance(payload.costProvenance, summary.costProvenance);
|
|
235
224
|
}
|
|
236
225
|
|
|
237
226
|
function pushNotice(
|
|
@@ -337,7 +326,7 @@ export function createObservabilityProjection(bus: SafeEventBus, deps: Projectio
|
|
|
337
326
|
const now = Date.now();
|
|
338
327
|
const summary = runs.get(runId) ?? emptyRun(runId, now);
|
|
339
328
|
applyIdentity(summary, payload);
|
|
340
|
-
summary.status =
|
|
329
|
+
summary.status = resolveDispatchFailureStatus(payload.reason);
|
|
341
330
|
summary.updatedAtMs = now;
|
|
342
331
|
summary.finishedAtMs = now;
|
|
343
332
|
summary.durationMs = num(payload.durationMs, Math.max(0, now - summary.startedAtMs));
|
|
@@ -355,71 +344,6 @@ export function createObservabilityProjection(bus: SafeEventBus, deps: Projectio
|
|
|
355
344
|
providerHealth.set(payload.id, payload.status as TargetStatus);
|
|
356
345
|
markChanged();
|
|
357
346
|
}),
|
|
358
|
-
bus.on(BusChannels.RuntimeNotice, (raw: unknown) => {
|
|
359
|
-
const payload = (raw ?? {}) as Record<string, unknown>;
|
|
360
|
-
pushNotice(
|
|
361
|
-
"runtime",
|
|
362
|
-
normalizeLevel(payload.level),
|
|
363
|
-
str(payload.message, "runtime notice"),
|
|
364
|
-
makeRef({ targetId: payload.targetId, modelId: payload.model }),
|
|
365
|
-
);
|
|
366
|
-
}),
|
|
367
|
-
bus.on(BusChannels.MiddlewareHookFailed, (raw: unknown) => {
|
|
368
|
-
const payload = (raw ?? {}) as Record<string, unknown>;
|
|
369
|
-
const kind = payload.kind;
|
|
370
|
-
// Mirror the interactive notice policy: every crashed hook surfaces, but
|
|
371
|
-
// a budget overrun only surfaces once it is steady-state slowness.
|
|
372
|
-
if (kind === "budget_exceeded" && payload.steadyStateWarn !== true) return;
|
|
373
|
-
const hook = str(payload.hook, "hook");
|
|
374
|
-
const message =
|
|
375
|
-
typeof payload.message === "string" && payload.message.length > 0
|
|
376
|
-
? payload.message
|
|
377
|
-
: kind === "budget_exceeded"
|
|
378
|
-
? `middleware hook ${hook} exceeded ${num(payload.budgetMs, 0)}ms budget`
|
|
379
|
-
: `middleware hook ${hook} failed`;
|
|
380
|
-
pushNotice("middleware", kind === "budget_exceeded" ? "warning" : "error", message);
|
|
381
|
-
}),
|
|
382
|
-
bus.on(BusChannels.SafetyBlocked, (raw: unknown) => {
|
|
383
|
-
const payload = (raw ?? {}) as Record<string, unknown>;
|
|
384
|
-
const tool = str(payload.tool, "tool");
|
|
385
|
-
const rejection = (payload.rejection ?? {}) as { short?: unknown };
|
|
386
|
-
const short = str(rejection.short, `${str(payload.actionClass, "action")} blocked`);
|
|
387
|
-
pushNotice("safety", "warning", `${tool}: ${short}`, makeRef({ tool: payload.tool }));
|
|
388
|
-
}),
|
|
389
|
-
bus.on(BusChannels.LoopBlocked, (raw: unknown) => {
|
|
390
|
-
const payload = (raw ?? {}) as Record<string, unknown>;
|
|
391
|
-
const tool = str(payload.tool, "tool");
|
|
392
|
-
pushNotice(
|
|
393
|
-
"loop",
|
|
394
|
-
payload.interrupted === true ? "error" : "warning",
|
|
395
|
-
`loop guard blocked repeated ${tool} (${num(payload.repeatCount, 0)}x)`,
|
|
396
|
-
makeRef({ tool: payload.tool }),
|
|
397
|
-
);
|
|
398
|
-
}),
|
|
399
|
-
bus.on(BusChannels.ToolBudgetExceeded, (raw: unknown) => {
|
|
400
|
-
const payload = (raw ?? {}) as Record<string, unknown>;
|
|
401
|
-
const tool = str(payload.tool, "tool");
|
|
402
|
-
pushNotice(
|
|
403
|
-
"tool-budget",
|
|
404
|
-
payload.interrupted === true ? "error" : "warning",
|
|
405
|
-
`tool-call budget reached on ${tool} (${num(payload.callsThisTurn, 0)} calls)`,
|
|
406
|
-
makeRef({ tool: payload.tool }),
|
|
407
|
-
);
|
|
408
|
-
}),
|
|
409
|
-
bus.on(BusChannels.ContextPruned, (raw: unknown) => {
|
|
410
|
-
const payload = (raw ?? {}) as Record<string, unknown>;
|
|
411
|
-
const reclaimed = Math.max(0, num(payload.tokensBefore, 0) - num(payload.tokensAfter, 0));
|
|
412
|
-
pushNotice("context", "info", `context pruned ${reclaimed} tokens (${str(payload.stage, "prune")})`);
|
|
413
|
-
}),
|
|
414
|
-
bus.on(BusChannels.BudgetAlert, (raw: unknown) => {
|
|
415
|
-
const payload = (raw ?? {}) as Record<string, unknown>;
|
|
416
|
-
const over = payload.level === "over";
|
|
417
|
-
pushNotice(
|
|
418
|
-
"budget",
|
|
419
|
-
over ? "error" : "warning",
|
|
420
|
-
`session cost $${num(payload.currentUsd, 0).toFixed(2)} ${over ? "over" : "at"} $${num(payload.ceilingUsd, 0).toFixed(2)} ceiling`,
|
|
421
|
-
);
|
|
422
|
-
}),
|
|
423
347
|
];
|
|
424
348
|
|
|
425
349
|
return {
|
|
@@ -19,6 +19,7 @@ import type {
|
|
|
19
19
|
DispatchProgressPayload,
|
|
20
20
|
DispatchStartedPayload,
|
|
21
21
|
} from "../../core/bus-events.js";
|
|
22
|
+
import { normalizeClioCoderEventType } from "../../core/naming-events.js";
|
|
22
23
|
import { processAlive, processBirthToken } from "../../core/process-identity.js";
|
|
23
24
|
import { createRedactionTally, redactSecretsText } from "../evidence/redact.js";
|
|
24
25
|
|
|
@@ -110,7 +111,7 @@ function requireSqlite(): DatabaseSyncConstructor {
|
|
|
110
111
|
* Exported for the contract test, which drives it with a load that emits both
|
|
111
112
|
* warnings; production has exactly one caller.
|
|
112
113
|
*/
|
|
113
|
-
|
|
114
|
+
function loadWithSqliteWarningSuppressed<T>(load: () => T): T {
|
|
114
115
|
if (warningTracingRequested()) return load();
|
|
115
116
|
const emitWarning = process.emitWarning;
|
|
116
117
|
const forward = emitWarning.bind(process) as (...args: unknown[]) => void;
|
|
@@ -340,6 +341,8 @@ export interface TraceRunRow {
|
|
|
340
341
|
ended_at: string | null;
|
|
341
342
|
total_tokens: number | null;
|
|
342
343
|
total_cost_usd: number | null;
|
|
344
|
+
/** 'dispatch' for a worker run, 'session' for an interactive chat-loop turn. */
|
|
345
|
+
source: "dispatch" | "session";
|
|
343
346
|
}
|
|
344
347
|
|
|
345
348
|
export interface TracePhaseRow {
|
|
@@ -422,7 +425,8 @@ CREATE TABLE runs (
|
|
|
422
425
|
started_at TEXT NOT NULL,
|
|
423
426
|
ended_at TEXT,
|
|
424
427
|
total_tokens INTEGER,
|
|
425
|
-
total_cost_usd REAL
|
|
428
|
+
total_cost_usd REAL,
|
|
429
|
+
source TEXT NOT NULL DEFAULT 'dispatch' CHECK(source IN ('dispatch','session'))
|
|
426
430
|
);
|
|
427
431
|
|
|
428
432
|
CREATE TABLE phases (
|
|
@@ -523,6 +527,23 @@ function ensureProcessOwnerColumns(db: DatabaseSync): void {
|
|
|
523
527
|
db.exec("ALTER TABLE processes ADD COLUMN host TEXT; ALTER TABLE processes ADD COLUMN birth_token TEXT;");
|
|
524
528
|
}
|
|
525
529
|
|
|
530
|
+
/**
|
|
531
|
+
* Additive discriminator between a dispatched run and an interactive session
|
|
532
|
+
* turn; older version-1 databases gain it in place. `runs`/`phases` held both
|
|
533
|
+
* kinds under one undocumented schema before this column existed, distinguishable
|
|
534
|
+
* only by the sentinel `assignment_id = SESSION_TRACE_ASSIGNMENT_ID` a session
|
|
535
|
+
* turn's row carries (recordSessionTurn's startSessionTurn) versus a real
|
|
536
|
+
* dispatch assignment id (upsertRun). The backfill reads that existing
|
|
537
|
+
* sentinel once; every row written after this migration sets `source`
|
|
538
|
+
* directly instead of relying on it.
|
|
539
|
+
*/
|
|
540
|
+
function ensureRunSourceColumn(db: DatabaseSync): void {
|
|
541
|
+
const columns = db.prepare("PRAGMA table_info(runs)").all() as { name: string }[];
|
|
542
|
+
if (columns.some((column) => column.name === "source")) return;
|
|
543
|
+
db.exec("ALTER TABLE runs ADD COLUMN source TEXT NOT NULL DEFAULT 'dispatch';");
|
|
544
|
+
db.prepare("UPDATE runs SET source = 'session' WHERE assignment_id = ?").run(SESSION_TRACE_ASSIGNMENT_ID);
|
|
545
|
+
}
|
|
546
|
+
|
|
526
547
|
/**
|
|
527
548
|
* Finalize `running` rows whose recorded owner is on this host and provably
|
|
528
549
|
* dead (pid gone, or alive under a different birth token, i.e. reused). Rows
|
|
@@ -569,6 +590,7 @@ export class TraceStore {
|
|
|
569
590
|
else if (version !== TRACE_SCHEMA_VERSION) throw new TraceSchemaVersionError(version);
|
|
570
591
|
this.transaction(() => {
|
|
571
592
|
ensureProcessOwnerColumns(this.db);
|
|
593
|
+
ensureRunSourceColumn(this.db);
|
|
572
594
|
reconcileAbandonedRuns(this.db);
|
|
573
595
|
});
|
|
574
596
|
}
|
|
@@ -672,8 +694,8 @@ export class TraceStore {
|
|
|
672
694
|
this.transaction(() => {
|
|
673
695
|
this.db
|
|
674
696
|
.prepare(`INSERT INTO runs
|
|
675
|
-
(run_id, assignment_id, request, status, agent, target, model, runtime, node, started_at)
|
|
676
|
-
VALUES (?, ?, ?, 'queued', ?, ?, ?, ?, ?,
|
|
697
|
+
(run_id, assignment_id, request, status, agent, target, model, runtime, node, started_at, source)
|
|
698
|
+
VALUES (?, ?, ?, 'queued', ?, ?, ?, ?, ?, ?, 'dispatch')
|
|
677
699
|
ON CONFLICT(run_id) DO UPDATE SET request=excluded.request, agent=excluded.agent,
|
|
678
700
|
target=excluded.target, model=excluded.model, runtime=excluded.runtime, node=excluded.node`)
|
|
679
701
|
.run(
|
|
@@ -1045,8 +1067,8 @@ export class TraceStore {
|
|
|
1045
1067
|
this.transaction(() => {
|
|
1046
1068
|
this.db
|
|
1047
1069
|
.prepare(`INSERT INTO runs
|
|
1048
|
-
(run_id, assignment_id, request, status, agent, target, model, runtime, node, started_at)
|
|
1049
|
-
VALUES (?, ?, ?, 'running', ?, ?, ?, ?, NULL,
|
|
1070
|
+
(run_id, assignment_id, request, status, agent, target, model, runtime, node, started_at, source)
|
|
1071
|
+
VALUES (?, ?, ?, 'running', ?, ?, ?, ?, NULL, ?, 'session')
|
|
1050
1072
|
ON CONFLICT(run_id) DO NOTHING`)
|
|
1051
1073
|
.run(
|
|
1052
1074
|
input.runId,
|
|
@@ -1166,6 +1188,15 @@ function traceDatabaseFootprintBytes(path: string): number {
|
|
|
1166
1188
|
|
|
1167
1189
|
export class TraceReader {
|
|
1168
1190
|
readonly db: DatabaseSync;
|
|
1191
|
+
/**
|
|
1192
|
+
* `runs.source` is an additive column (see ensureRunSourceColumn) a
|
|
1193
|
+
* TraceStore writer backfills in place. A read-only reader can open a
|
|
1194
|
+
* database no writer has touched since before the column existed — the
|
|
1195
|
+
* trace viewer opening a dormant install's trace.sqlite fresh is the
|
|
1196
|
+
* realistic case — and cannot ALTER TABLE to fix that itself, so it
|
|
1197
|
+
* derives the same value the migration would have written instead.
|
|
1198
|
+
*/
|
|
1199
|
+
private readonly runsSourceExpr: string;
|
|
1169
1200
|
|
|
1170
1201
|
constructor(readonly path: string) {
|
|
1171
1202
|
this.db = new (databaseSyncConstructor())(path, { readOnly: true });
|
|
@@ -1176,6 +1207,10 @@ export class TraceReader {
|
|
|
1176
1207
|
const mode = this.db.prepare("PRAGMA journal_mode").get() as { journal_mode: string };
|
|
1177
1208
|
if (mode.journal_mode.toLowerCase() !== "wal")
|
|
1178
1209
|
throw new Error(`trace database journal mode is ${mode.journal_mode}, expected WAL`);
|
|
1210
|
+
const runColumns = this.db.prepare("PRAGMA table_info(runs)").all() as { name: string }[];
|
|
1211
|
+
this.runsSourceExpr = runColumns.some((column) => column.name === "source")
|
|
1212
|
+
? "*"
|
|
1213
|
+
: `*, CASE WHEN assignment_id = '${SESSION_TRACE_ASSIGNMENT_ID}' THEN 'session' ELSE 'dispatch' END AS source`;
|
|
1179
1214
|
}
|
|
1180
1215
|
|
|
1181
1216
|
close(): void {
|
|
@@ -1184,13 +1219,15 @@ export class TraceReader {
|
|
|
1184
1219
|
|
|
1185
1220
|
runs(limit = 50): TraceRunRow[] {
|
|
1186
1221
|
return this.db
|
|
1187
|
-
.prepare(
|
|
1222
|
+
.prepare(`SELECT ${this.runsSourceExpr} FROM runs ORDER BY started_at DESC LIMIT ?`)
|
|
1188
1223
|
.all(clampInt(limit, 1, 500)) as unknown as TraceRunRow[];
|
|
1189
1224
|
}
|
|
1190
1225
|
|
|
1191
1226
|
run(runId: string): TraceRunRow | null {
|
|
1192
1227
|
return (
|
|
1193
|
-
(this.db.prepare(
|
|
1228
|
+
(this.db.prepare(`SELECT ${this.runsSourceExpr} FROM runs WHERE run_id=?`).get(runId) as unknown as
|
|
1229
|
+
| TraceRunRow
|
|
1230
|
+
| undefined) ?? null
|
|
1194
1231
|
);
|
|
1195
1232
|
}
|
|
1196
1233
|
|
|
@@ -1201,7 +1238,7 @@ export class TraceReader {
|
|
|
1201
1238
|
}
|
|
1202
1239
|
|
|
1203
1240
|
events(runId: string, afterRowid = 0, limit = TRACE_EVENT_POLL_LIMIT): TraceEventRow[] {
|
|
1204
|
-
|
|
1241
|
+
const rows = this.db
|
|
1205
1242
|
.prepare(`SELECT rowid, event_id, run_id, phase_id, parent_id, type, name, payload_json,
|
|
1206
1243
|
tokens, started_at, ended_at FROM events
|
|
1207
1244
|
WHERE run_id = ? AND rowid > ? ORDER BY rowid LIMIT ?`)
|
|
@@ -1210,6 +1247,7 @@ export class TraceReader {
|
|
|
1210
1247
|
Math.max(0, Math.trunc(afterRowid)),
|
|
1211
1248
|
clampInt(limit, 1, TRACE_EVENT_POLL_LIMIT),
|
|
1212
1249
|
) as unknown as TraceEventRow[];
|
|
1250
|
+
return rows.map((row) => ({ ...row, type: normalizeClioCoderEventType(row.type) }));
|
|
1213
1251
|
}
|
|
1214
1252
|
|
|
1215
1253
|
/**
|
|
@@ -1221,9 +1259,17 @@ export class TraceReader {
|
|
|
1221
1259
|
* on the way to counting them.
|
|
1222
1260
|
*/
|
|
1223
1261
|
eventKindCounts(runId: string): Array<{ type: string; count: number }> {
|
|
1224
|
-
|
|
1262
|
+
const rows = this.db
|
|
1225
1263
|
.prepare("SELECT type, COUNT(*) AS count FROM events WHERE run_id=? GROUP BY type ORDER BY count DESC, type")
|
|
1226
1264
|
.all(runId) as unknown as Array<{ type: string; count: number }>;
|
|
1265
|
+
const counts = new Map<string, number>();
|
|
1266
|
+
for (const row of rows) {
|
|
1267
|
+
const type = normalizeClioCoderEventType(row.type);
|
|
1268
|
+
counts.set(type, (counts.get(type) ?? 0) + row.count);
|
|
1269
|
+
}
|
|
1270
|
+
return [...counts]
|
|
1271
|
+
.map(([type, count]) => ({ type, count }))
|
|
1272
|
+
.sort((left, right) => right.count - left.count || left.type.localeCompare(right.type));
|
|
1227
1273
|
}
|
|
1228
1274
|
|
|
1229
1275
|
/** Total events and the wall span they cover, without reading one of them. */
|
|
@@ -1273,7 +1319,7 @@ export class TraceReader {
|
|
|
1273
1319
|
}
|
|
1274
1320
|
|
|
1275
1321
|
select(sql: string): Record<string, SQLInputValue>[] {
|
|
1276
|
-
|
|
1322
|
+
assertTraceSelectOnly(sql);
|
|
1277
1323
|
return this.db.prepare(sql).all() as Record<string, SQLInputValue>[];
|
|
1278
1324
|
}
|
|
1279
1325
|
}
|
|
@@ -1301,7 +1347,7 @@ export function createDispatchTraceMirror(
|
|
|
1301
1347
|
path: string,
|
|
1302
1348
|
options: { warn?: (message: string) => void; now?: () => string } = {},
|
|
1303
1349
|
): DispatchTraceMirror {
|
|
1304
|
-
const warn = options.warn ?? ((message: string) => process.stderr.write(`[clio:trace] ${message}\n`));
|
|
1350
|
+
const warn = options.warn ?? ((message: string) => process.stderr.write(`[clio-coder:trace] ${message}\n`));
|
|
1305
1351
|
const now = options.now ?? (() => new Date().toISOString());
|
|
1306
1352
|
let store: TraceStore | null = null;
|
|
1307
1353
|
let chain: Promise<void> = Promise.resolve();
|
|
@@ -1408,7 +1454,7 @@ function recordProgress(
|
|
|
1408
1454
|
): void {
|
|
1409
1455
|
if (!isRecord(payload.event)) return;
|
|
1410
1456
|
const event = payload.event;
|
|
1411
|
-
const type = typeof event.type === "string" ? event.type : "progress";
|
|
1457
|
+
const type = typeof event.type === "string" ? normalizeClioCoderEventType(event.type) : "progress";
|
|
1412
1458
|
const toolCallId = stringValue(event.toolCallId) ?? stringValue(event.tool_call_id);
|
|
1413
1459
|
if (
|
|
1414
1460
|
type === "message_end" &&
|
|
@@ -1442,7 +1488,7 @@ function recordProgress(
|
|
|
1442
1488
|
});
|
|
1443
1489
|
}
|
|
1444
1490
|
}
|
|
1445
|
-
if ((type === "tool_execution_start" || type === "
|
|
1491
|
+
if ((type === "tool_execution_start" || type === "clio_coder_tool_start") && toolCallId !== null) {
|
|
1446
1492
|
starts.set(`${payload.runId}:${toolCallId}`, {
|
|
1447
1493
|
toolCallId,
|
|
1448
1494
|
tool: stringValue(event.toolName) ?? stringValue(event.tool) ?? "tool",
|
|
@@ -1451,7 +1497,7 @@ function recordProgress(
|
|
|
1451
1497
|
});
|
|
1452
1498
|
return;
|
|
1453
1499
|
}
|
|
1454
|
-
if ((type === "tool_execution_end" || type === "
|
|
1500
|
+
if ((type === "tool_execution_end" || type === "clio_coder_tool_finish") && toolCallId !== null) {
|
|
1455
1501
|
const key = `${payload.runId}:${toolCallId}`;
|
|
1456
1502
|
const start = starts.get(key);
|
|
1457
1503
|
// One clock frame per row. The worker measures `durationMs` on its own
|
|
@@ -1537,12 +1583,12 @@ function recordFailure(store: TraceStore, input: DispatchFailedPayload, at: stri
|
|
|
1537
1583
|
function isCriticalTraceEvent(channel: string, raw: unknown): boolean {
|
|
1538
1584
|
if (channel !== "dispatch.progress") return true;
|
|
1539
1585
|
if (!isRecord(raw) || !isRecord(raw.event)) return false;
|
|
1540
|
-
const type = raw.event.type;
|
|
1586
|
+
const type = typeof raw.event.type === "string" ? normalizeClioCoderEventType(raw.event.type) : raw.event.type;
|
|
1541
1587
|
return (
|
|
1542
1588
|
type === "tool_execution_start" ||
|
|
1543
1589
|
type === "tool_execution_end" ||
|
|
1544
|
-
type === "
|
|
1545
|
-
type === "
|
|
1590
|
+
type === "clio_coder_tool_start" ||
|
|
1591
|
+
type === "clio_coder_tool_finish" ||
|
|
1546
1592
|
type === "message_end" ||
|
|
1547
1593
|
type === "attempt_start"
|
|
1548
1594
|
);
|
|
@@ -1659,7 +1705,7 @@ function sha256(value: string): string {
|
|
|
1659
1705
|
return createHash("sha256").update(value, "utf8").digest("hex");
|
|
1660
1706
|
}
|
|
1661
1707
|
|
|
1662
|
-
function
|
|
1708
|
+
export function assertTraceSelectOnly(sql: string): void {
|
|
1663
1709
|
const trimmed = sql.trim();
|
|
1664
1710
|
if (!/^(SELECT|WITH)\b/i.test(trimmed)) throw new Error("trace sql accepts SELECT or read-only WITH queries only");
|
|
1665
1711
|
if (trimmed.includes(";")) throw new Error("trace sql accepts exactly one statement");
|