@iowarp/clio-coder 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +116 -16
  3. package/dist/{acp-G5WJBNCT.js → acp-ZILU3AUO.js} +14 -14
  4. package/dist/{agents-FMV2Q5G4.js → agents-HYWGBGQR.js} +40 -29
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-3IDSJEIK.js → auth-N3QT7CBO.js} +21 -19
  7. package/dist/{builtins-XCZWXSC7.js → builtins-UJLMOVOV.js} +6 -6
  8. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  9. package/dist/{chunk-3BT2XMV4.js → chunk-2NM363SV.js} +50 -57
  10. package/dist/{chunk-J4W7KFM7.js → chunk-2VG7KLYV.js} +24 -279
  11. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  12. package/dist/{chunk-K5C3NCBD.js → chunk-3I5NY75V.js} +5 -5
  13. package/dist/{chunk-VAZSBTKF.js → chunk-3QSOM6PA.js} +2 -2
  14. package/dist/{chunk-TZ3SGWZZ.js → chunk-5QIAJV2D.js} +2 -2
  15. package/dist/{chunk-OQBA45DZ.js → chunk-5YHDIDBP.js} +2 -2
  16. package/dist/{chunk-NHLBIGRH.js → chunk-6CCS4G3W.js} +40 -17
  17. package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
  18. package/dist/{chunk-LDQ2ZF2M.js → chunk-6FN3E6KX.js} +5 -5
  19. package/dist/{chunk-X3YGUTOB.js → chunk-6HMJX2VU.js} +59 -59
  20. package/dist/{chunk-VEO4AP2K.js → chunk-6I5ILFOF.js} +3 -2
  21. package/dist/{chunk-B7OBL7PK.js → chunk-6NJQITNH.js} +18 -11
  22. package/dist/{chunk-IQ7KR472.js → chunk-6VC4OV3Z.js} +6 -3
  23. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  24. package/dist/{chunk-AB44T6BB.js → chunk-74YWRRU5.js} +8 -7
  25. package/dist/{chunk-SJ5ZKQ4S.js → chunk-7EPLI7VL.js} +2 -2
  26. package/dist/{chunk-HWHKMHUA.js → chunk-7OBGU7UB.js} +3 -3
  27. package/dist/{chunk-2OQE55CK.js → chunk-7PWAODYW.js} +2 -2
  28. package/dist/{chunk-IBEBSCYA.js → chunk-7RY5VZPH.js} +42 -33
  29. package/dist/{chunk-LQ3DZAMX.js → chunk-ABLSQ6JX.js} +2 -2
  30. package/dist/{chunk-QLFS5GO2.js → chunk-AFKWHWXF.js} +12 -22
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-O6TL7WWY.js → chunk-AKB4GYDL.js} +4 -4
  33. package/dist/chunk-AP73CFDC.js +308 -0
  34. package/dist/{chunk-JDG2WCRO.js → chunk-BBTJOK6Y.js} +5 -5
  35. package/dist/{chunk-SP2RXXYO.js → chunk-BDPT6GTK.js} +10 -10
  36. package/dist/{chunk-NQQH3YT7.js → chunk-BJGUKIG4.js} +3 -3
  37. package/dist/{chunk-O4XIVISU.js → chunk-BTGG6BG2.js} +79 -38
  38. package/dist/chunk-BTK3SSSK.js +67 -0
  39. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  40. package/dist/chunk-BWW4HLO4.js +301 -0
  41. package/dist/{chunk-I5VEOC6I.js → chunk-C537JADH.js} +10 -10
  42. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  43. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  44. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  45. package/dist/chunk-D7E7WCDF.js +27 -0
  46. package/dist/{chunk-WZR7K7ZX.js → chunk-E67WX76H.js} +6 -6
  47. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  48. package/dist/chunk-EIMVLWB3.js +1842 -0
  49. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  50. package/dist/{chunk-MLKNTWH2.js → chunk-FYUN5KZ3.js} +21 -21
  51. package/dist/{chunk-YJX4SHTD.js → chunk-GIZNH63R.js} +1 -1
  52. package/dist/{chunk-X75E3D2N.js → chunk-GPPB3JBE.js} +18 -16
  53. package/dist/{chunk-GR5G2PVF.js → chunk-GVQJ5CCZ.js} +15 -10
  54. package/dist/chunk-HJWWJ6IL.js +184 -0
  55. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  56. package/dist/{chunk-VYMXRQI6.js → chunk-HUAS7ITX.js} +89 -93
  57. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  58. package/dist/{chunk-DYJP44XW.js → chunk-IG7BCQBA.js} +1 -1
  59. package/dist/{chunk-32KWKNSF.js → chunk-IXJT6DCX.js} +3 -3
  60. package/dist/{chunk-C2LTL2W6.js → chunk-J4HBWF6Y.js} +360 -172
  61. package/dist/chunk-J5LZHVIT.js +284 -0
  62. package/dist/{chunk-QLL7ILRG.js → chunk-JA5QWE4Z.js} +510 -202
  63. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  64. package/dist/{chunk-36EJLSQQ.js → chunk-JZWT5J3Y.js} +4 -4
  65. package/dist/{chunk-HZHHCK24.js → chunk-K6BF4U2H.js} +476 -322
  66. package/dist/{chunk-Z2RR6MAK.js → chunk-MA3H6DM5.js} +6 -6
  67. package/dist/{chunk-CODPRO7Q.js → chunk-MOPSG2X7.js} +6 -6
  68. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  69. package/dist/{chunk-YDFRH54B.js → chunk-N5UK64DP.js} +4 -4
  70. package/dist/chunk-NDDGJUXD.js +81 -0
  71. package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
  72. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  73. package/dist/{chunk-W5VSYASO.js → chunk-OJTRZGR3.js} +46 -87
  74. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  75. package/dist/{chunk-3URVFKWK.js → chunk-PJJ6MY27.js} +5 -5
  76. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  77. package/dist/{chunk-GKF55TAZ.js → chunk-PVAMAVBB.js} +3 -2
  78. package/dist/{chunk-6DB53AJS.js → chunk-QKIFBZKT.js} +7 -7
  79. package/dist/{chunk-HJJTYUHX.js → chunk-QMXC4JB7.js} +20 -20
  80. package/dist/chunk-QTFGO774.js +644 -0
  81. package/dist/{chunk-CY6FY24N.js → chunk-R23Z6K6I.js} +2 -2
  82. package/dist/{chunk-ULC6OTWO.js → chunk-R32CLGZ6.js} +13 -13
  83. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  84. package/dist/{chunk-F4CKPOEQ.js → chunk-SCYB3HA4.js} +72 -26
  85. package/dist/{chunk-LY4S7GJC.js → chunk-SINK3QR6.js} +18 -16
  86. package/dist/{chunk-U77AMWDL.js → chunk-TD3PGPQA.js} +43 -22
  87. package/dist/{chunk-QBJA7R7N.js → chunk-THYWACCR.js} +2 -2
  88. package/dist/{chunk-QREDIESB.js → chunk-TVH4ONAM.js} +14 -8
  89. package/dist/chunk-U2WB7TZS.js +271 -0
  90. package/dist/{chunk-KFZI4NIL.js → chunk-UAPGZHYC.js} +145 -31
  91. package/dist/{chunk-DQITNCXG.js → chunk-UEDMSP56.js} +29 -14
  92. package/dist/{chunk-3XML7CDN.js → chunk-UXN6JT4W.js} +2 -2
  93. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  94. package/dist/{chunk-BPKCPIL7.js → chunk-VEGN6WIQ.js} +2 -2
  95. package/dist/chunk-VKFQTNDV.js +66 -0
  96. package/dist/{chunk-7MCTRUCE.js → chunk-VKRH2TCS.js} +2 -2
  97. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  98. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  99. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  100. package/dist/{chunk-SUCTJL45.js → chunk-WR6U3OVP.js} +3 -3
  101. package/dist/{chunk-BUMFYQFY.js → chunk-XKA2ICR3.js} +124 -113
  102. package/dist/{chunk-UXMFQ54G.js → chunk-Y45G3AXC.js} +39 -39
  103. package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
  104. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  105. package/dist/{chunk-V5DHCITQ.js → chunk-ZAZB4JMW.js} +23 -12
  106. package/dist/{chunk-Z4TXYIEG.js → chunk-ZJLUDYFY.js} +9 -9
  107. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  108. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  109. package/dist/cli/index.js +36 -36
  110. package/dist/{clio-2JXHBBY5.js → clio-IT3G3VQH.js} +12 -13
  111. package/dist/{code-nav-3YYRMYNF.js → code-nav-RK6S7F6E.js} +5 -5
  112. package/dist/codewiki/build-worker.js +1 -1
  113. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  114. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  115. package/dist/{config-QZPCMYSO.js → config-3QZRWZJF.js} +53 -49
  116. package/dist/{configure-TEGEBYCA.js → configure-FL7Y3KJF.js} +25 -22
  117. package/dist/{context-E6H5RNMC.js → context-5HE7ODYK.js} +47 -43
  118. package/dist/{context-AV7OEZ4D.js → context-KYQFRVDC.js} +11 -11
  119. package/dist/{context-GSXUE4CT.js → context-XNHL75JV.js} +32 -19
  120. package/dist/{context-clear-SHIBYK6T.js → context-clear-N545L53A.js} +47 -43
  121. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-QHKXSV2F.js} +10 -9
  122. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-RGIE5PCT.js} +56 -47
  123. package/dist/{docs-23KQS3XK.js → docs-5NAF6AU7.js} +5 -11
  124. package/dist/doctor-ZGPEGHIP.js +772 -0
  125. package/dist/{eval-TFBYQH4H.js → eval-GXLL44RD.js} +63 -45
  126. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-HBWSWQOK.js} +7 -8
  127. package/dist/{evidence-ERGESKGN.js → evidence-HWLBRH3Q.js} +44 -40
  128. package/dist/{evolve-VDXTSYCJ.js → evolve-FTZBMNVW.js} +43 -39
  129. package/dist/{extensions-7BGBHN57.js → extensions-VHRBEID7.js} +4 -4
  130. package/dist/{fleet-2RRVDF2V.js → fleet-CKZHJWZJ.js} +86 -73
  131. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EXDXBMV6.js} +10 -9
  132. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-OTHB6KRL.js} +5 -5
  133. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-YTEZUCUT.js} +13 -11
  134. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-SS6YMDCK.js} +44 -41
  135. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-PBY4VYOM.js} +5 -9
  136. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-KMEM5L3S.js} +16 -13
  137. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-QD5M7E7Q.js} +42 -39
  138. package/dist/{fleet-view-ZCON35AG.js → fleet-view-WAMJYNDT.js} +44 -52
  139. package/dist/{init-DN2WWLFE.js → init-5XQRBOFV.js} +63 -58
  140. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  141. package/dist/{interop-OZBKXAYL.js → interop-34TVO25M.js} +13 -11
  142. package/dist/{library-YWZG7IMW.js → library-3QY6KF57.js} +17 -14
  143. package/dist/{memory-I4C4HMLW.js → memory-L4UTIIIW.js} +45 -41
  144. package/dist/{models-CEYXJBO6.js → models-ZVX3QOWE.js} +39 -31
  145. package/dist/{monitor-NZ6GCI3P.js → monitor-CEKVSYTS.js} +50 -46
  146. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-77BAP6BC.js} +1807 -1039
  147. package/dist/{panes-KY6W3V2E.js → panes-7STHOAUJ.js} +4 -4
  148. package/dist/{panes-HMABYVO4.js → panes-SHAUIRXY.js} +10 -8
  149. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  150. package/dist/{reset-DQ6FGCSH.js → reset-EOLM7GVE.js} +7 -8
  151. package/dist/{resources-BB3MVJMD.js → resources-74GKTLSF.js} +17 -13
  152. package/dist/{run-H2GQDUER.js → run-HBAUJNNZ.js} +86 -76
  153. package/dist/{share-GTJN6A5O.js → share-G3APVLVP.js} +17 -14
  154. package/dist/{skills-L55TEW6R.js → skills-35HHUKCR.js} +19 -16
  155. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-QN4HSHDC.js} +55 -57
  156. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-J357J34F.js} +15 -12
  157. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-JZZCQA32.js} +31 -29
  158. package/dist/{steer-RZGSCY4R.js → steer-XAVHJM22.js} +3 -3
  159. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  160. package/dist/{targets-NCPZ644J.js → targets-DSM6CY3M.js} +59 -53
  161. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-JOPFUVEM.js} +14 -9
  162. package/dist/{tools-DAF3DI3C.js → tools-MKNWVPBH.js} +10 -8
  163. package/dist/{trace-FYVW2MQA.js → trace-ECQ7TIYZ.js} +48 -3
  164. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  165. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  166. package/dist/{upgrade-3XPP6OQL.js → upgrade-H7TOM7YL.js} +35 -62
  167. package/dist/{usage-3NLHGTU2.js → usage-X52N3IDJ.js} +51 -48
  168. package/dist/{verifiers-SSQONKRT.js → verifiers-EJTVVSMA.js} +10 -9
  169. package/dist/{verify-3U6J7FZI.js → verify-YJL6XET2.js} +9 -8
  170. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPIFL3LL.js} +1 -2
  171. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-4NDZTQ4B.js} +66 -63
  172. package/dist/{with-panes-MKB46MPQ.js → with-panes-OBOBFIIR.js} +62 -26
  173. package/dist/worker/entry.js +57 -52
  174. package/docs/acp.md +1 -1
  175. package/docs/built-in-agents.md +40 -32
  176. package/docs/commands-and-modes.md +9 -3
  177. package/docs/config-knobs-audit.md +3 -0
  178. package/docs/configuration-and-targets.md +105 -164
  179. package/docs/environment-variables.md +2 -1
  180. package/docs/exit-codes-and-output.md +2 -0
  181. package/docs/fleet-demo-runbook.md +6 -3
  182. package/docs/fleet-dispatch.md +8 -6
  183. package/docs/installation-and-lifecycle.md +1 -1
  184. package/docs/release-cut-checklist.md +164 -177
  185. package/docs/trace-store.md +15 -10
  186. package/docs/troubleshooting.md +1 -1
  187. package/evals/README.md +5 -0
  188. package/evals/behavioral-corpus-grader.mjs +103 -0
  189. package/evals/behavioral-machinery-baseline.json +2276 -0
  190. package/evals/behavioral-machinery-driver.ts +250 -0
  191. package/evals/behavioral-machinery-support.ts +253 -0
  192. package/evals/behavioral-machinery.yaml +614 -0
  193. package/evals/behavioral-model-negative-control.yaml +68 -0
  194. package/evals/behavioral-model.yaml +216 -0
  195. package/evals/fixtures/behavioral-facts.txt +3 -0
  196. package/evals/fixtures/behavioral-main.ts +7 -0
  197. package/evals/fixtures/decoy/note.txt +2 -0
  198. package/evals/fixtures/private/credentials.txt +1 -0
  199. package/evals/tracked-metrics-baseline.yaml +229 -0
  200. package/evals/tracked-metrics-grader.mjs +129 -0
  201. package/package.json +5 -15
  202. package/skills/README.md +6 -6
  203. package/skills/coding/ast-grep/SKILL.md +8 -2
  204. package/skills/coding/coding-standards/SKILL.md +8 -2
  205. package/skills/coding/prototype/SKILL.md +8 -2
  206. package/skills/coding/tdd/SKILL.md +8 -2
  207. package/skills/context/context-handoff/SKILL.md +12 -3
  208. package/skills/context/context-handoff/evals.md +3 -3
  209. package/skills/context/context-prime/SKILL.md +8 -2
  210. package/skills/context/context-prime/evals.md +2 -2
  211. package/skills/git/file-ticket/SKILL.md +9 -4
  212. package/skills/git/file-ticket/evals.md +2 -2
  213. package/skills/git/fix-issue/SKILL.md +12 -5
  214. package/skills/git/fix-issue/evals.md +4 -4
  215. package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
  216. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  217. package/skills/git/ship/SKILL.md +9 -3
  218. package/skills/git/ship/evals.md +4 -4
  219. package/skills/git/worktree-create/SKILL.md +7 -2
  220. package/skills/git/worktree-create/evals.md +6 -6
  221. package/skills/git/worktree-merge/SKILL.md +7 -2
  222. package/skills/git/worktree-merge/evals.md +6 -6
  223. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
  224. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
  225. package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
  226. package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
  227. package/skills/meta/credentials/SKILL.md +9 -2
  228. package/skills/meta/find-skills/SKILL.md +8 -2
  229. package/skills/meta/herdr/SKILL.md +8 -2
  230. package/skills/meta/skill-craft/SKILL.md +21 -4
  231. package/skills/planning/architecture/SKILL.md +9 -3
  232. package/skills/planning/backlog/SKILL.md +8 -2
  233. package/skills/planning/prd/SKILL.md +8 -2
  234. package/skills/planning/product-intent/SKILL.md +8 -2
  235. package/skills/planning/tech-spec/SKILL.md +9 -3
  236. package/skills/registry.yaml +66 -66
  237. package/skills/research/arxiv-literature/SKILL.md +8 -2
  238. package/skills/research/experiment-protocol/SKILL.md +9 -2
  239. package/skills/research/scientific-debugging/SKILL.md +9 -2
  240. package/skills/research/scientific-debugging/evals.md +2 -2
  241. package/skills/research/scientific-modernization/SKILL.md +9 -2
  242. package/skills/skill-marketplace.json +257 -38
  243. package/skills/workflow/cut-it/SKILL.md +10 -2
  244. package/skills/workflow/design-council/SKILL.md +11 -2
  245. package/skills/workflow/grill-me/SKILL.md +8 -2
  246. package/skills/workflow/workflow-distiller/SKILL.md +8 -2
  247. package/src/cli/acp.ts +2 -2
  248. package/src/cli/auth.ts +2 -2
  249. package/src/cli/bootstrap-generate.ts +5 -5
  250. package/src/cli/clio.ts +6 -1
  251. package/src/cli/config-inspect.ts +3 -3
  252. package/src/cli/configure-interop.ts +1 -1
  253. package/src/cli/configure.ts +27 -27
  254. package/src/cli/default-target.ts +1 -1
  255. package/src/cli/docs.ts +6 -6
  256. package/src/cli/doctor-naming.ts +323 -0
  257. package/src/cli/doctor-panes.ts +46 -14
  258. package/src/cli/doctor-toolchain.ts +29 -8
  259. package/src/cli/doctor.ts +15 -1
  260. package/src/cli/eval-inventory.ts +8 -8
  261. package/src/cli/evidence-detail.ts +1 -1
  262. package/src/cli/evidence-inventory.ts +1 -1
  263. package/src/cli/fleet-decisions.ts +1 -1
  264. package/src/cli/fleet-inspect.ts +1 -1
  265. package/src/cli/fleet-preflight.ts +1 -1
  266. package/src/cli/fleet-verify.ts +1 -1
  267. package/src/cli/fleet-view.ts +40 -23
  268. package/src/cli/fleet.ts +8 -5
  269. package/src/cli/interop-inspect.ts +2 -2
  270. package/src/cli/models.ts +3 -3
  271. package/src/cli/modes/print.ts +1 -1
  272. package/src/cli/reset.ts +1 -1
  273. package/src/cli/run.ts +11 -15
  274. package/src/cli/share.ts +1 -1
  275. package/src/cli/skills-eval.ts +11 -11
  276. package/src/cli/targets.ts +23 -24
  277. package/src/cli/trace-inspect.ts +1 -1
  278. package/src/cli/trace.ts +41 -0
  279. package/src/cli/uninstall.ts +2 -2
  280. package/src/cli/upgrade.ts +29 -34
  281. package/src/cli/usage.ts +2 -2
  282. package/src/cli/validate-model.ts +1 -1
  283. package/src/cli/verifiers-inspect.ts +1 -1
  284. package/src/cli/wiki-generate.ts +5 -5
  285. package/src/core/bash-exec.ts +1 -1
  286. package/src/core/boot-trace.ts +3 -3
  287. package/src/core/bus-trace.ts +2 -2
  288. package/src/core/compile-cache.ts +1 -1
  289. package/src/core/config.ts +1062 -886
  290. package/src/core/defaults.ts +321 -528
  291. package/src/core/domain-loader.ts +6 -4
  292. package/src/core/event-bus.ts +1 -1
  293. package/src/core/file-references.ts +78 -88
  294. package/src/core/git-commit-attribution.ts +3 -9
  295. package/src/core/guardrails.ts +24 -4
  296. package/src/core/naming-compat.ts +45 -0
  297. package/src/core/naming-events.ts +62 -0
  298. package/src/core/recent-models.ts +1 -7
  299. package/src/core/residency-protection.ts +4 -8
  300. package/src/core/resolve-config-value.ts +1 -1
  301. package/src/core/response-model-id.ts +0 -14
  302. package/src/core/session-routing.ts +84 -74
  303. package/src/core/skill-activation.ts +18 -0
  304. package/src/core/termination.ts +4 -4
  305. package/src/core/timers.ts +2 -12
  306. package/src/domains/agents/catalog.ts +2 -12
  307. package/src/domains/agents/extension.ts +3 -3
  308. package/src/domains/agents/registry.ts +7 -7
  309. package/src/domains/agents/result-contract.ts +1 -1
  310. package/src/domains/agents/spec.ts +0 -11
  311. package/src/domains/config/classify.ts +35 -47
  312. package/src/domains/config/extension.ts +5 -5
  313. package/src/domains/config/keybindings.ts +48 -47
  314. package/src/domains/config/watcher.ts +1 -1
  315. package/src/domains/context/codewiki/indexer.ts +1 -1
  316. package/src/domains/context/extension.ts +3 -3
  317. package/src/domains/context/prompt-context.ts +1 -1
  318. package/src/domains/context/wiki/assemble.ts +2 -2
  319. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  320. package/src/domains/context/working-set/replay/report.ts +1 -1
  321. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  322. package/src/domains/dispatch/active-route-planner.ts +2 -2
  323. package/src/domains/dispatch/agent-candidates.ts +1 -1
  324. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  325. package/src/domains/dispatch/agent-ledger.ts +1 -1
  326. package/src/domains/dispatch/assignment.ts +5 -5
  327. package/src/domains/dispatch/capacity-lease.ts +2 -5
  328. package/src/domains/dispatch/code-step.ts +1 -1
  329. package/src/domains/dispatch/contract.ts +2 -2
  330. package/src/domains/dispatch/extension.ts +65 -61
  331. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  332. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  333. package/src/domains/dispatch/fleet-run.ts +0 -7
  334. package/src/domains/dispatch/gate-decisions.ts +25 -14
  335. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  336. package/src/domains/dispatch/path-scope.ts +0 -61
  337. package/src/domains/dispatch/placement.ts +2 -2
  338. package/src/domains/dispatch/receipt-findings.ts +1 -1
  339. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  340. package/src/domains/dispatch/reservation-store.ts +0 -23
  341. package/src/domains/dispatch/route-decision.ts +1 -1
  342. package/src/domains/dispatch/route-history.ts +1 -1
  343. package/src/domains/dispatch/route-policy.ts +1 -1
  344. package/src/domains/dispatch/route-readiness.ts +0 -28
  345. package/src/domains/dispatch/run-event-journal.ts +6 -5
  346. package/src/domains/dispatch/tool-stats.ts +1 -1
  347. package/src/domains/dispatch/transport.ts +2 -19
  348. package/src/domains/dispatch/types.ts +3 -3
  349. package/src/domains/dispatch/worker-protocol.ts +2 -2
  350. package/src/domains/eval/artifacts/store.ts +5 -4
  351. package/src/domains/eval/compare/thresholds.ts +0 -8
  352. package/src/domains/eval/execution-provenance.ts +1 -1
  353. package/src/domains/eval/metrics/token-stream.ts +0 -7
  354. package/src/domains/eval/report.ts +1 -1
  355. package/src/domains/eval/runner.ts +1 -1
  356. package/src/domains/eval/runners/clio-run.ts +7 -6
  357. package/src/domains/eval/runners/external-command.ts +4 -3
  358. package/src/domains/eval/schema/artifact.ts +1 -1
  359. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  360. package/src/domains/eval/schema/behavioral.ts +7 -6
  361. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  362. package/src/domains/eval/schema/naming.ts +10 -0
  363. package/src/domains/eval/schema/suite.ts +2 -2
  364. package/src/domains/eval/schema/validate.ts +9 -5
  365. package/src/domains/eval/schema/verdict.ts +4 -2
  366. package/src/domains/eval/store.ts +12 -2
  367. package/src/domains/eval/suites/run.ts +12 -6
  368. package/src/domains/eval/types.ts +1 -1
  369. package/src/domains/eval/workspaces/git.ts +1 -1
  370. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  371. package/src/domains/evidence/build.ts +13 -5
  372. package/src/domains/interop/consent.ts +7 -7
  373. package/src/domains/interop/extension.ts +1 -1
  374. package/src/domains/lifecycle/doctor.ts +27 -21
  375. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  376. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  377. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  378. package/src/domains/lifecycle/migrations/index.ts +20 -1
  379. package/src/domains/lifecycle/naming-history.ts +153 -0
  380. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  381. package/src/domains/lifecycle/naming-resources.ts +261 -0
  382. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  383. package/src/domains/lifecycle/naming-yazi.ts +81 -0
  384. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  385. package/src/domains/memory/task-memory-handoff.ts +6 -3
  386. package/src/domains/middleware/index.ts +7 -0
  387. package/src/domains/middleware/marketplace-offer.ts +339 -0
  388. package/src/domains/middleware/runtime.ts +2 -2
  389. package/src/domains/mux/contract.ts +157 -25
  390. package/src/domains/mux/detect.ts +29 -5
  391. package/src/domains/mux/dock-controller.ts +365 -0
  392. package/src/domains/mux/extension.ts +7 -1
  393. package/src/domains/mux/index.ts +20 -0
  394. package/src/domains/mux/operations.ts +28 -0
  395. package/src/domains/mux/protocol.ts +19 -6
  396. package/src/domains/mux/socket-client.ts +167 -19
  397. package/src/domains/mux/types.ts +49 -6
  398. package/src/domains/mux/yazi/event-stream.ts +6 -4
  399. package/src/domains/mux/yazi/profile.ts +1 -1
  400. package/src/domains/mux/yazi/session.ts +26 -3
  401. package/src/domains/observability/extension.ts +1 -1
  402. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  403. package/src/domains/observability/projection.ts +1 -1
  404. package/src/domains/observability/trace-store.ts +22 -12
  405. package/src/domains/prompts/compiler.ts +2 -2
  406. package/src/domains/prompts/extension.ts +3 -3
  407. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
  408. package/src/domains/prompts/fragments/operating/skills.md +25 -18
  409. package/src/domains/providers/extension.ts +5 -5
  410. package/src/domains/providers/knowledge-base-path.ts +1 -1
  411. package/src/domains/providers/model-runtime-capabilities.ts +14 -2
  412. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  413. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
  414. package/src/domains/providers/plugins.ts +1 -1
  415. package/src/domains/providers/resolver.ts +1 -1
  416. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  417. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  418. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  419. package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
  420. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  421. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  422. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  423. package/src/domains/providers/types/knowledge-base.ts +13 -0
  424. package/src/domains/providers/types/local-model-quirks.ts +2 -2
  425. package/src/domains/providers/types/target-descriptor.ts +3 -3
  426. package/src/domains/resources/extension.ts +1 -1
  427. package/src/domains/resources/library.ts +6 -6
  428. package/src/domains/resources/prompts/loader.ts +1 -1
  429. package/src/domains/resources/skills/content-hash.ts +7 -6
  430. package/src/domains/resources/skills/evals.ts +1 -1
  431. package/src/domains/resources/skills/install.ts +36 -12
  432. package/src/domains/resources/skills/loader.ts +39 -13
  433. package/src/domains/resources/skills/marketplace.ts +21 -2
  434. package/src/domains/resources/skills/promotion.ts +214 -0
  435. package/src/domains/safety/audit.ts +2 -2
  436. package/src/domains/safety/finish-contract.ts +2 -1
  437. package/src/domains/safety/run-effects.ts +1 -1
  438. package/src/domains/scheduling/extension.ts +4 -4
  439. package/src/domains/session/archive-readers.ts +9 -1
  440. package/src/domains/session/compaction/branch-summary.ts +4 -0
  441. package/src/domains/session/compaction/compact.ts +1 -1
  442. package/src/domains/session/compaction/tokens.ts +4 -0
  443. package/src/domains/session/context-accounting.ts +1 -1
  444. package/src/domains/session/decision-board.ts +1 -1
  445. package/src/domains/session/extension.ts +1 -1
  446. package/src/domains/session/handoff.ts +2 -2
  447. package/src/domains/session/prompt-manifest.ts +0 -5
  448. package/src/domains/session/protected-artifact-journal.ts +12 -6
  449. package/src/domains/session/retry.ts +1 -1
  450. package/src/domains/share/archive.ts +85 -36
  451. package/src/domains/toolchain/install.ts +1 -1
  452. package/src/engine/acp/adapter.ts +3 -3
  453. package/src/engine/acp/event-mapper.ts +3 -3
  454. package/src/engine/acp/server.ts +27 -26
  455. package/src/engine/acp/tool-mediator.ts +2 -2
  456. package/src/engine/acp/types.ts +1 -1
  457. package/src/engine/alcf-oauth.ts +5 -5
  458. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  459. package/src/engine/api-registry.ts +1 -1
  460. package/src/engine/apis/llamacpp-residency.ts +1 -19
  461. package/src/engine/apis/lmstudio.ts +1 -6
  462. package/src/engine/apis/ollama-native.ts +3 -3
  463. package/src/engine/apis/openai-completions.ts +2 -2
  464. package/src/engine/apis/residency.ts +3 -9
  465. package/src/engine/claude/sdk-module.ts +1 -12
  466. package/src/engine/claude/sdk-runtime.ts +6 -6
  467. package/src/engine/claude/subprocess-runtime.ts +1 -1
  468. package/src/engine/claude/tool-safety.ts +4 -4
  469. package/src/engine/loop-guard.ts +0 -5
  470. package/src/engine/session.ts +14 -7
  471. package/src/engine/tui-primitives.ts +1 -1
  472. package/src/engine/worker-events.ts +6 -6
  473. package/src/engine/worker-runtime.ts +14 -13
  474. package/src/entry/orchestrator.ts +107 -88
  475. package/src/interactive/application-controller.ts +21 -21
  476. package/src/interactive/bus-notices.ts +2 -2
  477. package/src/interactive/chat-loop.ts +8 -8
  478. package/src/interactive/chat-panel.ts +1 -1
  479. package/src/interactive/clio-editor.ts +105 -1
  480. package/src/interactive/context-activity.ts +8 -6
  481. package/src/interactive/context-meter.ts +3 -6
  482. package/src/interactive/context-overlay.ts +1 -1
  483. package/src/interactive/cost-overlay.ts +1 -1
  484. package/src/interactive/council-grid.ts +2 -2
  485. package/src/interactive/dispatch-board.ts +30 -33
  486. package/src/interactive/editor-bash.ts +21 -0
  487. package/src/interactive/editor-steer.ts +9 -4
  488. package/src/interactive/editor-submit.ts +24 -18
  489. package/src/interactive/external-editor.ts +1 -1
  490. package/src/interactive/file-reference-completion.ts +360 -0
  491. package/src/interactive/footer/dashboard.ts +15 -17
  492. package/src/interactive/footer/notifications.ts +14 -8
  493. package/src/interactive/footer/widgets.ts +2 -44
  494. package/src/interactive/interactive-application.ts +79 -59
  495. package/src/interactive/interactive-event-projection.ts +1 -1
  496. package/src/interactive/interactive-input-runtime.ts +2 -2
  497. package/src/interactive/interactive-presentation.ts +21 -16
  498. package/src/interactive/interactive-shell.ts +2 -2
  499. package/src/interactive/interactive-slash-runtime.ts +63 -17
  500. package/src/interactive/interactive-subscriptions.ts +1 -1
  501. package/src/interactive/interactive-tickers.ts +1 -1
  502. package/src/interactive/keybinding-manager.ts +4 -4
  503. package/src/interactive/layout.ts +1 -1
  504. package/src/interactive/memory-overlay.ts +2 -2
  505. package/src/interactive/modal-marker.ts +2 -21
  506. package/src/interactive/mutation-preview.ts +1 -1
  507. package/src/interactive/overlay-frame.ts +4 -12
  508. package/src/interactive/overlay-general-openers.ts +6 -2
  509. package/src/interactive/overlay-key-routing.ts +7 -7
  510. package/src/interactive/overlay-lifecycle.ts +1 -1
  511. package/src/interactive/overlay-model-selectors.ts +3 -3
  512. package/src/interactive/overlays/agents.ts +2 -2
  513. package/src/interactive/overlays/ask-user.ts +25 -11
  514. package/src/interactive/overlays/context-reset.ts +28 -4
  515. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  516. package/src/interactive/overlays/decisions.ts +4 -2
  517. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  518. package/src/interactive/overlays/handoff-review.ts +2 -2
  519. package/src/interactive/overlays/interop.ts +1 -1
  520. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  521. package/src/interactive/overlays/message-picker.ts +1 -1
  522. package/src/interactive/overlays/model-selector.ts +39 -31
  523. package/src/interactive/overlays/prompts.ts +10 -4
  524. package/src/interactive/overlays/session-selector.ts +2 -2
  525. package/src/interactive/overlays/settings.ts +339 -293
  526. package/src/interactive/overlays/side-question.ts +2 -2
  527. package/src/interactive/overlays/skills-hub.ts +8 -8
  528. package/src/interactive/overlays/tree-selector.ts +2 -2
  529. package/src/interactive/panes-runtime.ts +36 -10
  530. package/src/interactive/permission-overlay.ts +2 -2
  531. package/src/interactive/renderers/retry-status.ts +12 -4
  532. package/src/interactive/renderers/tool-execution.ts +4 -4
  533. package/src/interactive/session-transcript.ts +3 -3
  534. package/src/interactive/slash-autocomplete.ts +454 -165
  535. package/src/interactive/slash-commands.ts +279 -183
  536. package/src/interactive/slash-spec.ts +160 -17
  537. package/src/interactive/status/controller.ts +2 -2
  538. package/src/interactive/stream-pacing-policy.ts +1 -1
  539. package/src/interactive/tasks-overlay.ts +20 -13
  540. package/src/interactive/terminal-lease.ts +6 -7
  541. package/src/interactive/turn-context.ts +11 -11
  542. package/src/interactive/turn-persistence.ts +2 -2
  543. package/src/interactive/turn-prewarm.ts +2 -2
  544. package/src/interactive/turn-runtime.ts +8 -8
  545. package/src/interactive/turn-state.ts +1 -1
  546. package/src/interactive/view/artifacts.ts +12 -9
  547. package/src/interactive/view/view-overlay.ts +13 -10
  548. package/src/interactive/watch-pane.ts +38 -10
  549. package/src/interactive/welcome-dashboard.ts +15 -15
  550. package/src/interactive/worker-progress.ts +4 -4
  551. package/src/interactive/worker-receipts.ts +1 -1
  552. package/src/interactive/worker-stream.ts +1 -4
  553. package/src/interactive/yazi-bridge.ts +12 -5
  554. package/src/tools/ask-user.ts +3 -3
  555. package/src/tools/bash.ts +1 -1
  556. package/src/tools/builtin-tool-catalog.ts +1 -1
  557. package/src/tools/compete-worktrees.ts +27 -17
  558. package/src/tools/context/index.ts +15 -1
  559. package/src/tools/dispatch-admission.ts +4 -2
  560. package/src/tools/dispatch-arguments.ts +1 -1
  561. package/src/tools/dispatch-plan.ts +0 -11
  562. package/src/tools/dispatch-run-events.ts +12 -10
  563. package/src/tools/dispatch-runner.ts +11 -6
  564. package/src/tools/dispatch.ts +1 -1
  565. package/src/tools/find.ts +1 -6
  566. package/src/tools/monitor.ts +4 -4
  567. package/src/tools/observers.ts +0 -33
  568. package/src/tools/task-worktree.ts +28 -7
  569. package/src/tools/verify/authoring.ts +3 -6
  570. package/src/tools/verify/frontend.ts +1 -1
  571. package/src/tools/web-fetch.ts +1 -1
  572. package/src/worker/entry.ts +4 -3
  573. package/src/worker/protocol.ts +16 -14
  574. package/src/worker/spec-contract.ts +2 -2
  575. package/src/worker/stdin-demux.ts +2 -2
  576. package/dist/chunk-GXNLGKAB.js +0 -571
  577. package/dist/chunk-VFA6GDY5.js +0 -1625
  578. package/dist/doctor-QOA5FNY5.js +0 -313
  579. package/src/engine/apis/degraded-inference.ts +0 -95
  580. /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
  581. /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
@@ -1,6 +1,7 @@
1
- import { accessSync, constants, mkdirSync } from "node:fs";
1
+ import { accessSync, constants } from "node:fs";
2
+ import { join } from "node:path";
2
3
  import { readSettings } from "../core/config.js";
3
- import { runEventJournalRoot } from "../domains/dispatch/run-event-journal.js";
4
+ import { resolveClioDirs } from "../core/xdg.js";
4
5
  import type { DoctorFinding } from "../domains/lifecycle/doctor.js";
5
6
  import { detectMux, MUX_METHOD_MIN_PROTOCOL, resolveSocketCandidates } from "../domains/mux/index.js";
6
7
  import { describeResolution, findPinnedTool, toolStatus } from "../domains/toolchain/index.js";
@@ -8,10 +9,11 @@ import { describeResolution, findPinnedTool, toolStatus } from "../domains/toolc
8
9
  /**
9
10
  * The panes section of `clio-coder doctor`.
10
11
  *
11
- * Five rows, in the order an operator debugs them: what mode the pane layer
12
+ * Six rows, in the order an operator debugs them: what mode the pane layer
12
13
  * resolved to, whether the socket answered, whether the server is new enough
13
- * for the methods phase 3 uses, where the pane host binary resolves, and
14
- * whether the journal directory the viewer reads is writable.
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.
15
17
  *
16
18
  * No row is an error. Panes are optional: an operator who never wanted them has
17
19
  * a healthy install without them, and doctor's exit code answers "is this
@@ -24,11 +26,8 @@ const PANE_HOST_TOOL_ID = "herdr";
24
26
  /** Highest protocol any method Clio drives requires, for the version row. */
25
27
  const REQUIRED_PROTOCOL = Math.max(...Object.values(MUX_METHOD_MIN_PROTOCOL));
26
28
 
27
- function journalWritabilityFinding(root = runEventJournalRoot()): DoctorFinding {
29
+ function journalWritabilityFinding(root = join(resolveClioDirs().state, "runs")): DoctorFinding {
28
30
  try {
29
- // The viewer reads this tree and the journal writes it, so the useful
30
- // question is whether it can exist and be written, not whether it does.
31
- mkdirSync(root, { recursive: true });
32
31
  accessSync(root, constants.W_OK);
33
32
  return { ok: true, name: "panes journal dir", detail: `${root} is writable` };
34
33
  } catch (error) {
@@ -36,15 +35,28 @@ function journalWritabilityFinding(root = runEventJournalRoot()): DoctorFinding
36
35
  ok: true,
37
36
  level: "warn",
38
37
  name: "panes journal dir",
39
- detail: `${root} is not writable (${error instanceof Error ? error.message : String(error)}); \`clio-coder fleet view\` will have no transcript to follow`,
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`,
40
39
  };
41
40
  }
42
41
  }
43
42
 
44
43
  export async function panesFindings(env: NodeJS.ProcessEnv = process.env): Promise<DoctorFinding[]> {
45
44
  let enabled: "auto" | "embedded" | "off" = "off";
45
+ let layoutRow: DoctorFinding = {
46
+ ok: true,
47
+ name: "panes layout",
48
+ detail: "off",
49
+ };
46
50
  try {
47
- enabled = readSettings().panes.enabled;
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
+ }
48
60
  } catch {
49
61
  // An unreadable settings file is already reported by the settings row;
50
62
  // this section answers on the shipped default (off) rather than throwing.
@@ -59,10 +71,9 @@ export async function panesFindings(env: NodeJS.ProcessEnv = process.env): Promi
59
71
  {
60
72
  ok: true,
61
73
  name: "panes mode",
62
- detail:
63
- "off by choice (panes.enabled=off); start `clio-coder --with-panes` for one session, or set panes.enabled=auto",
74
+ detail: "off by choice",
64
75
  },
65
- journalWritabilityFinding(),
76
+ layoutRow,
66
77
  ];
67
78
  }
68
79
 
@@ -70,6 +81,7 @@ export async function panesFindings(env: NodeJS.ProcessEnv = process.env): Promi
70
81
  // answer that boot would get. It opens a socket and nothing else: no file is
71
82
  // created and no pane is touched.
72
83
  const { detection, client } = await detectMux({ enabled, env });
84
+ const snapshot = client ? await client.snapshot().catch(() => null) : null;
73
85
  await client?.close().catch(() => undefined);
74
86
 
75
87
  const candidates = detection.candidates.length > 0 ? detection.candidates : resolveSocketCandidates(env);
@@ -119,6 +131,26 @@ export async function panesFindings(env: NodeJS.ProcessEnv = process.env): Promi
119
131
  },
120
132
  );
121
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
+ });
122
154
  findings.push(journalWritabilityFinding());
123
155
  return findings;
124
156
  }
@@ -7,7 +7,19 @@ import {
7
7
  } from "../domains/mux/index.js";
8
8
  import { describeResolution, toolStatuses } from "../domains/toolchain/index.js";
9
9
 
10
- function yaziProfileFinding(): DoctorFinding {
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
+ }
11
23
  try {
12
24
  const profile = inspectCurrentYaziProfile();
13
25
  return {
@@ -43,15 +55,24 @@ function yaziProfileFinding(): DoctorFinding {
43
55
  * being used, and a row that only said "not found" would send them looking for
44
56
  * a binary that is right there on their PATH.
45
57
  */
46
- export function toolchainFindings(): DoctorFinding[] {
58
+ export function toolchainFindings(options: ToolchainFindingOptions = {}): DoctorFinding[] {
59
+ const panesEnabled = options.panesEnabled ?? true;
60
+ const filesEnabled = options.filesEnabled ?? true;
47
61
  const tools = toolStatuses().map((status) => ({
48
62
  ok: true,
49
63
  name: `external tool ${status.id}`,
50
- // The rejection and the remedy both live inside the shared resolution
51
- // sentence, so this row and `clio-coder tools status` cannot describe the
52
- // same machine differently.
53
- detail: describeResolution(status),
54
- level: status.resolution.source === "none" ? ("warn" as const) : ("ok" as const),
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),
55
76
  }));
56
- return [...tools, yaziProfileFinding()];
77
+ return [...tools, yaziProfileFinding(filesEnabled)];
57
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,6 +8,7 @@ import {
7
8
  runDoctorModelChecks,
8
9
  runDoctorRuntimeChecks,
9
10
  } from "../domains/lifecycle/doctor.js";
11
+ import { namingFootprintFindings } from "./doctor-naming.js";
10
12
  import { panesFindings } from "./doctor-panes.js";
11
13
  import { stateStorageFinding } from "./doctor-state-size.js";
12
14
  import { toolchainFindings } from "./doctor-toolchain.js";
@@ -38,6 +40,16 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
38
40
  // gets every check on the home it just built.
39
41
  const untouched = !fix && isUninitializedHome();
40
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
+ }
41
53
  const storageChecks = untouched ? [] : [stateStorageFinding()];
42
54
  const runtimeChecks = await runDoctorRuntimeChecks();
43
55
  // Every model pointer is checked against what its target advertises, so a
@@ -54,11 +66,12 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
54
66
  // Resolution reads PATH and the vendor root and creates nothing, but on an
55
67
  // untouched home there is no vendor root to look at and the answer would be
56
68
  // "none" for every row regardless, so the sweep stays with the others.
57
- const toolChecks = untouched ? [] : toolchainFindings();
69
+ const toolChecks = untouched ? [] : toolchainFindings({ panesEnabled, filesEnabled });
58
70
  // The pane sweep pings a socket and reads PATH; it creates nothing except the
59
71
  // journal directory it is asked about, which is inside the state root doctor
60
72
  // has already agreed not to build on an untouched home.
61
73
  const paneChecks = untouched ? [] : await panesFindings();
74
+ const namingChecks = namingFootprintFindings({ fix, yaziEnabled: filesEnabled });
62
75
  const all = [
63
76
  ...findings,
64
77
  ...storageChecks,
@@ -68,6 +81,7 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
68
81
  ...fleetChecks,
69
82
  ...toolChecks,
70
83
  ...paneChecks,
84
+ ...namingChecks,
71
85
  ];
72
86
  const ok = all.every((f) => f.ok);
73
87
  if (json) {
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * An eval artifact is the largest single host-only payload in this harness, and
12
12
  * the reason is worth stating rather than discovering. `results[].artifacts`
13
- * holds whatever the runner attached, which for the `clio-run` runner is the
13
+ * holds whatever the runner attached, which for the `clio-coder-run` runner is the
14
14
  * entire session transcript: the operator's task text, every tool argument and
15
15
  * result, the model's replies, provider endpoint URLs, error prose, and the
16
16
  * prepared workspace path. There is no width at which a projection of that is
@@ -107,8 +107,8 @@ export interface EvalInventoryReport {
107
107
  * needs, and the ordinal reveals nothing about the values behind it.
108
108
  */
109
109
  readonly servingGroup: number;
110
- readonly clioVersion: string | null;
111
- readonly clioCommit: string | null;
110
+ readonly clioCoderVersion: string | null;
111
+ readonly clioCoderCommit: string | null;
112
112
  readonly platform: string | null;
113
113
  readonly node: string | null;
114
114
  readonly matrix: {
@@ -348,15 +348,15 @@ function projectReport(
348
348
  const serving = evalServingConfigurationOf(artifact);
349
349
  const { counts, failureClasses, behaviorOutcomes } = countResults(artifact.results);
350
350
  const { scenarios, truncated, dropped } = projectScenarios(artifact);
351
- const version = artifact.clio.version;
352
- const commit = artifact.clio.commit;
351
+ const version = artifact.clioCoder.version;
352
+ const commit = artifact.clioCoder.commit;
353
353
  return {
354
354
  evalId,
355
355
  startedAt,
356
356
  suiteId: identifier(artifact.suite.id) ?? "unavailable",
357
357
  servingGroup,
358
- clioVersion: VERSION_PATTERN.test(version) ? version : null,
359
- clioCommit: commit !== null && COMMIT_PATTERN.test(commit) ? commit : null,
358
+ clioCoderVersion: VERSION_PATTERN.test(version) ? version : null,
359
+ clioCoderCommit: commit !== null && COMMIT_PATTERN.test(commit) ? commit : null,
360
360
  platform: identifier(artifact.environment.platform),
361
361
  node: identifier(artifact.environment.node),
362
362
  matrix: {
@@ -394,7 +394,7 @@ function projectReport(
394
394
  };
395
395
  }
396
396
 
397
- export async function evalInventorySnapshot(
397
+ async function evalInventorySnapshot(
398
398
  now: () => number = Date.now,
399
399
  dataDir: string = clioDataDir(),
400
400
  ): Promise<EvalInventorySnapshot> {
@@ -46,7 +46,7 @@ export interface EvidenceDetailSnapshot {
46
46
  readonly runsTruncated: boolean;
47
47
  }
48
48
 
49
- export async function evidenceDetailSnapshot(
49
+ async function evidenceDetailSnapshot(
50
50
  evidenceId: string,
51
51
  now: () => number = Date.now,
52
52
  dataDir: string = clioDataDir(),
@@ -110,7 +110,7 @@ function byNewest(a: EvidenceOverview, b: EvidenceOverview): number {
110
110
  return (Date.parse(b.generatedAt) || 0) - (Date.parse(a.generatedAt) || 0);
111
111
  }
112
112
 
113
- export async function evidenceInventorySnapshot(
113
+ async function evidenceInventorySnapshot(
114
114
  now: () => number = Date.now,
115
115
  dataDir: string = clioDataDir(),
116
116
  ): Promise<EvidenceInventorySnapshot> {
@@ -47,7 +47,7 @@ export type { GateDecisionReason, GateTopologyDecision };
47
47
  * different operator states, so the flag is reported rather than inferred from
48
48
  * an empty list.
49
49
  */
50
- export function fleetDecisionsSnapshot(now: () => number = Date.now): FleetDecisionsSnapshot {
50
+ function fleetDecisionsSnapshot(now: () => number = Date.now): FleetDecisionsSnapshot {
51
51
  const topology = gateTopology();
52
52
  return {
53
53
  version: 1,
@@ -204,7 +204,7 @@ function evidenceProjection(text: string): FleetInspectRun["evidence"] {
204
204
  }
205
205
 
206
206
  /** Pure command payload builder, exported so the fixed CLI contract is testable without subprocess output capture. */
207
- export function fleetInspectSnapshot(now: () => number = Date.now): FleetInspectSnapshot {
207
+ function fleetInspectSnapshot(now: () => number = Date.now): FleetInspectSnapshot {
208
208
  const ledgerRows = openLedger().list();
209
209
  const selected = ledgerRows.slice(0, FLEET_INSPECT_MAX_RUNS);
210
210
  // The council window is deliberately wider than the run window. A single
@@ -33,7 +33,7 @@ export function inspectFleet(name: string, vars?: Readonly<Record<string, string
33
33
  const resolved = new Set<string>();
34
34
  const settings = readSettings();
35
35
  const targetIds = new Set(settings.targets.map((target) => target.id));
36
- const profileIds = new Set(Object.keys(settings.workers?.profiles ?? {}));
36
+ const profileIds = new Set(Object.keys(settings.fleet?.profiles ?? {}));
37
37
  for (const step of contract.steps) {
38
38
  const positions =
39
39
  step.kind === "loop"
@@ -83,7 +83,7 @@ function loadReceipt(envelope: RunEnvelope): RunReceipt | null {
83
83
  }
84
84
 
85
85
  /** Pure payload builder, exported so the fixed contract is testable without subprocess capture. */
86
- export function fleetVerifySnapshot(runId: string, now: () => number = Date.now): FleetVerifySnapshot {
86
+ function fleetVerifySnapshot(runId: string, now: () => number = Date.now): FleetVerifySnapshot {
87
87
  const envelope = openLedger().get(runId);
88
88
  if (envelope === null) throw new FleetVerifyUnknownRunError(`unknown run '${runId}'`);
89
89
  const verifiedAt = new Date(now()).toISOString();
@@ -47,7 +47,7 @@ import { WRITE_BOUNDARY_VIOLATION_REASON } from "../domains/dispatch/write-bound
47
47
  import { formatTrustSummaryLine } from "../domains/evidence/trust-projection.js";
48
48
  import { inspectRunReceiptTrustStatus } from "../domains/evidence/trust-status.js";
49
49
  import { sanitizeCallTargetText } from "../domains/safety/call-target.js";
50
- import { truncateToWidth } from "../engine/tui-primitives.js";
50
+ import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../engine/tui-primitives.js";
51
51
 
52
52
  const HELP = `clio-coder fleet view <runId|fleetRootId> [--follow]
53
53
  clio-coder fleet view --watch <selection-file>
@@ -62,7 +62,7 @@ run event journal, and the sealed receipt once it exists.
62
62
 
63
63
  Without --follow the current snapshot is printed and the command exits.
64
64
  The transcript comes from <state>/runs/<runId>/events.ndjson, which the
65
- orchestrator writes when panes.journal is on (the default). A run dispatched
65
+ orchestrator writes when fleet.history.journal is on (the default). A run dispatched
66
66
  with the journal off shows its ledger and receipt but no transcript.
67
67
 
68
68
  Given the fleet root id that \`fleet run\` prints (fleet-<hex>), this prints the
@@ -126,6 +126,11 @@ function sanitizeBounded(value: string, maxWidth: number): string {
126
126
  return sanitizeCallTargetText(truncateToWidth(sanitized, maxWidth, "…", false));
127
127
  }
128
128
 
129
+ /** The ANSI-aware TUI truncator appends reset codes; stdout snapshots are plain text. */
130
+ function truncatePlain(value: string, width: number): string {
131
+ return truncateToWidth(value, width, "…", false).replaceAll("\u001B[0m", "");
132
+ }
133
+
129
134
  function receiptPathFor(run: RunEnvelope): string {
130
135
  return run.receiptPath ?? join(clioStateDir(), "receipts", `${run.id}.json`);
131
136
  }
@@ -199,7 +204,7 @@ export interface LoadRunViewOptions {
199
204
  * first, then a unique prefix. An ambiguous prefix resolves to nothing so the
200
205
  * caller can say which ids it matched.
201
206
  */
202
- export function resolveRunId(runId: string): { runId: string } | { candidates: string[] } {
207
+ function resolveRunId(runId: string): { runId: string } | { candidates: string[] } {
203
208
  const ledger = openLedger();
204
209
  if (ledger.get(runId) !== null) return { runId };
205
210
  const candidates = ledger
@@ -268,44 +273,58 @@ function clockOf(iso: string): string {
268
273
  return time.length === 8 ? time : iso.slice(0, 8);
269
274
  }
270
275
 
276
+ /** Wrap a viewer value inside the columns left by its one-time field label. */
277
+ function wrapViewerValue(prefix: string, value: string, columns: number): string[] {
278
+ const prefixWidth = visibleWidth(prefix);
279
+ const valueWidth = Math.max(1, columns - prefixWidth);
280
+ return wrapTextWithAnsi(value, valueWidth).map(
281
+ (line, index) => `${index === 0 ? prefix : " ".repeat(prefixWidth)}${line}`,
282
+ );
283
+ }
284
+
271
285
  /**
272
286
  * The whole viewer surface as lines. Pure: given the same model and width it
273
287
  * returns the same strings, which is what lets the data-source test assert the
274
288
  * header and outcome without a PTY.
275
289
  */
276
- export function renderRunView(model: RunViewModel, width: number = DEFAULT_WIDTH): string[] {
290
+ function renderRunView(model: RunViewModel, width: number = DEFAULT_WIDTH): string[] {
277
291
  const columns = Math.max(MIN_WIDTH, width);
278
292
  const rule = "─".repeat(columns);
279
293
  const lines: string[] = [];
280
- lines.push(truncateToWidth(`run ${model.runId} ${model.agentId}`, columns, "…", false));
294
+ lines.push(truncatePlain(`run ${model.runId} ${model.agentId}`, columns));
281
295
  lines.push(
282
- truncateToWidth(
296
+ truncatePlain(
283
297
  `model ${model.model} target ${model.target} node ${model.node} phase ${model.phase} elapsed ${formatElapsed(model.elapsedMs)}`,
284
298
  columns,
285
- "…",
286
- false,
287
299
  ),
288
300
  );
289
301
  if (model.task !== undefined) {
290
- lines.push(truncateToWidth(`task ${model.task}`, columns, "…", false));
302
+ lines.push(...wrapViewerValue("task ", model.task, columns));
291
303
  }
292
304
  lines.push(rule);
293
305
  if (!model.journalPresent) {
294
306
  lines.push("no event journal for this run.");
295
- lines.push(`expected ${model.journalPath} (panes.journal may have been off when it ran)`);
307
+ lines.push(
308
+ ...wrapViewerValue(
309
+ "expected ",
310
+ `${model.journalPath} (fleet.history.journal may have been off when it ran)`,
311
+ columns,
312
+ ),
313
+ );
296
314
  } else if (model.transcript.length === 0) {
297
315
  lines.push("journal is empty; no events recorded yet.");
298
316
  } else {
299
317
  if (model.transcriptTruncated) lines.push("… earlier events dropped (journal truncated)");
300
318
  for (const entry of model.transcript) {
301
319
  const head = `${clockOf(entry.at)} ${entry.label}`;
302
- lines.push(truncateToWidth(entry.detail === undefined ? head : `${head}: ${entry.detail}`, columns, "…", false));
320
+ if (entry.detail === undefined) lines.push(truncatePlain(head, columns));
321
+ else lines.push(...wrapViewerValue(`${head}: `, entry.detail, columns));
303
322
  }
304
323
  }
305
324
  lines.push(rule);
306
- lines.push(truncateToWidth(`evidence ${model.evidence}`, columns, "…", false));
325
+ lines.push(...wrapViewerValue("evidence ", model.evidence, columns));
307
326
  if (model.receiptPath !== null) {
308
- lines.push(truncateToWidth(`receipt ${model.receiptPath}`, columns, "…", false));
327
+ lines.push(truncatePlain(`receipt ${model.receiptPath}`, columns));
309
328
  }
310
329
  const outcome =
311
330
  model.outcome === null
@@ -315,7 +334,7 @@ export function renderRunView(model: RunViewModel, width: number = DEFAULT_WIDTH
315
334
  : model.outcomeDetail === null || model.outcomeDetail.length === 0
316
335
  ? model.outcome
317
336
  : `${model.outcome} (${sanitizeBounded(model.outcomeDetail, DETAIL_MAX_WIDTH)})`;
318
- lines.push(truncateToWidth(`outcome ${outcome}`, columns, "…", false));
337
+ lines.push(...wrapViewerValue("outcome ", outcome, columns));
319
338
  return lines;
320
339
  }
321
340
 
@@ -326,7 +345,7 @@ export function renderRunView(model: RunViewModel, width: number = DEFAULT_WIDTH
326
345
  * the first is the pane before any worker was entered, the second is a queued
327
346
  * run the operator selected before its ledger row landed.
328
347
  */
329
- export function renderWatchView(
348
+ function renderWatchView(
330
349
  runId: string | null,
331
350
  model: RunViewModel | null,
332
351
  width: number = DEFAULT_WIDTH,
@@ -415,7 +434,7 @@ function fleetRunsDir(): string {
415
434
  * first, then a unique prefix over the durable fleet-run records. An ambiguous
416
435
  * prefix resolves to nothing so the caller can name what it matched.
417
436
  */
418
- export function resolveFleetRootId(token: string): { rootId: string } | { candidates: string[] } {
437
+ function resolveFleetRootId(token: string): { rootId: string } | { candidates: string[] } {
419
438
  if (readFleetRun(token) !== null) return { rootId: token };
420
439
  let entries: string[];
421
440
  try {
@@ -488,18 +507,16 @@ export function loadFleetRunViewModel(rootId: string, options: { now?: () => num
488
507
  * The step index as lines. Pure, for the same reason {@link renderRunView} is:
489
508
  * asserting the strings is asserting what an operator sees.
490
509
  */
491
- export function renderFleetRunView(model: FleetRunViewModel, width: number = DEFAULT_WIDTH): string[] {
510
+ function renderFleetRunView(model: FleetRunViewModel, width: number = DEFAULT_WIDTH): string[] {
492
511
  const columns = Math.max(MIN_WIDTH, width);
493
512
  const rule = "─".repeat(columns);
494
513
  const lines: string[] = [];
495
- lines.push(truncateToWidth(`fleet ${sanitizeBounded(model.fleet, 64)} root ${model.rootId}`, columns, "…", false));
514
+ lines.push(truncatePlain(`fleet ${sanitizeBounded(model.fleet, 64)} root ${model.rootId}`, columns));
496
515
  const resumed = model.resumedFrom === null ? "" : ` resumed from ${sanitizeBounded(model.resumedFrom, 64)}`;
497
516
  lines.push(
498
- truncateToWidth(
517
+ truncatePlain(
499
518
  `started ${model.startedAt} elapsed ${formatElapsed(model.elapsedMs)} ${model.recordedSteps} of ${model.plannedSteps} steps recorded${model.running ? " (running)" : ""}${resumed}`,
500
519
  columns,
501
- "…",
502
- false,
503
520
  ),
504
521
  );
505
522
  lines.push(rule);
@@ -518,7 +535,7 @@ export function renderFleetRunView(model: FleetRunViewModel, width: number = DEF
518
535
  for (const row of rows) {
519
536
  const head = `${row.step.padEnd(stepWidth)} ${row.runId.padEnd(runWidth)} ${row.outcome.padEnd(outcomeWidth)}`;
520
537
  const text = row.tail.length === 0 ? head : `${head} ${sanitizeBounded(row.tail, DETAIL_MAX_WIDTH)}`;
521
- lines.push(truncateToWidth(text.trimEnd(), columns, "…", false));
538
+ lines.push(truncatePlain(text.trimEnd(), columns));
522
539
  }
523
540
  }
524
541
  lines.push(rule);
@@ -620,7 +637,7 @@ function applyViewDirs(dirs: ParsedViewArgs["dirs"]): void {
620
637
  * interval, never a crash; the writer (src/interactive/watch-pane.ts) replaces
621
638
  * the file atomically.
622
639
  */
623
- export function readWatchSelection(path: string): string | null {
640
+ function readWatchSelection(path: string): string | null {
624
641
  let raw: string;
625
642
  try {
626
643
  raw = readFileSync(path, "utf8");
package/src/cli/fleet.ts CHANGED
@@ -117,7 +117,7 @@ Notes:
117
117
  only available inside the process that owns the run.
118
118
  view is read-only and shares no memory with the orchestrator, so it follows a
119
119
  run from a second terminal or over SSH. Its transcript comes from the run
120
- event journal, written when panes.journal is on (the default). Handed the
120
+ event journal, written when fleet.history.journal is on (the default). Handed the
121
121
  fleet-<hex> root id that run prints, it lists that run's steps instead.
122
122
  drain preserves running work. Repeat it to renew the one-hour expiry; resume
123
123
  clears it early. The expiry prevents an abandoned drain from wedging Clio.
@@ -268,7 +268,7 @@ function contractAgents(
268
268
 
269
269
  function preflightFleet(contract: FleetContract, deps: FleetPreflightDeps): string | null {
270
270
  const targets = new Set(deps.settings.targets.map((target) => target.id));
271
- const profiles = new Set(Object.keys(deps.settings.workers?.profiles ?? {}));
271
+ const profiles = new Set(Object.keys(deps.settings.fleet?.profiles ?? {}));
272
272
  const checkRoute = (id: string, route: { target?: string; profile?: string }): string | null => {
273
273
  if (route.target !== undefined && !targets.has(route.target)) {
274
274
  return `unknown target '${route.target}' at step '${id}'`;
@@ -376,7 +376,7 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
376
376
  // Install `panes.journal` the same way the interactive composition root
377
377
  // does, so a fleet run honours the setting without the journal ever reading
378
378
  // settings.yaml from the dispatch event path.
379
- configureRunEventJournal(fleetSettings.panes.journal);
379
+ configureRunEventJournal(fleetSettings.fleet.history.journal);
380
380
  const roleFacts = agentRoleFactsResolver((id) => agents.getSpec(id));
381
381
  const preflightError = preflightFleet(contract, {
382
382
  agents,
@@ -504,7 +504,7 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
504
504
  fleetRootId,
505
505
  dispatch,
506
506
  agents: { getSpec: (agentId) => agents.getSpec(agentId) },
507
- attributionEnabled: config?.get().attribution.gitCommits ?? true,
507
+ attributionEnabled: config?.get().integrations.git.commitAttribution ?? true,
508
508
  vars,
509
509
  ...(resume !== undefined ? { resume } : {}),
510
510
  onStepSettled(step) {
@@ -675,7 +675,7 @@ function admissionStatus(drain: CapacityDrain | null): FleetAdmissionStatus {
675
675
  return { state: "draining", ...drain };
676
676
  }
677
677
 
678
- export function statusSnapshot(): {
678
+ function statusSnapshot(): {
679
679
  generatedAt: string;
680
680
  admission: FleetAdmissionStatus;
681
681
  running: Array<Record<string, unknown>>;
@@ -813,6 +813,9 @@ function runAdmissionControl(command: "drain" | "resume", args: ReadonlyArray<st
813
813
 
814
814
  export async function runFleetCommand(args: ReadonlyArray<string>): Promise<number> {
815
815
  const sub = args[0];
816
+ if (sub === "view" && (args.includes("--help") || args.includes("-h"))) {
817
+ return (await import("./fleet-view.js")).runFleetView(args.slice(1));
818
+ }
816
819
  // Asking for help is not a usage error, and it is not an argument either.
817
820
  // `status|drain|resume --help` answered `unknown flag: --help` on stderr with
818
821
  // status 2, `run --help` answered its usage the same way, and `list --help`
@@ -79,10 +79,10 @@ export interface InteropInspectSnapshot {
79
79
  * have already loaded, and this command loads neither. Reporting the structural
80
80
  * zero that would result would state a fact this read did not establish.
81
81
  */
82
- export async function interopInspectSnapshot(now: () => number = Date.now): Promise<InteropInspectSnapshot> {
82
+ async function interopInspectSnapshot(now: () => number = Date.now): Promise<InteropInspectSnapshot> {
83
83
  const report = await detectInteropAgents({ cwd: process.cwd(), probeVersion: false });
84
84
  const settings = readSettings();
85
- const configured = new Set(settings.delegation.agents.map((agent) => agent.id));
85
+ const configured = new Set(settings.integrations.externalAgents.entries.map((agent) => agent.id));
86
86
  const agents: InteropInspectAgent[] = [];
87
87
  for (const record of report.agents) {
88
88
  const kind = interopAgentKind(record.kind);
package/src/cli/models.ts CHANGED
@@ -117,7 +117,7 @@ export async function runModelsCommand(args: ReadonlyArray<string>): Promise<num
117
117
  return 0;
118
118
  }
119
119
 
120
- export function collectRows(entries: ReadonlyArray<TargetStatus>, providers: ProvidersContract): ModelRow[] {
120
+ function collectRows(entries: ReadonlyArray<TargetStatus>, providers: ProvidersContract): ModelRow[] {
121
121
  const rows: ModelRow[] = [];
122
122
  for (const status of entries) {
123
123
  const runtimeId = status.runtime?.id ?? status.target.runtime;
@@ -188,7 +188,7 @@ function compactTokenCount(value: number): string {
188
188
  return String(value);
189
189
  }
190
190
 
191
- export function emptyModelsMessage(
191
+ function emptyModelsMessage(
192
192
  args: Pick<ModelArgs, "search" | "target">,
193
193
  configuredTargets: number,
194
194
  matchedTargets: number,
@@ -217,7 +217,7 @@ function truncateModelId(id: string): string {
217
217
  return `${id.slice(0, MODEL_ID_WIDTH_CAP - 3)}...`;
218
218
  }
219
219
 
220
- export function modelTableLines(rows: ReadonlyArray<ModelRow>): string[] {
220
+ function modelTableLines(rows: ReadonlyArray<ModelRow>): string[] {
221
221
  const includeState = rows.some((row) => row.state && row.state !== "-");
222
222
  const headers = includeState
223
223
  ? ["target", "runtime", "model", "state", "caps", "ctx", "max"]
@@ -365,7 +365,7 @@ async function recordHeadlessMainAgentReceipt(input: {
365
365
  staticCompositionHash: snapshot.staticCompositionHash,
366
366
  promptSignature: snapshot.promptSignature,
367
367
  toolSignature: snapshot.toolSignature,
368
- clioVersion: readClioVersion(),
368
+ clioCoderVersion: readClioVersion(),
369
369
  piMonoVersion: readPiMonoVersion(),
370
370
  platform: process.platform,
371
371
  nodeVersion: process.version,
package/src/cli/reset.ts CHANGED
@@ -131,7 +131,7 @@ function report(label: string, path: string): void {
131
131
  * `scratch/`, and every dispatch artifact written since that sentence was
132
132
  * typed. A list nobody has to maintain cannot drift from what the removal takes.
133
133
  */
134
- export function rootContents(path: string): string[] {
134
+ function rootContents(path: string): string[] {
135
135
  let entries: Dirent[];
136
136
  try {
137
137
  entries = readdirSync(path, { withFileTypes: true });