@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.
Files changed (751) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/CONTRIBUTING.md +59 -36
  3. package/README.md +407 -375
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
  6. package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
  9. package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
  10. package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
  11. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  12. package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
  13. package/dist/chunk-2X4RYJTJ.js +39 -0
  14. package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
  15. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  16. package/dist/chunk-34BHNEE3.js +1846 -0
  17. package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
  18. package/dist/chunk-3EBYEESD.js +314 -0
  19. package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
  20. package/dist/chunk-3KIPBMUA.js +308 -0
  21. package/dist/chunk-3M6DQK6S.js +362 -0
  22. package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
  23. package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
  24. package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
  25. package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
  26. package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
  27. package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
  28. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  29. package/dist/chunk-77QIVUZB.js +1334 -0
  30. package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
  33. package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
  34. package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
  35. package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
  36. package/dist/chunk-BTK3SSSK.js +67 -0
  37. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  38. package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
  39. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  40. package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
  41. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  42. package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
  43. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  44. package/dist/chunk-D7E7WCDF.js +27 -0
  45. package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
  46. package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
  47. package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
  48. package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
  49. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  50. package/dist/chunk-F2I26BDK.js +66 -0
  51. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  52. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  53. package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
  54. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  55. package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
  56. package/dist/chunk-HJWWJ6IL.js +184 -0
  57. package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
  58. package/dist/chunk-HLAFFSEK.js +360 -0
  59. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  60. package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
  61. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  62. package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
  63. package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
  64. package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
  65. package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
  66. package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
  67. package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
  68. package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
  69. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  70. package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
  71. package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
  72. package/dist/chunk-KPXDY6QF.js +47 -0
  73. package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
  74. package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
  75. package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
  76. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  77. package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
  78. package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
  79. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  80. package/dist/chunk-NDDGJUXD.js +81 -0
  81. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  82. package/dist/chunk-NMJXSHBJ.js +283 -0
  83. package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
  86. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  87. package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
  88. package/dist/chunk-PJX3WQUQ.js +42 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
  91. package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
  92. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  93. package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
  94. package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
  95. package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
  96. package/dist/chunk-SZAA6XDG.js +30 -0
  97. package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
  98. package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
  99. package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
  100. package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
  101. package/dist/chunk-UXCU4E3T.js +303 -0
  102. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  103. package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
  104. package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
  105. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  106. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  107. package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
  108. package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
  109. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  110. package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
  111. package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
  112. package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
  113. package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
  114. package/dist/chunk-XQRY4DTA.js +657 -0
  115. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  116. package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
  117. package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
  118. package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
  119. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  120. package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
  121. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  122. package/dist/cli/index.js +38 -37
  123. package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
  124. package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
  125. package/dist/codewiki/build-worker.js +1 -1
  126. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  127. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  128. package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
  129. package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
  130. package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
  131. package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
  132. package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
  133. package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
  134. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
  135. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
  136. package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
  137. package/dist/doctor-LHBD36VU.js +773 -0
  138. package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
  139. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
  140. package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
  141. package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
  142. package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
  143. package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
  144. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
  145. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
  146. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
  147. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
  148. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
  149. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
  150. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
  151. package/dist/fleet-view-TWHJKCN6.js +96 -0
  152. package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
  153. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  154. package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
  155. package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
  156. package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
  157. package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
  158. package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
  159. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
  160. package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
  161. package/dist/panes-IXKLOKA2.js +75 -0
  162. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  163. package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
  164. package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
  165. package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
  166. package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
  167. package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
  168. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
  169. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
  170. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
  171. package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
  172. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  173. package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
  174. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
  175. package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
  176. package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
  177. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  178. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  179. package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
  180. package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
  181. package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
  182. package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
  183. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
  184. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
  185. package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
  186. package/dist/worker/entry.js +83 -63
  187. package/docs/README.md +176 -81
  188. package/docs/{acp.md → architecture/acp.md} +36 -20
  189. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  190. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  191. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
  192. package/docs/architecture/artifact-versions.md +90 -0
  193. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  194. package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
  195. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  196. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  197. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  198. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  199. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  200. package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
  201. package/docs/{observability.md → architecture/observability.md} +26 -13
  202. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  203. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
  204. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
  205. package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
  206. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  207. package/docs/architecture/time-conventions.md +125 -0
  208. package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
  209. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  210. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  211. package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
  212. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
  213. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
  214. package/docs/guide/configuration-reference.md +1158 -0
  215. package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
  216. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
  217. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  218. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
  219. package/docs/{glossary.md → guide/glossary.md} +14 -11
  220. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
  221. package/docs/guide/panes-and-files.md +290 -0
  222. package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
  223. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  224. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
  225. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  226. package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
  227. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
  228. package/docs/history/release-cut-checklist.md +207 -0
  229. package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
  230. package/docs/process/documentation-coverage.md +100 -0
  231. package/docs/process/documentation-guide.md +187 -0
  232. package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
  233. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  234. package/docs/{evolution.md → process/evolution.md} +2 -2
  235. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
  236. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  237. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  238. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  239. package/evals/README.md +5 -0
  240. package/evals/behavioral-corpus-grader.mjs +103 -0
  241. package/evals/behavioral-machinery-baseline.json +2276 -0
  242. package/evals/behavioral-machinery-driver.ts +250 -0
  243. package/evals/behavioral-machinery-support.ts +253 -0
  244. package/evals/behavioral-machinery.yaml +614 -0
  245. package/evals/behavioral-model-negative-control.yaml +68 -0
  246. package/evals/behavioral-model.yaml +216 -0
  247. package/evals/fixtures/behavioral-facts.txt +3 -0
  248. package/evals/fixtures/behavioral-main.ts +7 -0
  249. package/evals/fixtures/decoy/note.txt +2 -0
  250. package/evals/fixtures/private/credentials.txt +1 -0
  251. package/evals/tracked-metrics-baseline.yaml +229 -0
  252. package/evals/tracked-metrics-grader.mjs +129 -0
  253. package/package.json +13 -21
  254. package/skills/README.md +51 -42
  255. package/skills/coding/ast-grep/SKILL.md +9 -3
  256. package/skills/coding/coding-standards/SKILL.md +9 -3
  257. package/skills/coding/prototype/SKILL.md +9 -3
  258. package/skills/coding/tdd/SKILL.md +9 -3
  259. package/skills/context/context-handoff/SKILL.md +13 -4
  260. package/skills/context/context-handoff/evals.md +3 -3
  261. package/skills/context/context-prime/SKILL.md +9 -3
  262. package/skills/context/context-prime/evals.md +2 -2
  263. package/skills/git/file-ticket/SKILL.md +10 -5
  264. package/skills/git/file-ticket/evals.md +2 -2
  265. package/skills/git/fix-issue/SKILL.md +12 -5
  266. package/skills/git/fix-issue/evals.md +4 -4
  267. package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
  268. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  269. package/skills/git/ship/SKILL.md +10 -4
  270. package/skills/git/ship/evals.md +4 -4
  271. package/skills/git/worktree-create/SKILL.md +8 -3
  272. package/skills/git/worktree-create/evals.md +6 -6
  273. package/skills/git/worktree-merge/SKILL.md +8 -3
  274. package/skills/git/worktree-merge/evals.md +6 -6
  275. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
  276. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
  277. package/skills/meta/clio-coder-test/SKILL.md +146 -0
  278. package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
  279. package/skills/meta/clio-coder-test/references/harness.md +102 -0
  280. package/skills/meta/clio-coder-test/references/test-map.md +96 -0
  281. package/skills/meta/credentials/SKILL.md +10 -3
  282. package/skills/meta/find-skills/SKILL.md +9 -3
  283. package/skills/meta/herdr/SKILL.md +9 -3
  284. package/skills/meta/skill-craft/SKILL.md +39 -16
  285. package/skills/planning/architecture/SKILL.md +9 -3
  286. package/skills/planning/backlog/SKILL.md +9 -3
  287. package/skills/planning/prd/SKILL.md +9 -3
  288. package/skills/planning/product-intent/SKILL.md +9 -3
  289. package/skills/planning/tech-spec/SKILL.md +9 -3
  290. package/skills/registry.yaml +66 -66
  291. package/skills/research/arxiv-literature/SKILL.md +9 -3
  292. package/skills/research/experiment-protocol/SKILL.md +10 -3
  293. package/skills/research/scientific-debugging/SKILL.md +10 -3
  294. package/skills/research/scientific-debugging/evals.md +2 -2
  295. package/skills/research/scientific-modernization/SKILL.md +10 -3
  296. package/skills/skill-marketplace.json +285 -66
  297. package/skills/workflow/cut-it/SKILL.md +11 -3
  298. package/skills/workflow/design-council/SKILL.md +12 -3
  299. package/skills/workflow/grill-me/SKILL.md +9 -3
  300. package/skills/workflow/workflow-distiller/SKILL.md +9 -3
  301. package/src/cli/acp.ts +2 -2
  302. package/src/cli/args.ts +2 -2
  303. package/src/cli/auth.ts +2 -2
  304. package/src/cli/bootstrap-generate.ts +6 -6
  305. package/src/cli/clio.ts +6 -1
  306. package/src/cli/config-inspect.ts +68 -15
  307. package/src/cli/configure-interop.ts +1 -1
  308. package/src/cli/configure.ts +27 -31
  309. package/src/cli/default-target.ts +1 -1
  310. package/src/cli/docs.ts +28 -20
  311. package/src/cli/doctor-naming.ts +323 -0
  312. package/src/cli/doctor-panes.ts +46 -14
  313. package/src/cli/doctor-toolchain.ts +31 -10
  314. package/src/cli/doctor.ts +15 -1
  315. package/src/cli/eval-inventory.ts +8 -8
  316. package/src/cli/eval.ts +1 -2
  317. package/src/cli/evidence-detail.ts +1 -1
  318. package/src/cli/evidence-inventory.ts +1 -1
  319. package/src/cli/extensions.ts +2 -1
  320. package/src/cli/fleet-decisions.ts +1 -1
  321. package/src/cli/fleet-inspect.ts +1 -1
  322. package/src/cli/fleet-preflight.ts +1 -1
  323. package/src/cli/fleet-verify.ts +1 -1
  324. package/src/cli/fleet-view.ts +40 -23
  325. package/src/cli/fleet.ts +9 -6
  326. package/src/cli/index.ts +2 -1
  327. package/src/cli/internal-dispatch.ts +3 -4
  328. package/src/cli/interop-inspect.ts +2 -2
  329. package/src/cli/models.ts +3 -3
  330. package/src/cli/modes/print.ts +1 -1
  331. package/src/cli/panes.ts +19 -5
  332. package/src/cli/reset.ts +1 -1
  333. package/src/cli/run.ts +13 -17
  334. package/src/cli/share.ts +6 -2
  335. package/src/cli/skills-eval.ts +14 -14
  336. package/src/cli/targets.ts +25 -30
  337. package/src/cli/trace-inspect.ts +1 -1
  338. package/src/cli/trace.ts +96 -4
  339. package/src/cli/uninstall.ts +2 -2
  340. package/src/cli/upgrade.ts +29 -34
  341. package/src/cli/usage.ts +2 -2
  342. package/src/cli/validate-model.ts +1 -1
  343. package/src/cli/verifiers-inspect.ts +1 -1
  344. package/src/cli/wiki-generate.ts +6 -6
  345. package/src/core/artifact-paths.ts +1 -1
  346. package/src/core/bash-exec.ts +132 -87
  347. package/src/core/boot-trace.ts +3 -3
  348. package/src/core/bus-events.ts +51 -6
  349. package/src/core/bus-trace.ts +2 -2
  350. package/src/core/compile-cache.ts +1 -1
  351. package/src/core/config.ts +1066 -886
  352. package/src/core/defaults.ts +326 -530
  353. package/src/core/dispatch-outcome.ts +16 -0
  354. package/src/core/domain-loader.ts +6 -4
  355. package/src/core/event-bus.ts +1 -1
  356. package/src/core/file-references.ts +78 -88
  357. package/src/core/git-commit-attribution.ts +3 -9
  358. package/src/core/guardrails.ts +33 -52
  359. package/src/core/naming-compat.ts +45 -0
  360. package/src/core/naming-events.ts +62 -0
  361. package/src/core/prompt-hint.ts +9 -0
  362. package/src/core/recent-models.ts +1 -7
  363. package/src/core/residency-protection.ts +4 -8
  364. package/src/core/resolve-config-value.ts +1 -1
  365. package/src/core/response-model-id.ts +0 -14
  366. package/src/core/session-routing.ts +84 -74
  367. package/src/core/skill-activation.ts +18 -0
  368. package/src/core/termination.ts +4 -4
  369. package/src/core/timers.ts +2 -12
  370. package/src/domains/agents/builtins/architect.md +2 -3
  371. package/src/domains/agents/builtins/coder.md +3 -2
  372. package/src/domains/agents/builtins/debugger.md +2 -2
  373. package/src/domains/agents/builtins/documenter.md +2 -2
  374. package/src/domains/agents/builtins/git-master.md +1 -1
  375. package/src/domains/agents/builtins/oracle.md +1 -1
  376. package/src/domains/agents/builtins/provenance.md +1 -1
  377. package/src/domains/agents/builtins/researcher.md +1 -1
  378. package/src/domains/agents/builtins/scout.md +1 -1
  379. package/src/domains/agents/builtins/tester.md +2 -2
  380. package/src/domains/agents/builtins/verifier.md +2 -2
  381. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  382. package/src/domains/agents/catalog.ts +14 -26
  383. package/src/domains/agents/contract.ts +2 -0
  384. package/src/domains/agents/extension.ts +26 -4
  385. package/src/domains/agents/registry.ts +7 -7
  386. package/src/domains/agents/result-contract.ts +1 -1
  387. package/src/domains/agents/spec.ts +0 -11
  388. package/src/domains/config/classify.ts +35 -47
  389. package/src/domains/config/extension.ts +5 -5
  390. package/src/domains/config/keybindings.ts +56 -47
  391. package/src/domains/config/watcher.ts +1 -1
  392. package/src/domains/context/codewiki/indexer.ts +1 -1
  393. package/src/domains/context/extension.ts +3 -6
  394. package/src/domains/context/prompt-context.ts +1 -1
  395. package/src/domains/context/wiki/assemble.ts +2 -2
  396. package/src/domains/context/working-set/path-index.ts +1 -0
  397. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  398. package/src/domains/context/working-set/replay/report.ts +1 -1
  399. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  400. package/src/domains/dispatch/active-route-planner.ts +2 -2
  401. package/src/domains/dispatch/agent-candidates.ts +1 -1
  402. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  403. package/src/domains/dispatch/agent-ledger.ts +1 -1
  404. package/src/domains/dispatch/assignment.ts +5 -5
  405. package/src/domains/dispatch/capability-match.ts +10 -0
  406. package/src/domains/dispatch/capacity-lease.ts +2 -5
  407. package/src/domains/dispatch/code-step.ts +1 -1
  408. package/src/domains/dispatch/contract.ts +2 -2
  409. package/src/domains/dispatch/extension.ts +169 -82
  410. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  411. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  412. package/src/domains/dispatch/fleet-run.ts +0 -7
  413. package/src/domains/dispatch/gate-decisions.ts +25 -14
  414. package/src/domains/dispatch/host-verification.ts +435 -39
  415. package/src/domains/dispatch/intent-requirements.ts +10 -0
  416. package/src/domains/dispatch/intent.ts +18 -1
  417. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  418. package/src/domains/dispatch/path-scope.ts +220 -70
  419. package/src/domains/dispatch/placement.ts +2 -2
  420. package/src/domains/dispatch/receipt-findings.ts +1 -1
  421. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  422. package/src/domains/dispatch/reservation-store.ts +0 -23
  423. package/src/domains/dispatch/route-decision.ts +1 -1
  424. package/src/domains/dispatch/route-history.ts +1 -1
  425. package/src/domains/dispatch/route-policy.ts +1 -1
  426. package/src/domains/dispatch/route-readiness.ts +0 -28
  427. package/src/domains/dispatch/run-event-journal.ts +9 -19
  428. package/src/domains/dispatch/state.ts +2 -3
  429. package/src/domains/dispatch/tool-stats.ts +1 -1
  430. package/src/domains/dispatch/transport.ts +47 -40
  431. package/src/domains/dispatch/types.ts +58 -6
  432. package/src/domains/dispatch/worker-protocol.ts +2 -2
  433. package/src/domains/eval/artifacts/store.ts +10 -4
  434. package/src/domains/eval/compare/thresholds.ts +0 -8
  435. package/src/domains/eval/execution-provenance.ts +1 -1
  436. package/src/domains/eval/metrics/token-stream.ts +0 -7
  437. package/src/domains/eval/report.ts +1 -1
  438. package/src/domains/eval/runner.ts +1 -1
  439. package/src/domains/eval/runners/clio-run.ts +7 -6
  440. package/src/domains/eval/runners/external-command.ts +4 -3
  441. package/src/domains/eval/schema/artifact.ts +1 -1
  442. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  443. package/src/domains/eval/schema/behavioral.ts +7 -6
  444. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  445. package/src/domains/eval/schema/naming.ts +10 -0
  446. package/src/domains/eval/schema/suite.ts +2 -2
  447. package/src/domains/eval/schema/validate.ts +9 -5
  448. package/src/domains/eval/schema/verdict.ts +4 -2
  449. package/src/domains/eval/store.ts +20 -3
  450. package/src/domains/eval/suites/run.ts +12 -6
  451. package/src/domains/eval/types.ts +1 -1
  452. package/src/domains/eval/workspaces/git.ts +1 -1
  453. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  454. package/src/domains/evidence/build.ts +13 -5
  455. package/src/domains/evidence/trust-status.ts +10 -1
  456. package/src/domains/extensions/contract.ts +15 -1
  457. package/src/domains/extensions/discovery.ts +238 -41
  458. package/src/domains/extensions/extension.ts +105 -6
  459. package/src/domains/extensions/index.ts +24 -0
  460. package/src/domains/extensions/integrity.ts +189 -0
  461. package/src/domains/extensions/manager.ts +17 -1
  462. package/src/domains/extensions/resource-path.ts +27 -0
  463. package/src/domains/extensions/resources.ts +18 -38
  464. package/src/domains/extensions/snapshot-store.ts +39 -0
  465. package/src/domains/extensions/snapshot.ts +180 -0
  466. package/src/domains/extensions/state.ts +385 -57
  467. package/src/domains/extensions/types.ts +118 -1
  468. package/src/domains/interop/consent.ts +7 -7
  469. package/src/domains/interop/extension.ts +1 -1
  470. package/src/domains/lifecycle/doctor.ts +27 -21
  471. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  472. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  473. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  474. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  475. package/src/domains/lifecycle/migrations/index.ts +22 -1
  476. package/src/domains/lifecycle/naming-history.ts +153 -0
  477. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  478. package/src/domains/lifecycle/naming-resources.ts +276 -0
  479. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  480. package/src/domains/lifecycle/naming-yazi.ts +86 -0
  481. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  482. package/src/domains/memory/task-memory-handoff.ts +6 -3
  483. package/src/domains/middleware/contract.ts +26 -0
  484. package/src/domains/middleware/extension.ts +24 -24
  485. package/src/domains/middleware/hook-receipts.ts +27 -4
  486. package/src/domains/middleware/hooks-io.ts +65 -32
  487. package/src/domains/middleware/hooks.ts +64 -0
  488. package/src/domains/middleware/index.ts +35 -4
  489. package/src/domains/middleware/marketplace-offer.ts +339 -0
  490. package/src/domains/middleware/registrations.ts +326 -0
  491. package/src/domains/middleware/runtime.ts +30 -2
  492. package/src/domains/middleware/snapshot.ts +20 -7
  493. package/src/domains/mux/contract.ts +195 -25
  494. package/src/domains/mux/detect.ts +23 -6
  495. package/src/domains/mux/dock-controller.ts +365 -0
  496. package/src/domains/mux/extension.ts +7 -1
  497. package/src/domains/mux/index.ts +21 -1
  498. package/src/domains/mux/operations.ts +72 -5
  499. package/src/domains/mux/protocol.ts +19 -6
  500. package/src/domains/mux/socket-client.ts +167 -19
  501. package/src/domains/mux/types.ts +49 -6
  502. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  503. package/src/domains/mux/yazi/event-stream.ts +6 -4
  504. package/src/domains/mux/yazi/profile.ts +1 -1
  505. package/src/domains/mux/yazi/session.ts +79 -7
  506. package/src/domains/mux/yazi/theme.ts +117 -17
  507. package/src/domains/observability/contract.ts +10 -11
  508. package/src/domains/observability/extension.ts +12 -4
  509. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  510. package/src/domains/observability/projection.ts +15 -91
  511. package/src/domains/observability/trace-store.ts +65 -19
  512. package/src/domains/prompts/compiler.ts +75 -55
  513. package/src/domains/prompts/contract.ts +15 -3
  514. package/src/domains/prompts/extension.ts +100 -12
  515. package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
  516. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  517. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  518. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  519. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  520. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  521. package/src/domains/prompts/fragments/operating/skills.md +11 -18
  522. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  523. package/src/domains/providers/extension.ts +5 -5
  524. package/src/domains/providers/index.ts +1 -1
  525. package/src/domains/providers/knowledge-base-path.ts +1 -1
  526. package/src/domains/providers/model-runtime-capabilities.ts +99 -23
  527. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  528. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
  529. package/src/domains/providers/plugins.ts +1 -1
  530. package/src/domains/providers/resolver.ts +1 -1
  531. package/src/domains/providers/runtime-resolution.ts +31 -0
  532. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  533. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  534. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
  536. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  537. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  538. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  539. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  540. package/src/domains/providers/types/cost-provenance.ts +19 -0
  541. package/src/domains/providers/types/knowledge-base.ts +13 -0
  542. package/src/domains/providers/types/local-model-quirks.ts +87 -39
  543. package/src/domains/providers/types/target-descriptor.ts +3 -3
  544. package/src/domains/resources/extension.ts +1 -1
  545. package/src/domains/resources/library.ts +6 -6
  546. package/src/domains/resources/prompts/loader.ts +1 -1
  547. package/src/domains/resources/skills/content-hash.ts +7 -6
  548. package/src/domains/resources/skills/evals.ts +1 -1
  549. package/src/domains/resources/skills/install.ts +36 -12
  550. package/src/domains/resources/skills/loader.ts +41 -18
  551. package/src/domains/resources/skills/marketplace.ts +21 -2
  552. package/src/domains/resources/skills/promotion.ts +214 -0
  553. package/src/domains/safety/audit.ts +2 -2
  554. package/src/domains/safety/call-target.ts +1 -1
  555. package/src/domains/safety/finish-contract.ts +2 -1
  556. package/src/domains/safety/loop-detector.ts +7 -4
  557. package/src/domains/safety/run-effects.ts +1 -1
  558. package/src/domains/scheduling/extension.ts +4 -4
  559. package/src/domains/session/archive-readers.ts +9 -1
  560. package/src/domains/session/compaction/branch-summary.ts +4 -0
  561. package/src/domains/session/compaction/compact.ts +1 -1
  562. package/src/domains/session/compaction/tokens.ts +4 -0
  563. package/src/domains/session/context-accounting.ts +1 -1
  564. package/src/domains/session/decision-board.ts +1 -1
  565. package/src/domains/session/extension.ts +1 -1
  566. package/src/domains/session/handoff.ts +2 -2
  567. package/src/domains/session/prompt-manifest.ts +0 -5
  568. package/src/domains/session/protected-artifact-journal.ts +12 -6
  569. package/src/domains/session/retry.ts +1 -1
  570. package/src/domains/session/task-board.ts +10 -9
  571. package/src/domains/share/archive.ts +249 -43
  572. package/src/domains/toolchain/install.ts +1 -1
  573. package/src/engine/acp/adapter.ts +3 -3
  574. package/src/engine/acp/event-mapper.ts +3 -3
  575. package/src/engine/acp/server.ts +89 -35
  576. package/src/engine/acp/tool-mediator.ts +2 -2
  577. package/src/engine/acp/types.ts +1 -1
  578. package/src/engine/alcf-oauth.ts +5 -5
  579. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  580. package/src/engine/api-registry.ts +1 -1
  581. package/src/engine/apis/llamacpp-residency.ts +4 -23
  582. package/src/engine/apis/lmstudio.ts +4 -9
  583. package/src/engine/apis/ollama-native.ts +9 -9
  584. package/src/engine/apis/openai-completions.ts +30 -27
  585. package/src/engine/apis/output-budget.ts +8 -18
  586. package/src/engine/apis/residency.ts +10 -35
  587. package/src/engine/claude/sdk-module.ts +1 -12
  588. package/src/engine/claude/sdk-runtime.ts +6 -6
  589. package/src/engine/claude/subprocess-runtime.ts +1 -1
  590. package/src/engine/claude/tool-safety.ts +4 -4
  591. package/src/engine/gemma-channel-filter.ts +19 -0
  592. package/src/engine/loop-guard.ts +92 -17
  593. package/src/engine/session.ts +14 -7
  594. package/src/engine/tui-primitives.ts +1 -1
  595. package/src/engine/worker-events.ts +6 -6
  596. package/src/engine/worker-runtime.ts +54 -24
  597. package/src/engine/worker-tools.ts +3 -1
  598. package/src/entry/extension-hook-sources.ts +28 -0
  599. package/src/entry/extension-reload.ts +309 -0
  600. package/src/entry/orchestrator.ts +163 -120
  601. package/src/interactive/application-controller.ts +23 -22
  602. package/src/interactive/bus-notices.ts +10 -3
  603. package/src/interactive/chat-loop-messages.ts +3 -13
  604. package/src/interactive/chat-loop.ts +18 -9
  605. package/src/interactive/chat-panel.ts +37 -14
  606. package/src/interactive/chat-renderer.ts +71 -7
  607. package/src/interactive/clio-editor.ts +105 -1
  608. package/src/interactive/context-activity.ts +8 -6
  609. package/src/interactive/context-meter.ts +3 -6
  610. package/src/interactive/context-overlay.ts +1 -1
  611. package/src/interactive/cost-overlay.ts +1 -1
  612. package/src/interactive/council-grid.ts +2 -2
  613. package/src/interactive/dispatch-board.ts +36 -44
  614. package/src/interactive/editor-bash.ts +21 -0
  615. package/src/interactive/editor-steer.ts +9 -4
  616. package/src/interactive/editor-submit.ts +24 -18
  617. package/src/interactive/external-editor.ts +1 -1
  618. package/src/interactive/file-reference-completion.ts +360 -0
  619. package/src/interactive/footer/dashboard.ts +15 -17
  620. package/src/interactive/footer/notifications.ts +14 -8
  621. package/src/interactive/footer/widgets.ts +15 -44
  622. package/src/interactive/interactive-application.ts +116 -61
  623. package/src/interactive/interactive-event-projection.ts +1 -1
  624. package/src/interactive/interactive-input-runtime.ts +6 -2
  625. package/src/interactive/interactive-presentation.ts +22 -17
  626. package/src/interactive/interactive-shell.ts +2 -2
  627. package/src/interactive/interactive-slash-runtime.ts +65 -17
  628. package/src/interactive/interactive-subscriptions.ts +1 -1
  629. package/src/interactive/interactive-tickers.ts +1 -1
  630. package/src/interactive/keybinding-manager.ts +4 -4
  631. package/src/interactive/layout.ts +1 -1
  632. package/src/interactive/memory-overlay.ts +2 -2
  633. package/src/interactive/modal-marker.ts +2 -21
  634. package/src/interactive/mutation-preview.ts +1 -1
  635. package/src/interactive/overlay-frame.ts +4 -12
  636. package/src/interactive/overlay-general-openers.ts +6 -2
  637. package/src/interactive/overlay-key-routing.ts +7 -7
  638. package/src/interactive/overlay-lifecycle.ts +1 -1
  639. package/src/interactive/overlay-model-selectors.ts +3 -3
  640. package/src/interactive/overlays/agents.ts +2 -2
  641. package/src/interactive/overlays/ask-user.ts +25 -11
  642. package/src/interactive/overlays/context-reset.ts +28 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  644. package/src/interactive/overlays/decisions.ts +4 -2
  645. package/src/interactive/overlays/extensions.ts +9 -1
  646. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  647. package/src/interactive/overlays/handoff-review.ts +2 -2
  648. package/src/interactive/overlays/help-reference.ts +13 -0
  649. package/src/interactive/overlays/interop.ts +1 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  651. package/src/interactive/overlays/message-picker.ts +1 -1
  652. package/src/interactive/overlays/model-selector.ts +39 -31
  653. package/src/interactive/overlays/prompts.ts +10 -4
  654. package/src/interactive/overlays/session-selector.ts +2 -2
  655. package/src/interactive/overlays/settings.ts +360 -303
  656. package/src/interactive/overlays/side-question.ts +2 -2
  657. package/src/interactive/overlays/skills-hub.ts +8 -8
  658. package/src/interactive/overlays/tree-selector.ts +2 -2
  659. package/src/interactive/panes-runtime.ts +145 -43
  660. package/src/interactive/permission-overlay.ts +2 -2
  661. package/src/interactive/prompt-cache-identity.ts +88 -0
  662. package/src/interactive/renderers/retry-status.ts +12 -4
  663. package/src/interactive/renderers/tool-execution.ts +4 -4
  664. package/src/interactive/session-transcript.ts +3 -3
  665. package/src/interactive/slash-autocomplete.ts +454 -165
  666. package/src/interactive/slash-commands.ts +401 -190
  667. package/src/interactive/slash-spec.ts +160 -17
  668. package/src/interactive/status/controller.ts +2 -2
  669. package/src/interactive/stream-pacing-policy.ts +1 -24
  670. package/src/interactive/tasks-overlay.ts +20 -13
  671. package/src/interactive/terminal-lease.ts +6 -7
  672. package/src/interactive/turn-context.ts +41 -26
  673. package/src/interactive/turn-persistence.ts +2 -2
  674. package/src/interactive/turn-prewarm.ts +2 -2
  675. package/src/interactive/turn-runtime.ts +8 -8
  676. package/src/interactive/turn-state.ts +1 -1
  677. package/src/interactive/view/artifacts.ts +12 -9
  678. package/src/interactive/view/view-overlay.ts +13 -10
  679. package/src/interactive/watch-pane.ts +38 -10
  680. package/src/interactive/welcome-dashboard.ts +15 -15
  681. package/src/interactive/worker-progress.ts +4 -4
  682. package/src/interactive/worker-receipts.ts +1 -1
  683. package/src/interactive/worker-stream.ts +1 -4
  684. package/src/interactive/yazi-bridge.ts +72 -11
  685. package/src/tools/agent-tools.ts +30 -1
  686. package/src/tools/artifact.ts +2 -2
  687. package/src/tools/ask-user.ts +6 -6
  688. package/src/tools/bash.ts +2 -2
  689. package/src/tools/bootstrap.ts +4 -0
  690. package/src/tools/builtin-tool-catalog.ts +52 -22
  691. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  692. package/src/tools/codewiki/code-nav.ts +99 -13
  693. package/src/tools/compete-worktrees.ts +27 -17
  694. package/src/tools/context/docs-engine.ts +20 -7
  695. package/src/tools/context/index.ts +44 -13
  696. package/src/tools/core-bootstrap.ts +28 -6
  697. package/src/tools/credential-present.ts +1 -2
  698. package/src/tools/dispatch-admission.ts +4 -2
  699. package/src/tools/dispatch-arguments.ts +6 -2
  700. package/src/tools/dispatch-plan.ts +48 -15
  701. package/src/tools/dispatch-run-events.ts +13 -11
  702. package/src/tools/dispatch-runner.ts +11 -6
  703. package/src/tools/dispatch-schema.ts +338 -0
  704. package/src/tools/dispatch-types.ts +3 -0
  705. package/src/tools/dispatch.ts +9 -254
  706. package/src/tools/find.ts +1 -6
  707. package/src/tools/ledger.ts +3 -5
  708. package/src/tools/monitor-surface.ts +5 -13
  709. package/src/tools/monitor.ts +4 -4
  710. package/src/tools/observation.ts +4 -5
  711. package/src/tools/observers.ts +0 -33
  712. package/src/tools/panes-surface.ts +4 -11
  713. package/src/tools/panes.ts +4 -2
  714. package/src/tools/policy.ts +15 -2
  715. package/src/tools/read.ts +5 -6
  716. package/src/tools/registry.ts +30 -7
  717. package/src/tools/result-shaping.ts +18 -14
  718. package/src/tools/steer-surface.ts +1 -1
  719. package/src/tools/task-worktree.ts +28 -7
  720. package/src/tools/tasks.ts +1 -1
  721. package/src/tools/truncate.ts +6 -5
  722. package/src/tools/verify/authoring.ts +3 -6
  723. package/src/tools/verify/frontend.ts +1 -1
  724. package/src/tools/verify/surface.ts +6 -12
  725. package/src/tools/web-fetch-surface.ts +1 -3
  726. package/src/tools/web-fetch.ts +1 -1
  727. package/src/worker/entry.ts +4 -3
  728. package/src/worker/protocol.ts +16 -14
  729. package/src/worker/spec-contract.ts +2 -2
  730. package/src/worker/stdin-demux.ts +2 -2
  731. package/dist/chunk-36EJLSQQ.js +0 -814
  732. package/dist/chunk-GXNLGKAB.js +0 -571
  733. package/dist/chunk-K7VKOLQQ.js +0 -15
  734. package/dist/chunk-PMZCIOCJ.js +0 -25
  735. package/dist/chunk-SUCTJL45.js +0 -45
  736. package/dist/chunk-SUW5DORT.js +0 -819
  737. package/dist/chunk-TZ3SGWZZ.js +0 -48
  738. package/dist/chunk-UOV2BYIW.js +0 -107
  739. package/dist/chunk-VFA6GDY5.js +0 -1625
  740. package/dist/doctor-QOA5FNY5.js +0 -313
  741. package/dist/fleet-view-ZCON35AG.js +0 -102
  742. package/dist/panes-HMABYVO4.js +0 -58
  743. package/docs/artifact-versions.md +0 -67
  744. package/docs/documentation-coverage.md +0 -46
  745. package/docs/documentation-guide.md +0 -167
  746. package/docs/release-cut-checklist.md +0 -193
  747. package/docs/time-conventions.md +0 -101
  748. package/skills/meta/clio-test/SKILL.md +0 -133
  749. package/skills/meta/clio-test/references/harness.md +0 -126
  750. package/skills/meta/clio-test/references/test-map.md +0 -69
  751. 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
- type ExtensionHookRoot,
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.orchestrator?.target;
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.orchestrator?.model;
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
- clioVersion: meta.clioVersion,
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.orchestrator.target;
272
+ const previousTarget = next.chat.target;
270
273
  if (overrides.target !== undefined) {
271
- next.orchestrator.target = overrides.target;
272
- if (overrides.model === undefined && (previousTarget !== overrides.target || !next.orchestrator.model)) {
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.orchestrator.model = target.defaultModel ?? null;
277
+ if (target) next.chat.model = target.defaultModel ?? null;
275
278
  }
276
279
  }
277
- if (overrides.model !== undefined) next.orchestrator.model = overrides.model;
278
- if (overrides.thinking !== undefined) next.orchestrator.thinkingLevel = overrides.thinking;
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
- export async function resolveApiKeyForTarget(
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.background.target?.trim();
351
- const wireModelId = settings.background.model?.trim();
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.orchestrator.target, model: settings.orchestrator.model },
449
- { label: "workers.default", target: settings.workers.default.target, model: settings.workers.default.model },
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.background.model?.trim();
482
- const orchestratorModel = settings.orchestrator.model?.trim();
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.background.target?.trim() !== settings.orchestrator.target?.trim()) return false;
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.background.target?.trim());
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
- export function synthesizeOrchestratorModel(
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.orchestrator?.target ?? null;
530
- const wireModelId = settings.orchestrator?.model ?? null;
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
- export function foldDispatchSkillActivations(
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 orchestrator.target + orchestrator.model");
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
- export function createProductionAutoCompact(
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
- export function advanceScopedTarget(
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.scope ?? [];
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.orchestrator.target ?? "";
771
- const activeModel = settings.orchestrator.model ?? "";
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.orchestrator?.target;
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 ?? process.env.CLIO_CODER_RESUME_SESSION_ID?.trim();
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
- // Guardrail policy (tool-call budgets, tool byte caps, dispatch ledger cap)
1084
- // resolves settings-first with env as emergency override; install the
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.guardrails);
1102
+ configureGuardrails(guardrailValuesFromSettings(resolvedSettings));
1088
1103
 
1089
- // The run event journal resolves the same way for the same reason: the sink
1090
- // sits on the dispatch event path, where reading settings.yaml would be both
1091
- // a cost and a throw site, so the composition root installs the value once.
1092
- configureRunEventJournal(resolvedSettings.panes.journal);
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.intervention;
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
- return effectiveSettingsForDispatch?.().memory.intervention ?? memorySettings;
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.intervention.timeoutMs, bus);
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 extensionHookRoots: ExtensionHookRoot[] = (extensions?.list(process.cwd()) ?? [])
1295
- .filter((ext) => ext.enabled && ext.effective)
1296
- .map((ext) => ({ id: ext.id, rootPath: ext.rootPath }));
1297
- const userHooks = installUserHooks({
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
- if (!interactive) {
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().workers.rosters } : {}),
1511
+ ...(config ? { getWorkerRosters: () => config.get().fleet.rosters } : {}),
1512
+ ...(config ? { getDispatchSchemaComposition: () => dispatchSchemaCompositionFor(config.get().fleet) } : {}),
1470
1513
  getSkillLoaderOptions: () => ({
1471
- trustProjectCompatRoots: config?.get().skills.trustProjectCompatRoots === true,
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
- // Child-process seams read the effective setting from the environment,
1511
- // and the session view may override the saved value.
1512
- setGitCommitAttributionEnabled(getCurrentSettings().attribution.gitCommits);
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 the saved value on reload; a session-scoped
1539
- // override must win, so re-derive from the session view after it.
1540
- const unsubscribeCommitAttributionSync = bus.on(BusChannels.ConfigHotReload, () => bumpSessionState());
1541
- termination.onDrain(() => unsubscribeCommitAttributionSync());
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.intervention.enabled);
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.orchestrator.target,
1631
- model: settings.orchestrator.model,
1632
- thinkingLevel: settings.orchestrator.thinkingLevel ?? "off",
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["orchestrator.target"] !== undefined) orchestrator.target = patch["orchestrator.target"];
1644
- if (patch["orchestrator.model"] !== undefined) orchestrator.model = patch["orchestrator.model"];
1645
- if (patch["orchestrator.thinkingLevel"] !== undefined) {
1646
- orchestrator.thinkingLevel = patch["orchestrator.thinkingLevel"];
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()).watchdog,
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()).watchdog.target,
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.orchestrator?.target;
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.orchestrator?.target;
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 (CLIO_CODER_RESUME_SESSION_ID) must replay the resumed
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.orchestrator.target,
1968
- model: settings.orchestrator.model,
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().delegation.defaults.permissionTimeoutMs ??
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.intervention.enabled,
2126
- tier: settings.background.target && settings.background.model ? "llm" : "rules",
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
- providers,
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.orchestrator.target,
2241
- current.orchestrator.model,
2242
- current.orchestrator.thinkingLevel ?? "off",
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.orchestrator.thinkingLevel ?? "off",
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().modelSelector.recentLimit);
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.orchestrator.target) input.target = settings.orchestrator.target;
2293
- if (settings.orchestrator.model) input.model = settings.orchestrator.model;
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();