@iowarp/clio-coder 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/README.md +116 -16
- package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
- package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
- package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
- package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
- package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
- package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
- package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
- package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
- package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
- package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
- package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
- package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
- package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
- package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
- package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
- package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
- package/dist/chunk-AP73CFDC.js +308 -0
- package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
- package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
- package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
- package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/chunk-BWW4HLO4.js +301 -0
- package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-EIMVLWB3.js +1842 -0
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
- package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
- package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
- package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
- package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
- package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
- package/dist/chunk-J5LZHVIT.js +284 -0
- package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
- package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
- package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
- package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
- package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
- package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
- package/dist/chunk-QTFGO774.js +644 -0
- package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
- package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
- package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
- package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
- package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
- package/dist/chunk-U2WB7TZS.js +271 -0
- package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
- package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
- package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
- package/dist/chunk-VKFQTNDV.js +66 -0
- package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
- package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
- package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
- package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
- package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +36 -36
- package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
- package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
- package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
- package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
- package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
- package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
- package/dist/doctor-ZGPEGHIP.js +772 -0
- package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
- package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
- package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
- package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
- package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
- package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
- package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
- package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
- package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
- package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
- package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
- package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
- package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
- package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
- package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
- package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
- package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
- package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
- package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
- package/dist/worker/entry.js +57 -52
- package/docs/acp.md +1 -1
- package/docs/built-in-agents.md +40 -32
- package/docs/commands-and-modes.md +9 -3
- package/docs/config-knobs-audit.md +3 -0
- package/docs/configuration-and-targets.md +105 -164
- package/docs/environment-variables.md +2 -1
- package/docs/exit-codes-and-output.md +2 -0
- package/docs/fleet-demo-runbook.md +6 -3
- package/docs/fleet-dispatch.md +8 -6
- package/docs/installation-and-lifecycle.md +1 -1
- package/docs/release-cut-checklist.md +164 -177
- package/docs/trace-store.md +15 -10
- package/docs/troubleshooting.md +1 -1
- package/evals/README.md +5 -0
- package/evals/behavioral-corpus-grader.mjs +103 -0
- package/evals/behavioral-machinery-baseline.json +2276 -0
- package/evals/behavioral-machinery-driver.ts +250 -0
- package/evals/behavioral-machinery-support.ts +253 -0
- package/evals/behavioral-machinery.yaml +614 -0
- package/evals/behavioral-model-negative-control.yaml +68 -0
- package/evals/behavioral-model.yaml +216 -0
- package/evals/fixtures/behavioral-facts.txt +3 -0
- package/evals/fixtures/behavioral-main.ts +7 -0
- package/evals/fixtures/decoy/note.txt +2 -0
- package/evals/fixtures/private/credentials.txt +1 -0
- package/evals/tracked-metrics-baseline.yaml +229 -0
- package/evals/tracked-metrics-grader.mjs +129 -0
- package/package.json +5 -15
- package/skills/README.md +6 -6
- package/skills/coding/ast-grep/SKILL.md +8 -2
- package/skills/coding/coding-standards/SKILL.md +8 -2
- package/skills/coding/prototype/SKILL.md +8 -2
- package/skills/coding/tdd/SKILL.md +8 -2
- package/skills/context/context-handoff/SKILL.md +12 -3
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +8 -2
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +9 -4
- package/skills/git/file-ticket/evals.md +2 -2
- package/skills/git/fix-issue/SKILL.md +12 -5
- package/skills/git/fix-issue/evals.md +4 -4
- package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +9 -3
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +7 -2
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +7 -2
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
- package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
- package/skills/meta/credentials/SKILL.md +9 -2
- package/skills/meta/find-skills/SKILL.md +8 -2
- package/skills/meta/herdr/SKILL.md +8 -2
- package/skills/meta/skill-craft/SKILL.md +21 -4
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +8 -2
- package/skills/planning/prd/SKILL.md +8 -2
- package/skills/planning/product-intent/SKILL.md +8 -2
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +8 -2
- package/skills/research/experiment-protocol/SKILL.md +9 -2
- package/skills/research/scientific-debugging/SKILL.md +9 -2
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +9 -2
- package/skills/skill-marketplace.json +257 -38
- package/skills/workflow/cut-it/SKILL.md +10 -2
- package/skills/workflow/design-council/SKILL.md +11 -2
- package/skills/workflow/grill-me/SKILL.md +8 -2
- package/skills/workflow/workflow-distiller/SKILL.md +8 -2
- package/src/cli/acp.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +5 -5
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +3 -3
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -27
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +6 -6
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +29 -8
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +8 -5
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +11 -15
- package/src/cli/share.ts +1 -1
- package/src/cli/skills-eval.ts +11 -11
- package/src/cli/targets.ts +23 -24
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +41 -0
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +1 -1
- package/src/cli/wiki-generate.ts +5 -5
- package/src/core/bash-exec.ts +1 -1
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1062 -886
- package/src/core/defaults.ts +321 -528
- package/src/core/domain-loader.ts +6 -4
- package/src/core/event-bus.ts +1 -1
- package/src/core/file-references.ts +78 -88
- package/src/core/git-commit-attribution.ts +3 -9
- package/src/core/guardrails.ts +24 -4
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- package/src/domains/agents/catalog.ts +2 -12
- package/src/domains/agents/extension.ts +3 -3
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +48 -47
- package/src/domains/config/watcher.ts +1 -1
- package/src/domains/context/codewiki/indexer.ts +1 -1
- package/src/domains/context/extension.ts +3 -3
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +65 -61
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +0 -61
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +0 -23
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal.ts +6 -5
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +2 -19
- package/src/domains/dispatch/types.ts +3 -3
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +5 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +12 -2
- package/src/domains/eval/suites/run.ts +12 -6
- package/src/domains/eval/types.ts +1 -1
- package/src/domains/eval/workspaces/git.ts +1 -1
- package/src/domains/eval/workspaces/temp-copy.ts +1 -1
- package/src/domains/evidence/build.ts +13 -5
- package/src/domains/interop/consent.ts +7 -7
- package/src/domains/interop/extension.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +27 -21
- package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
- package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
- package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
- package/src/domains/lifecycle/migrations/index.ts +20 -1
- package/src/domains/lifecycle/naming-history.ts +153 -0
- package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
- package/src/domains/lifecycle/naming-resources.ts +261 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +81 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/index.ts +7 -0
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/runtime.ts +2 -2
- package/src/domains/mux/contract.ts +157 -25
- package/src/domains/mux/detect.ts +29 -5
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +20 -0
- package/src/domains/mux/operations.ts +28 -0
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +26 -3
- package/src/domains/observability/extension.ts +1 -1
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +1 -1
- package/src/domains/observability/trace-store.ts +22 -12
- package/src/domains/prompts/compiler.ts +2 -2
- package/src/domains/prompts/extension.ts +3 -3
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
- package/src/domains/prompts/fragments/operating/skills.md +25 -18
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +14 -2
- package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
- package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
- package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +2 -2
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +39 -13
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/run-effects.ts +1 -1
- package/src/domains/scheduling/extension.ts +4 -4
- package/src/domains/session/archive-readers.ts +9 -1
- package/src/domains/session/compaction/branch-summary.ts +4 -0
- package/src/domains/session/compaction/compact.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +4 -0
- package/src/domains/session/context-accounting.ts +1 -1
- package/src/domains/session/decision-board.ts +1 -1
- package/src/domains/session/extension.ts +1 -1
- package/src/domains/session/handoff.ts +2 -2
- package/src/domains/session/prompt-manifest.ts +0 -5
- package/src/domains/session/protected-artifact-journal.ts +12 -6
- package/src/domains/session/retry.ts +1 -1
- package/src/domains/share/archive.ts +85 -36
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +27 -26
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +1 -19
- package/src/engine/apis/lmstudio.ts +1 -6
- package/src/engine/apis/ollama-native.ts +3 -3
- package/src/engine/apis/openai-completions.ts +2 -2
- package/src/engine/apis/residency.ts +3 -9
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/loop-guard.ts +0 -5
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +14 -13
- package/src/entry/orchestrator.ts +107 -88
- package/src/interactive/application-controller.ts +21 -21
- package/src/interactive/bus-notices.ts +2 -2
- package/src/interactive/chat-loop.ts +8 -8
- package/src/interactive/chat-panel.ts +1 -1
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +30 -33
- package/src/interactive/editor-bash.ts +21 -0
- package/src/interactive/editor-steer.ts +9 -4
- package/src/interactive/editor-submit.ts +24 -18
- package/src/interactive/external-editor.ts +1 -1
- package/src/interactive/file-reference-completion.ts +360 -0
- package/src/interactive/footer/dashboard.ts +15 -17
- package/src/interactive/footer/notifications.ts +14 -8
- package/src/interactive/footer/widgets.ts +2 -44
- package/src/interactive/interactive-application.ts +79 -59
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +2 -2
- package/src/interactive/interactive-presentation.ts +21 -16
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +63 -17
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +339 -293
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +36 -10
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +279 -183
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -1
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +11 -11
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +12 -5
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +1 -1
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/index.ts +15 -1
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +1 -1
- package/src/tools/dispatch-plan.ts +0 -11
- package/src/tools/dispatch-run-events.ts +12 -10
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/find.ts +1 -6
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observers.ts +0 -33
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/web-fetch.ts +1 -1
- package/src/worker/entry.ts +4 -3
- package/src/worker/protocol.ts +16 -14
- package/src/worker/spec-contract.ts +2 -2
- package/src/worker/stdin-demux.ts +2 -2
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/src/engine/apis/degraded-inference.ts +0 -95
- /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
- /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
package/src/cli/doctor-panes.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { accessSync, constants
|
|
1
|
+
import { accessSync, constants } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
2
3
|
import { readSettings } from "../core/config.js";
|
|
3
|
-
import {
|
|
4
|
+
import { resolveClioDirs } from "../core/xdg.js";
|
|
4
5
|
import type { DoctorFinding } from "../domains/lifecycle/doctor.js";
|
|
5
6
|
import { detectMux, MUX_METHOD_MIN_PROTOCOL, resolveSocketCandidates } from "../domains/mux/index.js";
|
|
6
7
|
import { describeResolution, findPinnedTool, toolStatus } from "../domains/toolchain/index.js";
|
|
@@ -8,10 +9,11 @@ import { describeResolution, findPinnedTool, toolStatus } from "../domains/toolc
|
|
|
8
9
|
/**
|
|
9
10
|
* The panes section of `clio-coder doctor`.
|
|
10
11
|
*
|
|
11
|
-
*
|
|
12
|
+
* Six rows, in the order an operator debugs them: what mode the pane layer
|
|
12
13
|
* resolved to, whether the socket answered, whether the server is new enough
|
|
13
|
-
* for the methods phase 3 uses, where the pane host binary resolves,
|
|
14
|
-
* whether the journal directory the viewer reads is
|
|
14
|
+
* for the methods phase 3 uses, where the pane host binary resolves, what the
|
|
15
|
+
* boot layout composes, and whether the journal directory the viewer reads is
|
|
16
|
+
* writable.
|
|
15
17
|
*
|
|
16
18
|
* No row is an error. Panes are optional: an operator who never wanted them has
|
|
17
19
|
* a healthy install without them, and doctor's exit code answers "is this
|
|
@@ -24,11 +26,8 @@ const PANE_HOST_TOOL_ID = "herdr";
|
|
|
24
26
|
/** Highest protocol any method Clio drives requires, for the version row. */
|
|
25
27
|
const REQUIRED_PROTOCOL = Math.max(...Object.values(MUX_METHOD_MIN_PROTOCOL));
|
|
26
28
|
|
|
27
|
-
function journalWritabilityFinding(root =
|
|
29
|
+
function journalWritabilityFinding(root = join(resolveClioDirs().state, "runs")): DoctorFinding {
|
|
28
30
|
try {
|
|
29
|
-
// The viewer reads this tree and the journal writes it, so the useful
|
|
30
|
-
// question is whether it can exist and be written, not whether it does.
|
|
31
|
-
mkdirSync(root, { recursive: true });
|
|
32
31
|
accessSync(root, constants.W_OK);
|
|
33
32
|
return { ok: true, name: "panes journal dir", detail: `${root} is writable` };
|
|
34
33
|
} catch (error) {
|
|
@@ -36,15 +35,28 @@ function journalWritabilityFinding(root = runEventJournalRoot()): DoctorFinding
|
|
|
36
35
|
ok: true,
|
|
37
36
|
level: "warn",
|
|
38
37
|
name: "panes journal dir",
|
|
39
|
-
detail: `${root} is not writable (${error instanceof Error ? error.message : String(error)}); \`clio-coder fleet view\` will have no transcript to follow`,
|
|
38
|
+
detail: `${root} is absent or not writable (${error instanceof Error ? error.message : String(error)}); \`clio-coder fleet view\` will have no transcript to follow`,
|
|
40
39
|
};
|
|
41
40
|
}
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
export async function panesFindings(env: NodeJS.ProcessEnv = process.env): Promise<DoctorFinding[]> {
|
|
45
44
|
let enabled: "auto" | "embedded" | "off" = "off";
|
|
45
|
+
let layoutRow: DoctorFinding = {
|
|
46
|
+
ok: true,
|
|
47
|
+
name: "panes layout",
|
|
48
|
+
detail: "off",
|
|
49
|
+
};
|
|
46
50
|
try {
|
|
47
|
-
|
|
51
|
+
const panes = readSettings().interface.panes;
|
|
52
|
+
enabled = panes.enabled;
|
|
53
|
+
if (panes.layout !== "off") {
|
|
54
|
+
layoutRow = {
|
|
55
|
+
ok: true,
|
|
56
|
+
name: "panes layout",
|
|
57
|
+
detail: `${panes.layout} at boot (workers dock ${(panes.workers.ratio * 100).toFixed(0)}%, files dock ${(panes.files.ratio * 100).toFixed(0)}%)`,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
48
60
|
} catch {
|
|
49
61
|
// An unreadable settings file is already reported by the settings row;
|
|
50
62
|
// this section answers on the shipped default (off) rather than throwing.
|
|
@@ -59,10 +71,9 @@ export async function panesFindings(env: NodeJS.ProcessEnv = process.env): Promi
|
|
|
59
71
|
{
|
|
60
72
|
ok: true,
|
|
61
73
|
name: "panes mode",
|
|
62
|
-
detail:
|
|
63
|
-
"off by choice (panes.enabled=off); start `clio-coder --with-panes` for one session, or set panes.enabled=auto",
|
|
74
|
+
detail: "off by choice",
|
|
64
75
|
},
|
|
65
|
-
|
|
76
|
+
layoutRow,
|
|
66
77
|
];
|
|
67
78
|
}
|
|
68
79
|
|
|
@@ -70,6 +81,7 @@ export async function panesFindings(env: NodeJS.ProcessEnv = process.env): Promi
|
|
|
70
81
|
// answer that boot would get. It opens a socket and nothing else: no file is
|
|
71
82
|
// created and no pane is touched.
|
|
72
83
|
const { detection, client } = await detectMux({ enabled, env });
|
|
84
|
+
const snapshot = client ? await client.snapshot().catch(() => null) : null;
|
|
73
85
|
await client?.close().catch(() => undefined);
|
|
74
86
|
|
|
75
87
|
const candidates = detection.candidates.length > 0 ? detection.candidates : resolveSocketCandidates(env);
|
|
@@ -119,6 +131,26 @@ export async function panesFindings(env: NodeJS.ProcessEnv = process.env): Promi
|
|
|
119
131
|
},
|
|
120
132
|
);
|
|
121
133
|
|
|
134
|
+
findings.push(layoutRow);
|
|
135
|
+
const legacyOwnedPanes =
|
|
136
|
+
snapshot?.panes.filter(
|
|
137
|
+
(pane) => pane.tokens.clio_owner === "clio:mux" && pane.tokens.clio_coder_owner !== "clio-coder:mux",
|
|
138
|
+
).length ?? 0;
|
|
139
|
+
const staleWatchTitles =
|
|
140
|
+
snapshot?.panes.filter(
|
|
141
|
+
(pane) =>
|
|
142
|
+
(pane.title === "clio watch" || pane.label === "clio watch") &&
|
|
143
|
+
(pane.tokens.clio_coder_owner === "clio-coder:mux" || pane.tokens.clio_owner === "clio:mux"),
|
|
144
|
+
).length ?? 0;
|
|
145
|
+
findings.push({
|
|
146
|
+
ok: true,
|
|
147
|
+
level: legacyOwnedPanes > 0 || staleWatchTitles > 0 ? "warn" : "ok",
|
|
148
|
+
name: "naming panes",
|
|
149
|
+
detail:
|
|
150
|
+
legacyOwnedPanes > 0 || staleWatchTitles > 0
|
|
151
|
+
? `${legacyOwnedPanes} panes carry only the legacy clio_owner=clio:mux token; ${staleWatchTitles} owned panes retain the stale 'clio watch' title; quit/cleanup recognizes both token schemes`
|
|
152
|
+
: "no legacy Clio Coder pane ownership tokens or watch titles found",
|
|
153
|
+
});
|
|
122
154
|
findings.push(journalWritabilityFinding());
|
|
123
155
|
return findings;
|
|
124
156
|
}
|
|
@@ -7,7 +7,19 @@ import {
|
|
|
7
7
|
} from "../domains/mux/index.js";
|
|
8
8
|
import { describeResolution, toolStatuses } from "../domains/toolchain/index.js";
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
export interface ToolchainFindingOptions {
|
|
11
|
+
panesEnabled?: boolean;
|
|
12
|
+
filesEnabled?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function yaziProfileFinding(enabled: boolean): DoctorFinding {
|
|
16
|
+
if (!enabled) {
|
|
17
|
+
return {
|
|
18
|
+
ok: true,
|
|
19
|
+
name: "yazi managed profile",
|
|
20
|
+
detail: "disabled by settings",
|
|
21
|
+
};
|
|
22
|
+
}
|
|
11
23
|
try {
|
|
12
24
|
const profile = inspectCurrentYaziProfile();
|
|
13
25
|
return {
|
|
@@ -43,15 +55,24 @@ function yaziProfileFinding(): DoctorFinding {
|
|
|
43
55
|
* being used, and a row that only said "not found" would send them looking for
|
|
44
56
|
* a binary that is right there on their PATH.
|
|
45
57
|
*/
|
|
46
|
-
export function toolchainFindings(): DoctorFinding[] {
|
|
58
|
+
export function toolchainFindings(options: ToolchainFindingOptions = {}): DoctorFinding[] {
|
|
59
|
+
const panesEnabled = options.panesEnabled ?? true;
|
|
60
|
+
const filesEnabled = options.filesEnabled ?? true;
|
|
47
61
|
const tools = toolStatuses().map((status) => ({
|
|
48
62
|
ok: true,
|
|
49
63
|
name: `external tool ${status.id}`,
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
64
|
+
// Active integrations share the tools-status resolution sentence. Disabled
|
|
65
|
+
// experimental integrations stay neutral and do not advertise setup work.
|
|
66
|
+
detail:
|
|
67
|
+
(status.id === "herdr" && !panesEnabled) || (status.id === "yazi" && !filesEnabled)
|
|
68
|
+
? "experimental integration disabled by settings"
|
|
69
|
+
: describeResolution(status),
|
|
70
|
+
level:
|
|
71
|
+
(status.id === "herdr" && !panesEnabled) || (status.id === "yazi" && !filesEnabled)
|
|
72
|
+
? ("ok" as const)
|
|
73
|
+
: status.resolution.source === "none"
|
|
74
|
+
? ("warn" as const)
|
|
75
|
+
: ("ok" as const),
|
|
55
76
|
}));
|
|
56
|
-
return [...tools, yaziProfileFinding()];
|
|
77
|
+
return [...tools, yaziProfileFinding(filesEnabled)];
|
|
57
78
|
}
|
package/src/cli/doctor.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { readSettings } from "../core/config.js";
|
|
1
2
|
import {
|
|
2
3
|
formatDoctorReport,
|
|
3
4
|
isUninitializedHome,
|
|
@@ -7,6 +8,7 @@ import {
|
|
|
7
8
|
runDoctorModelChecks,
|
|
8
9
|
runDoctorRuntimeChecks,
|
|
9
10
|
} from "../domains/lifecycle/doctor.js";
|
|
11
|
+
import { namingFootprintFindings } from "./doctor-naming.js";
|
|
10
12
|
import { panesFindings } from "./doctor-panes.js";
|
|
11
13
|
import { stateStorageFinding } from "./doctor-state-size.js";
|
|
12
14
|
import { toolchainFindings } from "./doctor-toolchain.js";
|
|
@@ -38,6 +40,16 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
|
|
|
38
40
|
// gets every check on the home it just built.
|
|
39
41
|
const untouched = !fix && isUninitializedHome();
|
|
40
42
|
const findings = runDoctor({ fix });
|
|
43
|
+
let panesEnabled = false;
|
|
44
|
+
let filesEnabled = false;
|
|
45
|
+
try {
|
|
46
|
+
const panes = readSettings().interface.panes;
|
|
47
|
+
panesEnabled = panes.enabled !== "off";
|
|
48
|
+
filesEnabled = panesEnabled && panes.files.enabled;
|
|
49
|
+
} catch {
|
|
50
|
+
// The settings finding already reports an unreadable document. Optional
|
|
51
|
+
// integrations stay inactive rather than adding secondary warnings.
|
|
52
|
+
}
|
|
41
53
|
const storageChecks = untouched ? [] : [stateStorageFinding()];
|
|
42
54
|
const runtimeChecks = await runDoctorRuntimeChecks();
|
|
43
55
|
// Every model pointer is checked against what its target advertises, so a
|
|
@@ -54,11 +66,12 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
|
|
|
54
66
|
// Resolution reads PATH and the vendor root and creates nothing, but on an
|
|
55
67
|
// untouched home there is no vendor root to look at and the answer would be
|
|
56
68
|
// "none" for every row regardless, so the sweep stays with the others.
|
|
57
|
-
const toolChecks = untouched ? [] : toolchainFindings();
|
|
69
|
+
const toolChecks = untouched ? [] : toolchainFindings({ panesEnabled, filesEnabled });
|
|
58
70
|
// The pane sweep pings a socket and reads PATH; it creates nothing except the
|
|
59
71
|
// journal directory it is asked about, which is inside the state root doctor
|
|
60
72
|
// has already agreed not to build on an untouched home.
|
|
61
73
|
const paneChecks = untouched ? [] : await panesFindings();
|
|
74
|
+
const namingChecks = namingFootprintFindings({ fix, yaziEnabled: filesEnabled });
|
|
62
75
|
const all = [
|
|
63
76
|
...findings,
|
|
64
77
|
...storageChecks,
|
|
@@ -68,6 +81,7 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
|
|
|
68
81
|
...fleetChecks,
|
|
69
82
|
...toolChecks,
|
|
70
83
|
...paneChecks,
|
|
84
|
+
...namingChecks,
|
|
71
85
|
];
|
|
72
86
|
const ok = all.every((f) => f.ok);
|
|
73
87
|
if (json) {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* An eval artifact is the largest single host-only payload in this harness, and
|
|
12
12
|
* the reason is worth stating rather than discovering. `results[].artifacts`
|
|
13
|
-
* holds whatever the runner attached, which for the `clio-run` runner is the
|
|
13
|
+
* holds whatever the runner attached, which for the `clio-coder-run` runner is the
|
|
14
14
|
* entire session transcript: the operator's task text, every tool argument and
|
|
15
15
|
* result, the model's replies, provider endpoint URLs, error prose, and the
|
|
16
16
|
* prepared workspace path. There is no width at which a projection of that is
|
|
@@ -107,8 +107,8 @@ export interface EvalInventoryReport {
|
|
|
107
107
|
* needs, and the ordinal reveals nothing about the values behind it.
|
|
108
108
|
*/
|
|
109
109
|
readonly servingGroup: number;
|
|
110
|
-
readonly
|
|
111
|
-
readonly
|
|
110
|
+
readonly clioCoderVersion: string | null;
|
|
111
|
+
readonly clioCoderCommit: string | null;
|
|
112
112
|
readonly platform: string | null;
|
|
113
113
|
readonly node: string | null;
|
|
114
114
|
readonly matrix: {
|
|
@@ -348,15 +348,15 @@ function projectReport(
|
|
|
348
348
|
const serving = evalServingConfigurationOf(artifact);
|
|
349
349
|
const { counts, failureClasses, behaviorOutcomes } = countResults(artifact.results);
|
|
350
350
|
const { scenarios, truncated, dropped } = projectScenarios(artifact);
|
|
351
|
-
const version = artifact.
|
|
352
|
-
const commit = artifact.
|
|
351
|
+
const version = artifact.clioCoder.version;
|
|
352
|
+
const commit = artifact.clioCoder.commit;
|
|
353
353
|
return {
|
|
354
354
|
evalId,
|
|
355
355
|
startedAt,
|
|
356
356
|
suiteId: identifier(artifact.suite.id) ?? "unavailable",
|
|
357
357
|
servingGroup,
|
|
358
|
-
|
|
359
|
-
|
|
358
|
+
clioCoderVersion: VERSION_PATTERN.test(version) ? version : null,
|
|
359
|
+
clioCoderCommit: commit !== null && COMMIT_PATTERN.test(commit) ? commit : null,
|
|
360
360
|
platform: identifier(artifact.environment.platform),
|
|
361
361
|
node: identifier(artifact.environment.node),
|
|
362
362
|
matrix: {
|
|
@@ -394,7 +394,7 @@ function projectReport(
|
|
|
394
394
|
};
|
|
395
395
|
}
|
|
396
396
|
|
|
397
|
-
|
|
397
|
+
async function evalInventorySnapshot(
|
|
398
398
|
now: () => number = Date.now,
|
|
399
399
|
dataDir: string = clioDataDir(),
|
|
400
400
|
): Promise<EvalInventorySnapshot> {
|
|
@@ -46,7 +46,7 @@ export interface EvidenceDetailSnapshot {
|
|
|
46
46
|
readonly runsTruncated: boolean;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
async function evidenceDetailSnapshot(
|
|
50
50
|
evidenceId: string,
|
|
51
51
|
now: () => number = Date.now,
|
|
52
52
|
dataDir: string = clioDataDir(),
|
|
@@ -110,7 +110,7 @@ function byNewest(a: EvidenceOverview, b: EvidenceOverview): number {
|
|
|
110
110
|
return (Date.parse(b.generatedAt) || 0) - (Date.parse(a.generatedAt) || 0);
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
async function evidenceInventorySnapshot(
|
|
114
114
|
now: () => number = Date.now,
|
|
115
115
|
dataDir: string = clioDataDir(),
|
|
116
116
|
): Promise<EvidenceInventorySnapshot> {
|
|
@@ -47,7 +47,7 @@ export type { GateDecisionReason, GateTopologyDecision };
|
|
|
47
47
|
* different operator states, so the flag is reported rather than inferred from
|
|
48
48
|
* an empty list.
|
|
49
49
|
*/
|
|
50
|
-
|
|
50
|
+
function fleetDecisionsSnapshot(now: () => number = Date.now): FleetDecisionsSnapshot {
|
|
51
51
|
const topology = gateTopology();
|
|
52
52
|
return {
|
|
53
53
|
version: 1,
|
package/src/cli/fleet-inspect.ts
CHANGED
|
@@ -204,7 +204,7 @@ function evidenceProjection(text: string): FleetInspectRun["evidence"] {
|
|
|
204
204
|
}
|
|
205
205
|
|
|
206
206
|
/** Pure command payload builder, exported so the fixed CLI contract is testable without subprocess output capture. */
|
|
207
|
-
|
|
207
|
+
function fleetInspectSnapshot(now: () => number = Date.now): FleetInspectSnapshot {
|
|
208
208
|
const ledgerRows = openLedger().list();
|
|
209
209
|
const selected = ledgerRows.slice(0, FLEET_INSPECT_MAX_RUNS);
|
|
210
210
|
// The council window is deliberately wider than the run window. A single
|
|
@@ -33,7 +33,7 @@ export function inspectFleet(name: string, vars?: Readonly<Record<string, string
|
|
|
33
33
|
const resolved = new Set<string>();
|
|
34
34
|
const settings = readSettings();
|
|
35
35
|
const targetIds = new Set(settings.targets.map((target) => target.id));
|
|
36
|
-
const profileIds = new Set(Object.keys(settings.
|
|
36
|
+
const profileIds = new Set(Object.keys(settings.fleet?.profiles ?? {}));
|
|
37
37
|
for (const step of contract.steps) {
|
|
38
38
|
const positions =
|
|
39
39
|
step.kind === "loop"
|
package/src/cli/fleet-verify.ts
CHANGED
|
@@ -83,7 +83,7 @@ function loadReceipt(envelope: RunEnvelope): RunReceipt | null {
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/** Pure payload builder, exported so the fixed contract is testable without subprocess capture. */
|
|
86
|
-
|
|
86
|
+
function fleetVerifySnapshot(runId: string, now: () => number = Date.now): FleetVerifySnapshot {
|
|
87
87
|
const envelope = openLedger().get(runId);
|
|
88
88
|
if (envelope === null) throw new FleetVerifyUnknownRunError(`unknown run '${runId}'`);
|
|
89
89
|
const verifiedAt = new Date(now()).toISOString();
|
package/src/cli/fleet-view.ts
CHANGED
|
@@ -47,7 +47,7 @@ import { WRITE_BOUNDARY_VIOLATION_REASON } from "../domains/dispatch/write-bound
|
|
|
47
47
|
import { formatTrustSummaryLine } from "../domains/evidence/trust-projection.js";
|
|
48
48
|
import { inspectRunReceiptTrustStatus } from "../domains/evidence/trust-status.js";
|
|
49
49
|
import { sanitizeCallTargetText } from "../domains/safety/call-target.js";
|
|
50
|
-
import { truncateToWidth } from "../engine/tui-primitives.js";
|
|
50
|
+
import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../engine/tui-primitives.js";
|
|
51
51
|
|
|
52
52
|
const HELP = `clio-coder fleet view <runId|fleetRootId> [--follow]
|
|
53
53
|
clio-coder fleet view --watch <selection-file>
|
|
@@ -62,7 +62,7 @@ run event journal, and the sealed receipt once it exists.
|
|
|
62
62
|
|
|
63
63
|
Without --follow the current snapshot is printed and the command exits.
|
|
64
64
|
The transcript comes from <state>/runs/<runId>/events.ndjson, which the
|
|
65
|
-
orchestrator writes when
|
|
65
|
+
orchestrator writes when fleet.history.journal is on (the default). A run dispatched
|
|
66
66
|
with the journal off shows its ledger and receipt but no transcript.
|
|
67
67
|
|
|
68
68
|
Given the fleet root id that \`fleet run\` prints (fleet-<hex>), this prints the
|
|
@@ -126,6 +126,11 @@ function sanitizeBounded(value: string, maxWidth: number): string {
|
|
|
126
126
|
return sanitizeCallTargetText(truncateToWidth(sanitized, maxWidth, "…", false));
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
+
/** The ANSI-aware TUI truncator appends reset codes; stdout snapshots are plain text. */
|
|
130
|
+
function truncatePlain(value: string, width: number): string {
|
|
131
|
+
return truncateToWidth(value, width, "…", false).replaceAll("\u001B[0m", "");
|
|
132
|
+
}
|
|
133
|
+
|
|
129
134
|
function receiptPathFor(run: RunEnvelope): string {
|
|
130
135
|
return run.receiptPath ?? join(clioStateDir(), "receipts", `${run.id}.json`);
|
|
131
136
|
}
|
|
@@ -199,7 +204,7 @@ export interface LoadRunViewOptions {
|
|
|
199
204
|
* first, then a unique prefix. An ambiguous prefix resolves to nothing so the
|
|
200
205
|
* caller can say which ids it matched.
|
|
201
206
|
*/
|
|
202
|
-
|
|
207
|
+
function resolveRunId(runId: string): { runId: string } | { candidates: string[] } {
|
|
203
208
|
const ledger = openLedger();
|
|
204
209
|
if (ledger.get(runId) !== null) return { runId };
|
|
205
210
|
const candidates = ledger
|
|
@@ -268,44 +273,58 @@ function clockOf(iso: string): string {
|
|
|
268
273
|
return time.length === 8 ? time : iso.slice(0, 8);
|
|
269
274
|
}
|
|
270
275
|
|
|
276
|
+
/** Wrap a viewer value inside the columns left by its one-time field label. */
|
|
277
|
+
function wrapViewerValue(prefix: string, value: string, columns: number): string[] {
|
|
278
|
+
const prefixWidth = visibleWidth(prefix);
|
|
279
|
+
const valueWidth = Math.max(1, columns - prefixWidth);
|
|
280
|
+
return wrapTextWithAnsi(value, valueWidth).map(
|
|
281
|
+
(line, index) => `${index === 0 ? prefix : " ".repeat(prefixWidth)}${line}`,
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
|
|
271
285
|
/**
|
|
272
286
|
* The whole viewer surface as lines. Pure: given the same model and width it
|
|
273
287
|
* returns the same strings, which is what lets the data-source test assert the
|
|
274
288
|
* header and outcome without a PTY.
|
|
275
289
|
*/
|
|
276
|
-
|
|
290
|
+
function renderRunView(model: RunViewModel, width: number = DEFAULT_WIDTH): string[] {
|
|
277
291
|
const columns = Math.max(MIN_WIDTH, width);
|
|
278
292
|
const rule = "─".repeat(columns);
|
|
279
293
|
const lines: string[] = [];
|
|
280
|
-
lines.push(
|
|
294
|
+
lines.push(truncatePlain(`run ${model.runId} ${model.agentId}`, columns));
|
|
281
295
|
lines.push(
|
|
282
|
-
|
|
296
|
+
truncatePlain(
|
|
283
297
|
`model ${model.model} target ${model.target} node ${model.node} phase ${model.phase} elapsed ${formatElapsed(model.elapsedMs)}`,
|
|
284
298
|
columns,
|
|
285
|
-
"…",
|
|
286
|
-
false,
|
|
287
299
|
),
|
|
288
300
|
);
|
|
289
301
|
if (model.task !== undefined) {
|
|
290
|
-
lines.push(
|
|
302
|
+
lines.push(...wrapViewerValue("task ", model.task, columns));
|
|
291
303
|
}
|
|
292
304
|
lines.push(rule);
|
|
293
305
|
if (!model.journalPresent) {
|
|
294
306
|
lines.push("no event journal for this run.");
|
|
295
|
-
lines.push(
|
|
307
|
+
lines.push(
|
|
308
|
+
...wrapViewerValue(
|
|
309
|
+
"expected ",
|
|
310
|
+
`${model.journalPath} (fleet.history.journal may have been off when it ran)`,
|
|
311
|
+
columns,
|
|
312
|
+
),
|
|
313
|
+
);
|
|
296
314
|
} else if (model.transcript.length === 0) {
|
|
297
315
|
lines.push("journal is empty; no events recorded yet.");
|
|
298
316
|
} else {
|
|
299
317
|
if (model.transcriptTruncated) lines.push("… earlier events dropped (journal truncated)");
|
|
300
318
|
for (const entry of model.transcript) {
|
|
301
319
|
const head = `${clockOf(entry.at)} ${entry.label}`;
|
|
302
|
-
|
|
320
|
+
if (entry.detail === undefined) lines.push(truncatePlain(head, columns));
|
|
321
|
+
else lines.push(...wrapViewerValue(`${head}: `, entry.detail, columns));
|
|
303
322
|
}
|
|
304
323
|
}
|
|
305
324
|
lines.push(rule);
|
|
306
|
-
lines.push(
|
|
325
|
+
lines.push(...wrapViewerValue("evidence ", model.evidence, columns));
|
|
307
326
|
if (model.receiptPath !== null) {
|
|
308
|
-
lines.push(
|
|
327
|
+
lines.push(truncatePlain(`receipt ${model.receiptPath}`, columns));
|
|
309
328
|
}
|
|
310
329
|
const outcome =
|
|
311
330
|
model.outcome === null
|
|
@@ -315,7 +334,7 @@ export function renderRunView(model: RunViewModel, width: number = DEFAULT_WIDTH
|
|
|
315
334
|
: model.outcomeDetail === null || model.outcomeDetail.length === 0
|
|
316
335
|
? model.outcome
|
|
317
336
|
: `${model.outcome} (${sanitizeBounded(model.outcomeDetail, DETAIL_MAX_WIDTH)})`;
|
|
318
|
-
lines.push(
|
|
337
|
+
lines.push(...wrapViewerValue("outcome ", outcome, columns));
|
|
319
338
|
return lines;
|
|
320
339
|
}
|
|
321
340
|
|
|
@@ -326,7 +345,7 @@ export function renderRunView(model: RunViewModel, width: number = DEFAULT_WIDTH
|
|
|
326
345
|
* the first is the pane before any worker was entered, the second is a queued
|
|
327
346
|
* run the operator selected before its ledger row landed.
|
|
328
347
|
*/
|
|
329
|
-
|
|
348
|
+
function renderWatchView(
|
|
330
349
|
runId: string | null,
|
|
331
350
|
model: RunViewModel | null,
|
|
332
351
|
width: number = DEFAULT_WIDTH,
|
|
@@ -415,7 +434,7 @@ function fleetRunsDir(): string {
|
|
|
415
434
|
* first, then a unique prefix over the durable fleet-run records. An ambiguous
|
|
416
435
|
* prefix resolves to nothing so the caller can name what it matched.
|
|
417
436
|
*/
|
|
418
|
-
|
|
437
|
+
function resolveFleetRootId(token: string): { rootId: string } | { candidates: string[] } {
|
|
419
438
|
if (readFleetRun(token) !== null) return { rootId: token };
|
|
420
439
|
let entries: string[];
|
|
421
440
|
try {
|
|
@@ -488,18 +507,16 @@ export function loadFleetRunViewModel(rootId: string, options: { now?: () => num
|
|
|
488
507
|
* The step index as lines. Pure, for the same reason {@link renderRunView} is:
|
|
489
508
|
* asserting the strings is asserting what an operator sees.
|
|
490
509
|
*/
|
|
491
|
-
|
|
510
|
+
function renderFleetRunView(model: FleetRunViewModel, width: number = DEFAULT_WIDTH): string[] {
|
|
492
511
|
const columns = Math.max(MIN_WIDTH, width);
|
|
493
512
|
const rule = "─".repeat(columns);
|
|
494
513
|
const lines: string[] = [];
|
|
495
|
-
lines.push(
|
|
514
|
+
lines.push(truncatePlain(`fleet ${sanitizeBounded(model.fleet, 64)} root ${model.rootId}`, columns));
|
|
496
515
|
const resumed = model.resumedFrom === null ? "" : ` resumed from ${sanitizeBounded(model.resumedFrom, 64)}`;
|
|
497
516
|
lines.push(
|
|
498
|
-
|
|
517
|
+
truncatePlain(
|
|
499
518
|
`started ${model.startedAt} elapsed ${formatElapsed(model.elapsedMs)} ${model.recordedSteps} of ${model.plannedSteps} steps recorded${model.running ? " (running)" : ""}${resumed}`,
|
|
500
519
|
columns,
|
|
501
|
-
"…",
|
|
502
|
-
false,
|
|
503
520
|
),
|
|
504
521
|
);
|
|
505
522
|
lines.push(rule);
|
|
@@ -518,7 +535,7 @@ export function renderFleetRunView(model: FleetRunViewModel, width: number = DEF
|
|
|
518
535
|
for (const row of rows) {
|
|
519
536
|
const head = `${row.step.padEnd(stepWidth)} ${row.runId.padEnd(runWidth)} ${row.outcome.padEnd(outcomeWidth)}`;
|
|
520
537
|
const text = row.tail.length === 0 ? head : `${head} ${sanitizeBounded(row.tail, DETAIL_MAX_WIDTH)}`;
|
|
521
|
-
lines.push(
|
|
538
|
+
lines.push(truncatePlain(text.trimEnd(), columns));
|
|
522
539
|
}
|
|
523
540
|
}
|
|
524
541
|
lines.push(rule);
|
|
@@ -620,7 +637,7 @@ function applyViewDirs(dirs: ParsedViewArgs["dirs"]): void {
|
|
|
620
637
|
* interval, never a crash; the writer (src/interactive/watch-pane.ts) replaces
|
|
621
638
|
* the file atomically.
|
|
622
639
|
*/
|
|
623
|
-
|
|
640
|
+
function readWatchSelection(path: string): string | null {
|
|
624
641
|
let raw: string;
|
|
625
642
|
try {
|
|
626
643
|
raw = readFileSync(path, "utf8");
|
package/src/cli/fleet.ts
CHANGED
|
@@ -117,7 +117,7 @@ Notes:
|
|
|
117
117
|
only available inside the process that owns the run.
|
|
118
118
|
view is read-only and shares no memory with the orchestrator, so it follows a
|
|
119
119
|
run from a second terminal or over SSH. Its transcript comes from the run
|
|
120
|
-
event journal, written when
|
|
120
|
+
event journal, written when fleet.history.journal is on (the default). Handed the
|
|
121
121
|
fleet-<hex> root id that run prints, it lists that run's steps instead.
|
|
122
122
|
drain preserves running work. Repeat it to renew the one-hour expiry; resume
|
|
123
123
|
clears it early. The expiry prevents an abandoned drain from wedging Clio.
|
|
@@ -268,7 +268,7 @@ function contractAgents(
|
|
|
268
268
|
|
|
269
269
|
function preflightFleet(contract: FleetContract, deps: FleetPreflightDeps): string | null {
|
|
270
270
|
const targets = new Set(deps.settings.targets.map((target) => target.id));
|
|
271
|
-
const profiles = new Set(Object.keys(deps.settings.
|
|
271
|
+
const profiles = new Set(Object.keys(deps.settings.fleet?.profiles ?? {}));
|
|
272
272
|
const checkRoute = (id: string, route: { target?: string; profile?: string }): string | null => {
|
|
273
273
|
if (route.target !== undefined && !targets.has(route.target)) {
|
|
274
274
|
return `unknown target '${route.target}' at step '${id}'`;
|
|
@@ -376,7 +376,7 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
|
|
|
376
376
|
// Install `panes.journal` the same way the interactive composition root
|
|
377
377
|
// does, so a fleet run honours the setting without the journal ever reading
|
|
378
378
|
// settings.yaml from the dispatch event path.
|
|
379
|
-
configureRunEventJournal(fleetSettings.
|
|
379
|
+
configureRunEventJournal(fleetSettings.fleet.history.journal);
|
|
380
380
|
const roleFacts = agentRoleFactsResolver((id) => agents.getSpec(id));
|
|
381
381
|
const preflightError = preflightFleet(contract, {
|
|
382
382
|
agents,
|
|
@@ -504,7 +504,7 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
|
|
|
504
504
|
fleetRootId,
|
|
505
505
|
dispatch,
|
|
506
506
|
agents: { getSpec: (agentId) => agents.getSpec(agentId) },
|
|
507
|
-
attributionEnabled: config?.get().
|
|
507
|
+
attributionEnabled: config?.get().integrations.git.commitAttribution ?? true,
|
|
508
508
|
vars,
|
|
509
509
|
...(resume !== undefined ? { resume } : {}),
|
|
510
510
|
onStepSettled(step) {
|
|
@@ -675,7 +675,7 @@ function admissionStatus(drain: CapacityDrain | null): FleetAdmissionStatus {
|
|
|
675
675
|
return { state: "draining", ...drain };
|
|
676
676
|
}
|
|
677
677
|
|
|
678
|
-
|
|
678
|
+
function statusSnapshot(): {
|
|
679
679
|
generatedAt: string;
|
|
680
680
|
admission: FleetAdmissionStatus;
|
|
681
681
|
running: Array<Record<string, unknown>>;
|
|
@@ -813,6 +813,9 @@ function runAdmissionControl(command: "drain" | "resume", args: ReadonlyArray<st
|
|
|
813
813
|
|
|
814
814
|
export async function runFleetCommand(args: ReadonlyArray<string>): Promise<number> {
|
|
815
815
|
const sub = args[0];
|
|
816
|
+
if (sub === "view" && (args.includes("--help") || args.includes("-h"))) {
|
|
817
|
+
return (await import("./fleet-view.js")).runFleetView(args.slice(1));
|
|
818
|
+
}
|
|
816
819
|
// Asking for help is not a usage error, and it is not an argument either.
|
|
817
820
|
// `status|drain|resume --help` answered `unknown flag: --help` on stderr with
|
|
818
821
|
// status 2, `run --help` answered its usage the same way, and `list --help`
|
|
@@ -79,10 +79,10 @@ export interface InteropInspectSnapshot {
|
|
|
79
79
|
* have already loaded, and this command loads neither. Reporting the structural
|
|
80
80
|
* zero that would result would state a fact this read did not establish.
|
|
81
81
|
*/
|
|
82
|
-
|
|
82
|
+
async function interopInspectSnapshot(now: () => number = Date.now): Promise<InteropInspectSnapshot> {
|
|
83
83
|
const report = await detectInteropAgents({ cwd: process.cwd(), probeVersion: false });
|
|
84
84
|
const settings = readSettings();
|
|
85
|
-
const configured = new Set(settings.
|
|
85
|
+
const configured = new Set(settings.integrations.externalAgents.entries.map((agent) => agent.id));
|
|
86
86
|
const agents: InteropInspectAgent[] = [];
|
|
87
87
|
for (const record of report.agents) {
|
|
88
88
|
const kind = interopAgentKind(record.kind);
|
package/src/cli/models.ts
CHANGED
|
@@ -117,7 +117,7 @@ export async function runModelsCommand(args: ReadonlyArray<string>): Promise<num
|
|
|
117
117
|
return 0;
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
function collectRows(entries: ReadonlyArray<TargetStatus>, providers: ProvidersContract): ModelRow[] {
|
|
121
121
|
const rows: ModelRow[] = [];
|
|
122
122
|
for (const status of entries) {
|
|
123
123
|
const runtimeId = status.runtime?.id ?? status.target.runtime;
|
|
@@ -188,7 +188,7 @@ function compactTokenCount(value: number): string {
|
|
|
188
188
|
return String(value);
|
|
189
189
|
}
|
|
190
190
|
|
|
191
|
-
|
|
191
|
+
function emptyModelsMessage(
|
|
192
192
|
args: Pick<ModelArgs, "search" | "target">,
|
|
193
193
|
configuredTargets: number,
|
|
194
194
|
matchedTargets: number,
|
|
@@ -217,7 +217,7 @@ function truncateModelId(id: string): string {
|
|
|
217
217
|
return `${id.slice(0, MODEL_ID_WIDTH_CAP - 3)}...`;
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
|
|
220
|
+
function modelTableLines(rows: ReadonlyArray<ModelRow>): string[] {
|
|
221
221
|
const includeState = rows.some((row) => row.state && row.state !== "-");
|
|
222
222
|
const headers = includeState
|
|
223
223
|
? ["target", "runtime", "model", "state", "caps", "ctx", "max"]
|
package/src/cli/modes/print.ts
CHANGED
|
@@ -365,7 +365,7 @@ async function recordHeadlessMainAgentReceipt(input: {
|
|
|
365
365
|
staticCompositionHash: snapshot.staticCompositionHash,
|
|
366
366
|
promptSignature: snapshot.promptSignature,
|
|
367
367
|
toolSignature: snapshot.toolSignature,
|
|
368
|
-
|
|
368
|
+
clioCoderVersion: readClioVersion(),
|
|
369
369
|
piMonoVersion: readPiMonoVersion(),
|
|
370
370
|
platform: process.platform,
|
|
371
371
|
nodeVersion: process.version,
|
package/src/cli/reset.ts
CHANGED
|
@@ -131,7 +131,7 @@ function report(label: string, path: string): void {
|
|
|
131
131
|
* `scratch/`, and every dispatch artifact written since that sentence was
|
|
132
132
|
* typed. A list nobody has to maintain cannot drift from what the removal takes.
|
|
133
133
|
*/
|
|
134
|
-
|
|
134
|
+
function rootContents(path: string): string[] {
|
|
135
135
|
let entries: Dirent[];
|
|
136
136
|
try {
|
|
137
137
|
entries = readdirSync(path, { withFileTypes: true });
|