@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,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether this boot activates the panes extension.
|
|
3
|
+
*
|
|
4
|
+
* The decision is made here, before any panes module loads, because the whole
|
|
5
|
+
* point of the activation model is that a plain boot never pays for the
|
|
6
|
+
* extension: no socket probe, no guest-mode detection, and none of the mux
|
|
7
|
+
* domain's code in the import closure. The orchestrator dynamically imports
|
|
8
|
+
* `src/entry/with-panes.ts` only when this resolves to an active rung, and a
|
|
9
|
+
* built-graph contract test (tests/contracts/instant-shell-import-graph.test.ts)
|
|
10
|
+
* pins that the default boot chunk carries no mux domain code.
|
|
11
|
+
*
|
|
12
|
+
* Precedence: the command-line flag wins in both directions, then the
|
|
13
|
+
* `panes.enabled` setting, then the shipped default of `off`.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/** Mirrors `MuxEnablement` in src/domains/mux/detect.ts without importing it. */
|
|
17
|
+
export type PanesEnablement = "auto" | "embedded" | "off";
|
|
18
|
+
|
|
19
|
+
export function resolvePanesEnablement(
|
|
20
|
+
flag: "with" | "without" | undefined,
|
|
21
|
+
setting: PanesEnablement | undefined,
|
|
22
|
+
): PanesEnablement {
|
|
23
|
+
if (flag === "without") return "off";
|
|
24
|
+
if (flag === "with") {
|
|
25
|
+
// `--with-panes` on a settings file that names `embedded` honors the
|
|
26
|
+
// stronger setting; on `off` or absent settings it activates guest
|
|
27
|
+
// detection, which is the flag's promise.
|
|
28
|
+
return setting === "embedded" ? "embedded" : "auto";
|
|
29
|
+
}
|
|
30
|
+
return setting ?? "off";
|
|
31
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The panes extension's composition surface.
|
|
3
|
+
*
|
|
4
|
+
* This is the one module that statically imports panes-only code: the mux
|
|
5
|
+
* domain (socket client, contract, yazi session machinery) and the interactive
|
|
6
|
+
* glue built on it. The orchestrator imports it dynamically, and only when
|
|
7
|
+
* `resolvePanesEnablement` (src/entry/panes-activation.ts) says the extension
|
|
8
|
+
* is active, so a plain `clio-coder` boot never loads any of it. The built
|
|
9
|
+
* import graph is pinned by tests/contracts/instant-shell-import-graph.test.ts:
|
|
10
|
+
* the default boot chunk must carry no mux domain code.
|
|
11
|
+
*
|
|
12
|
+
* Everything re-exported here is a value the orchestrator wires; types cross
|
|
13
|
+
* the seam as type-only imports at the call sites and cost nothing.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export { createMuxDomainModule } from "../domains/mux/index.js";
|
|
17
|
+
export { createMuxBridge } from "../interactive/mux-bridge.js";
|
|
18
|
+
export { createPanesRuntime } from "../interactive/panes-runtime.js";
|
|
19
|
+
export { createWatchPaneController } from "../interactive/watch-pane.js";
|
|
20
|
+
export { createYaziBridge } from "../interactive/yazi-bridge.js";
|
|
@@ -6,32 +6,32 @@ import { isEscapeKey, type OverlayState, overlayOwnsInput } from "./overlay-life
|
|
|
6
6
|
export const APPLICATION_DOUBLE_TAP_MS = 500;
|
|
7
7
|
|
|
8
8
|
const CLOSED_ACTION_ORDER = [
|
|
9
|
-
"clio.notifications.dismiss",
|
|
10
|
-
"clio.tool.expand",
|
|
11
|
-
"clio.tool.expandAll",
|
|
12
|
-
"clio.tool.liveOutput",
|
|
13
|
-
"clio.editor.external",
|
|
14
|
-
"clio.message.followUp",
|
|
15
|
-
"clio.message.interrupt",
|
|
16
|
-
"clio.message.dequeue",
|
|
17
|
-
"clio.thinking.expand",
|
|
18
|
-
"clio.thinking.expandAll",
|
|
9
|
+
"clio-coder.notifications.dismiss",
|
|
10
|
+
"clio-coder.tool.expand",
|
|
11
|
+
"clio-coder.tool.expandAll",
|
|
12
|
+
"clio-coder.tool.liveOutput",
|
|
13
|
+
"clio-coder.editor.external",
|
|
14
|
+
"clio-coder.message.followUp",
|
|
15
|
+
"clio-coder.message.interrupt",
|
|
16
|
+
"clio-coder.message.dequeue",
|
|
17
|
+
"clio-coder.thinking.expand",
|
|
18
|
+
"clio-coder.thinking.expandAll",
|
|
19
19
|
] as const satisfies ReadonlyArray<ClioKeybinding>;
|
|
20
20
|
|
|
21
21
|
const GLOBAL_ACTION_ORDER = [
|
|
22
|
-
"clio.status.toggle",
|
|
23
|
-
"clio.thinking.cycle",
|
|
24
|
-
"clio.session.tree",
|
|
25
|
-
"clio.dispatchBoard.toggle",
|
|
26
|
-
"clio.tasks.open",
|
|
27
|
-
"clio.decisions.open",
|
|
28
|
-
"clio.dispatch.background",
|
|
29
|
-
"clio.model.select",
|
|
22
|
+
"clio-coder.status.toggle",
|
|
23
|
+
"clio-coder.thinking.cycle",
|
|
24
|
+
"clio-coder.session.tree",
|
|
25
|
+
"clio-coder.dispatchBoard.toggle",
|
|
26
|
+
"clio-coder.tasks.open",
|
|
27
|
+
"clio-coder.decisions.open",
|
|
28
|
+
"clio-coder.dispatch.background",
|
|
29
|
+
"clio-coder.model.select",
|
|
30
30
|
// Backward stays ahead of forward so prefix-overlapping user bindings keep
|
|
31
31
|
// the same more-specific-first behavior as the original input listener.
|
|
32
|
-
"clio.model.cycleBackward",
|
|
33
|
-
"clio.model.cycleForward",
|
|
34
|
-
"clio.exit",
|
|
32
|
+
"clio-coder.model.cycleBackward",
|
|
33
|
+
"clio-coder.model.cycleForward",
|
|
34
|
+
"clio-coder.exit",
|
|
35
35
|
] as const satisfies ReadonlyArray<ClioKeybinding>;
|
|
36
36
|
|
|
37
37
|
export type CtrlCAction = "cancel-stream" | "close-overlay" | "clear-editor" | "arm-shutdown" | "shutdown";
|
|
@@ -125,7 +125,7 @@ function workerEscalationAxis(
|
|
|
125
125
|
return null;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
function middlewareBudgetWarningKey(payload: unknown): string | null {
|
|
129
129
|
if (!isMiddlewareHookFailedPayload(payload)) return null;
|
|
130
130
|
if (payload.kind !== "budget_exceeded") return null;
|
|
131
131
|
return `${payload.registrationId}\u0000${payload.hook}`;
|
|
@@ -137,7 +137,7 @@ export function middlewareBudgetWarningKey(payload: unknown): string | null {
|
|
|
137
137
|
* either way; this warn notice is the operator's only interactive signal
|
|
138
138
|
* that a guard or assessor is misbehaving.
|
|
139
139
|
*/
|
|
140
|
-
|
|
140
|
+
function middlewareHookFailedNotice(
|
|
141
141
|
payload: unknown,
|
|
142
142
|
options: MiddlewareHookFailedNoticeOptions = {},
|
|
143
143
|
): BusNotice | null {
|
|
@@ -215,7 +215,7 @@ export interface ChatSubmitOptions {
|
|
|
215
215
|
* the turn runtime's own local fallback, so a `/btw` round against a local
|
|
216
216
|
* server authenticates exactly the way a turn against it does.
|
|
217
217
|
*/
|
|
218
|
-
const LOCAL_SIDE_QUESTION_API_KEY = "clio-local-target";
|
|
218
|
+
const LOCAL_SIDE_QUESTION_API_KEY = "clio-coder-local-target";
|
|
219
219
|
|
|
220
220
|
/** Closing notice an operator interrupt leaves in the transcript and the ledger. */
|
|
221
221
|
const INTERRUPT_CANCEL_REASON = "[Clio Coder] run interrupted by operator; delivering the new message now.";
|
|
@@ -372,7 +372,7 @@ export interface CreateChatLoopDeps {
|
|
|
372
372
|
/**
|
|
373
373
|
* Whitelist of target ids that the chat-loop is allowed to drive. The
|
|
374
374
|
* orchestrator composes this from `providers.list()` so an unknown
|
|
375
|
-
* `settings.
|
|
375
|
+
* `settings.chat.target` surfaces a configuration error before
|
|
376
376
|
* the agent is constructed.
|
|
377
377
|
*/
|
|
378
378
|
knownTargets: () => ReadonlySet<string>;
|
|
@@ -527,7 +527,7 @@ export interface CreateChatLoopDeps {
|
|
|
527
527
|
registerPrewarmEndpointSlot?: (runtime: AgentRuntime) => (() => void) | null;
|
|
528
528
|
}
|
|
529
529
|
|
|
530
|
-
|
|
530
|
+
function reloadProtectedArtifactsForSession(
|
|
531
531
|
protectedArtifacts: NonNullable<CreateChatLoopDeps["protectedArtifacts"]>,
|
|
532
532
|
readSessionEntries: (() => ReadonlyArray<SessionEntry>) | undefined,
|
|
533
533
|
): void {
|
|
@@ -547,7 +547,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
547
547
|
const sideQuestionRound = deps.runSideQuestion ?? runSideQuestion;
|
|
548
548
|
const handoffRound = deps.runHandoffRound ?? runHandoffRound;
|
|
549
549
|
const middlewareToolChoice = deps.middlewareToolChoice ?? createMiddlewareToolChoiceControl();
|
|
550
|
-
const state = createTurnState(deps.getSettings().
|
|
550
|
+
const state = createTurnState(deps.getSettings().chat.thinkingLevel ?? "off");
|
|
551
551
|
const toolStartTimes = new Map<string, number>();
|
|
552
552
|
|
|
553
553
|
const preparationListeners = new Set<(phase: TurnPreparationPhase) => void>();
|
|
@@ -639,13 +639,13 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
639
639
|
* collapsing them sent a client with a configured target to the wrong fix.
|
|
640
640
|
*/
|
|
641
641
|
const nullRuntimeAdmissionReason = (): string => {
|
|
642
|
-
const orchestrator = deps.getSettings().
|
|
642
|
+
const orchestrator = deps.getSettings().chat;
|
|
643
643
|
const target = orchestrator.target?.trim() ?? "";
|
|
644
644
|
const model = orchestrator.model?.trim() ?? "";
|
|
645
645
|
return target.length > 0 && model.length === 0 ? "model-not-configured" : "orchestrator-not-configured";
|
|
646
646
|
};
|
|
647
647
|
|
|
648
|
-
const retrySettings = (): RetrySettings => normalizeRetrySettings(deps.getSettings().retry);
|
|
648
|
+
const retrySettings = (): RetrySettings => normalizeRetrySettings(deps.getSettings().chat.retry);
|
|
649
649
|
|
|
650
650
|
const currentToolInvokeOptions = (): Partial<ToolInvokeOptions> => {
|
|
651
651
|
const options: Partial<ToolInvokeOptions> = {};
|
|
@@ -1088,7 +1088,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
1088
1088
|
// 4. Preflight overflow check, before the user turn is committed.
|
|
1089
1089
|
// A blocked request must not leave a dangling user entry that the
|
|
1090
1090
|
// next replay would treat as an unanswered turn.
|
|
1091
|
-
const compactionThreshold = deps.getSettings().compaction?.threshold ?? null;
|
|
1091
|
+
const compactionThreshold = deps.getSettings().context.compaction?.threshold ?? null;
|
|
1092
1092
|
const captureTurnSnapshot = (turnId: string): ContextSnapshot =>
|
|
1093
1093
|
context.captureRuntimeContextSnapshot(agentRuntime, turnId, compactionThreshold, {
|
|
1094
1094
|
promptSegments: compiledPrompt
|
|
@@ -1179,7 +1179,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
1179
1179
|
runtimeId: agentRuntime.runtimeId,
|
|
1180
1180
|
runtimeKind: agentRuntime.runtimeResolution.runtimeKind,
|
|
1181
1181
|
wireModelId: agentRuntime.wireModelId,
|
|
1182
|
-
autonomy: deps.getSettings().autonomy,
|
|
1182
|
+
autonomy: deps.getSettings().safety.autonomy,
|
|
1183
1183
|
compiledPromptHash: promptHash,
|
|
1184
1184
|
staticCompositionHash: promptHash,
|
|
1185
1185
|
promptSignature: promptHash,
|
|
@@ -384,7 +384,7 @@ export interface ChatPanel extends Component {
|
|
|
384
384
|
|
|
385
385
|
export interface ChatPanelOptions {
|
|
386
386
|
/**
|
|
387
|
-
* Resolves the user-visible key string for the `clio.tool.expand`
|
|
387
|
+
* Resolves the user-visible key string for the `clio-coder.tool.expand`
|
|
388
388
|
* action, which folds and unfolds the newest tool call or worker block.
|
|
389
389
|
* Returning a non-empty string surfaces a dim ` (<key>)` hint on the one
|
|
390
390
|
* surface the key would act on: the latest finished collapsed tool subline,
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Editor,
|
|
3
|
+
getKeybindings,
|
|
4
|
+
stripTerminalSequences,
|
|
5
|
+
type TUI,
|
|
6
|
+
truncateToWidth,
|
|
7
|
+
visibleWidth,
|
|
8
|
+
} from "../engine/tui.js";
|
|
9
|
+
import { guardPastedEditorOperator } from "./editor-bash.js";
|
|
2
10
|
import { fitHintEntries } from "./overlay-frame.js";
|
|
3
11
|
import { type PermissionInspectionHint, permissionHintEntries } from "./permission-hint.js";
|
|
4
12
|
import type { ClioTheme } from "./theme/index.js";
|
|
@@ -154,7 +162,50 @@ function findBottomRail(lines: readonly string[], width: number): number {
|
|
|
154
162
|
return -1;
|
|
155
163
|
}
|
|
156
164
|
|
|
165
|
+
function cursorEndsDirectoryPath(editor: Editor): boolean {
|
|
166
|
+
const cursor = editor.getCursor();
|
|
167
|
+
const line = editor.getLines()[cursor.line] ?? "";
|
|
168
|
+
return line.slice(0, cursor.col).endsWith("/");
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function remapPastedBangOffsets(
|
|
172
|
+
before: string,
|
|
173
|
+
after: string,
|
|
174
|
+
offsets: ReadonlySet<number>,
|
|
175
|
+
markInsertedAsPasted: boolean,
|
|
176
|
+
): Set<number> {
|
|
177
|
+
let prefix = 0;
|
|
178
|
+
while (prefix < before.length && prefix < after.length && before[prefix] === after[prefix]) prefix += 1;
|
|
179
|
+
let beforeEnd = before.length;
|
|
180
|
+
let afterEnd = after.length;
|
|
181
|
+
while (beforeEnd > prefix && afterEnd > prefix && before[beforeEnd - 1] === after[afterEnd - 1]) {
|
|
182
|
+
beforeEnd -= 1;
|
|
183
|
+
afterEnd -= 1;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const next = new Set<number>();
|
|
187
|
+
const shift = afterEnd - prefix - (beforeEnd - prefix);
|
|
188
|
+
for (const offset of offsets) {
|
|
189
|
+
if (offset < prefix) next.add(offset);
|
|
190
|
+
else if (offset >= beforeEnd) next.add(offset + shift);
|
|
191
|
+
}
|
|
192
|
+
if (markInsertedAsPasted) {
|
|
193
|
+
for (let offset = prefix; offset < afterEnd; offset += 1) {
|
|
194
|
+
if (after[offset] === "!") next.add(offset);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return next;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function startsWithPastedOperator(text: string, pastedBangOffsets: ReadonlySet<number>): boolean {
|
|
201
|
+
const first = text.search(/\S/u);
|
|
202
|
+
return first >= 0 && text[first] === "!" && pastedBangOffsets.has(first);
|
|
203
|
+
}
|
|
204
|
+
|
|
157
205
|
export class ClioEditor extends Editor {
|
|
206
|
+
private pastedBangOffsets = new Set<number>();
|
|
207
|
+
private bracketedPasteActive = false;
|
|
208
|
+
|
|
158
209
|
constructor(
|
|
159
210
|
tui: TUI,
|
|
160
211
|
private readonly chrome: EditorChrome,
|
|
@@ -213,6 +264,15 @@ export class ClioEditor extends Editor {
|
|
|
213
264
|
return lines;
|
|
214
265
|
}
|
|
215
266
|
|
|
267
|
+
/**
|
|
268
|
+
* Preserve paste provenance for every immediate-send binding, including the
|
|
269
|
+
* alternate paths that invoke the submit controller without an Editor Enter.
|
|
270
|
+
*/
|
|
271
|
+
getTextForSubmit(): string {
|
|
272
|
+
const text = this.getExpandedText();
|
|
273
|
+
return startsWithPastedOperator(this.getText(), this.pastedBangOffsets) ? guardPastedEditorOperator(text) : text;
|
|
274
|
+
}
|
|
275
|
+
|
|
216
276
|
/**
|
|
217
277
|
* pi-tui's bracketed-paste handling inserts pasted text (including a
|
|
218
278
|
* trailing newline the paste carried) without submitting: a pasted
|
|
@@ -222,8 +282,46 @@ export class ClioEditor extends Editor {
|
|
|
222
282
|
* through the same handler the typed-Enter path uses.
|
|
223
283
|
*/
|
|
224
284
|
override handleInput(data: string): void {
|
|
285
|
+
const openedPaste = data.includes("\x1b[200~");
|
|
225
286
|
const closedPaste = data.includes("\x1b[201~");
|
|
287
|
+
const pasteMutation = this.bracketedPasteActive || openedPaste;
|
|
288
|
+
const textBeforeInput = this.getText();
|
|
289
|
+
const keybindings = getKeybindings();
|
|
290
|
+
// Pi expands and trims the buffer immediately before onSubmit. Envelope a
|
|
291
|
+
// pasted bang draft for that synchronous handoff so the Bash parser can
|
|
292
|
+
// distinguish it from a typed operator; the submit controller unwraps it
|
|
293
|
+
// before sending the literal prompt onward.
|
|
294
|
+
if (
|
|
295
|
+
startsWithPastedOperator(textBeforeInput, this.pastedBangOffsets) &&
|
|
296
|
+
keybindings.matches(data, "tui.input.submit")
|
|
297
|
+
) {
|
|
298
|
+
const pastedText = this.getTextForSubmit();
|
|
299
|
+
this.pastedBangOffsets.clear();
|
|
300
|
+
this.bracketedPasteActive = false;
|
|
301
|
+
super.setText(pastedText);
|
|
302
|
+
super.handleInput(data);
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
const completingDirectory =
|
|
306
|
+
this.isShowingAutocomplete() &&
|
|
307
|
+
(keybindings.matches(data, "tui.input.tab") || keybindings.matches(data, "tui.select.confirm"));
|
|
308
|
+
const textBeforeCompletion = completingDirectory ? this.getText() : "";
|
|
226
309
|
super.handleInput(data);
|
|
310
|
+
if (completingDirectory && this.getText() !== textBeforeCompletion && cursorEndsDirectoryPath(this)) {
|
|
311
|
+
// Directory rows are submenus on the same provider. Re-open immediately
|
|
312
|
+
// after acceptance so ↑/↓ continues in the child tree without requiring
|
|
313
|
+
// a second Tab. Pi's provider request remains the only completion path.
|
|
314
|
+
super.handleInput("\t");
|
|
315
|
+
}
|
|
316
|
+
const textAfterInput = this.getText();
|
|
317
|
+
this.pastedBangOffsets = remapPastedBangOffsets(
|
|
318
|
+
textBeforeInput,
|
|
319
|
+
textAfterInput,
|
|
320
|
+
this.pastedBangOffsets,
|
|
321
|
+
pasteMutation,
|
|
322
|
+
);
|
|
323
|
+
if (openedPaste) this.bracketedPasteActive = true;
|
|
324
|
+
if (closedPaste) this.bracketedPasteActive = false;
|
|
227
325
|
if (!closedPaste) return;
|
|
228
326
|
const text = this.getText();
|
|
229
327
|
if (!text.endsWith("\n")) return;
|
|
@@ -232,4 +330,10 @@ export class ClioEditor extends Editor {
|
|
|
232
330
|
this.setText("");
|
|
233
331
|
this.onSubmit?.(command);
|
|
234
332
|
}
|
|
333
|
+
|
|
334
|
+
override setText(text: string): void {
|
|
335
|
+
this.pastedBangOffsets.clear();
|
|
336
|
+
this.bracketedPasteActive = false;
|
|
337
|
+
super.setText(text);
|
|
338
|
+
}
|
|
235
339
|
}
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
type ContextActivityStatus,
|
|
7
7
|
} from "../core/bus-events.js";
|
|
8
8
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
9
|
+
import { wrapTextWithAnsi } from "../engine/tui.js";
|
|
9
10
|
import { type ClioTheme, clioTheme, formatCompactMs, frame, GLYPH, padAnsi, spinnerFrame } from "./theme/index.js";
|
|
10
11
|
|
|
11
12
|
export interface ContextActivitySnapshot {
|
|
@@ -152,17 +153,18 @@ export function formatContextActivityIslandLines(
|
|
|
152
153
|
const percent = `${Math.round(activityProgress(activity) * 100)}%`.padStart(4);
|
|
153
154
|
const progressLine = `${progressBar(theme, activity, barWidth)} ${theme.fg("dim", percent)}`;
|
|
154
155
|
const message = theme.fg(activity.status === "failed" ? "error" : "muted", activity.message);
|
|
155
|
-
//
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
// explicitly. The progress bar is sized to fit and never cuts.
|
|
156
|
+
// The trail is compact navigation chrome and marks its cut. The message and
|
|
157
|
+
// detail are the only explanation of this operation, so they wrap in full.
|
|
158
|
+
// The progress bar is sized to fit and never cuts.
|
|
159
159
|
const body = [
|
|
160
160
|
padAnsi(topLine, bodyWidth, GLYPH.ellipsis),
|
|
161
161
|
padAnsi(progressLine, bodyWidth),
|
|
162
162
|
phaseTrail(theme, activity, bodyWidth),
|
|
163
|
-
|
|
163
|
+
...wrapTextWithAnsi(message, bodyWidth).map((line) => padAnsi(line, bodyWidth)),
|
|
164
164
|
];
|
|
165
|
-
if (activity.detail)
|
|
165
|
+
if (activity.detail) {
|
|
166
|
+
body.push(...wrapTextWithAnsi(theme.fg("dim", activity.detail), bodyWidth).map((line) => padAnsi(line, bodyWidth)));
|
|
167
|
+
}
|
|
166
168
|
return frame(theme, "Context", body, width);
|
|
167
169
|
}
|
|
168
170
|
|
|
@@ -23,7 +23,7 @@ export const CONTEXT_CATEGORY_TOKEN: Readonly<Record<ContextLedgerCategory, Clio
|
|
|
23
23
|
streaming: "accent",
|
|
24
24
|
};
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
function contextCategoryGlyph(category: ContextLedgerCategory): string {
|
|
27
27
|
const filled = visibleSingle(GLYPH.contextFull) ? GLYPH.contextFull : GLYPH.barFull;
|
|
28
28
|
const free = visibleSingle(GLYPH.contextFree) ? GLYPH.contextFree : GLYPH.barEmpty;
|
|
29
29
|
// The autocompact reserve is held-back headroom, not consumed context; it
|
|
@@ -187,7 +187,7 @@ export type WorkerContextSeverity = "healthy" | "warn" | "critical";
|
|
|
187
187
|
export const WORKER_CONTEXT_WARN_PCT = 80;
|
|
188
188
|
export const WORKER_CONTEXT_CRITICAL_PCT = 95;
|
|
189
189
|
|
|
190
|
-
|
|
190
|
+
function workerContextSeverity(pct: number): WorkerContextSeverity {
|
|
191
191
|
if (pct >= WORKER_CONTEXT_CRITICAL_PCT) return "critical";
|
|
192
192
|
if (pct >= WORKER_CONTEXT_WARN_PCT) return "warn";
|
|
193
193
|
return "healthy";
|
|
@@ -211,10 +211,7 @@ export interface WorkerContextView {
|
|
|
211
211
|
* usage has been observed yet. The percentage is capped at 100: a provider
|
|
212
212
|
* report past the window is a full window, not a >100% claim.
|
|
213
213
|
*/
|
|
214
|
-
|
|
215
|
-
usedTokens: number,
|
|
216
|
-
contextWindow: number | undefined | null,
|
|
217
|
-
): WorkerContextView | null {
|
|
214
|
+
function workerContextView(usedTokens: number, contextWindow: number | undefined | null): WorkerContextView | null {
|
|
218
215
|
if (contextWindow === undefined || contextWindow === null || contextWindow <= 0) return null;
|
|
219
216
|
if (!Number.isFinite(usedTokens) || usedTokens <= 0) return null;
|
|
220
217
|
const pct = Math.min(100, Math.round((usedTokens / contextWindow) * 100));
|
|
@@ -166,7 +166,7 @@ function renderWorkingSetLines(view: WorkingSetView, config: WorkingSetConfigVie
|
|
|
166
166
|
];
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
|
|
169
|
+
function renderContextLedgerLines(
|
|
170
170
|
ledger: ContextLedger,
|
|
171
171
|
contentWidth: number,
|
|
172
172
|
workingSet?: WorkingSetView | null,
|
|
@@ -330,6 +330,7 @@ export function openContextOverlay(
|
|
|
330
330
|
const handle = showClioOverlayFrame(tui, text, {
|
|
331
331
|
anchor: "center",
|
|
332
332
|
width: CONTEXT_OVERLAY_WIDTH,
|
|
333
|
+
markerId: "context-view",
|
|
333
334
|
title: "Context Window",
|
|
334
335
|
footerHint: buildHint([]),
|
|
335
336
|
});
|
|
@@ -271,7 +271,7 @@ function modelBlock(row: CostRow): string[] {
|
|
|
271
271
|
]);
|
|
272
272
|
}
|
|
273
273
|
|
|
274
|
-
|
|
274
|
+
function formatCostOverlayBodyLines(
|
|
275
275
|
totalCost: CostAggregate,
|
|
276
276
|
totalTokens: number,
|
|
277
277
|
rows: ReadonlyArray<CostRow>,
|
|
@@ -374,6 +374,8 @@ export function openCostOverlay(
|
|
|
374
374
|
const handle = showClioOverlayFrame(tui, body, {
|
|
375
375
|
anchor: "center",
|
|
376
376
|
width: COST_OVERLAY_WIDTH,
|
|
377
|
+
// Not derived from the title: that one carries the session id.
|
|
378
|
+
markerId: "cost",
|
|
377
379
|
title: sessionId && sessionId.length > 0 ? `Session usage (${sessionId})` : "Session usage",
|
|
378
380
|
footerHint: buildHint([]),
|
|
379
381
|
});
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
import { truncateToWidth, wrapTextWithAnsi } from "../engine/tui.js";
|
|
17
|
+
import { COUNCIL_SYNTHESIS_LABEL } from "./council.js";
|
|
17
18
|
import {
|
|
18
19
|
type ClioTheme,
|
|
19
20
|
type ClioToken,
|
|
@@ -38,9 +39,6 @@ export const COUNCIL_COLUMN_GUTTER = 2;
|
|
|
38
39
|
/** Rows of a member's bounded answer tail a column shows before it defers to `/view`. */
|
|
39
40
|
export const COUNCIL_ANSWER_ROWS = 4;
|
|
40
41
|
|
|
41
|
-
/** The label the coordinator gives the synthesis run of every council group. */
|
|
42
|
-
export const COUNCIL_SYNTHESIS_LABEL = "synthesis";
|
|
43
|
-
|
|
44
42
|
/** One council run as the board draws it: the roster facts plus the run's presentation. */
|
|
45
43
|
export interface CouncilMemberView {
|
|
46
44
|
runId: string;
|
|
@@ -80,7 +78,7 @@ export type CouncilLayout = { mode: "grid"; columnWidth: number } | { mode: "sta
|
|
|
80
78
|
* moment one column would fall under {@link COUNCIL_COLUMN_MIN_WIDTH}: a grid
|
|
81
79
|
* where only some columns are readable is worse than no grid at all.
|
|
82
80
|
*/
|
|
83
|
-
|
|
81
|
+
function councilGridLayout(memberCount: number, contentWidth: number): CouncilLayout {
|
|
84
82
|
const count = Math.max(1, memberCount);
|
|
85
83
|
const usable = contentWidth - COUNCIL_COLUMN_GUTTER * (count - 1);
|
|
86
84
|
const columnWidth = Math.floor(usable / count);
|
|
@@ -126,7 +124,7 @@ function answerRows(theme: ClioTheme, member: CouncilMemberView, width: number,
|
|
|
126
124
|
* answer. Every line is clipped to the column so a long model id or a long
|
|
127
125
|
* answer line can never push a neighbouring column out of position.
|
|
128
126
|
*/
|
|
129
|
-
|
|
127
|
+
function councilMemberLines(
|
|
130
128
|
theme: ClioTheme,
|
|
131
129
|
member: CouncilMemberView,
|
|
132
130
|
width: number,
|
|
@@ -26,6 +26,17 @@ export type CouncilSynthesisMode = (typeof COUNCIL_SYNTHESIS_MODES)[number];
|
|
|
26
26
|
/** Rounds the dispatch tool admits. The command enforces the same bound where the operator typed it. */
|
|
27
27
|
export const COUNCIL_MAX_ROUNDS = 3;
|
|
28
28
|
|
|
29
|
+
/**
|
|
30
|
+
* The label the coordinator gives the synthesis run of every council group.
|
|
31
|
+
*
|
|
32
|
+
* It lives here rather than beside the board layout that draws it because it is
|
|
33
|
+
* council vocabulary, not presentation: the share path compares against it to
|
|
34
|
+
* decide whether a run seals the whole council or one voice, and that path must
|
|
35
|
+
* stay off the render module graph. See the header of
|
|
36
|
+
* `src/interactive/slash-commands.ts` for the closure budget that depends on it.
|
|
37
|
+
*/
|
|
38
|
+
export const COUNCIL_SYNTHESIS_LABEL = "synthesis";
|
|
39
|
+
|
|
29
40
|
export function isCouncilSynthesisMode(value: string): value is CouncilSynthesisMode {
|
|
30
41
|
return COUNCIL_SYNTHESIS_MODES.some((mode) => mode === value);
|
|
31
42
|
}
|