@iowarp/clio-coder 0.3.8 → 0.4.0
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 +102 -0
- package/NOTICE +33 -0
- package/README.md +12 -3
- package/dist/{acp-U67UHUK2.js → acp-G5WJBNCT.js} +13 -12
- package/dist/{agents-YU6SGALZ.js → agents-FMV2Q5G4.js} +41 -36
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-5ZPJOIVG.js → auth-3IDSJEIK.js} +18 -18
- package/dist/{builtins-C6JMZVV6.js → builtins-XCZWXSC7.js} +5 -5
- package/dist/{chunk-IFBNV6H6.js → chunk-2ANTL7MR.js} +3 -3
- package/dist/{chunk-5FR74PWO.js → chunk-2JDWVJND.js} +2 -2
- package/dist/{chunk-XWSF374K.js → chunk-2OQE55CK.js} +3 -3
- package/dist/{chunk-5H3GB5BO.js → chunk-32KWKNSF.js} +8 -384
- package/dist/{chunk-KTYTFRMB.js → chunk-36EJLSQQ.js} +34 -36
- package/dist/{chunk-FHJEP5SW.js → chunk-3BT2XMV4.js} +19 -13
- package/dist/chunk-3DPEIQKN.js +113 -0
- package/dist/{chunk-GU2UIAFZ.js → chunk-3URVFKWK.js} +7 -7
- package/dist/{chunk-WEH5XRJQ.js → chunk-3XML7CDN.js} +3 -3
- package/dist/chunk-42FMPA75.js +101 -0
- package/dist/{chunk-A2NJGIB3.js → chunk-5LXZXPKX.js} +2 -2
- package/dist/{chunk-VCBR6CU7.js → chunk-5PSMVOLM.js} +2 -2
- package/dist/{chunk-NMPKI6XL.js → chunk-6DB53AJS.js} +203 -25
- package/dist/{chunk-3BINW3FP.js → chunk-76ONBSIA.js} +2 -2
- package/dist/{chunk-26LEYJZH.js → chunk-7MCTRUCE.js} +2 -2
- package/dist/{chunk-TYPGUK6W.js → chunk-AB44T6BB.js} +111 -5
- package/dist/{chunk-K4XHGFR5.js → chunk-B7OBL7PK.js} +317 -721
- package/dist/{chunk-B5CSFE7B.js → chunk-BBVJUZHB.js} +2 -2
- package/dist/{chunk-EQ63NRB7.js → chunk-BBVYXMFO.js} +2 -2
- package/dist/{chunk-ZVJ5BLO2.js → chunk-BKFJHQCA.js} +154 -16
- package/dist/chunk-BKFM6EJV.js +462 -0
- package/dist/chunk-BMS5RKQY.js +27 -0
- package/dist/{chunk-ZNLWCMVZ.js → chunk-BPKCPIL7.js} +2 -2
- package/dist/{chunk-TLQJPP24.js → chunk-BUMFYQFY.js} +1394 -1349
- package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
- package/dist/chunk-C2LTL2W6.js +2447 -0
- package/dist/{chunk-ME6CCNFO.js → chunk-CODPRO7Q.js} +8 -8
- package/dist/{chunk-E77JEWSD.js → chunk-CTJ4RNAA.js} +7 -37
- package/dist/{chunk-ODFEOB4F.js → chunk-CY6FY24N.js} +26 -8
- package/dist/{chunk-7RFXX52T.js → chunk-DQITNCXG.js} +642 -172
- package/dist/{chunk-TTHACPOM.js → chunk-DYJP44XW.js} +578 -117
- package/dist/{chunk-2HFZQUHL.js → chunk-F4CKPOEQ.js} +18 -8
- package/dist/{chunk-DGSYXYMX.js → chunk-FEFIFZTL.js} +3 -3
- package/dist/{chunk-GWS3VEIW.js → chunk-FWDFM5ZU.js} +24 -3
- package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
- package/dist/chunk-GKF55TAZ.js +391 -0
- package/dist/{chunk-VWZOAB7K.js → chunk-GR5G2PVF.js} +9 -8
- package/dist/{chunk-4DGYLA73.js → chunk-GXNLGKAB.js} +80 -9
- package/dist/chunk-HHV2GANA.js +88 -0
- package/dist/{chunk-IIZWH4XA.js → chunk-HI63TFOG.js} +5 -4
- package/dist/{chunk-WLFILSD5.js → chunk-HJJTYUHX.js} +113 -83
- package/dist/{chunk-TT36MB5S.js → chunk-HLW2MRKE.js} +3 -1
- package/dist/{chunk-PMDBGQSJ.js → chunk-HWHKMHUA.js} +7 -7
- package/dist/chunk-HZHHCK24.js +1631 -0
- package/dist/{chunk-WSB3FPX7.js → chunk-I5VEOC6I.js} +39 -143
- package/dist/chunk-IBEBSCYA.js +564 -0
- package/dist/chunk-IQ7KR472.js +362 -0
- package/dist/{chunk-A3WNZD3P.js → chunk-J4W7KFM7.js} +949 -972
- package/dist/{chunk-TB5666IT.js → chunk-JDG2WCRO.js} +5 -5
- package/dist/{chunk-N22QMJKY.js → chunk-K5C3NCBD.js} +4 -4
- package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
- package/dist/{chunk-5C3AQNDW.js → chunk-KFZI4NIL.js} +216 -38
- package/dist/chunk-KMVISBZR.js +132 -0
- package/dist/{chunk-WXY7KU3G.js → chunk-LDQ2ZF2M.js} +2 -2
- package/dist/{chunk-XN3L4EYL.js → chunk-LQ3DZAMX.js} +3 -3
- package/dist/{chunk-U6MBIEMB.js → chunk-LY4S7GJC.js} +173 -144
- package/dist/{chunk-4SPRNWDE.js → chunk-MLKNTWH2.js} +19 -19
- package/dist/{chunk-MVVUPGPW.js → chunk-MXHC5QYU.js} +6 -6
- package/dist/chunk-NEKRRTYW.js +56 -0
- package/dist/{chunk-SPULKLCF.js → chunk-NHCZP4K7.js} +3 -3
- package/dist/chunk-NHLBIGRH.js +1506 -0
- package/dist/chunk-NQQH3YT7.js +302 -0
- package/dist/chunk-NYS75XW5.js +15 -0
- package/dist/{chunk-GN57SG4G.js → chunk-O4XIVISU.js} +10 -8
- package/dist/{chunk-EMYUUSFG.js → chunk-O6TL7WWY.js} +6 -6
- package/dist/chunk-OQBA45DZ.js +97 -0
- package/dist/{chunk-LU7P4LHA.js → chunk-P3FOHJT4.js} +2 -2
- package/dist/chunk-PMZCIOCJ.js +25 -0
- package/dist/{chunk-I4HZDVNP.js → chunk-PQEFIJ36.js} +2 -2
- package/dist/{chunk-J3YUBZWY.js → chunk-QBJA7R7N.js} +62 -6
- package/dist/chunk-QDC3K2U3.js +262 -0
- package/dist/{chunk-2HEJ2F35.js → chunk-QLFS5GO2.js} +22 -10
- package/dist/{chunk-7RGZWPB6.js → chunk-QLL7ILRG.js} +95 -32
- package/dist/{chunk-YS5VLNH5.js → chunk-QREDIESB.js} +6 -6
- package/dist/chunk-QSNYB6ZV.js +195 -0
- package/dist/{chunk-GOXNB3AO.js → chunk-RAPCMZL4.js} +75 -4
- package/dist/chunk-RKKLTLYB.js +45 -0
- package/dist/{chunk-P43ETTHK.js → chunk-SJ5ZKQ4S.js} +2 -2
- package/dist/{chunk-GPIEI3LY.js → chunk-SP2RXXYO.js} +6 -54
- package/dist/chunk-SUCTJL45.js +45 -0
- package/dist/{chunk-DYIM5TJT.js → chunk-SUW5DORT.js} +263 -7
- package/dist/chunk-T56WDKA5.js +183 -0
- package/dist/chunk-TVHHYFHE.js +255 -0
- package/dist/{chunk-FJ3H4MN5.js → chunk-TZ3SGWZZ.js} +3 -3
- package/dist/{chunk-MXKJU4JB.js → chunk-U77AMWDL.js} +91 -10
- package/dist/{chunk-5DHKRSMQ.js → chunk-ULC6OTWO.js} +11 -7
- package/dist/{chunk-RWSI4YD7.js → chunk-UM7N4G5A.js} +33 -12
- package/dist/{chunk-FCSXB6T2.js → chunk-UOSL25KY.js} +14 -2
- package/dist/{chunk-IGWKHNIQ.js → chunk-UXMFQ54G.js} +44 -37
- package/dist/{chunk-HFSBBKSQ.js → chunk-V5DHCITQ.js} +171 -3
- package/dist/{chunk-5WIGXA4T.js → chunk-VAZSBTKF.js} +111 -4
- package/dist/{chunk-VHN4MY6O.js → chunk-VEO4AP2K.js} +2 -2
- package/dist/{chunk-IJ7RPIYJ.js → chunk-VFA6GDY5.js} +65 -4
- package/dist/{chunk-PT7HYKEM.js → chunk-VO2LKSTM.js} +2 -2
- package/dist/chunk-VO67MWHC.js +75 -0
- package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
- package/dist/{chunk-TANS5ZJS.js → chunk-VYMXRQI6.js} +36 -22
- package/dist/{chunk-WWCZ5F23.js → chunk-W5VSYASO.js} +77 -16
- package/dist/{chunk-WNIJTQQK.js → chunk-WZR7K7ZX.js} +72 -116
- package/dist/{chunk-5Q2VVUKB.js → chunk-X3YGUTOB.js} +4 -4
- package/dist/chunk-X75E3D2N.js +686 -0
- package/dist/{chunk-VAWNZU7Z.js → chunk-YDFRH54B.js} +4 -4
- package/dist/chunk-YJX4SHTD.js +40 -0
- package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
- package/dist/chunk-Z2RR6MAK.js +127 -0
- package/dist/{chunk-FBVTI2TJ.js → chunk-Z4TXYIEG.js} +12 -131
- package/dist/cli/index.js +47 -36
- package/dist/{clio-QVTYJ57A.js → clio-2JXHBBY5.js} +7 -7
- package/dist/{code-nav-FGGFIE7L.js → code-nav-3YYRMYNF.js} +8 -8
- package/dist/{compile-cache-CVJMMODC.js → compile-cache-7FPE6PS3.js} +3 -3
- package/dist/{components-ZFA3SAER.js → components-RYZV4JGP.js} +5 -5
- package/dist/{config-LW5IJFQN.js → config-QZPCMYSO.js} +99 -63
- package/dist/{configure-7XIZCOU4.js → configure-TEGEBYCA.js} +23 -22
- package/dist/{context-Y6Y7QPR6.js → context-AV7OEZ4D.js} +12 -12
- package/dist/{context-L3WL3X7K.js → context-E6H5RNMC.js} +56 -47
- package/dist/{context-N52ZA626.js → context-GSXUE4CT.js} +29 -27
- package/dist/{context-clear-MBQRLSDQ.js → context-clear-SHIBYK6T.js} +55 -46
- package/dist/{context-index-HVMFQHK3.js → context-index-HNG3MOME.js} +2 -2
- package/dist/{context-working-set-GS6DSO7F.js → context-working-set-5ZGKPGZQ.js} +13 -13
- package/dist/{dispatch-runner-22ZCNOM3.js → dispatch-runner-EFMJT4LD.js} +93 -64
- package/dist/{docs-7LQ23DLM.js → docs-23KQS3XK.js} +5 -5
- package/dist/doctor-QOA5FNY5.js +313 -0
- package/dist/{eval-BEC2WHDA.js → eval-TFBYQH4H.js} +2032 -156
- package/dist/eval-inventory-SXH7PDKX.js +316 -0
- package/dist/{evidence-REJUMSKM.js → evidence-ERGESKGN.js} +203 -48
- package/dist/{evolve-PY5ZBA5K.js → evolve-VDXTSYCJ.js} +52 -43
- package/dist/{extensions-HVKU65YU.js → extensions-7BGBHN57.js} +13 -7
- package/dist/{fleet-7WZEWRFA.js → fleet-2RRVDF2V.js} +228 -108
- package/dist/{fleet-commands-UVHWM76J.js → fleet-commands-VJ726XIA.js} +11 -11
- package/dist/fleet-decisions-EPAPM3XJ.js +157 -0
- package/dist/{fleet-graph-6ULH7PES.js → fleet-graph-JF5QOATM.js} +18 -15
- package/dist/fleet-inspect-VLY4S7QM.js +442 -0
- package/dist/{fleet-preflight-J53T6CCE.js → fleet-preflight-AIZUEJOY.js} +5 -5
- package/dist/{fleet-validate-72PC4SLA.js → fleet-validate-AJRPDMDV.js} +22 -19
- package/dist/fleet-verify-JFEL2L3H.js +175 -0
- package/dist/fleet-view-ZCON35AG.js +102 -0
- package/dist/{init-OG3TPGQG.js → init-DN2WWLFE.js} +72 -62
- package/dist/install-XGLBQY5E.js +13 -0
- package/dist/interop-OZBKXAYL.js +114 -0
- package/dist/{library-CNTMPLRF.js → library-YWZG7IMW.js} +21 -18
- package/dist/{memory-6IS7F275.js → memory-I4C4HMLW.js} +54 -45
- package/dist/{models-ENRJDA5W.js → models-CEYXJBO6.js} +33 -30
- package/dist/{monitor-XLDVO7TN.js → monitor-NZ6GCI3P.js} +59 -52
- package/dist/{orchestrator-6KSPYRHA.js → orchestrator-GCGQ4N5I.js} +7827 -7328
- package/dist/panes-HMABYVO4.js +58 -0
- package/dist/panes-KY6W3V2E.js +103 -0
- package/dist/{paths-DBXMZMDU.js → paths-II4K7DNR.js} +5 -5
- package/dist/{reset-RZ4ER727.js → reset-DQ6FGCSH.js} +13 -11
- package/dist/resources-BB3MVJMD.js +111 -0
- package/dist/{run-Y2CNK5RU.js → run-H2GQDUER.js} +119 -87
- package/dist/{share-A55GYP6Z.js → share-GTJN6A5O.js} +20 -17
- package/dist/{skills-ALC5J6AT.js → skills-L55TEW6R.js} +33 -24
- package/dist/{skills-eval-JPBEBYQU.js → skills-eval-XVXPH2JI.js} +67 -56
- package/dist/skills-inventory-S4MXPJFV.js +126 -0
- package/dist/slash-commands-ZSGASKJC.js +77 -0
- package/dist/{steer-GGWFUJUD.js → steer-RZGSCY4R.js} +4 -4
- package/dist/{support-MIETYA5E.js → support-PKEUNNQL.js} +6 -6
- package/dist/{targets-VGNXIR3S.js → targets-NCPZ644J.js} +68 -40
- package/dist/{terminal-lease-WOBR64YA.js → terminal-lease-44SV3YCN.js} +6 -4
- package/dist/tools-DAF3DI3C.js +27 -0
- package/dist/{trace-PNCASAXC.js → trace-FYVW2MQA.js} +207 -10
- package/dist/tui-primitives-2AKXQNZK.js +13 -0
- package/dist/{uninstall-ZJF5H5ZN.js → uninstall-DW2PNOIC.js} +5 -5
- package/dist/{upgrade-FUSUAGHR.js → upgrade-3XPP6OQL.js} +27 -24
- package/dist/{usage-N4MKVHKD.js → usage-3NLHGTU2.js} +114 -62
- package/dist/{verifiers-YAWOJ3H2.js → verifiers-SSQONKRT.js} +172 -13
- package/dist/{verify-LTDHYBGY.js → verify-3U6J7FZI.js} +10 -10
- package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-S7RR6GZ7.js} +3 -3
- package/dist/{wiki-generate-6M7GHTBJ.js → wiki-generate-CEHYGPGQ.js} +75 -65
- package/dist/with-panes-MKB46MPQ.js +782 -0
- package/dist/worker/entry.js +106 -75
- package/docs/README.md +3 -2
- package/docs/acp.md +24 -3
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +9 -1
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +62 -3
- package/docs/commands-and-modes.md +31 -2
- package/docs/configuration-and-targets.md +69 -12
- package/docs/context-engine.md +63 -4
- package/docs/development-pipeline.md +19 -0
- package/docs/dispatch-typed-intent.md +385 -0
- package/docs/documentation-coverage.md +5 -5
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +3 -0
- package/docs/eval-runner.md +262 -11
- package/docs/evals-internal.md +72 -2
- package/docs/evidence-and-memory.md +12 -11
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +1 -1
- package/docs/extensions-and-sharing.md +27 -1
- package/docs/fleet-dispatch.md +25 -4
- package/docs/installation-and-lifecycle.md +15 -2
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +10 -1
- package/docs/observability.md +55 -4
- package/docs/proactive-memory.md +127 -14
- package/docs/prompt-envelope-and-tools.md +19 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +19 -3
- package/docs/safety-model.md +2 -2
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +1 -1
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +18 -8
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +88 -1
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +5 -2
- package/src/cli/acp.ts +6 -2
- package/src/cli/agents.ts +1 -1
- package/src/cli/argv.ts +25 -0
- package/src/cli/config-inspect.ts +33 -6
- package/src/cli/config.ts +1 -1
- package/src/cli/configure.ts +23 -21
- package/src/cli/doctor-panes.ts +124 -0
- package/src/cli/doctor-state-size.ts +82 -0
- package/src/cli/doctor-toolchain.ts +57 -0
- package/src/cli/doctor.ts +22 -1
- package/src/cli/eval-inventory.ts +436 -0
- package/src/cli/eval.ts +93 -16
- package/src/cli/evidence-detail.ts +88 -0
- package/src/cli/evidence-inventory.ts +183 -0
- package/src/cli/evidence.ts +30 -5
- package/src/cli/extensions.ts +5 -1
- package/src/cli/fleet-decisions.ts +69 -0
- package/src/cli/fleet-inspect.ts +334 -0
- package/src/cli/fleet-verify.ts +133 -0
- package/src/cli/fleet-view.ts +810 -0
- package/src/cli/fleet.ts +179 -39
- package/src/cli/index.ts +14 -2
- package/src/cli/interop-inspect.ts +128 -0
- package/src/cli/interop.ts +34 -0
- package/src/cli/panes.ts +35 -0
- package/src/cli/reset.ts +5 -2
- package/src/cli/run.ts +58 -0
- package/src/cli/skills-inventory.ts +185 -0
- package/src/cli/skills.ts +16 -13
- package/src/cli/targets.ts +44 -13
- package/src/cli/tools.ts +321 -0
- package/src/cli/trace-inspect.ts +252 -0
- package/src/cli/trace.ts +85 -5
- package/src/cli/usage.ts +63 -14
- package/src/cli/verifiers-inspect.ts +347 -0
- package/src/cli/verifiers.ts +9 -0
- package/src/core/bus-events.ts +33 -1
- package/src/core/cache-telemetry.ts +42 -0
- package/src/core/config.ts +67 -0
- package/src/core/defaults.ts +124 -8
- package/src/core/endpoint-key.ts +27 -0
- package/src/core/residency-target-key.ts +25 -0
- package/src/core/response-schema.ts +80 -6
- package/src/core/theme-token-hex.ts +43 -0
- package/src/core/tool-names.ts +2 -1
- package/src/core/xdg.ts +1 -1
- package/src/domains/agents/fleets/build-review.md +0 -3
- package/src/domains/agents/fleets/build-test.md +0 -3
- package/src/domains/agents/result-contract-filesystem.ts +32 -0
- package/src/domains/agents/result-contract.ts +164 -35
- package/src/domains/config/classify.ts +6 -0
- package/src/domains/context/codewiki/coordinator.ts +12 -4
- package/src/domains/dispatch/admission-error.ts +9 -0
- package/src/domains/dispatch/admission.ts +52 -14
- package/src/domains/dispatch/capacity-lease.ts +118 -9
- package/src/domains/dispatch/contract.ts +11 -0
- package/src/domains/dispatch/council-topology.ts +398 -0
- package/src/domains/dispatch/execution-plan.ts +44 -4
- package/src/domains/dispatch/extension.ts +378 -82
- package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
- package/src/domains/dispatch/fleet-plan.ts +7 -2
- package/src/domains/dispatch/fleet-run.ts +87 -4
- package/src/domains/dispatch/gate-decisions.ts +11 -1
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/gate-topology.ts +289 -0
- package/src/domains/dispatch/heartbeat.ts +32 -8
- package/src/domains/dispatch/index.ts +22 -0
- package/src/domains/dispatch/intent-compatibility.ts +330 -0
- package/src/domains/dispatch/intent.ts +85 -1
- package/src/domains/dispatch/orphan-recovery.ts +5 -0
- package/src/domains/dispatch/reservation-store.ts +139 -11
- package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
- package/src/domains/dispatch/run-event-journal.ts +598 -0
- package/src/domains/dispatch/state.ts +49 -1
- package/src/domains/dispatch/types.ts +13 -0
- package/src/domains/dispatch/validation.ts +33 -8
- package/src/domains/dispatch/worker-spawn.ts +25 -11
- package/src/domains/dispatch/write-boundary-enforcer.ts +20 -3
- package/src/domains/dispatch/write-boundary.ts +62 -1
- package/src/domains/eval/artifacts/store.ts +62 -0
- package/src/domains/eval/compare/behavioral.ts +224 -0
- package/src/domains/eval/compare/compare.ts +342 -2
- package/src/domains/eval/compare/envelope.ts +128 -0
- package/src/domains/eval/compare/gates.ts +24 -6
- package/src/domains/eval/compare/thresholds.ts +30 -3
- package/src/domains/eval/execution-provenance.ts +240 -0
- package/src/domains/eval/inventory.ts +113 -0
- package/src/domains/eval/metrics/aggregate.ts +136 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +112 -0
- package/src/domains/eval/metrics/tracked.ts +413 -0
- package/src/domains/eval/provenance.ts +117 -0
- package/src/domains/eval/reports/comparison.ts +128 -0
- package/src/domains/eval/reports/junit.ts +17 -3
- package/src/domains/eval/reports/markdown.ts +3 -3
- package/src/domains/eval/reports/text.ts +14 -0
- package/src/domains/eval/run-compare.ts +20 -0
- package/src/domains/eval/runners/clio-run.ts +127 -0
- package/src/domains/eval/runners/external-command.ts +28 -3
- package/src/domains/eval/schema/adapter.ts +111 -0
- package/src/domains/eval/schema/artifact.ts +20 -0
- package/src/domains/eval/schema/behavioral-metrics.ts +204 -0
- package/src/domains/eval/schema/behavioral.ts +520 -0
- package/src/domains/eval/schema/execution-envelope.ts +194 -0
- package/src/domains/eval/schema/serving.ts +105 -0
- package/src/domains/eval/schema/suite.ts +38 -8
- package/src/domains/eval/schema/validate.ts +58 -3
- package/src/domains/eval/schema/verdict.ts +237 -0
- package/src/domains/eval/suites/resolve.ts +2 -0
- package/src/domains/eval/suites/run.ts +264 -33
- package/src/domains/eval/verifiers/command.ts +2 -1
- package/src/domains/eval/workspaces/temp-copy.ts +145 -13
- package/src/domains/evidence/build.ts +2 -13
- package/src/domains/evidence/eval.ts +2 -12
- package/src/domains/evidence/findings-markdown.ts +33 -0
- package/src/domains/evidence/run-trust.ts +7 -113
- package/src/domains/evidence/store.ts +6 -0
- package/src/domains/evidence/trust-projection.ts +2 -2
- package/src/domains/extensions/compatibility.ts +285 -0
- package/src/domains/extensions/discovery.ts +38 -3
- package/src/domains/extensions/resources.ts +1 -1
- package/src/domains/extensions/state.ts +12 -3
- package/src/domains/extensions/types.ts +2 -0
- package/src/domains/lifecycle/doctor.ts +69 -1
- package/src/domains/memory/index.ts +14 -1
- package/src/domains/memory/task-bank-promotion.ts +64 -0
- package/src/domains/memory/task-memory-policy.ts +82 -17
- package/src/domains/memory/task-memory-spend.ts +131 -0
- package/src/domains/memory/task-memory-status.ts +7 -0
- package/src/domains/memory/task-memory-telemetry.ts +3 -0
- package/src/domains/middleware/index.ts +1 -0
- package/src/domains/middleware/memory-intervention.ts +97 -21
- package/src/domains/middleware/memory-step-endpoint.ts +71 -0
- package/src/domains/mux/contract.ts +434 -0
- package/src/domains/mux/detect.ts +158 -0
- package/src/domains/mux/extension.ts +47 -0
- package/src/domains/mux/index.ts +96 -0
- package/src/domains/mux/manifest.ts +6 -0
- package/src/domains/mux/operations.ts +164 -0
- package/src/domains/mux/pane-registry.ts +90 -0
- package/src/domains/mux/protocol.ts +49 -0
- package/src/domains/mux/socket-client.ts +816 -0
- package/src/domains/mux/types.ts +222 -0
- package/src/domains/mux/viewer-command.ts +59 -0
- package/src/domains/mux/yazi/assets/init.lua +2 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
- package/src/domains/mux/yazi/assets/yazi.toml +17 -0
- package/src/domains/mux/yazi/event-stream.ts +180 -0
- package/src/domains/mux/yazi/profile.ts +299 -0
- package/src/domains/mux/yazi/session.ts +228 -0
- package/src/domains/mux/yazi/theme.ts +30 -0
- package/src/domains/observability/background-memory-usage.ts +140 -0
- package/src/domains/observability/cost.ts +22 -1
- package/src/domains/observability/index.ts +9 -0
- package/src/domains/observability/out-of-turn-usage.ts +51 -2
- package/src/domains/observability/trace-store.ts +234 -2
- package/src/domains/prompts/compiler.ts +100 -13
- package/src/domains/providers/endpoint-capacity.ts +228 -0
- package/src/domains/providers/endpoint-slots-store.ts +189 -0
- package/src/domains/providers/extension.ts +20 -3
- package/src/domains/providers/index.ts +32 -0
- package/src/domains/providers/model-runtime-capabilities.ts +32 -0
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +243 -1
- package/src/domains/providers/runtime-resolution.ts +8 -1
- package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +31 -9
- package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +4 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +4 -1
- package/src/domains/providers/runtimes/local-native/ollama-native.ts +6 -1
- package/src/domains/providers/runtimes/protocol/litellm.ts +375 -0
- package/src/domains/providers/support.ts +1 -0
- package/src/domains/providers/target-model-cache.ts +124 -0
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/target-descriptor.ts +2 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/prompts/loader.ts +95 -33
- package/src/domains/resources/skills/loader.ts +33 -0
- package/src/domains/safety/action-classifier.ts +6 -0
- package/src/domains/safety/call-target.ts +52 -0
- package/src/domains/safety/run-effects.ts +35 -4
- package/src/domains/session/context-accounting.ts +52 -1
- package/src/domains/session/context-ledger.ts +37 -13
- package/src/domains/session/index.ts +6 -0
- package/src/domains/session/prompt-cache.ts +140 -0
- package/src/domains/session/prompt-manifest.ts +42 -0
- package/src/domains/toolchain/archive.ts +175 -0
- package/src/domains/toolchain/contract.ts +28 -0
- package/src/domains/toolchain/extension.ts +47 -0
- package/src/domains/toolchain/index.ts +39 -0
- package/src/domains/toolchain/install.ts +327 -0
- package/src/domains/toolchain/manifest.ts +8 -0
- package/src/domains/toolchain/paths.ts +34 -0
- package/src/domains/toolchain/registry.ts +265 -0
- package/src/domains/toolchain/remove.ts +218 -0
- package/src/domains/toolchain/resolve.ts +182 -0
- package/src/domains/toolchain/types.ts +113 -0
- package/src/domains/toolchain/version.ts +88 -0
- package/src/engine/acp/adapter.ts +18 -3
- package/src/engine/acp/server.ts +413 -70
- package/src/engine/acp/types.ts +19 -1
- package/src/engine/ai.ts +35 -0
- package/src/engine/apis/llamacpp-residency.ts +55 -3
- package/src/engine/apis/lmstudio.ts +25 -5
- package/src/engine/apis/ollama-native.ts +2 -1
- package/src/engine/apis/openai-completions.ts +80 -17
- package/src/engine/apis/residency-lock.ts +3 -1
- package/src/engine/apis/residency.ts +34 -1
- package/src/engine/claude/sdk-module.ts +98 -0
- package/src/engine/claude/sdk-runtime.ts +19 -11
- package/src/engine/provider-payload.ts +29 -1
- package/src/engine/tui-primitives.ts +21 -0
- package/src/engine/tui.ts +1 -0
- package/src/engine/worker-runtime.ts +2 -13
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +279 -35
- package/src/entry/panes-activation.ts +31 -0
- package/src/entry/with-panes.ts +20 -0
- package/src/interactive/chat-loop-messages.ts +26 -7
- package/src/interactive/chat-loop.ts +318 -41
- package/src/interactive/chat-panel.ts +62 -8
- package/src/interactive/clio-editor.ts +45 -8
- package/src/interactive/context-activity.ts +5 -1
- package/src/interactive/context-meter.ts +1 -1
- package/src/interactive/context-overlay.ts +41 -10
- package/src/interactive/cost-overlay.ts +66 -6
- package/src/interactive/council-grid.ts +1 -3
- package/src/interactive/council.ts +11 -0
- package/src/interactive/dispatch-board.ts +102 -20
- package/src/interactive/fleet-run-preview.ts +41 -15
- package/src/interactive/handoff-round.ts +41 -2
- package/src/interactive/interactive-application.ts +177 -7
- package/src/interactive/interactive-input-runtime.ts +15 -0
- package/src/interactive/interactive-presentation.ts +4 -0
- package/src/interactive/interactive-shell.ts +20 -17
- package/src/interactive/interactive-slash-runtime.ts +63 -10
- package/src/interactive/memory-overlay.ts +9 -0
- package/src/interactive/modal-marker.ts +170 -0
- package/src/interactive/mutation-preview.ts +295 -0
- package/src/interactive/mux-bridge.ts +214 -0
- package/src/interactive/overlay-frame.ts +58 -2
- package/src/interactive/overlay-general-openers.ts +17 -0
- package/src/interactive/overlay-key-routing.ts +52 -3
- package/src/interactive/overlay-lifecycle.ts +56 -7
- package/src/interactive/overlay-model-selectors.ts +40 -3
- package/src/interactive/overlay-permission-lifecycle.ts +112 -24
- package/src/interactive/overlay-session-lifecycle.ts +73 -9
- package/src/interactive/overlay-transitions.ts +18 -4
- package/src/interactive/overlays/agents.ts +1 -0
- package/src/interactive/overlays/ask-user.ts +227 -49
- package/src/interactive/overlays/auth-dialog.ts +1 -0
- package/src/interactive/overlays/context-reset.ts +1 -0
- package/src/interactive/overlays/cwd-fallback.ts +1 -0
- package/src/interactive/overlays/decisions.ts +11 -11
- package/src/interactive/overlays/extensions.ts +1 -0
- package/src/interactive/overlays/fleet-run-approval.ts +1 -0
- package/src/interactive/overlays/handoff-review.ts +1 -0
- package/src/interactive/overlays/help-reference.ts +6 -0
- package/src/interactive/overlays/interop.ts +1 -0
- package/src/interactive/overlays/library-install-confirm.ts +1 -0
- package/src/interactive/overlays/library-tabs.ts +28 -0
- package/src/interactive/overlays/list-overlay.ts +10 -1
- package/src/interactive/overlays/message-picker.ts +1 -0
- package/src/interactive/overlays/model-scope.ts +86 -0
- package/src/interactive/overlays/model-selector.ts +1 -0
- package/src/interactive/overlays/prompts.ts +12 -1
- package/src/interactive/overlays/session-selector.ts +1 -0
- package/src/interactive/overlays/settings-sections.ts +30 -0
- package/src/interactive/overlays/settings.ts +614 -45
- package/src/interactive/overlays/side-question.ts +1 -0
- package/src/interactive/overlays/skills-hub.ts +3 -11
- package/src/interactive/overlays/tree-selector.ts +1 -0
- package/src/interactive/pane-policy.ts +46 -0
- package/src/interactive/panes-runtime.ts +292 -0
- package/src/interactive/permission-hint.ts +34 -2
- package/src/interactive/permission-overlay.ts +159 -9
- package/src/interactive/prewarm.ts +197 -0
- package/src/interactive/render-trace.ts +162 -15
- package/src/interactive/renderers/compaction-summary.ts +29 -0
- package/src/interactive/renderers/tool-execution.ts +4 -0
- package/src/interactive/renderers/worker-entry.ts +122 -14
- package/src/interactive/side-question.ts +58 -1
- package/src/interactive/slash-commands.ts +251 -15
- package/src/interactive/status/controller.ts +11 -0
- package/src/interactive/status/state-machine.ts +54 -2
- package/src/interactive/status/types.ts +7 -0
- package/src/interactive/tasks-overlay.ts +1 -0
- package/src/interactive/terminal-lease.ts +2 -0
- package/src/interactive/theme/tokens.ts +3 -14
- package/src/interactive/turn-context.ts +346 -33
- package/src/interactive/turn-persistence.ts +14 -4
- package/src/interactive/turn-prewarm.ts +364 -0
- package/src/interactive/turn-queues.ts +7 -4
- package/src/interactive/turn-runtime.ts +8 -1
- package/src/interactive/turn-state.ts +23 -0
- package/src/interactive/view/artifacts.ts +109 -1
- package/src/interactive/view/view-overlay.ts +29 -3
- package/src/interactive/watch-pane.ts +152 -0
- package/src/interactive/worker-progress.ts +7 -1
- package/src/interactive/worker-receipts.ts +19 -1
- package/src/interactive/worker-stream.ts +5 -0
- package/src/interactive/yazi-bridge.ts +444 -0
- package/src/tools/ask-user.ts +43 -2
- package/src/tools/bootstrap.ts +26 -2
- package/src/tools/builtin-tool-catalog.ts +15 -0
- package/src/tools/compete-worktrees.ts +83 -2
- package/src/tools/core-bootstrap.ts +2 -1
- package/src/tools/dispatch-admission.ts +14 -3
- package/src/tools/dispatch-arguments.ts +20 -20
- package/src/tools/dispatch-plan.ts +17 -9
- package/src/tools/dispatch-run-events.ts +134 -19
- package/src/tools/dispatch-runner.ts +29 -7
- package/src/tools/dispatch-scout.ts +1 -1
- package/src/tools/dispatch-types.ts +15 -3
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/executables.ts +17 -14
- package/src/tools/observation.ts +54 -4
- package/src/tools/panes-surface.ts +38 -0
- package/src/tools/panes.ts +112 -0
- package/src/tools/policy.ts +10 -1
- package/src/tools/presentation.ts +1 -0
- package/src/tools/registry.ts +16 -0
- package/dist/chunk-AOCYTWAV.js +0 -449
- package/dist/chunk-HLE42MG7.js +0 -37
- package/dist/chunk-HWUFFB6L.js +0 -83
- package/dist/chunk-JOZYP4GM.js +0 -279
- package/dist/doctor-M7YEDGAE.js +0 -91
package/src/cli/trace.ts
CHANGED
|
@@ -4,27 +4,39 @@ import { resolve } from "node:path";
|
|
|
4
4
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
5
5
|
import { clioStatePath } from "../core/xdg.js";
|
|
6
6
|
import {
|
|
7
|
+
DEFAULT_TRACE_RETENTION_POLICY,
|
|
8
|
+
resolveTraceRetentionPolicy,
|
|
7
9
|
TRACE_EVENT_POLL_LIMIT,
|
|
8
10
|
type TraceEventRow,
|
|
9
11
|
type TracePhaseRow,
|
|
10
12
|
type TraceProcessRow,
|
|
11
13
|
TraceReader,
|
|
12
14
|
type TraceRunRow,
|
|
15
|
+
TraceStore,
|
|
13
16
|
traceDatabasePath,
|
|
14
17
|
} from "../domains/observability/trace-store.js";
|
|
18
|
+
import { runTraceInspect } from "./trace-inspect.js";
|
|
15
19
|
|
|
16
20
|
const HELP = `Usage:
|
|
17
21
|
clio-coder trace runs [--db PATH] [--limit N] [--json]
|
|
22
|
+
clio-coder trace inspect --json a fixed bounded window with no request text
|
|
18
23
|
clio-coder trace phases <runId> [--db PATH]
|
|
19
24
|
clio-coder trace tail <runId> [--follow] [--db PATH]
|
|
20
25
|
clio-coder trace procs <runId> [--db PATH]
|
|
26
|
+
clio-coder trace prune [--max-age-days N] [--max-bytes N] [--db PATH] [--json]
|
|
21
27
|
clio-coder trace sql <SELECT query> [--db PATH]
|
|
22
28
|
clio-coder trace ui [--db PATH] [--port N] source checkout only
|
|
23
29
|
|
|
24
30
|
The viewer ships with the repository, not the npm package, so from an installed
|
|
25
31
|
Clio the subcommands above are the way in. They read the same database.
|
|
32
|
+
Pruning keeps ${DEFAULT_TRACE_RETENTION_POLICY.maxAgeDays} days and at most ${DEFAULT_TRACE_RETENTION_POLICY.maxBytes} bytes by default. Set
|
|
33
|
+
CLIO_CODER_TRACE_RETENTION_DAYS or CLIO_CODER_TRACE_MAX_BYTES to change the automatic
|
|
34
|
+
policy; prune flags override those values for one command.
|
|
26
35
|
`;
|
|
27
36
|
|
|
37
|
+
/** Rows `trace runs` shows when the operator names no limit. */
|
|
38
|
+
const DEFAULT_TRACE_LIMIT = 50;
|
|
39
|
+
|
|
28
40
|
interface ParsedTraceArgs {
|
|
29
41
|
positional: string[];
|
|
30
42
|
db: string;
|
|
@@ -34,6 +46,8 @@ interface ParsedTraceArgs {
|
|
|
34
46
|
limit: number;
|
|
35
47
|
port: number;
|
|
36
48
|
json: boolean;
|
|
49
|
+
maxAgeDays: number | undefined;
|
|
50
|
+
maxBytes: number | undefined;
|
|
37
51
|
}
|
|
38
52
|
|
|
39
53
|
function parseTraceArgs(args: string[]): ParsedTraceArgs {
|
|
@@ -41,14 +55,22 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
|
|
|
41
55
|
let db = traceDatabasePath(clioStatePath());
|
|
42
56
|
let dbExplicit = false;
|
|
43
57
|
let follow = false;
|
|
44
|
-
let limit =
|
|
58
|
+
let limit = DEFAULT_TRACE_LIMIT;
|
|
45
59
|
let port = 0;
|
|
46
60
|
let json = false;
|
|
61
|
+
let maxAgeDays: number | undefined;
|
|
62
|
+
let maxBytes: number | undefined;
|
|
47
63
|
for (let index = 0; index < args.length; index += 1) {
|
|
48
64
|
const arg = args[index];
|
|
49
65
|
if (arg === "--follow") follow = true;
|
|
50
66
|
else if (arg === "--json") json = true;
|
|
51
|
-
else if (
|
|
67
|
+
else if (
|
|
68
|
+
arg === "--db" ||
|
|
69
|
+
arg === "--limit" ||
|
|
70
|
+
arg === "--port" ||
|
|
71
|
+
arg === "--max-age-days" ||
|
|
72
|
+
arg === "--max-bytes"
|
|
73
|
+
) {
|
|
52
74
|
const value = args[index + 1];
|
|
53
75
|
if (value === undefined) throw new Error(`${arg} requires a value`);
|
|
54
76
|
index += 1;
|
|
@@ -56,20 +78,25 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
|
|
|
56
78
|
db = resolve(value);
|
|
57
79
|
dbExplicit = true;
|
|
58
80
|
} else if (arg === "--limit") limit = parseInteger(value, "--limit", 1, 500);
|
|
59
|
-
else port = parseInteger(value, "--port", 0, 65_535);
|
|
81
|
+
else if (arg === "--port") port = parseInteger(value, "--port", 0, 65_535);
|
|
82
|
+
else if (arg === "--max-age-days") maxAgeDays = parseInteger(value, arg, 1, 36_500);
|
|
83
|
+
else maxBytes = parseInteger(value, arg, 1024 * 1024, Number.MAX_SAFE_INTEGER);
|
|
60
84
|
} else if (arg?.startsWith("--db=")) {
|
|
61
85
|
db = resolve(arg.slice(5));
|
|
62
86
|
dbExplicit = true;
|
|
63
87
|
} else if (arg?.startsWith("--limit=")) limit = parseInteger(arg.slice(8), "--limit", 1, 500);
|
|
64
88
|
else if (arg?.startsWith("--port=")) port = parseInteger(arg.slice(7), "--port", 0, 65_535);
|
|
89
|
+
else if (arg?.startsWith("--max-age-days=")) maxAgeDays = parseInteger(arg.slice(15), "--max-age-days", 1, 36_500);
|
|
90
|
+
else if (arg?.startsWith("--max-bytes="))
|
|
91
|
+
maxBytes = parseInteger(arg.slice(12), "--max-bytes", 1024 * 1024, Number.MAX_SAFE_INTEGER);
|
|
65
92
|
else if (arg?.startsWith("-")) throw new Error(`unknown trace flag: ${arg}`);
|
|
66
93
|
else if (arg !== undefined) positional.push(arg);
|
|
67
94
|
}
|
|
68
|
-
return { positional, db, dbExplicit, follow, limit, port, json };
|
|
95
|
+
return { positional, db, dbExplicit, follow, limit, port, json, maxAgeDays, maxBytes };
|
|
69
96
|
}
|
|
70
97
|
|
|
71
98
|
/** Every subcommand `trace` answers to. Anything else is a usage error. */
|
|
72
|
-
const TRACE_COMMANDS = new Set(["runs", "phases", "tail", "procs", "sql", "ui"]);
|
|
99
|
+
const TRACE_COMMANDS = new Set(["runs", "inspect", "phases", "tail", "procs", "prune", "sql", "ui"]);
|
|
73
100
|
|
|
74
101
|
/** The subcommands whose first positional is a run id. */
|
|
75
102
|
const TRACE_COMMANDS_NEEDING_RUN_ID = new Set(["phases", "tail", "procs"]);
|
|
@@ -125,6 +152,22 @@ export async function runTraceCommand(args: string[]): Promise<number> {
|
|
|
125
152
|
|
|
126
153
|
if (command === "ui") return runTraceUi(parsed.db, parsed.port);
|
|
127
154
|
|
|
155
|
+
// `inspect` answers ahead of the no-database courtesy below, because its
|
|
156
|
+
// answer to a state tree nothing has written to is a JSON snapshot saying
|
|
157
|
+
// the trace database is unavailable, not a sentence on stdout.
|
|
158
|
+
if (command === "inspect") {
|
|
159
|
+
return runTraceInspect(
|
|
160
|
+
parsed.positional.length === 1 &&
|
|
161
|
+
parsed.json &&
|
|
162
|
+
!parsed.dbExplicit &&
|
|
163
|
+
!parsed.follow &&
|
|
164
|
+
parsed.limit === DEFAULT_TRACE_LIMIT &&
|
|
165
|
+
parsed.port === 0 &&
|
|
166
|
+
parsed.maxAgeDays === undefined &&
|
|
167
|
+
parsed.maxBytes === undefined,
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
|
|
128
171
|
// A database that was never written is the empty state, not a failure. Handing
|
|
129
172
|
// the absent path to node:sqlite produced "unable to open database file",
|
|
130
173
|
// which named neither the file nor a next step, and loading the module leaked
|
|
@@ -132,6 +175,7 @@ export async function runTraceCommand(args: string[]): Promise<number> {
|
|
|
132
175
|
// the operator typed is a different claim, so a --db that is not there stays
|
|
133
176
|
// an error and says which path it means.
|
|
134
177
|
if (!existsSync(parsed.db)) return missingDatabase(parsed);
|
|
178
|
+
if (command === "prune") return runTracePrune(parsed);
|
|
135
179
|
|
|
136
180
|
let reader: TraceReader;
|
|
137
181
|
try {
|
|
@@ -189,6 +233,42 @@ export async function runTraceCommand(args: string[]): Promise<number> {
|
|
|
189
233
|
}
|
|
190
234
|
}
|
|
191
235
|
|
|
236
|
+
function runTracePrune(parsed: ParsedTraceArgs): number {
|
|
237
|
+
let policy: ReturnType<typeof resolveTraceRetentionPolicy>;
|
|
238
|
+
try {
|
|
239
|
+
policy = resolveTraceRetentionPolicy({
|
|
240
|
+
...(parsed.maxAgeDays === undefined ? {} : { maxAgeDays: parsed.maxAgeDays }),
|
|
241
|
+
...(parsed.maxBytes === undefined ? {} : { maxBytes: parsed.maxBytes }),
|
|
242
|
+
});
|
|
243
|
+
} catch (error) {
|
|
244
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
245
|
+
return 1;
|
|
246
|
+
}
|
|
247
|
+
let store: TraceStore;
|
|
248
|
+
try {
|
|
249
|
+
store = new TraceStore(parsed.db, { retention: policy });
|
|
250
|
+
} catch (error) {
|
|
251
|
+
process.stderr.write(`trace database: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
252
|
+
return 1;
|
|
253
|
+
}
|
|
254
|
+
try {
|
|
255
|
+
const result = store.prune(policy);
|
|
256
|
+
if (parsed.json) {
|
|
257
|
+
process.stdout.write(`${JSON.stringify({ policy, ...result }, null, 2)}\n`);
|
|
258
|
+
} else {
|
|
259
|
+
process.stdout.write(
|
|
260
|
+
`trace prune: removed ${result.runsRemoved.toLocaleString("en-US")} runs and ${result.rowsRemoved.toLocaleString("en-US")} rows; reclaimed ${result.bytesRemoved.toLocaleString("en-US")} bytes; VACUUM ${result.vacuumed ? "ran" : "not needed"}; protected ${result.protectedRuns.toLocaleString("en-US")} live runs\n`,
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
return 0;
|
|
264
|
+
} catch (error) {
|
|
265
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
266
|
+
return 1;
|
|
267
|
+
} finally {
|
|
268
|
+
store.close();
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
192
272
|
async function tail(reader: TraceReader, runId: string, follow: boolean): Promise<void> {
|
|
193
273
|
let cursor = 0;
|
|
194
274
|
let idleTerminalPolls = 0;
|
package/src/cli/usage.ts
CHANGED
|
@@ -12,9 +12,12 @@ import { readEvidenceIndex } from "../domains/observability/evidence-index.js";
|
|
|
12
12
|
import { type OutOfTurnUsageRow, readOutOfTurnUsageRows } from "../domains/observability/out-of-turn-usage.js";
|
|
13
13
|
import { loadSkills } from "../domains/resources/index.js";
|
|
14
14
|
import {
|
|
15
|
+
foldPromptCacheTelemetry,
|
|
16
|
+
hasPromptCacheTelemetry,
|
|
15
17
|
type LedgerUsageCall,
|
|
16
18
|
ledgerUsageCalls,
|
|
17
19
|
listSessionLedgerRefs,
|
|
20
|
+
type PromptCacheTelemetry,
|
|
18
21
|
parseSessionEntries,
|
|
19
22
|
readAuditRows,
|
|
20
23
|
} from "../domains/session/index.js";
|
|
@@ -69,6 +72,8 @@ interface SessionUsage {
|
|
|
69
72
|
entriesInWindow: number;
|
|
70
73
|
/** Completed API calls this session recorded in the window, one per call. */
|
|
71
74
|
usageCalls: LedgerUsageCall[];
|
|
75
|
+
/** Backend prompt-cache facts persisted on assistant calls in the window. */
|
|
76
|
+
promptCache: PromptCacheTelemetry;
|
|
72
77
|
}
|
|
73
78
|
|
|
74
79
|
/** Per-call usage folded over one grouping (a model, or the whole window). */
|
|
@@ -102,32 +107,37 @@ function addResponseModelIdObservation(counts: ResponseModelIdObservationCounts,
|
|
|
102
107
|
|
|
103
108
|
/**
|
|
104
109
|
* How the folded calls split between the session's own turns and the rounds
|
|
105
|
-
* that were billed beside it. A `/btw` side question
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
110
|
+
* that were billed beside it. A `/btw` side question, a `/handoff` round, a
|
|
111
|
+
* session pre-warm, and a proactive-memory step are real spend and belong in
|
|
112
|
+
* the token and cost totals, but none of them is a turn: they never entered
|
|
113
|
+
* the session. `turns` therefore subtracts them from the folded row count,
|
|
114
|
+
* which is exactly what the `/cost` overlay does.
|
|
109
115
|
*/
|
|
110
116
|
interface CallOrigins {
|
|
111
117
|
rows: number;
|
|
112
118
|
sideQuestions: number;
|
|
113
119
|
handoffs: number;
|
|
120
|
+
prewarms: number;
|
|
121
|
+
backgroundMemory: number;
|
|
114
122
|
}
|
|
115
123
|
|
|
116
124
|
function emptyCallOrigins(): CallOrigins {
|
|
117
|
-
return { rows: 0, sideQuestions: 0, handoffs: 0 };
|
|
125
|
+
return { rows: 0, sideQuestions: 0, handoffs: 0, prewarms: 0, backgroundMemory: 0 };
|
|
118
126
|
}
|
|
119
127
|
|
|
120
128
|
function turnsOf(origins: CallOrigins): number {
|
|
121
|
-
return origins.rows - origins.sideQuestions - origins.handoffs;
|
|
129
|
+
return origins.rows - origins.sideQuestions - origins.handoffs - origins.prewarms - origins.backgroundMemory;
|
|
122
130
|
}
|
|
123
131
|
|
|
124
132
|
function hasLabelledCall(origins: CallOrigins): boolean {
|
|
125
|
-
return origins.sideQuestions > 0 || origins.handoffs > 0;
|
|
133
|
+
return origins.sideQuestions > 0 || origins.handoffs > 0 || origins.prewarms > 0 || origins.backgroundMemory > 0;
|
|
126
134
|
}
|
|
127
135
|
|
|
128
136
|
function addOutOfTurnRow(origins: CallOrigins, row: OutOfTurnUsageRow): void {
|
|
129
137
|
origins.rows += 1;
|
|
130
138
|
if (row.label === "side-question") origins.sideQuestions += 1;
|
|
139
|
+
else if (row.label === "prewarm") origins.prewarms += 1;
|
|
140
|
+
else if (row.label === "background-memory") origins.backgroundMemory += 1;
|
|
131
141
|
else origins.handoffs += 1;
|
|
132
142
|
}
|
|
133
143
|
|
|
@@ -435,6 +445,9 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
435
445
|
const usageRows = [...usageByModel.values()].sort(
|
|
436
446
|
(a, b) => b.totals.totalTokens - a.totals.totalTokens || a.providerId.localeCompare(b.providerId),
|
|
437
447
|
);
|
|
448
|
+
const cacheSessions = sessions
|
|
449
|
+
.filter((session) => hasPromptCacheTelemetry(session.promptCache))
|
|
450
|
+
.sort((a, b) => a.sessionId.localeCompare(b.sessionId));
|
|
438
451
|
|
|
439
452
|
const approvedMemory = memoryRecords.filter((record) => record.approved && record.rejectedAt === undefined);
|
|
440
453
|
const pendingMemory = memoryRecords.filter((record) => !record.approved && record.rejectedAt === undefined);
|
|
@@ -515,8 +528,8 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
515
528
|
emit({ kind: "fact", fact: "audit-tool-calls", value: auditToolCalls.length, blocked: auditBlocked.length });
|
|
516
529
|
if (usageMeasurable) {
|
|
517
530
|
// The origin split is emitted only when something out of turn was
|
|
518
|
-
// recorded, so a report over an archive with no `/btw
|
|
519
|
-
// round in it stays byte-identical to what it printed before.
|
|
531
|
+
// recorded, so a report over an archive with no `/btw`, `/handoff`, or
|
|
532
|
+
// pre-warm round in it stays byte-identical to what it printed before.
|
|
520
533
|
emit({
|
|
521
534
|
kind: "fact",
|
|
522
535
|
fact: "tokens",
|
|
@@ -526,6 +539,8 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
526
539
|
turns: turnsOf(callOrigins),
|
|
527
540
|
sideQuestions: callOrigins.sideQuestions,
|
|
528
541
|
handoffs: callOrigins.handoffs,
|
|
542
|
+
prewarms: callOrigins.prewarms,
|
|
543
|
+
backgroundMemorySteps: callOrigins.backgroundMemory,
|
|
529
544
|
}
|
|
530
545
|
: {}),
|
|
531
546
|
});
|
|
@@ -540,6 +555,15 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
540
555
|
...row.totals,
|
|
541
556
|
});
|
|
542
557
|
}
|
|
558
|
+
for (const session of cacheSessions) {
|
|
559
|
+
emit({
|
|
560
|
+
kind: "fact",
|
|
561
|
+
fact: "session-cache",
|
|
562
|
+
sessionId: session.sessionId,
|
|
563
|
+
uncachedPrefillTokens: session.promptCache.uncachedPrefillTokens,
|
|
564
|
+
verdictCounts: session.promptCache.verdictCounts,
|
|
565
|
+
});
|
|
566
|
+
}
|
|
543
567
|
}
|
|
544
568
|
for (const [tool, totals] of topTools) emit({ kind: "fact", fact: "top-tool", tool, ...totals });
|
|
545
569
|
for (const [shape, count] of topShapes) {
|
|
@@ -600,6 +624,10 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
600
624
|
out(` turns in window: ${turnsOf(callOrigins)}`);
|
|
601
625
|
if (callOrigins.sideQuestions > 0) out(` side questions in window: ${callOrigins.sideQuestions}`);
|
|
602
626
|
if (callOrigins.handoffs > 0) out(` handoffs in window: ${callOrigins.handoffs}`);
|
|
627
|
+
if (callOrigins.prewarms > 0) out(` pre-warms in window: ${callOrigins.prewarms}`);
|
|
628
|
+
if (callOrigins.backgroundMemory > 0) {
|
|
629
|
+
out(` background memory steps in window: ${callOrigins.backgroundMemory}`);
|
|
630
|
+
}
|
|
603
631
|
}
|
|
604
632
|
out(` provider-reported cost in window: $${usageTotals.costUsd.toFixed(4)}`);
|
|
605
633
|
}
|
|
@@ -639,6 +667,27 @@ export async function runUsageCommand(argv: ReadonlyArray<string>): Promise<numb
|
|
|
639
667
|
),
|
|
640
668
|
);
|
|
641
669
|
}
|
|
670
|
+
if (cacheSessions.length > 0) {
|
|
671
|
+
out("");
|
|
672
|
+
out(" prompt cache by session (from backend timings and persisted verdicts)");
|
|
673
|
+
process.stdout.write(
|
|
674
|
+
indent(
|
|
675
|
+
formatColumns([
|
|
676
|
+
["session", "uncached prefill", "hot/partial/cold/small"],
|
|
677
|
+
...cacheSessions.map((session) => [
|
|
678
|
+
session.sessionId,
|
|
679
|
+
session.promptCache.uncachedPrefillTokens === null ? "n/a" : String(session.promptCache.uncachedPrefillTokens),
|
|
680
|
+
[
|
|
681
|
+
session.promptCache.verdictCounts.hot,
|
|
682
|
+
session.promptCache.verdictCounts.partial,
|
|
683
|
+
session.promptCache.verdictCounts.cold,
|
|
684
|
+
session.promptCache.verdictCounts.small,
|
|
685
|
+
].join("/"),
|
|
686
|
+
]),
|
|
687
|
+
]),
|
|
688
|
+
),
|
|
689
|
+
);
|
|
690
|
+
}
|
|
642
691
|
if (topTools.length > 0) {
|
|
643
692
|
out("");
|
|
644
693
|
out(" top tools (from receipt toolStats)");
|
|
@@ -865,6 +914,9 @@ async function readSessions(
|
|
|
865
914
|
}
|
|
866
915
|
const parsedEntries = parseSessionEntries(raw, ref.path);
|
|
867
916
|
diagnostics.malformedSessionLines += parsedEntries.errors.length;
|
|
917
|
+
const accountingEntries = parsedEntries.entries.filter(
|
|
918
|
+
(entry) => entry.kind === "modelChange" || inWindow(entry.timestamp, windowStart, windowEnd),
|
|
919
|
+
);
|
|
868
920
|
const usage: SessionUsage = {
|
|
869
921
|
sessionId: ref.sessionId,
|
|
870
922
|
cwdHash: ref.cwdHash,
|
|
@@ -874,11 +926,8 @@ async function readSessions(
|
|
|
874
926
|
// modelChange rows are kept regardless of the window: they carry no
|
|
875
927
|
// usage of their own, and dropping the ones that predate the window
|
|
876
928
|
// would attribute in-window calls to the wrong target.
|
|
877
|
-
usageCalls: ledgerUsageCalls(
|
|
878
|
-
|
|
879
|
-
(entry) => entry.kind === "modelChange" || inWindow(entry.timestamp, windowStart, windowEnd),
|
|
880
|
-
),
|
|
881
|
-
),
|
|
929
|
+
usageCalls: ledgerUsageCalls(accountingEntries),
|
|
930
|
+
promptCache: foldPromptCacheTelemetry(accountingEntries),
|
|
882
931
|
};
|
|
883
932
|
for (const entry of parsedEntries.entries) {
|
|
884
933
|
if (!inWindow(entry.timestamp, windowStart, windowEnd)) continue;
|