@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,251 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { namingCompatibilityEnvironment } from "../../../core/naming-compat.js";
|
|
6
|
+
import { clioCacheDir } from "../../../core/xdg.js";
|
|
7
|
+
import { findPinnedTool } from "../../toolchain/registry.js";
|
|
8
|
+
import { describeResolution, resolveToolBinary, toolStatus } from "../../toolchain/resolve.js";
|
|
9
|
+
import type { MuxContract } from "../contract.js";
|
|
10
|
+
import type { MuxPaneRef } from "../types.js";
|
|
11
|
+
import {
|
|
12
|
+
createYaziEventStream,
|
|
13
|
+
LEGACY_YAZI_PICK_EVENT,
|
|
14
|
+
YAZI_PICK_EVENT,
|
|
15
|
+
YAZI_STREAM_POLL_MS,
|
|
16
|
+
type YaziEvent,
|
|
17
|
+
type YaziEventStream,
|
|
18
|
+
} from "./event-stream.js";
|
|
19
|
+
import { ensureYaziProfile, type YaziProfile, yaziProfileDir } from "./profile.js";
|
|
20
|
+
|
|
21
|
+
export type YaziSessionMode = "companion" | "chooser";
|
|
22
|
+
export type YaziProfileMode = "managed" | "user";
|
|
23
|
+
|
|
24
|
+
export interface YaziResolvedBinaries {
|
|
25
|
+
yaziPath: string | null;
|
|
26
|
+
yaPath: string | null;
|
|
27
|
+
missingYaziDetail: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface YaziChooserResult {
|
|
31
|
+
paths: ReadonlyArray<string>;
|
|
32
|
+
cwd: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface YaziSessionSnapshot {
|
|
36
|
+
mode: YaziSessionMode;
|
|
37
|
+
paneId: string;
|
|
38
|
+
paneCwd: string;
|
|
39
|
+
instanceId: string | null;
|
|
40
|
+
lastLineAt: number | null;
|
|
41
|
+
streamPath: string | null;
|
|
42
|
+
chooserPath: string | null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface YaziSession {
|
|
46
|
+
readonly mode: YaziSessionMode;
|
|
47
|
+
readonly pane: Readonly<MuxPaneRef>;
|
|
48
|
+
readonly token: string | null;
|
|
49
|
+
readonly profile: Readonly<YaziProfile> | null;
|
|
50
|
+
snapshot(): Readonly<YaziSessionSnapshot>;
|
|
51
|
+
pushCwd(cwd: string): Promise<boolean>;
|
|
52
|
+
close(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export type YaziSessionOpenResult =
|
|
56
|
+
| { status: "opened"; session: YaziSession }
|
|
57
|
+
| { status: "missing-binary"; binary: "yazi" | "ya"; detail: string }
|
|
58
|
+
| { status: "profile-error"; reason: string }
|
|
59
|
+
| { status: "unavailable"; reason: string };
|
|
60
|
+
|
|
61
|
+
export interface YaziSessionOptions {
|
|
62
|
+
mux: MuxContract;
|
|
63
|
+
mode: YaziSessionMode;
|
|
64
|
+
profileMode: YaziProfileMode;
|
|
65
|
+
cwd: string;
|
|
66
|
+
/**
|
|
67
|
+
* Files-dock share of the height. Set by the interactive bridge from
|
|
68
|
+
* `interface.panes.files.ratio`; absent it, the dock spec's default governs.
|
|
69
|
+
*/
|
|
70
|
+
dockShare?: number;
|
|
71
|
+
onEvent: (event: YaziEvent) => void;
|
|
72
|
+
onChooser: (result: YaziChooserResult) => void;
|
|
73
|
+
onStopped?: (reason: string) => void;
|
|
74
|
+
log?: (level: "debug" | "warning", message: string) => void;
|
|
75
|
+
cacheDir?: string;
|
|
76
|
+
sessionId?: string;
|
|
77
|
+
pickToken?: string;
|
|
78
|
+
pollMs?: number;
|
|
79
|
+
resolveBinaries?: () => YaziResolvedBinaries;
|
|
80
|
+
ensureProfile?: typeof ensureYaziProfile;
|
|
81
|
+
runYa?: (file: string, args: ReadonlyArray<string>, env: Readonly<NodeJS.ProcessEnv>) => Promise<boolean>;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function resolveYaziBinaries(): YaziResolvedBinaries {
|
|
85
|
+
const entry = findPinnedTool("yazi");
|
|
86
|
+
const status = entry ? toolStatus(entry) : null;
|
|
87
|
+
return {
|
|
88
|
+
yaziPath: status?.resolution.binaryPath ?? null,
|
|
89
|
+
yaPath: resolveToolBinary("ya").binaryPath,
|
|
90
|
+
missingYaziDetail: status ? describeResolution(status) : "yazi is not in the pinned tool registry",
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function runYa(file: string, args: ReadonlyArray<string>, env: Readonly<NodeJS.ProcessEnv>): Promise<boolean> {
|
|
95
|
+
return new Promise((resolve) => {
|
|
96
|
+
const child = spawn(file, args, { env: { ...env }, stdio: "ignore" });
|
|
97
|
+
child.once("error", () => resolve(false));
|
|
98
|
+
child.once("exit", (code) => resolve(code === 0));
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function readOptional(path: string): string {
|
|
103
|
+
try {
|
|
104
|
+
return readFileSync(path, "utf8");
|
|
105
|
+
} catch {
|
|
106
|
+
return "";
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** Open one mux-hosted Yazi process and own its DDS or chooser-file transport. */
|
|
111
|
+
export async function createYaziSession(options: YaziSessionOptions): Promise<YaziSessionOpenResult> {
|
|
112
|
+
const binaries = (options.resolveBinaries ?? resolveYaziBinaries)();
|
|
113
|
+
if (!binaries.yaziPath) {
|
|
114
|
+
return { status: "missing-binary", binary: "yazi", detail: binaries.missingYaziDetail };
|
|
115
|
+
}
|
|
116
|
+
if (options.profileMode === "managed" && !binaries.yaPath) {
|
|
117
|
+
return {
|
|
118
|
+
status: "missing-binary",
|
|
119
|
+
binary: "ya",
|
|
120
|
+
detail: "the Yazi helper `ya` is not available; install the complete pinned Yazi tool",
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const cacheDir = options.cacheDir ?? clioCacheDir();
|
|
125
|
+
const sessionId = options.sessionId ?? randomUUID();
|
|
126
|
+
const sessionsDir = join(cacheDir, "yazi", "sessions");
|
|
127
|
+
mkdirSync(sessionsDir, { recursive: true });
|
|
128
|
+
const managedProfile =
|
|
129
|
+
options.profileMode === "managed"
|
|
130
|
+
? (options.ensureProfile ?? ensureYaziProfile)({
|
|
131
|
+
yaPath: binaries.yaPath as string,
|
|
132
|
+
yaziPath: binaries.yaziPath,
|
|
133
|
+
profileDir: yaziProfileDir(cacheDir),
|
|
134
|
+
})
|
|
135
|
+
: null;
|
|
136
|
+
if (options.profileMode === "managed" && !managedProfile) {
|
|
137
|
+
return { status: "profile-error", reason: "Clio could not generate a valid managed Yazi profile" };
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const streamPath = join(sessionsDir, `${sessionId}.stream`);
|
|
141
|
+
const chooserPath = join(sessionsDir, `${sessionId}.chooser`);
|
|
142
|
+
const cwdPath = join(sessionsDir, `${sessionId}.cwd`);
|
|
143
|
+
const token = options.mode === "companion" ? (options.pickToken ?? randomUUID()) : null;
|
|
144
|
+
const env: Record<string, string> = {
|
|
145
|
+
...(managedProfile ? { YAZI_CONFIG_HOME: managedProfile.dir } : {}),
|
|
146
|
+
...(token ? namingCompatibilityEnvironment("CLIO_CODER_YAZI_PICK_TOKEN", "CLIO_YAZI_PICK_TOKEN", token) : {}),
|
|
147
|
+
};
|
|
148
|
+
let argv: ReadonlyArray<string>;
|
|
149
|
+
let stdoutPath: string | undefined;
|
|
150
|
+
if (options.mode === "companion") {
|
|
151
|
+
writeFileSync(streamPath, "");
|
|
152
|
+
argv = [
|
|
153
|
+
binaries.yaziPath,
|
|
154
|
+
"--local-events",
|
|
155
|
+
`cd,${YAZI_PICK_EVENT},${LEGACY_YAZI_PICK_EVENT}`,
|
|
156
|
+
"--remote-events",
|
|
157
|
+
`${YAZI_PICK_EVENT},${LEGACY_YAZI_PICK_EVENT}`,
|
|
158
|
+
];
|
|
159
|
+
stdoutPath = streamPath;
|
|
160
|
+
} else {
|
|
161
|
+
writeFileSync(chooserPath, "");
|
|
162
|
+
writeFileSync(cwdPath, "");
|
|
163
|
+
argv = [binaries.yaziPath, options.cwd, "--chooser-file", chooserPath, "--cwd-file", cwdPath];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const pane = await options.mux.openUtilityPane({
|
|
167
|
+
argv,
|
|
168
|
+
cwd: options.cwd,
|
|
169
|
+
label: "yazi",
|
|
170
|
+
// The files dock: split down from the anchor at the configured share.
|
|
171
|
+
// Degrades to a plain split inside the contract when the layout tier is
|
|
172
|
+
// absent.
|
|
173
|
+
dock: { slot: "files", ...(options.dockShare === undefined ? {} : { share: options.dockShare }) },
|
|
174
|
+
...(Object.keys(env).length > 0 ? { env } : {}),
|
|
175
|
+
...(stdoutPath ? { stdoutPath } : {}),
|
|
176
|
+
});
|
|
177
|
+
if (!pane) return { status: "unavailable", reason: "pane host refused to open yazi" };
|
|
178
|
+
|
|
179
|
+
let paneCwd = options.cwd;
|
|
180
|
+
let instanceId: string | null = null;
|
|
181
|
+
let stream: YaziEventStream | null = null;
|
|
182
|
+
let chooserTimer: NodeJS.Timeout | null = null;
|
|
183
|
+
let stopped = false;
|
|
184
|
+
const alive = (): boolean => options.mux.list().some((record) => record.ref.paneId === pane.paneId);
|
|
185
|
+
const stop = (reason: string): void => {
|
|
186
|
+
if (stopped) return;
|
|
187
|
+
stopped = true;
|
|
188
|
+
if (chooserTimer) clearInterval(chooserTimer);
|
|
189
|
+
chooserTimer = null;
|
|
190
|
+
options.onStopped?.(reason);
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
if (options.mode === "companion") {
|
|
194
|
+
stream = createYaziEventStream({
|
|
195
|
+
path: streamPath,
|
|
196
|
+
isAlive: alive,
|
|
197
|
+
...(options.pollMs !== undefined ? { pollMs: options.pollMs } : {}),
|
|
198
|
+
...(options.log ? { log: options.log } : {}),
|
|
199
|
+
onEvent: (event) => {
|
|
200
|
+
if (event.kind === "cd") {
|
|
201
|
+
paneCwd = event.cwd;
|
|
202
|
+
instanceId = event.sender;
|
|
203
|
+
}
|
|
204
|
+
options.onEvent(event);
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
void stream.done.then((reason) => stop(reason));
|
|
208
|
+
} else {
|
|
209
|
+
const pollChooser = (): void => {
|
|
210
|
+
if (stopped || alive()) return;
|
|
211
|
+
const raw = readOptional(chooserPath);
|
|
212
|
+
const cwd = readOptional(cwdPath).trim() || paneCwd;
|
|
213
|
+
paneCwd = cwd;
|
|
214
|
+
const paths = raw.length === 0 ? [] : raw.split("\n").filter((path) => path.length > 0);
|
|
215
|
+
options.onChooser({ paths, cwd });
|
|
216
|
+
stop("pane-gone");
|
|
217
|
+
};
|
|
218
|
+
chooserTimer = setInterval(pollChooser, options.pollMs ?? YAZI_STREAM_POLL_MS);
|
|
219
|
+
chooserTimer.unref();
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const session: YaziSession = {
|
|
223
|
+
mode: options.mode,
|
|
224
|
+
pane,
|
|
225
|
+
token,
|
|
226
|
+
profile: managedProfile,
|
|
227
|
+
snapshot: () => ({
|
|
228
|
+
mode: options.mode,
|
|
229
|
+
paneId: pane.paneId,
|
|
230
|
+
paneCwd,
|
|
231
|
+
instanceId,
|
|
232
|
+
lastLineAt: stream?.stats().lastLineAt ?? null,
|
|
233
|
+
streamPath: options.mode === "companion" ? streamPath : null,
|
|
234
|
+
chooserPath: options.mode === "chooser" ? chooserPath : null,
|
|
235
|
+
}),
|
|
236
|
+
async pushCwd(cwd: string): Promise<boolean> {
|
|
237
|
+
if (!instanceId || !binaries.yaPath) return false;
|
|
238
|
+
const pushed = await (options.runYa ?? runYa)(binaries.yaPath, ["emit-to", instanceId, "cd", cwd], {
|
|
239
|
+
...process.env,
|
|
240
|
+
...(managedProfile ? { YAZI_CONFIG_HOME: managedProfile.dir } : {}),
|
|
241
|
+
});
|
|
242
|
+
return pushed;
|
|
243
|
+
},
|
|
244
|
+
async close(): Promise<void> {
|
|
245
|
+
stream?.stop();
|
|
246
|
+
stop("stopped");
|
|
247
|
+
await options.mux.closePane(pane.paneId);
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
return { status: "opened", session };
|
|
251
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { tokenHex } from "../../../core/theme-token-hex.js";
|
|
2
|
+
|
|
3
|
+
/** Render the deliberately small Clio overlay on Yazi's pinned preset theme. */
|
|
4
|
+
export function renderYaziTheme(): string {
|
|
5
|
+
return `# Generated by Clio Coder. Changes are replaced when the managed profile regenerates.
|
|
6
|
+
|
|
7
|
+
[mgr]
|
|
8
|
+
cwd = { fg = "${tokenHex("accent")}" }
|
|
9
|
+
find_keyword = { fg = "${tokenHex("warning")}" }
|
|
10
|
+
marker_selected = { fg = "${tokenHex("success")}", bg = "${tokenHex("success")}" }
|
|
11
|
+
marker_copied = { fg = "${tokenHex("accent")}", bg = "${tokenHex("accent")}" }
|
|
12
|
+
marker_cut = { fg = "${tokenHex("error")}", bg = "${tokenHex("error")}" }
|
|
13
|
+
border_style = { fg = "${tokenHex("frame")}" }
|
|
14
|
+
|
|
15
|
+
[mode]
|
|
16
|
+
normal_main = { bg = "${tokenHex("accent")}" }
|
|
17
|
+
normal_alt = { fg = "${tokenHex("accent")}" }
|
|
18
|
+
select_main = { bg = "${tokenHex("action")}" }
|
|
19
|
+
select_alt = { fg = "${tokenHex("action")}" }
|
|
20
|
+
unset_main = { bg = "${tokenHex("error")}" }
|
|
21
|
+
unset_alt = { fg = "${tokenHex("error")}" }
|
|
22
|
+
|
|
23
|
+
[tabs]
|
|
24
|
+
active = { bg = "${tokenHex("accent")}" }
|
|
25
|
+
inactive = { fg = "${tokenHex("accent")}" }
|
|
26
|
+
|
|
27
|
+
[status]
|
|
28
|
+
perm_sep = { fg = "${tokenHex("dim")}" }
|
|
29
|
+
`;
|
|
30
|
+
}
|
|
@@ -101,6 +101,27 @@ export function costAggregateForAmount(usd: number, provenance: CostProvenance |
|
|
|
101
101
|
return aggregateCostAmounts([{ usd, provenance: normalizeCostProvenance(provenance) }]);
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
/**
|
|
105
|
+
* What a fixed-width surface renders for an already-folded aggregate: the cost
|
|
106
|
+
* claim when one exists, {@link COST_NOT_MEASURED} when none does. Named here
|
|
107
|
+
* because the fallback is part of the derivation, not a caller's choice, and a
|
|
108
|
+
* surface that spells the `?? COST_NOT_MEASURED` out by hand is one edit away
|
|
109
|
+
* from spelling `$0.00` instead.
|
|
110
|
+
*/
|
|
111
|
+
export function renderCostAggregate(cost: CostAggregate | null | undefined): string {
|
|
112
|
+
return formatCostAggregate(cost) ?? COST_NOT_MEASURED;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The same render for a single sealed amount, which is the shape a receipt or a
|
|
117
|
+
* ledger row hands over. A caller that reaches for `usd.toFixed(4)` here drops
|
|
118
|
+
* the provenance on the floor and turns unpriced work into a measured `$0.0000`,
|
|
119
|
+
* which is a claim nobody made.
|
|
120
|
+
*/
|
|
121
|
+
export function renderCostAmount(usd: number, provenance: CostProvenance | undefined): string {
|
|
122
|
+
return renderCostAggregate(costAggregateForAmount(usd, provenance));
|
|
123
|
+
}
|
|
124
|
+
|
|
104
125
|
export interface UsageBreakdown {
|
|
105
126
|
input: number;
|
|
106
127
|
output: number;
|
|
@@ -96,7 +96,7 @@ async function buildAndIndexEvidence(
|
|
|
96
96
|
});
|
|
97
97
|
} catch (error) {
|
|
98
98
|
const message = error instanceof Error ? error.message : String(error);
|
|
99
|
-
process.stderr.write(`[clio:evidence] auto-build failed for run ${runId}: ${message}\n`);
|
|
99
|
+
process.stderr.write(`[clio-coder:evidence] auto-build failed for run ${runId}: ${message}\n`);
|
|
100
100
|
hooks.onFailed(runId, message);
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -130,7 +130,7 @@ export function appendOutOfTurnUsageRow(stateDir: string, row: OutOfTurnUsageRow
|
|
|
130
130
|
closeSync(fd);
|
|
131
131
|
}
|
|
132
132
|
} catch (error) {
|
|
133
|
-
process.stderr.write(`[clio:usage] out-of-turn usage row not written: ${messageOf(error)}\n`);
|
|
133
|
+
process.stderr.write(`[clio-coder:usage] out-of-turn usage row not written: ${messageOf(error)}\n`);
|
|
134
134
|
return;
|
|
135
135
|
}
|
|
136
136
|
appendsSinceBoundCheck += 1;
|
|
@@ -139,7 +139,7 @@ export function appendOutOfTurnUsageRow(stateDir: string, row: OutOfTurnUsageRow
|
|
|
139
139
|
try {
|
|
140
140
|
boundOutOfTurnUsageFile(path);
|
|
141
141
|
} catch (error) {
|
|
142
|
-
process.stderr.write(`[clio:usage] out-of-turn usage ring not bounded: ${messageOf(error)}\n`);
|
|
142
|
+
process.stderr.write(`[clio-coder:usage] out-of-turn usage ring not bounded: ${messageOf(error)}\n`);
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
|
|
@@ -167,7 +167,7 @@ export function createObservabilityProjection(bus: SafeEventBus, deps: Projectio
|
|
|
167
167
|
listener(snapshot);
|
|
168
168
|
} catch (error) {
|
|
169
169
|
const message = error instanceof Error ? (error.stack ?? error.message) : String(error);
|
|
170
|
-
console.error(`[clio:observability] projection listener crashed: ${message}`);
|
|
170
|
+
console.error(`[clio-coder:observability] projection listener crashed: ${message}`);
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
}
|
|
@@ -19,6 +19,7 @@ import type {
|
|
|
19
19
|
DispatchProgressPayload,
|
|
20
20
|
DispatchStartedPayload,
|
|
21
21
|
} from "../../core/bus-events.js";
|
|
22
|
+
import { normalizeClioCoderEventType } from "../../core/naming-events.js";
|
|
22
23
|
import { processAlive, processBirthToken } from "../../core/process-identity.js";
|
|
23
24
|
import { createRedactionTally, redactSecretsText } from "../evidence/redact.js";
|
|
24
25
|
|
|
@@ -110,7 +111,7 @@ function requireSqlite(): DatabaseSyncConstructor {
|
|
|
110
111
|
* Exported for the contract test, which drives it with a load that emits both
|
|
111
112
|
* warnings; production has exactly one caller.
|
|
112
113
|
*/
|
|
113
|
-
|
|
114
|
+
function loadWithSqliteWarningSuppressed<T>(load: () => T): T {
|
|
114
115
|
if (warningTracingRequested()) return load();
|
|
115
116
|
const emitWarning = process.emitWarning;
|
|
116
117
|
const forward = emitWarning.bind(process) as (...args: unknown[]) => void;
|
|
@@ -1201,7 +1202,7 @@ export class TraceReader {
|
|
|
1201
1202
|
}
|
|
1202
1203
|
|
|
1203
1204
|
events(runId: string, afterRowid = 0, limit = TRACE_EVENT_POLL_LIMIT): TraceEventRow[] {
|
|
1204
|
-
|
|
1205
|
+
const rows = this.db
|
|
1205
1206
|
.prepare(`SELECT rowid, event_id, run_id, phase_id, parent_id, type, name, payload_json,
|
|
1206
1207
|
tokens, started_at, ended_at FROM events
|
|
1207
1208
|
WHERE run_id = ? AND rowid > ? ORDER BY rowid LIMIT ?`)
|
|
@@ -1210,6 +1211,57 @@ export class TraceReader {
|
|
|
1210
1211
|
Math.max(0, Math.trunc(afterRowid)),
|
|
1211
1212
|
clampInt(limit, 1, TRACE_EVENT_POLL_LIMIT),
|
|
1212
1213
|
) as unknown as TraceEventRow[];
|
|
1214
|
+
return rows.map((row) => ({ ...row, type: normalizeClioCoderEventType(row.type) }));
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
/**
|
|
1218
|
+
* Per-kind event tallies for one run.
|
|
1219
|
+
*
|
|
1220
|
+
* Aggregated in SQL rather than by reading rows, so `payload_json` and the
|
|
1221
|
+
* free-form event name are never loaded at all. That is the point: a caller
|
|
1222
|
+
* that only ever wants shapes should not be holding the payloads in memory
|
|
1223
|
+
* on the way to counting them.
|
|
1224
|
+
*/
|
|
1225
|
+
eventKindCounts(runId: string): Array<{ type: string; count: number }> {
|
|
1226
|
+
const rows = this.db
|
|
1227
|
+
.prepare("SELECT type, COUNT(*) AS count FROM events WHERE run_id=? GROUP BY type ORDER BY count DESC, type")
|
|
1228
|
+
.all(runId) as unknown as Array<{ type: string; count: number }>;
|
|
1229
|
+
const counts = new Map<string, number>();
|
|
1230
|
+
for (const row of rows) {
|
|
1231
|
+
const type = normalizeClioCoderEventType(row.type);
|
|
1232
|
+
counts.set(type, (counts.get(type) ?? 0) + row.count);
|
|
1233
|
+
}
|
|
1234
|
+
return [...counts]
|
|
1235
|
+
.map(([type, count]) => ({ type, count }))
|
|
1236
|
+
.sort((left, right) => right.count - left.count || left.type.localeCompare(right.type));
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
/** Total events and the wall span they cover, without reading one of them. */
|
|
1240
|
+
eventSpan(runId: string): { total: number; firstAt: string | null; lastAt: string | null } {
|
|
1241
|
+
const row = this.db
|
|
1242
|
+
.prepare(
|
|
1243
|
+
`SELECT COUNT(*) AS total, MIN(started_at) AS firstAt,
|
|
1244
|
+
MAX(COALESCE(ended_at, started_at)) AS lastAt FROM events WHERE run_id=?`,
|
|
1245
|
+
)
|
|
1246
|
+
.get(runId) as unknown as { total: number; firstAt: string | null; lastAt: string | null } | undefined;
|
|
1247
|
+
return row ?? { total: 0, firstAt: null, lastAt: null };
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
/**
|
|
1251
|
+
* Per-kind process tallies for one run.
|
|
1252
|
+
*
|
|
1253
|
+
* Same reason as {@link eventKindCounts}, and more sharply: a process row
|
|
1254
|
+
* carries the command line, the pid, and the host, none of which a shape
|
|
1255
|
+
* count needs.
|
|
1256
|
+
*/
|
|
1257
|
+
processKindCounts(runId: string): Array<{ kind: string; total: number; running: number }> {
|
|
1258
|
+
return this.db
|
|
1259
|
+
.prepare(
|
|
1260
|
+
`SELECT kind, COUNT(*) AS total,
|
|
1261
|
+
SUM(CASE WHEN ended_at IS NULL THEN 1 ELSE 0 END) AS running
|
|
1262
|
+
FROM processes WHERE run_id=? GROUP BY kind ORDER BY total DESC, kind`,
|
|
1263
|
+
)
|
|
1264
|
+
.all(runId) as unknown as Array<{ kind: string; total: number; running: number }>;
|
|
1213
1265
|
}
|
|
1214
1266
|
|
|
1215
1267
|
processes(runId: string): TraceProcessRow[] {
|
|
@@ -1231,7 +1283,7 @@ export class TraceReader {
|
|
|
1231
1283
|
}
|
|
1232
1284
|
|
|
1233
1285
|
select(sql: string): Record<string, SQLInputValue>[] {
|
|
1234
|
-
|
|
1286
|
+
assertTraceSelectOnly(sql);
|
|
1235
1287
|
return this.db.prepare(sql).all() as Record<string, SQLInputValue>[];
|
|
1236
1288
|
}
|
|
1237
1289
|
}
|
|
@@ -1259,7 +1311,7 @@ export function createDispatchTraceMirror(
|
|
|
1259
1311
|
path: string,
|
|
1260
1312
|
options: { warn?: (message: string) => void; now?: () => string } = {},
|
|
1261
1313
|
): DispatchTraceMirror {
|
|
1262
|
-
const warn = options.warn ?? ((message: string) => process.stderr.write(`[clio:trace] ${message}\n`));
|
|
1314
|
+
const warn = options.warn ?? ((message: string) => process.stderr.write(`[clio-coder:trace] ${message}\n`));
|
|
1263
1315
|
const now = options.now ?? (() => new Date().toISOString());
|
|
1264
1316
|
let store: TraceStore | null = null;
|
|
1265
1317
|
let chain: Promise<void> = Promise.resolve();
|
|
@@ -1366,7 +1418,7 @@ function recordProgress(
|
|
|
1366
1418
|
): void {
|
|
1367
1419
|
if (!isRecord(payload.event)) return;
|
|
1368
1420
|
const event = payload.event;
|
|
1369
|
-
const type = typeof event.type === "string" ? event.type : "progress";
|
|
1421
|
+
const type = typeof event.type === "string" ? normalizeClioCoderEventType(event.type) : "progress";
|
|
1370
1422
|
const toolCallId = stringValue(event.toolCallId) ?? stringValue(event.tool_call_id);
|
|
1371
1423
|
if (
|
|
1372
1424
|
type === "message_end" &&
|
|
@@ -1400,7 +1452,7 @@ function recordProgress(
|
|
|
1400
1452
|
});
|
|
1401
1453
|
}
|
|
1402
1454
|
}
|
|
1403
|
-
if ((type === "tool_execution_start" || type === "
|
|
1455
|
+
if ((type === "tool_execution_start" || type === "clio_coder_tool_start") && toolCallId !== null) {
|
|
1404
1456
|
starts.set(`${payload.runId}:${toolCallId}`, {
|
|
1405
1457
|
toolCallId,
|
|
1406
1458
|
tool: stringValue(event.toolName) ?? stringValue(event.tool) ?? "tool",
|
|
@@ -1409,7 +1461,7 @@ function recordProgress(
|
|
|
1409
1461
|
});
|
|
1410
1462
|
return;
|
|
1411
1463
|
}
|
|
1412
|
-
if ((type === "tool_execution_end" || type === "
|
|
1464
|
+
if ((type === "tool_execution_end" || type === "clio_coder_tool_finish") && toolCallId !== null) {
|
|
1413
1465
|
const key = `${payload.runId}:${toolCallId}`;
|
|
1414
1466
|
const start = starts.get(key);
|
|
1415
1467
|
// One clock frame per row. The worker measures `durationMs` on its own
|
|
@@ -1495,12 +1547,12 @@ function recordFailure(store: TraceStore, input: DispatchFailedPayload, at: stri
|
|
|
1495
1547
|
function isCriticalTraceEvent(channel: string, raw: unknown): boolean {
|
|
1496
1548
|
if (channel !== "dispatch.progress") return true;
|
|
1497
1549
|
if (!isRecord(raw) || !isRecord(raw.event)) return false;
|
|
1498
|
-
const type = raw.event.type;
|
|
1550
|
+
const type = typeof raw.event.type === "string" ? normalizeClioCoderEventType(raw.event.type) : raw.event.type;
|
|
1499
1551
|
return (
|
|
1500
1552
|
type === "tool_execution_start" ||
|
|
1501
1553
|
type === "tool_execution_end" ||
|
|
1502
|
-
type === "
|
|
1503
|
-
type === "
|
|
1554
|
+
type === "clio_coder_tool_start" ||
|
|
1555
|
+
type === "clio_coder_tool_finish" ||
|
|
1504
1556
|
type === "message_end" ||
|
|
1505
1557
|
type === "attempt_start"
|
|
1506
1558
|
);
|
|
@@ -1617,7 +1669,7 @@ function sha256(value: string): string {
|
|
|
1617
1669
|
return createHash("sha256").update(value, "utf8").digest("hex");
|
|
1618
1670
|
}
|
|
1619
1671
|
|
|
1620
|
-
function
|
|
1672
|
+
export function assertTraceSelectOnly(sql: string): void {
|
|
1621
1673
|
const trimmed = sql.trim();
|
|
1622
1674
|
if (!/^(SELECT|WITH)\b/i.test(trimmed)) throw new Error("trace sql accepts SELECT or read-only WITH queries only");
|
|
1623
1675
|
if (trimmed.includes(";")) throw new Error("trace sql accepts exactly one statement");
|
|
@@ -180,7 +180,7 @@ function lookupFragment(table: FragmentTable, id: string, role: string): LoadedF
|
|
|
180
180
|
* section and the dispatch worker safety-posture message must describe the
|
|
181
181
|
* same enforced behavior, so neither side duplicates this switch.
|
|
182
182
|
*/
|
|
183
|
-
|
|
183
|
+
function safetyOneLiner(level: string): string {
|
|
184
184
|
switch (level) {
|
|
185
185
|
case "read-only":
|
|
186
186
|
return "inspect and answer; mutating calls are auto-denied, so propose changes instead.";
|
|
@@ -653,7 +653,7 @@ export function compileWorker(table: FragmentTable, inputs: WorkerPromptInputs):
|
|
|
653
653
|
if (inputs.hasBoundSkills && !inputs.hasCanonicalContext) {
|
|
654
654
|
throw new Error("prompts/compiler: bound skills require canonical context in the final attached tool surface");
|
|
655
655
|
}
|
|
656
|
-
const identity = lookupFragment(table, "identity.clio-worker", "worker identity");
|
|
656
|
+
const identity = lookupFragment(table, "identity.clio-coder-worker", "worker identity");
|
|
657
657
|
const operatingContract = lookupFragment(table, "operating.contract", "operating contract");
|
|
658
658
|
const workerContract = lookupFragment(table, "operating.worker", "worker contract");
|
|
659
659
|
const safety = lookupFragment(table, `safety.${inputs.autonomy}`, "safety");
|
|
@@ -62,7 +62,7 @@ export function createPromptsBundle(
|
|
|
62
62
|
table = loadFragments();
|
|
63
63
|
} catch (err) {
|
|
64
64
|
const msg = err instanceof Error ? err.message : String(err);
|
|
65
|
-
process.stderr.write(`[clio:prompts] reload failed: ${msg}\n`);
|
|
65
|
+
process.stderr.write(`[clio-coder:prompts] reload failed: ${msg}\n`);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
|
|
@@ -81,7 +81,7 @@ export function createPromptsBundle(
|
|
|
81
81
|
}
|
|
82
82
|
const configContract = config();
|
|
83
83
|
const settings: Readonly<ClioSettings> | undefined = configContract?.get();
|
|
84
|
-
const safety = input.autonomy ?? settings?.autonomy ?? "auto-edit";
|
|
84
|
+
const safety = input.autonomy ?? settings?.safety.autonomy ?? "auto-edit";
|
|
85
85
|
const cwd = input.cwd ?? process.cwd();
|
|
86
86
|
let contextFiles = "";
|
|
87
87
|
let projectPreload: ProjectPreloadClass | null = null;
|
|
@@ -147,7 +147,7 @@ export function createPromptsBundle(
|
|
|
147
147
|
table = loadFragments();
|
|
148
148
|
} catch (err) {
|
|
149
149
|
const msg = err instanceof Error ? err.message : String(err);
|
|
150
|
-
process.stderr.write(`[clio:prompts] initial load failed: ${msg}\n`);
|
|
150
|
+
process.stderr.write(`[clio-coder:prompts] initial load failed: ${msg}\n`);
|
|
151
151
|
table = { byId: new Map(), rootDir: "" };
|
|
152
152
|
}
|
|
153
153
|
unsubscribeHotReload = context.bus.on(BusChannels.ConfigHotReload, (payload: unknown) => {
|
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: operating.skills
|
|
3
3
|
version: 1
|
|
4
|
-
budgetTokens:
|
|
4
|
+
budgetTokens: 340
|
|
5
5
|
description: Coordinator skill suggestion discipline; rendered only when context is on the surface
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Skills
|
|
9
9
|
|
|
10
|
-
Skills package proven workflows. Some are installed; the rest sit in
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
nothing
|
|
10
|
+
Skills package proven workflows. Some are installed; the rest sit in a
|
|
11
|
+
marketplace the operator installs from, and context (scope="skills") is
|
|
12
|
+
the one authoritative listing of both — never guess the inventory or
|
|
13
|
+
search the repository for a skill file. The catalog spans git delivery
|
|
14
|
+
(filing, fixing, and shipping issues), planning (intent, PRD, backlog,
|
|
15
|
+
architecture, sprint slicing), coding practice (TDD, standards,
|
|
16
|
+
prototyping), context priming and handoff, research workflows, and
|
|
17
|
+
plan-stress-testing debates. When a task lands in one of those shapes,
|
|
18
|
+
call context (scope="skills") first and match it against the catalog.
|
|
19
|
+
Suggest the best match to the operator as /skill <name> — the sequence
|
|
20
|
+
in order when skills compose — and let the operator decide before
|
|
21
|
+
grinding through that workflow bare; a marketplace match is suggested
|
|
22
|
+
the same way, and /skill <name> offers the install. When the operator
|
|
23
|
+
names a skill or asks how one works, answer from that same listing.
|
|
24
|
+
When a [Marketplace] reminder names an uninstalled skill for the
|
|
25
|
+
current request, first check the installed side with context
|
|
26
|
+
(scope="skills"); only if nothing installed serves and the named skill
|
|
27
|
+
truly fits, put the install question to the operator with ask_user
|
|
28
|
+
using exactly the four options the reminder states, then continue the
|
|
29
|
+
task in the same turn. The harness performs any consented install;
|
|
30
|
+
never install a skill yourself, and never offer one no reminder named.
|
|
31
|
+
Only an explicit operator request activates a skill; never load one on
|
|
32
|
+
your own. If nothing fits or the task is routine, proceed normally and
|
|
33
|
+
suggest nothing.
|