@iowarp/clio-coder 0.4.0 → 0.4.2
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 +131 -0
- package/CONTRIBUTING.md +59 -36
- package/README.md +407 -375
- package/SECURITY.md +2 -1
- package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
- package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
- package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
- package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
- package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
- package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
- package/dist/chunk-2X4RYJTJ.js +39 -0
- package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
- package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
- package/dist/chunk-34BHNEE3.js +1846 -0
- package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
- package/dist/chunk-3KIPBMUA.js +308 -0
- package/dist/chunk-3M6DQK6S.js +362 -0
- package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
- package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
- package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
- package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
- package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
- package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
- package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
- package/dist/chunk-77QIVUZB.js +1334 -0
- package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
- package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
- package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
- package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
- package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
- package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
- package/dist/chunk-BTK3SSSK.js +67 -0
- package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
- package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
- package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
- package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
- package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
- package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
- package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
- package/dist/chunk-D7E7WCDF.js +27 -0
- package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
- package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
- package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
- package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
- package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
- package/dist/chunk-F2I26BDK.js +66 -0
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
- package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
- package/dist/chunk-HJWWJ6IL.js +184 -0
- package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
- package/dist/chunk-HLAFFSEK.js +360 -0
- package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
- package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
- package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
- package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
- package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
- package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
- package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
- package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
- package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
- package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
- package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
- package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
- package/dist/chunk-KPXDY6QF.js +47 -0
- package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
- package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
- package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
- package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
- package/dist/chunk-NDDGJUXD.js +81 -0
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/chunk-NMJXSHBJ.js +283 -0
- package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
- package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
- package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
- package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
- package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
- package/dist/chunk-PJX3WQUQ.js +42 -0
- package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
- package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
- package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
- package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
- package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
- package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
- package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
- package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
- package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
- package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
- package/dist/chunk-UXCU4E3T.js +303 -0
- package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
- package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
- package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
- package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
- package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
- package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
- package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
- package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
- package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
- package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
- package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
- package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
- package/dist/chunk-XQRY4DTA.js +657 -0
- package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
- package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
- package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
- package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
- package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
- package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
- package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
- package/dist/cli/index.js +38 -37
- package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
- package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
- package/dist/codewiki/build-worker.js +1 -1
- package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
- package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
- package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
- package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
- package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
- package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
- package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
- package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
- package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
- package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
- package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
- package/dist/doctor-LHBD36VU.js +773 -0
- package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
- package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
- package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
- package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
- package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
- package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
- package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
- package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
- package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
- package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
- package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
- package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
- package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
- package/dist/fleet-view-TWHJKCN6.js +96 -0
- package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
- package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
- package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
- package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
- package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
- package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
- package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
- package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
- package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
- package/dist/panes-IXKLOKA2.js +75 -0
- package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
- package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
- package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
- package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
- package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
- package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
- package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
- package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
- package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
- package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
- package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
- package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
- package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
- package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
- package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
- package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
- package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
- package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
- package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
- package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
- package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
- package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
- package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
- package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
- package/dist/worker/entry.js +83 -63
- package/docs/README.md +176 -81
- package/docs/{acp.md → architecture/acp.md} +36 -20
- package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
- package/docs/{architecture.md → architecture/architecture.md} +43 -22
- package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
- package/docs/architecture/artifact-versions.md +90 -0
- package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
- package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
- package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
- package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
- package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
- package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
- package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
- package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
- package/docs/{observability.md → architecture/observability.md} +26 -13
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
- package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
- package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
- package/docs/architecture/time-conventions.md +125 -0
- package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
- package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
- package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
- package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
- package/docs/guide/configuration-reference.md +1158 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
- package/docs/history/release-cut-checklist.md +207 -0
- package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
- package/docs/process/documentation-coverage.md +100 -0
- package/docs/process/documentation-guide.md +187 -0
- package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
- package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
- package/docs/{evolution.md → process/evolution.md} +2 -2
- package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
- package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
- package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
- package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
- 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 +13 -21
- package/skills/README.md +51 -42
- package/skills/coding/ast-grep/SKILL.md +9 -3
- package/skills/coding/coding-standards/SKILL.md +9 -3
- package/skills/coding/prototype/SKILL.md +9 -3
- package/skills/coding/tdd/SKILL.md +9 -3
- package/skills/context/context-handoff/SKILL.md +13 -4
- package/skills/context/context-handoff/evals.md +3 -3
- package/skills/context/context-prime/SKILL.md +9 -3
- package/skills/context/context-prime/evals.md +2 -2
- package/skills/git/file-ticket/SKILL.md +10 -5
- 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 +9 -3
- package/skills/git/resolve-merge-conflicts/evals.md +2 -2
- package/skills/git/ship/SKILL.md +10 -4
- package/skills/git/ship/evals.md +4 -4
- package/skills/git/worktree-create/SKILL.md +8 -3
- package/skills/git/worktree-create/evals.md +6 -6
- package/skills/git/worktree-merge/SKILL.md +8 -3
- package/skills/git/worktree-merge/evals.md +6 -6
- package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
- package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
- package/skills/meta/clio-coder-test/SKILL.md +146 -0
- package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
- package/skills/meta/clio-coder-test/references/harness.md +102 -0
- package/skills/meta/clio-coder-test/references/test-map.md +96 -0
- package/skills/meta/credentials/SKILL.md +10 -3
- package/skills/meta/find-skills/SKILL.md +9 -3
- package/skills/meta/herdr/SKILL.md +9 -3
- package/skills/meta/skill-craft/SKILL.md +39 -16
- package/skills/planning/architecture/SKILL.md +9 -3
- package/skills/planning/backlog/SKILL.md +9 -3
- package/skills/planning/prd/SKILL.md +9 -3
- package/skills/planning/product-intent/SKILL.md +9 -3
- package/skills/planning/tech-spec/SKILL.md +9 -3
- package/skills/registry.yaml +66 -66
- package/skills/research/arxiv-literature/SKILL.md +9 -3
- package/skills/research/experiment-protocol/SKILL.md +10 -3
- package/skills/research/scientific-debugging/SKILL.md +10 -3
- package/skills/research/scientific-debugging/evals.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +10 -3
- package/skills/skill-marketplace.json +285 -66
- package/skills/workflow/cut-it/SKILL.md +11 -3
- package/skills/workflow/design-council/SKILL.md +12 -3
- package/skills/workflow/grill-me/SKILL.md +9 -3
- package/skills/workflow/workflow-distiller/SKILL.md +9 -3
- package/src/cli/acp.ts +2 -2
- package/src/cli/args.ts +2 -2
- package/src/cli/auth.ts +2 -2
- package/src/cli/bootstrap-generate.ts +6 -6
- package/src/cli/clio.ts +6 -1
- package/src/cli/config-inspect.ts +68 -15
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure.ts +27 -31
- package/src/cli/default-target.ts +1 -1
- package/src/cli/docs.ts +28 -20
- package/src/cli/doctor-naming.ts +323 -0
- package/src/cli/doctor-panes.ts +46 -14
- package/src/cli/doctor-toolchain.ts +31 -10
- package/src/cli/doctor.ts +15 -1
- package/src/cli/eval-inventory.ts +8 -8
- package/src/cli/eval.ts +1 -2
- package/src/cli/evidence-detail.ts +1 -1
- package/src/cli/evidence-inventory.ts +1 -1
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet-decisions.ts +1 -1
- package/src/cli/fleet-inspect.ts +1 -1
- package/src/cli/fleet-preflight.ts +1 -1
- package/src/cli/fleet-verify.ts +1 -1
- package/src/cli/fleet-view.ts +40 -23
- package/src/cli/fleet.ts +9 -6
- package/src/cli/index.ts +2 -1
- package/src/cli/internal-dispatch.ts +3 -4
- package/src/cli/interop-inspect.ts +2 -2
- package/src/cli/models.ts +3 -3
- package/src/cli/modes/print.ts +1 -1
- package/src/cli/panes.ts +19 -5
- package/src/cli/reset.ts +1 -1
- package/src/cli/run.ts +13 -17
- package/src/cli/share.ts +6 -2
- package/src/cli/skills-eval.ts +14 -14
- package/src/cli/targets.ts +25 -30
- package/src/cli/trace-inspect.ts +1 -1
- package/src/cli/trace.ts +96 -4
- package/src/cli/uninstall.ts +2 -2
- package/src/cli/upgrade.ts +29 -34
- package/src/cli/usage.ts +2 -2
- package/src/cli/validate-model.ts +1 -1
- package/src/cli/verifiers-inspect.ts +1 -1
- package/src/cli/wiki-generate.ts +6 -6
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +132 -87
- package/src/core/boot-trace.ts +3 -3
- package/src/core/bus-events.ts +51 -6
- package/src/core/bus-trace.ts +2 -2
- package/src/core/compile-cache.ts +1 -1
- package/src/core/config.ts +1066 -886
- package/src/core/defaults.ts +326 -530
- package/src/core/dispatch-outcome.ts +16 -0
- 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 +33 -52
- package/src/core/naming-compat.ts +45 -0
- package/src/core/naming-events.ts +62 -0
- package/src/core/prompt-hint.ts +9 -0
- package/src/core/recent-models.ts +1 -7
- package/src/core/residency-protection.ts +4 -8
- package/src/core/resolve-config-value.ts +1 -1
- package/src/core/response-model-id.ts +0 -14
- package/src/core/session-routing.ts +84 -74
- package/src/core/skill-activation.ts +18 -0
- package/src/core/termination.ts +4 -4
- package/src/core/timers.ts +2 -12
- package/src/domains/agents/builtins/architect.md +2 -3
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +2 -2
- package/src/domains/agents/builtins/documenter.md +2 -2
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/oracle.md +1 -1
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +2 -2
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/catalog.ts +14 -26
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +26 -4
- package/src/domains/agents/registry.ts +7 -7
- package/src/domains/agents/result-contract.ts +1 -1
- package/src/domains/agents/spec.ts +0 -11
- package/src/domains/config/classify.ts +35 -47
- package/src/domains/config/extension.ts +5 -5
- package/src/domains/config/keybindings.ts +56 -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 -6
- package/src/domains/context/prompt-context.ts +1 -1
- package/src/domains/context/wiki/assemble.ts +2 -2
- package/src/domains/context/working-set/path-index.ts +1 -0
- package/src/domains/context/working-set/replay/metrics.ts +0 -4
- package/src/domains/context/working-set/replay/report.ts +1 -1
- package/src/domains/context/working-set/replay/synthetic.ts +2 -2
- package/src/domains/dispatch/active-route-planner.ts +2 -2
- package/src/domains/dispatch/agent-candidates.ts +1 -1
- package/src/domains/dispatch/agent-ledger-store.ts +1 -1
- package/src/domains/dispatch/agent-ledger.ts +1 -1
- package/src/domains/dispatch/assignment.ts +5 -5
- package/src/domains/dispatch/capability-match.ts +10 -0
- package/src/domains/dispatch/capacity-lease.ts +2 -5
- package/src/domains/dispatch/code-step.ts +1 -1
- package/src/domains/dispatch/contract.ts +2 -2
- package/src/domains/dispatch/extension.ts +169 -82
- package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
- package/src/domains/dispatch/fleet-preflight.ts +8 -17
- package/src/domains/dispatch/fleet-run.ts +0 -7
- package/src/domains/dispatch/gate-decisions.ts +25 -14
- package/src/domains/dispatch/host-verification.ts +435 -39
- package/src/domains/dispatch/intent-requirements.ts +10 -0
- package/src/domains/dispatch/intent.ts +18 -1
- package/src/domains/dispatch/joint-route-resolver.ts +1 -1
- package/src/domains/dispatch/path-scope.ts +220 -70
- package/src/domains/dispatch/placement.ts +2 -2
- package/src/domains/dispatch/receipt-findings.ts +1 -1
- package/src/domains/dispatch/receipt-integrity.ts +20 -8
- package/src/domains/dispatch/reservation-store.ts +0 -23
- package/src/domains/dispatch/route-decision.ts +1 -1
- package/src/domains/dispatch/route-history.ts +1 -1
- package/src/domains/dispatch/route-policy.ts +1 -1
- package/src/domains/dispatch/route-readiness.ts +0 -28
- package/src/domains/dispatch/run-event-journal.ts +9 -19
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/tool-stats.ts +1 -1
- package/src/domains/dispatch/transport.ts +47 -40
- package/src/domains/dispatch/types.ts +58 -6
- package/src/domains/dispatch/worker-protocol.ts +2 -2
- package/src/domains/eval/artifacts/store.ts +10 -4
- package/src/domains/eval/compare/thresholds.ts +0 -8
- package/src/domains/eval/execution-provenance.ts +1 -1
- package/src/domains/eval/metrics/token-stream.ts +0 -7
- package/src/domains/eval/report.ts +1 -1
- package/src/domains/eval/runner.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +7 -6
- package/src/domains/eval/runners/external-command.ts +4 -3
- package/src/domains/eval/schema/artifact.ts +1 -1
- package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
- package/src/domains/eval/schema/behavioral.ts +7 -6
- package/src/domains/eval/schema/execution-envelope.ts +4 -2
- package/src/domains/eval/schema/naming.ts +10 -0
- package/src/domains/eval/schema/suite.ts +2 -2
- package/src/domains/eval/schema/validate.ts +9 -5
- package/src/domains/eval/schema/verdict.ts +4 -2
- package/src/domains/eval/store.ts +20 -3
- 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/trust-status.ts +10 -1
- package/src/domains/extensions/contract.ts +15 -1
- package/src/domains/extensions/discovery.ts +238 -41
- package/src/domains/extensions/extension.ts +105 -6
- package/src/domains/extensions/index.ts +24 -0
- package/src/domains/extensions/integrity.ts +189 -0
- package/src/domains/extensions/manager.ts +17 -1
- package/src/domains/extensions/resource-path.ts +27 -0
- package/src/domains/extensions/resources.ts +18 -38
- package/src/domains/extensions/snapshot-store.ts +39 -0
- package/src/domains/extensions/snapshot.ts +180 -0
- package/src/domains/extensions/state.ts +385 -57
- package/src/domains/extensions/types.ts +118 -1
- 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-extension-install-digests.ts +27 -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 +22 -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 +276 -0
- package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
- package/src/domains/lifecycle/naming-yazi.ts +86 -0
- package/src/domains/lifecycle/upgrade-notice.ts +1 -1
- package/src/domains/memory/task-memory-handoff.ts +6 -3
- package/src/domains/middleware/contract.ts +26 -0
- package/src/domains/middleware/extension.ts +24 -24
- package/src/domains/middleware/hook-receipts.ts +27 -4
- package/src/domains/middleware/hooks-io.ts +65 -32
- package/src/domains/middleware/hooks.ts +64 -0
- package/src/domains/middleware/index.ts +35 -4
- package/src/domains/middleware/marketplace-offer.ts +339 -0
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +30 -2
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +195 -25
- package/src/domains/mux/detect.ts +23 -6
- package/src/domains/mux/dock-controller.ts +365 -0
- package/src/domains/mux/extension.ts +7 -1
- package/src/domains/mux/index.ts +21 -1
- package/src/domains/mux/operations.ts +72 -5
- package/src/domains/mux/protocol.ts +19 -6
- package/src/domains/mux/socket-client.ts +167 -19
- package/src/domains/mux/types.ts +49 -6
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/event-stream.ts +6 -4
- package/src/domains/mux/yazi/profile.ts +1 -1
- package/src/domains/mux/yazi/session.ts +79 -7
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/extension.ts +12 -4
- package/src/domains/observability/out-of-turn-usage.ts +2 -2
- package/src/domains/observability/projection.ts +15 -91
- package/src/domains/observability/trace-store.ts +65 -19
- package/src/domains/prompts/compiler.ts +75 -55
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +100 -12
- package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
- package/src/domains/prompts/fragments/identity/clio.md +6 -12
- package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
- package/src/domains/prompts/fragments/operating/contract.md +7 -15
- package/src/domains/prompts/fragments/operating/delegation.md +32 -34
- package/src/domains/prompts/fragments/operating/skills.md +11 -18
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/extension.ts +5 -5
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/knowledge-base-path.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +99 -23
- 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} +671 -106
- package/src/domains/providers/plugins.ts +1 -1
- package/src/domains/providers/resolver.ts +1 -1
- package/src/domains/providers/runtime-resolution.ts +31 -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 +9 -4
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
- package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
- package/src/domains/providers/types/cost-provenance.ts +19 -0
- package/src/domains/providers/types/knowledge-base.ts +13 -0
- package/src/domains/providers/types/local-model-quirks.ts +87 -39
- package/src/domains/providers/types/target-descriptor.ts +3 -3
- package/src/domains/resources/extension.ts +1 -1
- package/src/domains/resources/library.ts +6 -6
- package/src/domains/resources/prompts/loader.ts +1 -1
- package/src/domains/resources/skills/content-hash.ts +7 -6
- package/src/domains/resources/skills/evals.ts +1 -1
- package/src/domains/resources/skills/install.ts +36 -12
- package/src/domains/resources/skills/loader.ts +41 -18
- package/src/domains/resources/skills/marketplace.ts +21 -2
- package/src/domains/resources/skills/promotion.ts +214 -0
- package/src/domains/safety/audit.ts +2 -2
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/finish-contract.ts +2 -1
- package/src/domains/safety/loop-detector.ts +7 -4
- 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/session/task-board.ts +10 -9
- package/src/domains/share/archive.ts +249 -43
- package/src/domains/toolchain/install.ts +1 -1
- package/src/engine/acp/adapter.ts +3 -3
- package/src/engine/acp/event-mapper.ts +3 -3
- package/src/engine/acp/server.ts +89 -35
- package/src/engine/acp/tool-mediator.ts +2 -2
- package/src/engine/acp/types.ts +1 -1
- package/src/engine/alcf-oauth.ts +5 -5
- package/src/engine/antigravity/subprocess-runtime.ts +2 -2
- package/src/engine/api-registry.ts +1 -1
- package/src/engine/apis/llamacpp-residency.ts +4 -23
- package/src/engine/apis/lmstudio.ts +4 -9
- package/src/engine/apis/ollama-native.ts +9 -9
- package/src/engine/apis/openai-completions.ts +30 -27
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +10 -35
- package/src/engine/claude/sdk-module.ts +1 -12
- package/src/engine/claude/sdk-runtime.ts +6 -6
- package/src/engine/claude/subprocess-runtime.ts +1 -1
- package/src/engine/claude/tool-safety.ts +4 -4
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -17
- package/src/engine/session.ts +14 -7
- package/src/engine/tui-primitives.ts +1 -1
- package/src/engine/worker-events.ts +6 -6
- package/src/engine/worker-runtime.ts +54 -24
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +163 -120
- package/src/interactive/application-controller.ts +23 -22
- package/src/interactive/bus-notices.ts +10 -3
- package/src/interactive/chat-loop-messages.ts +3 -13
- package/src/interactive/chat-loop.ts +18 -9
- package/src/interactive/chat-panel.ts +37 -14
- package/src/interactive/chat-renderer.ts +71 -7
- package/src/interactive/clio-editor.ts +105 -1
- package/src/interactive/context-activity.ts +8 -6
- package/src/interactive/context-meter.ts +3 -6
- package/src/interactive/context-overlay.ts +1 -1
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/council-grid.ts +2 -2
- package/src/interactive/dispatch-board.ts +36 -44
- 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 +15 -44
- package/src/interactive/interactive-application.ts +116 -61
- package/src/interactive/interactive-event-projection.ts +1 -1
- package/src/interactive/interactive-input-runtime.ts +6 -2
- package/src/interactive/interactive-presentation.ts +22 -17
- package/src/interactive/interactive-shell.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +65 -17
- package/src/interactive/interactive-subscriptions.ts +1 -1
- package/src/interactive/interactive-tickers.ts +1 -1
- package/src/interactive/keybinding-manager.ts +4 -4
- package/src/interactive/layout.ts +1 -1
- package/src/interactive/memory-overlay.ts +2 -2
- package/src/interactive/modal-marker.ts +2 -21
- package/src/interactive/mutation-preview.ts +1 -1
- package/src/interactive/overlay-frame.ts +4 -12
- package/src/interactive/overlay-general-openers.ts +6 -2
- package/src/interactive/overlay-key-routing.ts +7 -7
- package/src/interactive/overlay-lifecycle.ts +1 -1
- package/src/interactive/overlay-model-selectors.ts +3 -3
- package/src/interactive/overlays/agents.ts +2 -2
- package/src/interactive/overlays/ask-user.ts +25 -11
- package/src/interactive/overlays/context-reset.ts +28 -4
- package/src/interactive/overlays/cwd-fallback.ts +28 -4
- package/src/interactive/overlays/decisions.ts +4 -2
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/fleet-run-approval.ts +3 -3
- package/src/interactive/overlays/handoff-review.ts +2 -2
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/interop.ts +1 -1
- package/src/interactive/overlays/library-install-confirm.ts +1 -1
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/model-selector.ts +39 -31
- package/src/interactive/overlays/prompts.ts +10 -4
- package/src/interactive/overlays/session-selector.ts +2 -2
- package/src/interactive/overlays/settings.ts +360 -303
- package/src/interactive/overlays/side-question.ts +2 -2
- package/src/interactive/overlays/skills-hub.ts +8 -8
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/panes-runtime.ts +145 -43
- package/src/interactive/permission-overlay.ts +2 -2
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/renderers/retry-status.ts +12 -4
- package/src/interactive/renderers/tool-execution.ts +4 -4
- package/src/interactive/session-transcript.ts +3 -3
- package/src/interactive/slash-autocomplete.ts +454 -165
- package/src/interactive/slash-commands.ts +401 -190
- package/src/interactive/slash-spec.ts +160 -17
- package/src/interactive/status/controller.ts +2 -2
- package/src/interactive/stream-pacing-policy.ts +1 -24
- package/src/interactive/tasks-overlay.ts +20 -13
- package/src/interactive/terminal-lease.ts +6 -7
- package/src/interactive/turn-context.ts +41 -26
- package/src/interactive/turn-persistence.ts +2 -2
- package/src/interactive/turn-prewarm.ts +2 -2
- package/src/interactive/turn-runtime.ts +8 -8
- package/src/interactive/turn-state.ts +1 -1
- package/src/interactive/view/artifacts.ts +12 -9
- package/src/interactive/view/view-overlay.ts +13 -10
- package/src/interactive/watch-pane.ts +38 -10
- package/src/interactive/welcome-dashboard.ts +15 -15
- package/src/interactive/worker-progress.ts +4 -4
- package/src/interactive/worker-receipts.ts +1 -1
- package/src/interactive/worker-stream.ts +1 -4
- package/src/interactive/yazi-bridge.ts +72 -11
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +6 -6
- package/src/tools/bash.ts +2 -2
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +52 -22
- package/src/tools/codewiki/code-nav-surface.ts +6 -0
- package/src/tools/codewiki/code-nav.ts +99 -13
- package/src/tools/compete-worktrees.ts +27 -17
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +44 -13
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-admission.ts +4 -2
- package/src/tools/dispatch-arguments.ts +6 -2
- package/src/tools/dispatch-plan.ts +48 -15
- package/src/tools/dispatch-run-events.ts +13 -11
- package/src/tools/dispatch-runner.ts +11 -6
- package/src/tools/dispatch-schema.ts +338 -0
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +9 -254
- package/src/tools/find.ts +1 -6
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/monitor.ts +4 -4
- package/src/tools/observation.ts +4 -5
- package/src/tools/observers.ts +0 -33
- package/src/tools/panes-surface.ts +4 -11
- package/src/tools/panes.ts +4 -2
- package/src/tools/policy.ts +15 -2
- package/src/tools/read.ts +5 -6
- package/src/tools/registry.ts +30 -7
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/task-worktree.ts +28 -7
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/authoring.ts +3 -6
- package/src/tools/verify/frontend.ts +1 -1
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- 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-36EJLSQQ.js +0 -814
- package/dist/chunk-GXNLGKAB.js +0 -571
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUCTJL45.js +0 -45
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-TZ3SGWZZ.js +0 -48
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-VFA6GDY5.js +0 -1625
- package/dist/doctor-QOA5FNY5.js +0 -313
- package/dist/fleet-view-ZCON35AG.js +0 -102
- package/dist/panes-HMABYVO4.js +0 -58
- package/docs/artifact-versions.md +0 -67
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/release-cut-checklist.md +0 -193
- package/docs/time-conventions.md +0 -101
- package/skills/meta/clio-test/SKILL.md +0 -133
- package/skills/meta/clio-test/references/harness.md +0 -126
- package/skills/meta/clio-test/references/test-map.md +0 -69
- package/src/engine/apis/degraded-inference.ts +0 -95
|
@@ -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";
|
|
@@ -85,10 +85,10 @@ import {
|
|
|
85
85
|
} from "../domains/middleware/dispatch-nudge.js";
|
|
86
86
|
import {
|
|
87
87
|
createHookReceiptLog,
|
|
88
|
+
createMarketplaceOfferRegistration,
|
|
88
89
|
createMiddlewareToolChoiceControl,
|
|
89
90
|
createSkillsReminderRegistration,
|
|
90
|
-
|
|
91
|
-
installUserHooks,
|
|
91
|
+
formatRegistrationConflict,
|
|
92
92
|
type MiddlewareContract,
|
|
93
93
|
MiddlewareDomainModule,
|
|
94
94
|
writeMiddlewareDiagnosticToStderr,
|
|
@@ -128,6 +128,7 @@ import { registerBuiltinRuntimes } from "../domains/providers/runtimes/builtins.
|
|
|
128
128
|
import {
|
|
129
129
|
createResourcesDomainModule,
|
|
130
130
|
discoverMarketplaceSkills,
|
|
131
|
+
installSkill,
|
|
131
132
|
modelVisibleSkills,
|
|
132
133
|
type ResourcesContract,
|
|
133
134
|
} from "../domains/resources/index.js";
|
|
@@ -179,6 +180,7 @@ import { createChatLoop } from "../interactive/chat-loop.js";
|
|
|
179
180
|
import { type RunIo, startInteractive } from "../interactive/index.js";
|
|
180
181
|
import { buildModelReplayAgentMessagesFromTurns } from "../interactive/model-session-replay.js";
|
|
181
182
|
import type { BootOptions } from "./boot-options.js";
|
|
183
|
+
import { createExtensionReloadCoordinator } from "./extension-reload.js";
|
|
182
184
|
import { resolvePanesEnablement } from "./panes-activation.js";
|
|
183
185
|
|
|
184
186
|
export type { BootOptions, HeadlessSamplingOverrides } from "./boot-options.js";
|
|
@@ -198,6 +200,7 @@ import { type AskUserHandler, cancelledAskUserResult } from "../tools/ask-user.j
|
|
|
198
200
|
import { registerAllTools } from "../tools/bootstrap.js";
|
|
199
201
|
import { isGitRepository, recoverCleanupReadyCompeteGroups } from "../tools/compete-worktrees.js";
|
|
200
202
|
import { createDispatchBackgroundRegistry } from "../tools/dispatch-background.js";
|
|
203
|
+
import { dispatchSchemaCompositionFor } from "../tools/dispatch-schema.js";
|
|
201
204
|
import { createFileMutationObserver, createSkillActivationObserver } from "../tools/observers.js";
|
|
202
205
|
import { createRegistry } from "../tools/registry.js";
|
|
203
206
|
import { sweepExpiredToolOffloads } from "../tools/result-shaping.js";
|
|
@@ -229,11 +232,11 @@ function bannerConfigurationLine(): string {
|
|
|
229
232
|
}
|
|
230
233
|
// A dangling chat target normalizes to null in the schema, so a deleted
|
|
231
234
|
// target arrives here as no target at all rather than as a name to report.
|
|
232
|
-
const targetId = settings.
|
|
235
|
+
const targetId = settings.chat?.target;
|
|
233
236
|
if (!targetId) {
|
|
234
237
|
return chalk.yellow("no model target configured. Run `clio-coder configure` to add one.");
|
|
235
238
|
}
|
|
236
|
-
const model = settings.
|
|
239
|
+
const model = settings.chat?.model;
|
|
237
240
|
return chalk.dim(`target ${targetId}${model ? ` · model ${model}` : " · no default model"}`);
|
|
238
241
|
}
|
|
239
242
|
|
|
@@ -256,7 +259,7 @@ function printJsonSessionHeader(meta: SessionMeta | null): Record<string, unknow
|
|
|
256
259
|
cwd: meta.cwd,
|
|
257
260
|
target: meta.target,
|
|
258
261
|
model: meta.model,
|
|
259
|
-
|
|
262
|
+
clioCoderVersion: meta.clioCoderVersion,
|
|
260
263
|
};
|
|
261
264
|
}
|
|
262
265
|
|
|
@@ -266,17 +269,17 @@ function applyHeadlessSettingsOverlay(
|
|
|
266
269
|
): ClioSettings {
|
|
267
270
|
const next = structuredClone(settings);
|
|
268
271
|
if (!overrides) return next;
|
|
269
|
-
const previousTarget = next.
|
|
272
|
+
const previousTarget = next.chat.target;
|
|
270
273
|
if (overrides.target !== undefined) {
|
|
271
|
-
next.
|
|
272
|
-
if (overrides.model === undefined && (previousTarget !== overrides.target || !next.
|
|
274
|
+
next.chat.target = overrides.target;
|
|
275
|
+
if (overrides.model === undefined && (previousTarget !== overrides.target || !next.chat.model)) {
|
|
273
276
|
const target = next.targets.find((entry) => entry.id === overrides.target);
|
|
274
|
-
if (target) next.
|
|
277
|
+
if (target) next.chat.model = target.defaultModel ?? null;
|
|
275
278
|
}
|
|
276
279
|
}
|
|
277
|
-
if (overrides.model !== undefined) next.
|
|
278
|
-
if (overrides.thinking !== undefined) next.
|
|
279
|
-
if (overrides.autonomy !== undefined) next.autonomy = overrides.autonomy;
|
|
280
|
+
if (overrides.model !== undefined) next.chat.model = overrides.model;
|
|
281
|
+
if (overrides.thinking !== undefined) next.chat.thinkingLevel = overrides.thinking;
|
|
282
|
+
if (overrides.autonomy !== undefined) next.safety.autonomy = overrides.autonomy;
|
|
280
283
|
return next;
|
|
281
284
|
}
|
|
282
285
|
|
|
@@ -307,9 +310,9 @@ function advanceThinkingLevel(current: ThinkingLevel, available: ReadonlyArray<T
|
|
|
307
310
|
* model all send this placeholder so a local llama.cpp or LM Studio endpoint
|
|
308
311
|
* works without the user inventing a credential.
|
|
309
312
|
*/
|
|
310
|
-
const LOCAL_API_KEY_FALLBACK = "clio-local-target";
|
|
313
|
+
const LOCAL_API_KEY_FALLBACK = "clio-coder-local-target";
|
|
311
314
|
|
|
312
|
-
|
|
315
|
+
async function resolveApiKeyForTarget(
|
|
313
316
|
target: TargetDescriptor,
|
|
314
317
|
providers: ProvidersContract,
|
|
315
318
|
signal?: AbortSignal,
|
|
@@ -347,8 +350,8 @@ function createBackgroundMemoryModelClient(
|
|
|
347
350
|
timeoutMs: number,
|
|
348
351
|
bus: Pick<SafeEventBus, "emit"> | null,
|
|
349
352
|
): BackgroundMemoryRoute | null {
|
|
350
|
-
const targetId = settings.
|
|
351
|
-
const wireModelId = settings.
|
|
353
|
+
const targetId = settings.context.memory.target?.trim();
|
|
354
|
+
const wireModelId = settings.context.memory.model?.trim();
|
|
352
355
|
if (!targetId || !wireModelId) return null;
|
|
353
356
|
// One model cannot both drive the action agent and think its way through a
|
|
354
357
|
// memory step: the memory call would contend with the agent's own decoding on
|
|
@@ -445,8 +448,8 @@ function createBackgroundMemoryModelClient(
|
|
|
445
448
|
*/
|
|
446
449
|
function agentRoleToolWarnings(providers: ProvidersContract, settings: Readonly<ClioSettings>): string[] {
|
|
447
450
|
const roles: ReadonlyArray<{ label: string; target: string | null; model: string | null }> = [
|
|
448
|
-
{ label: "orchestrator", target: settings.
|
|
449
|
-
{ label: "workers.default", target: settings.
|
|
451
|
+
{ label: "orchestrator", target: settings.chat.target, model: settings.chat.model },
|
|
452
|
+
{ label: "workers.default", target: settings.fleet.default.target, model: settings.fleet.default.model },
|
|
450
453
|
];
|
|
451
454
|
const warnings: string[] = [];
|
|
452
455
|
for (const role of roles) {
|
|
@@ -478,12 +481,12 @@ function backgroundSharesReasoningModelWithOrchestrator(
|
|
|
478
481
|
providers: ProvidersContract,
|
|
479
482
|
settings: Readonly<ClioSettings>,
|
|
480
483
|
): boolean {
|
|
481
|
-
const backgroundModel = settings.
|
|
482
|
-
const orchestratorModel = settings.
|
|
484
|
+
const backgroundModel = settings.context.memory.model?.trim();
|
|
485
|
+
const orchestratorModel = settings.chat.model?.trim();
|
|
483
486
|
if (!backgroundModel || backgroundModel !== orchestratorModel) return false;
|
|
484
|
-
if (settings.
|
|
487
|
+
if (settings.context.memory.target?.trim() !== settings.chat.target?.trim()) return false;
|
|
485
488
|
try {
|
|
486
|
-
const status = providers.list().find((entry) => entry.target.id === settings.
|
|
489
|
+
const status = providers.list().find((entry) => entry.target.id === settings.context.memory.target?.trim());
|
|
487
490
|
if (!status) return false;
|
|
488
491
|
return resolveModelCapabilities(status, backgroundModel, providers.knowledgeBase).reasoning === true;
|
|
489
492
|
} catch {
|
|
@@ -493,7 +496,7 @@ function backgroundSharesReasoningModelWithOrchestrator(
|
|
|
493
496
|
}
|
|
494
497
|
}
|
|
495
498
|
|
|
496
|
-
|
|
499
|
+
function synthesizeOrchestratorModel(
|
|
497
500
|
providers: ProvidersContract,
|
|
498
501
|
target: TargetDescriptor,
|
|
499
502
|
wireModelId: string,
|
|
@@ -526,8 +529,8 @@ async function resolveCompactionModel(
|
|
|
526
529
|
settings: ClioSettings,
|
|
527
530
|
providers: ProvidersContract,
|
|
528
531
|
): Promise<CompactionResolution | null> {
|
|
529
|
-
const targetId = settings.
|
|
530
|
-
const wireModelId = settings.
|
|
532
|
+
const targetId = settings.chat?.target ?? null;
|
|
533
|
+
const wireModelId = settings.chat?.model ?? null;
|
|
531
534
|
if (!targetId || !wireModelId) return null;
|
|
532
535
|
const target = resolveTarget(providers, targetId);
|
|
533
536
|
if (!target) return null;
|
|
@@ -607,7 +610,7 @@ function appendProtectedArtifactRegistryEvent(
|
|
|
607
610
|
* subprocess, which makes this the only recording path there is. Returns how
|
|
608
611
|
* many were folded.
|
|
609
612
|
*/
|
|
610
|
-
|
|
613
|
+
function foldDispatchSkillActivations(
|
|
611
614
|
session: SessionContract | undefined,
|
|
612
615
|
payload: { runId?: unknown; skillActivations?: ReadonlyArray<unknown> } | undefined,
|
|
613
616
|
): number {
|
|
@@ -648,7 +651,7 @@ async function runCompactionFlow(
|
|
|
648
651
|
}
|
|
649
652
|
const resolved = await resolveCompactionModel(settings, providers);
|
|
650
653
|
if (!resolved) {
|
|
651
|
-
throw new Error("no model configured; set
|
|
654
|
+
throw new Error("no model configured; set chat.target + chat.model");
|
|
652
655
|
}
|
|
653
656
|
// Summarize only the active branch: after a /tree switch the raw file
|
|
654
657
|
// still holds abandoned sibling turns, and a summary that folds them in
|
|
@@ -704,7 +707,7 @@ async function runCompactionFlow(
|
|
|
704
707
|
* a thrown read/model/persistence failure from the legitimate null no-op that
|
|
705
708
|
* `runCompactionFlow` returns for an empty session or an unavailable cut.
|
|
706
709
|
*/
|
|
707
|
-
|
|
710
|
+
function createProductionAutoCompact(
|
|
708
711
|
session: SessionContract,
|
|
709
712
|
getSettings: () => ClioSettings,
|
|
710
713
|
providers: ProvidersContract,
|
|
@@ -751,11 +754,11 @@ function estimateTokensAfterCompaction(entries: ReadonlyArray<SessionEntry>, res
|
|
|
751
754
|
* ids or target/model refs. Absent scope is a no-op so unconfigured users
|
|
752
755
|
* feel nothing.
|
|
753
756
|
*/
|
|
754
|
-
|
|
757
|
+
function advanceScopedTarget(
|
|
755
758
|
settings: Readonly<ClioSettings>,
|
|
756
759
|
direction: "forward" | "backward",
|
|
757
760
|
): { target: string; model: string | null } | null {
|
|
758
|
-
const scope = settings.
|
|
761
|
+
const scope = settings.chat.modelPicker.cycleSet ?? [];
|
|
759
762
|
if (scope.length === 0) return null;
|
|
760
763
|
const registry = getRuntimeRegistry();
|
|
761
764
|
if (registry.list().length === 0) registerBuiltinRuntimes(registry);
|
|
@@ -767,8 +770,8 @@ export function advanceScopedTarget(
|
|
|
767
770
|
return runtime !== null && isOrchestratorEligibleRuntime(runtime);
|
|
768
771
|
});
|
|
769
772
|
if (filteredScope.length === 0) return null;
|
|
770
|
-
const activeTarget = settings.
|
|
771
|
-
const activeModel = settings.
|
|
773
|
+
const activeTarget = settings.chat.target ?? "";
|
|
774
|
+
const activeModel = settings.chat.model ?? "";
|
|
772
775
|
const activeCombinedRef = activeTarget.length > 0 && activeModel.length > 0 ? `${activeTarget}/${activeModel}` : "";
|
|
773
776
|
const idx = filteredScope.findIndex((entry) => entry === activeCombinedRef || entry === activeTarget);
|
|
774
777
|
const base = idx === -1 ? 0 : idx + (direction === "forward" ? 1 : filteredScope.length - 1);
|
|
@@ -866,7 +869,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
866
869
|
// is why `panes.enabled` is a restart-scoped row: the decision runs once,
|
|
867
870
|
// here. An inactive rung loads nothing: the whole extension, mux domain
|
|
868
871
|
// included, lives behind the dynamic import below.
|
|
869
|
-
const muxEnablement = resolvePanesEnablement(options.panes, options.startupSettings?.panes.enabled);
|
|
872
|
+
const muxEnablement = resolvePanesEnablement(options.panes, options.startupSettings?.interface.panes.enabled);
|
|
870
873
|
const withPanes = muxInteractive && muxEnablement !== "off" ? await import("./with-panes.js") : null;
|
|
871
874
|
|
|
872
875
|
const result = await loadDomains(
|
|
@@ -956,7 +959,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
956
959
|
bootStderr("Clio Coder: --api-key supplied but providers domain unavailable; ignoring.\n");
|
|
957
960
|
} else {
|
|
958
961
|
const settingsNow = applyHeadlessSettingsOverlay(config?.get() ?? readSettings(), options.headless);
|
|
959
|
-
const activeTargetId = settingsNow.
|
|
962
|
+
const activeTargetId = settingsNow.chat?.target;
|
|
960
963
|
const target = resolveTarget(providers, activeTargetId);
|
|
961
964
|
const runtime = target ? providers.getRuntime(target.runtime) : null;
|
|
962
965
|
if (target && runtime) {
|
|
@@ -1024,7 +1027,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1024
1027
|
else resolvedResumeId = latest.id;
|
|
1025
1028
|
}
|
|
1026
1029
|
}
|
|
1027
|
-
const resumeId = resolvedResumeId
|
|
1030
|
+
const resumeId = resolvedResumeId;
|
|
1028
1031
|
let resumedSessionAtBoot = false;
|
|
1029
1032
|
if (resumeId && session && headlessResumeFailure === null) {
|
|
1030
1033
|
try {
|
|
@@ -1036,7 +1039,6 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1036
1039
|
else bootStderr(`Clio Coder: failed to resume session ${resumeId}: ${detail}\n`);
|
|
1037
1040
|
}
|
|
1038
1041
|
}
|
|
1039
|
-
Reflect.deleteProperty(process.env, "CLIO_CODER_RESUME_SESSION_ID");
|
|
1040
1042
|
if (headlessResumeFailure !== null) {
|
|
1041
1043
|
bootStderr(`clio-coder run: ${headlessResumeFailure}\n`);
|
|
1042
1044
|
await termination.shutdown(2);
|
|
@@ -1048,6 +1050,20 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1048
1050
|
// middleware.hookFailed (the interactive warn notice consumes it) and keep
|
|
1049
1051
|
// stderr for non-interactive runs, which have no notice subscriber.
|
|
1050
1052
|
middleware.setDiagnosticSink((diagnostic) => {
|
|
1053
|
+
if (diagnostic.kind === "registration_conflict") {
|
|
1054
|
+
// Registration bookkeeping has no hook occurrence; the affected owner
|
|
1055
|
+
// today declares user hooks, which never run on on_compaction, so the
|
|
1056
|
+
// payload's hook slot carries that as the "no evaluation" marker.
|
|
1057
|
+
bus.emit(BusChannels.MiddlewareHookFailed, {
|
|
1058
|
+
kind: "registration_conflict",
|
|
1059
|
+
registrationId: diagnostic.registrationId,
|
|
1060
|
+
hook: "on_compaction",
|
|
1061
|
+
at: Date.now(),
|
|
1062
|
+
message: formatRegistrationConflict(diagnostic),
|
|
1063
|
+
});
|
|
1064
|
+
if (!interactive) writeMiddlewareDiagnosticToStderr(diagnostic);
|
|
1065
|
+
return;
|
|
1066
|
+
}
|
|
1051
1067
|
bus.emit(BusChannels.MiddlewareHookFailed, {
|
|
1052
1068
|
kind: diagnostic.kind,
|
|
1053
1069
|
registrationId: diagnostic.registrationId,
|
|
@@ -1076,20 +1092,19 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1076
1092
|
bus.on(BusChannels.RuntimeNotice, (payload: unknown) => {
|
|
1077
1093
|
const notice = payload as { level?: string; message?: string } | undefined;
|
|
1078
1094
|
if (typeof notice?.message !== "string") return;
|
|
1079
|
-
process.stderr.write(`[clio:runtime] ${notice.level ?? "info"}: ${notice.message}\n`);
|
|
1095
|
+
process.stderr.write(`[clio-coder:runtime] ${notice.level ?? "info"}: ${notice.message}\n`);
|
|
1080
1096
|
});
|
|
1081
1097
|
}
|
|
1082
1098
|
|
|
1083
|
-
//
|
|
1084
|
-
//
|
|
1085
|
-
// settings section before any guard registration or tool reads it.
|
|
1099
|
+
// Install guardrail policy before any guard registration or tool reads it.
|
|
1100
|
+
// The effective session view replaces this boot projection below.
|
|
1086
1101
|
const resolvedSettings = config?.get() ?? readSettings();
|
|
1087
|
-
configureGuardrails(resolvedSettings
|
|
1102
|
+
configureGuardrails(guardrailValuesFromSettings(resolvedSettings));
|
|
1088
1103
|
|
|
1089
|
-
// The
|
|
1090
|
-
//
|
|
1091
|
-
//
|
|
1092
|
-
configureRunEventJournal(resolvedSettings.
|
|
1104
|
+
// The journal sink sits on the dispatch event path, where reading settings
|
|
1105
|
+
// would be both a cost and a throw site. The effective session view replaces
|
|
1106
|
+
// this boot projection below.
|
|
1107
|
+
configureRunEventJournal(resolvedSettings.fleet.history.journal);
|
|
1093
1108
|
|
|
1094
1109
|
// Guard registrations on the middleware contract, in order: loop guard,
|
|
1095
1110
|
// protected artifacts (last among guards so it absorbs protect_path effects
|
|
@@ -1102,7 +1117,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1102
1117
|
safety,
|
|
1103
1118
|
bus,
|
|
1104
1119
|
turnBlockBudget: INTERACTIVE_LOOP_BLOCK_BUDGET,
|
|
1105
|
-
turnToolCallBudget: readOrchTurnToolCallBudget(),
|
|
1120
|
+
turnToolCallBudget: () => readOrchTurnToolCallBudget(),
|
|
1106
1121
|
// Interactive/headless/ACP all share this orchestrator guard: at the
|
|
1107
1122
|
// block budget, lock tools for the rest of the turn so the model
|
|
1108
1123
|
// answers from what it gathered instead of hard-cancelling a turn that
|
|
@@ -1183,7 +1198,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1183
1198
|
taskMemoryBank.clear();
|
|
1184
1199
|
taskMemorySessionId = currentSessionId;
|
|
1185
1200
|
};
|
|
1186
|
-
const memorySettings = (config?.get() ?? readSettings()).memory
|
|
1201
|
+
const memorySettings = (config?.get() ?? readSettings()).context.memory;
|
|
1187
1202
|
// Bound late: the registration is built here, but the buffer a deferred
|
|
1188
1203
|
// reminder lands in belongs to the chat loop that has not been composed yet.
|
|
1189
1204
|
let deferredMemoryReminderSink: ((message: string) => void) | null = null;
|
|
@@ -1233,12 +1248,12 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1233
1248
|
})
|
|
1234
1249
|
.then((result) => {
|
|
1235
1250
|
for (const error of result.errors) {
|
|
1236
|
-
process.stderr.write(`[clio:memory] proposed record not written for ${error}\n`);
|
|
1251
|
+
process.stderr.write(`[clio-coder:memory] proposed record not written for ${error}\n`);
|
|
1237
1252
|
}
|
|
1238
1253
|
})
|
|
1239
1254
|
.catch((error: unknown) => {
|
|
1240
1255
|
process.stderr.write(
|
|
1241
|
-
`[clio:memory] proposed records not written: ${error instanceof Error ? error.message : String(error)}\n`,
|
|
1256
|
+
`[clio-coder:memory] proposed records not written: ${error instanceof Error ? error.message : String(error)}\n`,
|
|
1242
1257
|
);
|
|
1243
1258
|
});
|
|
1244
1259
|
};
|
|
@@ -1252,14 +1267,21 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1252
1267
|
onDeferredReminder: (message) => deferredMemoryReminderSink?.(message),
|
|
1253
1268
|
getSettings: () => {
|
|
1254
1269
|
ensureTaskMemorySession();
|
|
1255
|
-
|
|
1270
|
+
const memory = effectiveSettingsForDispatch?.().context.memory ?? memorySettings;
|
|
1271
|
+
return {
|
|
1272
|
+
enabled: memory.enabled,
|
|
1273
|
+
everyNTools: memory.cadenceToolCalls,
|
|
1274
|
+
windowSteps: memory.trajectorySteps,
|
|
1275
|
+
maxTokens: memory.maxOutputTokens,
|
|
1276
|
+
timeoutMs: memory.timeoutMs,
|
|
1277
|
+
};
|
|
1256
1278
|
},
|
|
1257
1279
|
getModelClient: () => {
|
|
1258
1280
|
const settings = effectiveSettingsForDispatch?.();
|
|
1259
1281
|
backgroundMemoryRoute =
|
|
1260
1282
|
settings === undefined
|
|
1261
1283
|
? null
|
|
1262
|
-
: createBackgroundMemoryModelClient(providers, settings, settings.memory.
|
|
1284
|
+
: createBackgroundMemoryModelClient(providers, settings, settings.context.memory.timeoutMs, bus);
|
|
1263
1285
|
return backgroundMemoryRoute?.client ?? null;
|
|
1264
1286
|
},
|
|
1265
1287
|
getModelMaxTokens: (configuredMaxTokens) =>
|
|
@@ -1290,24 +1312,26 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1290
1312
|
// same effect machinery. They register after the guards, so safety stays
|
|
1291
1313
|
// authoritative: a hook may add effects (including request block_tool) but
|
|
1292
1314
|
// cannot grant a permission safety would deny. Loading is best-effort.
|
|
1315
|
+
// The coordinator is the only writer of the "user-hooks" owner and the only
|
|
1316
|
+
// caller of the extensions reload; it publishes the extension generation
|
|
1317
|
+
// and the hook registrations with two adjacent assignments on one stack
|
|
1318
|
+
// and emits extensions.reloaded only after both. The boot generation is
|
|
1319
|
+
// published here too (the extensions bundle publishes nothing at start),
|
|
1320
|
+
// so no consumer ever sees extension resources paired with hooks from a
|
|
1321
|
+
// different generation. The owner slot is anchored here, so user hooks
|
|
1322
|
+
// keep evaluating after the guards and before the assessors below.
|
|
1293
1323
|
const hookReceiptLog = createHookReceiptLog({ persistPath: join(clioStateDir(), "hook-receipts.json") });
|
|
1294
|
-
const
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
cwd: process.cwd(),
|
|
1299
|
-
extensions: extensionHookRoots,
|
|
1300
|
-
registerHook: (registration) => middleware.registerHook(registration),
|
|
1324
|
+
const extensionReload = createExtensionReloadCoordinator({
|
|
1325
|
+
extensions,
|
|
1326
|
+
middleware,
|
|
1327
|
+
cwd: () => process.cwd(),
|
|
1301
1328
|
recordReceipt: (receipt) => hookReceiptLog.record(receipt),
|
|
1329
|
+
report: (line) => {
|
|
1330
|
+
if (!interactive) process.stderr.write(`${line}\n`);
|
|
1331
|
+
},
|
|
1332
|
+
onCommitted: (event) => bus.emit(BusChannels.ExtensionsReloaded, event),
|
|
1302
1333
|
});
|
|
1303
|
-
|
|
1304
|
-
for (const issue of userHooks.fileIssues) {
|
|
1305
|
-
process.stderr.write(`[clio:hooks] ${issue.message}\n`);
|
|
1306
|
-
}
|
|
1307
|
-
for (const issue of userHooks.issues) {
|
|
1308
|
-
process.stderr.write(`[clio:hooks] ${issue.source.sourcePath}#${issue.index}: ${issue.issues.join("; ")}\n`);
|
|
1309
|
-
}
|
|
1310
|
-
}
|
|
1334
|
+
extensionReload.applyBoot();
|
|
1311
1335
|
termination.onDrain(() => hookReceiptLog.flush());
|
|
1312
1336
|
// Autonomy is hot-reloaded for interactive and headless admissions. ACP
|
|
1313
1337
|
// server prompts use the snapshot captured at session/new.
|
|
@@ -1317,11 +1341,29 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1317
1341
|
// through these two functions so a fallback added to one surface cannot
|
|
1318
1342
|
// silently skip another.
|
|
1319
1343
|
const resolveBaselineAutonomy = (): AutonomyLevel =>
|
|
1320
|
-
effectiveSettingsForDispatch?.().autonomy ??
|
|
1344
|
+
effectiveSettingsForDispatch?.().safety.autonomy ??
|
|
1321
1345
|
options.headless?.autonomy ??
|
|
1322
|
-
(config?.get() ?? readSettings()).autonomy ??
|
|
1346
|
+
(config?.get() ?? readSettings()).safety.autonomy ??
|
|
1323
1347
|
"auto-edit";
|
|
1324
1348
|
const resolveEffectiveAutonomy = (): AutonomyLevel => activeAcpSessionAutonomy ?? resolveBaselineAutonomy();
|
|
1349
|
+
// Marketplace self-promotion: coordinator-only by this wiring (never a
|
|
1350
|
+
// dispatch worker), local matcher, consented installs and full-auto
|
|
1351
|
+
// autonomous installs both pass the own-marketplace source gate inside the
|
|
1352
|
+
// registration. Registered here because it needs the effective-autonomy
|
|
1353
|
+
// resolution defined one line up.
|
|
1354
|
+
if (resources) {
|
|
1355
|
+
middleware.registerHook(
|
|
1356
|
+
createMarketplaceOfferRegistration({
|
|
1357
|
+
listInstalledSkillNames: () => resources.skills(process.cwd()).items.map((skill) => skill.name),
|
|
1358
|
+
listMarketplaceEntries: () => discoverMarketplaceSkills({ cwd: process.cwd() }).skills,
|
|
1359
|
+
getAutonomy: resolveEffectiveAutonomy,
|
|
1360
|
+
installEntry: (entry, scope) => {
|
|
1361
|
+
const installed = installSkill({ source: entry.sourceUrl, scope, name: entry.name, cwd: process.cwd() });
|
|
1362
|
+
return { path: installed.path, sourceUrl: installed.sourceUrl, installedHash: installed.installedHash };
|
|
1363
|
+
},
|
|
1364
|
+
}),
|
|
1365
|
+
);
|
|
1366
|
+
}
|
|
1325
1367
|
const middlewareToolChoice = createMiddlewareToolChoiceControl();
|
|
1326
1368
|
const toolRegistry = createRegistry({
|
|
1327
1369
|
safety,
|
|
@@ -1466,9 +1508,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1466
1508
|
// always refusing.
|
|
1467
1509
|
...(panes && mux?.mode !== "none" ? { panes } : {}),
|
|
1468
1510
|
getCostCeilingUsd: () => result.getContract<SchedulingContract>("scheduling")?.ceilingUsd() ?? 0,
|
|
1469
|
-
...(config ? { getWorkerRosters: () => config.get().
|
|
1511
|
+
...(config ? { getWorkerRosters: () => config.get().fleet.rosters } : {}),
|
|
1512
|
+
...(config ? { getDispatchSchemaComposition: () => dispatchSchemaCompositionFor(config.get().fleet) } : {}),
|
|
1470
1513
|
getSkillLoaderOptions: () => ({
|
|
1471
|
-
trustProjectCompatRoots: config?.get().
|
|
1514
|
+
trustProjectCompatRoots: config?.get().integrations.projectResources.trustProjectImports === true,
|
|
1472
1515
|
disableDiscovery: options.noSkills === true || options.headless?.noSkills === true,
|
|
1473
1516
|
...(options.skillPaths && options.skillPaths.length > 0
|
|
1474
1517
|
? { explicitSkillPaths: options.skillPaths }
|
|
@@ -1491,8 +1534,13 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1491
1534
|
// view, so the live session reflects them immediately while settings.yaml
|
|
1492
1535
|
// (the global default for new sessions) stays untouched until the operator
|
|
1493
1536
|
// chooses to save globally.
|
|
1537
|
+
// Overrides are keyed by settings path, the same ids the /settings overlay
|
|
1538
|
+
// commits (`setAtPath` walks the dotted path). The headless `--autonomy`
|
|
1539
|
+
// flag was keyed by the bare word, which wrote a top-level `autonomy` key
|
|
1540
|
+
// nothing reads, so `run --autonomy full-auto` compiled and admitted at
|
|
1541
|
+
// whatever settings.yaml said.
|
|
1494
1542
|
const sessionOverrides: SessionOverrides = new Map(
|
|
1495
|
-
options.headless?.autonomy === undefined ? [] : [["autonomy", options.headless.autonomy]],
|
|
1543
|
+
options.headless?.autonomy === undefined ? [] : [["safety.autonomy", options.headless.autonomy]],
|
|
1496
1544
|
);
|
|
1497
1545
|
// The effective view is derived by deep-cloning the saved snapshot, and it
|
|
1498
1546
|
// is read on the tool-admission hot path (every call resolves autonomy
|
|
@@ -1507,9 +1555,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1507
1555
|
let cachedSettingsView: ClioSettings | null = null;
|
|
1508
1556
|
const bumpSessionState = (): void => {
|
|
1509
1557
|
sessionStateGeneration += 1;
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1558
|
+
const settings = getCurrentSettings();
|
|
1559
|
+
configureGuardrails(guardrailValuesFromSettings(settings));
|
|
1560
|
+
configureRunEventJournal(settings.fleet.history.journal);
|
|
1561
|
+
setGitCommitAttributionEnabled(settings.integrations.git.commitAttribution);
|
|
1513
1562
|
};
|
|
1514
1563
|
const getCurrentSettings = (): ClioSettings => {
|
|
1515
1564
|
// Recents live in the data dir (core/recent-models.ts), never in
|
|
@@ -1535,20 +1584,17 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1535
1584
|
};
|
|
1536
1585
|
effectiveSettingsForDispatch = getCurrentSettings;
|
|
1537
1586
|
bumpSessionState();
|
|
1538
|
-
// The config bundle publishes
|
|
1539
|
-
//
|
|
1540
|
-
|
|
1541
|
-
|
|
1587
|
+
// The config bundle publishes saved values on reload; session-scoped
|
|
1588
|
+
// overrides must win, so re-derive every process-local projection from the
|
|
1589
|
+
// effective session view after it.
|
|
1590
|
+
const unsubscribeSettingsProjectionSync = bus.on(BusChannels.ConfigHotReload, () => bumpSessionState());
|
|
1591
|
+
termination.onDrain(() => unsubscribeSettingsProjectionSync());
|
|
1542
1592
|
const getTaskMemorySeedOffer = (): { source: string; count: number } | null => {
|
|
1543
|
-
return taskMemoryHandoffSeedOffer(process.cwd(), getCurrentSettings().memory.
|
|
1593
|
+
return taskMemoryHandoffSeedOffer(process.cwd(), getCurrentSettings().context.memory.enabled);
|
|
1544
1594
|
};
|
|
1545
1595
|
const seedCurrentTaskMemoryFromHandoff = () => {
|
|
1546
1596
|
ensureTaskMemorySession();
|
|
1547
|
-
return seedTaskMemoryFromNewestHandoff(
|
|
1548
|
-
taskMemoryBank,
|
|
1549
|
-
process.cwd(),
|
|
1550
|
-
getCurrentSettings().memory.intervention.enabled,
|
|
1551
|
-
);
|
|
1597
|
+
return seedTaskMemoryFromNewestHandoff(taskMemoryBank, process.cwd(), getCurrentSettings().context.memory.enabled);
|
|
1552
1598
|
};
|
|
1553
1599
|
if (resumedSessionAtBoot) {
|
|
1554
1600
|
const offer = getTaskMemorySeedOffer();
|
|
@@ -1568,7 +1614,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1568
1614
|
// routing change updates the set on the next read.
|
|
1569
1615
|
setProtectedModelsProvider(() => protectedResidencyModels(getCurrentSettings()));
|
|
1570
1616
|
|
|
1571
|
-
const validatedKeybindings = validateKeybindings((config?.get() ?? readSettings()).keybindings ?? {});
|
|
1617
|
+
const validatedKeybindings = validateKeybindings((config?.get() ?? readSettings()).interface.keybindings ?? {});
|
|
1572
1618
|
const invalidBindings = validatedKeybindings.invalid;
|
|
1573
1619
|
if (invalidBindings.length > 0) {
|
|
1574
1620
|
const notice = formatInvalidKeybindingNotice(invalidBindings);
|
|
@@ -1627,10 +1673,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1627
1673
|
const readAcpSafeSettings = (): AcpSafeSettingsSnapshot => {
|
|
1628
1674
|
const settings = getCurrentSettings();
|
|
1629
1675
|
return {
|
|
1630
|
-
target: settings.
|
|
1631
|
-
model: settings.
|
|
1632
|
-
thinkingLevel: settings.
|
|
1633
|
-
autonomy: settings.autonomy,
|
|
1676
|
+
target: settings.chat.target,
|
|
1677
|
+
model: settings.chat.model,
|
|
1678
|
+
thinkingLevel: settings.chat.thinkingLevel ?? "off",
|
|
1679
|
+
autonomy: settings.safety.autonomy,
|
|
1634
1680
|
};
|
|
1635
1681
|
};
|
|
1636
1682
|
/**
|
|
@@ -1640,15 +1686,15 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1640
1686
|
*/
|
|
1641
1687
|
const commitAcpSafeSettings = (patch: AcpSafeSettingsPatch): AcpSafeSettingsSnapshot => {
|
|
1642
1688
|
const orchestrator: NonNullable<RoutingPatch["orchestrator"]> = {};
|
|
1643
|
-
if (patch["
|
|
1644
|
-
if (patch["
|
|
1645
|
-
if (patch["
|
|
1646
|
-
orchestrator.thinkingLevel = patch["
|
|
1689
|
+
if (patch["chat.target"] !== undefined) orchestrator.target = patch["chat.target"];
|
|
1690
|
+
if (patch["chat.model"] !== undefined) orchestrator.model = patch["chat.model"];
|
|
1691
|
+
if (patch["chat.thinkingLevel"] !== undefined) {
|
|
1692
|
+
orchestrator.thinkingLevel = patch["chat.thinkingLevel"];
|
|
1647
1693
|
}
|
|
1648
1694
|
const routingPatch: RoutingPatch | null = Object.keys(orchestrator).length > 0 ? { orchestrator } : null;
|
|
1649
1695
|
persistSavedMutation((saved) => {
|
|
1650
1696
|
if (routingPatch !== null) mergeRoutingPatchIntoSettings(saved, routingPatch);
|
|
1651
|
-
if (patch.autonomy !== undefined) saved.autonomy = patch.autonomy;
|
|
1697
|
+
if (patch["safety.autonomy"] !== undefined) saved.safety.autonomy = patch["safety.autonomy"];
|
|
1652
1698
|
});
|
|
1653
1699
|
if (routingPatch !== null) {
|
|
1654
1700
|
applyRoutingPatch(sessionRouting, routingPatch);
|
|
@@ -1747,7 +1793,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1747
1793
|
middleware.registerHook(
|
|
1748
1794
|
createWatchdogRegistration({
|
|
1749
1795
|
firesOnThisSurface: interactive,
|
|
1750
|
-
getSettings: () => (effectiveSettingsForDispatch?.() ?? getCurrentSettings()).
|
|
1796
|
+
getSettings: () => (effectiveSettingsForDispatch?.() ?? getCurrentSettings()).safety.review,
|
|
1751
1797
|
getScope: () => {
|
|
1752
1798
|
const board = taskBoard.snapshot();
|
|
1753
1799
|
if (board === null) return null;
|
|
@@ -1759,7 +1805,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1759
1805
|
dispatch,
|
|
1760
1806
|
bus,
|
|
1761
1807
|
...(agents ? { getAgentRoleFacts: agentRoleFactsResolver((id: string) => agents.getSpec(id)) } : {}),
|
|
1762
|
-
target: (effectiveSettingsForDispatch?.() ?? getCurrentSettings()).
|
|
1808
|
+
target: (effectiveSettingsForDispatch?.() ?? getCurrentSettings()).safety.review.target,
|
|
1763
1809
|
...(deferredWatchdogNoticeSink ? { emitNotice: deferredWatchdogNoticeSink } : {}),
|
|
1764
1810
|
}),
|
|
1765
1811
|
}),
|
|
@@ -1805,7 +1851,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1805
1851
|
try {
|
|
1806
1852
|
const records = loadMemoryRecordsSync(clioDataDir());
|
|
1807
1853
|
const settings = getCurrentSettings();
|
|
1808
|
-
const targetId = session?.current()?.target ?? settings.
|
|
1854
|
+
const targetId = session?.current()?.target ?? settings.chat?.target;
|
|
1809
1855
|
const runtimeId = targetId ? providers.getTarget(targetId)?.runtime : undefined;
|
|
1810
1856
|
return buildMemoryPromptSection(records, {
|
|
1811
1857
|
scopes: ["global", "repo", "runtime"],
|
|
@@ -1821,7 +1867,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1821
1867
|
const meta = session?.current();
|
|
1822
1868
|
if (!meta) throw new Error("task memory handoff requires an active session");
|
|
1823
1869
|
const settings = getCurrentSettings();
|
|
1824
|
-
const targetId = meta.target ?? settings.
|
|
1870
|
+
const targetId = meta.target ?? settings.chat?.target;
|
|
1825
1871
|
const runtimeId = targetId ? providers.getTarget(targetId)?.runtime : undefined;
|
|
1826
1872
|
return renderTaskMemoryHandoffSource(taskMemoryBank.snapshot(), {
|
|
1827
1873
|
sessionId: meta.id,
|
|
@@ -1869,7 +1915,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1869
1915
|
await chat.whenSettled();
|
|
1870
1916
|
});
|
|
1871
1917
|
|
|
1872
|
-
// A boot-time resume (
|
|
1918
|
+
// A boot-time resume (headless --session or --continue) must replay the resumed
|
|
1873
1919
|
// session into the chat loop the same way the interactive /resume overlay
|
|
1874
1920
|
// does. Without this, the first submit runs with an empty provider context
|
|
1875
1921
|
// and parents its user turn at null, appending a second root that silently
|
|
@@ -1930,7 +1976,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1930
1976
|
try {
|
|
1931
1977
|
session.appendEntry({
|
|
1932
1978
|
kind: "custom",
|
|
1933
|
-
customType: "clio.routing-notice",
|
|
1979
|
+
customType: "clio-coder.routing-notice",
|
|
1934
1980
|
parentTurnId: null,
|
|
1935
1981
|
data: { kind: notice.kind, level: notice.level, text: notice.text },
|
|
1936
1982
|
});
|
|
@@ -1964,8 +2010,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1964
2010
|
routing: () => {
|
|
1965
2011
|
const settings = getCurrentSettings();
|
|
1966
2012
|
return {
|
|
1967
|
-
target: settings.
|
|
1968
|
-
model: settings.
|
|
2013
|
+
target: settings.chat.target,
|
|
2014
|
+
model: settings.chat.model,
|
|
1969
2015
|
};
|
|
1970
2016
|
},
|
|
1971
2017
|
onActiveSessionAutonomyChange: (level) => {
|
|
@@ -1977,11 +2023,11 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1977
2023
|
// as a provider's failure body, is kept off the wire and written to
|
|
1978
2024
|
// the unstructured stderr tail instead.
|
|
1979
2025
|
diagnostics: (line) => {
|
|
1980
|
-
process.stderr.write(`[clio:acp] ${line}\n`);
|
|
2026
|
+
process.stderr.write(`[clio-coder:acp] ${line}\n`);
|
|
1981
2027
|
},
|
|
1982
2028
|
permissionTimeoutMs:
|
|
1983
2029
|
options.acp.permissionTimeoutMs ??
|
|
1984
|
-
config?.get().
|
|
2030
|
+
config?.get().integrations.externalAgents.defaults.permissionTimeoutMs ??
|
|
1985
2031
|
DEFAULT_DELEGATION_PERMISSION_TIMEOUT_MS,
|
|
1986
2032
|
});
|
|
1987
2033
|
// Same ordering the termination drain hook relies on: an aborted turn's
|
|
@@ -2094,6 +2140,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2094
2140
|
...(initialNotices.length > 0 ? { initialNotices } : {}),
|
|
2095
2141
|
...(resources ? { resources } : {}),
|
|
2096
2142
|
...(extensions ? { extensions } : {}),
|
|
2143
|
+
reloadExtensions: () => extensionReload.reload(),
|
|
2097
2144
|
...(interop ? { interop } : {}),
|
|
2098
2145
|
...(share ? { share } : {}),
|
|
2099
2146
|
...(mux ? { mux } : {}),
|
|
@@ -2122,8 +2169,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2122
2169
|
const settings = getCurrentSettings();
|
|
2123
2170
|
const bank = taskMemoryBank.snapshot();
|
|
2124
2171
|
return {
|
|
2125
|
-
enabled: settings.memory.
|
|
2126
|
-
tier: settings.
|
|
2172
|
+
enabled: settings.context.memory.enabled,
|
|
2173
|
+
tier: settings.context.memory.target && settings.context.memory.model ? "llm" : "rules",
|
|
2127
2174
|
size: taskMemoryBankSize(bank),
|
|
2128
2175
|
lastDecision: memoryIntervention.lastDecision(),
|
|
2129
2176
|
bank,
|
|
@@ -2225,25 +2272,21 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2225
2272
|
onSetThinkingLevel: (level, scope) => {
|
|
2226
2273
|
const current = getCurrentSettings();
|
|
2227
2274
|
const nextLevel =
|
|
2228
|
-
resolveModelRuntimeCapabilitiesForProviders(
|
|
2229
|
-
|
|
2230
|
-
current.orchestrator.target,
|
|
2231
|
-
current.orchestrator.model,
|
|
2232
|
-
level,
|
|
2233
|
-
)?.thinking.effectiveLevel ?? "off";
|
|
2275
|
+
resolveModelRuntimeCapabilitiesForProviders(providers, current.chat.target, current.chat.model, level)?.thinking
|
|
2276
|
+
.effectiveLevel ?? "off";
|
|
2234
2277
|
applyRoutingAtScope({ orchestrator: { thinkingLevel: nextLevel } }, scope ?? "global");
|
|
2235
2278
|
},
|
|
2236
2279
|
onCycleThinking: () => {
|
|
2237
2280
|
const current = getCurrentSettings();
|
|
2238
2281
|
const thinking = resolveModelRuntimeCapabilitiesForProviders(
|
|
2239
2282
|
providers,
|
|
2240
|
-
current.
|
|
2241
|
-
current.
|
|
2242
|
-
current.
|
|
2283
|
+
current.chat.target,
|
|
2284
|
+
current.chat.model,
|
|
2285
|
+
current.chat.thinkingLevel ?? "off",
|
|
2243
2286
|
)?.thinking;
|
|
2244
2287
|
const effectiveAvailable = thinking?.supportedLevels ?? (["off"] as ThinkingLevel[]);
|
|
2245
2288
|
const nextLevel = advanceThinkingLevel(
|
|
2246
|
-
thinking?.effectiveLevel ?? current.
|
|
2289
|
+
thinking?.effectiveLevel ?? current.chat.thinkingLevel ?? "off",
|
|
2247
2290
|
effectiveAvailable,
|
|
2248
2291
|
);
|
|
2249
2292
|
updateSessionRouting({ orchestrator: { thinkingLevel: nextLevel } });
|
|
@@ -2268,7 +2311,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2268
2311
|
applyRoutingAtScope({ orchestrator: { target, model } }, scope);
|
|
2269
2312
|
// Recents live in the state dir, not settings.yaml, and are how a swap
|
|
2270
2313
|
// stays reachable in the picker. A session-scoped swap still earns one.
|
|
2271
|
-
rememberRecentModel(`${target}/${model}`, getCurrentSettings().
|
|
2314
|
+
rememberRecentModel(`${target}/${model}`, getCurrentSettings().chat.modelPicker.recentLimit);
|
|
2272
2315
|
},
|
|
2273
2316
|
writeSettings: (next) => applySettingsBlob(next),
|
|
2274
2317
|
commitSetting: (id, next, scope) => commitSetting(id, next, scope),
|
|
@@ -2289,8 +2332,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2289
2332
|
onNewSession: () => {
|
|
2290
2333
|
const settings = getCurrentSettings();
|
|
2291
2334
|
const input: { cwd: string; target?: string; model?: string } = { cwd: process.cwd() };
|
|
2292
|
-
if (settings.
|
|
2293
|
-
if (settings.
|
|
2335
|
+
if (settings.chat.target) input.target = settings.chat.target;
|
|
2336
|
+
if (settings.chat.model) input.model = settings.chat.model;
|
|
2294
2337
|
session.create(input);
|
|
2295
2338
|
taskBoard.snapshot();
|
|
2296
2339
|
ensureTaskMemorySession();
|