@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
@@ -0,0 +1,323 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+
5
+ import { parse as parseYaml } from "yaml";
6
+ import { withSettingsLock } from "../core/config.js";
7
+ import { resolveClioDirs } from "../core/xdg.js";
8
+ import type { DoctorFinding } from "../domains/lifecycle/doctor.js";
9
+ import {
10
+ migrateNamingSettingsFile,
11
+ transformNamingSettingsDocument,
12
+ } from "../domains/lifecycle/migrations/2026-09-01-clio-coder-naming.js";
13
+ import { inspectNamingHistory } from "../domains/lifecycle/naming-history.js";
14
+ import {
15
+ inspectInstalledNamingResources,
16
+ inspectModelOverlayNaming,
17
+ inspectSkillMetadataNaming,
18
+ } from "../domains/lifecycle/naming-resources.js";
19
+ import { inspectToolMarkerNaming } from "../domains/lifecycle/naming-tool-markers.js";
20
+ import { inspectYaziNaming, regenerateYaziNamingProfile } from "../domains/lifecycle/naming-yazi.js";
21
+
22
+ export interface NamingDoctorOptions {
23
+ fix?: boolean;
24
+ cwd?: string;
25
+ yaziEnabled?: boolean;
26
+ }
27
+
28
+ interface SettingsNamingInspection {
29
+ path: string;
30
+ legacy: number;
31
+ conflicts: number;
32
+ error: string | null;
33
+ }
34
+
35
+ const LEGACY_ENVIRONMENT_NAMES = [
36
+ ["CLIO_EVAL_RUNNER_STDOUT_FILE", "CLIO_CODER_EVAL_RUNNER_STDOUT_FILE"],
37
+ ["CLIO_YAZI_PICK_TOKEN", "CLIO_CODER_YAZI_PICK_TOKEN"],
38
+ ] as const;
39
+
40
+ function namingEnvironmentFindings(
41
+ yaziEnabled: boolean,
42
+ environment: NodeJS.ProcessEnv = process.env,
43
+ ): DoctorFinding[] {
44
+ const present = LEGACY_ENVIRONMENT_NAMES.filter(
45
+ ([legacy]) => (yaziEnabled || legacy !== "CLIO_YAZI_PICK_TOKEN") && Boolean(environment[legacy]?.trim()),
46
+ );
47
+ if (present.length === 0) {
48
+ return [{ ok: true, name: "naming environment", detail: "no legacy Clio Coder environment variables are set" }];
49
+ }
50
+ return present.map(([legacy, canonical]) => ({
51
+ ok: true,
52
+ level: "warn",
53
+ name: "naming environment",
54
+ detail: `${legacy} is deprecated; use ${canonical} (compatibility ends in v0.7.0)`,
55
+ }));
56
+ }
57
+
58
+ function namingResourceFindings(options: NamingDoctorOptions): DoctorFinding[] {
59
+ try {
60
+ const resourceOptions = {
61
+ ...(options.cwd ? { cwd: options.cwd } : {}),
62
+ ...(options.fix !== undefined ? { fix: options.fix } : {}),
63
+ };
64
+ const resources = inspectInstalledNamingResources(resourceOptions);
65
+ const legacyResources = resources.filter((entry) => entry.status !== "absent");
66
+ const rootOptions = options.cwd ? { cwd: options.cwd } : {};
67
+ const skillMetadata = inspectSkillMetadataNaming(rootOptions).filter((entry) => entry.legacyMetadataKey);
68
+ const overlays = inspectModelOverlayNaming(rootOptions).filter(
69
+ (entry) => entry.legacyFile || entry.legacyMetadataKeys > 0,
70
+ );
71
+ if (legacyResources.length === 0 && skillMetadata.length === 0 && overlays.length === 0) {
72
+ return [{ ok: true, name: "naming resources", detail: "installed skills and model overlays use canonical names" }];
73
+ }
74
+ const renamed = legacyResources.filter((entry) => entry.status === "renamed").length;
75
+ const renamable = legacyResources.filter((entry) => entry.status === "renamable").length;
76
+ const conflicts = legacyResources.filter(
77
+ (entry) => entry.status === "modified" || entry.status === "canonical-present",
78
+ ).length;
79
+ return [
80
+ {
81
+ ok: true,
82
+ level:
83
+ renamed > 0 && renamable === 0 && conflicts === 0 && skillMetadata.length === 0 && overlays.length === 0
84
+ ? "ok"
85
+ : "warn",
86
+ name: "naming resources",
87
+ detail: [
88
+ `${renamed} proven skills renamed`,
89
+ `${renamable} proven skills await doctor --fix`,
90
+ `${conflicts} modified/conflicting skills left untouched`,
91
+ `${skillMetadata.length} legacy skill metadata keys`,
92
+ `${overlays.length} legacy model overlay files/metadata (manual migration required)`,
93
+ ].join("; "),
94
+ },
95
+ ];
96
+ } catch (error) {
97
+ return [
98
+ {
99
+ ok: false,
100
+ name: "naming resources",
101
+ detail: `resource naming inspection failed: ${error instanceof Error ? error.message : String(error)}`,
102
+ },
103
+ ];
104
+ }
105
+ }
106
+
107
+ function inspectSettingsNaming(path: string): SettingsNamingInspection {
108
+ if (!existsSync(path)) return { path, legacy: 0, conflicts: 0, error: null };
109
+ try {
110
+ const transformed = transformNamingSettingsDocument(parseYaml(readFileSync(path, "utf8")));
111
+ return {
112
+ path,
113
+ legacy: transformed.replacements.length,
114
+ conflicts: transformed.conflicts.length,
115
+ error: null,
116
+ };
117
+ } catch (error) {
118
+ return { path, legacy: 0, conflicts: 0, error: error instanceof Error ? error.message : String(error) };
119
+ }
120
+ }
121
+
122
+ function settingsFinding(label: string, inspection: SettingsNamingInspection, fixed: boolean): DoctorFinding {
123
+ if (inspection.error !== null) {
124
+ return {
125
+ ok: false,
126
+ name: `naming ${label}`,
127
+ detail: `${inspection.path} could not be inspected: ${inspection.error}`,
128
+ };
129
+ }
130
+ const count = inspection.legacy + inspection.conflicts;
131
+ if (count === 0) {
132
+ return { ok: true, name: `naming ${label}`, detail: `${inspection.path} has canonical settings identifiers` };
133
+ }
134
+ return {
135
+ ok: fixed,
136
+ level: fixed ? "ok" : "warn",
137
+ name: `naming ${label}`,
138
+ detail: fixed
139
+ ? `${inspection.path}: migrated ${inspection.legacy} aliases and resolved ${inspection.conflicts} canonical collisions; backup written beside the file`
140
+ : `${inspection.path}: ${inspection.legacy} legacy aliases and ${inspection.conflicts} canonical collisions (run \`clio-coder doctor --fix\`)`,
141
+ };
142
+ }
143
+
144
+ function yaziNamingFinding(fix: boolean, enabled: boolean): DoctorFinding {
145
+ if (!enabled) {
146
+ return {
147
+ ok: true,
148
+ name: "naming yazi profile",
149
+ detail: "disabled by settings",
150
+ };
151
+ }
152
+ const inspection = inspectYaziNaming();
153
+ const legacy = inspection.legacyEvents + inspection.legacyEnvironmentNames;
154
+ if (legacy === 0) {
155
+ return {
156
+ ok: true,
157
+ name: "naming yazi profile",
158
+ detail: inspection.present
159
+ ? `${inspection.profileDir} uses canonical event and environment identifiers`
160
+ : `${inspection.profileDir} is absent; the next managed open will generate canonical identifiers`,
161
+ };
162
+ }
163
+ if (!fix) {
164
+ return {
165
+ ok: true,
166
+ level: "warn",
167
+ name: "naming yazi profile",
168
+ detail: `${inspection.profileDir}: ${inspection.legacyEvents} legacy events and ${inspection.legacyEnvironmentNames} legacy environment names (run \`clio-coder doctor --fix\`)`,
169
+ };
170
+ }
171
+ const report = regenerateYaziNamingProfile();
172
+ return {
173
+ ok: report.status !== "regeneration-failed",
174
+ ...(report.status === "regeneration-failed" ? {} : { level: "ok" as const }),
175
+ name: "naming yazi profile",
176
+ detail: report.detail,
177
+ };
178
+ }
179
+
180
+ function toolMarkerNamingFinding(fix: boolean): DoctorFinding {
181
+ try {
182
+ const reports = inspectToolMarkerNaming({ fix });
183
+ if (reports.length === 0) {
184
+ return { ok: true, name: "naming tool markers", detail: "known tool versions use canonical install markers" };
185
+ }
186
+ const fixed = reports.filter((entry) => entry.status === "renamed" || entry.status === "duplicate-removed").length;
187
+ const fixable = reports.filter(
188
+ (entry) => entry.status === "renamable" || entry.status === "agreeing-duplicate",
189
+ ).length;
190
+ const manual = reports.length - fixed - fixable;
191
+ return {
192
+ ok: true,
193
+ level: fixed > 0 && fixable === 0 && manual === 0 ? "ok" : "warn",
194
+ name: "naming tool markers",
195
+ detail: `${fixed} validated markers fixed; ${fixable} await doctor --fix; ${manual} invalid/conflicting markers left untouched`,
196
+ };
197
+ } catch (error) {
198
+ return {
199
+ ok: false,
200
+ name: "naming tool markers",
201
+ detail: `tool marker inspection failed: ${error instanceof Error ? error.message : String(error)}`,
202
+ };
203
+ }
204
+ }
205
+
206
+ function immutableHistoryNamingFinding(): DoctorFinding {
207
+ const dirs = resolveClioDirs();
208
+ const counts = inspectNamingHistory({ stateDir: dirs.state, dataDir: dirs.data });
209
+ const errors = counts.filter((entry) => entry.error !== null);
210
+ if (errors.length > 0) {
211
+ return {
212
+ ok: false,
213
+ name: "naming immutable history",
214
+ detail: errors.map((entry) => `${entry.area}: ${entry.error}`).join("; "),
215
+ };
216
+ }
217
+ const legacy = counts.reduce((sum, entry) => sum + entry.legacyIdentifiers, 0);
218
+ return {
219
+ ok: true,
220
+ ...(legacy > 0 ? { level: "warn" as const } : {}),
221
+ name: "naming immutable history",
222
+ detail: `${counts.map((entry) => `${entry.area}=${entry.legacyIdentifiers}`).join("; ")} legacy identifiers; read-only retention, no rewrite`,
223
+ };
224
+ }
225
+
226
+ function legacyGitRefsFinding(cwd: string): DoctorFinding {
227
+ let refs: string[];
228
+ try {
229
+ refs = execFileSync(
230
+ "git",
231
+ ["-C", cwd, "for-each-ref", "--format=%(refname:short)", "refs/heads/clio/task", "refs/heads/clio/compete"],
232
+ { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 5_000 },
233
+ )
234
+ .split("\n")
235
+ .map((entry) => entry.trim())
236
+ .filter((entry) => /^clio\/(?:task|compete)\//u.test(entry))
237
+ .sort();
238
+ } catch {
239
+ refs = [];
240
+ }
241
+ if (refs.length === 0) {
242
+ return { ok: true, name: "naming git refs", detail: "no legacy Clio Coder task or compete refs found" };
243
+ }
244
+ const shown = refs.slice(0, 20);
245
+ return {
246
+ ok: true,
247
+ level: "warn",
248
+ name: "naming git refs",
249
+ detail: `${refs.length} legacy refs retained (never auto-renamed): ${shown.join(", ")}${refs.length > shown.length ? ", …" : ""}`,
250
+ };
251
+ }
252
+
253
+ function legacyWorktreeMarkerFinding(cwd: string): DoctorFinding {
254
+ const root = join(cwd, ".clio-coder", "worktrees");
255
+ let legacy = 0;
256
+ try {
257
+ for (const entry of readdirSync(root, { withFileTypes: true })) {
258
+ const candidates = entry.isFile()
259
+ ? entry.name.endsWith(".task-owner.json")
260
+ ? [join(root, entry.name)]
261
+ : []
262
+ : entry.isDirectory()
263
+ ? [join(root, entry.name, ".clio-coder-compete-owner.json")]
264
+ : [];
265
+ for (const path of candidates) {
266
+ if (!existsSync(path)) continue;
267
+ const parsed = JSON.parse(readFileSync(path, "utf8")) as Record<string, unknown>;
268
+ if (parsed.kind === "clio-task-worktree" || parsed.kind === "clio-compete-group") legacy += 1;
269
+ }
270
+ }
271
+ } catch {
272
+ // An absent or partially unreadable project-local worktree root is not a
273
+ // repair target. Proven markers remain the lifecycle readers' authority.
274
+ }
275
+ return {
276
+ ok: true,
277
+ ...(legacy > 0 ? { level: "warn" as const } : {}),
278
+ name: "naming worktree markers",
279
+ detail:
280
+ legacy === 0
281
+ ? "active worktree markers use canonical identifiers"
282
+ : `${legacy} active legacy worktree markers retained for cleanup compatibility; no automatic rewrite`,
283
+ };
284
+ }
285
+
286
+ /** Read-only naming-footprint settings sweep plus the sanctioned deterministic fixes. */
287
+ export function namingFootprintFindings(options: NamingDoctorOptions = {}): DoctorFinding[] {
288
+ const cwd = options.cwd ?? process.cwd();
289
+ const userSettingsPath = join(resolveClioDirs().config, "settings.yaml");
290
+ const candidates = [
291
+ { label: "settings user", path: userSettingsPath, lock: true },
292
+ { label: "settings project", path: join(cwd, ".clio-coder", "settings.yaml"), lock: false },
293
+ { label: "settings local", path: join(cwd, ".clio-coder", "settings.local.yaml"), lock: false },
294
+ ] as const;
295
+ const findings: DoctorFinding[] = [];
296
+ for (const candidate of candidates) {
297
+ const before = inspectSettingsNaming(candidate.path);
298
+ let fixed = false;
299
+ if (options.fix && before.error === null && before.legacy + before.conflicts > 0) {
300
+ try {
301
+ if (candidate.lock) withSettingsLock(() => migrateNamingSettingsFile(candidate.path));
302
+ else migrateNamingSettingsFile(candidate.path);
303
+ fixed = true;
304
+ } catch (error) {
305
+ findings.push({
306
+ ok: false,
307
+ name: `naming ${candidate.label}`,
308
+ detail: `--fix could not migrate ${candidate.path}: ${error instanceof Error ? error.message : String(error)}`,
309
+ });
310
+ continue;
311
+ }
312
+ }
313
+ findings.push(settingsFinding(candidate.label, before, fixed));
314
+ }
315
+ findings.push(...namingEnvironmentFindings(options.yaziEnabled ?? true));
316
+ findings.push(...namingResourceFindings({ ...options, cwd }));
317
+ findings.push(yaziNamingFinding(Boolean(options.fix), options.yaziEnabled ?? true));
318
+ findings.push(toolMarkerNamingFinding(Boolean(options.fix)));
319
+ findings.push(immutableHistoryNamingFinding());
320
+ findings.push(legacyGitRefsFinding(cwd));
321
+ findings.push(legacyWorktreeMarkerFinding(cwd));
322
+ return findings;
323
+ }
@@ -0,0 +1,156 @@
1
+ import { accessSync, constants } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { readSettings } from "../core/config.js";
4
+ import { resolveClioDirs } from "../core/xdg.js";
5
+ import type { DoctorFinding } from "../domains/lifecycle/doctor.js";
6
+ import { detectMux, MUX_METHOD_MIN_PROTOCOL, resolveSocketCandidates } from "../domains/mux/index.js";
7
+ import { describeResolution, findPinnedTool, toolStatus } from "../domains/toolchain/index.js";
8
+
9
+ /**
10
+ * The panes section of `clio-coder doctor`.
11
+ *
12
+ * Six rows, in the order an operator debugs them: what mode the pane layer
13
+ * resolved to, whether the socket answered, whether the server is new enough
14
+ * for the methods phase 3 uses, where the pane host binary resolves, what the
15
+ * boot layout composes, and whether the journal directory the viewer reads is
16
+ * writable.
17
+ *
18
+ * No row is an error. Panes are optional: an operator who never wanted them has
19
+ * a healthy install without them, and doctor's exit code answers "is this
20
+ * install healthy". The rows that would be errors elsewhere are warnings that
21
+ * name the next step instead.
22
+ */
23
+
24
+ const PANE_HOST_TOOL_ID = "herdr";
25
+
26
+ /** Highest protocol any method Clio drives requires, for the version row. */
27
+ const REQUIRED_PROTOCOL = Math.max(...Object.values(MUX_METHOD_MIN_PROTOCOL));
28
+
29
+ function journalWritabilityFinding(root = join(resolveClioDirs().state, "runs")): DoctorFinding {
30
+ try {
31
+ accessSync(root, constants.W_OK);
32
+ return { ok: true, name: "panes journal dir", detail: `${root} is writable` };
33
+ } catch (error) {
34
+ return {
35
+ ok: true,
36
+ level: "warn",
37
+ name: "panes journal dir",
38
+ detail: `${root} is absent or not writable (${error instanceof Error ? error.message : String(error)}); \`clio-coder fleet view\` will have no transcript to follow`,
39
+ };
40
+ }
41
+ }
42
+
43
+ export async function panesFindings(env: NodeJS.ProcessEnv = process.env): Promise<DoctorFinding[]> {
44
+ let enabled: "auto" | "embedded" | "off" = "off";
45
+ let layoutRow: DoctorFinding = {
46
+ ok: true,
47
+ name: "panes layout",
48
+ detail: "off",
49
+ };
50
+ try {
51
+ const panes = readSettings().interface.panes;
52
+ enabled = panes.enabled;
53
+ if (panes.layout !== "off") {
54
+ layoutRow = {
55
+ ok: true,
56
+ name: "panes layout",
57
+ detail: `${panes.layout} at boot (workers dock ${(panes.workers.ratio * 100).toFixed(0)}%, files dock ${(panes.files.ratio * 100).toFixed(0)}%)`,
58
+ };
59
+ }
60
+ } catch {
61
+ // An unreadable settings file is already reported by the settings row;
62
+ // this section answers on the shipped default (off) rather than throwing.
63
+ }
64
+
65
+ // Inactive by choice is a different answer from unavailable. With the
66
+ // setting off, detection is skipped the same way the boot skips it, and the
67
+ // row names the two ways to turn the extension on instead of warning about
68
+ // a socket nobody asked for.
69
+ if (enabled === "off") {
70
+ return [
71
+ {
72
+ ok: true,
73
+ name: "panes mode",
74
+ detail: "off by choice",
75
+ },
76
+ layoutRow,
77
+ ];
78
+ }
79
+
80
+ // Detection is the same ladder the interactive boot runs, so this row is the
81
+ // answer that boot would get. It opens a socket and nothing else: no file is
82
+ // created and no pane is touched.
83
+ const { detection, client } = await detectMux({ enabled, env });
84
+ const snapshot = client ? await client.snapshot().catch(() => null) : null;
85
+ await client?.close().catch(() => undefined);
86
+
87
+ const candidates = detection.candidates.length > 0 ? detection.candidates : resolveSocketCandidates(env);
88
+ const findings: DoctorFinding[] = [
89
+ {
90
+ ok: true,
91
+ level: detection.mode === "none" ? "warn" : "ok",
92
+ name: "panes mode",
93
+ detail: `${detection.mode} (panes.enabled=${enabled}); ${detection.reason}`,
94
+ },
95
+ {
96
+ ok: true,
97
+ level: detection.socketPath === null ? "warn" : "ok",
98
+ name: "panes socket",
99
+ detail:
100
+ detection.socketPath === null
101
+ ? `no socket answered; tried ${candidates.length > 0 ? candidates.join(", ") : "no candidates"}`
102
+ : `${detection.socketPath} answered a ping`,
103
+ },
104
+ ];
105
+
106
+ const server = detection.server;
107
+ findings.push({
108
+ ok: true,
109
+ level: server === null || server.protocol < REQUIRED_PROTOCOL ? "warn" : "ok",
110
+ name: "panes protocol",
111
+ detail:
112
+ server === null
113
+ ? `unknown; Clio's optional methods need protocol ${REQUIRED_PROTOCOL} or newer`
114
+ : `server ${server.version}, protocol ${server.protocol}; Clio's optional methods need ${REQUIRED_PROTOCOL} (${server.protocol >= REQUIRED_PROTOCOL ? "satisfied" : "toasts and agent focus fall back"})`,
115
+ });
116
+
117
+ const entry = findPinnedTool(PANE_HOST_TOOL_ID);
118
+ findings.push(
119
+ entry === null
120
+ ? {
121
+ ok: true,
122
+ level: "warn",
123
+ name: "panes binary",
124
+ detail: `${PANE_HOST_TOOL_ID} is not in the pinned tool registry`,
125
+ }
126
+ : {
127
+ ok: true,
128
+ level: toolStatus(entry).resolution.source === "none" ? "warn" : "ok",
129
+ name: "panes binary",
130
+ detail: describeResolution(toolStatus(entry)),
131
+ },
132
+ );
133
+
134
+ findings.push(layoutRow);
135
+ const legacyOwnedPanes =
136
+ snapshot?.panes.filter(
137
+ (pane) => pane.tokens.clio_owner === "clio:mux" && pane.tokens.clio_coder_owner !== "clio-coder:mux",
138
+ ).length ?? 0;
139
+ const staleWatchTitles =
140
+ snapshot?.panes.filter(
141
+ (pane) =>
142
+ (pane.title === "clio watch" || pane.label === "clio watch") &&
143
+ (pane.tokens.clio_coder_owner === "clio-coder:mux" || pane.tokens.clio_owner === "clio:mux"),
144
+ ).length ?? 0;
145
+ findings.push({
146
+ ok: true,
147
+ level: legacyOwnedPanes > 0 || staleWatchTitles > 0 ? "warn" : "ok",
148
+ name: "naming panes",
149
+ detail:
150
+ legacyOwnedPanes > 0 || staleWatchTitles > 0
151
+ ? `${legacyOwnedPanes} panes carry only the legacy clio_owner=clio:mux token; ${staleWatchTitles} owned panes retain the stale 'clio watch' title; quit/cleanup recognizes both token schemes`
152
+ : "no legacy Clio Coder pane ownership tokens or watch titles found",
153
+ });
154
+ findings.push(journalWritabilityFinding());
155
+ return findings;
156
+ }
@@ -0,0 +1,78 @@
1
+ import type { DoctorFinding } from "../domains/lifecycle/doctor.js";
2
+ import {
3
+ describeYaziProfile,
4
+ inspectCurrentYaziProfile,
5
+ userYaziConfigDir,
6
+ yaziProfileDir,
7
+ } from "../domains/mux/index.js";
8
+ import { describeResolution, toolStatuses } from "../domains/toolchain/index.js";
9
+
10
+ export interface ToolchainFindingOptions {
11
+ panesEnabled?: boolean;
12
+ filesEnabled?: boolean;
13
+ }
14
+
15
+ function yaziProfileFinding(enabled: boolean): DoctorFinding {
16
+ if (!enabled) {
17
+ return {
18
+ ok: true,
19
+ name: "yazi managed profile",
20
+ detail: "disabled by settings",
21
+ };
22
+ }
23
+ try {
24
+ const profile = inspectCurrentYaziProfile();
25
+ return {
26
+ ok: true,
27
+ name: "yazi managed profile",
28
+ detail: describeYaziProfile(profile),
29
+ level: profile.state === "current" ? "ok" : "warn",
30
+ };
31
+ } catch (error) {
32
+ return {
33
+ ok: true,
34
+ name: "yazi managed profile",
35
+ level: "warn",
36
+ detail: `${yaziProfileDir()} could not be inspected (${error instanceof Error ? error.message : String(error)}); user config ${userYaziConfigDir()} is separate and untouched`,
37
+ };
38
+ }
39
+ }
40
+
41
+ /**
42
+ * One row per pinned external tool: where it resolves, and how the version
43
+ * found compares to the pin.
44
+ *
45
+ * Every one of these tools is optional, so no row is ever an error. A missing
46
+ * tool is a WARN with the command that installs it, because doctor's exit code
47
+ * answers "is this Clio install healthy", and an operator who never wanted
48
+ * panes has a healthy install without them.
49
+ *
50
+ * A PATH copy Clio rejected for being below the registry floor is never
51
+ * reported as an absent one. The row says which binary was found, what version
52
+ * it reported, and which floor it missed, and adds the install command only
53
+ * when there is no vendored copy already answering for the tool. Doctor is the
54
+ * surface an operator reaches for when a tool they installed themselves is not
55
+ * being used, and a row that only said "not found" would send them looking for
56
+ * a binary that is right there on their PATH.
57
+ */
58
+ export function toolchainFindings(options: ToolchainFindingOptions = {}): DoctorFinding[] {
59
+ const panesEnabled = options.panesEnabled ?? true;
60
+ const filesEnabled = options.filesEnabled ?? true;
61
+ const tools = toolStatuses().map((status) => ({
62
+ ok: true,
63
+ name: `external tool ${status.id}`,
64
+ // Active integrations share the tools-status resolution sentence. Disabled
65
+ // experimental integrations stay neutral and do not advertise setup work.
66
+ detail:
67
+ (status.id === "herdr" && !panesEnabled) || (status.id === "yazi" && !filesEnabled)
68
+ ? "experimental integration disabled by settings"
69
+ : describeResolution(status),
70
+ level:
71
+ (status.id === "herdr" && !panesEnabled) || (status.id === "yazi" && !filesEnabled)
72
+ ? ("ok" as const)
73
+ : status.resolution.source === "none"
74
+ ? ("warn" as const)
75
+ : ("ok" as const),
76
+ }));
77
+ return [...tools, yaziProfileFinding(filesEnabled)];
78
+ }
package/src/cli/doctor.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { readSettings } from "../core/config.js";
1
2
  import {
2
3
  formatDoctorReport,
3
4
  isUninitializedHome,
@@ -7,7 +8,10 @@ import {
7
8
  runDoctorModelChecks,
8
9
  runDoctorRuntimeChecks,
9
10
  } from "../domains/lifecycle/doctor.js";
11
+ import { namingFootprintFindings } from "./doctor-naming.js";
12
+ import { panesFindings } from "./doctor-panes.js";
10
13
  import { stateStorageFinding } from "./doctor-state-size.js";
14
+ import { toolchainFindings } from "./doctor-toolchain.js";
11
15
  import { printError } from "./shared.js";
12
16
 
13
17
  const HELP = `clio-coder doctor [--fix] [--json]
@@ -36,6 +40,16 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
36
40
  // gets every check on the home it just built.
37
41
  const untouched = !fix && isUninitializedHome();
38
42
  const findings = runDoctor({ fix });
43
+ let panesEnabled = false;
44
+ let filesEnabled = false;
45
+ try {
46
+ const panes = readSettings().interface.panes;
47
+ panesEnabled = panes.enabled !== "off";
48
+ filesEnabled = panesEnabled && panes.files.enabled;
49
+ } catch {
50
+ // The settings finding already reports an unreadable document. Optional
51
+ // integrations stay inactive rather than adding secondary warnings.
52
+ }
39
53
  const storageChecks = untouched ? [] : [stateStorageFinding()];
40
54
  const runtimeChecks = await runDoctorRuntimeChecks();
41
55
  // Every model pointer is checked against what its target advertises, so a
@@ -49,7 +63,26 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
49
63
  // Fleet preflight probes each configured node over SSH and persists the
50
64
  // per-node eligibility verdicts dispatch placement enforces.
51
65
  const fleetChecks = untouched ? [] : await runDoctorFleetChecks();
52
- const all = [...findings, ...storageChecks, ...runtimeChecks, ...modelChecks, ...interopChecks, ...fleetChecks];
66
+ // Resolution reads PATH and the vendor root and creates nothing, but on an
67
+ // untouched home there is no vendor root to look at and the answer would be
68
+ // "none" for every row regardless, so the sweep stays with the others.
69
+ const toolChecks = untouched ? [] : toolchainFindings({ panesEnabled, filesEnabled });
70
+ // The pane sweep pings a socket and reads PATH; it creates nothing except the
71
+ // journal directory it is asked about, which is inside the state root doctor
72
+ // has already agreed not to build on an untouched home.
73
+ const paneChecks = untouched ? [] : await panesFindings();
74
+ const namingChecks = namingFootprintFindings({ fix, yaziEnabled: filesEnabled });
75
+ const all = [
76
+ ...findings,
77
+ ...storageChecks,
78
+ ...runtimeChecks,
79
+ ...modelChecks,
80
+ ...interopChecks,
81
+ ...fleetChecks,
82
+ ...toolChecks,
83
+ ...paneChecks,
84
+ ...namingChecks,
85
+ ];
53
86
  const ok = all.every((f) => f.ok);
54
87
  if (json) {
55
88
  process.stdout.write(`${JSON.stringify({ ok, fix, findings: all }, null, 2)}\n`);