@iowarp/clio-coder 0.3.9 → 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 +92 -0
- package/NOTICE +33 -0
- package/README.md +121 -16
- package/dist/{acp-7LOELQFP.js → acp-ZILU3AUO.js} +19 -18
- package/dist/{agents-FIBG2SHA.js → agents-HYWGBGQR.js} +53 -39
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-OI4LIH2I.js → auth-N3QT7CBO.js} +24 -21
- package/dist/{builtins-AD25UL3C.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-I4HZDVNP.js → chunk-2LEAKD4C.js} +2 -3
- package/dist/{chunk-465CC7FK.js → chunk-2NM363SV.js} +60 -64
- package/dist/{chunk-4H6ULJ3H.js → chunk-2VG7KLYV.js} +1046 -1370
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-NZU6YDNV.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-47CMYGET.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/chunk-42FMPA75.js +101 -0
- package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
- package/dist/{chunk-IHKBWSXF.js → chunk-5QIAJV2D.js} +3 -3
- package/dist/chunk-5YHDIDBP.js +97 -0
- package/dist/chunk-6CCS4G3W.js +1529 -0
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-BVDVID7E.js → chunk-6FN3E6KX.js} +6 -6
- package/dist/{chunk-DG4M6ZUE.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-3MRC2YSQ.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/chunk-6NJQITNH.js +1412 -0
- package/dist/chunk-6VC4OV3Z.js +365 -0
- package/dist/{chunk-LU7P4LHA.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-5T7RBWN2.js → chunk-74YWRRU5.js} +9 -8
- package/dist/{chunk-VPTUJU4P.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-CA42X6KT.js → chunk-7OBGU7UB.js} +7 -7
- package/dist/{chunk-56KB5IJP.js → chunk-7PWAODYW.js} +3 -3
- package/dist/chunk-7RY5VZPH.js +573 -0
- package/dist/{chunk-OEDBCISO.js → chunk-ABLSQ6JX.js} +3 -3
- package/dist/{chunk-5HFBWUMU.js → chunk-AFKWHWXF.js} +13 -23
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-WXCJ7VME.js → chunk-AKB4GYDL.js} +7 -7
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-4LJX2PUC.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-QQ7EKM72.js → chunk-BDPT6GTK.js} +13 -61
- package/dist/chunk-BJGUKIG4.js +302 -0
- package/dist/chunk-BMS5RKQY.js +27 -0
- package/dist/{chunk-TD7UE2L5.js → chunk-BTGG6BG2.js} +81 -40
- 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-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
- package/dist/{chunk-HJB5IUKP.js → chunk-C537JADH.js} +18 -18
- package/dist/{chunk-774ILSRL.js → chunk-CDNVLKUX.js} +5 -4
- package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
- package/dist/{chunk-AEYBF3TB.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/chunk-D4CJV46V.js +462 -0
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-5PVQ4SRS.js → chunk-E67WX76H.js} +10 -126
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-3DUR4WUA.js → chunk-FYUN5KZ3.js} +25 -25
- package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
- package/dist/chunk-GIZNH63R.js +40 -0
- package/dist/chunk-GPPB3JBE.js +688 -0
- package/dist/{chunk-B5XRQOLB.js → chunk-GVQJ5CCZ.js} +17 -11
- package/dist/chunk-HHV2GANA.js +88 -0
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
- package/dist/chunk-HRQMFLJP.js +75 -0
- package/dist/{chunk-AD7Y7STJ.js → chunk-HUAS7ITX.js} +107 -97
- package/dist/{chunk-O6I4CIEU.js → chunk-I66EAJFY.js} +6 -6
- package/dist/{chunk-S4COXYBG.js → chunk-IG7BCQBA.js} +129 -106
- package/dist/{chunk-N3PBVRTZ.js → chunk-IXJT6DCX.js} +9 -7
- package/dist/chunk-J4HBWF6Y.js +2635 -0
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-GAYUJ7LE.js → chunk-JA5QWE4Z.js} +544 -227
- package/dist/{chunk-B5CSFE7B.js → chunk-JIEGK6UF.js} +6 -174
- package/dist/{chunk-VKBMFOYV.js → chunk-JZWT5J3Y.js} +23 -27
- package/dist/chunk-K6BF4U2H.js +1785 -0
- package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
- package/dist/{chunk-YSEHGPCT.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-EBOC7MT3.js → chunk-MOPSG2X7.js} +9 -9
- package/dist/{chunk-KV2AOLDF.js → chunk-MQXIVJ35.js} +18 -29
- package/dist/{chunk-P3JGPQFL.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/chunk-NEKRRTYW.js +56 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-T3Z6VAAF.js → chunk-OJTRZGR3.js} +53 -92
- package/dist/{chunk-5DQRIYDZ.js → chunk-PBP4B7XR.js} +3 -3
- package/dist/{chunk-NQ6UCCOD.js → chunk-PJJ6MY27.js} +8 -8
- package/dist/chunk-PMZCIOCJ.js +25 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-7C6RYZGQ.js → chunk-PVAMAVBB.js} +5 -4
- package/dist/chunk-QDC3K2U3.js +262 -0
- package/dist/{chunk-JEQQR47K.js → chunk-QKIFBZKT.js} +173 -14
- package/dist/{chunk-R7LNVMCS.js → chunk-QMXC4JB7.js} +70 -78
- package/dist/chunk-QSNYB6ZV.js +195 -0
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-ODFEOB4F.js → chunk-R23Z6K6I.js} +27 -9
- package/dist/{chunk-3UUY7R3Z.js → chunk-R32CLGZ6.js} +14 -14
- package/dist/chunk-R346GLFC.js +31 -0
- package/dist/chunk-RKSR6VSF.js +132 -0
- package/dist/{chunk-N5XKWMDW.js → chunk-SCYB3HA4.js} +73 -27
- package/dist/{chunk-PZ4I4JE2.js → chunk-SINK3QR6.js} +135 -125
- package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
- package/dist/chunk-T56WDKA5.js +183 -0
- package/dist/{chunk-ECUO3KDP.js → chunk-TD3PGPQA.js} +87 -26
- package/dist/{chunk-HKO36JWF.js → chunk-THYWACCR.js} +31 -3
- package/dist/{chunk-LXPJXFM5.js → chunk-TVH4ONAM.js} +18 -12
- package/dist/chunk-TVHHYFHE.js +255 -0
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-NNNWO6F2.js → chunk-UAPGZHYC.js} +237 -33
- package/dist/{chunk-MIX5N5AC.js → chunk-UEDMSP56.js} +415 -160
- package/dist/{chunk-WIE7ZOSW.js → chunk-UXN6JT4W.js} +3 -3
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-MV2VUEJC.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-FALJGAWU.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-A2NJGIB3.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-EQ63NRB7.js → chunk-WNP7O5WZ.js} +3 -3
- package/dist/chunk-WR6U3OVP.js +45 -0
- package/dist/{chunk-TEO2TLVN.js → chunk-XKA2ICR3.js} +1051 -1196
- package/dist/{chunk-3V5AYSEQ.js → chunk-Y45G3AXC.js} +72 -65
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/chunk-YAKGTXEV.js +17 -0
- package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
- package/dist/{chunk-YW7UVM5V.js → chunk-ZAZB4JMW.js} +55 -11
- package/dist/{chunk-HCBCAYZU.js → chunk-ZJLUDYFY.js} +11 -11
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IFBNV6H6.js → chunk-ZW55JB7N.js} +3 -3
- package/dist/cli/index.js +48 -37
- package/dist/clio-IT3G3VQH.js +25 -0
- package/dist/{code-nav-LMW275PA.js → code-nav-RK6S7F6E.js} +8 -8
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-CVJMMODC.js → compile-cache-OQAVB7Y5.js} +3 -5
- package/dist/{components-ZFA3SAER.js → components-UBWCQSRW.js} +6 -6
- package/dist/{config-RXS5T3JT.js → config-3QZRWZJF.js} +73 -61
- package/dist/configure-FL7Y3KJF.js +54 -0
- package/dist/{context-MVOORGMF.js → context-5HE7ODYK.js} +61 -49
- package/dist/{context-I3BTOTCS.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-PALKKQYL.js → context-XNHL75JV.js} +43 -28
- package/dist/{context-clear-N2WOYZ2K.js → context-clear-N545L53A.js} +60 -48
- package/dist/{context-working-set-MIEVECVZ.js → context-working-set-QHKXSV2F.js} +15 -13
- package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-RGIE5PCT.js} +109 -72
- package/dist/{docs-7LQ23DLM.js → docs-5NAF6AU7.js} +7 -13
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-IJ5VEZDJ.js → eval-GXLL44RD.js} +106 -86
- package/dist/eval-inventory-HBWSWQOK.js +315 -0
- package/dist/{evidence-L5APPXNV.js → evidence-HWLBRH3Q.js} +209 -51
- package/dist/{evolve-RGNKFJ52.js → evolve-FTZBMNVW.js} +57 -45
- package/dist/{extensions-7WYWUX5A.js → extensions-VHRBEID7.js} +7 -7
- package/dist/{fleet-6CNVBZZP.js → fleet-CKZHJWZJ.js} +215 -114
- package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-EXDXBMV6.js} +13 -12
- package/dist/fleet-decisions-OTHB6KRL.js +157 -0
- package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-YTEZUCUT.js} +20 -17
- package/dist/fleet-inspect-SS6YMDCK.js +445 -0
- package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-PBY4VYOM.js} +6 -9
- package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-KMEM5L3S.js} +25 -20
- package/dist/fleet-verify-QD5M7E7Q.js +178 -0
- package/dist/fleet-view-WAMJYNDT.js +94 -0
- package/dist/{init-VBN2ACVA.js → init-5XQRBOFV.js} +79 -66
- package/dist/install-NKNG7KD4.js +13 -0
- package/dist/interop-34TVO25M.js +116 -0
- package/dist/{library-JHGUMLY2.js → library-3QY6KF57.js} +25 -21
- package/dist/{memory-K4OQIYWG.js → memory-L4UTIIIW.js} +59 -47
- package/dist/{models-2NCZUWDD.js → models-ZVX3QOWE.js} +47 -37
- package/dist/{monitor-MMVTJABD.js → monitor-CEKVSYTS.js} +67 -57
- package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-77BAP6BC.js} +7633 -7699
- package/dist/panes-7STHOAUJ.js +103 -0
- package/dist/panes-SHAUIRXY.js +60 -0
- package/dist/{paths-DBXMZMDU.js → paths-L7LGY6RN.js} +6 -6
- package/dist/{reset-DD5JGOY3.js → reset-EOLM7GVE.js} +15 -14
- package/dist/resources-74GKTLSF.js +115 -0
- package/dist/{run-QEGNX7FL.js → run-HBAUJNNZ.js} +139 -98
- package/dist/{share-JKD3BQMW.js → share-G3APVLVP.js} +25 -21
- package/dist/{skills-LMQIKDOZ.js → skills-35HHUKCR.js} +37 -27
- package/dist/{skills-eval-I7X2774U.js → skills-eval-QN4HSHDC.js} +80 -73
- package/dist/skills-inventory-J357J34F.js +129 -0
- package/dist/slash-commands-JZZCQA32.js +79 -0
- package/dist/{steer-CF5TDANS.js → steer-XAVHJM22.js} +4 -4
- package/dist/{support-I7LOJLIF.js → support-U7QOWY26.js} +7 -7
- package/dist/{targets-RUSR6B5Z.js → targets-DSM6CY3M.js} +67 -59
- package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-JOPFUVEM.js} +15 -10
- package/dist/tools-MKNWVPBH.js +29 -0
- package/dist/{trace-ODOQIVIW.js → trace-ECQ7TIYZ.js} +194 -7
- package/dist/tui-primitives-K5PASC3O.js +17 -0
- package/dist/{uninstall-ZJF5H5ZN.js → uninstall-N34PCTGJ.js} +6 -8
- package/dist/{upgrade-XANW3FXB.js → upgrade-H7TOM7YL.js} +37 -62
- package/dist/{usage-4H7ZRXQT.js → usage-X52N3IDJ.js} +70 -59
- package/dist/{verifiers-UZXNBZEB.js → verifiers-EJTVVSMA.js} +174 -14
- package/dist/{verify-BVKWTNDL.js → verify-YJL6XET2.js} +12 -11
- package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-MPIFL3LL.js} +3 -4
- package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-4NDZTQ4B.js} +86 -75
- package/dist/with-panes-OBOBFIIR.js +818 -0
- package/dist/worker/entry.js +131 -91
- package/docs/README.md +3 -2
- package/docs/acp.md +25 -4
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +4 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/capacity-and-scheduling.md +43 -5
- package/docs/commands-and-modes.md +39 -4
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +138 -167
- package/docs/context-engine.md +1 -1
- package/docs/development-pipeline.md +19 -0
- package/docs/dispatch-typed-intent.md +385 -0
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +3 -1
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +2 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +3 -1
- package/docs/extensions-and-sharing.md +25 -1
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +30 -7
- package/docs/installation-and-lifecycle.md +16 -3
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +10 -1
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +1 -1
- package/docs/prompt-envelope-and-tools.md +1 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- 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 +16 -11
- package/docs/troubleshooting.md +2 -2
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.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 +8 -16
- 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 +8 -4
- package/src/cli/argv.ts +25 -0
- 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 +50 -48
- 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 +156 -0
- package/src/cli/doctor-toolchain.ts +78 -0
- package/src/cli/doctor.ts +34 -1
- package/src/cli/eval-inventory.ts +436 -0
- package/src/cli/eval.ts +13 -0
- 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/fleet-decisions.ts +69 -0
- package/src/cli/fleet-inspect.ts +334 -0
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +133 -0
- package/src/cli/fleet-view.ts +827 -0
- package/src/cli/fleet.ts +154 -40
- 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/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +35 -0
- package/src/cli/reset.ts +6 -3
- package/src/cli/run.ts +67 -13
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/skills-inventory.ts +185 -0
- package/src/cli/skills.ts +16 -13
- package/src/cli/targets.ts +23 -24
- package/src/cli/tools.ts +321 -0
- package/src/cli/trace-inspect.ts +252 -0
- package/src/cli/trace.ts +64 -2
- 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 +347 -0
- package/src/cli/verifiers.ts +9 -0
- 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-events.ts +4 -0
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1070 -845
- package/src/core/defaults.ts +342 -463
- 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/response-schema.ts +44 -4
- 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/theme-token-hex.ts +43 -0
- package/src/core/timers.ts +2 -12
- package/src/core/tool-names.ts +2 -1
- package/src/core/xdg.ts +1 -1
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/fleets/build-review.md +0 -3
- package/src/domains/agents/fleets/build-test.md +0 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract-filesystem.ts +32 -0
- package/src/domains/agents/result-contract.ts +165 -36
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +37 -46
- 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/admission-error.ts +9 -0
- package/src/domains/dispatch/admission.ts +22 -21
- 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 +23 -6
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/council-topology.ts +398 -0
- package/src/domains/dispatch/extension.ts +287 -111
- package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
- package/src/domains/dispatch/fleet-plan.ts +7 -2
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +59 -3
- package/src/domains/dispatch/gate-decisions.ts +36 -15
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/gate-topology.ts +289 -0
- package/src/domains/dispatch/index.ts +19 -0
- package/src/domains/dispatch/intent-compatibility.ts +330 -0
- package/src/domains/dispatch/intent.ts +85 -1
- 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 +24 -27
- 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-bridge.ts +149 -0
- package/src/domains/dispatch/run-event-journal.ts +599 -0
- package/src/domains/dispatch/state.ts +45 -1
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +16 -3
- package/src/domains/dispatch/validation.ts +33 -8
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/compare.ts +3 -16
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/inventory.ts +113 -0
- 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/serving.ts +31 -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/evidence/store.ts +6 -0
- 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/index.ts +0 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/memory/task-memory-policy.ts +6 -10
- package/src/domains/memory/task-memory-telemetry.ts +1 -0
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/memory-intervention.ts +33 -21
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +566 -0
- package/src/domains/mux/detect.ts +182 -0
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +53 -0
- package/src/domains/mux/index.ts +116 -0
- package/src/domains/mux/manifest.ts +6 -0
- package/src/domains/mux/operations.ts +192 -0
- package/src/domains/mux/pane-registry.ts +90 -0
- package/src/domains/mux/protocol.ts +62 -0
- package/src/domains/mux/socket-client.ts +964 -0
- package/src/domains/mux/types.ts +265 -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 +182 -0
- package/src/domains/mux/yazi/profile.ts +299 -0
- package/src/domains/mux/yazi/session.ts +251 -0
- package/src/domains/mux/yazi/theme.ts +30 -0
- package/src/domains/observability/cost.ts +21 -0
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/index.ts +2 -0
- 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 +63 -11
- 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/endpoint-capacity.ts +154 -22
- package/src/domains/providers/endpoint-slots-store.ts +189 -0
- package/src/domains/providers/extension.ts +25 -8
- package/src/domains/providers/index.ts +22 -0
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +46 -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/boot-manifest.ts +1 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +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 +285 -0
- package/src/domains/providers/support.ts +1 -0
- package/src/domains/providers/target-model-cache.ts +124 -0
- 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/index.ts +3 -0
- 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 +72 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/action-classifier.ts +6 -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/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 +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +440 -96
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +20 -2
- 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 +87 -0
- package/src/engine/claude/sdk-runtime.ts +25 -17
- 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 +21 -0
- package/src/engine/tui.ts +1 -0
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +16 -26
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +207 -90
- package/src/entry/panes-activation.ts +31 -0
- package/src/entry/with-panes.ts +20 -0
- 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 +2 -1
- package/src/interactive/cost-overlay.ts +3 -1
- package/src/interactive/council-grid.ts +3 -5
- package/src/interactive/council.ts +11 -0
- package/src/interactive/dispatch-board.ts +56 -49
- 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 +229 -62
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +9 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +99 -23
- 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 +3 -2
- package/src/interactive/modal-marker.ts +151 -0
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/mux-bridge.ts +214 -0
- package/src/interactive/overlay-frame.ts +62 -14
- package/src/interactive/overlay-general-openers.ts +7 -2
- package/src/interactive/overlay-key-routing.ts +21 -10
- package/src/interactive/overlay-lifecycle.ts +20 -4
- package/src/interactive/overlay-model-selectors.ts +43 -6
- package/src/interactive/overlay-permission-lifecycle.ts +90 -22
- package/src/interactive/overlay-transitions.ts +18 -4
- package/src/interactive/overlays/agents.ts +3 -2
- package/src/interactive/overlays/ask-user.ts +161 -41
- package/src/interactive/overlays/auth-dialog.ts +1 -0
- package/src/interactive/overlays/context-reset.ts +29 -4
- package/src/interactive/overlays/cwd-fallback.ts +29 -4
- package/src/interactive/overlays/decisions.ts +15 -13
- package/src/interactive/overlays/extensions.ts +1 -0
- package/src/interactive/overlays/fleet-run-approval.ts +4 -3
- package/src/interactive/overlays/handoff-review.ts +3 -2
- package/src/interactive/overlays/help-reference.ts +2 -0
- package/src/interactive/overlays/interop.ts +2 -1
- package/src/interactive/overlays/library-install-confirm.ts +2 -1
- 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 +2 -1
- package/src/interactive/overlays/model-scope.ts +86 -0
- package/src/interactive/overlays/model-selector.ts +40 -31
- package/src/interactive/overlays/prompts.ts +11 -4
- package/src/interactive/overlays/session-selector.ts +3 -2
- package/src/interactive/overlays/settings-sections.ts +30 -0
- package/src/interactive/overlays/settings.ts +849 -268
- package/src/interactive/overlays/side-question.ts +3 -2
- package/src/interactive/overlays/skills-hub.ts +11 -19
- package/src/interactive/overlays/tree-selector.ts +3 -2
- package/src/interactive/pane-policy.ts +46 -0
- package/src/interactive/panes-runtime.ts +318 -0
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/compaction-summary.ts +29 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/renderers/worker-entry.ts +122 -14
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +521 -189
- 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 +21 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/theme/tokens.ts +3 -14
- package/src/interactive/turn-context.ts +58 -13
- 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 +120 -9
- package/src/interactive/view/view-overlay.ts +14 -10
- package/src/interactive/watch-pane.ts +180 -0
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +11 -5
- package/src/interactive/worker-receipts.ts +20 -2
- package/src/interactive/worker-stream.ts +6 -4
- package/src/interactive/yazi-bridge.ts +451 -0
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +26 -2
- package/src/tools/builtin-tool-catalog.ts +16 -1
- package/src/tools/compete-worktrees.ts +108 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/core-bootstrap.ts +2 -1
- package/src/tools/dispatch-admission.ts +18 -5
- package/src/tools/dispatch-arguments.ts +21 -21
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +145 -28
- package/src/tools/dispatch-runner.ts +40 -13
- package/src/tools/dispatch-types.ts +15 -3
- package/src/tools/dispatch.ts +2 -2
- package/src/tools/executables.ts +17 -14
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +54 -4
- package/src/tools/observers.ts +0 -33
- 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/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-D73KXYPF.js +0 -37
- package/dist/chunk-MLOK6ZOS.js +0 -2888
- package/dist/chunk-PNY46YEY.js +0 -1581
- package/dist/chunk-XDOQXGFO.js +0 -515
- package/dist/chunk-YKOFT37S.js +0 -279
- package/dist/clio-LT5V7SSZ.js +0 -26
- package/dist/configure-2WYWSCSD.js +0 -49
- package/dist/doctor-TWBWFK5V.js +0 -165
- 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
|
@@ -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()
|
|
@@ -225,6 +225,17 @@ export interface RunGateSubjectRef {
|
|
|
225
225
|
digest: string | null;
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
+
/** Storage route used for one compete candidate's isolated checkout. */
|
|
229
|
+
export interface RunGateWorktreeProvenance {
|
|
230
|
+
backend: "herdr" | "native";
|
|
231
|
+
path: string;
|
|
232
|
+
branch: string;
|
|
233
|
+
/** Herdr workspace created around the worktree; absent for the native route. */
|
|
234
|
+
workspaceId?: string;
|
|
235
|
+
/** Why the native route was selected when mux was configured. */
|
|
236
|
+
fallback?: "mux-unavailable" | "mux-operation-failed";
|
|
237
|
+
}
|
|
238
|
+
|
|
228
239
|
/**
|
|
229
240
|
* Review/compete gate provenance, carried on the request and sealed into the
|
|
230
241
|
* receipt. References point backward only: a reviewer references the builder
|
|
@@ -244,6 +255,8 @@ export interface RunGateProvenance {
|
|
|
244
255
|
subjects?: RunGateSubjectRef[];
|
|
245
256
|
/** Reviewer verdict that caused this run; only on revise builders. */
|
|
246
257
|
verdict?: "pass" | "fail" | "revise";
|
|
258
|
+
/** Compete-only worktree route, sealed into the run receipt with the gate. */
|
|
259
|
+
worktree?: RunGateWorktreeProvenance;
|
|
247
260
|
}
|
|
248
261
|
|
|
249
262
|
export interface RunCouncilProvenance {
|
|
@@ -493,7 +506,7 @@ export interface RunEnvelope {
|
|
|
493
506
|
|
|
494
507
|
/**
|
|
495
508
|
* Per-tool aggregates folded into a receipt at run completion. Sourced from
|
|
496
|
-
* the worker's ToolTelemetry stream (`
|
|
509
|
+
* the worker's ToolTelemetry stream (`clio_coder_tool_finish` IPC events). Sorted
|
|
497
510
|
* by tool name on write so digests are deterministic across runs.
|
|
498
511
|
*/
|
|
499
512
|
export interface ToolCallStat {
|
|
@@ -557,7 +570,7 @@ export interface RunReceiptDelegation {
|
|
|
557
570
|
toolCallsRequested: number;
|
|
558
571
|
toolCallsApproved: number;
|
|
559
572
|
toolCallsDenied: number;
|
|
560
|
-
toolGovernance: "clio-policy" | "agent-managed" | "deny-all";
|
|
573
|
+
toolGovernance: "clio-coder-policy" | "agent-managed" | "deny-all";
|
|
561
574
|
toolCallLog: DelegationToolCallLogEntry[];
|
|
562
575
|
}
|
|
563
576
|
|
|
@@ -797,7 +810,7 @@ export interface RunReceipt {
|
|
|
797
810
|
dynamicHash?: string | null;
|
|
798
811
|
promptSignature?: string | null;
|
|
799
812
|
toolSignature?: string | null;
|
|
800
|
-
|
|
813
|
+
clioCoderVersion: string;
|
|
801
814
|
piMonoVersion: string;
|
|
802
815
|
platform: string;
|
|
803
816
|
nodeVersion: string;
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
import { isExecutionRole } from "./execution-role.js";
|
|
22
22
|
import { COMPETE_STANCES, type CompeteStance } from "./gate-role-prompts.js";
|
|
23
23
|
import { type DispatchIntent, isDispatchIntent } from "./intent.js";
|
|
24
|
+
import { classifyDispatchIntentCompatibility, dispatchIntentRefusals } from "./intent-compatibility.js";
|
|
24
25
|
import { isRoutingIntent, type RoutingIntent } from "./routing-intent.js";
|
|
25
26
|
import type {
|
|
26
27
|
DispatchRequestOrigin,
|
|
@@ -478,14 +479,21 @@ export function validateJobSpec(spec: unknown): Validated {
|
|
|
478
479
|
errors.push("writeRoots must be a non-empty array of non-empty strings");
|
|
479
480
|
}
|
|
480
481
|
}
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
482
|
+
// One owner for the typed-intent migration rules (#163). Every dispatch
|
|
483
|
+
// producer reaches a worker through this validator, so classifying here is
|
|
484
|
+
// what makes the compatibility table true of the fleet, CLI, ACP, and
|
|
485
|
+
// extension paths rather than only of the model-facing tool.
|
|
486
|
+
if ("intent" in spec) {
|
|
487
|
+
for (const refusal of dispatchIntentRefusals(
|
|
488
|
+
classifyDispatchIntentCompatibility({
|
|
489
|
+
intent: spec.intent,
|
|
490
|
+
...(spec.writeRoots !== undefined ? { writeRoots: spec.writeRoots } : {}),
|
|
491
|
+
...(spec.autonomy !== undefined ? { autonomy: spec.autonomy } : {}),
|
|
492
|
+
...(typeof spec.cwd === "string" && spec.cwd.length > 0 ? { cwd: spec.cwd } : {}),
|
|
493
|
+
}),
|
|
494
|
+
)) {
|
|
495
|
+
errors.push(refusal.message);
|
|
496
|
+
}
|
|
489
497
|
}
|
|
490
498
|
|
|
491
499
|
if ("requestOrigin" in spec && spec.requestOrigin !== undefined) {
|
|
@@ -696,6 +704,8 @@ function isValidProtectedArtifactRemap(value: unknown): value is ProtectedArtifa
|
|
|
696
704
|
|
|
697
705
|
const VALID_GATE_ROLES = new Set(["builder", "reviewer", "candidate", "judge", "member", "synthesis"]);
|
|
698
706
|
const VALID_GATE_VERDICTS = new Set(["pass", "fail", "revise"]);
|
|
707
|
+
const VALID_WORKTREE_BACKENDS = new Set(["herdr", "native"]);
|
|
708
|
+
const VALID_WORKTREE_FALLBACKS = new Set(["mux-unavailable", "mux-operation-failed"]);
|
|
699
709
|
const VALID_PLAN_TOPOLOGIES = new Set([
|
|
700
710
|
"parallel",
|
|
701
711
|
"sequential",
|
|
@@ -724,6 +734,20 @@ function isValidGate(value: unknown): value is RunGateProvenance {
|
|
|
724
734
|
if (value.verdict !== undefined && (typeof value.verdict !== "string" || !VALID_GATE_VERDICTS.has(value.verdict))) {
|
|
725
735
|
return false;
|
|
726
736
|
}
|
|
737
|
+
if (value.worktree !== undefined) {
|
|
738
|
+
if (!isPlainObject(value.worktree)) return false;
|
|
739
|
+
if (typeof value.worktree.backend !== "string" || !VALID_WORKTREE_BACKENDS.has(value.worktree.backend)) return false;
|
|
740
|
+
if (typeof value.worktree.path !== "string" || !path.isAbsolute(value.worktree.path)) return false;
|
|
741
|
+
if (typeof value.worktree.branch !== "string" || value.worktree.branch.length === 0) return false;
|
|
742
|
+
if (value.worktree.workspaceId !== undefined && typeof value.worktree.workspaceId !== "string") return false;
|
|
743
|
+
if (
|
|
744
|
+
value.worktree.fallback !== undefined &&
|
|
745
|
+
(typeof value.worktree.fallback !== "string" || !VALID_WORKTREE_FALLBACKS.has(value.worktree.fallback))
|
|
746
|
+
) {
|
|
747
|
+
return false;
|
|
748
|
+
}
|
|
749
|
+
if (value.worktree.backend === "herdr" && typeof value.worktree.workspaceId !== "string") return false;
|
|
750
|
+
}
|
|
727
751
|
return true;
|
|
728
752
|
}
|
|
729
753
|
|
|
@@ -734,6 +758,7 @@ function cloneGate(gate: RunGateProvenance): RunGateProvenance {
|
|
|
734
758
|
cycle: gate.cycle,
|
|
735
759
|
...(gate.subjects !== undefined ? { subjects: gate.subjects.map((subject) => ({ ...subject })) } : {}),
|
|
736
760
|
...(gate.verdict !== undefined ? { verdict: gate.verdict } : {}),
|
|
761
|
+
...(gate.worktree !== undefined ? { worktree: { ...gate.worktree } } : {}),
|
|
737
762
|
};
|
|
738
763
|
}
|
|
739
764
|
|
|
@@ -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"),
|
|
@@ -3,6 +3,7 @@ import { assertComparableTrackedMetricSources } from "../run-compare.js";
|
|
|
3
3
|
import type { EvalArtifactV4 } from "../schema/artifact.js";
|
|
4
4
|
import {
|
|
5
5
|
type EvalServingConfigurationV1,
|
|
6
|
+
evalServingConfigurationOf,
|
|
6
7
|
renderEvalServingConfiguration,
|
|
7
8
|
sameEvalServingConfiguration,
|
|
8
9
|
} from "../schema/serving.js";
|
|
@@ -90,8 +91,8 @@ export function compareEvalArtifactsV4(
|
|
|
90
91
|
): EvalCompareV4Summary {
|
|
91
92
|
const baselineTokens = baseline.summary.tokens;
|
|
92
93
|
const candidateTokens = candidate.summary.tokens;
|
|
93
|
-
const baselineServing =
|
|
94
|
-
const candidateServing =
|
|
94
|
+
const baselineServing = evalServingConfigurationOf(baseline);
|
|
95
|
+
const candidateServing = evalServingConfigurationOf(candidate);
|
|
95
96
|
const configDrift = !sameEvalServingConfiguration(baselineServing, candidateServing);
|
|
96
97
|
if (configDrift && options.allowConfigDrift !== true) {
|
|
97
98
|
throw new EvalServingConfigurationDriftError(baselineServing, candidateServing);
|
|
@@ -330,20 +331,6 @@ function metricComparison(
|
|
|
330
331
|
};
|
|
331
332
|
}
|
|
332
333
|
|
|
333
|
-
function servingConfigurationOf(artifact: EvalArtifactV4): EvalServingConfigurationV1 {
|
|
334
|
-
return (
|
|
335
|
-
artifact.servingConfiguration ?? {
|
|
336
|
-
targetId: artifact.matrix.target,
|
|
337
|
-
runtimeId: null,
|
|
338
|
-
modelId: artifact.matrix.model,
|
|
339
|
-
serverBuild: null,
|
|
340
|
-
total_slots: null,
|
|
341
|
-
thinkingLevel: artifact.matrix.thinking,
|
|
342
|
-
compiledPromptHash: null,
|
|
343
|
-
}
|
|
344
|
-
);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
334
|
function normalizeMetricFilter(metric: string | undefined): string | undefined {
|
|
348
335
|
if (metric === undefined) return undefined;
|
|
349
336
|
const trimmed = metric.trim();
|
|
@@ -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 {
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded newest-first listing of the eval reports this installation stored.
|
|
3
|
+
*
|
|
4
|
+
* The store has always been addressed by id: `eval report <evalId>` and
|
|
5
|
+
* `eval compare <a> <b>` both require the operator to already know which report
|
|
6
|
+
* they want. Nothing enumerated the directory, so a surface that wants to offer
|
|
7
|
+
* the choice had to invent the enumeration. This is that enumeration, and it is
|
|
8
|
+
* a store concern rather than a wire concern: it decides which files are in the
|
|
9
|
+
* window and hands back parsed artifacts, and says nothing about which of their
|
|
10
|
+
* fields may leave the host.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { readdir } from "node:fs/promises";
|
|
14
|
+
import { loadEvalArtifactV4 } from "./artifacts/store.js";
|
|
15
|
+
import type { EvalArtifactV4 } from "./schema/artifact.js";
|
|
16
|
+
import { evalRoot } from "./store.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The exact shape `createEvalId` mints: an ISO stamp with its separators
|
|
20
|
+
* stripped, the first eight characters of the suite hash, and a random suffix.
|
|
21
|
+
*/
|
|
22
|
+
const EVAL_ID_PATTERN = /^eval-(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(\d{3})Z-([0-9a-f]{8})-([0-9a-f]{12})$/u;
|
|
23
|
+
|
|
24
|
+
export interface EvalStoredReport {
|
|
25
|
+
readonly evalId: string;
|
|
26
|
+
/**
|
|
27
|
+
* The instant the run started, read back out of the id.
|
|
28
|
+
*
|
|
29
|
+
* Null unless the id is one this harness minted and its embedded suite-hash
|
|
30
|
+
* prefix agrees with the suite the artifact names. An artifact has no
|
|
31
|
+
* timestamp field of its own, so the id is the only record of when it ran,
|
|
32
|
+
* and a stamp read off an id that does not otherwise match its contents is
|
|
33
|
+
* not a fact worth reporting.
|
|
34
|
+
*/
|
|
35
|
+
readonly startedAt: string | null;
|
|
36
|
+
readonly artifact: EvalArtifactV4;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface EvalStoreListing {
|
|
40
|
+
/** False when the installation has no eval store at all, which reads differently from an empty one. */
|
|
41
|
+
readonly available: boolean;
|
|
42
|
+
/** Reports on disk before the window bound. */
|
|
43
|
+
readonly stored: number;
|
|
44
|
+
readonly reports: readonly EvalStoredReport[];
|
|
45
|
+
/**
|
|
46
|
+
* Files inside the window the current parser refused.
|
|
47
|
+
*
|
|
48
|
+
* Counted rather than dropped silently. Routing accepts artifact v4 only, so
|
|
49
|
+
* a retired shape still on disk is a real thing in this store, and a listing
|
|
50
|
+
* that quietly skipped it would report a smaller store than the operator has.
|
|
51
|
+
*/
|
|
52
|
+
readonly unreadable: number;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** The stamp an id carries, without checking it against anything. */
|
|
56
|
+
function idStamp(evalId: string): { startedAt: string; suiteHashPrefix: string } | null {
|
|
57
|
+
const match = EVAL_ID_PATTERN.exec(evalId);
|
|
58
|
+
if (match === null) return null;
|
|
59
|
+
const [, year, month, day, hour, minute, second, millisecond, suiteHashPrefix] = match;
|
|
60
|
+
const startedAt = `${year}-${month}-${day}T${hour}:${minute}:${second}.${millisecond}Z`;
|
|
61
|
+
const parsed = new Date(startedAt);
|
|
62
|
+
if (Number.isNaN(parsed.getTime()) || parsed.toISOString() !== startedAt) return null;
|
|
63
|
+
return { startedAt, suiteHashPrefix: suiteHashPrefix as string };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Newest first. An id this harness did not mint sorts oldest rather than throwing. */
|
|
67
|
+
function byNewest(left: string, right: string): number {
|
|
68
|
+
const leftStamp = idStamp(left)?.startedAt ?? "";
|
|
69
|
+
const rightStamp = idStamp(right)?.startedAt ?? "";
|
|
70
|
+
if (leftStamp !== rightStamp) return leftStamp < rightStamp ? 1 : -1;
|
|
71
|
+
return left < right ? 1 : -1;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export async function listEvalReports(dataDir: string, limit: number): Promise<EvalStoreListing> {
|
|
75
|
+
let entries: string[];
|
|
76
|
+
try {
|
|
77
|
+
entries = await readdir(evalRoot(dataDir));
|
|
78
|
+
} catch (error) {
|
|
79
|
+
if ((error as NodeJS.ErrnoException).code === "ENOENT") {
|
|
80
|
+
return { available: false, stored: 0, reports: [], unreadable: 0 };
|
|
81
|
+
}
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
const ids = entries
|
|
85
|
+
.filter((entry) => entry.endsWith(".json"))
|
|
86
|
+
.map((entry) => entry.slice(0, -".json".length))
|
|
87
|
+
.sort(byNewest);
|
|
88
|
+
const reports: EvalStoredReport[] = [];
|
|
89
|
+
let unreadable = 0;
|
|
90
|
+
for (const evalId of ids.slice(0, limit)) {
|
|
91
|
+
let artifact: EvalArtifactV4;
|
|
92
|
+
try {
|
|
93
|
+
artifact = await loadEvalArtifactV4(dataDir, evalId);
|
|
94
|
+
} catch {
|
|
95
|
+
unreadable += 1;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
// The id inside the file is authoritative. A file whose stem disagrees with
|
|
99
|
+
// it was renamed or copied in, and the two names it now answers to are not
|
|
100
|
+
// the same report.
|
|
101
|
+
if (artifact.evalId !== evalId) {
|
|
102
|
+
unreadable += 1;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const stamp = idStamp(evalId);
|
|
106
|
+
reports.push({
|
|
107
|
+
evalId,
|
|
108
|
+
startedAt: stamp !== null && artifact.suite.hash.startsWith(stamp.suiteHashPrefix) ? stamp.startedAt : null,
|
|
109
|
+
artifact,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return { available: true, stored: ids.length, reports, unreadable };
|
|
113
|
+
}
|
|
@@ -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`);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { normalizeEvalSchemaId } from "./naming.js";
|
|
2
3
|
import { EVAL_VERDICT_SCHEMA_V1, type EvalVerdictEnvelopeV1 } from "./verdict.js";
|
|
3
4
|
|
|
4
|
-
export const EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1 = "clio.eval.scenario.v1" as const;
|
|
5
|
-
export const EVAL_BEHAVIOR_SCHEMA_V1 = "clio.eval.behavior.v1" as const;
|
|
5
|
+
export const EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1 = "clio-coder.eval.scenario.v1" as const;
|
|
6
|
+
export const EVAL_BEHAVIOR_SCHEMA_V1 = "clio-coder.eval.behavior.v1" as const;
|
|
6
7
|
|
|
7
8
|
export const EVAL_BEHAVIOR_CATEGORIES = [
|
|
8
9
|
"tool_choice",
|
|
@@ -102,7 +103,7 @@ export interface EvalBehaviorVerdictV1 {
|
|
|
102
103
|
|
|
103
104
|
export function parseEvalBehaviorScenarioV1(value: unknown, source = "behavioral scenario"): EvalBehaviorScenarioV1 {
|
|
104
105
|
const record = asRecord(value, source);
|
|
105
|
-
if (record.schema !== EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1) {
|
|
106
|
+
if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1) {
|
|
106
107
|
throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1}`);
|
|
107
108
|
}
|
|
108
109
|
const corpus = asRecord(record.corpus, `${source}.corpus`);
|
|
@@ -153,7 +154,7 @@ export function parseEvalBehaviorScenarioV1(value: unknown, source = "behavioral
|
|
|
153
154
|
};
|
|
154
155
|
}
|
|
155
156
|
|
|
156
|
-
|
|
157
|
+
function canonicalizeEvalBehaviorJudgeInputV1(
|
|
157
158
|
value: unknown,
|
|
158
159
|
scenario: EvalBehaviorScenarioV1,
|
|
159
160
|
source = "behavioral judge input",
|
|
@@ -221,10 +222,10 @@ export function judgeEvalBehaviorV1(
|
|
|
221
222
|
|
|
222
223
|
export function parseEvalBehaviorVerdictV1(value: unknown, source = "behavioral verdict"): EvalBehaviorVerdictV1 {
|
|
223
224
|
const record = asRecord(value, source);
|
|
224
|
-
if (record.schema !== EVAL_BEHAVIOR_SCHEMA_V1)
|
|
225
|
+
if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_SCHEMA_V1)
|
|
225
226
|
throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_SCHEMA_V1}`);
|
|
226
227
|
const verdictRef = asRecord(record.verdictRef, `${source}.verdictRef`);
|
|
227
|
-
if (verdictRef.schema !== EVAL_VERDICT_SCHEMA_V1) {
|
|
228
|
+
if (normalizeEvalSchemaId(verdictRef.schema) !== EVAL_VERDICT_SCHEMA_V1) {
|
|
228
229
|
throw new Error(`${source}.verdictRef.schema: expected ${EVAL_VERDICT_SCHEMA_V1}`);
|
|
229
230
|
}
|
|
230
231
|
const corpus = asRecord(record.corpus, `${source}.corpus`);
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { normalizeEvalSchemaId } from "./naming.js";
|
|
2
|
+
|
|
3
|
+
export const EVAL_EXECUTION_ENVELOPE_SCHEMA_V1 = "clio-coder.eval.execution-envelope.v1" as const;
|
|
2
4
|
|
|
3
5
|
export const EVAL_EXECUTION_MATRIX_DIMENSIONS_V1 = [
|
|
4
6
|
"prompt",
|
|
@@ -56,7 +58,7 @@ export interface EvalExecutionEnvelopeV1 {
|
|
|
56
58
|
|
|
57
59
|
export function parseEvalExecutionEnvelopeV1(value: unknown, source = "execution envelope"): EvalExecutionEnvelopeV1 {
|
|
58
60
|
const record = asRecord(value, source);
|
|
59
|
-
if (record.schema !== EVAL_EXECUTION_ENVELOPE_SCHEMA_V1) {
|
|
61
|
+
if (normalizeEvalSchemaId(record.schema) !== EVAL_EXECUTION_ENVELOPE_SCHEMA_V1) {
|
|
60
62
|
throw new Error(`${source}.schema: expected ${EVAL_EXECUTION_ENVELOPE_SCHEMA_V1}`);
|
|
61
63
|
}
|
|
62
64
|
const prompt = asRecord(record.prompt, `${source}.prompt`);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Legacy eval identifiers are normalized only after decoding; writers use canonical schema constants. */
|
|
2
|
+
export function normalizeEvalSchemaId(value: unknown): unknown {
|
|
3
|
+
return typeof value === "string" && value.startsWith("clio.eval.")
|
|
4
|
+
? `clio-coder.eval.${value.slice("clio.eval.".length)}`
|
|
5
|
+
: value;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function normalizeEvalRunnerKind(value: unknown): unknown {
|
|
9
|
+
return value === "clio-run" ? "clio-coder-run" : value;
|
|
10
|
+
}
|
|
@@ -30,6 +30,37 @@ export function parseEvalServingConfigurationV1(value: unknown, source: string):
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
/**
|
|
34
|
+
* The serving facts an artifact was produced under.
|
|
35
|
+
*
|
|
36
|
+
* An artifact written before the observation existed has no record of its own,
|
|
37
|
+
* so the matrix it declared is the best available reading and the missing
|
|
38
|
+
* fields stay null rather than being invented. This lives beside
|
|
39
|
+
* `sameEvalServingConfiguration` because the two are one rule: what a
|
|
40
|
+
* comparison reads, and when it decides two readings agree. Anything asking
|
|
41
|
+
* whether two eval runs are comparable must go through both, or it is answering
|
|
42
|
+
* a different question from the one `eval compare` answers.
|
|
43
|
+
*
|
|
44
|
+
* The parameter is structural rather than `EvalArtifactV4` so this module stays
|
|
45
|
+
* free of an import cycle through `schema/artifact.ts`.
|
|
46
|
+
*/
|
|
47
|
+
export function evalServingConfigurationOf(artifact: {
|
|
48
|
+
readonly servingConfiguration?: EvalServingConfigurationV1;
|
|
49
|
+
readonly matrix: { readonly target: string; readonly model: string | null; readonly thinking: string | null };
|
|
50
|
+
}): EvalServingConfigurationV1 {
|
|
51
|
+
return (
|
|
52
|
+
artifact.servingConfiguration ?? {
|
|
53
|
+
targetId: artifact.matrix.target,
|
|
54
|
+
runtimeId: null,
|
|
55
|
+
modelId: artifact.matrix.model,
|
|
56
|
+
serverBuild: null,
|
|
57
|
+
total_slots: null,
|
|
58
|
+
thinkingLevel: artifact.matrix.thinking,
|
|
59
|
+
compiledPromptHash: null,
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
33
64
|
export function sameEvalServingConfiguration(
|
|
34
65
|
left: EvalServingConfigurationV1,
|
|
35
66
|
right: EvalServingConfigurationV1,
|