@iowarp/clio-coder 0.3.9 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (733) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/NOTICE +33 -0
  3. package/README.md +121 -16
  4. package/dist/{acp-7LOELQFP.js → acp-ZILU3AUO.js} +19 -18
  5. package/dist/{agents-FIBG2SHA.js → agents-HYWGBGQR.js} +53 -39
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-OI4LIH2I.js → auth-N3QT7CBO.js} +24 -21
  8. package/dist/{builtins-AD25UL3C.js → builtins-UJLMOVOV.js} +6 -6
  9. package/dist/{chunk-I4HZDVNP.js → chunk-2LEAKD4C.js} +2 -3
  10. package/dist/{chunk-465CC7FK.js → chunk-2NM363SV.js} +60 -64
  11. package/dist/{chunk-4H6ULJ3H.js → chunk-2VG7KLYV.js} +1046 -1370
  12. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  13. package/dist/{chunk-NZU6YDNV.js → chunk-3I5NY75V.js} +5 -5
  14. package/dist/{chunk-47CMYGET.js → chunk-3QSOM6PA.js} +2 -2
  15. package/dist/chunk-42FMPA75.js +101 -0
  16. package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
  17. package/dist/{chunk-IHKBWSXF.js → chunk-5QIAJV2D.js} +3 -3
  18. package/dist/chunk-5YHDIDBP.js +97 -0
  19. package/dist/chunk-6CCS4G3W.js +1529 -0
  20. package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
  21. package/dist/{chunk-BVDVID7E.js → chunk-6FN3E6KX.js} +6 -6
  22. package/dist/{chunk-DG4M6ZUE.js → chunk-6HMJX2VU.js} +59 -59
  23. package/dist/{chunk-3MRC2YSQ.js → chunk-6I5ILFOF.js} +3 -2
  24. package/dist/chunk-6NJQITNH.js +1412 -0
  25. package/dist/chunk-6VC4OV3Z.js +365 -0
  26. package/dist/{chunk-LU7P4LHA.js → chunk-72GZI5EV.js} +2 -2
  27. package/dist/{chunk-5T7RBWN2.js → chunk-74YWRRU5.js} +9 -8
  28. package/dist/{chunk-VPTUJU4P.js → chunk-7EPLI7VL.js} +2 -2
  29. package/dist/{chunk-CA42X6KT.js → chunk-7OBGU7UB.js} +7 -7
  30. package/dist/{chunk-56KB5IJP.js → chunk-7PWAODYW.js} +3 -3
  31. package/dist/chunk-7RY5VZPH.js +573 -0
  32. package/dist/{chunk-OEDBCISO.js → chunk-ABLSQ6JX.js} +3 -3
  33. package/dist/{chunk-5HFBWUMU.js → chunk-AFKWHWXF.js} +13 -23
  34. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  35. package/dist/{chunk-WXCJ7VME.js → chunk-AKB4GYDL.js} +7 -7
  36. package/dist/chunk-AP73CFDC.js +308 -0
  37. package/dist/{chunk-4LJX2PUC.js → chunk-BBTJOK6Y.js} +5 -5
  38. package/dist/{chunk-QQ7EKM72.js → chunk-BDPT6GTK.js} +13 -61
  39. package/dist/chunk-BJGUKIG4.js +302 -0
  40. package/dist/chunk-BMS5RKQY.js +27 -0
  41. package/dist/{chunk-TD7UE2L5.js → chunk-BTGG6BG2.js} +81 -40
  42. package/dist/chunk-BTK3SSSK.js +67 -0
  43. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  44. package/dist/chunk-BWW4HLO4.js +301 -0
  45. package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
  46. package/dist/{chunk-HJB5IUKP.js → chunk-C537JADH.js} +18 -18
  47. package/dist/{chunk-774ILSRL.js → chunk-CDNVLKUX.js} +5 -4
  48. package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
  49. package/dist/{chunk-AEYBF3TB.js → chunk-CWVRRIEI.js} +2 -2
  50. package/dist/chunk-D4CJV46V.js +462 -0
  51. package/dist/chunk-D7E7WCDF.js +27 -0
  52. package/dist/{chunk-5PVQ4SRS.js → chunk-E67WX76H.js} +10 -126
  53. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  54. package/dist/chunk-EIMVLWB3.js +1842 -0
  55. package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
  56. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  57. package/dist/{chunk-3DUR4WUA.js → chunk-FYUN5KZ3.js} +25 -25
  58. package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
  59. package/dist/chunk-GIZNH63R.js +40 -0
  60. package/dist/chunk-GPPB3JBE.js +688 -0
  61. package/dist/{chunk-B5XRQOLB.js → chunk-GVQJ5CCZ.js} +17 -11
  62. package/dist/chunk-HHV2GANA.js +88 -0
  63. package/dist/chunk-HJWWJ6IL.js +184 -0
  64. package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
  65. package/dist/chunk-HRQMFLJP.js +75 -0
  66. package/dist/{chunk-AD7Y7STJ.js → chunk-HUAS7ITX.js} +107 -97
  67. package/dist/{chunk-O6I4CIEU.js → chunk-I66EAJFY.js} +6 -6
  68. package/dist/{chunk-S4COXYBG.js → chunk-IG7BCQBA.js} +129 -106
  69. package/dist/{chunk-N3PBVRTZ.js → chunk-IXJT6DCX.js} +9 -7
  70. package/dist/chunk-J4HBWF6Y.js +2635 -0
  71. package/dist/chunk-J5LZHVIT.js +284 -0
  72. package/dist/{chunk-GAYUJ7LE.js → chunk-JA5QWE4Z.js} +544 -227
  73. package/dist/{chunk-B5CSFE7B.js → chunk-JIEGK6UF.js} +6 -174
  74. package/dist/{chunk-VKBMFOYV.js → chunk-JZWT5J3Y.js} +23 -27
  75. package/dist/chunk-K6BF4U2H.js +1785 -0
  76. package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
  77. package/dist/{chunk-YSEHGPCT.js → chunk-MA3H6DM5.js} +6 -6
  78. package/dist/{chunk-EBOC7MT3.js → chunk-MOPSG2X7.js} +9 -9
  79. package/dist/{chunk-KV2AOLDF.js → chunk-MQXIVJ35.js} +18 -29
  80. package/dist/{chunk-P3JGPQFL.js → chunk-N5UK64DP.js} +4 -4
  81. package/dist/chunk-NDDGJUXD.js +81 -0
  82. package/dist/chunk-NEKRRTYW.js +56 -0
  83. package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-T3Z6VAAF.js → chunk-OJTRZGR3.js} +53 -92
  86. package/dist/{chunk-5DQRIYDZ.js → chunk-PBP4B7XR.js} +3 -3
  87. package/dist/{chunk-NQ6UCCOD.js → chunk-PJJ6MY27.js} +8 -8
  88. package/dist/chunk-PMZCIOCJ.js +25 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-7C6RYZGQ.js → chunk-PVAMAVBB.js} +5 -4
  91. package/dist/chunk-QDC3K2U3.js +262 -0
  92. package/dist/{chunk-JEQQR47K.js → chunk-QKIFBZKT.js} +173 -14
  93. package/dist/{chunk-R7LNVMCS.js → chunk-QMXC4JB7.js} +70 -78
  94. package/dist/chunk-QSNYB6ZV.js +195 -0
  95. package/dist/chunk-QTFGO774.js +644 -0
  96. package/dist/{chunk-ODFEOB4F.js → chunk-R23Z6K6I.js} +27 -9
  97. package/dist/{chunk-3UUY7R3Z.js → chunk-R32CLGZ6.js} +14 -14
  98. package/dist/chunk-R346GLFC.js +31 -0
  99. package/dist/chunk-RKSR6VSF.js +132 -0
  100. package/dist/{chunk-N5XKWMDW.js → chunk-SCYB3HA4.js} +73 -27
  101. package/dist/{chunk-PZ4I4JE2.js → chunk-SINK3QR6.js} +135 -125
  102. package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
  103. package/dist/chunk-T56WDKA5.js +183 -0
  104. package/dist/{chunk-ECUO3KDP.js → chunk-TD3PGPQA.js} +87 -26
  105. package/dist/{chunk-HKO36JWF.js → chunk-THYWACCR.js} +31 -3
  106. package/dist/{chunk-LXPJXFM5.js → chunk-TVH4ONAM.js} +18 -12
  107. package/dist/chunk-TVHHYFHE.js +255 -0
  108. package/dist/chunk-U2WB7TZS.js +271 -0
  109. package/dist/{chunk-NNNWO6F2.js → chunk-UAPGZHYC.js} +237 -33
  110. package/dist/{chunk-MIX5N5AC.js → chunk-UEDMSP56.js} +415 -160
  111. package/dist/{chunk-WIE7ZOSW.js → chunk-UXN6JT4W.js} +3 -3
  112. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  113. package/dist/{chunk-MV2VUEJC.js → chunk-VEGN6WIQ.js} +2 -2
  114. package/dist/chunk-VKFQTNDV.js +66 -0
  115. package/dist/{chunk-FALJGAWU.js → chunk-VKRH2TCS.js} +2 -2
  116. package/dist/{chunk-A2NJGIB3.js → chunk-VN3SHNBN.js} +2 -2
  117. package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
  118. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  119. package/dist/{chunk-EQ63NRB7.js → chunk-WNP7O5WZ.js} +3 -3
  120. package/dist/chunk-WR6U3OVP.js +45 -0
  121. package/dist/{chunk-TEO2TLVN.js → chunk-XKA2ICR3.js} +1051 -1196
  122. package/dist/{chunk-3V5AYSEQ.js → chunk-Y45G3AXC.js} +72 -65
  123. package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
  124. package/dist/chunk-YAKGTXEV.js +17 -0
  125. package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
  126. package/dist/{chunk-YW7UVM5V.js → chunk-ZAZB4JMW.js} +55 -11
  127. package/dist/{chunk-HCBCAYZU.js → chunk-ZJLUDYFY.js} +11 -11
  128. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  129. package/dist/{chunk-IFBNV6H6.js → chunk-ZW55JB7N.js} +3 -3
  130. package/dist/cli/index.js +48 -37
  131. package/dist/clio-IT3G3VQH.js +25 -0
  132. package/dist/{code-nav-LMW275PA.js → code-nav-RK6S7F6E.js} +8 -8
  133. package/dist/codewiki/build-worker.js +1 -1
  134. package/dist/{compile-cache-CVJMMODC.js → compile-cache-OQAVB7Y5.js} +3 -5
  135. package/dist/{components-ZFA3SAER.js → components-UBWCQSRW.js} +6 -6
  136. package/dist/{config-RXS5T3JT.js → config-3QZRWZJF.js} +73 -61
  137. package/dist/configure-FL7Y3KJF.js +54 -0
  138. package/dist/{context-MVOORGMF.js → context-5HE7ODYK.js} +61 -49
  139. package/dist/{context-I3BTOTCS.js → context-KYQFRVDC.js} +11 -11
  140. package/dist/{context-PALKKQYL.js → context-XNHL75JV.js} +43 -28
  141. package/dist/{context-clear-N2WOYZ2K.js → context-clear-N545L53A.js} +60 -48
  142. package/dist/{context-working-set-MIEVECVZ.js → context-working-set-QHKXSV2F.js} +15 -13
  143. package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-RGIE5PCT.js} +109 -72
  144. package/dist/{docs-7LQ23DLM.js → docs-5NAF6AU7.js} +7 -13
  145. package/dist/doctor-ZGPEGHIP.js +772 -0
  146. package/dist/{eval-IJ5VEZDJ.js → eval-GXLL44RD.js} +106 -86
  147. package/dist/eval-inventory-HBWSWQOK.js +315 -0
  148. package/dist/{evidence-L5APPXNV.js → evidence-HWLBRH3Q.js} +209 -51
  149. package/dist/{evolve-RGNKFJ52.js → evolve-FTZBMNVW.js} +57 -45
  150. package/dist/{extensions-7WYWUX5A.js → extensions-VHRBEID7.js} +7 -7
  151. package/dist/{fleet-6CNVBZZP.js → fleet-CKZHJWZJ.js} +215 -114
  152. package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-EXDXBMV6.js} +13 -12
  153. package/dist/fleet-decisions-OTHB6KRL.js +157 -0
  154. package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-YTEZUCUT.js} +20 -17
  155. package/dist/fleet-inspect-SS6YMDCK.js +445 -0
  156. package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-PBY4VYOM.js} +6 -9
  157. package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-KMEM5L3S.js} +25 -20
  158. package/dist/fleet-verify-QD5M7E7Q.js +178 -0
  159. package/dist/fleet-view-WAMJYNDT.js +94 -0
  160. package/dist/{init-VBN2ACVA.js → init-5XQRBOFV.js} +79 -66
  161. package/dist/install-NKNG7KD4.js +13 -0
  162. package/dist/interop-34TVO25M.js +116 -0
  163. package/dist/{library-JHGUMLY2.js → library-3QY6KF57.js} +25 -21
  164. package/dist/{memory-K4OQIYWG.js → memory-L4UTIIIW.js} +59 -47
  165. package/dist/{models-2NCZUWDD.js → models-ZVX3QOWE.js} +47 -37
  166. package/dist/{monitor-MMVTJABD.js → monitor-CEKVSYTS.js} +67 -57
  167. package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-77BAP6BC.js} +7633 -7699
  168. package/dist/panes-7STHOAUJ.js +103 -0
  169. package/dist/panes-SHAUIRXY.js +60 -0
  170. package/dist/{paths-DBXMZMDU.js → paths-L7LGY6RN.js} +6 -6
  171. package/dist/{reset-DD5JGOY3.js → reset-EOLM7GVE.js} +15 -14
  172. package/dist/resources-74GKTLSF.js +115 -0
  173. package/dist/{run-QEGNX7FL.js → run-HBAUJNNZ.js} +139 -98
  174. package/dist/{share-JKD3BQMW.js → share-G3APVLVP.js} +25 -21
  175. package/dist/{skills-LMQIKDOZ.js → skills-35HHUKCR.js} +37 -27
  176. package/dist/{skills-eval-I7X2774U.js → skills-eval-QN4HSHDC.js} +80 -73
  177. package/dist/skills-inventory-J357J34F.js +129 -0
  178. package/dist/slash-commands-JZZCQA32.js +79 -0
  179. package/dist/{steer-CF5TDANS.js → steer-XAVHJM22.js} +4 -4
  180. package/dist/{support-I7LOJLIF.js → support-U7QOWY26.js} +7 -7
  181. package/dist/{targets-RUSR6B5Z.js → targets-DSM6CY3M.js} +67 -59
  182. package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-JOPFUVEM.js} +15 -10
  183. package/dist/tools-MKNWVPBH.js +29 -0
  184. package/dist/{trace-ODOQIVIW.js → trace-ECQ7TIYZ.js} +194 -7
  185. package/dist/tui-primitives-K5PASC3O.js +17 -0
  186. package/dist/{uninstall-ZJF5H5ZN.js → uninstall-N34PCTGJ.js} +6 -8
  187. package/dist/{upgrade-XANW3FXB.js → upgrade-H7TOM7YL.js} +37 -62
  188. package/dist/{usage-4H7ZRXQT.js → usage-X52N3IDJ.js} +70 -59
  189. package/dist/{verifiers-UZXNBZEB.js → verifiers-EJTVVSMA.js} +174 -14
  190. package/dist/{verify-BVKWTNDL.js → verify-YJL6XET2.js} +12 -11
  191. package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-MPIFL3LL.js} +3 -4
  192. package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-4NDZTQ4B.js} +86 -75
  193. package/dist/with-panes-OBOBFIIR.js +818 -0
  194. package/dist/worker/entry.js +131 -91
  195. package/docs/README.md +3 -2
  196. package/docs/acp.md +25 -4
  197. package/docs/alcf-provider.md +1 -1
  198. package/docs/architecture.md +2 -2
  199. package/docs/artifact-versions.md +4 -1
  200. package/docs/built-in-agents.md +40 -32
  201. package/docs/capacity-and-scheduling.md +43 -5
  202. package/docs/commands-and-modes.md +39 -4
  203. package/docs/config-knobs-audit.md +3 -0
  204. package/docs/configuration-and-targets.md +138 -167
  205. package/docs/context-engine.md +1 -1
  206. package/docs/development-pipeline.md +19 -0
  207. package/docs/dispatch-typed-intent.md +385 -0
  208. package/docs/documentation-coverage.md +2 -2
  209. package/docs/documentation-guide.md +1 -1
  210. package/docs/environment-variables.md +3 -1
  211. package/docs/eval-runner.md +1 -1
  212. package/docs/evals-internal.md +1 -1
  213. package/docs/evidence-and-memory.md +2 -2
  214. package/docs/evolution.md +1 -1
  215. package/docs/exit-codes-and-output.md +3 -1
  216. package/docs/extensions-and-sharing.md +25 -1
  217. package/docs/fleet-demo-runbook.md +6 -3
  218. package/docs/fleet-dispatch.md +30 -7
  219. package/docs/installation-and-lifecycle.md +16 -3
  220. package/docs/middleware-and-components.md +1 -1
  221. package/docs/model-catalog.md +10 -1
  222. package/docs/observability.md +3 -3
  223. package/docs/proactive-memory.md +1 -1
  224. package/docs/prompt-envelope-and-tools.md +1 -1
  225. package/docs/provider-adapter-cookbook.md +1 -1
  226. package/docs/release-cut-checklist.md +164 -177
  227. package/docs/safety-model.md +2 -2
  228. package/docs/scientific-validation.md +3 -3
  229. package/docs/session-lifecycle.md +1 -1
  230. package/docs/skills-marketplace.md +1 -1
  231. package/docs/tool-usage.md +18 -8
  232. package/docs/trace-store.md +16 -11
  233. package/docs/troubleshooting.md +2 -2
  234. package/docs/tui-design.md +1 -1
  235. package/docs/worker-dispatch-mechanics.md +1 -1
  236. package/evals/README.md +5 -0
  237. package/evals/behavioral-corpus-grader.mjs +103 -0
  238. package/evals/behavioral-machinery-baseline.json +2276 -0
  239. package/evals/behavioral-machinery-driver.ts +250 -0
  240. package/evals/behavioral-machinery-support.ts +253 -0
  241. package/evals/behavioral-machinery.yaml +614 -0
  242. package/evals/behavioral-model-negative-control.yaml +68 -0
  243. package/evals/behavioral-model.yaml +216 -0
  244. package/evals/fixtures/behavioral-facts.txt +3 -0
  245. package/evals/fixtures/behavioral-main.ts +7 -0
  246. package/evals/fixtures/decoy/note.txt +2 -0
  247. package/evals/fixtures/private/credentials.txt +1 -0
  248. package/evals/tracked-metrics-baseline.yaml +229 -0
  249. package/evals/tracked-metrics-grader.mjs +129 -0
  250. package/package.json +8 -16
  251. package/skills/README.md +6 -6
  252. package/skills/coding/ast-grep/SKILL.md +8 -2
  253. package/skills/coding/coding-standards/SKILL.md +8 -2
  254. package/skills/coding/prototype/SKILL.md +8 -2
  255. package/skills/coding/tdd/SKILL.md +8 -2
  256. package/skills/context/context-handoff/SKILL.md +12 -3
  257. package/skills/context/context-handoff/evals.md +3 -3
  258. package/skills/context/context-prime/SKILL.md +8 -2
  259. package/skills/context/context-prime/evals.md +2 -2
  260. package/skills/git/file-ticket/SKILL.md +9 -4
  261. package/skills/git/file-ticket/evals.md +2 -2
  262. package/skills/git/fix-issue/SKILL.md +12 -5
  263. package/skills/git/fix-issue/evals.md +4 -4
  264. package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
  265. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  266. package/skills/git/ship/SKILL.md +9 -3
  267. package/skills/git/ship/evals.md +4 -4
  268. package/skills/git/worktree-create/SKILL.md +7 -2
  269. package/skills/git/worktree-create/evals.md +6 -6
  270. package/skills/git/worktree-merge/SKILL.md +7 -2
  271. package/skills/git/worktree-merge/evals.md +6 -6
  272. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
  273. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
  274. package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
  275. package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
  276. package/skills/meta/credentials/SKILL.md +9 -2
  277. package/skills/meta/find-skills/SKILL.md +8 -2
  278. package/skills/meta/herdr/SKILL.md +8 -2
  279. package/skills/meta/skill-craft/SKILL.md +21 -4
  280. package/skills/planning/architecture/SKILL.md +9 -3
  281. package/skills/planning/backlog/SKILL.md +8 -2
  282. package/skills/planning/prd/SKILL.md +8 -2
  283. package/skills/planning/product-intent/SKILL.md +8 -2
  284. package/skills/planning/tech-spec/SKILL.md +9 -3
  285. package/skills/registry.yaml +66 -66
  286. package/skills/research/arxiv-literature/SKILL.md +8 -2
  287. package/skills/research/experiment-protocol/SKILL.md +9 -2
  288. package/skills/research/scientific-debugging/SKILL.md +9 -2
  289. package/skills/research/scientific-debugging/evals.md +2 -2
  290. package/skills/research/scientific-modernization/SKILL.md +9 -2
  291. package/skills/skill-marketplace.json +257 -38
  292. package/skills/workflow/cut-it/SKILL.md +10 -2
  293. package/skills/workflow/design-council/SKILL.md +11 -2
  294. package/skills/workflow/grill-me/SKILL.md +8 -2
  295. package/skills/workflow/workflow-distiller/SKILL.md +8 -2
  296. package/src/cli/acp.ts +8 -4
  297. package/src/cli/argv.ts +25 -0
  298. package/src/cli/auth.ts +2 -2
  299. package/src/cli/bootstrap-generate.ts +5 -5
  300. package/src/cli/clio.ts +6 -1
  301. package/src/cli/config-inspect.ts +3 -3
  302. package/src/cli/configure-interop.ts +1 -1
  303. package/src/cli/configure.ts +50 -48
  304. package/src/cli/default-target.ts +1 -1
  305. package/src/cli/docs.ts +6 -6
  306. package/src/cli/doctor-naming.ts +323 -0
  307. package/src/cli/doctor-panes.ts +156 -0
  308. package/src/cli/doctor-toolchain.ts +78 -0
  309. package/src/cli/doctor.ts +34 -1
  310. package/src/cli/eval-inventory.ts +436 -0
  311. package/src/cli/eval.ts +13 -0
  312. package/src/cli/evidence-detail.ts +88 -0
  313. package/src/cli/evidence-inventory.ts +183 -0
  314. package/src/cli/evidence.ts +30 -5
  315. package/src/cli/fleet-decisions.ts +69 -0
  316. package/src/cli/fleet-inspect.ts +334 -0
  317. package/src/cli/fleet-preflight.ts +1 -1
  318. package/src/cli/fleet-verify.ts +133 -0
  319. package/src/cli/fleet-view.ts +827 -0
  320. package/src/cli/fleet.ts +154 -40
  321. package/src/cli/index.ts +14 -2
  322. package/src/cli/interop-inspect.ts +128 -0
  323. package/src/cli/interop.ts +34 -0
  324. package/src/cli/models.ts +3 -3
  325. package/src/cli/modes/print.ts +1 -1
  326. package/src/cli/panes.ts +35 -0
  327. package/src/cli/reset.ts +6 -3
  328. package/src/cli/run.ts +67 -13
  329. package/src/cli/share.ts +1 -1
  330. package/src/cli/skills-eval.ts +11 -11
  331. package/src/cli/skills-inventory.ts +185 -0
  332. package/src/cli/skills.ts +16 -13
  333. package/src/cli/targets.ts +23 -24
  334. package/src/cli/tools.ts +321 -0
  335. package/src/cli/trace-inspect.ts +252 -0
  336. package/src/cli/trace.ts +64 -2
  337. package/src/cli/uninstall.ts +2 -2
  338. package/src/cli/upgrade.ts +29 -34
  339. package/src/cli/usage.ts +2 -2
  340. package/src/cli/validate-model.ts +1 -1
  341. package/src/cli/verifiers-inspect.ts +347 -0
  342. package/src/cli/verifiers.ts +9 -0
  343. package/src/cli/wiki-generate.ts +5 -5
  344. package/src/core/bash-exec.ts +1 -1
  345. package/src/core/boot-trace.ts +3 -3
  346. package/src/core/bus-events.ts +4 -0
  347. package/src/core/bus-trace.ts +2 -2
  348. package/src/core/compile-cache.ts +1 -1
  349. package/src/core/config.ts +1070 -845
  350. package/src/core/defaults.ts +342 -463
  351. package/src/core/domain-loader.ts +6 -4
  352. package/src/core/event-bus.ts +1 -1
  353. package/src/core/file-references.ts +78 -88
  354. package/src/core/git-commit-attribution.ts +3 -9
  355. package/src/core/guardrails.ts +24 -4
  356. package/src/core/naming-compat.ts +45 -0
  357. package/src/core/naming-events.ts +62 -0
  358. package/src/core/recent-models.ts +1 -7
  359. package/src/core/residency-protection.ts +4 -8
  360. package/src/core/resolve-config-value.ts +1 -1
  361. package/src/core/response-model-id.ts +0 -14
  362. package/src/core/response-schema.ts +44 -4
  363. package/src/core/session-routing.ts +84 -74
  364. package/src/core/skill-activation.ts +18 -0
  365. package/src/core/termination.ts +4 -4
  366. package/src/core/theme-token-hex.ts +43 -0
  367. package/src/core/timers.ts +2 -12
  368. package/src/core/tool-names.ts +2 -1
  369. package/src/core/xdg.ts +1 -1
  370. package/src/domains/agents/catalog.ts +2 -12
  371. package/src/domains/agents/extension.ts +3 -3
  372. package/src/domains/agents/fleets/build-review.md +0 -3
  373. package/src/domains/agents/fleets/build-test.md +0 -3
  374. package/src/domains/agents/registry.ts +7 -7
  375. package/src/domains/agents/result-contract-filesystem.ts +32 -0
  376. package/src/domains/agents/result-contract.ts +165 -36
  377. package/src/domains/agents/spec.ts +0 -11
  378. package/src/domains/config/classify.ts +37 -46
  379. package/src/domains/config/extension.ts +5 -5
  380. package/src/domains/config/keybindings.ts +48 -47
  381. package/src/domains/config/watcher.ts +1 -1
  382. package/src/domains/context/codewiki/indexer.ts +1 -1
  383. package/src/domains/context/extension.ts +3 -3
  384. package/src/domains/context/prompt-context.ts +1 -1
  385. package/src/domains/context/wiki/assemble.ts +2 -2
  386. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  387. package/src/domains/context/working-set/replay/report.ts +1 -1
  388. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  389. package/src/domains/dispatch/active-route-planner.ts +2 -2
  390. package/src/domains/dispatch/admission-error.ts +9 -0
  391. package/src/domains/dispatch/admission.ts +22 -21
  392. package/src/domains/dispatch/agent-candidates.ts +1 -1
  393. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  394. package/src/domains/dispatch/agent-ledger.ts +1 -1
  395. package/src/domains/dispatch/assignment.ts +5 -5
  396. package/src/domains/dispatch/capacity-lease.ts +23 -6
  397. package/src/domains/dispatch/code-step.ts +1 -1
  398. package/src/domains/dispatch/contract.ts +2 -2
  399. package/src/domains/dispatch/council-topology.ts +398 -0
  400. package/src/domains/dispatch/extension.ts +287 -111
  401. package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
  402. package/src/domains/dispatch/fleet-plan.ts +7 -2
  403. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  404. package/src/domains/dispatch/fleet-run.ts +59 -3
  405. package/src/domains/dispatch/gate-decisions.ts +36 -15
  406. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  407. package/src/domains/dispatch/gate-topology.ts +289 -0
  408. package/src/domains/dispatch/index.ts +19 -0
  409. package/src/domains/dispatch/intent-compatibility.ts +330 -0
  410. package/src/domains/dispatch/intent.ts +85 -1
  411. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  412. package/src/domains/dispatch/path-scope.ts +0 -61
  413. package/src/domains/dispatch/placement.ts +2 -2
  414. package/src/domains/dispatch/receipt-findings.ts +1 -1
  415. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  416. package/src/domains/dispatch/reservation-store.ts +24 -27
  417. package/src/domains/dispatch/route-decision.ts +1 -1
  418. package/src/domains/dispatch/route-history.ts +1 -1
  419. package/src/domains/dispatch/route-policy.ts +1 -1
  420. package/src/domains/dispatch/route-readiness.ts +0 -28
  421. package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
  422. package/src/domains/dispatch/run-event-journal.ts +599 -0
  423. package/src/domains/dispatch/state.ts +45 -1
  424. package/src/domains/dispatch/tool-stats.ts +1 -1
  425. package/src/domains/dispatch/transport.ts +2 -19
  426. package/src/domains/dispatch/types.ts +16 -3
  427. package/src/domains/dispatch/validation.ts +33 -8
  428. package/src/domains/dispatch/worker-protocol.ts +2 -2
  429. package/src/domains/eval/artifacts/store.ts +5 -4
  430. package/src/domains/eval/compare/compare.ts +3 -16
  431. package/src/domains/eval/compare/thresholds.ts +0 -8
  432. package/src/domains/eval/execution-provenance.ts +1 -1
  433. package/src/domains/eval/inventory.ts +113 -0
  434. package/src/domains/eval/metrics/token-stream.ts +0 -7
  435. package/src/domains/eval/report.ts +1 -1
  436. package/src/domains/eval/runner.ts +1 -1
  437. package/src/domains/eval/runners/clio-run.ts +7 -6
  438. package/src/domains/eval/runners/external-command.ts +4 -3
  439. package/src/domains/eval/schema/artifact.ts +1 -1
  440. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  441. package/src/domains/eval/schema/behavioral.ts +7 -6
  442. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  443. package/src/domains/eval/schema/naming.ts +10 -0
  444. package/src/domains/eval/schema/serving.ts +31 -0
  445. package/src/domains/eval/schema/suite.ts +2 -2
  446. package/src/domains/eval/schema/validate.ts +9 -5
  447. package/src/domains/eval/schema/verdict.ts +4 -2
  448. package/src/domains/eval/store.ts +12 -2
  449. package/src/domains/eval/suites/run.ts +12 -6
  450. package/src/domains/eval/types.ts +1 -1
  451. package/src/domains/eval/workspaces/git.ts +1 -1
  452. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  453. package/src/domains/evidence/build.ts +13 -5
  454. package/src/domains/evidence/store.ts +6 -0
  455. package/src/domains/interop/consent.ts +7 -7
  456. package/src/domains/interop/extension.ts +1 -1
  457. package/src/domains/lifecycle/doctor.ts +27 -21
  458. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  459. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  460. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  461. package/src/domains/lifecycle/migrations/index.ts +20 -1
  462. package/src/domains/lifecycle/naming-history.ts +153 -0
  463. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  464. package/src/domains/lifecycle/naming-resources.ts +261 -0
  465. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  466. package/src/domains/lifecycle/naming-yazi.ts +81 -0
  467. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  468. package/src/domains/memory/index.ts +0 -1
  469. package/src/domains/memory/task-memory-handoff.ts +6 -3
  470. package/src/domains/memory/task-memory-policy.ts +6 -10
  471. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  472. package/src/domains/middleware/index.ts +7 -0
  473. package/src/domains/middleware/marketplace-offer.ts +339 -0
  474. package/src/domains/middleware/memory-intervention.ts +33 -21
  475. package/src/domains/middleware/runtime.ts +2 -2
  476. package/src/domains/mux/contract.ts +566 -0
  477. package/src/domains/mux/detect.ts +182 -0
  478. package/src/domains/mux/dock-controller.ts +365 -0
  479. package/src/domains/mux/extension.ts +53 -0
  480. package/src/domains/mux/index.ts +116 -0
  481. package/src/domains/mux/manifest.ts +6 -0
  482. package/src/domains/mux/operations.ts +192 -0
  483. package/src/domains/mux/pane-registry.ts +90 -0
  484. package/src/domains/mux/protocol.ts +62 -0
  485. package/src/domains/mux/socket-client.ts +964 -0
  486. package/src/domains/mux/types.ts +265 -0
  487. package/src/domains/mux/viewer-command.ts +59 -0
  488. package/src/domains/mux/yazi/assets/init.lua +2 -0
  489. package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
  490. package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
  491. package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
  492. package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
  493. package/src/domains/mux/yazi/assets/yazi.toml +17 -0
  494. package/src/domains/mux/yazi/event-stream.ts +182 -0
  495. package/src/domains/mux/yazi/profile.ts +299 -0
  496. package/src/domains/mux/yazi/session.ts +251 -0
  497. package/src/domains/mux/yazi/theme.ts +30 -0
  498. package/src/domains/observability/cost.ts +21 -0
  499. package/src/domains/observability/extension.ts +1 -1
  500. package/src/domains/observability/index.ts +2 -0
  501. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  502. package/src/domains/observability/projection.ts +1 -1
  503. package/src/domains/observability/trace-store.ts +63 -11
  504. package/src/domains/prompts/compiler.ts +2 -2
  505. package/src/domains/prompts/extension.ts +3 -3
  506. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
  507. package/src/domains/prompts/fragments/operating/skills.md +25 -18
  508. package/src/domains/providers/endpoint-capacity.ts +154 -22
  509. package/src/domains/providers/endpoint-slots-store.ts +189 -0
  510. package/src/domains/providers/extension.ts +25 -8
  511. package/src/domains/providers/index.ts +22 -0
  512. package/src/domains/providers/knowledge-base-path.ts +1 -1
  513. package/src/domains/providers/model-runtime-capabilities.ts +46 -2
  514. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  515. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
  516. package/src/domains/providers/plugins.ts +1 -1
  517. package/src/domains/providers/resolver.ts +1 -1
  518. package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
  519. package/src/domains/providers/runtimes/builtins.ts +2 -0
  520. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  521. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  522. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  523. package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
  524. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  525. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  526. package/src/domains/providers/runtimes/protocol/litellm.ts +285 -0
  527. package/src/domains/providers/support.ts +1 -0
  528. package/src/domains/providers/target-model-cache.ts +124 -0
  529. package/src/domains/providers/types/knowledge-base.ts +13 -0
  530. package/src/domains/providers/types/local-model-quirks.ts +2 -2
  531. package/src/domains/providers/types/target-descriptor.ts +3 -3
  532. package/src/domains/resources/extension.ts +1 -1
  533. package/src/domains/resources/index.ts +3 -0
  534. package/src/domains/resources/library.ts +6 -6
  535. package/src/domains/resources/prompts/loader.ts +1 -1
  536. package/src/domains/resources/skills/content-hash.ts +7 -6
  537. package/src/domains/resources/skills/evals.ts +1 -1
  538. package/src/domains/resources/skills/install.ts +36 -12
  539. package/src/domains/resources/skills/loader.ts +72 -13
  540. package/src/domains/resources/skills/marketplace.ts +21 -2
  541. package/src/domains/resources/skills/promotion.ts +214 -0
  542. package/src/domains/safety/action-classifier.ts +6 -0
  543. package/src/domains/safety/audit.ts +2 -2
  544. package/src/domains/safety/finish-contract.ts +2 -1
  545. package/src/domains/safety/run-effects.ts +1 -1
  546. package/src/domains/scheduling/extension.ts +4 -4
  547. package/src/domains/session/archive-readers.ts +9 -1
  548. package/src/domains/session/compaction/branch-summary.ts +4 -0
  549. package/src/domains/session/compaction/compact.ts +1 -1
  550. package/src/domains/session/compaction/tokens.ts +4 -0
  551. package/src/domains/session/context-accounting.ts +1 -1
  552. package/src/domains/session/decision-board.ts +1 -1
  553. package/src/domains/session/extension.ts +1 -1
  554. package/src/domains/session/handoff.ts +2 -2
  555. package/src/domains/session/prompt-manifest.ts +0 -5
  556. package/src/domains/session/protected-artifact-journal.ts +12 -6
  557. package/src/domains/session/retry.ts +1 -1
  558. package/src/domains/share/archive.ts +85 -36
  559. package/src/domains/toolchain/archive.ts +175 -0
  560. package/src/domains/toolchain/contract.ts +28 -0
  561. package/src/domains/toolchain/extension.ts +47 -0
  562. package/src/domains/toolchain/index.ts +39 -0
  563. package/src/domains/toolchain/install.ts +327 -0
  564. package/src/domains/toolchain/manifest.ts +8 -0
  565. package/src/domains/toolchain/paths.ts +34 -0
  566. package/src/domains/toolchain/registry.ts +265 -0
  567. package/src/domains/toolchain/remove.ts +218 -0
  568. package/src/domains/toolchain/resolve.ts +182 -0
  569. package/src/domains/toolchain/types.ts +113 -0
  570. package/src/domains/toolchain/version.ts +88 -0
  571. package/src/engine/acp/adapter.ts +3 -3
  572. package/src/engine/acp/event-mapper.ts +3 -3
  573. package/src/engine/acp/server.ts +440 -96
  574. package/src/engine/acp/tool-mediator.ts +2 -2
  575. package/src/engine/acp/types.ts +20 -2
  576. package/src/engine/alcf-oauth.ts +5 -5
  577. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  578. package/src/engine/api-registry.ts +1 -1
  579. package/src/engine/apis/llamacpp-residency.ts +1 -19
  580. package/src/engine/apis/lmstudio.ts +1 -6
  581. package/src/engine/apis/ollama-native.ts +3 -3
  582. package/src/engine/apis/openai-completions.ts +2 -2
  583. package/src/engine/apis/residency.ts +3 -9
  584. package/src/engine/claude/sdk-module.ts +87 -0
  585. package/src/engine/claude/sdk-runtime.ts +25 -17
  586. package/src/engine/claude/subprocess-runtime.ts +1 -1
  587. package/src/engine/claude/tool-safety.ts +4 -4
  588. package/src/engine/loop-guard.ts +0 -5
  589. package/src/engine/session.ts +14 -7
  590. package/src/engine/tui-primitives.ts +21 -0
  591. package/src/engine/tui.ts +1 -0
  592. package/src/engine/worker-events.ts +6 -6
  593. package/src/engine/worker-runtime.ts +16 -26
  594. package/src/entry/boot-options.ts +2 -0
  595. package/src/entry/orchestrator.ts +207 -90
  596. package/src/entry/panes-activation.ts +31 -0
  597. package/src/entry/with-panes.ts +20 -0
  598. package/src/interactive/application-controller.ts +21 -21
  599. package/src/interactive/bus-notices.ts +2 -2
  600. package/src/interactive/chat-loop.ts +8 -8
  601. package/src/interactive/chat-panel.ts +1 -1
  602. package/src/interactive/clio-editor.ts +105 -1
  603. package/src/interactive/context-activity.ts +8 -6
  604. package/src/interactive/context-meter.ts +3 -6
  605. package/src/interactive/context-overlay.ts +2 -1
  606. package/src/interactive/cost-overlay.ts +3 -1
  607. package/src/interactive/council-grid.ts +3 -5
  608. package/src/interactive/council.ts +11 -0
  609. package/src/interactive/dispatch-board.ts +56 -49
  610. package/src/interactive/editor-bash.ts +21 -0
  611. package/src/interactive/editor-steer.ts +9 -4
  612. package/src/interactive/editor-submit.ts +24 -18
  613. package/src/interactive/external-editor.ts +1 -1
  614. package/src/interactive/file-reference-completion.ts +360 -0
  615. package/src/interactive/footer/dashboard.ts +15 -17
  616. package/src/interactive/footer/notifications.ts +14 -8
  617. package/src/interactive/footer/widgets.ts +2 -44
  618. package/src/interactive/interactive-application.ts +229 -62
  619. package/src/interactive/interactive-event-projection.ts +1 -1
  620. package/src/interactive/interactive-input-runtime.ts +9 -2
  621. package/src/interactive/interactive-presentation.ts +21 -16
  622. package/src/interactive/interactive-shell.ts +2 -2
  623. package/src/interactive/interactive-slash-runtime.ts +99 -23
  624. package/src/interactive/interactive-subscriptions.ts +1 -1
  625. package/src/interactive/interactive-tickers.ts +1 -1
  626. package/src/interactive/keybinding-manager.ts +4 -4
  627. package/src/interactive/layout.ts +1 -1
  628. package/src/interactive/memory-overlay.ts +3 -2
  629. package/src/interactive/modal-marker.ts +151 -0
  630. package/src/interactive/mutation-preview.ts +1 -1
  631. package/src/interactive/mux-bridge.ts +214 -0
  632. package/src/interactive/overlay-frame.ts +62 -14
  633. package/src/interactive/overlay-general-openers.ts +7 -2
  634. package/src/interactive/overlay-key-routing.ts +21 -10
  635. package/src/interactive/overlay-lifecycle.ts +20 -4
  636. package/src/interactive/overlay-model-selectors.ts +43 -6
  637. package/src/interactive/overlay-permission-lifecycle.ts +90 -22
  638. package/src/interactive/overlay-transitions.ts +18 -4
  639. package/src/interactive/overlays/agents.ts +3 -2
  640. package/src/interactive/overlays/ask-user.ts +161 -41
  641. package/src/interactive/overlays/auth-dialog.ts +1 -0
  642. package/src/interactive/overlays/context-reset.ts +29 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +29 -4
  644. package/src/interactive/overlays/decisions.ts +15 -13
  645. package/src/interactive/overlays/extensions.ts +1 -0
  646. package/src/interactive/overlays/fleet-run-approval.ts +4 -3
  647. package/src/interactive/overlays/handoff-review.ts +3 -2
  648. package/src/interactive/overlays/help-reference.ts +2 -0
  649. package/src/interactive/overlays/interop.ts +2 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +2 -1
  651. package/src/interactive/overlays/library-tabs.ts +28 -0
  652. package/src/interactive/overlays/list-overlay.ts +10 -1
  653. package/src/interactive/overlays/message-picker.ts +2 -1
  654. package/src/interactive/overlays/model-scope.ts +86 -0
  655. package/src/interactive/overlays/model-selector.ts +40 -31
  656. package/src/interactive/overlays/prompts.ts +11 -4
  657. package/src/interactive/overlays/session-selector.ts +3 -2
  658. package/src/interactive/overlays/settings-sections.ts +30 -0
  659. package/src/interactive/overlays/settings.ts +849 -268
  660. package/src/interactive/overlays/side-question.ts +3 -2
  661. package/src/interactive/overlays/skills-hub.ts +11 -19
  662. package/src/interactive/overlays/tree-selector.ts +3 -2
  663. package/src/interactive/pane-policy.ts +46 -0
  664. package/src/interactive/panes-runtime.ts +318 -0
  665. package/src/interactive/permission-overlay.ts +2 -2
  666. package/src/interactive/renderers/compaction-summary.ts +29 -0
  667. package/src/interactive/renderers/retry-status.ts +12 -4
  668. package/src/interactive/renderers/tool-execution.ts +4 -4
  669. package/src/interactive/renderers/worker-entry.ts +122 -14
  670. package/src/interactive/session-transcript.ts +3 -3
  671. package/src/interactive/slash-autocomplete.ts +454 -165
  672. package/src/interactive/slash-commands.ts +521 -189
  673. package/src/interactive/slash-spec.ts +160 -17
  674. package/src/interactive/status/controller.ts +2 -2
  675. package/src/interactive/stream-pacing-policy.ts +1 -1
  676. package/src/interactive/tasks-overlay.ts +21 -13
  677. package/src/interactive/terminal-lease.ts +6 -7
  678. package/src/interactive/theme/tokens.ts +3 -14
  679. package/src/interactive/turn-context.ts +58 -13
  680. package/src/interactive/turn-persistence.ts +2 -2
  681. package/src/interactive/turn-prewarm.ts +2 -2
  682. package/src/interactive/turn-runtime.ts +8 -8
  683. package/src/interactive/turn-state.ts +1 -1
  684. package/src/interactive/view/artifacts.ts +120 -9
  685. package/src/interactive/view/view-overlay.ts +14 -10
  686. package/src/interactive/watch-pane.ts +180 -0
  687. package/src/interactive/welcome-dashboard.ts +15 -15
  688. package/src/interactive/worker-progress.ts +11 -5
  689. package/src/interactive/worker-receipts.ts +20 -2
  690. package/src/interactive/worker-stream.ts +6 -4
  691. package/src/interactive/yazi-bridge.ts +451 -0
  692. package/src/tools/ask-user.ts +3 -3
  693. package/src/tools/bash.ts +1 -1
  694. package/src/tools/bootstrap.ts +26 -2
  695. package/src/tools/builtin-tool-catalog.ts +16 -1
  696. package/src/tools/compete-worktrees.ts +108 -17
  697. package/src/tools/context/index.ts +15 -1
  698. package/src/tools/core-bootstrap.ts +2 -1
  699. package/src/tools/dispatch-admission.ts +18 -5
  700. package/src/tools/dispatch-arguments.ts +21 -21
  701. package/src/tools/dispatch-plan.ts +0 -11
  702. package/src/tools/dispatch-run-events.ts +145 -28
  703. package/src/tools/dispatch-runner.ts +40 -13
  704. package/src/tools/dispatch-types.ts +15 -3
  705. package/src/tools/dispatch.ts +2 -2
  706. package/src/tools/executables.ts +17 -14
  707. package/src/tools/find.ts +1 -6
  708. package/src/tools/monitor.ts +4 -4
  709. package/src/tools/observation.ts +54 -4
  710. package/src/tools/observers.ts +0 -33
  711. package/src/tools/panes-surface.ts +38 -0
  712. package/src/tools/panes.ts +112 -0
  713. package/src/tools/policy.ts +10 -1
  714. package/src/tools/presentation.ts +1 -0
  715. package/src/tools/task-worktree.ts +28 -7
  716. package/src/tools/verify/authoring.ts +3 -6
  717. package/src/tools/verify/frontend.ts +1 -1
  718. package/src/tools/web-fetch.ts +1 -1
  719. package/src/worker/entry.ts +4 -3
  720. package/src/worker/protocol.ts +16 -14
  721. package/src/worker/spec-contract.ts +2 -2
  722. package/src/worker/stdin-demux.ts +2 -2
  723. package/dist/chunk-D73KXYPF.js +0 -37
  724. package/dist/chunk-MLOK6ZOS.js +0 -2888
  725. package/dist/chunk-PNY46YEY.js +0 -1581
  726. package/dist/chunk-XDOQXGFO.js +0 -515
  727. package/dist/chunk-YKOFT37S.js +0 -279
  728. package/dist/clio-LT5V7SSZ.js +0 -26
  729. package/dist/configure-2WYWSCSD.js +0 -49
  730. package/dist/doctor-TWBWFK5V.js +0 -165
  731. package/src/engine/apis/degraded-inference.ts +0 -95
  732. /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
  733. /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
package/src/cli/acp.ts CHANGED
@@ -58,7 +58,7 @@ function parseAcpFlags(args: ReadonlyArray<string>): AcpFlags | string {
58
58
  * Throws when the path cannot be resolved, which the caller reports as an
59
59
  * unusable `--cwd`.
60
60
  */
61
- export function resolveAcpCwd(value: string): string {
61
+ function resolveAcpCwd(value: string): string {
62
62
  return realpathSync(path.resolve(value));
63
63
  }
64
64
 
@@ -66,11 +66,15 @@ export async function runAcpCommand(
66
66
  args: ReadonlyArray<string>,
67
67
  options: { apiKey?: string; noContextFiles?: boolean; noSkills?: boolean; skillPaths?: ReadonlyArray<string> } = {},
68
68
  ): Promise<number> {
69
- if (args.includes("--help") || args.includes("-h")) {
69
+ // The top-level argv parser normally rewrites --acp to the `acp` command
70
+ // sentinel. Keep the command boundary tolerant too, so another dispatcher
71
+ // can pass the flag spelling through without changing ACP option semantics.
72
+ const normalizedArgs = args[0] === "--acp" ? args.slice(1) : args;
73
+ if (normalizedArgs.includes("--help") || normalizedArgs.includes("-h")) {
70
74
  process.stdout.write(HELP);
71
75
  return 0;
72
76
  }
73
- const flags = parseAcpFlags(args);
77
+ const flags = parseAcpFlags(normalizedArgs);
74
78
  if (typeof flags === "string") {
75
79
  printError(flags);
76
80
  process.stderr.write(HELP);
@@ -103,7 +107,7 @@ export async function runAcpCommand(
103
107
  transportOptions: {
104
108
  write: writeRawStdout,
105
109
  diagnostics: (line) => {
106
- process.stderr.write(`[clio:acp] ${line}\n`);
110
+ process.stderr.write(`[clio-coder:acp] ${line}\n`);
107
111
  },
108
112
  },
109
113
  ...(flags.permissionTimeoutMs === undefined ? {} : { permissionTimeoutMs: flags.permissionTimeoutMs }),
package/src/cli/argv.ts CHANGED
@@ -70,6 +70,11 @@ export interface GlobalCliFlags {
70
70
  noContextFiles: boolean;
71
71
  noSkills: boolean;
72
72
  skillPaths: string[];
73
+ /**
74
+ * Panes activation from the command line. `--with-panes` and `--no-panes`
75
+ * both beat the `panes.enabled` setting; absent means the setting decides.
76
+ */
77
+ panes?: "with" | "without";
73
78
  rest: string[];
74
79
  error?: string;
75
80
  }
@@ -85,6 +90,8 @@ const GLOBAL_ONLY_FLAGS: ReadonlyMap<string, string> = new Map([
85
90
  ["--api-key", "--api-key <key>"],
86
91
  ["--no-context-files", "--no-context-files"],
87
92
  ["-nc", "-nc"],
93
+ ["--with-panes", "--with-panes"],
94
+ ["--no-panes", "--no-panes"],
88
95
  ]);
89
96
 
90
97
  /**
@@ -128,6 +135,7 @@ export function extractGlobalFlags(
128
135
  let apiKey: string | undefined;
129
136
  let noContextFiles = false;
130
137
  let noSkills = false;
138
+ let panes: "with" | "without" | undefined;
131
139
  const skillPaths: string[] = [];
132
140
  for (let i = 0; i < argv.length; i++) {
133
141
  const arg = argv[i];
@@ -140,6 +148,14 @@ export function extractGlobalFlags(
140
148
  rest.push(...argv.slice(i));
141
149
  break;
142
150
  }
151
+ if (arg === "--acp") {
152
+ // Treat the global spelling as a command boundary. Rewriting only the
153
+ // sentinel keeps every trailing ACP option on the exact same dispatcher
154
+ // and parser path as `clio-coder acp`, without importing that command into
155
+ // the dependency-light startup graph.
156
+ rest.push("acp", ...argv.slice(i + 1));
157
+ break;
158
+ }
143
159
  if (ROOT_FLAG_TOKENS.has(arg)) {
144
160
  rest.push(arg);
145
161
  continue;
@@ -152,6 +168,12 @@ export function extractGlobalFlags(
152
168
  noSkills = true;
153
169
  continue;
154
170
  }
171
+ if (arg === "--with-panes" || arg === "--no-panes") {
172
+ // Last occurrence wins, so a wrapper script's baked-in choice can be
173
+ // overridden by appending the opposite flag.
174
+ panes = arg === "--with-panes" ? "with" : "without";
175
+ continue;
176
+ }
155
177
  if (arg === "--api-key" || arg === "--skill") {
156
178
  const value = argv[i + 1];
157
179
  if (value === undefined || value.startsWith("-") || isSubcommand(value)) {
@@ -162,6 +184,7 @@ export function extractGlobalFlags(
162
184
  rest,
163
185
  error: `${arg} requires a value`,
164
186
  ...(apiKey === undefined ? {} : { apiKey }),
187
+ ...(panes === undefined ? {} : { panes }),
165
188
  };
166
189
  }
167
190
  if (arg === "--api-key") apiKey = value;
@@ -176,6 +199,7 @@ export function extractGlobalFlags(
176
199
  rest,
177
200
  error: unknownGlobalOptionError(arg),
178
201
  ...(apiKey === undefined ? {} : { apiKey }),
202
+ ...(panes === undefined ? {} : { panes }),
179
203
  };
180
204
  }
181
205
  return {
@@ -184,5 +208,6 @@ export function extractGlobalFlags(
184
208
  skillPaths,
185
209
  rest,
186
210
  ...(apiKey === undefined ? {} : { apiKey }),
211
+ ...(panes === undefined ? {} : { panes }),
187
212
  };
188
213
  }
package/src/cli/auth.ts CHANGED
@@ -104,8 +104,8 @@ function renderStatusRows(rows: ReadonlyArray<ConnectableProviderRow>): string {
104
104
 
105
105
  function defaultAuthTarget(rows: ReadonlyArray<ConnectableProviderRow>): string | undefined {
106
106
  const settings = readSettings();
107
- const activeTarget = settings.orchestrator.target
108
- ? settings.targets.find((entry) => entry.id === settings.orchestrator.target)
107
+ const activeTarget = settings.chat.target
108
+ ? settings.targets.find((entry) => entry.id === settings.chat.target)
109
109
  : undefined;
110
110
  if (activeTarget && rows.some((row) => row.entry.runtimeId === activeTarget.runtime)) {
111
111
  return activeTarget.runtime;
@@ -79,9 +79,9 @@ export interface BootstrapRoute {
79
79
  */
80
80
  export function resolveBootstrapRoute(settings: Readonly<ClioSettings>): BootstrapRoute {
81
81
  for (const agentId of [CONTEXT_BOOTSTRAP_AGENT_ID, "scout"]) {
82
- const profileName = settings.workers.agentBindings[agentId];
82
+ const profileName = settings.fleet.agentProfiles[agentId];
83
83
  if (!profileName) continue;
84
- const profile = settings.workers.profiles[profileName];
84
+ const profile = settings.fleet.profiles[profileName];
85
85
  if (!profile) throw new Error(`bootstrap profile '${profileName}' is not configured (bound to '${agentId}')`);
86
86
  if (!profile.target) throw new Error(`bootstrap profile '${profileName}' has no target (bound to '${agentId}')`);
87
87
  return {
@@ -90,7 +90,7 @@ export function resolveBootstrapRoute(settings: Readonly<ClioSettings>): Bootstr
90
90
  ...(profile.thinkingLevel ? { thinkingLevel: profile.thinkingLevel } : {}),
91
91
  };
92
92
  }
93
- const fallback = settings.workers.default;
93
+ const fallback = settings.fleet.default;
94
94
  if (!fallback?.target) {
95
95
  throw new Error(
96
96
  `bootstrap has no route: workers.agentBindings.${CONTEXT_BOOTSTRAP_AGENT_ID} is unbound and ` +
@@ -233,7 +233,7 @@ async function collectDispatchAssistantText(
233
233
  message: "bootstrap agent started repository exploration",
234
234
  });
235
235
  }
236
- if (isRecord(event) && event.type === "clio_tool_start") {
236
+ if (isRecord(event) && event.type === "clio_coder_tool_start") {
237
237
  const tool = toolNameFromEvent(event);
238
238
  if (tool) {
239
239
  input.progress?.({
@@ -244,7 +244,7 @@ async function collectDispatchAssistantText(
244
244
  });
245
245
  }
246
246
  }
247
- if (isRecord(event) && event.type === "clio_tool_finish") {
247
+ if (isRecord(event) && event.type === "clio_coder_tool_finish") {
248
248
  const tool = toolNameFromEvent(event);
249
249
  const outcome = toolOutcomeFromEvent(event) ?? "done";
250
250
  if (tool) {
package/src/cli/clio.ts CHANGED
@@ -6,7 +6,7 @@ import { classifyDefaultTarget, describeVerdict } from "./default-target.js";
6
6
 
7
7
  /** Headless and ACP keep their established non-TUI transports even when an
8
8
  * embedding process leaves the interactive marker in the environment. */
9
- export function terminalLeaseEligible(
9
+ function terminalLeaseEligible(
10
10
  options: Pick<BootOptions, "headless" | "acp">,
11
11
  env: Readonly<Record<string, string | undefined>> = process.env,
12
12
  ): boolean {
@@ -44,6 +44,11 @@ export async function runClioCommand(options: BootOptions = {}): Promise<number>
44
44
  const configured = await runConfigureCommand([]);
45
45
  if (configured !== 0) return configured;
46
46
  startupSettings = readStrictLayeredSettings(process.cwd()).settings;
47
+ const configuredVerdict = classifyDefaultTarget(startupSettings);
48
+ if (configuredVerdict.kind !== "usable" && configuredVerdict.kind !== "missing-credential") {
49
+ process.stderr.write(`${describeVerdict(configuredVerdict)} Configuration did not complete; startup cancelled.\n`);
50
+ return 2;
51
+ }
47
52
  }
48
53
  }
49
54
  let terminalLease: import("../interactive/terminal-lease.js").TerminalLease | undefined;
@@ -317,12 +317,12 @@ function inspectSafetyAndMemory(cwd: string, graph: CustomizationGraph): void {
317
317
  const layered = readLayeredSettings(cwd);
318
318
  graph.entries.push({
319
319
  category: "safety",
320
- id: "autonomy",
321
- scope: settingsSourceFor(layered.sources, "autonomy"),
320
+ id: "safety.autonomy",
321
+ scope: settingsSourceFor(layered.sources, "safety.autonomy"),
322
322
  reloadClass: "hot",
323
323
  trust: "n/a",
324
324
  precedence: "single",
325
- detail: { autonomy: layered.settings.autonomy ?? "auto-edit" },
325
+ detail: { autonomy: layered.settings.safety.autonomy ?? "auto-edit" },
326
326
  });
327
327
  } catch (err) {
328
328
  graph.issues.push(`safety: ${err instanceof Error ? err.message : String(err)}`);
@@ -22,7 +22,7 @@ function describe(proposal: InteropProposal): string {
22
22
  renderProposalEntry(proposal),
23
23
  "",
24
24
  `projectContext stays ${INHERITED_PROJECT_CONTEXT}: this agent receives your task text, never the project projection.`,
25
- `toolGovernance is clio-policy: its tool calls are gated by Clio safety.`,
25
+ `toolGovernance is clio-coder-policy: its tool calls are gated by Clio safety.`,
26
26
  ];
27
27
  if (proposal.needsNetworkInstall) {
28
28
  lines.push(`The ACP adapter is not installed locally; npx fetches it the first time you delegate.`);
@@ -19,6 +19,8 @@ import {
19
19
  listKnownModelsForRuntime,
20
20
  listProviderSupportEntries,
21
21
  type ProviderSupportEntry,
22
+ readTargetModelSnapshot,
23
+ recordTargetModelSnapshot,
22
24
  resolveRuntimeAuthTarget,
23
25
  supportGroupLabel,
24
26
  } from "../domains/providers/index.js";
@@ -78,7 +80,7 @@ Non-interactive flags:
78
80
  --force save a model outside the runtime catalog, or one the
79
81
  target does not advertise, without refusing
80
82
  --gateway mark the target as a gateway
81
- --lifecycle <user-managed|clio-managed>
83
+ --lifecycle <user-managed|clio-coder-managed>
82
84
  resident model lifecycle policy
83
85
  --set-orchestrator use this target for chat
84
86
  --set-background use this target for proactive task memory
@@ -103,6 +105,7 @@ const DEFAULT_PORTS: Record<string, number> = {
103
105
  lemonade: 8000,
104
106
  "anthropic-compat": 8000,
105
107
  "openai-compat": 8000,
108
+ litellm: 4000,
106
109
  };
107
110
 
108
111
  interface ParsedArgs {
@@ -222,8 +225,8 @@ function parseSetupArgs(argv: ReadonlyArray<string>): ParsedArgs {
222
225
  break;
223
226
  case "--lifecycle": {
224
227
  const v = need();
225
- if (v !== "user-managed" && v !== "clio-managed") {
226
- throw new Error("--lifecycle must be user-managed or clio-managed");
228
+ if (v !== "user-managed" && v !== "clio-coder-managed") {
229
+ throw new Error("--lifecycle must be user-managed or clio-coder-managed");
227
230
  }
228
231
  out.lifecycle = v;
229
232
  break;
@@ -317,7 +320,9 @@ function printRuntimeList(includeHidden: boolean): void {
317
320
  : runtime?.auth === "api-key"
318
321
  ? status?.available
319
322
  ? "credential"
320
- : "needs-key"
323
+ : targetRequiresAuth({ id: entry.runtimeId, runtime: entry.runtimeId }, runtime)
324
+ ? "needs-key"
325
+ : "key-optional"
321
326
  : (runtime?.auth ?? "none");
322
327
  rows.push({
323
328
  group: supportGroupLabel(entry.group),
@@ -387,8 +392,8 @@ function catalogContextWindowFor(runtime: RuntimeDescriptor, modelId: string): n
387
392
  /**
388
393
  * Check the resolved model against the catalog where there is one and against
389
394
  * the target's own list where there is not. A runtime with no catalog used to
390
- * pass any string here while the same command wrote the live list that ruled
391
- * it out into `wireModels`, so the target saved as `ok` and failed on its first
395
+ * pass any string here while the same command had a live list that ruled it
396
+ * out, so the target saved as `ok` and failed on its first
392
397
  * turn. Without a catalog or a live list there is nothing to check against, and
393
398
  * the note says so rather than implying the id was verified.
394
399
  */
@@ -480,13 +485,13 @@ function setOrchestratorPointer(settings: ClioSettings, descriptor: TargetDescri
480
485
  `cannot use target '${descriptor.id}' as orchestrator target because runtime '${runtime.id}' is not an HTTP/native runtime`,
481
486
  );
482
487
  }
483
- settings.orchestrator.target = descriptor.id;
484
- settings.orchestrator.model = model ?? descriptor.defaultModel ?? null;
488
+ settings.chat.target = descriptor.id;
489
+ settings.chat.model = model ?? descriptor.defaultModel ?? null;
485
490
  }
486
491
 
487
492
  function setWorkerDefaultPointer(settings: ClioSettings, descriptor: TargetDescriptor, model?: string | null): void {
488
- settings.workers.default.target = descriptor.id;
489
- settings.workers.default.model = model ?? descriptor.defaultModel ?? null;
493
+ settings.fleet.default.target = descriptor.id;
494
+ settings.fleet.default.model = model ?? descriptor.defaultModel ?? null;
490
495
  }
491
496
 
492
497
  function setBackgroundPointer(settings: ClioSettings, descriptor: TargetDescriptor, model?: string | null): void {
@@ -496,13 +501,13 @@ function setBackgroundPointer(settings: ClioSettings, descriptor: TargetDescript
496
501
  `cannot use target '${descriptor.id}' as background target because runtime '${descriptor.runtime}' is not an HTTP/native runtime`,
497
502
  );
498
503
  }
499
- settings.background.target = descriptor.id;
500
- settings.background.model = model ?? descriptor.defaultModel ?? null;
504
+ settings.context.memory.target = descriptor.id;
505
+ settings.context.memory.model = model ?? descriptor.defaultModel ?? null;
501
506
  }
502
507
 
503
508
  function assertOrchestratorReplacementEligible(settings: ClioSettings, descriptor: TargetDescriptor): void {
504
- if (settings.orchestrator.target !== descriptor.id && settings.background.target !== descriptor.id) return;
505
- const role = settings.orchestrator.target === descriptor.id ? "orchestrator" : "background";
509
+ if (settings.chat.target !== descriptor.id && settings.context.memory.target !== descriptor.id) return;
510
+ const role = settings.chat.target === descriptor.id ? "orchestrator" : "background";
506
511
  const runtime = getRuntimeRegistry().get(descriptor.runtime);
507
512
  if (!runtime) {
508
513
  throw new Error(
@@ -522,7 +527,7 @@ function setWorkerProfilePointer(
522
527
  ): void {
523
528
  const trimmed = name.trim();
524
529
  if (trimmed.length === 0) throw new Error("fleet profile name must be non-empty");
525
- settings.workers.profiles[trimmed] = {
530
+ settings.fleet.profiles[trimmed] = {
526
531
  target: descriptor.id,
527
532
  model: model ?? descriptor.defaultModel ?? null,
528
533
  thinkingLevel: "off",
@@ -602,10 +607,10 @@ function printSummary(settings: ClioSettings, descriptor: TargetDescriptor, prob
602
607
  for (const line of probeLines(descriptor, probe)) process.stdout.write(` ${line}\n`);
603
608
  }
604
609
  warnUndiscoveredContextWindow(descriptor, probe);
605
- if (settings.orchestrator.target === descriptor.id) process.stdout.write(" orchestrator target\n");
606
- if (settings.background.target === descriptor.id) process.stdout.write(" background memory target\n");
607
- if (settings.workers.default.target === descriptor.id) process.stdout.write(" fleet default\n");
608
- for (const [name, profile] of Object.entries(settings.workers.profiles)) {
610
+ if (settings.chat.target === descriptor.id) process.stdout.write(" orchestrator target\n");
611
+ if (settings.context.memory.target === descriptor.id) process.stdout.write(" background memory target\n");
612
+ if (settings.fleet.default.target === descriptor.id) process.stdout.write(" fleet default\n");
613
+ for (const [name, profile] of Object.entries(settings.fleet.profiles)) {
609
614
  if (profile.target === descriptor.id) process.stdout.write(` fleet profile ${name}\n`);
610
615
  }
611
616
  process.stdout.write(`\nsettings written to ${settingsPath()}\n`);
@@ -617,7 +622,6 @@ function buildDescriptor(
617
622
  parts: {
618
623
  url?: string;
619
624
  model?: string;
620
- wireModels?: string[];
621
625
  apiKeyEnv?: string;
622
626
  apiKeyRef?: string;
623
627
  oauthProfile?: string;
@@ -631,19 +635,12 @@ function buildDescriptor(
631
635
  ): TargetDescriptor {
632
636
  const descriptor: TargetDescriptor = { id, runtime: runtime.id };
633
637
  if (parts.url) descriptor.url = parts.url;
634
- const wireModels =
635
- parts.wireModels?.filter((value, index, all) => value.trim().length > 0 && all.indexOf(value) === index) ?? [];
636
638
  if (parts.model) descriptor.defaultModel = parts.model;
637
- else {
638
- const firstWireModel = wireModels[0];
639
- if (firstWireModel) descriptor.defaultModel = firstWireModel;
640
- }
641
639
  const auth: NonNullable<TargetDescriptor["auth"]> = {};
642
640
  if (parts.apiKeyEnv) auth.apiKeyEnvVar = parts.apiKeyEnv;
643
641
  if (parts.apiKeyRef) auth.apiKeyRef = parts.apiKeyRef;
644
642
  if (parts.oauthProfile) auth.oauthProfile = parts.oauthProfile;
645
643
  if (Object.keys(auth).length > 0) descriptor.auth = auth;
646
- if (wireModels.length > 0) descriptor.wireModels = wireModels;
647
644
  if (parts.gateway) descriptor.gateway = true;
648
645
  if (parts.lifecycle) descriptor.lifecycle = parts.lifecycle;
649
646
  const caps: NonNullable<TargetDescriptor["capabilities"]> = {};
@@ -714,7 +711,7 @@ async function loginOAuthRuntime(rl: ReturnType<typeof createInterface>, runtime
714
711
  */
715
712
  interface WireModelInventory {
716
713
  models: string[];
717
- source: "catalog" | "probe" | "existing" | "none";
714
+ source: "catalog" | "probe" | "cache" | "legacy" | "none";
718
715
  /** Per-model load state when the probe reported it. */
719
716
  modelStates?: Readonly<Record<string, ProbeModelStatus>> | undefined;
720
717
  }
@@ -761,13 +758,21 @@ async function resolveSupportedWireModels(
761
758
  // lists models only through probeModels still gets its ids checked.
762
759
  const probe = await runtimeProbe(runtime, target, authToken);
763
760
  if (probe?.ok && probe.models && probe.models.length > 0) {
761
+ recordTargetModelSnapshot(target, probe.models);
764
762
  return { models: [...probe.models], source: "probe", modelStates: probe.modelStates };
765
763
  }
766
764
  const discovered = await runtimeProbeModels(runtime, target, authToken);
767
- if (discovered.length > 0) return { models: discovered, source: "probe" };
765
+ if (discovered.length > 0) {
766
+ recordTargetModelSnapshot(target, discovered);
767
+ return { models: discovered, source: "probe" };
768
+ }
769
+ }
770
+ const cached = readTargetModelSnapshot(target);
771
+ if (cached && cached.models.length > 0) return { models: [...cached.models], source: "cache" };
772
+ if (existing?.wireModels && existing.wireModels.length > 0) {
773
+ recordTargetModelSnapshot(target, existing.wireModels);
774
+ return { models: [...existing.wireModels], source: "legacy" };
768
775
  }
769
- if (existing?.wireModels && existing.wireModels.length > 0)
770
- return { models: [...existing.wireModels], source: "existing" };
771
776
  return { models: [], source: "none" };
772
777
  }
773
778
 
@@ -905,7 +910,6 @@ async function runNonInteractive(runtime: RuntimeDescriptor, args: ParsedArgs):
905
910
  const descriptor = buildDescriptor(runtime, args.id, {
906
911
  ...(url !== undefined ? { url } : {}),
907
912
  ...(model ? { model } : {}),
908
- ...(wireModels.length > 0 ? { wireModels } : {}),
909
913
  ...(apiKeyEnv !== undefined ? { apiKeyEnv } : {}),
910
914
  ...(apiKeyRef !== undefined ? { apiKeyRef } : {}),
911
915
  ...(oauthProfile !== undefined ? { oauthProfile } : {}),
@@ -966,6 +970,7 @@ async function runNonInteractive(runtime: RuntimeDescriptor, args: ParsedArgs):
966
970
  applyConfiguration(settings);
967
971
  updateSettings(applyConfiguration);
968
972
  const probe = await runtimeProbe(runtime, descriptor);
973
+ if (probe?.ok && probe.models) recordTargetModelSnapshot(descriptor, probe.models);
969
974
  printSummary(settings, descriptor, probe);
970
975
  if (
971
976
  runtime.auth === "oauth" &&
@@ -1150,7 +1155,7 @@ async function runInteractive(
1150
1155
  let runtime = preselectedRuntime ?? (await pickRuntimeViaCategory(rl));
1151
1156
  if (!runtime) {
1152
1157
  printError("configuration cancelled");
1153
- return 0;
1158
+ return 130;
1154
1159
  }
1155
1160
  const auth = openAuthStorage();
1156
1161
  const settings = readSettings();
@@ -1272,10 +1277,7 @@ async function runInteractive(
1272
1277
  }
1273
1278
 
1274
1279
  let model: string | undefined = defaults.model;
1275
- let inventory: WireModelInventory =
1276
- existing?.wireModels && existing.wireModels.length > 0
1277
- ? { models: [...existing.wireModels], source: "existing" }
1278
- : { models: [], source: "none" };
1280
+ let inventory: WireModelInventory = { models: [], source: "none" };
1279
1281
  const tentative = buildDescriptor(runtime, targetId, {
1280
1282
  ...(url !== undefined ? { url } : {}),
1281
1283
  ...(apiKeyEnv !== undefined ? { apiKeyEnv } : {}),
@@ -1367,7 +1369,6 @@ async function runInteractive(
1367
1369
  ...(apiKeyEnv !== undefined ? { apiKeyEnv } : {}),
1368
1370
  ...(apiKeyRef !== undefined ? { apiKeyRef } : {}),
1369
1371
  ...(oauthProfile !== undefined ? { oauthProfile } : {}),
1370
- ...(wireModels.length > 0 ? { wireModels } : {}),
1371
1372
  gateway: gatewayAnswer,
1372
1373
  ...(defaults.lifecycle !== undefined
1373
1374
  ? { lifecycle: defaults.lifecycle }
@@ -1395,6 +1396,7 @@ async function runInteractive(
1395
1396
  }
1396
1397
 
1397
1398
  const probe = await runtimeProbe(runtime, descriptor);
1399
+ if (probe?.ok && probe.models) recordTargetModelSnapshot(descriptor, probe.models);
1398
1400
  if (probe) {
1399
1401
  process.stdout.write("\n");
1400
1402
  for (const line of probeLines(descriptor, probe)) process.stdout.write(`${line}\n`);
@@ -1411,10 +1413,10 @@ async function runInteractive(
1411
1413
  ? false
1412
1414
  : defaults.setOrchestrator
1413
1415
  ? true
1414
- : await askYesNo(rl, "use as orchestrator (chat) target?", !settings.orchestrator.target);
1416
+ : await askYesNo(rl, "use as orchestrator (chat) target?", !settings.chat.target);
1415
1417
  const setWorkerDefault = defaults.setWorkerDefault
1416
1418
  ? true
1417
- : await askYesNo(rl, "use as fleet default?", !settings.workers.default.target);
1419
+ : await askYesNo(rl, "use as fleet default?", !settings.fleet.default.target);
1418
1420
  const setBackground = !isOrchestratorEligibleRuntime(runtime)
1419
1421
  ? false
1420
1422
  : defaults.setBackground
@@ -1426,7 +1428,7 @@ async function runInteractive(
1426
1428
  rl,
1427
1429
  "Orchestrator model",
1428
1430
  wireModels,
1429
- settings.orchestrator.target === targetId ? (settings.orchestrator.model ?? model) : model,
1431
+ settings.chat.target === targetId ? (settings.chat.model ?? model) : model,
1430
1432
  )))
1431
1433
  : undefined;
1432
1434
  if (orchestratorModel === null) return 0;
@@ -1436,7 +1438,7 @@ async function runInteractive(
1436
1438
  rl,
1437
1439
  "Fleet model",
1438
1440
  wireModels,
1439
- settings.workers.default.target === targetId ? (settings.workers.default.model ?? model) : model,
1441
+ settings.fleet.default.target === targetId ? (settings.fleet.default.model ?? model) : model,
1440
1442
  )))
1441
1443
  : undefined;
1442
1444
  if (workerModel === null) return 0;
@@ -1446,7 +1448,7 @@ async function runInteractive(
1446
1448
  rl,
1447
1449
  "Background memory model",
1448
1450
  wireModels,
1449
- settings.background.target === targetId ? (settings.background.model ?? model) : model,
1451
+ settings.context.memory.target === targetId ? (settings.context.memory.model ?? model) : model,
1450
1452
  )))
1451
1453
  : undefined;
1452
1454
  if (backgroundModel === null) return 0;
@@ -1496,13 +1498,13 @@ export function runTargetRename(oldId: string, newId: string): number {
1496
1498
  const target = settings.targets.find((e) => e.id === oldId);
1497
1499
  if (!target) return;
1498
1500
  target.id = newId;
1499
- if (settings.orchestrator.target === oldId) settings.orchestrator.target = newId;
1500
- if (settings.background.target === oldId) settings.background.target = newId;
1501
- if (settings.workers.default.target === oldId) settings.workers.default.target = newId;
1502
- for (const profile of Object.values(settings.workers.profiles)) {
1501
+ if (settings.chat.target === oldId) settings.chat.target = newId;
1502
+ if (settings.context.memory.target === oldId) settings.context.memory.target = newId;
1503
+ if (settings.fleet.default.target === oldId) settings.fleet.default.target = newId;
1504
+ for (const profile of Object.values(settings.fleet.profiles)) {
1503
1505
  if (profile.target === oldId) profile.target = newId;
1504
1506
  }
1505
- settings.scope = settings.scope.map((entry) => {
1507
+ settings.chat.modelPicker.cycleSet = settings.chat.modelPicker.cycleSet.map((entry) => {
1506
1508
  const [head, ...rest] = entry.split("/");
1507
1509
  if (head !== oldId) return entry;
1508
1510
  return rest.length === 0 ? newId : `${newId}/${rest.join("/")}`;
@@ -24,7 +24,7 @@ export type DefaultTargetVerdict =
24
24
  | { kind: "missing-credential"; targetId: string; store: string };
25
25
 
26
26
  export function classifyDefaultTarget(settings: Readonly<ClioSettings> = readSettings()): DefaultTargetVerdict {
27
- const targetId = settings.orchestrator.target;
27
+ const targetId = settings.chat.target;
28
28
  if (!targetId) return { kind: "no-target" };
29
29
  // A chat target naming an id that is not in `targets` cannot arrive here:
30
30
  // the schema normalizes dangling routing references to null so that
package/src/cli/docs.ts CHANGED
@@ -65,12 +65,12 @@ export interface DocsMenuEntry {
65
65
  }
66
66
 
67
67
  /** Resolve docs/html from the package root; present in a source checkout, absent from the npm package. */
68
- export function resolveDocsHtmlDir(): string {
68
+ function resolveDocsHtmlDir(): string {
69
69
  return resolve(resolvePackageRoot(), "docs", "html");
70
70
  }
71
71
 
72
72
  /** Content-type for a file path by extension. Pure. Defaults to octet-stream. */
73
- export function contentTypeFor(filePath: string): string {
73
+ function contentTypeFor(filePath: string): string {
74
74
  const dot = filePath.lastIndexOf(".");
75
75
  if (dot === -1) return "application/octet-stream";
76
76
  return CONTENT_TYPES[filePath.slice(dot).toLowerCase()] ?? "application/octet-stream";
@@ -82,7 +82,7 @@ export function contentTypeFor(filePath: string): string {
82
82
  * to `index.html`, and rejects any traversal segment so a request can never
83
83
  * escape the served directory.
84
84
  */
85
- export function resolveRequestPath(rawUrl: string): { ok: true; relative: string } | { ok: false; reason: string } {
85
+ function resolveRequestPath(rawUrl: string): { ok: true; relative: string } | { ok: false; reason: string } {
86
86
  const pathPart = (rawUrl.split(/[?#]/, 1)[0] ?? "").trim();
87
87
  let decoded: string;
88
88
  try {
@@ -112,7 +112,7 @@ function titleize(topic: string): string {
112
112
  * the file-name list, not the directory. `index.html` is the menu itself and is
113
113
  * excluded; a trailing `_blueprint` is stripped from the topic key.
114
114
  */
115
- export function synthesizeMenu(fileNames: ReadonlyArray<string>): DocsMenuEntry[] {
115
+ function synthesizeMenu(fileNames: ReadonlyArray<string>): DocsMenuEntry[] {
116
116
  const entries: DocsMenuEntry[] = [];
117
117
  for (const name of fileNames) {
118
118
  if (!name.toLowerCase().endsWith(".html")) continue;
@@ -129,7 +129,7 @@ export function synthesizeMenu(fileNames: ReadonlyArray<string>): DocsMenuEntry[
129
129
  * topic (`safety`), the blueprint file stem (`safety_blueprint`), or a full
130
130
  * `.html` name, case-insensitively. Returns null when nothing matches.
131
131
  */
132
- export function topicToFile(topic: string, fileNames: ReadonlyArray<string>): string | null {
132
+ function topicToFile(topic: string, fileNames: ReadonlyArray<string>): string | null {
133
133
  const wanted = topic
134
134
  .trim()
135
135
  .toLowerCase()
@@ -227,7 +227,7 @@ export interface StartDocsServerOptions {
227
227
  }
228
228
 
229
229
  /** Start the viewer bound to 127.0.0.1 on an ephemeral port. */
230
- export async function startDocsServer(options: StartDocsServerOptions): Promise<DocsServerHandle> {
230
+ async function startDocsServer(options: StartDocsServerOptions): Promise<DocsServerHandle> {
231
231
  const host = options.host ?? HOST;
232
232
  const server = createServer(createDocsRequestHandler(options.htmlDir));
233
233
  await new Promise<void>((resolveListen, rejectListen) => {