@iowarp/clio-coder 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +127 -0
- package/CONTRIBUTING.md +142 -52
- package/README.md +434 -473
- package/SECURITY.md +2 -1
- package/dist/{acp-ZILU3AUO.js → acp-H2NGRPWO.js} +12 -12
- package/dist/{agents-HYWGBGQR.js → agents-TL5LLUQP.js} +56 -55
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-N3QT7CBO.js → auth-E5SW4HMS.js} +23 -21
- package/dist/builtins-IA7V7FUC.js +22 -0
- package/dist/{chunk-7RY5VZPH.js → chunk-2APPQIER.js} +8 -8
- package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
- package/dist/{chunk-JA5QWE4Z.js → chunk-2UG5F4C5.js} +1973 -1664
- package/dist/{chunk-5YHDIDBP.js → chunk-2UH2KFUP.js} +2 -2
- package/dist/{chunk-CTJ4RNAA.js → chunk-2VIKGWFZ.js} +2 -2
- package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
- package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
- package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
- package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
- package/dist/chunk-4UVU7BJ5.js +39 -0
- package/dist/{chunk-VKRH2TCS.js → chunk-4WR7VSYB.js} +2 -2
- package/dist/{chunk-BBTJOK6Y.js → chunk-54CBCGIR.js} +5 -5
- package/dist/{chunk-AP73CFDC.js → chunk-5ICU3EUH.js} +2 -2
- package/dist/chunk-5MEZN6CB.js +1334 -0
- package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
- package/dist/{chunk-ABLSQ6JX.js → chunk-64I3JVYM.js} +8 -2
- package/dist/{chunk-AFKWHWXF.js → chunk-6PTFB5VS.js} +39 -22
- package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
- package/dist/chunk-7DRAWPTZ.js +360 -0
- package/dist/chunk-7E7I3WLS.js +3762 -0
- package/dist/{chunk-BJGUKIG4.js → chunk-7ZYNNDKC.js} +7 -7
- package/dist/{chunk-XKA2ICR3.js → chunk-AF4YM7Z4.js} +652 -252
- package/dist/{chunk-GVQJ5CCZ.js → chunk-AX2THNSA.js} +12 -12
- package/dist/{chunk-IG7BCQBA.js → chunk-B4OAX3SI.js} +65 -3
- package/dist/{chunk-TD3PGPQA.js → chunk-B4VEBZKF.js} +3 -3
- package/dist/{chunk-74YWRRU5.js → chunk-BEPZRGGU.js} +10 -10
- package/dist/{chunk-FEFIFZTL.js → chunk-CE5AX47J.js} +2 -2
- package/dist/{chunk-UAPGZHYC.js → chunk-DWUOQKRU.js} +25 -11
- package/dist/{chunk-THYWACCR.js → chunk-E3TPLWFX.js} +3 -3
- package/dist/{chunk-7EPLI7VL.js → chunk-EKCHAPYA.js} +2 -2
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-PJJ6MY27.js → chunk-F5JHEYZM.js} +7 -7
- package/dist/{chunk-6CCS4G3W.js → chunk-FTMGRKEF.js} +3 -3
- package/dist/{chunk-SINK3QR6.js → chunk-G76U63X4.js} +17 -17
- package/dist/{chunk-EIMVLWB3.js → chunk-GHS5EBTQ.js} +64 -9
- package/dist/{chunk-QMXC4JB7.js → chunk-GI7YYQ3F.js} +187 -1419
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-6HMJX2VU.js → chunk-GWZNEVM2.js} +44 -12
- package/dist/chunk-GYV6VZOC.js +26 -0
- package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
- package/dist/{chunk-UXN6JT4W.js → chunk-HEQY7ZFI.js} +3 -3
- package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GCSMB2KY.js → chunk-I7ZPNEJM.js} +145 -102
- package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
- package/dist/{chunk-QTFGO774.js → chunk-IGLP3ODT.js} +29 -16
- package/dist/chunk-IJNZMHLA.js +101 -0
- package/dist/{chunk-BDPT6GTK.js → chunk-INY6HTFL.js} +7 -7
- package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
- package/dist/{chunk-6NJQITNH.js → chunk-IWT4SF4R.js} +6 -3
- package/dist/{chunk-R23Z6K6I.js → chunk-JDAY6FIL.js} +19 -19
- package/dist/chunk-JEQ3XTHC.js +42 -0
- package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
- package/dist/{chunk-TVH4ONAM.js → chunk-JKKCYP3C.js} +10 -10
- package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
- package/dist/{chunk-C537JADH.js → chunk-KK4JZPBQ.js} +19 -141
- package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
- package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
- package/dist/{chunk-6DWBAZ5U.js → chunk-L47TF46W.js} +5 -7
- package/dist/{chunk-HUAS7ITX.js → chunk-LDJG7DW3.js} +91 -42
- package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-VKFQTNDV.js → chunk-MUW2BDDH.js} +4 -4
- package/dist/{chunk-E67WX76H.js → chunk-MWUZBSAQ.js} +104 -152
- package/dist/{chunk-OJTRZGR3.js → chunk-N2Z7HLVY.js} +21 -21
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/{chunk-FYUN5KZ3.js → chunk-NIQJ66N4.js} +21 -21
- package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
- package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
- package/dist/{chunk-VEGN6WIQ.js → chunk-O5CVSAG5.js} +3 -3
- package/dist/{chunk-MOPSG2X7.js → chunk-OML5D5V5.js} +8 -8
- package/dist/{chunk-2VG7KLYV.js → chunk-PAJQJ7BS.js} +5816 -3255
- package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
- package/dist/{chunk-BTGG6BG2.js → chunk-QWGDJJYJ.js} +158 -19
- package/dist/chunk-R6Q67RJH.js +134 -0
- package/dist/{chunk-ZJLUDYFY.js → chunk-RRNP2ANY.js} +6 -6
- package/dist/{chunk-PVAMAVBB.js → chunk-RSJ25QSL.js} +102 -2
- package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
- package/dist/chunk-SKHCAU7K.js +385 -0
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-J4HBWF6Y.js → chunk-TM6LQDI3.js} +131 -28
- package/dist/chunk-UOIZ7DA4.js +41 -0
- package/dist/{chunk-MA3H6DM5.js → chunk-UPZU6GE4.js} +25 -3
- package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
- package/dist/{chunk-N5UK64DP.js → chunk-V2ANDPVT.js} +4 -4
- package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
- package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
- package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
- package/dist/{chunk-QKIFBZKT.js → chunk-VW6DOEDG.js} +497 -81
- package/dist/{chunk-SCYB3HA4.js → chunk-W6RRQCPQ.js} +63 -19
- package/dist/{chunk-2NM363SV.js → chunk-WBKFA554.js} +10 -10
- package/dist/{chunk-R32CLGZ6.js → chunk-WCXUNS7U.js} +82 -21
- package/dist/{chunk-GPPB3JBE.js → chunk-WRBAGUNF.js} +3 -3
- package/dist/{chunk-IXJT6DCX.js → chunk-XIVNBFZS.js} +85 -30
- package/dist/{chunk-UEDMSP56.js → chunk-XPWWI35G.js} +417 -201
- package/dist/chunk-XRZT5WY5.js +47 -0
- package/dist/{chunk-3QSOM6PA.js → chunk-Y3CBHOR6.js} +2 -2
- package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
- package/dist/{chunk-AKB4GYDL.js → chunk-YQWYVTMC.js} +5 -5
- package/dist/{chunk-6I5ILFOF.js → chunk-ZA4VCIGV.js} +3 -3
- package/dist/{chunk-7OBGU7UB.js → chunk-ZDN3Y73Y.js} +12 -18
- package/dist/{chunk-3I5NY75V.js → chunk-ZWPRK62N.js} +8 -5
- package/dist/cli/index.js +41 -39
- package/dist/{clio-IT3G3VQH.js → clio-CMMK4KRR.js} +9 -9
- package/dist/{code-nav-RK6S7F6E.js → code-nav-MDZNQS33.js} +89 -21
- package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
- package/dist/{config-3QZRWZJF.js → config-SVM5P5YI.js} +131 -84
- package/dist/{configure-FL7Y3KJF.js → configure-LE3IK2TJ.js} +28 -26
- package/dist/{context-5HE7ODYK.js → context-2OHRKS42.js} +69 -64
- package/dist/{context-KYQFRVDC.js → context-E3VC7RX5.js} +15 -11
- package/dist/{context-XNHL75JV.js → context-VNCR7KAG.js} +93 -65
- package/dist/{context-clear-N545L53A.js → context-clear-BW4O37TG.js} +64 -60
- package/dist/context-map-COB37XXN.js +505 -0
- package/dist/{context-working-set-QHKXSV2F.js → context-working-set-VDS25HXZ.js} +19 -18
- package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-5AHT53RF.js} +93 -82
- package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
- package/dist/{doctor-ZGPEGHIP.js → doctor-WNNVO6FY.js} +48 -47
- package/dist/{eval-GXLL44RD.js → eval-7G7SGAYO.js} +287 -115
- package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-Y6QRFOH5.js} +4 -4
- package/dist/{evidence-HWLBRH3Q.js → evidence-VD6736FQ.js} +67 -64
- package/dist/{evolve-FTZBMNVW.js → evolve-AL3NGVRL.js} +65 -62
- package/dist/{extensions-VHRBEID7.js → extensions-MOVJ32NM.js} +9 -7
- package/dist/{fleet-CKZHJWZJ.js → fleet-QZHUMAGI.js} +114 -111
- package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-BAYT5FJZ.js} +10 -10
- package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-IREVMRU4.js} +7 -6
- package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-YCTT3HTI.js} +22 -19
- package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-QVJTDAVB.js} +58 -55
- package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-25QAFPK4.js} +4 -4
- package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-5O57AAJ7.js} +26 -23
- package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-CPH2W2T6.js} +59 -56
- package/dist/{fleet-view-WAMJYNDT.js → fleet-view-SWBR3VGQ.js} +58 -55
- package/dist/{init-5XQRBOFV.js → init-J477LKZH.js} +82 -79
- package/dist/{interop-34TVO25M.js → interop-3FCM6XLG.js} +11 -11
- package/dist/{library-3QY6KF57.js → library-QUQEIUG6.js} +30 -27
- package/dist/{memory-L4UTIIIW.js → memory-SGGSEP65.js} +67 -64
- package/dist/{models-ZVX3QOWE.js → models-HEKUAXXK.js} +53 -46
- package/dist/{monitor-CEKVSYTS.js → monitor-HKU57TYQ.js} +63 -60
- package/dist/{orchestrator-77BAP6BC.js → orchestrator-VDFAEFAI.js} +1831 -1057
- package/dist/{panes-7STHOAUJ.js → panes-DN2SSFOH.js} +5 -5
- package/dist/{panes-SHAUIRXY.js → panes-TALGNPZT.js} +29 -14
- package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
- package/dist/reset-EAJFFJVB.js +344 -0
- package/dist/{resources-74GKTLSF.js → resources-OVKSEFVE.js} +29 -20
- package/dist/{run-HBAUJNNZ.js → run-7DP7ZF2J.js} +120 -115
- package/dist/{share-G3APVLVP.js → share-WML67FT3.js} +32 -27
- package/dist/{skills-35HHUKCR.js → skills-SG662R2K.js} +41 -31
- package/dist/{skills-eval-QN4HSHDC.js → skills-eval-VVZEUU46.js} +78 -77
- package/dist/{skills-inventory-J357J34F.js → skills-inventory-I2E23GET.js} +23 -20
- package/dist/{slash-commands-JZZCQA32.js → slash-commands-S7MBJDQK.js} +40 -36
- package/dist/{steer-XAVHJM22.js → steer-2LQOMCPB.js} +3 -3
- package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
- package/dist/{targets-DSM6CY3M.js → targets-4QC3HIEW.js} +54 -54
- package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-TUHIJ6Y2.js} +5 -5
- package/dist/{tools-MKNWVPBH.js → tools-TFGJICCU.js} +10 -10
- package/dist/{trace-ECQ7TIYZ.js → trace-FXMXUZUF.js} +55 -7
- package/dist/uninstall-5PEVOE5B.js +408 -0
- package/dist/upgrade-M4WXY6KN.js +303 -0
- package/dist/{usage-X52N3IDJ.js → usage-N7ZNVLEM.js} +151 -104
- package/dist/{verifiers-EJTVVSMA.js → verifiers-DJTP4XX6.js} +15 -15
- package/dist/{verify-YJL6XET2.js → verify-RWE4PPEK.js} +9 -9
- package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
- package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-C7IQOXSP.js} +89 -86
- package/dist/{with-panes-OBOBFIIR.js → with-panes-4GCGSL7J.js} +53 -257
- package/dist/worker/entry.js +90 -74
- package/docs/README.md +176 -81
- package/docs/{acp.md → architecture/acp.md} +36 -20
- package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
- package/docs/{architecture.md → architecture/architecture.md} +43 -22
- package/docs/{artifact-placement.md → architecture/artifact-placement.md} +27 -23
- package/docs/architecture/artifact-versions.md +90 -0
- package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
- package/docs/{context-engine.md → architecture/context-engine.md} +29 -25
- package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
- package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
- package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
- package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
- package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
- package/docs/{model-catalog.md → architecture/model-catalog.md} +61 -27
- package/docs/{observability.md → architecture/observability.md} +38 -14
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +57 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +99 -25
- package/docs/{safety-model.md → architecture/safety-model.md} +35 -20
- package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
- package/docs/architecture/time-conventions.md +125 -0
- package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
- package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
- package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
- package/docs/{built-in-agents.md → guide/built-in-agents.md} +65 -35
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +66 -61
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -297
- package/docs/guide/configuration-reference.md +1163 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +33 -28
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +81 -17
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +131 -107
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +25 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
- package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
- package/docs/process/development-pipeline.md +152 -0
- package/docs/process/documentation-coverage.md +100 -0
- package/docs/process/documentation-guide.md +187 -0
- package/docs/{eval-runner.md → process/eval-runner.md} +108 -53
- package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
- package/docs/{evolution.md → process/evolution.md} +2 -2
- package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
- package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
- package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
- package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
- package/evals/README.md +2 -2
- package/evals/behavioral-model.yaml +3 -2
- package/package.json +10 -8
- package/skills/README.md +52 -41
- package/skills/coding/ast-grep/SKILL.md +102 -31
- package/skills/coding/ast-grep/evals.md +26 -0
- package/skills/coding/coding-standards/SKILL.md +41 -6
- package/skills/coding/coding-standards/evals.md +23 -0
- package/skills/coding/prototype/SKILL.md +88 -29
- package/skills/coding/prototype/evals.md +19 -0
- package/skills/coding/tdd/SKILL.md +81 -54
- package/skills/coding/tdd/evals.md +20 -0
- package/skills/context/context-handoff/SKILL.md +44 -3
- package/skills/context/context-handoff/evals.md +44 -0
- package/skills/context/context-prime/SKILL.md +46 -16
- package/skills/context/context-prime/evals.md +45 -0
- package/skills/git/branch-closeout/SKILL.md +132 -0
- package/skills/git/branch-closeout/evals.md +133 -0
- package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
- package/skills/git/file-ticket/SKILL.md +78 -64
- package/skills/git/file-ticket/assets/issue-template.md +22 -0
- package/skills/git/file-ticket/evals.md +31 -26
- package/skills/git/file-ticket/references/issue-discovery.md +49 -0
- package/skills/git/fix-issue/SKILL.md +88 -65
- package/skills/git/fix-issue/evals.md +35 -31
- package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
- package/skills/git/resolve-merge-conflicts/SKILL.md +101 -52
- package/skills/git/resolve-merge-conflicts/evals.md +52 -25
- package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
- package/skills/git/ship/SKILL.md +103 -67
- package/skills/git/ship/assets/pr-template.md +21 -0
- package/skills/git/ship/evals.md +44 -28
- package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
- package/skills/git/worktree-create/SKILL.md +80 -50
- package/skills/git/worktree-create/evals.md +40 -33
- package/skills/git/worktree-create/references/worktree-setup.md +62 -66
- package/skills/git/worktree-merge/SKILL.md +112 -65
- package/skills/git/worktree-merge/evals.md +42 -34
- package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
- package/skills/meta/clio-coder-dev/SKILL.md +9 -5
- package/skills/meta/clio-coder-dev/evals.md +3 -2
- package/skills/meta/clio-coder-test/SKILL.md +102 -95
- package/skills/meta/clio-coder-test/evals.md +9 -4
- package/skills/meta/clio-coder-test/references/harness.md +100 -124
- package/skills/meta/clio-coder-test/references/test-map.md +77 -50
- package/skills/meta/credentials/SKILL.md +2 -2
- package/skills/meta/find-skills/SKILL.md +2 -2
- package/skills/meta/herdr/SKILL.md +2 -2
- package/skills/meta/skill-craft/SKILL.md +22 -16
- package/skills/planning/archify/SKILL.md +196 -0
- package/skills/planning/archify/evals.md +65 -0
- package/skills/planning/architecture/SKILL.md +62 -13
- package/skills/planning/architecture/evals.md +65 -0
- package/skills/planning/backlog/SKILL.md +131 -15
- package/skills/planning/backlog/evals.md +142 -0
- package/skills/planning/prd/SKILL.md +47 -7
- package/skills/planning/prd/evals.md +54 -0
- package/skills/planning/product-intent/SKILL.md +58 -3
- package/skills/planning/product-intent/evals.md +70 -0
- package/skills/planning/tech-spec/SKILL.md +54 -3
- package/skills/planning/tech-spec/evals.md +73 -0
- package/skills/registry.yaml +70 -62
- package/skills/remote.yaml +13 -0
- package/skills/research/arxiv-literature/SKILL.md +77 -19
- package/skills/research/arxiv-literature/evals.md +50 -0
- package/skills/research/experiment-protocol/SKILL.md +21 -2
- package/skills/research/experiment-protocol/evals.md +23 -0
- package/skills/research/scientific-debugging/SKILL.md +24 -2
- package/skills/research/scientific-debugging/evals.md +18 -0
- package/skills/research/scientific-modernization/SKILL.md +27 -2
- package/skills/research/scientific-modernization/evals.md +27 -0
- package/skills/skill-marketplace.json +97 -62
- package/skills/workflow/cut-it/SKILL.md +66 -6
- package/skills/workflow/cut-it/evals.md +101 -0
- package/skills/workflow/design-council/SKILL.md +118 -28
- package/skills/workflow/design-council/evals.md +161 -0
- package/skills/workflow/grill-me/SKILL.md +87 -11
- package/skills/workflow/grill-me/evals.md +153 -0
- package/skills/workflow/workflow-distiller/SKILL.md +77 -18
- package/skills/workflow/workflow-distiller/evals.md +118 -0
- package/src/cli/args.ts +2 -2
- package/src/cli/bootstrap-generate.ts +1 -1
- package/src/cli/config-inspect.ts +65 -12
- package/src/cli/configure-interop.ts +105 -13
- package/src/cli/configure-oauth.ts +57 -0
- package/src/cli/configure-onboarding.ts +980 -0
- package/src/cli/configure-target.ts +594 -0
- package/src/cli/configure.ts +1082 -532
- package/src/cli/context-map.ts +114 -0
- package/src/cli/context.ts +4 -0
- package/src/cli/docs.ts +22 -14
- package/src/cli/doctor-naming.ts +5 -5
- package/src/cli/doctor-toolchain.ts +3 -3
- package/src/cli/eval.ts +1 -2
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet.ts +1 -1
- package/src/cli/index.ts +3 -1
- package/src/cli/internal-dispatch.ts +3 -4
- package/src/cli/lifecycle-presenter.ts +436 -0
- package/src/cli/models.ts +10 -2
- package/src/cli/modes/print.ts +5 -1
- package/src/cli/panes.ts +19 -5
- package/src/cli/reset.ts +228 -106
- package/src/cli/run.ts +9 -4
- package/src/cli/select.ts +664 -0
- package/src/cli/share.ts +5 -1
- package/src/cli/skills-eval.ts +3 -3
- package/src/cli/skills.ts +9 -2
- package/src/cli/targets.ts +5 -6
- package/src/cli/trace.ts +55 -4
- package/src/cli/uninstall.ts +233 -165
- package/src/cli/upgrade.ts +204 -149
- package/src/cli/usage.ts +86 -27
- package/src/cli/validate-model.ts +3 -3
- package/src/cli/wiki-generate.ts +1 -1
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +131 -86
- package/src/core/bus-events.ts +51 -6
- package/src/core/config.ts +61 -1
- package/src/core/defaults.ts +7 -4
- package/src/core/dispatch-outcome.ts +16 -0
- package/src/core/external-diagnostic.ts +44 -0
- package/src/core/gateway-routing.ts +157 -0
- package/src/core/guardrails.ts +10 -49
- package/src/core/prompt-hint.ts +9 -0
- package/src/core/safe-exec.ts +17 -2
- package/src/core/skill-activation.ts +89 -2
- package/src/domains/agents/builtins/architect.md +2 -3
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +2 -2
- package/src/domains/agents/builtins/documenter.md +2 -2
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/oracle.md +1 -1
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +2 -2
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/builtins/world-knowledge.md +31 -0
- package/src/domains/agents/catalog.ts +13 -15
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +23 -1
- package/src/domains/agents/result-contract.ts +70 -0
- package/src/domains/config/keybindings.ts +8 -0
- package/src/domains/context/extension.ts +0 -3
- package/src/domains/context/wiki/map-seed.ts +589 -0
- package/src/domains/context/wiki/plan.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -0
- package/src/domains/dispatch/admission.ts +29 -0
- package/src/domains/dispatch/agent-candidates.ts +10 -0
- package/src/domains/dispatch/budget-envelope.ts +86 -1
- package/src/domains/dispatch/capability-match.ts +11 -0
- package/src/domains/dispatch/capacity-lease.ts +17 -0
- package/src/domains/dispatch/contract.ts +11 -1
- package/src/domains/dispatch/extension.ts +237 -49
- package/src/domains/dispatch/host-verification.ts +435 -39
- package/src/domains/dispatch/intent-requirements.ts +10 -0
- package/src/domains/dispatch/intent.ts +18 -1
- package/src/domains/dispatch/path-scope.ts +235 -24
- package/src/domains/dispatch/run-event-journal.ts +4 -15
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/transport.ts +45 -21
- package/src/domains/dispatch/types.ts +58 -3
- package/src/domains/dispatch/worker-model-metadata.ts +38 -0
- package/src/domains/eval/artifacts/store.ts +5 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
- package/src/domains/eval/metrics/token-stream.ts +201 -31
- package/src/domains/eval/metrics/tracked.ts +40 -4
- package/src/domains/eval/runners/clio-run.ts +5 -2
- package/src/domains/eval/schema/suite.ts +28 -0
- package/src/domains/eval/schema/verdict.ts +2 -2
- package/src/domains/eval/store.ts +8 -1
- package/src/domains/eval/suites/resolve.ts +13 -1
- package/src/domains/eval/suites/run.ts +24 -3
- package/src/domains/evidence/trust-status.ts +10 -1
- package/src/domains/extensions/contract.ts +15 -1
- package/src/domains/extensions/discovery.ts +238 -41
- package/src/domains/extensions/extension.ts +105 -6
- package/src/domains/extensions/index.ts +24 -0
- package/src/domains/extensions/integrity.ts +189 -0
- package/src/domains/extensions/manager.ts +17 -1
- package/src/domains/extensions/resource-path.ts +27 -0
- package/src/domains/extensions/resources.ts +18 -38
- package/src/domains/extensions/snapshot-store.ts +39 -0
- package/src/domains/extensions/snapshot.ts +180 -0
- package/src/domains/extensions/state.ts +385 -57
- package/src/domains/extensions/types.ts +118 -1
- package/src/domains/interop/registry.ts +6 -2
- package/src/domains/interop/types.ts +4 -0
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
- package/src/domains/lifecycle/migrations/index.ts +6 -0
- package/src/domains/lifecycle/naming-resources.ts +19 -4
- package/src/domains/lifecycle/naming-yazi.ts +10 -5
- package/src/domains/memory/task-memory-policy.ts +70 -26
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/contract.ts +26 -0
- package/src/domains/middleware/extension.ts +24 -24
- package/src/domains/middleware/hook-receipts.ts +27 -4
- package/src/domains/middleware/hooks-io.ts +65 -32
- package/src/domains/middleware/hooks.ts +64 -0
- package/src/domains/middleware/index.ts +28 -5
- package/src/domains/middleware/marketplace-offer.ts +3 -35
- package/src/domains/middleware/memory-intervention.ts +127 -32
- package/src/domains/middleware/memory-step-endpoint.ts +3 -2
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +28 -0
- package/src/domains/middleware/skills-reminder.ts +31 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +38 -0
- package/src/domains/mux/detect.ts +6 -13
- package/src/domains/mux/index.ts +1 -1
- package/src/domains/mux/operations.ts +44 -5
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/session.ts +53 -4
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/compaction-usage.ts +118 -0
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/cost.ts +1 -1
- package/src/domains/observability/extension.ts +17 -4
- package/src/domains/observability/out-of-turn-usage.ts +52 -21
- package/src/domains/observability/projection.ts +14 -90
- package/src/domains/observability/trace-store.ts +43 -7
- package/src/domains/prompts/compiler.ts +73 -53
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +97 -9
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
- package/src/domains/prompts/fragments/identity/clio.md +6 -12
- package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
- package/src/domains/prompts/fragments/operating/contract.md +7 -15
- package/src/domains/prompts/fragments/operating/delegation.md +32 -34
- package/src/domains/prompts/fragments/operating/skills.md +10 -24
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/contract.ts +4 -1
- package/src/domains/providers/extension.ts +40 -9
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/model-capabilities.ts +9 -0
- package/src/domains/providers/model-discovery.ts +2 -0
- package/src/domains/providers/model-runtime-capabilities.ts +99 -25
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +699 -114
- package/src/domains/providers/runtime-resolution.ts +31 -0
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
- package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +7 -2
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
- package/src/domains/providers/support.ts +11 -5
- package/src/domains/providers/target-model-cache.ts +25 -2
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/cost-provenance.ts +19 -0
- package/src/domains/providers/types/local-model-quirks.ts +85 -37
- package/src/domains/providers/types/runtime-descriptor.ts +20 -1
- package/src/domains/providers/types/target-descriptor.ts +19 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/skills/install.ts +72 -7
- package/src/domains/resources/skills/loader.ts +23 -19
- package/src/domains/resources/skills/marketplace.ts +63 -11
- package/src/domains/safety/autonomy.ts +15 -0
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/index.ts +1 -0
- package/src/domains/safety/loop-detector.ts +7 -4
- package/src/domains/safety/path-policy.ts +1 -1
- package/src/domains/safety/policy-engine.ts +34 -11
- package/src/domains/safety/protected-artifacts.ts +191 -88
- package/src/domains/safety/run-effects.ts +2 -22
- package/src/domains/safety/skill-authority.ts +55 -0
- package/src/domains/session/compaction/compact.ts +72 -22
- package/src/domains/session/entries.ts +6 -0
- package/src/domains/session/task-board.ts +10 -9
- package/src/domains/session/usage.ts +3 -3
- package/src/domains/share/archive.ts +164 -7
- package/src/engine/acp/server.ts +62 -9
- package/src/engine/agent.ts +13 -3
- package/src/engine/ai.ts +26 -8
- package/src/engine/antigravity/subprocess-runtime.ts +386 -120
- package/src/engine/api-registry.ts +3 -0
- package/src/engine/apis/llamacpp-residency.ts +3 -4
- package/src/engine/apis/lmstudio.ts +3 -3
- package/src/engine/apis/ollama-native.ts +6 -6
- package/src/engine/apis/openai-completions.ts +145 -39
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +8 -27
- package/src/engine/external-subprocess.ts +114 -6
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -12
- package/src/engine/worker-runtime.ts +40 -11
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/background-model-metadata.ts +18 -0
- package/src/entry/compaction-prompt.ts +57 -0
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +464 -251
- package/src/entry/task-memory-lifecycle.ts +35 -0
- package/src/interactive/application-controller.ts +2 -1
- package/src/interactive/bus-notices.ts +8 -1
- package/src/interactive/chat-loop-messages.ts +16 -17
- package/src/interactive/chat-loop.ts +75 -3
- package/src/interactive/chat-panel.ts +36 -13
- package/src/interactive/chat-renderer.ts +72 -7
- package/src/interactive/cost-overlay.ts +26 -2
- package/src/interactive/dispatch-board.ts +6 -11
- package/src/interactive/footer/widgets.ts +13 -0
- package/src/interactive/interactive-application.ts +39 -4
- package/src/interactive/interactive-input-runtime.ts +4 -0
- package/src/interactive/interactive-presentation.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +4 -1
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/settings.ts +27 -16
- package/src/interactive/panes-runtime.ts +111 -35
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/worker-entry.ts +32 -0
- package/src/interactive/slash-commands.ts +153 -20
- package/src/interactive/stream-pacing-policy.ts +0 -23
- package/src/interactive/theme/labels.ts +19 -13
- package/src/interactive/turn-context.ts +39 -20
- package/src/interactive/turn-recovery.ts +8 -0
- package/src/interactive/turn-runtime.ts +27 -11
- package/src/interactive/turn-state.ts +7 -0
- package/src/interactive/worker-receipts.ts +1 -0
- package/src/interactive/worker-stream.ts +6 -1
- package/src/interactive/yazi-bridge.ts +60 -6
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +52 -22
- package/src/tools/codewiki/code-nav-surface.ts +6 -0
- package/src/tools/codewiki/code-nav.ts +99 -13
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +59 -21
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-arguments.ts +6 -1
- package/src/tools/dispatch-event-text.ts +10 -0
- package/src/tools/dispatch-plan.ts +49 -4
- package/src/tools/dispatch-run-events.ts +1 -1
- package/src/tools/dispatch-runner.ts +12 -0
- package/src/tools/dispatch-schema.ts +338 -0
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +9 -254
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/observation.ts +4 -5
- package/src/tools/panes-surface.ts +4 -11
- package/src/tools/panes.ts +4 -2
- package/src/tools/policy.ts +15 -2
- package/src/tools/read.ts +5 -6
- package/src/tools/registry.ts +41 -12
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- package/src/tools/worker-evidence.ts +3 -1
- package/src/worker/spec-contract.ts +4 -0
- package/dist/builtins-UJLMOVOV.js +0 -17
- package/dist/chunk-5QIAJV2D.js +0 -48
- package/dist/chunk-JZWT5J3Y.js +0 -814
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-WR6U3OVP.js +0 -45
- package/dist/chunk-Y45G3AXC.js +0 -1558
- package/dist/reset-EOLM7GVE.js +0 -230
- package/dist/uninstall-N34PCTGJ.js +0 -331
- package/dist/upgrade-H7TOM7YL.js +0 -323
- package/docs/artifact-versions.md +0 -67
- package/docs/development-pipeline.md +0 -121
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/time-conventions.md +0 -101
package/src/cli/usage.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from "../core/response-model-id.js";
|
|
9
9
|
import { clioDataDir, clioStateDir } from "../core/xdg.js";
|
|
10
10
|
import { loadMemoryRecordsSync, type MemoryRecord } from "../domains/memory/index.js";
|
|
11
|
+
import { summarizeFailedCompactionUsage } from "../domains/observability/compaction-usage.js";
|
|
11
12
|
import { readEvidenceIndex } from "../domains/observability/evidence-index.js";
|
|
12
13
|
import { type OutOfTurnUsageRow, readOutOfTurnUsageRows } from "../domains/observability/out-of-turn-usage.js";
|
|
13
14
|
import { loadSkills } from "../domains/resources/index.js";
|
|
@@ -119,18 +120,32 @@ interface CallOrigins {
|
|
|
119
120
|
handoffs: number;
|
|
120
121
|
prewarms: number;
|
|
121
122
|
backgroundMemory: number;
|
|
123
|
+
failedCompaction: number;
|
|
122
124
|
}
|
|
123
125
|
|
|
124
126
|
function emptyCallOrigins(): CallOrigins {
|
|
125
|
-
return { rows: 0, sideQuestions: 0, handoffs: 0, prewarms: 0, backgroundMemory: 0 };
|
|
127
|
+
return { rows: 0, sideQuestions: 0, handoffs: 0, prewarms: 0, backgroundMemory: 0, failedCompaction: 0 };
|
|
126
128
|
}
|
|
127
129
|
|
|
128
130
|
function turnsOf(origins: CallOrigins): number {
|
|
129
|
-
return
|
|
131
|
+
return (
|
|
132
|
+
origins.rows -
|
|
133
|
+
origins.sideQuestions -
|
|
134
|
+
origins.handoffs -
|
|
135
|
+
origins.prewarms -
|
|
136
|
+
origins.backgroundMemory -
|
|
137
|
+
origins.failedCompaction
|
|
138
|
+
);
|
|
130
139
|
}
|
|
131
140
|
|
|
132
141
|
function hasLabelledCall(origins: CallOrigins): boolean {
|
|
133
|
-
return
|
|
142
|
+
return (
|
|
143
|
+
origins.sideQuestions > 0 ||
|
|
144
|
+
origins.handoffs > 0 ||
|
|
145
|
+
origins.prewarms > 0 ||
|
|
146
|
+
origins.backgroundMemory > 0 ||
|
|
147
|
+
origins.failedCompaction > 0
|
|
148
|
+
);
|
|
134
149
|
}
|
|
135
150
|
|
|
136
151
|
function addOutOfTurnRow(origins: CallOrigins, row: OutOfTurnUsageRow): void {
|
|
@@ -138,6 +153,7 @@ function addOutOfTurnRow(origins: CallOrigins, row: OutOfTurnUsageRow): void {
|
|
|
138
153
|
if (row.label === "side-question") origins.sideQuestions += 1;
|
|
139
154
|
else if (row.label === "prewarm") origins.prewarms += 1;
|
|
140
155
|
else if (row.label === "background-memory") origins.backgroundMemory += 1;
|
|
156
|
+
else if (row.label === "failed-compaction") origins.failedCompaction += 1;
|
|
141
157
|
else origins.handoffs += 1;
|
|
142
158
|
}
|
|
143
159
|
|
|
@@ -148,16 +164,32 @@ function outOfTurnUsageCall(row: OutOfTurnUsageRow): LedgerUsageCall {
|
|
|
148
164
|
attributedModelId: row.attributedModelId,
|
|
149
165
|
requestedModelId: row.attributedModelId,
|
|
150
166
|
responseModelIdObservation: { state: "not-observed" },
|
|
151
|
-
input: row.usage.input,
|
|
152
|
-
output: row.usage.output,
|
|
153
|
-
cacheRead: row.usage.cacheRead,
|
|
154
|
-
cacheWrite: row.usage.cacheWrite,
|
|
155
|
-
reasoningTokens: row.usage.reasoning,
|
|
156
|
-
totalTokens: row.usage.totalTokens,
|
|
157
|
-
costUsd: row.usage.costUsd,
|
|
167
|
+
input: row.usage.input ?? 0,
|
|
168
|
+
output: row.usage.output ?? 0,
|
|
169
|
+
cacheRead: row.usage.cacheRead ?? 0,
|
|
170
|
+
cacheWrite: row.usage.cacheWrite ?? 0,
|
|
171
|
+
reasoningTokens: row.usage.reasoning ?? 0,
|
|
172
|
+
totalTokens: row.usage.totalTokens ?? 0,
|
|
173
|
+
costUsd: row.usage.costUsd ?? 0,
|
|
158
174
|
};
|
|
159
175
|
}
|
|
160
176
|
|
|
177
|
+
/** Existing numeric accumulators sum known contributions; the report retains missing coverage. */
|
|
178
|
+
function reportedUsageTotals(totals: UsageTotals, rows: ReadonlyArray<OutOfTurnUsageRow>) {
|
|
179
|
+
const failedCompaction = summarizeFailedCompactionUsage(rows);
|
|
180
|
+
if (failedCompaction.calls === 0) return totals;
|
|
181
|
+
const reported: Record<string, unknown> = { ...totals, knownSubtotals: true, failedCompaction };
|
|
182
|
+
for (const [field, missing] of Object.entries(failedCompaction.unobservedUsageCalls)) {
|
|
183
|
+
const key = field === "reasoning" ? "reasoningTokens" : field;
|
|
184
|
+
if (missing > 0 && reported[key] === 0) reported[key] = null;
|
|
185
|
+
}
|
|
186
|
+
return reported;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function usageAmount(value: unknown): string {
|
|
190
|
+
return typeof value === "number" ? String(value) : "unknown";
|
|
191
|
+
}
|
|
192
|
+
|
|
161
193
|
function addUsageCall(totals: UsageTotals, call: LedgerUsageCall): void {
|
|
162
194
|
totals.apiCalls += call.apiCalls ?? 1;
|
|
163
195
|
totals.input += call.input;
|
|
@@ -442,6 +474,8 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
442
474
|
// session store is gone can still have recorded out-of-turn spend, and
|
|
443
475
|
// dropping those rows would report money that was spent as nothing at all.
|
|
444
476
|
const usageMeasurable = presence.sessionsPresent || outOfTurnRows.length > 0;
|
|
477
|
+
const reportedTotals = reportedUsageTotals(usageTotals, outOfTurnRows);
|
|
478
|
+
const failedCompaction = summarizeFailedCompactionUsage(outOfTurnRows);
|
|
445
479
|
const usageRows = [...usageByModel.values()].sort(
|
|
446
480
|
(a, b) => b.totals.totalTokens - a.totals.totalTokens || a.providerId.localeCompare(b.providerId),
|
|
447
481
|
);
|
|
@@ -533,7 +567,7 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
533
567
|
emit({
|
|
534
568
|
kind: "fact",
|
|
535
569
|
fact: "tokens",
|
|
536
|
-
...
|
|
570
|
+
...reportedTotals,
|
|
537
571
|
...(hasLabelledCall(callOrigins)
|
|
538
572
|
? {
|
|
539
573
|
turns: turnsOf(callOrigins),
|
|
@@ -541,6 +575,7 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
541
575
|
handoffs: callOrigins.handoffs,
|
|
542
576
|
prewarms: callOrigins.prewarms,
|
|
543
577
|
backgroundMemorySteps: callOrigins.backgroundMemory,
|
|
578
|
+
...(callOrigins.failedCompaction > 0 ? { failedCompactionCalls: callOrigins.failedCompaction } : {}),
|
|
544
579
|
}
|
|
545
580
|
: {}),
|
|
546
581
|
});
|
|
@@ -552,7 +587,12 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
552
587
|
attributedModelId: row.attributedModelId,
|
|
553
588
|
requestedModelIds: [...row.requestedModelIds].sort(),
|
|
554
589
|
responseModelIdObservationCounts: row.responseModelIdObservationCounts,
|
|
555
|
-
...
|
|
590
|
+
...reportedUsageTotals(
|
|
591
|
+
row.totals,
|
|
592
|
+
outOfTurnRows.filter(
|
|
593
|
+
(call) => call.target === row.providerId && call.attributedModelId === row.attributedModelId,
|
|
594
|
+
),
|
|
595
|
+
),
|
|
556
596
|
});
|
|
557
597
|
}
|
|
558
598
|
for (const session of cacheSessions) {
|
|
@@ -615,7 +655,7 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
615
655
|
out(` audited tool calls in window: ${auditToolCalls.length} (${auditBlocked.length} blocked/denied)`);
|
|
616
656
|
if (usageMeasurable) {
|
|
617
657
|
out(
|
|
618
|
-
` tokens in window: ${
|
|
658
|
+
` tokens in window: ${usageAmount(reportedTotals.totalTokens)} over ${usageTotals.apiCalls} model calls (input ${usageAmount(reportedTotals.input)}, output ${usageAmount(reportedTotals.output)}, cache read ${usageAmount(reportedTotals.cacheRead)}, cache write ${usageAmount(reportedTotals.cacheWrite)}, reasoning ${usageAmount(reportedTotals.reasoningTokens)})`,
|
|
619
659
|
);
|
|
620
660
|
if (hasLabelledCall(callOrigins)) {
|
|
621
661
|
// Only printed when a labelled call is in the window. Over an archive
|
|
@@ -629,7 +669,18 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
629
669
|
out(` background memory steps in window: ${callOrigins.backgroundMemory}`);
|
|
630
670
|
}
|
|
631
671
|
}
|
|
632
|
-
|
|
672
|
+
if (failedCompaction.calls > 0) {
|
|
673
|
+
out(
|
|
674
|
+
` failed-compaction streams: ${failedCompaction.calls} (${failedCompaction.erroredCalls} errored, ${failedCompaction.abortedCalls} aborted, ${failedCompaction.successfulCalls} completed before the attempt failed)`,
|
|
675
|
+
);
|
|
676
|
+
out(" usage figures are known subtotals; missing compaction usage is not zero or a complete spending bound");
|
|
677
|
+
out(
|
|
678
|
+
` errored compaction known cost: ${failedCompaction.erroredKnownUsage.costUsd === null ? "unknown" : `$${failedCompaction.erroredKnownUsage.costUsd.toFixed(4)}`}`,
|
|
679
|
+
);
|
|
680
|
+
}
|
|
681
|
+
out(
|
|
682
|
+
` ${failedCompaction.calls > 0 ? "known reported/estimated" : "provider-reported"} cost in window: ${typeof reportedTotals.costUsd === "number" ? `$${reportedTotals.costUsd.toFixed(4)}` : "unknown"}`,
|
|
683
|
+
);
|
|
633
684
|
}
|
|
634
685
|
if (usageRows.length > 0) {
|
|
635
686
|
out("");
|
|
@@ -650,19 +701,27 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
650
701
|
"tokens",
|
|
651
702
|
"cost",
|
|
652
703
|
],
|
|
653
|
-
...usageRows.map((row) =>
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
704
|
+
...usageRows.map((row) => {
|
|
705
|
+
const reported = reportedUsageTotals(
|
|
706
|
+
row.totals,
|
|
707
|
+
outOfTurnRows.filter(
|
|
708
|
+
(call) => call.target === row.providerId && call.attributedModelId === row.attributedModelId,
|
|
709
|
+
),
|
|
710
|
+
);
|
|
711
|
+
return [
|
|
712
|
+
row.providerId,
|
|
713
|
+
row.attributedModelId,
|
|
714
|
+
[...row.requestedModelIds].sort().join(","),
|
|
715
|
+
responseModelIdObservationCountsLabel(row.responseModelIdObservationCounts),
|
|
716
|
+
String(row.totals.apiCalls),
|
|
717
|
+
usageAmount(reported.input),
|
|
718
|
+
usageAmount(reported.output),
|
|
719
|
+
usageAmount(reported.cacheRead),
|
|
720
|
+
usageAmount(reported.reasoningTokens),
|
|
721
|
+
usageAmount(reported.totalTokens),
|
|
722
|
+
typeof reported.costUsd === "number" ? `$${reported.costUsd.toFixed(4)}` : "unknown",
|
|
723
|
+
];
|
|
724
|
+
}),
|
|
666
725
|
]),
|
|
667
726
|
),
|
|
668
727
|
);
|
|
@@ -15,9 +15,8 @@ export interface ValidateModelInput {
|
|
|
15
15
|
modelId: string;
|
|
16
16
|
knownModels: ReadonlyArray<string>;
|
|
17
17
|
/**
|
|
18
|
-
* The live list, when one was fetched.
|
|
19
|
-
*
|
|
20
|
-
* and the probe becomes the authority where there is nothing else.
|
|
18
|
+
* The live list, when one was fetched. Callers provide it only when that
|
|
19
|
+
* runtime declares live discovery authoritative for the concrete target.
|
|
21
20
|
*/
|
|
22
21
|
live?: LiveModelInventory | undefined;
|
|
23
22
|
force: boolean;
|
|
@@ -50,6 +49,7 @@ function formatUnadvertisedModelReason(modelId: string, live: LiveModelInventory
|
|
|
50
49
|
|
|
51
50
|
export function validateModelChoice(input: ValidateModelInput): ValidateModelResult {
|
|
52
51
|
const { runtimeId, modelId, knownModels, live, force } = input;
|
|
52
|
+
if (live !== undefined) return validateAgainstLive(modelId, live, force);
|
|
53
53
|
if (knownModels.length === 0) return validateAgainstLive(modelId, live, force);
|
|
54
54
|
if (knownModels.includes(modelId)) return { ok: true };
|
|
55
55
|
if (force) {
|
package/src/cli/wiki-generate.ts
CHANGED
|
@@ -236,7 +236,7 @@ async function runWikiDispatch(input: {
|
|
|
236
236
|
} catch (err) {
|
|
237
237
|
return { ok: false, detail: err instanceof Error ? err.message : String(err) };
|
|
238
238
|
}
|
|
239
|
-
const deadline = armInternalDispatchDeadline(input.dispatch, handle.runId, input.label,
|
|
239
|
+
const deadline = armInternalDispatchDeadline(input.dispatch, handle.runId, input.label, input.deadlineMs);
|
|
240
240
|
let lastHeartbeatAt = startedAtClock;
|
|
241
241
|
try {
|
|
242
242
|
const summary = await drainDispatchEvents(handle.events, (tools) => {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* be checking a path the tool never writes. One artifact per kind is therefore
|
|
16
16
|
* the contract; keep several by passing explicit paths.
|
|
17
17
|
*
|
|
18
|
-
* See docs/artifact-placement.md for the full taxonomy.
|
|
18
|
+
* See docs/architecture/artifact-placement.md for the full taxonomy.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
/** Project-local directory holding everything Clio generates for one repo. */
|
package/src/core/bash-exec.ts
CHANGED
|
@@ -18,7 +18,7 @@ export { clampTimerDelayMs as clampTimeoutMs } from "./timers.js";
|
|
|
18
18
|
// (failing assertion, compiler error, exit summary) must survive.
|
|
19
19
|
export const BASH_HARD_CAP_BYTES = 16 * 1024 * 1024;
|
|
20
20
|
|
|
21
|
-
const CLIO_CONTROL_ENV_KEYS = ["CLIO_CODER_INTERACTIVE"
|
|
21
|
+
const CLIO_CONTROL_ENV_KEYS = ["CLIO_CODER_INTERACTIVE"] as const;
|
|
22
22
|
|
|
23
23
|
export interface BashCommandResult {
|
|
24
24
|
error: NodeJS.ErrnoException | null;
|
|
@@ -52,6 +52,129 @@ export interface RunBashCommandOptions {
|
|
|
52
52
|
|
|
53
53
|
const BASH_UPDATE_THROTTLE_MS = 100;
|
|
54
54
|
|
|
55
|
+
export interface BashProgressScheduler {
|
|
56
|
+
now(): number;
|
|
57
|
+
setTimeout(callback: () => void, delayMs: number): unknown;
|
|
58
|
+
clearTimeout(timer: unknown): void;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface BashOutputProgressController {
|
|
62
|
+
/** Emit the initial empty cumulative snapshot, when a callback is configured. */
|
|
63
|
+
start(): void;
|
|
64
|
+
/** Accept one stream chunk. Returns true only when this chunk reaches the hard cap. */
|
|
65
|
+
append(target: "stdout" | "stderr", chunk: Buffer): boolean;
|
|
66
|
+
/** Seal output, cancel progress work, emit the final snapshot, and return the result fields. */
|
|
67
|
+
settle(): Pick<BashCommandResult, "stdout" | "stderr" | "outputBytes" | "outputCapped">;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const SYSTEM_PROGRESS_SCHEDULER: BashProgressScheduler = {
|
|
71
|
+
now: Date.now,
|
|
72
|
+
setTimeout: (callback, delayMs) => setTimeout(callback, delayMs),
|
|
73
|
+
clearTimeout: (timer) => clearTimeout(timer as ReturnType<typeof setTimeout>),
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Cumulative stdout/stderr fold shared by the child stream handlers and a
|
|
78
|
+
* deterministic contract-test seam. Settlement is a phase, not just a final
|
|
79
|
+
* boolean: once it starts, re-entrant or queued stream work is rejected while
|
|
80
|
+
* the one final advisory snapshot is still allowed to publish.
|
|
81
|
+
*/
|
|
82
|
+
export function createBashOutputProgressController(
|
|
83
|
+
onUpdate?: (progress: BashCommandProgress) => void,
|
|
84
|
+
scheduler: BashProgressScheduler = SYSTEM_PROGRESS_SCHEDULER,
|
|
85
|
+
): BashOutputProgressController {
|
|
86
|
+
let phase: "active" | "settling" | "settled" = "active";
|
|
87
|
+
let stdout = "";
|
|
88
|
+
let stderr = "";
|
|
89
|
+
const stdoutDecoder = new StringDecoder("utf8");
|
|
90
|
+
const stderrDecoder = new StringDecoder("utf8");
|
|
91
|
+
let decodersFinished = false;
|
|
92
|
+
let outputBytes = 0;
|
|
93
|
+
let outputCapped = false;
|
|
94
|
+
let updateTimer: unknown = null;
|
|
95
|
+
let updateDirty = false;
|
|
96
|
+
let lastUpdateAt = 0;
|
|
97
|
+
|
|
98
|
+
const snapshot = (): BashCommandProgress => ({ stdout, stderr, outputBytes });
|
|
99
|
+
|
|
100
|
+
const finishDecoders = (): void => {
|
|
101
|
+
if (decodersFinished) return;
|
|
102
|
+
decodersFinished = true;
|
|
103
|
+
// A hard byte cap may bisect a multibyte code point. Discard the
|
|
104
|
+
// decoder's incomplete suffix instead of manufacturing U+FFFD.
|
|
105
|
+
if (outputCapped) return;
|
|
106
|
+
stdout += stdoutDecoder.end();
|
|
107
|
+
stderr += stderrDecoder.end();
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const emitUpdate = (final = false): void => {
|
|
111
|
+
if (onUpdate === undefined || !updateDirty) return;
|
|
112
|
+
if (phase !== "active" && !(final && phase === "settling")) return;
|
|
113
|
+
updateDirty = false;
|
|
114
|
+
lastUpdateAt = scheduler.now();
|
|
115
|
+
try {
|
|
116
|
+
onUpdate(snapshot());
|
|
117
|
+
} catch {
|
|
118
|
+
// Rendering progress is advisory and must never change command execution.
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const clearUpdateTimer = (): void => {
|
|
123
|
+
if (updateTimer === null) return;
|
|
124
|
+
scheduler.clearTimeout(updateTimer);
|
|
125
|
+
updateTimer = null;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const scheduleUpdate = (): void => {
|
|
129
|
+
if (onUpdate === undefined || phase !== "active") return;
|
|
130
|
+
updateDirty = true;
|
|
131
|
+
const delay = BASH_UPDATE_THROTTLE_MS - (scheduler.now() - lastUpdateAt);
|
|
132
|
+
if (delay <= 0) {
|
|
133
|
+
clearUpdateTimer();
|
|
134
|
+
emitUpdate();
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
updateTimer ??= scheduler.setTimeout(() => {
|
|
138
|
+
updateTimer = null;
|
|
139
|
+
// A timer already queued by the event loop may still invoke its callback
|
|
140
|
+
// after clearTimeout. The phase check makes that callback inert.
|
|
141
|
+
emitUpdate();
|
|
142
|
+
}, delay);
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
return {
|
|
146
|
+
start(): void {
|
|
147
|
+
if (phase !== "active" || onUpdate === undefined) return;
|
|
148
|
+
updateDirty = true;
|
|
149
|
+
emitUpdate();
|
|
150
|
+
},
|
|
151
|
+
append(target, chunk): boolean {
|
|
152
|
+
if (phase !== "active" || outputCapped) return false;
|
|
153
|
+
const remaining = BASH_HARD_CAP_BYTES - outputBytes;
|
|
154
|
+
const accepted = chunk.byteLength <= remaining ? chunk : chunk.subarray(0, Math.max(0, remaining));
|
|
155
|
+
outputBytes += accepted.byteLength;
|
|
156
|
+
if (accepted.byteLength > 0) {
|
|
157
|
+
const decoded = target === "stdout" ? stdoutDecoder.write(accepted) : stderrDecoder.write(accepted);
|
|
158
|
+
if (target === "stdout") stdout += decoded;
|
|
159
|
+
else stderr += decoded;
|
|
160
|
+
}
|
|
161
|
+
if (accepted.byteLength < chunk.byteLength) outputCapped = true;
|
|
162
|
+
scheduleUpdate();
|
|
163
|
+
return outputCapped;
|
|
164
|
+
},
|
|
165
|
+
settle() {
|
|
166
|
+
if (phase === "settled") return { ...snapshot(), outputCapped };
|
|
167
|
+
if (phase === "settling") return { ...snapshot(), outputCapped };
|
|
168
|
+
phase = "settling";
|
|
169
|
+
clearUpdateTimer();
|
|
170
|
+
finishDecoders();
|
|
171
|
+
emitUpdate(true);
|
|
172
|
+
phase = "settled";
|
|
173
|
+
return { ...snapshot(), outputCapped };
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
|
|
55
178
|
function buildToolEnv(): NodeJS.ProcessEnv {
|
|
56
179
|
const env = { ...process.env };
|
|
57
180
|
env.AI_AGENT = AI_AGENT_NAME;
|
|
@@ -152,16 +275,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
152
275
|
let timeoutId: ReturnType<typeof setTimeout> | null = null;
|
|
153
276
|
let killGraceTimer: ReturnType<typeof setTimeout> | null = null;
|
|
154
277
|
let killSent = false;
|
|
155
|
-
|
|
156
|
-
let stderr = "";
|
|
157
|
-
const stdoutDecoder = new StringDecoder("utf8");
|
|
158
|
-
const stderrDecoder = new StringDecoder("utf8");
|
|
159
|
-
let decodersFinished = false;
|
|
160
|
-
let outputBytes = 0;
|
|
161
|
-
let outputCapped = false;
|
|
162
|
-
let updateTimer: ReturnType<typeof setTimeout> | null = null;
|
|
163
|
-
let updateDirty = false;
|
|
164
|
-
let lastUpdateAt = 0;
|
|
278
|
+
const output = createBashOutputProgressController(options.onUpdate);
|
|
165
279
|
|
|
166
280
|
const child = spawn("/bin/bash", [plan.mode, command], {
|
|
167
281
|
...(options.cwd === undefined ? {} : { cwd: options.cwd }),
|
|
@@ -170,53 +284,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
170
284
|
stdio: ["ignore", "pipe", "pipe"],
|
|
171
285
|
});
|
|
172
286
|
|
|
173
|
-
|
|
174
|
-
if (decodersFinished) return;
|
|
175
|
-
decodersFinished = true;
|
|
176
|
-
// A hard byte cap may bisect a multibyte code point. Discard the
|
|
177
|
-
// decoder's incomplete suffix instead of manufacturing U+FFFD.
|
|
178
|
-
if (outputCapped) return;
|
|
179
|
-
stdout += stdoutDecoder.end();
|
|
180
|
-
stderr += stderrDecoder.end();
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
const emitUpdate = (): void => {
|
|
184
|
-
if (options.onUpdate === undefined || !updateDirty) return;
|
|
185
|
-
updateDirty = false;
|
|
186
|
-
lastUpdateAt = Date.now();
|
|
187
|
-
try {
|
|
188
|
-
options.onUpdate({ stdout, stderr, outputBytes: Math.min(outputBytes, BASH_HARD_CAP_BYTES) });
|
|
189
|
-
} catch {
|
|
190
|
-
// Rendering progress is advisory and must never change command execution.
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
const clearUpdateTimer = (): void => {
|
|
194
|
-
if (updateTimer === null) return;
|
|
195
|
-
clearTimeout(updateTimer);
|
|
196
|
-
updateTimer = null;
|
|
197
|
-
};
|
|
198
|
-
const scheduleUpdate = (): void => {
|
|
199
|
-
if (options.onUpdate === undefined) return;
|
|
200
|
-
updateDirty = true;
|
|
201
|
-
const delay = BASH_UPDATE_THROTTLE_MS - (Date.now() - lastUpdateAt);
|
|
202
|
-
if (delay <= 0) {
|
|
203
|
-
clearUpdateTimer();
|
|
204
|
-
emitUpdate();
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
updateTimer ??= setTimeout(() => {
|
|
208
|
-
updateTimer = null;
|
|
209
|
-
emitUpdate();
|
|
210
|
-
}, delay);
|
|
211
|
-
};
|
|
212
|
-
const finishUpdates = (): void => {
|
|
213
|
-
clearUpdateTimer();
|
|
214
|
-
emitUpdate();
|
|
215
|
-
};
|
|
216
|
-
if (options.onUpdate !== undefined) {
|
|
217
|
-
updateDirty = true;
|
|
218
|
-
emitUpdate();
|
|
219
|
-
}
|
|
287
|
+
output.start();
|
|
220
288
|
|
|
221
289
|
const clearKillGraceTimer = (): void => {
|
|
222
290
|
if (!killGraceTimer) return;
|
|
@@ -265,22 +333,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
265
333
|
}
|
|
266
334
|
|
|
267
335
|
const appendChunk = (target: "stdout" | "stderr", chunk: Buffer): void => {
|
|
268
|
-
if (
|
|
269
|
-
const remaining = BASH_HARD_CAP_BYTES - outputBytes;
|
|
270
|
-
const accepted = chunk.byteLength <= remaining ? chunk : chunk.subarray(0, Math.max(0, remaining));
|
|
271
|
-
outputBytes += accepted.byteLength;
|
|
272
|
-
if (accepted.byteLength > 0) {
|
|
273
|
-
const decoded = target === "stdout" ? stdoutDecoder.write(accepted) : stderrDecoder.write(accepted);
|
|
274
|
-
if (target === "stdout") stdout += decoded;
|
|
275
|
-
else stderr += decoded;
|
|
276
|
-
}
|
|
277
|
-
if (accepted.byteLength < chunk.byteLength) {
|
|
278
|
-
outputCapped = true;
|
|
279
|
-
scheduleUpdate();
|
|
280
|
-
killChild();
|
|
281
|
-
return;
|
|
282
|
-
}
|
|
283
|
-
scheduleUpdate();
|
|
336
|
+
if (output.append(target, chunk)) killChild();
|
|
284
337
|
};
|
|
285
338
|
|
|
286
339
|
child.stdout?.on("data", (chunk: Buffer) => appendChunk("stdout", chunk));
|
|
@@ -290,19 +343,15 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
290
343
|
settled = true;
|
|
291
344
|
if (timeoutId) clearTimeout(timeoutId);
|
|
292
345
|
clearKillGraceTimer();
|
|
293
|
-
|
|
294
|
-
finishUpdates();
|
|
346
|
+
const finalOutput = output.settle();
|
|
295
347
|
options.signal?.removeEventListener("abort", onAbort);
|
|
296
348
|
resolve({
|
|
297
349
|
error: error as NodeJS.ErrnoException,
|
|
298
|
-
|
|
299
|
-
stderr,
|
|
350
|
+
...finalOutput,
|
|
300
351
|
exitCode: null,
|
|
301
352
|
signal: null,
|
|
302
353
|
aborted,
|
|
303
354
|
timedOut,
|
|
304
|
-
outputCapped,
|
|
305
|
-
outputBytes,
|
|
306
355
|
});
|
|
307
356
|
});
|
|
308
357
|
child.on("close", (code, signalName) => {
|
|
@@ -310,8 +359,7 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
310
359
|
settled = true;
|
|
311
360
|
if (timeoutId) clearTimeout(timeoutId);
|
|
312
361
|
clearKillGraceTimer();
|
|
313
|
-
|
|
314
|
-
finishUpdates();
|
|
362
|
+
const finalOutput = output.settle();
|
|
315
363
|
options.signal?.removeEventListener("abort", onAbort);
|
|
316
364
|
const error =
|
|
317
365
|
code === 0 && signalName === null
|
|
@@ -324,14 +372,11 @@ export async function runBashCommand(command: string, options: RunBashCommandOpt
|
|
|
324
372
|
} as NodeJS.ErrnoException);
|
|
325
373
|
resolve({
|
|
326
374
|
error,
|
|
327
|
-
|
|
328
|
-
stderr,
|
|
375
|
+
...finalOutput,
|
|
329
376
|
exitCode: code,
|
|
330
377
|
signal: signalName,
|
|
331
378
|
aborted,
|
|
332
379
|
timedOut,
|
|
333
|
-
outputCapped,
|
|
334
|
-
outputBytes,
|
|
335
380
|
});
|
|
336
381
|
});
|
|
337
382
|
});
|
package/src/core/bus-events.ts
CHANGED
|
@@ -24,6 +24,7 @@ import type {
|
|
|
24
24
|
ToolActivitySummary,
|
|
25
25
|
} from "../domains/dispatch/types.js";
|
|
26
26
|
import type { MiddlewareHook } from "../domains/middleware/types.js";
|
|
27
|
+
import type { ObservabilityRunEvidence } from "../domains/observability/contract.js";
|
|
27
28
|
import type { TargetStatus } from "../domains/providers/contract.js";
|
|
28
29
|
import type { CostProvenance } from "../domains/providers/index.js";
|
|
29
30
|
import type { ClioSettings } from "./config.js";
|
|
@@ -58,9 +59,11 @@ export const BusChannels = {
|
|
|
58
59
|
DispatchProgress: "dispatch.progress",
|
|
59
60
|
DispatchCompleted: "dispatch.completed",
|
|
60
61
|
DispatchFailed: "dispatch.failed",
|
|
62
|
+
AccountabilityEvidenceReady: "accountability.evidenceReady",
|
|
61
63
|
CompactionBegin: "compaction.begin",
|
|
62
64
|
CompactionEnd: "compaction.end",
|
|
63
65
|
MiddlewareHookFailed: "middleware.hookFailed",
|
|
66
|
+
ExtensionsReloaded: "extensions.reloaded",
|
|
64
67
|
ContextActivity: "context.activity",
|
|
65
68
|
ContextWarning: "context.warning",
|
|
66
69
|
ContextPruned: "context.pruned",
|
|
@@ -628,8 +631,8 @@ export interface DispatchTerminalStats {
|
|
|
628
631
|
exitCode: number;
|
|
629
632
|
/** Honest activity record aggregated from the run's tool telemetry; null when the receipt predates it. */
|
|
630
633
|
toolActivity: ToolActivitySummary | null;
|
|
631
|
-
/** Host-run declared verification status when the request included checks. */
|
|
632
|
-
hostVerification?: "verified" | "rejected" | "skipped";
|
|
634
|
+
/** Host-run declared verification status when the request included checks; `not_implicated` is a batch member the failure was charged away from. */
|
|
635
|
+
hostVerification?: "verified" | "rejected" | "skipped" | "not_implicated";
|
|
633
636
|
}
|
|
634
637
|
|
|
635
638
|
/** Published on {@link BusChannels.DispatchCompleted} when a run finalizes as succeeded. */
|
|
@@ -667,6 +670,24 @@ export interface DispatchFailedPayload extends DispatchRunIdentity, Partial<Disp
|
|
|
667
670
|
skillActivations?: ReadonlyArray<SkillActivation>;
|
|
668
671
|
}
|
|
669
672
|
|
|
673
|
+
// ---------------------------------------------------------------------------
|
|
674
|
+
// Accountability
|
|
675
|
+
// ---------------------------------------------------------------------------
|
|
676
|
+
|
|
677
|
+
/**
|
|
678
|
+
* Published on {@link BusChannels.AccountabilityEvidenceReady} by the
|
|
679
|
+
* observability extension once a finalized run's evidence bundle and its
|
|
680
|
+
* sidecar index row have landed. The evidence fields are exactly
|
|
681
|
+
* {@link ObservabilityRunEvidence}, the shape the projection already attaches
|
|
682
|
+
* to the run summary, so the bus and the snapshot cannot describe the same
|
|
683
|
+
* moment two ways. A failed build publishes nothing here: the projection's
|
|
684
|
+
* notice is the failure surface, and a client that never receives this event
|
|
685
|
+
* has learned only that no bundle is ready, which is the truth.
|
|
686
|
+
*/
|
|
687
|
+
export interface AccountabilityEvidenceReadyPayload extends ObservabilityRunEvidence {
|
|
688
|
+
runId: string;
|
|
689
|
+
}
|
|
690
|
+
|
|
670
691
|
// ---------------------------------------------------------------------------
|
|
671
692
|
// Compaction
|
|
672
693
|
// ---------------------------------------------------------------------------
|
|
@@ -677,6 +698,26 @@ export interface CompactionPayload {
|
|
|
677
698
|
at: number;
|
|
678
699
|
}
|
|
679
700
|
|
|
701
|
+
// ---------------------------------------------------------------------------
|
|
702
|
+
// Extensions
|
|
703
|
+
// ---------------------------------------------------------------------------
|
|
704
|
+
|
|
705
|
+
/**
|
|
706
|
+
* Published on {@link BusChannels.ExtensionsReloaded} by the composition
|
|
707
|
+
* root after a new extension generation and its user-hook registrations
|
|
708
|
+
* have both been committed. Consumers that cache extension-sourced data
|
|
709
|
+
* (prompt fragments, agent recipes, the session prompt) refresh on
|
|
710
|
+
* `changed`; an unchanged generation carries the previous digest and needs
|
|
711
|
+
* no work. Never published between the two commits.
|
|
712
|
+
*/
|
|
713
|
+
export interface ExtensionsReloadedPayload {
|
|
714
|
+
generation: number;
|
|
715
|
+
previousGeneration: number;
|
|
716
|
+
changed: boolean;
|
|
717
|
+
/** Content identity of the committed snapshot. */
|
|
718
|
+
digest: string;
|
|
719
|
+
}
|
|
720
|
+
|
|
680
721
|
// ---------------------------------------------------------------------------
|
|
681
722
|
// Middleware
|
|
682
723
|
// ---------------------------------------------------------------------------
|
|
@@ -685,15 +726,17 @@ export interface CompactionPayload {
|
|
|
685
726
|
* Published on {@link BusChannels.MiddlewareHookFailed} when a middleware hook
|
|
686
727
|
* registration misbehaves: `hook_failed` for a thrown evaluate (its effects
|
|
687
728
|
* are discarded and the turn proceeds), `budget_exceeded` for a soft
|
|
688
|
-
* wall-time overrun (effects still apply)
|
|
689
|
-
*
|
|
729
|
+
* wall-time overrun (effects still apply), `registration_conflict` when an
|
|
730
|
+
* owned registration set (user hooks) offered an id a builtin or host
|
|
731
|
+
* registration holds, or a host registration evicted an owned one.
|
|
732
|
+
* Diagnostics only; nothing subscribing here may decide anything.
|
|
690
733
|
*/
|
|
691
734
|
export interface MiddlewareHookFailedPayload {
|
|
692
|
-
kind: "hook_failed" | "budget_exceeded";
|
|
735
|
+
kind: "hook_failed" | "budget_exceeded" | "registration_conflict";
|
|
693
736
|
registrationId: string;
|
|
694
737
|
hook: MiddlewareHook;
|
|
695
738
|
at: number;
|
|
696
|
-
/** Error text
|
|
739
|
+
/** Error text for hook_failed; one formatted line for registration_conflict. */
|
|
697
740
|
message?: string | undefined;
|
|
698
741
|
/** Measured and allowed wall time in ms; budget_exceeded only. */
|
|
699
742
|
elapsedMs?: number | undefined;
|
|
@@ -798,9 +841,11 @@ export type BusPayloadMap = {
|
|
|
798
841
|
[BusChannels.DispatchProgress]: DispatchProgressPayload;
|
|
799
842
|
[BusChannels.DispatchCompleted]: DispatchCompletedPayload;
|
|
800
843
|
[BusChannels.DispatchFailed]: DispatchFailedPayload;
|
|
844
|
+
[BusChannels.AccountabilityEvidenceReady]: AccountabilityEvidenceReadyPayload;
|
|
801
845
|
[BusChannels.CompactionBegin]: CompactionPayload;
|
|
802
846
|
[BusChannels.CompactionEnd]: CompactionPayload;
|
|
803
847
|
[BusChannels.MiddlewareHookFailed]: MiddlewareHookFailedPayload;
|
|
848
|
+
[BusChannels.ExtensionsReloaded]: ExtensionsReloadedPayload;
|
|
804
849
|
[BusChannels.ContextActivity]: ContextActivityPayload;
|
|
805
850
|
[BusChannels.ContextWarning]: ContextWarningPayload;
|
|
806
851
|
[BusChannels.ContextPruned]: ContextPrunedPayload;
|