@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
|
@@ -11,7 +11,7 @@ import { loadDomains } from "../core/domain-loader.js";
|
|
|
11
11
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
12
12
|
import { expandInlineFileReferencesAsync } from "../core/file-references.js";
|
|
13
13
|
import { setGitCommitAttributionEnabled } from "../core/git-commit-attribution.js";
|
|
14
|
-
import { configureGuardrails } from "../core/guardrails.js";
|
|
14
|
+
import { configureGuardrails, guardrailValuesFromSettings } from "../core/guardrails.js";
|
|
15
15
|
import { HEADLESS_PERMISSION_DENIED_REASON } from "../core/headless-permission.js";
|
|
16
16
|
import { rememberRecentModel } from "../core/recent-models.js";
|
|
17
17
|
import { protectedResidencyModels } from "../core/residency-protection.js";
|
|
@@ -49,6 +49,7 @@ import { createDispatchDedupRegistration } from "../domains/dispatch/dedup.js";
|
|
|
49
49
|
import { agentRoleFactsResolver } from "../domains/dispatch/execution-role.js";
|
|
50
50
|
import { readGateDecisionArtifacts, readPendingGateDecisions } from "../domains/dispatch/gate-decisions.js";
|
|
51
51
|
import { createDispatchDomainModule } from "../domains/dispatch/index.js";
|
|
52
|
+
import { configureRunEventJournal } from "../domains/dispatch/run-event-journal.js";
|
|
52
53
|
import { type ExtensionsContract, ExtensionsDomainModule } from "../domains/extensions/index.js";
|
|
53
54
|
import { type InteropContract, InteropDomainModule } from "../domains/interop/index.js";
|
|
54
55
|
import {
|
|
@@ -84,6 +85,7 @@ import {
|
|
|
84
85
|
} from "../domains/middleware/dispatch-nudge.js";
|
|
85
86
|
import {
|
|
86
87
|
createHookReceiptLog,
|
|
88
|
+
createMarketplaceOfferRegistration,
|
|
87
89
|
createMiddlewareToolChoiceControl,
|
|
88
90
|
createSkillsReminderRegistration,
|
|
89
91
|
type ExtensionHookRoot,
|
|
@@ -97,6 +99,7 @@ import { announceMemoryStepEndpoint } from "../domains/middleware/memory-step-en
|
|
|
97
99
|
import { createTaskBoardReminderRegistration } from "../domains/middleware/task-board-reminder.js";
|
|
98
100
|
import { createTaskNudgeRegistration } from "../domains/middleware/task-nudge.js";
|
|
99
101
|
import { createWatchdogRegistration } from "../domains/middleware/watchdog.js";
|
|
102
|
+
import type { MuxContract } from "../domains/mux/index.js";
|
|
100
103
|
import type { ObservabilityContract } from "../domains/observability/index.js";
|
|
101
104
|
import { ObservabilityDomainModule, recordBackgroundMemoryStep } from "../domains/observability/index.js";
|
|
102
105
|
import type { PromptsContract } from "../domains/prompts/contract.js";
|
|
@@ -120,11 +123,13 @@ import {
|
|
|
120
123
|
targetRequiresAuth,
|
|
121
124
|
VALID_THINKING_LEVELS,
|
|
122
125
|
} from "../domains/providers/index.js";
|
|
126
|
+
import { memoryInterventionModelMaxTokens } from "../domains/providers/model-runtime-capabilities.js";
|
|
123
127
|
import { getRuntimeRegistry } from "../domains/providers/registry.js";
|
|
124
128
|
import { registerBuiltinRuntimes } from "../domains/providers/runtimes/builtins.js";
|
|
125
129
|
import {
|
|
126
130
|
createResourcesDomainModule,
|
|
127
131
|
discoverMarketplaceSkills,
|
|
132
|
+
installSkill,
|
|
128
133
|
modelVisibleSkills,
|
|
129
134
|
type ResourcesContract,
|
|
130
135
|
} from "../domains/resources/index.js";
|
|
@@ -159,6 +164,7 @@ import {
|
|
|
159
164
|
import { createTaskBoardStore } from "../domains/session/task-board.js";
|
|
160
165
|
import { filterEntriesToActivePath } from "../domains/session/tree/active-path.js";
|
|
161
166
|
import { type ShareContract, ShareDomainModule } from "../domains/share/index.js";
|
|
167
|
+
import { ToolchainDomainModule } from "../domains/toolchain/index.js";
|
|
162
168
|
import { createUserTasksStore } from "../domains/user-tasks/store.js";
|
|
163
169
|
import { type AcpSafeSettingsPatch, type AcpSafeSettingsSnapshot, serveClioAcpAgent } from "../engine/acp/server.js";
|
|
164
170
|
import { createStdioServerTransport } from "../engine/acp/transport.js";
|
|
@@ -175,6 +181,7 @@ import { createChatLoop } from "../interactive/chat-loop.js";
|
|
|
175
181
|
import { type RunIo, startInteractive } from "../interactive/index.js";
|
|
176
182
|
import { buildModelReplayAgentMessagesFromTurns } from "../interactive/model-session-replay.js";
|
|
177
183
|
import type { BootOptions } from "./boot-options.js";
|
|
184
|
+
import { resolvePanesEnablement } from "./panes-activation.js";
|
|
178
185
|
|
|
179
186
|
export type { BootOptions, HeadlessSamplingOverrides } from "./boot-options.js";
|
|
180
187
|
|
|
@@ -224,11 +231,11 @@ function bannerConfigurationLine(): string {
|
|
|
224
231
|
}
|
|
225
232
|
// A dangling chat target normalizes to null in the schema, so a deleted
|
|
226
233
|
// target arrives here as no target at all rather than as a name to report.
|
|
227
|
-
const targetId = settings.
|
|
234
|
+
const targetId = settings.chat?.target;
|
|
228
235
|
if (!targetId) {
|
|
229
236
|
return chalk.yellow("no model target configured. Run `clio-coder configure` to add one.");
|
|
230
237
|
}
|
|
231
|
-
const model = settings.
|
|
238
|
+
const model = settings.chat?.model;
|
|
232
239
|
return chalk.dim(`target ${targetId}${model ? ` · model ${model}` : " · no default model"}`);
|
|
233
240
|
}
|
|
234
241
|
|
|
@@ -251,7 +258,7 @@ function printJsonSessionHeader(meta: SessionMeta | null): Record<string, unknow
|
|
|
251
258
|
cwd: meta.cwd,
|
|
252
259
|
target: meta.target,
|
|
253
260
|
model: meta.model,
|
|
254
|
-
|
|
261
|
+
clioCoderVersion: meta.clioCoderVersion,
|
|
255
262
|
};
|
|
256
263
|
}
|
|
257
264
|
|
|
@@ -261,17 +268,17 @@ function applyHeadlessSettingsOverlay(
|
|
|
261
268
|
): ClioSettings {
|
|
262
269
|
const next = structuredClone(settings);
|
|
263
270
|
if (!overrides) return next;
|
|
264
|
-
const previousTarget = next.
|
|
271
|
+
const previousTarget = next.chat.target;
|
|
265
272
|
if (overrides.target !== undefined) {
|
|
266
|
-
next.
|
|
267
|
-
if (overrides.model === undefined && (previousTarget !== overrides.target || !next.
|
|
273
|
+
next.chat.target = overrides.target;
|
|
274
|
+
if (overrides.model === undefined && (previousTarget !== overrides.target || !next.chat.model)) {
|
|
268
275
|
const target = next.targets.find((entry) => entry.id === overrides.target);
|
|
269
|
-
if (target) next.
|
|
276
|
+
if (target) next.chat.model = target.defaultModel ?? null;
|
|
270
277
|
}
|
|
271
278
|
}
|
|
272
|
-
if (overrides.model !== undefined) next.
|
|
273
|
-
if (overrides.thinking !== undefined) next.
|
|
274
|
-
if (overrides.autonomy !== undefined) next.autonomy = overrides.autonomy;
|
|
279
|
+
if (overrides.model !== undefined) next.chat.model = overrides.model;
|
|
280
|
+
if (overrides.thinking !== undefined) next.chat.thinkingLevel = overrides.thinking;
|
|
281
|
+
if (overrides.autonomy !== undefined) next.safety.autonomy = overrides.autonomy;
|
|
275
282
|
return next;
|
|
276
283
|
}
|
|
277
284
|
|
|
@@ -302,9 +309,9 @@ function advanceThinkingLevel(current: ThinkingLevel, available: ReadonlyArray<T
|
|
|
302
309
|
* model all send this placeholder so a local llama.cpp or LM Studio endpoint
|
|
303
310
|
* works without the user inventing a credential.
|
|
304
311
|
*/
|
|
305
|
-
const LOCAL_API_KEY_FALLBACK = "clio-local-target";
|
|
312
|
+
const LOCAL_API_KEY_FALLBACK = "clio-coder-local-target";
|
|
306
313
|
|
|
307
|
-
|
|
314
|
+
async function resolveApiKeyForTarget(
|
|
308
315
|
target: TargetDescriptor,
|
|
309
316
|
providers: ProvidersContract,
|
|
310
317
|
signal?: AbortSignal,
|
|
@@ -333,6 +340,7 @@ interface BackgroundMemoryRoute {
|
|
|
333
340
|
targetId: string;
|
|
334
341
|
wireModelId: string;
|
|
335
342
|
endpointKey: string | null;
|
|
343
|
+
modelMaxTokens(configuredMaxTokens: number): number;
|
|
336
344
|
}
|
|
337
345
|
|
|
338
346
|
function createBackgroundMemoryModelClient(
|
|
@@ -341,8 +349,8 @@ function createBackgroundMemoryModelClient(
|
|
|
341
349
|
timeoutMs: number,
|
|
342
350
|
bus: Pick<SafeEventBus, "emit"> | null,
|
|
343
351
|
): BackgroundMemoryRoute | null {
|
|
344
|
-
const targetId = settings.
|
|
345
|
-
const wireModelId = settings.
|
|
352
|
+
const targetId = settings.context.memory.target?.trim();
|
|
353
|
+
const wireModelId = settings.context.memory.model?.trim();
|
|
346
354
|
if (!targetId || !wireModelId) return null;
|
|
347
355
|
// One model cannot both drive the action agent and think its way through a
|
|
348
356
|
// memory step: the memory call would contend with the agent's own decoding on
|
|
@@ -375,6 +383,12 @@ function createBackgroundMemoryModelClient(
|
|
|
375
383
|
targetId,
|
|
376
384
|
wireModelId: refined.wireModelId,
|
|
377
385
|
endpointKey,
|
|
386
|
+
modelMaxTokens: (configuredMaxTokens) =>
|
|
387
|
+
memoryInterventionModelMaxTokens({
|
|
388
|
+
configuredMaxTokens,
|
|
389
|
+
thinkingMechanism: refined.modelRuntime.thinking.mechanism,
|
|
390
|
+
modelMaxTokens: refined.capabilityDecisions.maxTokens,
|
|
391
|
+
}),
|
|
378
392
|
client: {
|
|
379
393
|
// Wrapped at the layer that knows a request left the process: the step
|
|
380
394
|
// holds endpoint capacity while it is out and publishes the cache
|
|
@@ -433,8 +447,8 @@ function createBackgroundMemoryModelClient(
|
|
|
433
447
|
*/
|
|
434
448
|
function agentRoleToolWarnings(providers: ProvidersContract, settings: Readonly<ClioSettings>): string[] {
|
|
435
449
|
const roles: ReadonlyArray<{ label: string; target: string | null; model: string | null }> = [
|
|
436
|
-
{ label: "orchestrator", target: settings.
|
|
437
|
-
{ label: "workers.default", target: settings.
|
|
450
|
+
{ label: "orchestrator", target: settings.chat.target, model: settings.chat.model },
|
|
451
|
+
{ label: "workers.default", target: settings.fleet.default.target, model: settings.fleet.default.model },
|
|
438
452
|
];
|
|
439
453
|
const warnings: string[] = [];
|
|
440
454
|
for (const role of roles) {
|
|
@@ -466,12 +480,12 @@ function backgroundSharesReasoningModelWithOrchestrator(
|
|
|
466
480
|
providers: ProvidersContract,
|
|
467
481
|
settings: Readonly<ClioSettings>,
|
|
468
482
|
): boolean {
|
|
469
|
-
const backgroundModel = settings.
|
|
470
|
-
const orchestratorModel = settings.
|
|
483
|
+
const backgroundModel = settings.context.memory.model?.trim();
|
|
484
|
+
const orchestratorModel = settings.chat.model?.trim();
|
|
471
485
|
if (!backgroundModel || backgroundModel !== orchestratorModel) return false;
|
|
472
|
-
if (settings.
|
|
486
|
+
if (settings.context.memory.target?.trim() !== settings.chat.target?.trim()) return false;
|
|
473
487
|
try {
|
|
474
|
-
const status = providers.list().find((entry) => entry.target.id === settings.
|
|
488
|
+
const status = providers.list().find((entry) => entry.target.id === settings.context.memory.target?.trim());
|
|
475
489
|
if (!status) return false;
|
|
476
490
|
return resolveModelCapabilities(status, backgroundModel, providers.knowledgeBase).reasoning === true;
|
|
477
491
|
} catch {
|
|
@@ -481,7 +495,7 @@ function backgroundSharesReasoningModelWithOrchestrator(
|
|
|
481
495
|
}
|
|
482
496
|
}
|
|
483
497
|
|
|
484
|
-
|
|
498
|
+
function synthesizeOrchestratorModel(
|
|
485
499
|
providers: ProvidersContract,
|
|
486
500
|
target: TargetDescriptor,
|
|
487
501
|
wireModelId: string,
|
|
@@ -514,8 +528,8 @@ async function resolveCompactionModel(
|
|
|
514
528
|
settings: ClioSettings,
|
|
515
529
|
providers: ProvidersContract,
|
|
516
530
|
): Promise<CompactionResolution | null> {
|
|
517
|
-
const targetId = settings.
|
|
518
|
-
const wireModelId = settings.
|
|
531
|
+
const targetId = settings.chat?.target ?? null;
|
|
532
|
+
const wireModelId = settings.chat?.model ?? null;
|
|
519
533
|
if (!targetId || !wireModelId) return null;
|
|
520
534
|
const target = resolveTarget(providers, targetId);
|
|
521
535
|
if (!target) return null;
|
|
@@ -595,7 +609,7 @@ function appendProtectedArtifactRegistryEvent(
|
|
|
595
609
|
* subprocess, which makes this the only recording path there is. Returns how
|
|
596
610
|
* many were folded.
|
|
597
611
|
*/
|
|
598
|
-
|
|
612
|
+
function foldDispatchSkillActivations(
|
|
599
613
|
session: SessionContract | undefined,
|
|
600
614
|
payload: { runId?: unknown; skillActivations?: ReadonlyArray<unknown> } | undefined,
|
|
601
615
|
): number {
|
|
@@ -636,7 +650,7 @@ async function runCompactionFlow(
|
|
|
636
650
|
}
|
|
637
651
|
const resolved = await resolveCompactionModel(settings, providers);
|
|
638
652
|
if (!resolved) {
|
|
639
|
-
throw new Error("no model configured; set
|
|
653
|
+
throw new Error("no model configured; set chat.target + chat.model");
|
|
640
654
|
}
|
|
641
655
|
// Summarize only the active branch: after a /tree switch the raw file
|
|
642
656
|
// still holds abandoned sibling turns, and a summary that folds them in
|
|
@@ -692,7 +706,7 @@ async function runCompactionFlow(
|
|
|
692
706
|
* a thrown read/model/persistence failure from the legitimate null no-op that
|
|
693
707
|
* `runCompactionFlow` returns for an empty session or an unavailable cut.
|
|
694
708
|
*/
|
|
695
|
-
|
|
709
|
+
function createProductionAutoCompact(
|
|
696
710
|
session: SessionContract,
|
|
697
711
|
getSettings: () => ClioSettings,
|
|
698
712
|
providers: ProvidersContract,
|
|
@@ -739,11 +753,11 @@ function estimateTokensAfterCompaction(entries: ReadonlyArray<SessionEntry>, res
|
|
|
739
753
|
* ids or target/model refs. Absent scope is a no-op so unconfigured users
|
|
740
754
|
* feel nothing.
|
|
741
755
|
*/
|
|
742
|
-
|
|
756
|
+
function advanceScopedTarget(
|
|
743
757
|
settings: Readonly<ClioSettings>,
|
|
744
758
|
direction: "forward" | "backward",
|
|
745
759
|
): { target: string; model: string | null } | null {
|
|
746
|
-
const scope = settings.
|
|
760
|
+
const scope = settings.chat.modelPicker.cycleSet ?? [];
|
|
747
761
|
if (scope.length === 0) return null;
|
|
748
762
|
const registry = getRuntimeRegistry();
|
|
749
763
|
if (registry.list().length === 0) registerBuiltinRuntimes(registry);
|
|
@@ -755,8 +769,8 @@ export function advanceScopedTarget(
|
|
|
755
769
|
return runtime !== null && isOrchestratorEligibleRuntime(runtime);
|
|
756
770
|
});
|
|
757
771
|
if (filteredScope.length === 0) return null;
|
|
758
|
-
const activeTarget = settings.
|
|
759
|
-
const activeModel = settings.
|
|
772
|
+
const activeTarget = settings.chat.target ?? "";
|
|
773
|
+
const activeModel = settings.chat.model ?? "";
|
|
760
774
|
const activeCombinedRef = activeTarget.length > 0 && activeModel.length > 0 ? `${activeTarget}/${activeModel}` : "";
|
|
761
775
|
const idx = filteredScope.findIndex((entry) => entry === activeCombinedRef || entry === activeTarget);
|
|
762
776
|
const base = idx === -1 ? 0 : idx + (direction === "forward" ? 1 : filteredScope.length - 1);
|
|
@@ -844,6 +858,19 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
844
858
|
let effectiveSettingsForDispatch: (() => Readonly<ClioSettings>) | null = null;
|
|
845
859
|
let protectedArtifactStateForDispatch: (() => ProtectedArtifactState) | null = null;
|
|
846
860
|
|
|
861
|
+
// Panes are an interactive-surface projection. Headless, ACP, and worker boots
|
|
862
|
+
// gate detection off so they never resolve a socket path or open a descriptor.
|
|
863
|
+
// This mirrors the `interactive` predicate computed after the domains load.
|
|
864
|
+
const muxInteractive = !options.headless && options.acp === undefined && process.env.CLIO_CODER_INTERACTIVE === "1";
|
|
865
|
+
// The rung is settled before the config contract loads, off the settings the
|
|
866
|
+
// interactive entry point already read strictly (`src/cli/clio.ts:31`) and
|
|
867
|
+
// the `--with-panes` / `--no-panes` flag, which wins in both directions. This
|
|
868
|
+
// is why `panes.enabled` is a restart-scoped row: the decision runs once,
|
|
869
|
+
// here. An inactive rung loads nothing: the whole extension, mux domain
|
|
870
|
+
// included, lives behind the dynamic import below.
|
|
871
|
+
const muxEnablement = resolvePanesEnablement(options.panes, options.startupSettings?.interface.panes.enabled);
|
|
872
|
+
const withPanes = muxInteractive && muxEnablement !== "off" ? await import("./with-panes.js") : null;
|
|
873
|
+
|
|
847
874
|
const result = await loadDomains(
|
|
848
875
|
[
|
|
849
876
|
options.startupSettings ? createConfigDomainModule(options.startupSettings) : ConfigDomainModule,
|
|
@@ -863,6 +890,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
863
890
|
ShareDomainModule,
|
|
864
891
|
createContextDomainModule({ noContextFiles: options.noContextFiles === true }),
|
|
865
892
|
ProvidersDomainModule,
|
|
893
|
+
ToolchainDomainModule,
|
|
866
894
|
SafetyDomainModule,
|
|
867
895
|
createPromptsDomainModule({
|
|
868
896
|
noContextFiles: options.noContextFiles === true,
|
|
@@ -872,6 +900,16 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
872
900
|
SessionDomainModule,
|
|
873
901
|
ObservabilityDomainModule,
|
|
874
902
|
SchedulingDomainModule,
|
|
903
|
+
...(withPanes
|
|
904
|
+
? [
|
|
905
|
+
withPanes.createMuxDomainModule({
|
|
906
|
+
enabled: muxEnablement,
|
|
907
|
+
log: (level, message) => {
|
|
908
|
+
if (level === "warning") bootStderr(`[mux] ${message}\n`);
|
|
909
|
+
},
|
|
910
|
+
}),
|
|
911
|
+
]
|
|
912
|
+
: []),
|
|
875
913
|
// Dispatch resolves worker targets through the session's effective
|
|
876
914
|
// settings view once it exists (assigned below, after the config
|
|
877
915
|
// contract loads); until then it falls back to the shared snapshot.
|
|
@@ -879,6 +917,11 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
879
917
|
getSettings: () => effectiveSettingsForDispatch?.(),
|
|
880
918
|
getProtectedArtifactState: () => protectedArtifactStateForDispatch?.() ?? { artifacts: [] },
|
|
881
919
|
autonomyOverride: options.headless?.autonomy !== undefined,
|
|
920
|
+
// The domain owns the durable journal here, not the dispatch
|
|
921
|
+
// tool's event registry: `/run`, a watchdog run, and a model
|
|
922
|
+
// dispatch all have to leave the same transcript behind, and only
|
|
923
|
+
// the last of the three ever reaches that registry.
|
|
924
|
+
journalRunEvents: true,
|
|
882
925
|
}),
|
|
883
926
|
LifecycleDomainModule,
|
|
884
927
|
],
|
|
@@ -915,7 +958,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
915
958
|
bootStderr("Clio Coder: --api-key supplied but providers domain unavailable; ignoring.\n");
|
|
916
959
|
} else {
|
|
917
960
|
const settingsNow = applyHeadlessSettingsOverlay(config?.get() ?? readSettings(), options.headless);
|
|
918
|
-
const activeTargetId = settingsNow.
|
|
961
|
+
const activeTargetId = settingsNow.chat?.target;
|
|
919
962
|
const target = resolveTarget(providers, activeTargetId);
|
|
920
963
|
const runtime = target ? providers.getRuntime(target.runtime) : null;
|
|
921
964
|
if (target && runtime) {
|
|
@@ -941,6 +984,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
941
984
|
const resources = result.getContract<ResourcesContract>("resources");
|
|
942
985
|
const extensions = result.getContract<ExtensionsContract>("extensions");
|
|
943
986
|
const share = result.getContract<ShareContract>("share");
|
|
987
|
+
const mux = result.getContract<MuxContract>("mux");
|
|
944
988
|
const contextDomain = result.getContract<ContextContract>("context");
|
|
945
989
|
const interop = result.getContract<InteropContract>("interop");
|
|
946
990
|
// Boot detection resolves paths only: no `--version` subprocess and no skill
|
|
@@ -1034,14 +1078,20 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1034
1078
|
bus.on(BusChannels.RuntimeNotice, (payload: unknown) => {
|
|
1035
1079
|
const notice = payload as { level?: string; message?: string } | undefined;
|
|
1036
1080
|
if (typeof notice?.message !== "string") return;
|
|
1037
|
-
process.stderr.write(`[clio:runtime] ${notice.level ?? "info"}: ${notice.message}\n`);
|
|
1081
|
+
process.stderr.write(`[clio-coder:runtime] ${notice.level ?? "info"}: ${notice.message}\n`);
|
|
1038
1082
|
});
|
|
1039
1083
|
}
|
|
1040
1084
|
|
|
1041
1085
|
// Guardrail policy (tool-call budgets, tool byte caps, dispatch ledger cap)
|
|
1042
1086
|
// resolves settings-first with env as emergency override; install the
|
|
1043
1087
|
// settings section before any guard registration or tool reads it.
|
|
1044
|
-
|
|
1088
|
+
const resolvedSettings = config?.get() ?? readSettings();
|
|
1089
|
+
configureGuardrails(guardrailValuesFromSettings(resolvedSettings));
|
|
1090
|
+
|
|
1091
|
+
// The run event journal resolves the same way for the same reason: the sink
|
|
1092
|
+
// sits on the dispatch event path, where reading settings.yaml would be both
|
|
1093
|
+
// a cost and a throw site, so the composition root installs the value once.
|
|
1094
|
+
configureRunEventJournal(resolvedSettings.fleet.history.journal);
|
|
1045
1095
|
|
|
1046
1096
|
// Guard registrations on the middleware contract, in order: loop guard,
|
|
1047
1097
|
// protected artifacts (last among guards so it absorbs protect_path effects
|
|
@@ -1135,7 +1185,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1135
1185
|
taskMemoryBank.clear();
|
|
1136
1186
|
taskMemorySessionId = currentSessionId;
|
|
1137
1187
|
};
|
|
1138
|
-
const memorySettings = (config?.get() ?? readSettings()).memory
|
|
1188
|
+
const memorySettings = (config?.get() ?? readSettings()).context.memory;
|
|
1139
1189
|
// Bound late: the registration is built here, but the buffer a deferred
|
|
1140
1190
|
// reminder lands in belongs to the chat loop that has not been composed yet.
|
|
1141
1191
|
let deferredMemoryReminderSink: ((message: string) => void) | null = null;
|
|
@@ -1185,12 +1235,12 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1185
1235
|
})
|
|
1186
1236
|
.then((result) => {
|
|
1187
1237
|
for (const error of result.errors) {
|
|
1188
|
-
process.stderr.write(`[clio:memory] proposed record not written for ${error}\n`);
|
|
1238
|
+
process.stderr.write(`[clio-coder:memory] proposed record not written for ${error}\n`);
|
|
1189
1239
|
}
|
|
1190
1240
|
})
|
|
1191
1241
|
.catch((error: unknown) => {
|
|
1192
1242
|
process.stderr.write(
|
|
1193
|
-
`[clio:memory] proposed records not written: ${error instanceof Error ? error.message : String(error)}\n`,
|
|
1243
|
+
`[clio-coder:memory] proposed records not written: ${error instanceof Error ? error.message : String(error)}\n`,
|
|
1194
1244
|
);
|
|
1195
1245
|
});
|
|
1196
1246
|
};
|
|
@@ -1204,16 +1254,25 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1204
1254
|
onDeferredReminder: (message) => deferredMemoryReminderSink?.(message),
|
|
1205
1255
|
getSettings: () => {
|
|
1206
1256
|
ensureTaskMemorySession();
|
|
1207
|
-
|
|
1257
|
+
const memory = effectiveSettingsForDispatch?.().context.memory ?? memorySettings;
|
|
1258
|
+
return {
|
|
1259
|
+
enabled: memory.enabled,
|
|
1260
|
+
everyNTools: memory.cadenceToolCalls,
|
|
1261
|
+
windowSteps: memory.trajectorySteps,
|
|
1262
|
+
maxTokens: memory.maxOutputTokens,
|
|
1263
|
+
timeoutMs: memory.timeoutMs,
|
|
1264
|
+
};
|
|
1208
1265
|
},
|
|
1209
1266
|
getModelClient: () => {
|
|
1210
1267
|
const settings = effectiveSettingsForDispatch?.();
|
|
1211
1268
|
backgroundMemoryRoute =
|
|
1212
1269
|
settings === undefined
|
|
1213
1270
|
? null
|
|
1214
|
-
: createBackgroundMemoryModelClient(providers, settings, settings.memory.
|
|
1271
|
+
: createBackgroundMemoryModelClient(providers, settings, settings.context.memory.timeoutMs, bus);
|
|
1215
1272
|
return backgroundMemoryRoute?.client ?? null;
|
|
1216
1273
|
},
|
|
1274
|
+
getModelMaxTokens: (configuredMaxTokens) =>
|
|
1275
|
+
backgroundMemoryRoute?.modelMaxTokens(configuredMaxTokens) ?? configuredMaxTokens,
|
|
1217
1276
|
// A single-slot local server serves one request at a time, so a memory step
|
|
1218
1277
|
// started while the operator's turn is streaming either waits behind it or
|
|
1219
1278
|
// makes the server swap the resident model out to answer. The chat loop
|
|
@@ -1252,10 +1311,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1252
1311
|
});
|
|
1253
1312
|
if (!interactive) {
|
|
1254
1313
|
for (const issue of userHooks.fileIssues) {
|
|
1255
|
-
process.stderr.write(`[clio:hooks] ${issue.message}\n`);
|
|
1314
|
+
process.stderr.write(`[clio-coder:hooks] ${issue.message}\n`);
|
|
1256
1315
|
}
|
|
1257
1316
|
for (const issue of userHooks.issues) {
|
|
1258
|
-
process.stderr.write(`[clio:hooks] ${issue.source.sourcePath}#${issue.index}: ${issue.issues.join("; ")}\n`);
|
|
1317
|
+
process.stderr.write(`[clio-coder:hooks] ${issue.source.sourcePath}#${issue.index}: ${issue.issues.join("; ")}\n`);
|
|
1259
1318
|
}
|
|
1260
1319
|
}
|
|
1261
1320
|
termination.onDrain(() => hookReceiptLog.flush());
|
|
@@ -1267,11 +1326,29 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1267
1326
|
// through these two functions so a fallback added to one surface cannot
|
|
1268
1327
|
// silently skip another.
|
|
1269
1328
|
const resolveBaselineAutonomy = (): AutonomyLevel =>
|
|
1270
|
-
effectiveSettingsForDispatch?.().autonomy ??
|
|
1329
|
+
effectiveSettingsForDispatch?.().safety.autonomy ??
|
|
1271
1330
|
options.headless?.autonomy ??
|
|
1272
|
-
(config?.get() ?? readSettings()).autonomy ??
|
|
1331
|
+
(config?.get() ?? readSettings()).safety.autonomy ??
|
|
1273
1332
|
"auto-edit";
|
|
1274
1333
|
const resolveEffectiveAutonomy = (): AutonomyLevel => activeAcpSessionAutonomy ?? resolveBaselineAutonomy();
|
|
1334
|
+
// Marketplace self-promotion: coordinator-only by this wiring (never a
|
|
1335
|
+
// dispatch worker), local matcher, consented installs and full-auto
|
|
1336
|
+
// autonomous installs both pass the own-marketplace source gate inside the
|
|
1337
|
+
// registration. Registered here because it needs the effective-autonomy
|
|
1338
|
+
// resolution defined one line up.
|
|
1339
|
+
if (resources) {
|
|
1340
|
+
middleware.registerHook(
|
|
1341
|
+
createMarketplaceOfferRegistration({
|
|
1342
|
+
listInstalledSkillNames: () => resources.skills(process.cwd()).items.map((skill) => skill.name),
|
|
1343
|
+
listMarketplaceEntries: () => discoverMarketplaceSkills({ cwd: process.cwd() }).skills,
|
|
1344
|
+
getAutonomy: resolveEffectiveAutonomy,
|
|
1345
|
+
installEntry: (entry, scope) => {
|
|
1346
|
+
const installed = installSkill({ source: entry.sourceUrl, scope, name: entry.name, cwd: process.cwd() });
|
|
1347
|
+
return { path: installed.path, sourceUrl: installed.sourceUrl, installedHash: installed.installedHash };
|
|
1348
|
+
},
|
|
1349
|
+
}),
|
|
1350
|
+
);
|
|
1351
|
+
}
|
|
1275
1352
|
const middlewareToolChoice = createMiddlewareToolChoiceControl();
|
|
1276
1353
|
const toolRegistry = createRegistry({
|
|
1277
1354
|
safety,
|
|
@@ -1374,6 +1451,19 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1374
1451
|
// Operator-initiated backgrounding is a TUI affordance: the registry is the
|
|
1375
1452
|
// one object the dispatch tool and the keypress both hold.
|
|
1376
1453
|
const dispatchBackground = createDispatchBackgroundRegistry();
|
|
1454
|
+
// One `PanesOperations` instance drives both the `panes` tool and the
|
|
1455
|
+
// `/panes` slash command, so the model and the operator cannot be told
|
|
1456
|
+
// different things about the same pane. It also owns the no-mux Yazi chooser,
|
|
1457
|
+
// while model tool registration below remains gated on a live pane host.
|
|
1458
|
+
const panes =
|
|
1459
|
+
withPanes && mux
|
|
1460
|
+
? withPanes.createPanesRuntime({
|
|
1461
|
+
mux,
|
|
1462
|
+
getSettings: () => getCurrentSettings(),
|
|
1463
|
+
getDispatchSnapshot: () => dispatch.snapshot(),
|
|
1464
|
+
getCwd: () => process.cwd(),
|
|
1465
|
+
})
|
|
1466
|
+
: null;
|
|
1377
1467
|
registerAllTools(toolRegistry, {
|
|
1378
1468
|
...(session
|
|
1379
1469
|
? {
|
|
@@ -1397,10 +1487,15 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1397
1487
|
// provenance and compete winner handling agree with the approval surface.
|
|
1398
1488
|
getAutonomy: resolveEffectiveAutonomy,
|
|
1399
1489
|
...(interactive ? { dispatchBackground } : {}),
|
|
1490
|
+
...(mux ? { competeMuxWorktrees: mux } : {}),
|
|
1491
|
+
// Registered only when a pane host answered detection, so the tool is
|
|
1492
|
+
// absent from the prompt on a machine with none rather than present and
|
|
1493
|
+
// always refusing.
|
|
1494
|
+
...(panes && mux?.mode !== "none" ? { panes } : {}),
|
|
1400
1495
|
getCostCeilingUsd: () => result.getContract<SchedulingContract>("scheduling")?.ceilingUsd() ?? 0,
|
|
1401
|
-
...(config ? { getWorkerRosters: () => config.get().
|
|
1496
|
+
...(config ? { getWorkerRosters: () => config.get().fleet.rosters } : {}),
|
|
1402
1497
|
getSkillLoaderOptions: () => ({
|
|
1403
|
-
trustProjectCompatRoots: config?.get().
|
|
1498
|
+
trustProjectCompatRoots: config?.get().integrations.projectResources.trustProjectImports === true,
|
|
1404
1499
|
disableDiscovery: options.noSkills === true || options.headless?.noSkills === true,
|
|
1405
1500
|
...(options.skillPaths && options.skillPaths.length > 0
|
|
1406
1501
|
? { explicitSkillPaths: options.skillPaths }
|
|
@@ -1441,7 +1536,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1441
1536
|
sessionStateGeneration += 1;
|
|
1442
1537
|
// Child-process seams read the effective setting from the environment,
|
|
1443
1538
|
// and the session view may override the saved value.
|
|
1444
|
-
setGitCommitAttributionEnabled(getCurrentSettings().
|
|
1539
|
+
setGitCommitAttributionEnabled(getCurrentSettings().integrations.git.commitAttribution);
|
|
1445
1540
|
};
|
|
1446
1541
|
const getCurrentSettings = (): ClioSettings => {
|
|
1447
1542
|
// Recents live in the data dir (core/recent-models.ts), never in
|
|
@@ -1472,15 +1567,11 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1472
1567
|
const unsubscribeCommitAttributionSync = bus.on(BusChannels.ConfigHotReload, () => bumpSessionState());
|
|
1473
1568
|
termination.onDrain(() => unsubscribeCommitAttributionSync());
|
|
1474
1569
|
const getTaskMemorySeedOffer = (): { source: string; count: number } | null => {
|
|
1475
|
-
return taskMemoryHandoffSeedOffer(process.cwd(), getCurrentSettings().memory.
|
|
1570
|
+
return taskMemoryHandoffSeedOffer(process.cwd(), getCurrentSettings().context.memory.enabled);
|
|
1476
1571
|
};
|
|
1477
1572
|
const seedCurrentTaskMemoryFromHandoff = () => {
|
|
1478
1573
|
ensureTaskMemorySession();
|
|
1479
|
-
return seedTaskMemoryFromNewestHandoff(
|
|
1480
|
-
taskMemoryBank,
|
|
1481
|
-
process.cwd(),
|
|
1482
|
-
getCurrentSettings().memory.intervention.enabled,
|
|
1483
|
-
);
|
|
1574
|
+
return seedTaskMemoryFromNewestHandoff(taskMemoryBank, process.cwd(), getCurrentSettings().context.memory.enabled);
|
|
1484
1575
|
};
|
|
1485
1576
|
if (resumedSessionAtBoot) {
|
|
1486
1577
|
const offer = getTaskMemorySeedOffer();
|
|
@@ -1500,7 +1591,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1500
1591
|
// routing change updates the set on the next read.
|
|
1501
1592
|
setProtectedModelsProvider(() => protectedResidencyModels(getCurrentSettings()));
|
|
1502
1593
|
|
|
1503
|
-
const validatedKeybindings = validateKeybindings((config?.get() ?? readSettings()).keybindings ?? {});
|
|
1594
|
+
const validatedKeybindings = validateKeybindings((config?.get() ?? readSettings()).interface.keybindings ?? {});
|
|
1504
1595
|
const invalidBindings = validatedKeybindings.invalid;
|
|
1505
1596
|
if (invalidBindings.length > 0) {
|
|
1506
1597
|
const notice = formatInvalidKeybindingNotice(invalidBindings);
|
|
@@ -1542,13 +1633,27 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1542
1633
|
mutateSaved?.(saved);
|
|
1543
1634
|
});
|
|
1544
1635
|
};
|
|
1636
|
+
/**
|
|
1637
|
+
* A routing change at the scope the operator chose. "session" moves the live
|
|
1638
|
+
* route and leaves settings.yaml alone, so a swap that points at a dead
|
|
1639
|
+
* endpoint dies with the session that made it; "global" is the historical
|
|
1640
|
+
* write-through. Nothing on this path writes durably without a scope.
|
|
1641
|
+
*/
|
|
1642
|
+
const applyRoutingAtScope = (patch: RoutingPatch, scope: "session" | "global"): void => {
|
|
1643
|
+
if (scope === "global") {
|
|
1644
|
+
updateSessionRouting(patch);
|
|
1645
|
+
return;
|
|
1646
|
+
}
|
|
1647
|
+
applyRoutingPatch(sessionRouting, patch);
|
|
1648
|
+
bumpSessionState();
|
|
1649
|
+
};
|
|
1545
1650
|
const readAcpSafeSettings = (): AcpSafeSettingsSnapshot => {
|
|
1546
1651
|
const settings = getCurrentSettings();
|
|
1547
1652
|
return {
|
|
1548
|
-
target: settings.
|
|
1549
|
-
model: settings.
|
|
1550
|
-
thinkingLevel: settings.
|
|
1551
|
-
autonomy: settings.autonomy,
|
|
1653
|
+
target: settings.chat.target,
|
|
1654
|
+
model: settings.chat.model,
|
|
1655
|
+
thinkingLevel: settings.chat.thinkingLevel ?? "off",
|
|
1656
|
+
autonomy: settings.safety.autonomy,
|
|
1552
1657
|
};
|
|
1553
1658
|
};
|
|
1554
1659
|
/**
|
|
@@ -1558,15 +1663,15 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1558
1663
|
*/
|
|
1559
1664
|
const commitAcpSafeSettings = (patch: AcpSafeSettingsPatch): AcpSafeSettingsSnapshot => {
|
|
1560
1665
|
const orchestrator: NonNullable<RoutingPatch["orchestrator"]> = {};
|
|
1561
|
-
if (patch["
|
|
1562
|
-
if (patch["
|
|
1563
|
-
if (patch["
|
|
1564
|
-
orchestrator.thinkingLevel = patch["
|
|
1666
|
+
if (patch["chat.target"] !== undefined) orchestrator.target = patch["chat.target"];
|
|
1667
|
+
if (patch["chat.model"] !== undefined) orchestrator.model = patch["chat.model"];
|
|
1668
|
+
if (patch["chat.thinkingLevel"] !== undefined) {
|
|
1669
|
+
orchestrator.thinkingLevel = patch["chat.thinkingLevel"];
|
|
1565
1670
|
}
|
|
1566
1671
|
const routingPatch: RoutingPatch | null = Object.keys(orchestrator).length > 0 ? { orchestrator } : null;
|
|
1567
1672
|
persistSavedMutation((saved) => {
|
|
1568
1673
|
if (routingPatch !== null) mergeRoutingPatchIntoSettings(saved, routingPatch);
|
|
1569
|
-
if (patch.autonomy !== undefined) saved.autonomy = patch.autonomy;
|
|
1674
|
+
if (patch["safety.autonomy"] !== undefined) saved.safety.autonomy = patch["safety.autonomy"];
|
|
1570
1675
|
});
|
|
1571
1676
|
if (routingPatch !== null) {
|
|
1572
1677
|
applyRoutingPatch(sessionRouting, routingPatch);
|
|
@@ -1665,7 +1770,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1665
1770
|
middleware.registerHook(
|
|
1666
1771
|
createWatchdogRegistration({
|
|
1667
1772
|
firesOnThisSurface: interactive,
|
|
1668
|
-
getSettings: () => (effectiveSettingsForDispatch?.() ?? getCurrentSettings()).
|
|
1773
|
+
getSettings: () => (effectiveSettingsForDispatch?.() ?? getCurrentSettings()).safety.review,
|
|
1669
1774
|
getScope: () => {
|
|
1670
1775
|
const board = taskBoard.snapshot();
|
|
1671
1776
|
if (board === null) return null;
|
|
@@ -1677,7 +1782,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1677
1782
|
dispatch,
|
|
1678
1783
|
bus,
|
|
1679
1784
|
...(agents ? { getAgentRoleFacts: agentRoleFactsResolver((id: string) => agents.getSpec(id)) } : {}),
|
|
1680
|
-
target: (effectiveSettingsForDispatch?.() ?? getCurrentSettings()).
|
|
1785
|
+
target: (effectiveSettingsForDispatch?.() ?? getCurrentSettings()).safety.review.target,
|
|
1681
1786
|
...(deferredWatchdogNoticeSink ? { emitNotice: deferredWatchdogNoticeSink } : {}),
|
|
1682
1787
|
}),
|
|
1683
1788
|
}),
|
|
@@ -1723,7 +1828,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1723
1828
|
try {
|
|
1724
1829
|
const records = loadMemoryRecordsSync(clioDataDir());
|
|
1725
1830
|
const settings = getCurrentSettings();
|
|
1726
|
-
const targetId = session?.current()?.target ?? settings.
|
|
1831
|
+
const targetId = session?.current()?.target ?? settings.chat?.target;
|
|
1727
1832
|
const runtimeId = targetId ? providers.getTarget(targetId)?.runtime : undefined;
|
|
1728
1833
|
return buildMemoryPromptSection(records, {
|
|
1729
1834
|
scopes: ["global", "repo", "runtime"],
|
|
@@ -1739,7 +1844,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1739
1844
|
const meta = session?.current();
|
|
1740
1845
|
if (!meta) throw new Error("task memory handoff requires an active session");
|
|
1741
1846
|
const settings = getCurrentSettings();
|
|
1742
|
-
const targetId = meta.target ?? settings.
|
|
1847
|
+
const targetId = meta.target ?? settings.chat?.target;
|
|
1743
1848
|
const runtimeId = targetId ? providers.getTarget(targetId)?.runtime : undefined;
|
|
1744
1849
|
return renderTaskMemoryHandoffSource(taskMemoryBank.snapshot(), {
|
|
1745
1850
|
sessionId: meta.id,
|
|
@@ -1848,7 +1953,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1848
1953
|
try {
|
|
1849
1954
|
session.appendEntry({
|
|
1850
1955
|
kind: "custom",
|
|
1851
|
-
customType: "clio.routing-notice",
|
|
1956
|
+
customType: "clio-coder.routing-notice",
|
|
1852
1957
|
parentTurnId: null,
|
|
1853
1958
|
data: { kind: notice.kind, level: notice.level, text: notice.text },
|
|
1854
1959
|
});
|
|
@@ -1882,8 +1987,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1882
1987
|
routing: () => {
|
|
1883
1988
|
const settings = getCurrentSettings();
|
|
1884
1989
|
return {
|
|
1885
|
-
target: settings.
|
|
1886
|
-
model: settings.
|
|
1990
|
+
target: settings.chat.target,
|
|
1991
|
+
model: settings.chat.model,
|
|
1887
1992
|
};
|
|
1888
1993
|
},
|
|
1889
1994
|
onActiveSessionAutonomyChange: (level) => {
|
|
@@ -1895,11 +2000,11 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1895
2000
|
// as a provider's failure body, is kept off the wire and written to
|
|
1896
2001
|
// the unstructured stderr tail instead.
|
|
1897
2002
|
diagnostics: (line) => {
|
|
1898
|
-
process.stderr.write(`[clio:acp] ${line}\n`);
|
|
2003
|
+
process.stderr.write(`[clio-coder:acp] ${line}\n`);
|
|
1899
2004
|
},
|
|
1900
2005
|
permissionTimeoutMs:
|
|
1901
2006
|
options.acp.permissionTimeoutMs ??
|
|
1902
|
-
config?.get().
|
|
2007
|
+
config?.get().integrations.externalAgents.defaults.permissionTimeoutMs ??
|
|
1903
2008
|
DEFAULT_DELEGATION_PERMISSION_TIMEOUT_MS,
|
|
1904
2009
|
});
|
|
1905
2010
|
// Same ordering the termination drain hook relies on: an aborted turn's
|
|
@@ -2014,6 +2119,20 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2014
2119
|
...(extensions ? { extensions } : {}),
|
|
2015
2120
|
...(interop ? { interop } : {}),
|
|
2016
2121
|
...(share ? { share } : {}),
|
|
2122
|
+
...(mux ? { mux } : {}),
|
|
2123
|
+
...(panes ? { panes } : {}),
|
|
2124
|
+
...(panes ? { attachYaziBridge: (bridge) => panes.attachYazi(bridge) } : {}),
|
|
2125
|
+
// The interactive surface never imports the panes glue itself; the
|
|
2126
|
+
// factories arrive only on an active boot, through the same dynamic
|
|
2127
|
+
// import that loaded the mux domain.
|
|
2128
|
+
...(withPanes
|
|
2129
|
+
? {
|
|
2130
|
+
createMuxBridge: withPanes.createMuxBridge,
|
|
2131
|
+
createYaziBridge: withPanes.createYaziBridge,
|
|
2132
|
+
createWatchPane: withPanes.createWatchPaneController,
|
|
2133
|
+
}
|
|
2134
|
+
: {}),
|
|
2135
|
+
...(panes ? { attachWatchPane: (controller) => panes.attachWatch(controller) } : {}),
|
|
2017
2136
|
toolRegistry,
|
|
2018
2137
|
...(session ? { session } : {}),
|
|
2019
2138
|
...(session ? { readSessionEntries: readCurrentSessionEntries } : {}),
|
|
@@ -2026,8 +2145,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2026
2145
|
const settings = getCurrentSettings();
|
|
2027
2146
|
const bank = taskMemoryBank.snapshot();
|
|
2028
2147
|
return {
|
|
2029
|
-
enabled: settings.memory.
|
|
2030
|
-
tier: settings.
|
|
2148
|
+
enabled: settings.context.memory.enabled,
|
|
2149
|
+
tier: settings.context.memory.target && settings.context.memory.model ? "llm" : "rules",
|
|
2031
2150
|
size: taskMemoryBankSize(bank),
|
|
2032
2151
|
lastDecision: memoryIntervention.lastDecision(),
|
|
2033
2152
|
bank,
|
|
@@ -2126,33 +2245,29 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2126
2245
|
},
|
|
2127
2246
|
}
|
|
2128
2247
|
: {}),
|
|
2129
|
-
onSetThinkingLevel: (level) => {
|
|
2248
|
+
onSetThinkingLevel: (level, scope) => {
|
|
2130
2249
|
const current = getCurrentSettings();
|
|
2131
2250
|
const nextLevel =
|
|
2132
|
-
resolveModelRuntimeCapabilitiesForProviders(
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
current.orchestrator.model,
|
|
2136
|
-
level,
|
|
2137
|
-
)?.thinking.effectiveLevel ?? "off";
|
|
2138
|
-
updateSessionRouting({ orchestrator: { thinkingLevel: nextLevel } });
|
|
2251
|
+
resolveModelRuntimeCapabilitiesForProviders(providers, current.chat.target, current.chat.model, level)?.thinking
|
|
2252
|
+
.effectiveLevel ?? "off";
|
|
2253
|
+
applyRoutingAtScope({ orchestrator: { thinkingLevel: nextLevel } }, scope ?? "global");
|
|
2139
2254
|
},
|
|
2140
2255
|
onCycleThinking: () => {
|
|
2141
2256
|
const current = getCurrentSettings();
|
|
2142
2257
|
const thinking = resolveModelRuntimeCapabilitiesForProviders(
|
|
2143
2258
|
providers,
|
|
2144
|
-
current.
|
|
2145
|
-
current.
|
|
2146
|
-
current.
|
|
2259
|
+
current.chat.target,
|
|
2260
|
+
current.chat.model,
|
|
2261
|
+
current.chat.thinkingLevel ?? "off",
|
|
2147
2262
|
)?.thinking;
|
|
2148
2263
|
const effectiveAvailable = thinking?.supportedLevels ?? (["off"] as ThinkingLevel[]);
|
|
2149
2264
|
const nextLevel = advanceThinkingLevel(
|
|
2150
|
-
thinking?.effectiveLevel ?? current.
|
|
2265
|
+
thinking?.effectiveLevel ?? current.chat.thinkingLevel ?? "off",
|
|
2151
2266
|
effectiveAvailable,
|
|
2152
2267
|
);
|
|
2153
2268
|
updateSessionRouting({ orchestrator: { thinkingLevel: nextLevel } });
|
|
2154
2269
|
},
|
|
2155
|
-
onSelectModel: ({ target, model }) => {
|
|
2270
|
+
onSelectModel: ({ target, model }, scope) => {
|
|
2156
2271
|
const registry = getRuntimeRegistry();
|
|
2157
2272
|
const settings = getCurrentSettings();
|
|
2158
2273
|
const descriptor = settings.targets.find((e) => e.id === target);
|
|
@@ -2169,8 +2284,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2169
2284
|
);
|
|
2170
2285
|
}
|
|
2171
2286
|
}
|
|
2172
|
-
|
|
2173
|
-
|
|
2287
|
+
applyRoutingAtScope({ orchestrator: { target, model } }, scope);
|
|
2288
|
+
// Recents live in the state dir, not settings.yaml, and are how a swap
|
|
2289
|
+
// stays reachable in the picker. A session-scoped swap still earns one.
|
|
2290
|
+
rememberRecentModel(`${target}/${model}`, getCurrentSettings().chat.modelPicker.recentLimit);
|
|
2174
2291
|
},
|
|
2175
2292
|
writeSettings: (next) => applySettingsBlob(next),
|
|
2176
2293
|
commitSetting: (id, next, scope) => commitSetting(id, next, scope),
|
|
@@ -2191,8 +2308,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2191
2308
|
onNewSession: () => {
|
|
2192
2309
|
const settings = getCurrentSettings();
|
|
2193
2310
|
const input: { cwd: string; target?: string; model?: string } = { cwd: process.cwd() };
|
|
2194
|
-
if (settings.
|
|
2195
|
-
if (settings.
|
|
2311
|
+
if (settings.chat.target) input.target = settings.chat.target;
|
|
2312
|
+
if (settings.chat.model) input.model = settings.chat.model;
|
|
2196
2313
|
session.create(input);
|
|
2197
2314
|
taskBoard.snapshot();
|
|
2198
2315
|
ensureTaskMemorySession();
|