@iowarp/clio-coder 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +116 -16
  3. package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
  4. package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
  7. package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
  8. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  9. package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
  10. package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
  11. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  12. package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
  13. package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
  14. package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
  15. package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
  16. package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
  17. package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
  18. package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
  19. package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
  20. package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
  21. package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
  22. package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
  23. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  24. package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
  25. package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
  26. package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
  27. package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
  28. package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
  29. package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
  30. package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
  33. package/dist/chunk-AP73CFDC.js +308 -0
  34. package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
  35. package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
  36. package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
  37. package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
  38. package/dist/chunk-BTK3SSSK.js +67 -0
  39. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  40. package/dist/chunk-BWW4HLO4.js +301 -0
  41. package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
  42. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  43. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  44. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  45. package/dist/chunk-D7E7WCDF.js +27 -0
  46. package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
  47. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  48. package/dist/chunk-EIMVLWB3.js +1842 -0
  49. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  50. package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
  51. package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
  52. package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
  53. package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
  54. package/dist/chunk-HJWWJ6IL.js +184 -0
  55. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  56. package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
  57. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  58. package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
  59. package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
  60. package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
  61. package/dist/chunk-J5LZHVIT.js +284 -0
  62. package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
  63. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  64. package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
  65. package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
  66. package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
  67. package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
  68. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  69. package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
  70. package/dist/chunk-NDDGJUXD.js +81 -0
  71. package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
  72. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  73. package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
  74. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  75. package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
  76. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  77. package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
  78. package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
  79. package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
  80. package/dist/chunk-QTFGO774.js +644 -0
  81. package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
  82. package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
  83. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  84. package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
  85. package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
  86. package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
  87. package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
  88. package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
  89. package/dist/chunk-U2WB7TZS.js +271 -0
  90. package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
  91. package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
  92. package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
  93. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  94. package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
  95. package/dist/chunk-VKFQTNDV.js +66 -0
  96. package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
  97. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  98. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  99. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  100. package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
  101. package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
  102. package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
  103. package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
  104. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  105. package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
  106. package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
  107. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  108. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  109. package/dist/cli/index.js +36 -36
  110. package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
  111. package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
  112. package/dist/codewiki/build-worker.js +1 -1
  113. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  114. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  115. package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
  116. package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
  117. package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
  118. package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
  119. package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
  120. package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
  121. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
  122. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
  123. package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
  124. package/dist/doctor-ZGPEGHIP.js +772 -0
  125. package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
  126. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
  127. package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
  128. package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
  129. package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
  130. package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
  131. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
  132. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
  133. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
  134. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
  135. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
  136. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
  137. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
  138. package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
  139. package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
  140. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  141. package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
  142. package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
  143. package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
  144. package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
  145. package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
  146. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
  147. package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
  148. package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
  149. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  150. package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
  151. package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
  152. package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
  153. package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
  154. package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
  155. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
  156. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
  157. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
  158. package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
  159. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  160. package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
  161. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
  162. package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
  163. package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
  164. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  165. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  166. package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
  167. package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
  168. package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
  169. package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
  170. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
  171. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
  172. package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
  173. package/dist/worker/entry.js +57 -52
  174. package/docs/acp.md +1 -1
  175. package/docs/built-in-agents.md +40 -32
  176. package/docs/commands-and-modes.md +9 -3
  177. package/docs/config-knobs-audit.md +3 -0
  178. package/docs/configuration-and-targets.md +105 -164
  179. package/docs/environment-variables.md +2 -1
  180. package/docs/exit-codes-and-output.md +2 -0
  181. package/docs/fleet-demo-runbook.md +6 -3
  182. package/docs/fleet-dispatch.md +8 -6
  183. package/docs/installation-and-lifecycle.md +1 -1
  184. package/docs/release-cut-checklist.md +164 -177
  185. package/docs/trace-store.md +15 -10
  186. package/docs/troubleshooting.md +1 -1
  187. package/evals/README.md +5 -0
  188. package/evals/behavioral-corpus-grader.mjs +103 -0
  189. package/evals/behavioral-machinery-baseline.json +2276 -0
  190. package/evals/behavioral-machinery-driver.ts +250 -0
  191. package/evals/behavioral-machinery-support.ts +253 -0
  192. package/evals/behavioral-machinery.yaml +614 -0
  193. package/evals/behavioral-model-negative-control.yaml +68 -0
  194. package/evals/behavioral-model.yaml +216 -0
  195. package/evals/fixtures/behavioral-facts.txt +3 -0
  196. package/evals/fixtures/behavioral-main.ts +7 -0
  197. package/evals/fixtures/decoy/note.txt +2 -0
  198. package/evals/fixtures/private/credentials.txt +1 -0
  199. package/evals/tracked-metrics-baseline.yaml +229 -0
  200. package/evals/tracked-metrics-grader.mjs +129 -0
  201. package/package.json +5 -15
  202. package/skills/README.md +6 -6
  203. package/skills/coding/ast-grep/SKILL.md +8 -2
  204. package/skills/coding/coding-standards/SKILL.md +8 -2
  205. package/skills/coding/prototype/SKILL.md +8 -2
  206. package/skills/coding/tdd/SKILL.md +8 -2
  207. package/skills/context/context-handoff/SKILL.md +12 -3
  208. package/skills/context/context-handoff/evals.md +3 -3
  209. package/skills/context/context-prime/SKILL.md +8 -2
  210. package/skills/context/context-prime/evals.md +2 -2
  211. package/skills/git/file-ticket/SKILL.md +9 -4
  212. package/skills/git/file-ticket/evals.md +2 -2
  213. package/skills/git/fix-issue/SKILL.md +12 -5
  214. package/skills/git/fix-issue/evals.md +4 -4
  215. package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
  216. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  217. package/skills/git/ship/SKILL.md +9 -3
  218. package/skills/git/ship/evals.md +4 -4
  219. package/skills/git/worktree-create/SKILL.md +7 -2
  220. package/skills/git/worktree-create/evals.md +6 -6
  221. package/skills/git/worktree-merge/SKILL.md +7 -2
  222. package/skills/git/worktree-merge/evals.md +6 -6
  223. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
  224. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
  225. package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
  226. package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
  227. package/skills/meta/credentials/SKILL.md +9 -2
  228. package/skills/meta/find-skills/SKILL.md +8 -2
  229. package/skills/meta/herdr/SKILL.md +8 -2
  230. package/skills/meta/skill-craft/SKILL.md +21 -4
  231. package/skills/planning/architecture/SKILL.md +9 -3
  232. package/skills/planning/backlog/SKILL.md +8 -2
  233. package/skills/planning/prd/SKILL.md +8 -2
  234. package/skills/planning/product-intent/SKILL.md +8 -2
  235. package/skills/planning/tech-spec/SKILL.md +9 -3
  236. package/skills/registry.yaml +66 -66
  237. package/skills/research/arxiv-literature/SKILL.md +8 -2
  238. package/skills/research/experiment-protocol/SKILL.md +9 -2
  239. package/skills/research/scientific-debugging/SKILL.md +9 -2
  240. package/skills/research/scientific-debugging/evals.md +2 -2
  241. package/skills/research/scientific-modernization/SKILL.md +9 -2
  242. package/skills/skill-marketplace.json +257 -38
  243. package/skills/workflow/cut-it/SKILL.md +10 -2
  244. package/skills/workflow/design-council/SKILL.md +11 -2
  245. package/skills/workflow/grill-me/SKILL.md +8 -2
  246. package/skills/workflow/workflow-distiller/SKILL.md +8 -2
  247. package/src/cli/acp.ts +2 -2
  248. package/src/cli/auth.ts +2 -2
  249. package/src/cli/bootstrap-generate.ts +5 -5
  250. package/src/cli/clio.ts +6 -1
  251. package/src/cli/config-inspect.ts +3 -3
  252. package/src/cli/configure-interop.ts +1 -1
  253. package/src/cli/configure.ts +27 -27
  254. package/src/cli/default-target.ts +1 -1
  255. package/src/cli/docs.ts +6 -6
  256. package/src/cli/doctor-naming.ts +323 -0
  257. package/src/cli/doctor-panes.ts +46 -14
  258. package/src/cli/doctor-toolchain.ts +29 -8
  259. package/src/cli/doctor.ts +15 -1
  260. package/src/cli/eval-inventory.ts +8 -8
  261. package/src/cli/evidence-detail.ts +1 -1
  262. package/src/cli/evidence-inventory.ts +1 -1
  263. package/src/cli/fleet-decisions.ts +1 -1
  264. package/src/cli/fleet-inspect.ts +1 -1
  265. package/src/cli/fleet-preflight.ts +1 -1
  266. package/src/cli/fleet-verify.ts +1 -1
  267. package/src/cli/fleet-view.ts +40 -23
  268. package/src/cli/fleet.ts +8 -5
  269. package/src/cli/interop-inspect.ts +2 -2
  270. package/src/cli/models.ts +3 -3
  271. package/src/cli/modes/print.ts +1 -1
  272. package/src/cli/reset.ts +1 -1
  273. package/src/cli/run.ts +11 -15
  274. package/src/cli/share.ts +1 -1
  275. package/src/cli/skills-eval.ts +11 -11
  276. package/src/cli/targets.ts +23 -24
  277. package/src/cli/trace-inspect.ts +1 -1
  278. package/src/cli/trace.ts +41 -0
  279. package/src/cli/uninstall.ts +2 -2
  280. package/src/cli/upgrade.ts +29 -34
  281. package/src/cli/usage.ts +2 -2
  282. package/src/cli/validate-model.ts +1 -1
  283. package/src/cli/verifiers-inspect.ts +1 -1
  284. package/src/cli/wiki-generate.ts +5 -5
  285. package/src/core/bash-exec.ts +1 -1
  286. package/src/core/boot-trace.ts +3 -3
  287. package/src/core/bus-trace.ts +2 -2
  288. package/src/core/compile-cache.ts +1 -1
  289. package/src/core/config.ts +1062 -886
  290. package/src/core/defaults.ts +321 -528
  291. package/src/core/domain-loader.ts +6 -4
  292. package/src/core/event-bus.ts +1 -1
  293. package/src/core/file-references.ts +78 -88
  294. package/src/core/git-commit-attribution.ts +3 -9
  295. package/src/core/guardrails.ts +24 -4
  296. package/src/core/naming-compat.ts +45 -0
  297. package/src/core/naming-events.ts +62 -0
  298. package/src/core/recent-models.ts +1 -7
  299. package/src/core/residency-protection.ts +4 -8
  300. package/src/core/resolve-config-value.ts +1 -1
  301. package/src/core/response-model-id.ts +0 -14
  302. package/src/core/session-routing.ts +84 -74
  303. package/src/core/skill-activation.ts +18 -0
  304. package/src/core/termination.ts +4 -4
  305. package/src/core/timers.ts +2 -12
  306. package/src/domains/agents/catalog.ts +2 -12
  307. package/src/domains/agents/extension.ts +3 -3
  308. package/src/domains/agents/registry.ts +7 -7
  309. package/src/domains/agents/result-contract.ts +1 -1
  310. package/src/domains/agents/spec.ts +0 -11
  311. package/src/domains/config/classify.ts +35 -47
  312. package/src/domains/config/extension.ts +5 -5
  313. package/src/domains/config/keybindings.ts +48 -47
  314. package/src/domains/config/watcher.ts +1 -1
  315. package/src/domains/context/codewiki/indexer.ts +1 -1
  316. package/src/domains/context/extension.ts +3 -3
  317. package/src/domains/context/prompt-context.ts +1 -1
  318. package/src/domains/context/wiki/assemble.ts +2 -2
  319. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  320. package/src/domains/context/working-set/replay/report.ts +1 -1
  321. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  322. package/src/domains/dispatch/active-route-planner.ts +2 -2
  323. package/src/domains/dispatch/agent-candidates.ts +1 -1
  324. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  325. package/src/domains/dispatch/agent-ledger.ts +1 -1
  326. package/src/domains/dispatch/assignment.ts +5 -5
  327. package/src/domains/dispatch/capacity-lease.ts +2 -5
  328. package/src/domains/dispatch/code-step.ts +1 -1
  329. package/src/domains/dispatch/contract.ts +2 -2
  330. package/src/domains/dispatch/extension.ts +65 -61
  331. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  332. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  333. package/src/domains/dispatch/fleet-run.ts +0 -7
  334. package/src/domains/dispatch/gate-decisions.ts +25 -14
  335. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  336. package/src/domains/dispatch/path-scope.ts +0 -61
  337. package/src/domains/dispatch/placement.ts +2 -2
  338. package/src/domains/dispatch/receipt-findings.ts +1 -1
  339. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  340. package/src/domains/dispatch/reservation-store.ts +0 -23
  341. package/src/domains/dispatch/route-decision.ts +1 -1
  342. package/src/domains/dispatch/route-history.ts +1 -1
  343. package/src/domains/dispatch/route-policy.ts +1 -1
  344. package/src/domains/dispatch/route-readiness.ts +0 -28
  345. package/src/domains/dispatch/run-event-journal.ts +6 -5
  346. package/src/domains/dispatch/tool-stats.ts +1 -1
  347. package/src/domains/dispatch/transport.ts +2 -19
  348. package/src/domains/dispatch/types.ts +3 -3
  349. package/src/domains/dispatch/worker-protocol.ts +2 -2
  350. package/src/domains/eval/artifacts/store.ts +5 -4
  351. package/src/domains/eval/compare/thresholds.ts +0 -8
  352. package/src/domains/eval/execution-provenance.ts +1 -1
  353. package/src/domains/eval/metrics/token-stream.ts +0 -7
  354. package/src/domains/eval/report.ts +1 -1
  355. package/src/domains/eval/runner.ts +1 -1
  356. package/src/domains/eval/runners/clio-run.ts +7 -6
  357. package/src/domains/eval/runners/external-command.ts +4 -3
  358. package/src/domains/eval/schema/artifact.ts +1 -1
  359. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  360. package/src/domains/eval/schema/behavioral.ts +7 -6
  361. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  362. package/src/domains/eval/schema/naming.ts +10 -0
  363. package/src/domains/eval/schema/suite.ts +2 -2
  364. package/src/domains/eval/schema/validate.ts +9 -5
  365. package/src/domains/eval/schema/verdict.ts +4 -2
  366. package/src/domains/eval/store.ts +12 -2
  367. package/src/domains/eval/suites/run.ts +12 -6
  368. package/src/domains/eval/types.ts +1 -1
  369. package/src/domains/eval/workspaces/git.ts +1 -1
  370. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  371. package/src/domains/evidence/build.ts +13 -5
  372. package/src/domains/interop/consent.ts +7 -7
  373. package/src/domains/interop/extension.ts +1 -1
  374. package/src/domains/lifecycle/doctor.ts +27 -21
  375. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  376. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  377. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  378. package/src/domains/lifecycle/migrations/index.ts +20 -1
  379. package/src/domains/lifecycle/naming-history.ts +153 -0
  380. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  381. package/src/domains/lifecycle/naming-resources.ts +261 -0
  382. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  383. package/src/domains/lifecycle/naming-yazi.ts +81 -0
  384. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  385. package/src/domains/memory/task-memory-handoff.ts +6 -3
  386. package/src/domains/middleware/index.ts +7 -0
  387. package/src/domains/middleware/marketplace-offer.ts +339 -0
  388. package/src/domains/middleware/runtime.ts +2 -2
  389. package/src/domains/mux/contract.ts +157 -25
  390. package/src/domains/mux/detect.ts +29 -5
  391. package/src/domains/mux/dock-controller.ts +365 -0
  392. package/src/domains/mux/extension.ts +7 -1
  393. package/src/domains/mux/index.ts +20 -0
  394. package/src/domains/mux/operations.ts +28 -0
  395. package/src/domains/mux/protocol.ts +19 -6
  396. package/src/domains/mux/socket-client.ts +167 -19
  397. package/src/domains/mux/types.ts +49 -6
  398. package/src/domains/mux/yazi/event-stream.ts +6 -4
  399. package/src/domains/mux/yazi/profile.ts +1 -1
  400. package/src/domains/mux/yazi/session.ts +26 -3
  401. package/src/domains/observability/extension.ts +1 -1
  402. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  403. package/src/domains/observability/projection.ts +1 -1
  404. package/src/domains/observability/trace-store.ts +22 -12
  405. package/src/domains/prompts/compiler.ts +2 -2
  406. package/src/domains/prompts/extension.ts +3 -3
  407. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
  408. package/src/domains/prompts/fragments/operating/skills.md +25 -18
  409. package/src/domains/providers/extension.ts +5 -5
  410. package/src/domains/providers/knowledge-base-path.ts +1 -1
  411. package/src/domains/providers/model-runtime-capabilities.ts +14 -2
  412. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  413. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
  414. package/src/domains/providers/plugins.ts +1 -1
  415. package/src/domains/providers/resolver.ts +1 -1
  416. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  417. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  418. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  419. package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
  420. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  421. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  422. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  423. package/src/domains/providers/types/knowledge-base.ts +13 -0
  424. package/src/domains/providers/types/local-model-quirks.ts +2 -2
  425. package/src/domains/providers/types/target-descriptor.ts +3 -3
  426. package/src/domains/resources/extension.ts +1 -1
  427. package/src/domains/resources/library.ts +6 -6
  428. package/src/domains/resources/prompts/loader.ts +1 -1
  429. package/src/domains/resources/skills/content-hash.ts +7 -6
  430. package/src/domains/resources/skills/evals.ts +1 -1
  431. package/src/domains/resources/skills/install.ts +36 -12
  432. package/src/domains/resources/skills/loader.ts +39 -13
  433. package/src/domains/resources/skills/marketplace.ts +21 -2
  434. package/src/domains/resources/skills/promotion.ts +214 -0
  435. package/src/domains/safety/audit.ts +2 -2
  436. package/src/domains/safety/finish-contract.ts +2 -1
  437. package/src/domains/safety/run-effects.ts +1 -1
  438. package/src/domains/scheduling/extension.ts +4 -4
  439. package/src/domains/session/archive-readers.ts +9 -1
  440. package/src/domains/session/compaction/branch-summary.ts +4 -0
  441. package/src/domains/session/compaction/compact.ts +1 -1
  442. package/src/domains/session/compaction/tokens.ts +4 -0
  443. package/src/domains/session/context-accounting.ts +1 -1
  444. package/src/domains/session/decision-board.ts +1 -1
  445. package/src/domains/session/extension.ts +1 -1
  446. package/src/domains/session/handoff.ts +2 -2
  447. package/src/domains/session/prompt-manifest.ts +0 -5
  448. package/src/domains/session/protected-artifact-journal.ts +12 -6
  449. package/src/domains/session/retry.ts +1 -1
  450. package/src/domains/share/archive.ts +85 -36
  451. package/src/domains/toolchain/install.ts +1 -1
  452. package/src/engine/acp/adapter.ts +3 -3
  453. package/src/engine/acp/event-mapper.ts +3 -3
  454. package/src/engine/acp/server.ts +27 -26
  455. package/src/engine/acp/tool-mediator.ts +2 -2
  456. package/src/engine/acp/types.ts +1 -1
  457. package/src/engine/alcf-oauth.ts +5 -5
  458. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  459. package/src/engine/api-registry.ts +1 -1
  460. package/src/engine/apis/llamacpp-residency.ts +1 -19
  461. package/src/engine/apis/lmstudio.ts +1 -6
  462. package/src/engine/apis/ollama-native.ts +3 -3
  463. package/src/engine/apis/openai-completions.ts +2 -2
  464. package/src/engine/apis/residency.ts +3 -9
  465. package/src/engine/claude/sdk-module.ts +1 -12
  466. package/src/engine/claude/sdk-runtime.ts +6 -6
  467. package/src/engine/claude/subprocess-runtime.ts +1 -1
  468. package/src/engine/claude/tool-safety.ts +4 -4
  469. package/src/engine/loop-guard.ts +0 -5
  470. package/src/engine/session.ts +14 -7
  471. package/src/engine/tui-primitives.ts +1 -1
  472. package/src/engine/worker-events.ts +6 -6
  473. package/src/engine/worker-runtime.ts +14 -13
  474. package/src/entry/orchestrator.ts +107 -88
  475. package/src/interactive/application-controller.ts +21 -21
  476. package/src/interactive/bus-notices.ts +2 -2
  477. package/src/interactive/chat-loop.ts +8 -8
  478. package/src/interactive/chat-panel.ts +1 -1
  479. package/src/interactive/clio-editor.ts +105 -1
  480. package/src/interactive/context-activity.ts +8 -6
  481. package/src/interactive/context-meter.ts +3 -6
  482. package/src/interactive/context-overlay.ts +1 -1
  483. package/src/interactive/cost-overlay.ts +1 -1
  484. package/src/interactive/council-grid.ts +2 -2
  485. package/src/interactive/dispatch-board.ts +30 -33
  486. package/src/interactive/editor-bash.ts +21 -0
  487. package/src/interactive/editor-steer.ts +9 -4
  488. package/src/interactive/editor-submit.ts +24 -18
  489. package/src/interactive/external-editor.ts +1 -1
  490. package/src/interactive/file-reference-completion.ts +360 -0
  491. package/src/interactive/footer/dashboard.ts +15 -17
  492. package/src/interactive/footer/notifications.ts +14 -8
  493. package/src/interactive/footer/widgets.ts +2 -44
  494. package/src/interactive/interactive-application.ts +79 -59
  495. package/src/interactive/interactive-event-projection.ts +1 -1
  496. package/src/interactive/interactive-input-runtime.ts +2 -2
  497. package/src/interactive/interactive-presentation.ts +21 -16
  498. package/src/interactive/interactive-shell.ts +2 -2
  499. package/src/interactive/interactive-slash-runtime.ts +63 -17
  500. package/src/interactive/interactive-subscriptions.ts +1 -1
  501. package/src/interactive/interactive-tickers.ts +1 -1
  502. package/src/interactive/keybinding-manager.ts +4 -4
  503. package/src/interactive/layout.ts +1 -1
  504. package/src/interactive/memory-overlay.ts +2 -2
  505. package/src/interactive/modal-marker.ts +2 -21
  506. package/src/interactive/mutation-preview.ts +1 -1
  507. package/src/interactive/overlay-frame.ts +4 -12
  508. package/src/interactive/overlay-general-openers.ts +6 -2
  509. package/src/interactive/overlay-key-routing.ts +7 -7
  510. package/src/interactive/overlay-lifecycle.ts +1 -1
  511. package/src/interactive/overlay-model-selectors.ts +3 -3
  512. package/src/interactive/overlays/agents.ts +2 -2
  513. package/src/interactive/overlays/ask-user.ts +25 -11
  514. package/src/interactive/overlays/context-reset.ts +28 -4
  515. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  516. package/src/interactive/overlays/decisions.ts +4 -2
  517. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  518. package/src/interactive/overlays/handoff-review.ts +2 -2
  519. package/src/interactive/overlays/interop.ts +1 -1
  520. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  521. package/src/interactive/overlays/message-picker.ts +1 -1
  522. package/src/interactive/overlays/model-selector.ts +39 -31
  523. package/src/interactive/overlays/prompts.ts +10 -4
  524. package/src/interactive/overlays/session-selector.ts +2 -2
  525. package/src/interactive/overlays/settings.ts +339 -293
  526. package/src/interactive/overlays/side-question.ts +2 -2
  527. package/src/interactive/overlays/skills-hub.ts +8 -8
  528. package/src/interactive/overlays/tree-selector.ts +2 -2
  529. package/src/interactive/panes-runtime.ts +36 -10
  530. package/src/interactive/permission-overlay.ts +2 -2
  531. package/src/interactive/renderers/retry-status.ts +12 -4
  532. package/src/interactive/renderers/tool-execution.ts +4 -4
  533. package/src/interactive/session-transcript.ts +3 -3
  534. package/src/interactive/slash-autocomplete.ts +454 -165
  535. package/src/interactive/slash-commands.ts +279 -183
  536. package/src/interactive/slash-spec.ts +160 -17
  537. package/src/interactive/status/controller.ts +2 -2
  538. package/src/interactive/stream-pacing-policy.ts +1 -1
  539. package/src/interactive/tasks-overlay.ts +20 -13
  540. package/src/interactive/terminal-lease.ts +6 -7
  541. package/src/interactive/turn-context.ts +11 -11
  542. package/src/interactive/turn-persistence.ts +2 -2
  543. package/src/interactive/turn-prewarm.ts +2 -2
  544. package/src/interactive/turn-runtime.ts +8 -8
  545. package/src/interactive/turn-state.ts +1 -1
  546. package/src/interactive/view/artifacts.ts +12 -9
  547. package/src/interactive/view/view-overlay.ts +13 -10
  548. package/src/interactive/watch-pane.ts +38 -10
  549. package/src/interactive/welcome-dashboard.ts +15 -15
  550. package/src/interactive/worker-progress.ts +4 -4
  551. package/src/interactive/worker-receipts.ts +1 -1
  552. package/src/interactive/worker-stream.ts +1 -4
  553. package/src/interactive/yazi-bridge.ts +12 -5
  554. package/src/tools/ask-user.ts +3 -3
  555. package/src/tools/bash.ts +1 -1
  556. package/src/tools/builtin-tool-catalog.ts +1 -1
  557. package/src/tools/compete-worktrees.ts +27 -17
  558. package/src/tools/context/index.ts +15 -1
  559. package/src/tools/dispatch-admission.ts +4 -2
  560. package/src/tools/dispatch-arguments.ts +1 -1
  561. package/src/tools/dispatch-plan.ts +0 -11
  562. package/src/tools/dispatch-run-events.ts +12 -10
  563. package/src/tools/dispatch-runner.ts +11 -6
  564. package/src/tools/dispatch.ts +1 -1
  565. package/src/tools/find.ts +1 -6
  566. package/src/tools/monitor.ts +4 -4
  567. package/src/tools/observers.ts +0 -33
  568. package/src/tools/task-worktree.ts +28 -7
  569. package/src/tools/verify/authoring.ts +3 -6
  570. package/src/tools/verify/frontend.ts +1 -1
  571. package/src/tools/web-fetch.ts +1 -1
  572. package/src/worker/entry.ts +4 -3
  573. package/src/worker/protocol.ts +16 -14
  574. package/src/worker/spec-contract.ts +2 -2
  575. package/src/worker/stdin-demux.ts +2 -2
  576. package/dist/chunk-GXNLGKAB.js +0 -571
  577. package/dist/chunk-VFA6GDY5.js +0 -1625
  578. package/dist/doctor-QOA5FNY5.js +0 -313
  579. package/src/engine/apis/degraded-inference.ts +0 -95
  580. /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
  581. /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
@@ -18,7 +18,7 @@
18
18
 
19
19
  import type { ClioSettings } from "./config.js";
20
20
 
21
- type SessionThinkingLevel = ClioSettings["orchestrator"]["thinkingLevel"];
21
+ type SessionThinkingLevel = ClioSettings["chat"]["thinkingLevel"];
22
22
 
23
23
  export interface SessionRoutingTarget {
24
24
  target: string | null;
@@ -28,7 +28,7 @@ export interface SessionRoutingTarget {
28
28
 
29
29
  export interface SessionRoutingState {
30
30
  orchestrator: SessionRoutingTarget;
31
- background: SessionRoutingTarget;
31
+ background: Pick<SessionRoutingTarget, "target" | "model">;
32
32
  workersDefault: SessionRoutingTarget;
33
33
  scope: string[];
34
34
  }
@@ -40,7 +40,7 @@ export interface SessionRoutingState {
40
40
  */
41
41
  export interface RoutingPatch {
42
42
  orchestrator?: Partial<SessionRoutingTarget>;
43
- background?: Partial<SessionRoutingTarget>;
43
+ background?: Partial<Pick<SessionRoutingTarget, "target" | "model">>;
44
44
  workersDefault?: Partial<SessionRoutingTarget>;
45
45
  scope?: string[];
46
46
  }
@@ -59,10 +59,10 @@ function targetFrom(source: {
59
59
 
60
60
  export function seedSessionRouting(saved: Readonly<ClioSettings>): SessionRoutingState {
61
61
  return {
62
- orchestrator: targetFrom(saved.orchestrator),
63
- background: targetFrom(saved.background),
64
- workersDefault: targetFrom(saved.workers.default),
65
- scope: [...(saved.scope ?? [])],
62
+ orchestrator: targetFrom(saved.chat),
63
+ background: { target: saved.context.memory.target, model: saved.context.memory.model },
64
+ workersDefault: targetFrom(saved.fleet.default),
65
+ scope: [...saved.chat.modelPicker.cycleSet],
66
66
  };
67
67
  }
68
68
 
@@ -73,16 +73,15 @@ export function seedSessionRouting(saved: Readonly<ClioSettings>): SessionRoutin
73
73
  */
74
74
  export function applySessionRouting(saved: Readonly<ClioSettings>, routing: SessionRoutingState): ClioSettings {
75
75
  const view = structuredClone(saved) as ClioSettings;
76
- view.orchestrator.target = routing.orchestrator.target;
77
- view.orchestrator.model = routing.orchestrator.model;
78
- view.orchestrator.thinkingLevel = routing.orchestrator.thinkingLevel;
79
- view.background.target = routing.background.target;
80
- view.background.model = routing.background.model;
81
- view.background.thinkingLevel = routing.background.thinkingLevel;
82
- view.workers.default.target = routing.workersDefault.target;
83
- view.workers.default.model = routing.workersDefault.model;
84
- view.workers.default.thinkingLevel = routing.workersDefault.thinkingLevel;
85
- view.scope = [...routing.scope];
76
+ view.chat.target = routing.orchestrator.target;
77
+ view.chat.model = routing.orchestrator.model;
78
+ view.chat.thinkingLevel = routing.orchestrator.thinkingLevel;
79
+ view.context.memory.target = routing.background.target;
80
+ view.context.memory.model = routing.background.model;
81
+ view.fleet.default.target = routing.workersDefault.target;
82
+ view.fleet.default.model = routing.workersDefault.model;
83
+ view.fleet.default.thinkingLevel = routing.workersDefault.thinkingLevel;
84
+ view.chat.modelPicker.cycleSet = [...routing.scope];
86
85
  return view;
87
86
  }
88
87
 
@@ -107,14 +106,21 @@ export type SessionOverrides = Map<string, unknown>;
107
106
 
108
107
  /** True for the dotted paths owned by the session routing state (never overrides). */
109
108
  export function isRoutingPath(path: string): boolean {
110
- return (
111
- path === "scope" ||
112
- path.startsWith("orchestrator.") ||
113
- path.startsWith("background.") ||
114
- path.startsWith("workers.default.")
115
- );
109
+ return ROUTING_PATHS.has(path);
116
110
  }
117
111
 
112
+ const ROUTING_PATHS = new Set<string>([
113
+ "chat.target",
114
+ "chat.model",
115
+ "chat.thinkingLevel",
116
+ "context.memory.target",
117
+ "context.memory.model",
118
+ "fleet.default.target",
119
+ "fleet.default.model",
120
+ "fleet.default.thinkingLevel",
121
+ "chat.modelPicker.cycleSet",
122
+ ]);
123
+
118
124
  /** Read a leaf from a settings blob by dotted object path. Missing ⇒ undefined. */
119
125
  export function getAtPath(source: Readonly<ClioSettings>, path: string): unknown {
120
126
  let cursor: unknown = source;
@@ -159,10 +165,10 @@ export function applyOverrides(base: Readonly<ClioSettings>, overrides: SessionO
159
165
 
160
166
  /** Write-through of a routing patch onto a (cloned) saved-settings blob. */
161
167
  export function mergeRoutingPatchIntoSettings(settings: ClioSettings, patch: RoutingPatch): void {
162
- if (patch.orchestrator) Object.assign(settings.orchestrator, patch.orchestrator);
163
- if (patch.background) Object.assign(settings.background, patch.background);
164
- if (patch.workersDefault) Object.assign(settings.workers.default, patch.workersDefault);
165
- if (patch.scope) settings.scope = [...patch.scope];
168
+ if (patch.orchestrator) Object.assign(settings.chat, patch.orchestrator);
169
+ if (patch.background) Object.assign(settings.context.memory, patch.background);
170
+ if (patch.workersDefault) Object.assign(settings.fleet.default, patch.workersDefault);
171
+ if (patch.scope) settings.chat.modelPicker.cycleSet = [...patch.scope];
166
172
  }
167
173
 
168
174
  /**
@@ -176,26 +182,24 @@ export function mergeRoutingPatchIntoSettings(settings: ClioSettings, patch: Rou
176
182
  */
177
183
  export function routingPatchForId(path: string, settings: Readonly<ClioSettings>): RoutingPatch | null {
178
184
  switch (path) {
179
- case "orchestrator.target":
180
- return { orchestrator: { target: settings.orchestrator.target, model: settings.orchestrator.model } };
181
- case "orchestrator.model":
182
- return { orchestrator: { model: settings.orchestrator.model } };
183
- case "orchestrator.thinkingLevel":
184
- return { orchestrator: { thinkingLevel: settings.orchestrator.thinkingLevel } };
185
- case "background.target":
186
- return { background: { target: settings.background.target, model: settings.background.model } };
187
- case "background.model":
188
- return { background: { model: settings.background.model } };
189
- case "background.thinkingLevel":
190
- return { background: { thinkingLevel: settings.background.thinkingLevel } };
191
- case "workers.default.target":
192
- return { workersDefault: { target: settings.workers.default.target, model: settings.workers.default.model } };
193
- case "workers.default.model":
194
- return { workersDefault: { model: settings.workers.default.model } };
195
- case "workers.default.thinkingLevel":
196
- return { workersDefault: { thinkingLevel: settings.workers.default.thinkingLevel } };
197
- case "scope":
198
- return { scope: [...(settings.scope ?? [])] };
185
+ case "chat.target":
186
+ return { orchestrator: { target: settings.chat.target, model: settings.chat.model } };
187
+ case "chat.model":
188
+ return { orchestrator: { model: settings.chat.model } };
189
+ case "chat.thinkingLevel":
190
+ return { orchestrator: { thinkingLevel: settings.chat.thinkingLevel } };
191
+ case "context.memory.target":
192
+ return { background: { target: settings.context.memory.target, model: settings.context.memory.model } };
193
+ case "context.memory.model":
194
+ return { background: { model: settings.context.memory.model } };
195
+ case "fleet.default.target":
196
+ return { workersDefault: { target: settings.fleet.default.target, model: settings.fleet.default.model } };
197
+ case "fleet.default.model":
198
+ return { workersDefault: { model: settings.fleet.default.model } };
199
+ case "fleet.default.thinkingLevel":
200
+ return { workersDefault: { thinkingLevel: settings.fleet.default.thinkingLevel } };
201
+ case "chat.modelPicker.cycleSet":
202
+ return { scope: [...settings.chat.modelPicker.cycleSet] };
199
203
  default:
200
204
  return null;
201
205
  }
@@ -224,13 +228,17 @@ function scopeEquals(a: ReadonlyArray<string>, b: ReadonlyArray<string>): boolea
224
228
  */
225
229
  export function diffRouting(prev: Readonly<ClioSettings>, next: Readonly<ClioSettings>): RoutingPatch | null {
226
230
  const patch: RoutingPatch = {};
227
- const orchestrator = diffTarget(prev.orchestrator, next.orchestrator);
231
+ const orchestrator = diffTarget(prev.chat, next.chat);
228
232
  if (orchestrator) patch.orchestrator = orchestrator;
229
- const background = diffTarget(prev.background, next.background);
233
+ const background = diffTarget(
234
+ { ...prev.context.memory, thinkingLevel: "off" },
235
+ { ...next.context.memory, thinkingLevel: "off" },
236
+ );
230
237
  if (background) patch.background = background;
231
- const workersDefault = diffTarget(prev.workers.default, next.workers.default);
238
+ const workersDefault = diffTarget(prev.fleet.default, next.fleet.default);
232
239
  if (workersDefault) patch.workersDefault = workersDefault;
233
- if (!scopeEquals(prev.scope ?? [], next.scope ?? [])) patch.scope = [...(next.scope ?? [])];
240
+ if (!scopeEquals(prev.chat.modelPicker.cycleSet, next.chat.modelPicker.cycleSet))
241
+ patch.scope = [...next.chat.modelPicker.cycleSet];
234
242
  return Object.keys(patch).length > 0 ? patch : null;
235
243
  }
236
244
 
@@ -241,16 +249,15 @@ export function diffRouting(prev: Readonly<ClioSettings>, next: Readonly<ClioSet
241
249
  * saved routing defaults with this session's live routing.
242
250
  */
243
251
  export function restoreRoutingFields(target: ClioSettings, source: Readonly<ClioSettings>): void {
244
- target.orchestrator.target = source.orchestrator.target;
245
- target.orchestrator.model = source.orchestrator.model;
246
- target.orchestrator.thinkingLevel = source.orchestrator.thinkingLevel;
247
- target.background.target = source.background.target;
248
- target.background.model = source.background.model;
249
- target.background.thinkingLevel = source.background.thinkingLevel;
250
- target.workers.default.target = source.workers.default.target;
251
- target.workers.default.model = source.workers.default.model;
252
- target.workers.default.thinkingLevel = source.workers.default.thinkingLevel;
253
- target.scope = [...(source.scope ?? [])];
252
+ target.chat.target = source.chat.target;
253
+ target.chat.model = source.chat.model;
254
+ target.chat.thinkingLevel = source.chat.thinkingLevel;
255
+ target.context.memory.target = source.context.memory.target;
256
+ target.context.memory.model = source.context.memory.model;
257
+ target.fleet.default.target = source.fleet.default.target;
258
+ target.fleet.default.model = source.fleet.default.model;
259
+ target.fleet.default.thinkingLevel = source.fleet.default.thinkingLevel;
260
+ target.chat.modelPicker.cycleSet = [...source.chat.modelPicker.cycleSet];
254
261
  }
255
262
 
256
263
  const ROUTING_FIELD_LABELS: ReadonlyArray<{
@@ -258,20 +265,23 @@ const ROUTING_FIELD_LABELS: ReadonlyArray<{
258
265
  label: string;
259
266
  read: (settings: Readonly<ClioSettings>) => unknown;
260
267
  }> = [
261
- { field: "orchestrator.target", label: "chat target", read: (s) => s.orchestrator.target ?? null },
262
- { field: "orchestrator.model", label: "chat model", read: (s) => s.orchestrator.model ?? null },
263
- { field: "orchestrator.thinkingLevel", label: "chat thinking", read: (s) => s.orchestrator.thinkingLevel ?? "off" },
264
- { field: "background.target", label: "background target", read: (s) => s.background.target ?? null },
265
- { field: "background.model", label: "background model", read: (s) => s.background.model ?? null },
266
- { field: "background.thinkingLevel", label: "background thinking", read: (s) => s.background.thinkingLevel ?? "off" },
267
- { field: "workers.default.target", label: "fleet target", read: (s) => s.workers.default.target ?? null },
268
- { field: "workers.default.model", label: "fleet model", read: (s) => s.workers.default.model ?? null },
268
+ { field: "chat.target", label: "chat target", read: (s) => s.chat.target ?? null },
269
+ { field: "chat.model", label: "chat model", read: (s) => s.chat.model ?? null },
270
+ { field: "chat.thinkingLevel", label: "chat thinking", read: (s) => s.chat.thinkingLevel ?? "off" },
271
+ { field: "context.memory.target", label: "memory target", read: (s) => s.context.memory.target ?? null },
272
+ { field: "context.memory.model", label: "memory model", read: (s) => s.context.memory.model ?? null },
273
+ { field: "fleet.default.target", label: "fleet target", read: (s) => s.fleet.default.target ?? null },
274
+ { field: "fleet.default.model", label: "fleet model", read: (s) => s.fleet.default.model ?? null },
269
275
  {
270
- field: "workers.default.thinkingLevel",
276
+ field: "fleet.default.thinkingLevel",
271
277
  label: "fleet thinking",
272
- read: (s) => s.workers.default.thinkingLevel ?? "off",
278
+ read: (s) => s.fleet.default.thinkingLevel ?? "off",
279
+ },
280
+ {
281
+ field: "chat.modelPicker.cycleSet",
282
+ label: "Alt+J/Alt+K cycle set",
283
+ read: (s) => s.chat.modelPicker.cycleSet.join(","),
273
284
  },
274
- { field: "scope", label: "Alt+J/Alt+K scope", read: (s) => (s.scope ?? []).join(",") },
275
285
  ];
276
286
 
277
287
  /**
@@ -282,7 +292,7 @@ const ROUTING_FIELD_LABELS: ReadonlyArray<{
282
292
  * writer — a second session, the CLI, or a manual edit — moved the defaults
283
293
  * out from under this session.
284
294
  */
285
- export function externalRoutingDivergence(
295
+ function externalRoutingDivergence(
286
296
  changedPaths: ReadonlyArray<string>,
287
297
  saved: Readonly<ClioSettings>,
288
298
  effective: Readonly<ClioSettings>,
@@ -325,7 +335,7 @@ export function routingChangeNotices(
325
335
  text: `settings.yaml changed (${diverged.join(", ")}). This session keeps its routing; new sessions use the saved defaults.${hint}`,
326
336
  });
327
337
  }
328
- const activeTarget = effective.orchestrator.target;
338
+ const activeTarget = effective.chat.target;
329
339
  const targetsTouched = changedPaths.some((path) => path === "targets" || path.startsWith("targets."));
330
340
  if (activeTarget && targetsTouched && !saved.targets.some((entry) => entry.id === activeTarget)) {
331
341
  const hint = options?.commandHints ? " (/model)" : "";
@@ -19,6 +19,24 @@ export const SKILL_SUGGESTION_ANCHOR = "Suggested skill: /skill <name>";
19
19
  */
20
20
  export const SKILL_SUGGESTION_PREFIX = SKILL_SUGGESTION_ANCHOR.slice(0, SKILL_SUGGESTION_ANCHOR.indexOf("<name>"));
21
21
 
22
+ /**
23
+ * The four fixed answer labels of a marketplace install offer. Every surface
24
+ * that teaches or reads the offer (the marketplace-offer middleware, the
25
+ * skills fragment, the context listing footer) cites these exact strings, so
26
+ * the after_tool observer that records declines and runs consented installs
27
+ * recognizes the operator's choice by label identity, never by paraphrase.
28
+ */
29
+ export const SKILL_INSTALL_OFFER_OPTION_PROJECT = "Install for this project";
30
+ export const SKILL_INSTALL_OFFER_OPTION_USER = "Install globally";
31
+ export const SKILL_INSTALL_OFFER_OPTION_NOT_NOW = "Not now";
32
+ export const SKILL_INSTALL_OFFER_OPTION_NEVER = "Never offer this skill";
33
+ export const SKILL_INSTALL_OFFER_OPTIONS = [
34
+ SKILL_INSTALL_OFFER_OPTION_PROJECT,
35
+ SKILL_INSTALL_OFFER_OPTION_USER,
36
+ SKILL_INSTALL_OFFER_OPTION_NOT_NOW,
37
+ SKILL_INSTALL_OFFER_OPTION_NEVER,
38
+ ] as const;
39
+
22
40
  export interface PendingSkillRequest {
23
41
  name: string;
24
42
  args: string;
@@ -37,7 +37,7 @@ const SIGNAL_EXIT_CODES: Partial<Record<NodeJS.Signals, number>> = {
37
37
  * Break `text` into lines no wider than `width` columns, at spaces where
38
38
  * possible and mid-word when a single token is wider than the terminal.
39
39
  */
40
- export function wrapToWidth(text: string, width: number): string[] {
40
+ function wrapToWidth(text: string, width: number): string[] {
41
41
  if (!Number.isFinite(width) || width < 1) return [text];
42
42
  const lines: string[] = [];
43
43
  let current = "";
@@ -156,7 +156,7 @@ class TerminationCoordinator {
156
156
  const log = (msg: string): void => {
157
157
  if (!debug) return;
158
158
  const ms = Number(process.hrtime.bigint() - mark) / 1e6;
159
- process.stderr.write(`[clio:shutdown] +${ms.toFixed(1)}ms ${msg}\n`);
159
+ process.stderr.write(`[clio-coder:shutdown] +${ms.toFixed(1)}ms ${msg}\n`);
160
160
  };
161
161
 
162
162
  this.phase = "draining";
@@ -193,12 +193,12 @@ class TerminationCoordinator {
193
193
  const t0 = process.hrtime.bigint();
194
194
  const completed = await runWithBudget(hook, budgetMs, (err) => {
195
195
  const message = err instanceof Error ? err.message : String(err);
196
- writeShutdownNotice(`[clio:termination] ${phase}[${i}] failed: ${message}`);
196
+ writeShutdownNotice(`[clio-coder:termination] ${phase}[${i}] failed: ${message}`);
197
197
  if (err instanceof Error && err.stack) log(err.stack);
198
198
  });
199
199
  const dt = Number(process.hrtime.bigint() - t0) / 1e6;
200
200
  if (!completed) {
201
- writeShutdownNotice(`[clio:termination] ${phase}[${i}] exceeded ${budgetMs}ms budget; shutdown continues`);
201
+ writeShutdownNotice(`[clio-coder:termination] ${phase}[${i}] exceeded ${budgetMs}ms budget; shutdown continues`);
202
202
  }
203
203
  log(` ${phase}[${i}] ${dt.toFixed(1)}ms${completed ? "" : " (timed out)"}`);
204
204
  }
@@ -14,8 +14,6 @@ export function sleep(ms: number): Promise<void> {
14
14
  return new Promise((resolve) => setTimeout(resolve, ms));
15
15
  }
16
16
 
17
- let negativeDurations = 0;
18
-
19
17
  /**
20
18
  * Elapsed between two reads of the same clock, signed.
21
19
  *
@@ -23,16 +21,8 @@ let negativeDurations = 0;
23
21
  * an NTP correction, a resume, or a duration derived across two hosts — and it
24
22
  * is a bug in the caller, not a value to be silently swallowed. Clamping with
25
23
  * `Math.max(0, …)` hides that, so the clamp belongs at the render boundary and
26
- * nothing else. Every occurrence is counted; nothing is written to stderr,
27
- * because the TUI owns that stream and this sits on hot measurement paths.
24
+ * nothing else.
28
25
  */
29
26
  export function rawDurationMs(start: number, end: number): number {
30
- const elapsed = end - start;
31
- if (elapsed < 0) negativeDurations += 1;
32
- return elapsed;
33
- }
34
-
35
- /** How many negative durations this process has produced since it started. */
36
- export function negativeDurationCount(): number {
37
- return negativeDurations;
27
+ return end - start;
38
28
  }
@@ -1,5 +1,4 @@
1
- import type { AgentRecipe } from "./recipe.js";
2
- import { type AgentSpec, isUserVisibleAgent, normalizeAgentSpec } from "./spec.js";
1
+ import { type AgentSpec, isUserVisibleAgent } from "./spec.js";
3
2
 
4
3
  const DEFAULT_DISPATCH_AGENT_ID = "coder";
5
4
 
@@ -20,10 +19,6 @@ export interface AgentCatalogSections {
20
19
  volatile: string;
21
20
  }
22
21
 
23
- function renderAgentCatalogSections(recipes: ReadonlyArray<AgentRecipe>): AgentCatalogSections {
24
- return renderAgentCatalogSectionsFromSpecs(recipes.map(normalizeAgentSpec));
25
- }
26
-
27
22
  /** Keeps one roster line short enough that the whole fleet block stays near its token budget. */
28
23
  const FLEET_PROMPT_PURPOSE_MAX_CHARS = 64;
29
24
 
@@ -129,7 +124,7 @@ export function renderFleetPromptSection(input: ReadonlyArray<AgentSpec>): strin
129
124
  /**
130
125
  * Spec-based roster used when the caller already holds normalized specs.
131
126
  * `AgentsContract.listSpecs()` includes ACP delegation agents synthesized from
132
- * settings.delegation.agents[], which never exist as recipe files; rendering
127
+ * settings.integrations.externalAgents.entries[], which never exist as recipe files; rendering
133
128
  * from specs keeps those dispatchable targets discoverable in the fleet block.
134
129
  */
135
130
  export function renderAgentCatalogSectionsFromSpecs(input: ReadonlyArray<AgentSpec>): AgentCatalogSections {
@@ -178,8 +173,3 @@ function formatSpecLine(spec: AgentSpec, suffix: string): string {
178
173
  const budget = `, budget=${spec.budget.toolCalls}/${spec.budget.readReserve}${maximum}/${spec.budget.synthesis ? "synthesize" : "stop"}`;
179
174
  return `- ${spec.name} [${spec.id}] (${spec.audience}, ${spec.category}, ${spec.capabilityClass}, ${spec.latencyClass}, ${spec.source}${tags}${skills}${budget})${suffix}`;
180
175
  }
181
-
182
- export function renderAgentCatalog(recipes: ReadonlyArray<AgentRecipe>): string {
183
- const sections = renderAgentCatalogSections(recipes);
184
- return [sections.stable, sections.volatile].filter((part) => part.trim().length > 0).join("\n\n");
185
- }
@@ -15,7 +15,7 @@ export function createAgentsBundle(_context: DomainContext): DomainBundle<Agents
15
15
  const nextDiagnostics: AgentRecipeDiagnostic[] = [];
16
16
  const merged = discoverAgentRecipes(process.cwd(), nextDiagnostics);
17
17
  const config = _context.getContract<ConfigContract>("config");
18
- assertAgentIdNamespace(merged, config?.get()?.delegation?.agents ?? []);
18
+ assertAgentIdNamespace(merged, config?.get()?.integrations.externalAgents?.entries ?? []);
19
19
  recipes = merged;
20
20
  specs = recipes.map(normalizeAgentSpec);
21
21
  diagnostics = nextDiagnostics;
@@ -40,7 +40,7 @@ export function createAgentsBundle(_context: DomainContext): DomainBundle<Agents
40
40
  },
41
41
  listSpecs() {
42
42
  const config = _context.getContract<ConfigContract>("config");
43
- const delegationAgents = config?.get()?.delegation?.agents ?? [];
43
+ const delegationAgents = config?.get()?.integrations.externalAgents?.entries ?? [];
44
44
  const delegationSpecs = delegationAgents.map((agent) => ({
45
45
  version: 1 as const,
46
46
  id: agent.id,
@@ -67,7 +67,7 @@ export function createAgentsBundle(_context: DomainContext): DomainBundle<Agents
67
67
  const found = specs.find((r) => r.id === id);
68
68
  if (found) return found;
69
69
  const config = _context.getContract<ConfigContract>("config");
70
- const agent = config?.get()?.delegation?.agents?.find((entry) => entry.id === id);
70
+ const agent = config?.get()?.integrations.externalAgents?.entries?.find((entry) => entry.id === id);
71
71
  if (agent) {
72
72
  return {
73
73
  version: 1 as const,
@@ -94,7 +94,7 @@ export function loadRecipesFromDir(
94
94
  if (source.source === "builtin") throw error;
95
95
  const message = error instanceof Error ? error.message : String(error);
96
96
  diagnostics.push({ source: source.source, filepath, message });
97
- process.stderr.write(`[clio:agents] quarantine path=${filepath} source=${source.source} reason=${message}\n`);
97
+ process.stderr.write(`[clio-coder:agents] quarantine path=${filepath} source=${source.source} reason=${message}\n`);
98
98
  }
99
99
  }
100
100
 
@@ -102,7 +102,7 @@ export function loadRecipesFromDir(
102
102
  return recipes;
103
103
  }
104
104
 
105
- export function mergeRecipes(...sources: ReadonlyArray<ReadonlyArray<AgentRecipe>>): ReadonlyArray<AgentRecipe> {
105
+ function mergeRecipes(...sources: ReadonlyArray<ReadonlyArray<AgentRecipe>>): ReadonlyArray<AgentRecipe> {
106
106
  const byId = new Map<string, AgentRecipe>();
107
107
  const builtinById = new Map<string, AgentRecipe>();
108
108
  for (const group of sources) {
@@ -113,23 +113,23 @@ export function mergeRecipes(...sources: ReadonlyArray<ReadonlyArray<AgentRecipe
113
113
  for (const group of sources) {
114
114
  for (const recipe of group) {
115
115
  if (recipe.source !== "builtin" && RESERVED_CUSTOM_AGENT_IDS.has(recipe.id)) {
116
- process.stderr.write(`[clio:agents] ignore id=${recipe.id} by=${recipe.source} reason=reserved-agent-id\n`);
116
+ process.stderr.write(`[clio-coder:agents] ignore id=${recipe.id} by=${recipe.source} reason=reserved-agent-id\n`);
117
117
  continue;
118
118
  }
119
119
  const builtin = builtinById.get(recipe.id);
120
120
  if (recipe.source === "extension" && builtin) {
121
- process.stderr.write(`[clio:agents] ignore override id=${recipe.id} by=extension reason=reserved-builtin\n`);
121
+ process.stderr.write(`[clio-coder:agents] ignore override id=${recipe.id} by=extension reason=reserved-builtin\n`);
122
122
  continue;
123
123
  }
124
124
  if (recipe.source === "user" && builtin && isShadowAgent(normalizeAgentSpec(builtin))) {
125
- process.stderr.write(`[clio:agents] ignore override id=${recipe.id} by=user reason=reserved-shadow\n`);
125
+ process.stderr.write(`[clio-coder:agents] ignore override id=${recipe.id} by=user reason=reserved-shadow\n`);
126
126
  continue;
127
127
  }
128
128
  if (recipe.source === "project" && builtin) {
129
- process.stderr.write(`[clio:agents] ignore override id=${recipe.id} by=project reason=reserved-builtin\n`);
129
+ process.stderr.write(`[clio-coder:agents] ignore override id=${recipe.id} by=project reason=reserved-builtin\n`);
130
130
  continue;
131
131
  }
132
- if (byId.has(recipe.id)) process.stderr.write(`[clio:agents] override id=${recipe.id} by=${recipe.source}\n`);
132
+ if (byId.has(recipe.id)) process.stderr.write(`[clio-coder:agents] override id=${recipe.id} by=${recipe.source}\n`);
133
133
  byId.set(recipe.id, recipe);
134
134
  }
135
135
  }
@@ -1601,7 +1601,7 @@ export interface ResultContractRepairInput {
1601
1601
  * One repair directive. It states the validator's reason and exact shape. Tool
1602
1602
  * use remains closed unless dispatch preauthorized a larger revision phase.
1603
1603
  */
1604
- export function resultContractRepairMessage(input: ResultContractRepairInput): string {
1604
+ function resultContractRepairMessage(input: ResultContractRepairInput): string {
1605
1605
  const last = input.attempt >= RESULT_CONTRACT_REPAIR_LIMIT;
1606
1606
  const lines = [
1607
1607
  last
@@ -137,17 +137,6 @@ export function isAgentProduct(value: unknown): value is AgentProduct {
137
137
  return includes(AGENT_PRODUCTS, value);
138
138
  }
139
139
 
140
- /**
141
- * Default tier per capability class. Reproduces the historical dispatch
142
- * allowlist byte-for-byte: workers that act on the workspace get the bounded
143
- * projection; read-only, orchestration, and internal classes get none.
144
- */
145
- export function defaultProjectContextTier(capability: AgentCapabilityClass): AgentProjectContextTier {
146
- return capability === "workspace-edit" || capability === "verification" || capability === "artifact-write"
147
- ? "bounded"
148
- : "none";
149
- }
150
-
151
140
  function actionClassesForTools(tools: ReadonlyArray<ToolName>): ReadonlySet<ActionClass> {
152
141
  const actions = new Set<ActionClass>();
153
142
  for (const tool of tools) actions.add(classify({ tool }).actionClass);
@@ -1,13 +1,10 @@
1
1
  import type { ClioSettings } from "../../core/config.js";
2
2
 
3
3
  /**
4
- * Classifies a settings change into one of three buckets per spec §13:
5
- * - hotReload : theme, keybindings, safety rules, prompt fragments,
6
- * audit verbosity. Apply immediately (≤100ms).
7
- * - nextTurn : model selection, thinking level, budget ceiling. Apply before the
8
- * next turn starts.
9
- * - restartRequired : provider credentials, active provider list, runtime enable/disable,
10
- * engine settings. Needs a restart nudge.
4
+ * Classifies a version-2 settings change into one of three effect buckets:
5
+ * - hotReload: a live reader observes the value without rebuilding runtime state.
6
+ * - nextTurn: the next request, dispatch, or explicit open observes the value.
7
+ * - restartRequired: process or pane-host setup must be rebuilt.
11
8
  *
12
9
  * Output is an exhaustive per-bucket list. A single patch can touch multiple buckets;
13
10
  * the caller emits the event(s) for every non-empty bucket.
@@ -22,59 +19,50 @@ export interface ConfigDiff {
22
19
  }
23
20
 
24
21
  const HOT_RELOAD_FIELDS = new Set<string>([
25
- "theme",
26
- "keybindings",
27
- "autonomy",
28
- "modelSelector",
29
- "terminal.smoothStreaming",
30
- "attribution.gitCommits",
22
+ "interface.keybindings",
23
+ "safety.autonomy",
24
+ "chat.modelPicker",
25
+ "interface.smoothStreaming",
26
+ "interface.panes.notifications",
27
+ "integrations.git.commitAttribution",
31
28
  // The bridge reads these on every explicit open; no mux re-detection is
32
29
  // needed because the host capability rung remains `panes.enabled`.
33
- "panes.yazi",
30
+ "interface.panes.files",
34
31
  // The watchdog registration reads its settings live on every trigger, so
35
32
  // enabling it, retargeting it, or changing its cadence takes effect on the
36
33
  // next turn boundary without a restart or a session-routing patch.
37
- "watchdog",
34
+ "safety.review",
38
35
  ]);
39
36
 
40
37
  const NEXT_TURN_FIELDS = new Set<string>([
41
- "identity",
42
38
  "targets",
43
- "orchestrator.target",
44
- "orchestrator.model",
45
- "orchestrator.thinkingLevel",
46
- "background.target",
47
- "background.model",
48
- "background.thinkingLevel",
49
- "memory",
50
- "workers.default.target",
51
- "workers.default.model",
52
- "workers.default.thinkingLevel",
53
- "workers.profiles",
54
- "workers.agentBindings",
55
- "workers.maxRetries",
56
- "workers.onPermission",
57
- "fleet",
58
- "routing",
59
- "scope",
60
- "budget.sessionCeilingUsd",
61
- "defaults",
62
- "terminal",
63
- "skills",
64
- "delegation",
65
- "compaction",
39
+ "chat",
40
+ "fleet.default",
41
+ "fleet.profiles",
42
+ "fleet.rosters",
43
+ "fleet.agentProfiles",
44
+ "fleet.adaptiveRouting",
45
+ "fleet.nodes",
46
+ "fleet.permissions",
47
+ "fleet.retry",
48
+ "fleet.limits",
49
+ "fleet.history",
66
50
  "context",
67
- // The pre-warm reads its setting when a trigger fires, and every trigger sits
68
- // on a turn boundary, so a change takes effect before the next turn runs.
69
- "prewarm",
70
- "retry",
51
+ "safety.limits",
52
+ "interface.outputDetail",
53
+ "interface.terminalProgress",
54
+ "interface.desktopNotifications",
55
+ "integrations.projectResources",
56
+ "integrations.externalAgents",
57
+ "integrations.library",
71
58
  ]);
72
59
 
73
60
  const RESTART_REQUIRED_FIELDS = new Set<string>([
74
- "budget.concurrency",
75
- "runtimePlugins",
76
- "terminal.tuiMode",
77
- "terminal.fullscreenScrollbar",
61
+ "fleet.concurrency",
62
+ "interface.mode",
63
+ "interface.fullscreenScrollbar",
64
+ "interface.panes.enabled",
65
+ "integrations.runtimePlugins",
78
66
  ]);
79
67
 
80
68
  function matchesPrefix(path: string, fields: Set<string>): boolean {
@@ -29,7 +29,7 @@ export function createConfigBundle(
29
29
 
30
30
  function assertAgentNamespace(settings: Readonly<ClioSettings>): void {
31
31
  const agents = context.getContract<NativeAgentNamespace>("agents");
32
- if (agents) assertAgentIdNamespace(agents.list(), settings.delegation.agents);
32
+ if (agents) assertAgentIdNamespace(agents.list(), settings.integrations.externalAgents.entries);
33
33
  }
34
34
 
35
35
  function dispatch(kind: ChangeKind, payload: ConfigChangePayload): void {
@@ -45,7 +45,7 @@ export function createConfigBundle(
45
45
  try {
46
46
  listener(payload);
47
47
  } catch (err) {
48
- console.error(`[clio:config] listener for ${kind} threw:`, err);
48
+ console.error(`[clio-coder:config] listener for ${kind} threw:`, err);
49
49
  }
50
50
  }
51
51
  }
@@ -84,7 +84,7 @@ export function createConfigBundle(
84
84
  }
85
85
  publishReloadFailure(null);
86
86
  snapshot = next;
87
- setGitCommitAttributionEnabled(next.attribution.gitCommits);
87
+ setGitCommitAttributionEnabled(next.integrations.git.commitAttribution);
88
88
  if (!prev) return;
89
89
  const diff = diffSettings(prev, next);
90
90
  if (diff.hotReload.length > 0) dispatch("hotReload", { diff, settings: next });
@@ -96,7 +96,7 @@ export function createConfigBundle(
96
96
  async start() {
97
97
  if (initialSettings) snapshot = structuredClone(initialSettings);
98
98
  else snapshot = readStrictLayeredSettings(process.cwd()).settings;
99
- setGitCommitAttributionEnabled(snapshot.attribution.gitCommits);
99
+ setGitCommitAttributionEnabled(snapshot.integrations.git.commitAttribution);
100
100
  watcher = startConfigWatcher(() => onWatcherFire());
101
101
  },
102
102
  async stop() {
@@ -124,7 +124,7 @@ export function createConfigBundle(
124
124
  // a route may name a target supplied only by this workspace.
125
125
  const normalized = updateLayeredSettings(process.cwd(), mutate);
126
126
  snapshot = normalized;
127
- setGitCommitAttributionEnabled(normalized.attribution.gitCommits);
127
+ setGitCommitAttributionEnabled(normalized.integrations.git.commitAttribution);
128
128
  const diff = diffSettings(previous, normalized);
129
129
  if (diff.hotReload.length > 0) dispatch("hotReload", { diff, settings: normalized });
130
130
  if (diff.nextTurn.length > 0) dispatch("nextTurn", { diff, settings: normalized });