@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
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What one fleet node is told about its own answer.
|
|
3
|
+
*
|
|
4
|
+
* A fleet contract renders a single prompt body and the plan compiler gives it
|
|
5
|
+
* to every agent node, because the body describes the whole chain and each node
|
|
6
|
+
* does one part of it. That is fine for the work description and wrong for the
|
|
7
|
+
* answer: nodes in the same chain hold different result contracts, so a body
|
|
8
|
+
* that names one contract names the wrong one for every other node. A loop's
|
|
9
|
+
* check node is where the mismatch is fatal rather than merely untidy. It is
|
|
10
|
+
* dispatched with `verifier-report` as its expected contract, and in
|
|
11
|
+
* `build-review` and `build-test` it received a body ending in "Answer with
|
|
12
|
+
* your `mutation-report`". The verifier complied with the instruction it was
|
|
13
|
+
* given, the gate held it to the schema that instruction never mentioned, and
|
|
14
|
+
* both were behaving correctly: every review cycle in those two fleets ended in
|
|
15
|
+
* `review gate produced no structured verdict` and the bounded revise loop was
|
|
16
|
+
* unresolvable by construction.
|
|
17
|
+
*
|
|
18
|
+
* So each node states its own contract, appended to the shared body, and the
|
|
19
|
+
* precedence line settles the conflict explicitly rather than leaving it to the
|
|
20
|
+
* model to guess which of two shapes the run will actually validate. This is
|
|
21
|
+
* the same remedy `COUNCIL_VOTE_MEMBER_DIRECTIVE` applies to a voting council
|
|
22
|
+
* member, for the same reason and with the same shape of failure behind it
|
|
23
|
+
* (#230): a run whose postcondition differs from the shape its prompt names
|
|
24
|
+
* fails on every input, not intermittently.
|
|
25
|
+
*
|
|
26
|
+
* The shape itself is quoted from `resultContractShape`, the one place a
|
|
27
|
+
* contract's wire example is written, so this directive cannot drift from the
|
|
28
|
+
* validator that judges the answer.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
import { type ResultContract, resultContractShape } from "../agents/result-contract.js";
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The answer directive for a node holding this contract, or null when the kind
|
|
35
|
+
* alone does not fix the shape.
|
|
36
|
+
*
|
|
37
|
+
* `architect-plan` names the path it must write, and a plan compiler resolving
|
|
38
|
+
* agents holds only the contract's kind. Inventing a path to render would state
|
|
39
|
+
* a location the validator does not check, so that kind gets no directive and
|
|
40
|
+
* its recipe keeps sole authority over the shape. Every other kind is fully
|
|
41
|
+
* determined by its kind and can be quoted exactly.
|
|
42
|
+
*/
|
|
43
|
+
function fleetNodeAnswerDirective(kind: ResultContract["kind"]): string | null {
|
|
44
|
+
if (kind === "architect-plan") return null;
|
|
45
|
+
return [
|
|
46
|
+
`Your result contract for this step is \`${kind}\`.`,
|
|
47
|
+
"The task above describes the whole chain. Any result shape it states belongs to the step that produces it, and does not apply to you.",
|
|
48
|
+
`End with exactly this shape and nothing else: ${resultContractShape({ kind })}`,
|
|
49
|
+
// The wire example carries literal names and evidence, and a small model
|
|
50
|
+
// handed one on a first attempt copies them: the first run of this
|
|
51
|
+
// directive came back claiming `npm run typecheck` / `exit 0` in the same
|
|
52
|
+
// breath as admitting it could not run a command. The fields are the
|
|
53
|
+
// contract; the values in the example are not.
|
|
54
|
+
"Its field values are an example. Fill them with what this run actually produced or observed, and never report a name or evidence you did not.",
|
|
55
|
+
].join("\n");
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** The shared body plus the node's own answer directive. */
|
|
59
|
+
export function renderFleetNodeTask(task: string, kind: ResultContract["kind"]): string {
|
|
60
|
+
const directive = fleetNodeAnswerDirective(kind);
|
|
61
|
+
return directive === null ? task : `${task}\n\n${directive}`;
|
|
62
|
+
}
|
|
@@ -32,6 +32,7 @@ import {
|
|
|
32
32
|
type ExecutionPlanStepInput,
|
|
33
33
|
} from "./execution-plan.js";
|
|
34
34
|
import type { ExecutionRole } from "./execution-role.js";
|
|
35
|
+
import { renderFleetNodeTask } from "./fleet-node-prompt.js";
|
|
35
36
|
|
|
36
37
|
/** Where an agent node sits, so the caller can resolve its role and authority. */
|
|
37
38
|
export interface FleetPlanAgentContext {
|
|
@@ -58,7 +59,11 @@ export interface FleetPlanAgentResolution {
|
|
|
58
59
|
|
|
59
60
|
export interface CompileFleetPlanInput {
|
|
60
61
|
contract: FleetContract;
|
|
61
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Rendered prompt body. It describes the whole chain, so every agent node
|
|
64
|
+
* carries it, followed by that node's own answer directive: the nodes hold
|
|
65
|
+
* different result contracts and the body can only ever name one of them.
|
|
66
|
+
*/
|
|
62
67
|
task: string;
|
|
63
68
|
resolveAgent(context: FleetPlanAgentContext): FleetPlanAgentResolution;
|
|
64
69
|
}
|
|
@@ -143,7 +148,7 @@ export function compileFleetExecutionPlan(input: CompileFleetPlanInput): Executi
|
|
|
143
148
|
agentId: context.agentId,
|
|
144
149
|
scope: context.scope,
|
|
145
150
|
dependencies: [...dependencies],
|
|
146
|
-
task,
|
|
151
|
+
task: renderFleetNodeTask(task, resolved.expectedResultContract),
|
|
147
152
|
expectedResultContract: resolved.expectedResultContract,
|
|
148
153
|
requestedAuthority: resolved.requestedAuthority,
|
|
149
154
|
approvedAuthority: resolved.approvedAuthority,
|
|
@@ -18,7 +18,6 @@ import { performance } from "node:perf_hooks";
|
|
|
18
18
|
import { readClioVersion } from "../../core/package-root.js";
|
|
19
19
|
import { shellQuote } from "../../core/shell-quote.js";
|
|
20
20
|
import { clioStateDir } from "../../core/xdg.js";
|
|
21
|
-
import { atomicWrite } from "../../engine/session.js";
|
|
22
21
|
import {
|
|
23
22
|
evaluateRouteFacts,
|
|
24
23
|
type FactState,
|
|
@@ -92,16 +91,6 @@ export function readFleetPreflightRecords(): FleetPreflightRecord[] {
|
|
|
92
91
|
}
|
|
93
92
|
}
|
|
94
93
|
|
|
95
|
-
/** Upsert records keyed by (nodeId, projectRoot). */
|
|
96
|
-
export function recordFleetPreflight(records: ReadonlyArray<FleetPreflightRecord>): void {
|
|
97
|
-
const existing = readFleetPreflightRecords();
|
|
98
|
-
const merged = new Map<string, FleetPreflightRecord>();
|
|
99
|
-
for (const record of existing) merged.set(`${record.nodeId}\0${record.projectRoot}`, record);
|
|
100
|
-
for (const record of records) merged.set(`${record.nodeId}\0${record.projectRoot}`, record);
|
|
101
|
-
const file: FleetPreflightStoreFile = { version: 2, records: [...merged.values()] };
|
|
102
|
-
atomicWrite(storePath(), JSON.stringify(file, null, 2));
|
|
103
|
-
}
|
|
104
|
-
|
|
105
94
|
export interface FleetPreflightVerdict {
|
|
106
95
|
ok: boolean;
|
|
107
96
|
reason: string | null;
|
|
@@ -164,7 +153,8 @@ export function routeFactVerdict(
|
|
|
164
153
|
return evaluateRouteFacts(targets, resources, requirement, options);
|
|
165
154
|
}
|
|
166
155
|
|
|
167
|
-
const PREFLIGHT_MARKER = "clio-preflight/1";
|
|
156
|
+
const PREFLIGHT_MARKER = "clio-coder-preflight/1";
|
|
157
|
+
const LEGACY_PREFLIGHT_MARKER = "clio-preflight/1";
|
|
168
158
|
const DEFAULT_PREFLIGHT_TIMEOUT_MS = 20_000;
|
|
169
159
|
|
|
170
160
|
/**
|
|
@@ -187,8 +177,8 @@ function buildPreflightScript(
|
|
|
187
177
|
const cliBase = entry.endsWith(" worker") ? entry.slice(0, -" worker".length) : null;
|
|
188
178
|
const versionProbe =
|
|
189
179
|
cliBase !== null
|
|
190
|
-
? `v=$(${cliBase} --version 2>/dev/null | head -n 1); if [ -n "$v" ]; then echo "
|
|
191
|
-
: `echo
|
|
180
|
+
? `v=$(${cliBase} --version 2>/dev/null | head -n 1); if [ -n "$v" ]; then echo "clioCoder=$v"; else echo clioCoder=missing; fi`
|
|
181
|
+
: `echo clioCoder=custom-entry`;
|
|
192
182
|
const lines = [
|
|
193
183
|
`echo ${shellQuote(PREFLIGHT_MARKER)}`,
|
|
194
184
|
`if cd ${shellQuote(projectRoot)} 2>/dev/null; then echo cwd=ok; else echo cwd=missing; fi`,
|
|
@@ -342,7 +332,7 @@ export async function runFleetNodePreflight(
|
|
|
342
332
|
// Probe latency is durable eligibility evidence compared across nodes and
|
|
343
333
|
// across passes, so it is measured on the monotonic clock.
|
|
344
334
|
const probeDurationMs = Math.round(performance.now() - probeStartedAt);
|
|
345
|
-
if (!result.stdout.includes(PREFLIGHT_MARKER)) {
|
|
335
|
+
if (!result.stdout.includes(PREFLIGHT_MARKER) && !result.stdout.includes(LEGACY_PREFLIGHT_MARKER)) {
|
|
346
336
|
const stderr = result.stderr.trim().split("\n").slice(-1)[0] ?? "";
|
|
347
337
|
record.detail = `unreachable (ssh exit ${result.code}${stderr.length > 0 ? `: ${stderr}` : ""})`;
|
|
348
338
|
return record;
|
|
@@ -364,8 +354,9 @@ export async function runFleetNodePreflight(
|
|
|
364
354
|
};
|
|
365
355
|
checks.pathParity = lines.includes("cwd=ok");
|
|
366
356
|
checks.stateDirWritable = lines.includes("state=ok");
|
|
367
|
-
const
|
|
368
|
-
const
|
|
357
|
+
const clioCoderLine = lines.find((line) => line.startsWith("clioCoder="));
|
|
358
|
+
const legacyClioLine = lines.find((line) => line.startsWith("clio="));
|
|
359
|
+
const clioValue = clioCoderLine?.slice("clioCoder=".length) ?? legacyClioLine?.slice("clio=".length) ?? "missing";
|
|
369
360
|
if (clioValue === "custom-entry") {
|
|
370
361
|
// A custom clioCoderEntry that is not `<cli> worker` cannot be version-probed;
|
|
371
362
|
// the operator vouches for it. Presence is asserted, match is assumed.
|
|
@@ -21,6 +21,8 @@ import type { FleetCommandRegistry } from "../agents/fleet-commands.js";
|
|
|
21
21
|
import type { FleetContract } from "../agents/fleet-contract.js";
|
|
22
22
|
import { resultContractAuthorship } from "../agents/result-contract.js";
|
|
23
23
|
import type { AgentSpec } from "../agents/spec.js";
|
|
24
|
+
import { aggregateCostAmounts, type CostAggregate, renderCostAmount } from "../observability/cost.js";
|
|
25
|
+
import type { CostProvenance } from "../providers/index.js";
|
|
24
26
|
import { claimAssignmentVerdict, recordAssignmentAttempt, settleStoredAssignment } from "./assignment-store.js";
|
|
25
27
|
import { runCodeStep } from "./code-step.js";
|
|
26
28
|
import { codeStepDir, writeCodeStepRecord } from "./code-step-store.js";
|
|
@@ -43,6 +45,7 @@ import {
|
|
|
43
45
|
materializePendingGateDecision,
|
|
44
46
|
stagePendingGateDecision,
|
|
45
47
|
} from "./gate-decisions.js";
|
|
48
|
+
import { type DispatchIntent, declaredScopeIntent } from "./intent.js";
|
|
46
49
|
import { verifyReceiptIntegrity } from "./receipt-integrity.js";
|
|
47
50
|
import { type FleetRunRecord, writeFleetRun } from "./state.js";
|
|
48
51
|
import type { RunReceipt } from "./types.js";
|
|
@@ -83,6 +86,15 @@ export interface FleetRunStepOutcome extends FleetRunStepEvent {
|
|
|
83
86
|
/** Terminal run id, which is the receipt id for an agent step. */
|
|
84
87
|
terminalRunId: string;
|
|
85
88
|
costUsd: number;
|
|
89
|
+
/**
|
|
90
|
+
* Where the number in `costUsd` came from, carried beside it because the two
|
|
91
|
+
* are one fact. A gateway-routed run seals `costUsd: 0` with `unknown`: its
|
|
92
|
+
* tokens were measured and nobody priced them. A renderer that reads the
|
|
93
|
+
* amount without this prints `$0.0000` and turns unpriced work into a
|
|
94
|
+
* measured zero. `known_free` on a deterministic step is the honest reading:
|
|
95
|
+
* no model ran, so the zero is something code observed rather than missed.
|
|
96
|
+
*/
|
|
97
|
+
costProvenance: CostProvenance;
|
|
86
98
|
/** The sealed agent receipt when this was an agent step. */
|
|
87
99
|
receipt?: RunReceipt;
|
|
88
100
|
/** The durable code-step record when this was a deterministic step. */
|
|
@@ -192,7 +204,12 @@ export interface FleetRunOutcome {
|
|
|
192
204
|
planHash: string;
|
|
193
205
|
result: ExecutionPlanResult;
|
|
194
206
|
receipts: ReadonlyArray<RunReceipt>;
|
|
195
|
-
|
|
207
|
+
/**
|
|
208
|
+
* The fold that keeps unpriced calls distinguishable from priced ones, so a
|
|
209
|
+
* run whose every receipt came back `unknown` renders as not measured rather
|
|
210
|
+
* than as a total of zero dollars.
|
|
211
|
+
*/
|
|
212
|
+
totalCost: CostAggregate;
|
|
196
213
|
/** Steps that ran unconditionally, excluding nodes a resolved loop skipped. */
|
|
197
214
|
requiredStepCount: number;
|
|
198
215
|
succeededStepCount: number;
|
|
@@ -217,6 +234,24 @@ function fleetGateCorrelation(subject: RunReceipt, decider: RunReceipt): GateDec
|
|
|
217
234
|
return { agent, target, modelFamily, runtime, node, independent };
|
|
218
235
|
}
|
|
219
236
|
|
|
237
|
+
/**
|
|
238
|
+
* Typed scope for one fleet step, drawn from the boundary its contract already
|
|
239
|
+
* declared. Returns null when the contract declared nothing for this position,
|
|
240
|
+
* which is every step of a pre-v4 contract and every readonly step: those keep
|
|
241
|
+
* the legacy inference path rather than being handed an empty declaration that
|
|
242
|
+
* would silently switch off path-scoped rule selection for them.
|
|
243
|
+
*
|
|
244
|
+
* A contract whose declared paths do not survive the boundary grammar is a
|
|
245
|
+
* compile-time authoring bug, not a dispatch-time one, so a malformed entry
|
|
246
|
+
* falls back to inference here rather than aborting a run mid-wave; the
|
|
247
|
+
* contract loader is the surface that refuses it.
|
|
248
|
+
*/
|
|
249
|
+
function fleetStepIntent(writes: ReadonlyArray<string> | undefined): DispatchIntent | null {
|
|
250
|
+
if (writes === undefined || writes.length === 0) return null;
|
|
251
|
+
const built = declaredScopeIntent({ relevantPaths: writes });
|
|
252
|
+
return built.ok ? built.intent : null;
|
|
253
|
+
}
|
|
254
|
+
|
|
220
255
|
export function fleetPlanWaveIndex(plan: ExecutionPlan, stepId: string): number {
|
|
221
256
|
return plan.waves.findIndex((wave) => wave.includes(stepId));
|
|
222
257
|
}
|
|
@@ -338,6 +373,9 @@ export async function executeFleetRun(input: ExecuteFleetRunInput): Promise<Flee
|
|
|
338
373
|
succeeded: true,
|
|
339
374
|
terminalRunId: replayedResult.terminalRunId,
|
|
340
375
|
costUsd: receiptsByStep.get(stepId)?.costUsd ?? 0,
|
|
376
|
+
// A replay whose receipt no longer exists on disk has no cost claim at
|
|
377
|
+
// all, which is `unknown` rather than a zero the projection invented.
|
|
378
|
+
costProvenance: receiptsByStep.get(stepId)?.costProvenance ?? "unknown",
|
|
341
379
|
result: replayedResult,
|
|
342
380
|
});
|
|
343
381
|
await fileStepAttempt(replayedResult.terminalRunId);
|
|
@@ -434,11 +472,24 @@ export async function executeFleetRun(input: ExecuteFleetRunInput): Promise<Flee
|
|
|
434
472
|
// The fleet write boundary is deliberately enforced after the step. The enforcer in
|
|
435
473
|
// write-boundary-enforcer.ts snapshots and verifies the step window. Pre-emptive
|
|
436
474
|
// confinement for declared commands would require a command sandbox, which does not exist.
|
|
475
|
+
//
|
|
476
|
+
// That enforcement split is exactly why a step's declared `writes:` reaches
|
|
477
|
+
// typed intent as `relevant_paths` rather than as `write_roots`. The
|
|
478
|
+
// contract already said what this position may change and the enforcer
|
|
479
|
+
// already holds it; restating it as intent write roots would mint a second
|
|
480
|
+
// grant enforced at the per-tool worker seam, which refuses outright on the
|
|
481
|
+
// subprocess and ACP runtimes a fleet may legitimately route a step to.
|
|
482
|
+
// Carrying it as declared scope changes no authority and gets the
|
|
483
|
+
// contract's own paths into project-rule selection and worker context,
|
|
484
|
+
// where prose tokens scraped from the rendered prompt were standing in for
|
|
485
|
+
// a declaration the contract had already made.
|
|
486
|
+
const stepIntent = fleetStepIntent(step.writes);
|
|
437
487
|
const request: DispatchRequest = {
|
|
438
488
|
agentId: step.agentId,
|
|
439
489
|
executionRole: step.executionRole,
|
|
440
490
|
task: step.task,
|
|
441
491
|
cwd: workspaceRoot,
|
|
492
|
+
...(stepIntent === null ? {} : { intent: stepIntent }),
|
|
442
493
|
predecessorHandoffs: handoffs,
|
|
443
494
|
requestOrigin: "user",
|
|
444
495
|
lineage: {
|
|
@@ -591,11 +642,12 @@ export async function executeFleetRun(input: ExecuteFleetRunInput): Promise<Flee
|
|
|
591
642
|
succeeded: stepSucceeded,
|
|
592
643
|
terminalRunId: receipt.runId,
|
|
593
644
|
costUsd: receipt.costUsd,
|
|
645
|
+
costProvenance: receipt.costProvenance,
|
|
594
646
|
receipt,
|
|
595
647
|
...(failureReason !== undefined ? { failureReason } : {}),
|
|
596
648
|
});
|
|
597
649
|
notice(
|
|
598
|
-
`step ${step.id} ${step.agentId}: ${stepSucceeded ? "succeeded" : "failed"}${failureReason !== undefined ? ` reason=${failureReason}` : ""} assignment=${handle.runId} terminal-run=${receipt.runId} cost
|
|
650
|
+
`step ${step.id} ${step.agentId}: ${stepSucceeded ? "succeeded" : "failed"}${failureReason !== undefined ? ` reason=${failureReason}` : ""} assignment=${handle.runId} terminal-run=${receipt.runId} cost=${renderCostAmount(receipt.costUsd, receipt.costProvenance)}`,
|
|
599
651
|
);
|
|
600
652
|
return {
|
|
601
653
|
stepId: step.id,
|
|
@@ -658,6 +710,8 @@ export async function executeFleetRun(input: ExecuteFleetRunInput): Promise<Flee
|
|
|
658
710
|
succeeded: outcome.report.passed,
|
|
659
711
|
terminalRunId: outcome.record.runId,
|
|
660
712
|
costUsd: 0,
|
|
713
|
+
// No model ran, so nothing needed pricing. This zero was observed.
|
|
714
|
+
costProvenance: "known_free",
|
|
661
715
|
codeStep: outcome.record,
|
|
662
716
|
recordPath,
|
|
663
717
|
});
|
|
@@ -802,7 +856,9 @@ export async function executeFleetRun(input: ExecuteFleetRunInput): Promise<Flee
|
|
|
802
856
|
planHash: input.plan.hash,
|
|
803
857
|
result,
|
|
804
858
|
receipts,
|
|
805
|
-
|
|
859
|
+
totalCost: aggregateCostAmounts(
|
|
860
|
+
receipts.map((receipt) => ({ usd: receipt.costUsd, provenance: receipt.costProvenance })),
|
|
861
|
+
),
|
|
806
862
|
requiredStepCount: required.length,
|
|
807
863
|
succeededStepCount,
|
|
808
864
|
resolvedLoopCount: result.loops.length - failedLoops.length,
|
|
@@ -298,10 +298,20 @@ export interface StagePendingGateDecisionOptions {
|
|
|
298
298
|
stateDir?: string;
|
|
299
299
|
}
|
|
300
300
|
|
|
301
|
-
|
|
301
|
+
/**
|
|
302
|
+
* Where the durable decision artifacts live.
|
|
303
|
+
*
|
|
304
|
+
* Exported so a read-only projection can bound its own scan without duplicating
|
|
305
|
+
* the layout. Nothing outside this module may compose an artifact path from it.
|
|
306
|
+
*/
|
|
307
|
+
export function gateDecisionsDirectory(stateDir = clioStateDir()): string {
|
|
302
308
|
return join(stateDir, "gate-decisions");
|
|
303
309
|
}
|
|
304
310
|
|
|
311
|
+
function decisionsDirectory(stateDir = clioStateDir()): string {
|
|
312
|
+
return gateDecisionsDirectory(stateDir);
|
|
313
|
+
}
|
|
314
|
+
|
|
305
315
|
function pendingDecisionsDirectory(stateDir = clioStateDir()): string {
|
|
306
316
|
return join(decisionsDirectory(stateDir), "pending");
|
|
307
317
|
}
|
|
@@ -370,7 +380,8 @@ function semanticError(value: unknown): string | null {
|
|
|
370
380
|
value.winner.index < 1 ||
|
|
371
381
|
!isSubjectRef(value.winner.subject) ||
|
|
372
382
|
typeof value.winner.branch !== "string" ||
|
|
373
|
-
value.winner.branch !== `clio/compete/${value.group}/${value.winner.index}`
|
|
383
|
+
(value.winner.branch !== `clio-coder/compete/${value.group}/${value.winner.index}` &&
|
|
384
|
+
value.winner.branch !== `clio/compete/${value.group}/${value.winner.index}`)
|
|
374
385
|
) {
|
|
375
386
|
return "gate decision winner invalid";
|
|
376
387
|
}
|
|
@@ -423,9 +434,12 @@ function pendingDecisionPath(id: string, stateDir = clioStateDir()): string {
|
|
|
423
434
|
return join(pendingDecisionsDirectory(stateDir), `${id}.json`);
|
|
424
435
|
}
|
|
425
436
|
|
|
426
|
-
function decisionPayload(
|
|
437
|
+
function decisionPayload(
|
|
438
|
+
decision: Omit<GateDecisionArtifact, "integrity">,
|
|
439
|
+
legacyNaming = false,
|
|
440
|
+
): Record<string, unknown> {
|
|
427
441
|
return {
|
|
428
|
-
contract: "clio.gateDecision.integrity",
|
|
442
|
+
contract: legacyNaming ? "clio.gateDecision.integrity" : "clio-coder.gateDecision.integrity",
|
|
429
443
|
version: decision.version,
|
|
430
444
|
id: decision.id,
|
|
431
445
|
group: decision.group,
|
|
@@ -457,9 +471,9 @@ function decisionPayload(decision: Omit<GateDecisionArtifact, "integrity">): Rec
|
|
|
457
471
|
};
|
|
458
472
|
}
|
|
459
473
|
|
|
460
|
-
function decisionDigest(decision: Omit<GateDecisionArtifact, "integrity"
|
|
474
|
+
function decisionDigest(decision: Omit<GateDecisionArtifact, "integrity">, legacyNaming = false): string {
|
|
461
475
|
return createHash("sha256")
|
|
462
|
-
.update(JSON.stringify(decisionPayload(decision)), "utf8")
|
|
476
|
+
.update(JSON.stringify(decisionPayload(decision, legacyNaming)), "utf8")
|
|
463
477
|
.digest("hex");
|
|
464
478
|
}
|
|
465
479
|
|
|
@@ -492,7 +506,9 @@ export function verifyGateDecisionArtifact(artifact: GateDecisionArtifact): Gate
|
|
|
492
506
|
const invalid = semanticError(artifact);
|
|
493
507
|
if (invalid !== null) return { ok: false, reason: invalid };
|
|
494
508
|
if (!/^[0-9a-f]{64}$/.test(artifact.integrity.digest)) return { ok: false, reason: "gate decision integrity invalid" };
|
|
495
|
-
|
|
509
|
+
const withoutIntegrity = artifactWithoutIntegrity(artifact);
|
|
510
|
+
return decisionDigest(withoutIntegrity) === artifact.integrity.digest ||
|
|
511
|
+
decisionDigest(withoutIntegrity, true) === artifact.integrity.digest
|
|
496
512
|
? { ok: true }
|
|
497
513
|
: { ok: false, reason: "gate decision integrity mismatch" };
|
|
498
514
|
}
|
|
@@ -587,10 +603,13 @@ function cloneGateDecisionArtifact(artifact: GateDecisionArtifact): GateDecision
|
|
|
587
603
|
};
|
|
588
604
|
}
|
|
589
605
|
|
|
590
|
-
function pendingRecordPayload(
|
|
606
|
+
function pendingRecordPayload(
|
|
607
|
+
record: PendingGateRecordWithoutIntegrity,
|
|
608
|
+
legacyNaming = false,
|
|
609
|
+
): Record<string, unknown> {
|
|
591
610
|
if (record.kind === "output") {
|
|
592
611
|
return {
|
|
593
|
-
contract: "clio.gateDecision.pending",
|
|
612
|
+
contract: legacyNaming ? "clio.gateDecision.pending" : "clio-coder.gateDecision.pending",
|
|
594
613
|
version: record.version,
|
|
595
614
|
kind: record.kind,
|
|
596
615
|
id: record.id,
|
|
@@ -607,12 +626,12 @@ function pendingRecordPayload(record: PendingGateRecordWithoutIntegrity): Record
|
|
|
607
626
|
}
|
|
608
627
|
const decisionWithoutIntegrity = artifactWithoutIntegrity(record.decision);
|
|
609
628
|
return {
|
|
610
|
-
contract: "clio.gateDecision.pending",
|
|
629
|
+
contract: legacyNaming ? "clio.gateDecision.pending" : "clio-coder.gateDecision.pending",
|
|
611
630
|
version: record.version,
|
|
612
631
|
kind: record.kind,
|
|
613
632
|
id: record.id,
|
|
614
633
|
decision: {
|
|
615
|
-
...decisionPayload(decisionWithoutIntegrity),
|
|
634
|
+
...decisionPayload(decisionWithoutIntegrity, legacyNaming),
|
|
616
635
|
integrity: { ...record.decision.integrity },
|
|
617
636
|
},
|
|
618
637
|
...(record.finalOutput !== undefined ? { finalOutput: record.finalOutput } : {}),
|
|
@@ -621,9 +640,9 @@ function pendingRecordPayload(record: PendingGateRecordWithoutIntegrity): Record
|
|
|
621
640
|
};
|
|
622
641
|
}
|
|
623
642
|
|
|
624
|
-
function pendingRecordDigest(record: PendingGateRecordWithoutIntegrity): string {
|
|
643
|
+
function pendingRecordDigest(record: PendingGateRecordWithoutIntegrity, legacyNaming = false): string {
|
|
625
644
|
return createHash("sha256")
|
|
626
|
-
.update(JSON.stringify(pendingRecordPayload(record)), "utf8")
|
|
645
|
+
.update(JSON.stringify(pendingRecordPayload(record, legacyNaming)), "utf8")
|
|
627
646
|
.digest("hex");
|
|
628
647
|
}
|
|
629
648
|
|
|
@@ -711,10 +730,12 @@ function pendingSemanticError(value: unknown): string | null {
|
|
|
711
730
|
}
|
|
712
731
|
|
|
713
732
|
/** Verify both the pending envelope and its nested final artifact, when resolved. */
|
|
714
|
-
|
|
733
|
+
function verifyPendingGateDecisionRecord(record: PendingGateDecisionRecord): GateDecisionVerification {
|
|
715
734
|
const invalid = pendingSemanticError(record);
|
|
716
735
|
if (invalid !== null) return { ok: false, reason: invalid };
|
|
717
|
-
|
|
736
|
+
const withoutIntegrity = pendingRecordWithoutIntegrity(record);
|
|
737
|
+
return pendingRecordDigest(withoutIntegrity) === record.integrity.digest ||
|
|
738
|
+
pendingRecordDigest(withoutIntegrity, true) === record.integrity.digest
|
|
718
739
|
? { ok: true }
|
|
719
740
|
: { ok: false, reason: "pending gate decision integrity mismatch" };
|
|
720
741
|
}
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
import { COUNCIL_BALLOT_SHAPE, COUNCIL_BALLOT_VERDICT_MAX_BYTES } from "../agents/result-contract.js";
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Roster bounds for a council. Two is the point of the topology: one seated
|
|
7
|
+
* agent is a plain dispatch, and there is nothing to compare. Capacity denials
|
|
8
|
+
* quote the floor because it is the reason a council cannot answer saturation
|
|
9
|
+
* by dispatching fewer members.
|
|
10
|
+
*/
|
|
11
|
+
export const COUNCIL_MIN_MEMBERS = 2;
|
|
12
|
+
export const COUNCIL_MAX_MEMBERS = 5;
|
|
13
|
+
|
|
5
14
|
export const REVIEWER_GATE_PROMPT = [
|
|
6
15
|
"You are a strict, read-only reviewer of one implementation run.",
|
|
7
16
|
"Inspect the supplied result and repository state with read-only tools.",
|