@iowarp/clio-coder 0.4.0 → 0.4.1
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 +39 -0
- package/README.md +116 -16
- package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
- package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
- package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
- package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
- package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
- package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
- package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
- package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
- package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
- package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
- package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
- package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
- package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
- package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
- package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
- package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
- package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
- package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
- package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
- package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
- package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
- package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
- package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
- package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
- package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
- package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
- package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
- package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
- package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
- package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +36 -36
- package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
- package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
- package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
- package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
- package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
- package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
- package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
- package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
- package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
- package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
- package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
- package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
- package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
- package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
- package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
- package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
- package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
- package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
- package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
- package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
- package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
- package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
- package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
- package/dist/worker/entry.js +57 -52
- package/docs/acp.md +1 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/commands-and-modes.md +9 -3
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +105 -164
- package/docs/environment-variables.md +2 -1
- package/docs/exit-codes-and-output.md +2 -0
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +8 -6
- package/docs/installation-and-lifecycle.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/trace-store.md +15 -10
- package/docs/troubleshooting.md +1 -1
- package/evals/README.md +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +5 -15
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -27
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +29 -8
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +8 -5
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +11 -15
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/targets.ts +23 -24
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +41 -0
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +1 -1
- package/src/cli/wiki-generate.ts +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1062 -886
- package/src/core/defaults.ts +321 -528
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +48 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +65 -61
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +0 -23
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal.ts +6 -5
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +3 -3
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +12 -2
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- package/src/domains/interop/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +20 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +157 -25
- package/src/domains/mux/detect.ts +29 -5
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +20 -0
- package/src/domains/mux/operations.ts +28 -0
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +26 -3
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +22 -12
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +14 -2
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +39 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/share/archive.ts +85 -36
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +27 -26
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/loop-guard.ts +0 -5
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +14 -13
- package/src/entry/orchestrator.ts +107 -88
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +30 -33
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +2 -44
- package/src/interactive/interactive-application.ts +79 -59
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +2 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +63 -17
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +339 -293
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +36 -10
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +279 -183
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +11 -11
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +12 -5
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +1 -1
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +1 -1
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +12 -10
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
|
@@ -76,7 +76,7 @@ export interface JointAgentDimension {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
/** A single truthful role-quality label retires task-feature priors for this tuple. */
|
|
79
|
-
|
|
79
|
+
function routePriorForAgentEvidence(
|
|
80
80
|
agent: JointAgentDimension,
|
|
81
81
|
observations: ReadonlyArray<RouteObservation>,
|
|
82
82
|
): RoutePrior {
|
|
@@ -64,19 +64,6 @@ export interface DeclaredScopeReplacementNotice {
|
|
|
64
64
|
message: string;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
export interface LegacyScopeInferenceNotice {
|
|
68
|
-
code: "legacy_scope_inferred" | "legacy_scope_empty";
|
|
69
|
-
level: "warning";
|
|
70
|
-
paths: ReadonlyArray<{
|
|
71
|
-
path: string;
|
|
72
|
-
policy: "working-context" | "write-boundary";
|
|
73
|
-
provenance: DispatchPathProvenanceKind;
|
|
74
|
-
source: DispatchPathProvenanceSource;
|
|
75
|
-
confidence: DispatchPathConfidence;
|
|
76
|
-
}>;
|
|
77
|
-
message: string;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
67
|
export type DispatchPathScopeInferenceErrorCode = "legacy_scope_path_absolute" | "legacy_scope_path_malformed";
|
|
81
68
|
|
|
82
69
|
export class DispatchPathScopeInferenceError extends Error {
|
|
@@ -320,51 +307,3 @@ export function declaredScopeReplacementNotice(scope: DispatchPathScope): Declar
|
|
|
320
307
|
)}. Those paths did not select project rules or expand worker authority.`,
|
|
321
308
|
};
|
|
322
309
|
}
|
|
323
|
-
|
|
324
|
-
function legacyNoticePaths(scope: DispatchPathScope): LegacyScopeInferenceNotice["paths"] {
|
|
325
|
-
const paths: Array<LegacyScopeInferenceNotice["paths"][number]> = [];
|
|
326
|
-
for (const [policy, entries] of [
|
|
327
|
-
["working-context", scope.provenance.workingContextPaths],
|
|
328
|
-
["write-boundary", scope.provenance.writeBoundaries],
|
|
329
|
-
] as const) {
|
|
330
|
-
for (const entry of entries) {
|
|
331
|
-
for (const evidence of entry.evidence) {
|
|
332
|
-
paths.push({
|
|
333
|
-
path: entry.path,
|
|
334
|
-
policy,
|
|
335
|
-
provenance: evidence.provenance,
|
|
336
|
-
source: evidence.source,
|
|
337
|
-
confidence: evidence.confidence,
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
return paths;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
/** Render the operator-visible warning for a legacy scope resolution. */
|
|
346
|
-
export function legacyScopeInferenceNotice(scope: DispatchPathScope): LegacyScopeInferenceNotice | null {
|
|
347
|
-
if (scope.source !== "inferred") return null;
|
|
348
|
-
const paths = legacyNoticePaths(scope);
|
|
349
|
-
if (paths.length === 0) {
|
|
350
|
-
return {
|
|
351
|
-
code: "legacy_scope_empty",
|
|
352
|
-
level: "warning",
|
|
353
|
-
paths,
|
|
354
|
-
message:
|
|
355
|
-
"[dispatch scope] legacy dispatch has no declared intent and inferred no policy-bearing paths. Path-scoped rules received no inferred match input, and worker authority did not expand.",
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
const rendered = paths
|
|
359
|
-
.map(
|
|
360
|
-
(entry) =>
|
|
361
|
-
`${entry.policy} ${entry.path} (provenance=${entry.provenance} source=${entry.source} confidence=${entry.confidence})`,
|
|
362
|
-
)
|
|
363
|
-
.join("; ");
|
|
364
|
-
return {
|
|
365
|
-
code: "legacy_scope_inferred",
|
|
366
|
-
level: "warning",
|
|
367
|
-
paths,
|
|
368
|
-
message: `[dispatch scope] legacy dispatch resolved policy-bearing scope without declared intent: ${rendered}. Review this scope before execution.`,
|
|
369
|
-
};
|
|
370
|
-
}
|
|
@@ -61,9 +61,9 @@ function completedReroutes(
|
|
|
61
61
|
|
|
62
62
|
function requestedNodeId(req: DispatchRequest, settings: Readonly<ClioSettings> | undefined): string | null {
|
|
63
63
|
if (req.node !== undefined && req.node.trim().length > 0) return req.node.trim();
|
|
64
|
-
const workers = settings?.
|
|
64
|
+
const workers = settings?.fleet;
|
|
65
65
|
if (!workers) return null;
|
|
66
|
-
const profileName = req.workerProfile ?? workers.
|
|
66
|
+
const profileName = req.workerProfile ?? workers.agentProfiles?.[req.agentId];
|
|
67
67
|
if (!profileName) return null;
|
|
68
68
|
const pin = workers.profiles?.[profileName]?.node;
|
|
69
69
|
return pin !== undefined && pin.trim().length > 0 ? pin.trim() : null;
|
|
@@ -49,7 +49,7 @@ function canonicalJson(value: unknown): string {
|
|
|
49
49
|
throw new Error(`response schema digest cannot represent ${typeof value}`);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
function canonicalResponseSchemaDigest(schema: Record<string, unknown>): string {
|
|
53
53
|
return createHash("sha256").update(canonicalJson(schema), "utf8").digest("hex");
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -123,7 +123,7 @@ export const RECEIPT_INTEGRITY_FIELD_COVERAGE = {
|
|
|
123
123
|
dynamicHash: true,
|
|
124
124
|
promptSignature: true,
|
|
125
125
|
toolSignature: true,
|
|
126
|
-
|
|
126
|
+
clioCoderVersion: true,
|
|
127
127
|
piMonoVersion: true,
|
|
128
128
|
platform: true,
|
|
129
129
|
nodeVersion: true,
|
|
@@ -172,8 +172,14 @@ function selectedReceiptFields(
|
|
|
172
172
|
return result;
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
function receiptDigestFields(receipt: RunReceipt | RunReceiptDraft): Record<string, unknown> {
|
|
175
|
+
function receiptDigestFields(receipt: RunReceipt | RunReceiptDraft, legacyNaming = false): Record<string, unknown> {
|
|
176
176
|
const result = selectedReceiptFields(receipt, RECEIPT_FIELDS);
|
|
177
|
+
if (legacyNaming) {
|
|
178
|
+
const source = receipt as unknown as Record<string, unknown>;
|
|
179
|
+
const version = source.clioVersion ?? source.clioCoderVersion;
|
|
180
|
+
delete result.clioCoderVersion;
|
|
181
|
+
if (version !== undefined) result.clioVersion = version;
|
|
182
|
+
}
|
|
177
183
|
result.briefing = receipt.briefing ?? null;
|
|
178
184
|
result.outcomeCode = receipt.outcomeCode ?? null;
|
|
179
185
|
result.steering = receipt.steering ?? null;
|
|
@@ -227,24 +233,29 @@ function ledgerDigestFields(envelope: RunEnvelope): Record<string, unknown> {
|
|
|
227
233
|
};
|
|
228
234
|
}
|
|
229
235
|
|
|
230
|
-
function integrityPayload(
|
|
236
|
+
function integrityPayload(
|
|
237
|
+
receipt: RunReceipt | RunReceiptDraft,
|
|
238
|
+
envelope: RunEnvelope,
|
|
239
|
+
legacyNaming = false,
|
|
240
|
+
): Record<string, unknown> {
|
|
231
241
|
return {
|
|
232
|
-
contract: "clio.runReceipt.integrity",
|
|
242
|
+
contract: legacyNaming ? "clio.runReceipt.integrity" : "clio-coder.runReceipt.integrity",
|
|
233
243
|
version: RUN_RECEIPT_INTEGRITY_VERSION,
|
|
234
244
|
sources: ["receipt", "run-ledger"],
|
|
235
|
-
receipt: receiptDigestFields(receipt),
|
|
245
|
+
receipt: receiptDigestFields(receipt, legacyNaming),
|
|
236
246
|
ledger: ledgerDigestFields(envelope),
|
|
237
247
|
};
|
|
238
248
|
}
|
|
239
249
|
|
|
240
|
-
|
|
250
|
+
function computeReceiptIntegrity(
|
|
241
251
|
receipt: RunReceipt | RunReceiptDraft,
|
|
242
252
|
envelope: RunEnvelope,
|
|
253
|
+
legacyNaming = false,
|
|
243
254
|
): RunReceiptIntegrity {
|
|
244
255
|
return {
|
|
245
256
|
version: RUN_RECEIPT_INTEGRITY_VERSION,
|
|
246
257
|
algorithm: RUN_RECEIPT_INTEGRITY_ALGORITHM,
|
|
247
|
-
digest: sha256(canonicalJson(integrityPayload(receipt, envelope))),
|
|
258
|
+
digest: sha256(canonicalJson(integrityPayload(receipt, envelope, legacyNaming))),
|
|
248
259
|
};
|
|
249
260
|
}
|
|
250
261
|
|
|
@@ -385,7 +396,8 @@ export function verifyReceiptIntegrity(receipt: RunReceipt, envelope: RunEnvelop
|
|
|
385
396
|
return { ok: false, reason: `ledger mismatch: ${mismatch}` };
|
|
386
397
|
}
|
|
387
398
|
const expected = computeReceiptIntegrity(receipt, envelope);
|
|
388
|
-
|
|
399
|
+
const legacyExpected = computeReceiptIntegrity(receipt, envelope, true);
|
|
400
|
+
if (expected.digest !== receipt.integrity.digest && legacyExpected.digest !== receipt.integrity.digest) {
|
|
389
401
|
return { ok: false, reason: "integrity mismatch" };
|
|
390
402
|
}
|
|
391
403
|
return { ok: true };
|
|
@@ -599,31 +599,8 @@ export function getDispatchReservation(ownerId: string): DispatchReservationReco
|
|
|
599
599
|
return record ? copyRecord(record) : null;
|
|
600
600
|
}
|
|
601
601
|
|
|
602
|
-
export function listDispatchReservations(): ReadonlyArray<DispatchReservationRecord> {
|
|
603
|
-
return readStore();
|
|
604
|
-
}
|
|
605
|
-
|
|
606
602
|
export function reservedBudgetUsd(): number {
|
|
607
603
|
return readStore()
|
|
608
604
|
.filter((record) => record.status === "active")
|
|
609
605
|
.reduce((sum, record) => sum + outstandingBudget(record), 0);
|
|
610
606
|
}
|
|
611
|
-
|
|
612
|
-
export function reservedCapacity(): {
|
|
613
|
-
globalSlots: number;
|
|
614
|
-
nodeSlots: Readonly<Record<string, number>>;
|
|
615
|
-
endpointSlots: Readonly<Record<string, number>>;
|
|
616
|
-
} {
|
|
617
|
-
let globalSlots = 0;
|
|
618
|
-
const nodeSlots: Record<string, number> = {};
|
|
619
|
-
const endpointSlots: Record<string, number> = {};
|
|
620
|
-
for (const record of readStore().filter((entry) => entry.status === "active")) {
|
|
621
|
-
const allocation = reservationAllocation(outstandingTasks(record));
|
|
622
|
-
globalSlots += allocation.globalSlots;
|
|
623
|
-
for (const [nodeId, count] of Object.entries(allocation.nodeSlots))
|
|
624
|
-
nodeSlots[nodeId] = (nodeSlots[nodeId] ?? 0) + count;
|
|
625
|
-
for (const [endpointKey, count] of Object.entries(allocation.endpointSlots))
|
|
626
|
-
endpointSlots[endpointKey] = (endpointSlots[endpointKey] ?? 0) + count;
|
|
627
|
-
}
|
|
628
|
-
return { globalSlots, nodeSlots, endpointSlots };
|
|
629
|
-
}
|
|
@@ -597,7 +597,7 @@ function readinessHashProjection(report: RouteReadinessReport): readonly [boolea
|
|
|
597
597
|
* `decisionDurationMs`, which is a measurement of the decision rather than an
|
|
598
598
|
* input to it, so a replay on a faster machine still reproduces the hash.
|
|
599
599
|
*/
|
|
600
|
-
|
|
600
|
+
function routeDecisionHash(input: RouteDecisionInput): string {
|
|
601
601
|
// Arrays give every field an explicit position, so native JSON serialization
|
|
602
602
|
// is deterministic without recursively sorting hundreds of short-lived
|
|
603
603
|
// objects at the maximum universe bound. Candidate identity uses the same
|
|
@@ -137,7 +137,7 @@ function retireHistory(path: string, version: unknown): void {
|
|
|
137
137
|
const retired = `${path}.v${String(version)}.${stamp}.retired`;
|
|
138
138
|
renameSync(path, retired);
|
|
139
139
|
process.stderr.write(
|
|
140
|
-
`[clio:dispatch] route history v${String(version)} is retired; starting empty at v${ROUTE_HISTORY_VERSION}. Prior observations: ${retired}\n`,
|
|
140
|
+
`[clio-coder:dispatch] route history v${String(version)} is retired; starting empty at v${ROUTE_HISTORY_VERSION}. Prior observations: ${retired}\n`,
|
|
141
141
|
);
|
|
142
142
|
}
|
|
143
143
|
|
|
@@ -146,7 +146,7 @@ function rate(values: ReadonlyArray<boolean>, fallback = 0): number {
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
/** Conservative 95% Wilson lower confidence bound for a Bernoulli success rate. */
|
|
149
|
-
|
|
149
|
+
function wilsonLowerBound(successes: number, observations: number, z = 1.96): number {
|
|
150
150
|
if (observations <= 0) return 0;
|
|
151
151
|
const proportion = successes / observations;
|
|
152
152
|
const z2 = z * z;
|
|
@@ -90,31 +90,3 @@ export function evaluateRouteReadiness(input: RouteReadinessInput): RouteReadine
|
|
|
90
90
|
labelsNeeded: Math.max(0, MINIMUM_ACTIVE_QUALITY_LABELS - estimate.qualityLabeledCount),
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Human-readable one-liners for a refusal message. The wording names the
|
|
96
|
-
* missing evidence, so an operator who sees an active refusal can tell whether
|
|
97
|
-
* to wait for measurements or to fix a stale fact.
|
|
98
|
-
*/
|
|
99
|
-
export function describeReadinessGap(gap: ReadinessGap): string {
|
|
100
|
-
switch (gap) {
|
|
101
|
-
case "hard-constraint-validity-below-one":
|
|
102
|
-
return "hard-constraint evaluation was not consistently valid over the retained window";
|
|
103
|
-
case "integrity-failures-in-window":
|
|
104
|
-
return "the retained window contains receipt or source integrity failures";
|
|
105
|
-
case "insufficient-quality-labels":
|
|
106
|
-
return `fewer than ${MINIMUM_ACTIVE_QUALITY_LABELS} quality-labeled outcomes for this route and role`;
|
|
107
|
-
case "quality-lower-bound-below-posture-floor":
|
|
108
|
-
return "the conservative quality lower bound is below the posture floor";
|
|
109
|
-
case "quality-lower-bound-below-requested-minimum":
|
|
110
|
-
return "the conservative quality lower bound is below the request's minimumQuality";
|
|
111
|
-
case "reliability-below-posture-floor":
|
|
112
|
-
return "route-attributable reliability is below the posture floor";
|
|
113
|
-
case "cost-upper-bound-unknown":
|
|
114
|
-
return "the route has no conservative cost upper bound";
|
|
115
|
-
case "route-facts-stale":
|
|
116
|
-
return "node, endpoint, resource, capacity, or settings facts are stale";
|
|
117
|
-
case "decision-latency-above-budget":
|
|
118
|
-
return `shadow decision p95 exceeds ${DECISION_LATENCY_BUDGET_MS} ms at the configured universe bound`;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
|
|
41
41
|
import { appendFileSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync } from "node:fs";
|
|
42
42
|
import { join } from "node:path";
|
|
43
|
+
import { normalizeClioCoderEventType } from "../../core/naming-events.js";
|
|
43
44
|
import { clioStateDir, stateRootRemoved } from "../../core/xdg.js";
|
|
44
45
|
|
|
45
46
|
/** Directory name under the state root holding one subdirectory per run. */
|
|
@@ -136,7 +137,7 @@ function parseEnvFlag(raw: string | undefined): boolean | undefined {
|
|
|
136
137
|
}
|
|
137
138
|
|
|
138
139
|
/** env override > configured settings > on. */
|
|
139
|
-
|
|
140
|
+
function runEventJournalEnabled(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
140
141
|
return parseEnvFlag(env[RUN_EVENT_JOURNAL_ENV_VAR]) ?? configuredEnabled ?? true;
|
|
141
142
|
}
|
|
142
143
|
|
|
@@ -150,7 +151,7 @@ export function runEventJournalRoot(): string {
|
|
|
150
151
|
}
|
|
151
152
|
|
|
152
153
|
/** One run's journal directory. */
|
|
153
|
-
|
|
154
|
+
function runEventJournalDir(runId: string, root?: string): string {
|
|
154
155
|
return join(root ?? runEventJournalRoot(), runId);
|
|
155
156
|
}
|
|
156
157
|
|
|
@@ -247,10 +248,10 @@ export interface CreateRunEventJournalOptions {
|
|
|
247
248
|
isEnabled?: () => boolean;
|
|
248
249
|
}
|
|
249
250
|
|
|
250
|
-
|
|
251
|
+
function createRunEventJournal(options: CreateRunEventJournalOptions = {}): RunEventJournal {
|
|
251
252
|
const capBytes = options.capBytes ?? RUN_EVENT_JOURNAL_CAP_BYTES;
|
|
252
253
|
const flushBytes = options.flushBytes ?? RUN_EVENT_JOURNAL_FLUSH_BYTES;
|
|
253
|
-
const warn = options.warn ?? ((message: string) => process.stderr.write(`[clio:journal] ${message}\n`));
|
|
254
|
+
const warn = options.warn ?? ((message: string) => process.stderr.write(`[clio-coder:journal] ${message}\n`));
|
|
254
255
|
const now = options.now ?? (() => new Date());
|
|
255
256
|
const isEnabled = options.isEnabled ?? (() => runEventJournalEnabled());
|
|
256
257
|
const runs = new Map<string, RunJournalState>();
|
|
@@ -494,7 +495,7 @@ function parseJournalLine(raw: string): RunEventJournalLine | null {
|
|
|
494
495
|
seq: record.seq,
|
|
495
496
|
at: record.at,
|
|
496
497
|
kind: "event",
|
|
497
|
-
type: record.type,
|
|
498
|
+
type: normalizeClioCoderEventType(record.type),
|
|
498
499
|
...(detail === undefined ? {} : { detail }),
|
|
499
500
|
};
|
|
500
501
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pure aggregation helpers for the per-tool stats folded into a RunReceipt.
|
|
3
3
|
*
|
|
4
|
-
* Sourced from the worker's ToolTelemetry stream (`
|
|
4
|
+
* Sourced from the worker's ToolTelemetry stream (`clio_coder_tool_finish` IPC
|
|
5
5
|
* events). Kept as a small standalone module so receipts have a single source
|
|
6
6
|
* of truth for the aggregation invariants, and so loops, retries, errors,
|
|
7
7
|
* blocked admissions, and parallel-batch tool calls all flow through one
|
|
@@ -26,13 +26,7 @@ import { AI_AGENT_NAME } from "../../core/agent-environment.js";
|
|
|
26
26
|
import { shellQuote } from "../../core/shell-quote.js";
|
|
27
27
|
import type { WorkerSpec } from "../../worker/spec-contract.js";
|
|
28
28
|
import type { RunNodeIdentity } from "./types.js";
|
|
29
|
-
import {
|
|
30
|
-
type SpawnedWorker,
|
|
31
|
-
type SpawnOptions,
|
|
32
|
-
spawnNativeWorker,
|
|
33
|
-
spawnWorkerProcess,
|
|
34
|
-
type WorkerProcessOptions,
|
|
35
|
-
} from "./worker-spawn.js";
|
|
29
|
+
import { type SpawnedWorker, spawnWorkerProcess, type WorkerProcessOptions } from "./worker-spawn.js";
|
|
36
30
|
|
|
37
31
|
export type WorkerTransportKind = "local" | "ssh";
|
|
38
32
|
|
|
@@ -94,17 +88,6 @@ export function localNodeIdentity(): RunNodeIdentity {
|
|
|
94
88
|
return { id: LOCAL_NODE_ID, kind: "local" };
|
|
95
89
|
}
|
|
96
90
|
|
|
97
|
-
export function createLocalWorkerTransport(opts?: Omit<SpawnOptions, "cwd">): WorkerTransport {
|
|
98
|
-
return {
|
|
99
|
-
kind: "local",
|
|
100
|
-
node: localNodeIdentity(),
|
|
101
|
-
spawn(spec, spawnOpts) {
|
|
102
|
-
// The caller's per-spawn options ride over the transport's own defaults.
|
|
103
|
-
return spawnNativeWorker(spec, { ...opts, ...spawnOpts });
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
|
|
108
91
|
const DEFAULT_SSH_CONNECT_TIMEOUT_SEC = 10;
|
|
109
92
|
const DEFAULT_REMOTE_CLIO_ENTRY = "clio-coder worker";
|
|
110
93
|
|
|
@@ -126,7 +109,7 @@ function remoteEnvAssignments(node: SshNodeEndpoint): string {
|
|
|
126
109
|
return `AI_AGENT=${AI_AGENT_NAME} CLIO_CODER_RESIDENCY=${residency} CLIO_CODER_WORKER_PGID=$$${labelAssignment}`;
|
|
127
110
|
}
|
|
128
111
|
|
|
129
|
-
|
|
112
|
+
function buildRemoteWorkerCommand(node: SshNodeEndpoint, cwd: string): string {
|
|
130
113
|
const entry =
|
|
131
114
|
node.clioCoderEntry !== undefined && node.clioCoderEntry.trim().length > 0
|
|
132
115
|
? node.clioCoderEntry.trim()
|
|
@@ -506,7 +506,7 @@ export interface RunEnvelope {
|
|
|
506
506
|
|
|
507
507
|
/**
|
|
508
508
|
* Per-tool aggregates folded into a receipt at run completion. Sourced from
|
|
509
|
-
* the worker's ToolTelemetry stream (`
|
|
509
|
+
* the worker's ToolTelemetry stream (`clio_coder_tool_finish` IPC events). Sorted
|
|
510
510
|
* by tool name on write so digests are deterministic across runs.
|
|
511
511
|
*/
|
|
512
512
|
export interface ToolCallStat {
|
|
@@ -570,7 +570,7 @@ export interface RunReceiptDelegation {
|
|
|
570
570
|
toolCallsRequested: number;
|
|
571
571
|
toolCallsApproved: number;
|
|
572
572
|
toolCallsDenied: number;
|
|
573
|
-
toolGovernance: "clio-policy" | "agent-managed" | "deny-all";
|
|
573
|
+
toolGovernance: "clio-coder-policy" | "agent-managed" | "deny-all";
|
|
574
574
|
toolCallLog: DelegationToolCallLogEntry[];
|
|
575
575
|
}
|
|
576
576
|
|
|
@@ -810,7 +810,7 @@ export interface RunReceipt {
|
|
|
810
810
|
dynamicHash?: string | null;
|
|
811
811
|
promptSignature?: string | null;
|
|
812
812
|
toolSignature?: string | null;
|
|
813
|
-
|
|
813
|
+
clioCoderVersion: string;
|
|
814
814
|
piMonoVersion: string;
|
|
815
815
|
platform: string;
|
|
816
816
|
nodeVersion: string;
|
|
@@ -69,7 +69,7 @@ export {
|
|
|
69
69
|
*/
|
|
70
70
|
export function computeSettingsFingerprint(settings: unknown): string {
|
|
71
71
|
return createHash("sha256")
|
|
72
|
-
.update(`clio.settings:${canonicalJson(settings)}`, "utf8")
|
|
72
|
+
.update(`clio-coder.settings:${canonicalJson(settings)}`, "utf8")
|
|
73
73
|
.digest("hex");
|
|
74
74
|
}
|
|
75
75
|
|
|
@@ -151,7 +151,7 @@ export function approvedIdentityForSpec(spec: {
|
|
|
151
151
|
|
|
152
152
|
function workerSpecDigestOf(spec: unknown): string {
|
|
153
153
|
return createHash("sha256")
|
|
154
|
-
.update(`clio.workerSpec:${canonicalJson(spec)}`, "utf8")
|
|
154
|
+
.update(`clio-coder.workerSpec:${canonicalJson(spec)}`, "utf8")
|
|
155
155
|
.digest("hex");
|
|
156
156
|
}
|
|
157
157
|
|
|
@@ -58,14 +58,15 @@ export function parseEvalArtifactV4(value: unknown, source: string): EvalArtifac
|
|
|
58
58
|
value.aggregates === undefined
|
|
59
59
|
? undefined
|
|
60
60
|
: (readArray(value, source, "aggregates") as NonNullable<EvalArtifactV4["aggregates"]>);
|
|
61
|
+
const clioCoder = asRecord(value.clioCoder ?? value.clio, `${source}.clioCoder`);
|
|
61
62
|
return {
|
|
62
63
|
version: 4,
|
|
63
64
|
evalId: readString(value, source, "evalId"),
|
|
64
65
|
suite: { id: readString(suite, `${source}.suite`, "id"), hash: readString(suite, `${source}.suite`, "hash") },
|
|
65
|
-
|
|
66
|
-
version: readString(
|
|
67
|
-
commit: readNullableString(
|
|
68
|
-
entry: readString(
|
|
66
|
+
clioCoder: {
|
|
67
|
+
version: readString(clioCoder, `${source}.clioCoder`, "version"),
|
|
68
|
+
commit: readNullableString(clioCoder, `${source}.clioCoder`, "commit"),
|
|
69
|
+
entry: readString(clioCoder, `${source}.clioCoder`, "entry"),
|
|
69
70
|
},
|
|
70
71
|
environment: {
|
|
71
72
|
platform: readString(asRecord(value.environment, `${source}.environment`), `${source}.environment`, "platform"),
|
|
@@ -62,14 +62,6 @@ export function resolveMetricAssertion(
|
|
|
62
62
|
return { actual, unresolved: actual === null, holds: comparisonHolds(assertion, actual) };
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
export function evaluateMetricAssertion(
|
|
66
|
-
assertion: EvalMetricAssertion,
|
|
67
|
-
metrics: Readonly<Record<string, unknown>>,
|
|
68
|
-
artifact?: EvalArtifactV4,
|
|
69
|
-
): boolean {
|
|
70
|
-
return comparisonHolds(assertion, metricValue(assertion.metric, metrics, artifact));
|
|
71
|
-
}
|
|
72
|
-
|
|
73
65
|
function comparisonHolds(assertion: EvalMetricAssertion, actual: number | string | boolean | null): boolean {
|
|
74
66
|
switch (assertion.op) {
|
|
75
67
|
case "lt":
|
|
@@ -128,7 +128,7 @@ function promptFragmentIdentities(
|
|
|
128
128
|
.sort((left, right) => left.id.localeCompare(right.id));
|
|
129
129
|
}
|
|
130
130
|
if (recipe === null) return [];
|
|
131
|
-
const selected = ["identity.clio-worker", "operating.contract", "operating.worker"];
|
|
131
|
+
const selected = ["identity.clio-coder-worker", "operating.contract", "operating.worker"];
|
|
132
132
|
if (autonomy !== null) selected.push(`safety.${autonomy}`);
|
|
133
133
|
const fragments: EvalPromptFragmentIdentityV1[] = [];
|
|
134
134
|
try {
|
|
@@ -90,13 +90,6 @@ export function createTokenUsageFold(): EvalTokenUsageFold {
|
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
/** Whole-buffer form of {@link createTokenUsageFold}. */
|
|
94
|
-
export function tokenUsageFromJsonl(stream: string): EvalTokenStreamUsage {
|
|
95
|
-
const fold = createTokenUsageFold();
|
|
96
|
-
fold.push(stream);
|
|
97
|
-
return fold.usage();
|
|
98
|
-
}
|
|
99
|
-
|
|
100
93
|
export function addTokenStreamUsage(left: EvalTokenStreamUsage, right: EvalTokenStreamUsage): EvalTokenStreamUsage {
|
|
101
94
|
return {
|
|
102
95
|
measured: left.measured || right.measured,
|
|
@@ -14,7 +14,7 @@ export function renderEvalReport(artifact: EvalRunArtifact, artifactPath?: strin
|
|
|
14
14
|
lines.splice(
|
|
15
15
|
2,
|
|
16
16
|
0,
|
|
17
|
-
`
|
|
17
|
+
`clioCoder: ${artifact.clioCoder.version} commit=${artifact.clioCoder.commit ?? "unknown"} entry=${artifact.clioCoder.entry}`,
|
|
18
18
|
);
|
|
19
19
|
lines.splice(3, 0, `environment: ${artifact.environment.platform} node=${artifact.environment.node}`);
|
|
20
20
|
const evidenceIds = uniqueEvidenceIds(artifact);
|
|
@@ -43,7 +43,7 @@ export async function runEvalTasks(options: RunEvalOptions): Promise<EvalRunArti
|
|
|
43
43
|
evalId: options.evalId,
|
|
44
44
|
taskFile: options.loadedTaskFile.path,
|
|
45
45
|
taskFileHash: options.loadedTaskFile.contentHash,
|
|
46
|
-
|
|
46
|
+
clioCoder: evalClioProvenance(options.provenance),
|
|
47
47
|
environment: evalEnvironmentProvenance(),
|
|
48
48
|
target: options.provenance?.target ?? null,
|
|
49
49
|
model: options.provenance?.model ?? null,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
2
|
+
import { normalizeClioCoderEventRecord } from "../../../core/naming-events.js";
|
|
2
3
|
import { shellQuote } from "../../../core/shell-quote.js";
|
|
3
4
|
import { clioStateDir } from "../../../core/xdg.js";
|
|
4
5
|
import {
|
|
@@ -92,7 +93,7 @@ type ToolCallMetrics = {
|
|
|
92
93
|
type ToolOutcome = "ok" | "error" | "blocked";
|
|
93
94
|
|
|
94
95
|
/** Fold the terminal tool events emitted by `clio-coder run --json`. */
|
|
95
|
-
|
|
96
|
+
function toolCallMetricsFromJsonl(stdout: string): ToolCallMetrics {
|
|
96
97
|
const executionEnds: ToolCallMetrics = { totalCalls: 0, failed: 0, blocked: 0 };
|
|
97
98
|
const canonicalFinishes: ToolCallMetrics = { totalCalls: 0, failed: 0, blocked: 0 };
|
|
98
99
|
const seenExecutionEnds = new Set<string>();
|
|
@@ -104,7 +105,7 @@ export function toolCallMetricsFromJsonl(stdout: string): ToolCallMetrics {
|
|
|
104
105
|
try {
|
|
105
106
|
const parsed: unknown = JSON.parse(line);
|
|
106
107
|
if (!isRecord(parsed)) continue;
|
|
107
|
-
event = parsed;
|
|
108
|
+
event = normalizeClioCoderEventRecord(parsed);
|
|
108
109
|
} catch {
|
|
109
110
|
continue;
|
|
110
111
|
}
|
|
@@ -119,7 +120,7 @@ export function toolCallMetricsFromJsonl(stdout: string): ToolCallMetrics {
|
|
|
119
120
|
continue;
|
|
120
121
|
}
|
|
121
122
|
|
|
122
|
-
if (event.type !== "
|
|
123
|
+
if (event.type !== "clio_coder_tool_finish" || !isRecord(event.payload)) continue;
|
|
123
124
|
const outcome = toolOutcome(event.payload);
|
|
124
125
|
if (outcome === undefined) continue;
|
|
125
126
|
const callId = stringField(event.payload, "toolCallId") ?? stringField(event, "toolCallId");
|
|
@@ -148,7 +149,7 @@ interface BehavioralToolTerminal {
|
|
|
148
149
|
* bounded counters against the suite's explicit public allowlist and decoy
|
|
149
150
|
* list; they never become behavioral fact values or evidence excerpts.
|
|
150
151
|
*/
|
|
151
|
-
|
|
152
|
+
function toolBehaviorMetricEntriesFromJsonl(
|
|
152
153
|
stdout: string,
|
|
153
154
|
cwd: string,
|
|
154
155
|
readObservation?: { allowedPaths: string[]; decoyPaths: string[] },
|
|
@@ -166,7 +167,7 @@ export function toolBehaviorMetricEntriesFromJsonl(
|
|
|
166
167
|
try {
|
|
167
168
|
const parsed: unknown = JSON.parse(line);
|
|
168
169
|
if (!isRecord(parsed)) continue;
|
|
169
|
-
event = parsed;
|
|
170
|
+
event = normalizeClioCoderEventRecord(parsed);
|
|
170
171
|
} catch {
|
|
171
172
|
continue;
|
|
172
173
|
}
|
|
@@ -188,7 +189,7 @@ export function toolBehaviorMetricEntriesFromJsonl(
|
|
|
188
189
|
executionEnds.push({ callId, tool, outcome: toolOutcome(event) ?? (event.isError === true ? "error" : "ok") });
|
|
189
190
|
continue;
|
|
190
191
|
}
|
|
191
|
-
if (event.type !== "
|
|
192
|
+
if (event.type !== "clio_coder_tool_finish" || !isRecord(event.payload)) continue;
|
|
192
193
|
const outcome = toolOutcome(event.payload);
|
|
193
194
|
const tool = stringField(event.payload, "tool");
|
|
194
195
|
if (outcome === undefined || tool === undefined) continue;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { performance } from "node:perf_hooks";
|
|
3
|
+
import { normalizeClioCoderEventType } from "../../../core/naming-events.js";
|
|
3
4
|
import type { RunReceipt } from "../../dispatch/types.js";
|
|
4
5
|
import type { SessionEntry } from "../../session/entries.js";
|
|
5
6
|
import { createEvalCallLedgerFold } from "../metrics/call-ledger-stream.js";
|
|
@@ -226,7 +227,7 @@ export interface JsonlMetricCapture {
|
|
|
226
227
|
* split JSON arbitrarily; oversized non-metric lines are discarded without
|
|
227
228
|
* growing memory.
|
|
228
229
|
*/
|
|
229
|
-
|
|
230
|
+
function createJsonlMetricCapture(): JsonlMetricCapture {
|
|
230
231
|
const lines: string[] = [];
|
|
231
232
|
let storedBytes = 0;
|
|
232
233
|
let pending = "";
|
|
@@ -287,7 +288,7 @@ export function createJsonlMetricCapture(): JsonlMetricCapture {
|
|
|
287
288
|
}
|
|
288
289
|
|
|
289
290
|
function compactMetricEvent(event: Record<string, unknown>): Record<string, unknown> | null {
|
|
290
|
-
const type = event.type;
|
|
291
|
+
const type = typeof event.type === "string" ? normalizeClioCoderEventType(event.type) : event.type;
|
|
291
292
|
if (type === "tool_execution_start") {
|
|
292
293
|
const toolName = stringField(event, "toolName");
|
|
293
294
|
if (toolName !== "dispatch" && toolName !== "code_nav" && toolName !== "read" && toolName !== "grep") {
|
|
@@ -315,7 +316,7 @@ function compactMetricEvent(event: Record<string, unknown>): Record<string, unkn
|
|
|
315
316
|
...(stringField(event, "outcome") !== undefined ? { outcome: stringField(event, "outcome") } : {}),
|
|
316
317
|
};
|
|
317
318
|
}
|
|
318
|
-
if (type !== "
|
|
319
|
+
if (type !== "clio_coder_tool_finish" || !isRecord(event.payload)) return null;
|
|
319
320
|
return {
|
|
320
321
|
type,
|
|
321
322
|
payload: {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { EvalArtifactResultV4 } from "./artifact.js";
|
|
2
2
|
import type { EvalBehaviorCategoryV1, EvalBehaviorLabelV1 } from "./behavioral.js";
|
|
3
|
+
import { normalizeEvalSchemaId } from "./naming.js";
|
|
3
4
|
|
|
4
|
-
export const EVAL_BEHAVIOR_METRICS_SCHEMA_V1 = "clio.eval.behavior.metrics.v1" as const;
|
|
5
|
+
export const EVAL_BEHAVIOR_METRICS_SCHEMA_V1 = "clio-coder.eval.behavior.metrics.v1" as const;
|
|
5
6
|
|
|
6
7
|
export const EVAL_BEHAVIOR_METRIC_DEFINITIONS_V1 = [
|
|
7
8
|
{
|
|
@@ -136,7 +137,7 @@ export function buildEvalBehaviorMetricsV1(
|
|
|
136
137
|
|
|
137
138
|
export function parseEvalBehaviorMetricsV1(value: unknown, source = "behavioral metrics"): EvalBehaviorMetricsV1 {
|
|
138
139
|
const record = asRecord(value, source);
|
|
139
|
-
if (record.schema !== EVAL_BEHAVIOR_METRICS_SCHEMA_V1) {
|
|
140
|
+
if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_METRICS_SCHEMA_V1) {
|
|
140
141
|
throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_METRICS_SCHEMA_V1}`);
|
|
141
142
|
}
|
|
142
143
|
const target = asRecord(record.target, `${source}.target`);
|